Bug Summary

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

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name packet-ieee80211.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -ffloat16-excess-precision=fast -fbfloat16-excess-precision=fast -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/builds/wireshark/wireshark/build -fcoverage-compilation-dir=/builds/wireshark/wireshark/build -resource-dir /usr/lib/llvm-21/lib/clang/21 -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /builds/wireshark/wireshark/epan/dissectors -isystem /builds/wireshark/wireshark/build/epan/dissectors -isystem /usr/include/mit-krb5 -isystem /usr/include/libxml2 -isystem /builds/wireshark/wireshark/epan -D G_DISABLE_DEPRECATED -D G_DISABLE_SINGLE_INCLUDES -D WS_BUILD_DLL -D WS_DEBUG -D WS_DEBUG_UTF_8 -I /builds/wireshark/wireshark/build -I /builds/wireshark/wireshark -I /builds/wireshark/wireshark/include -D _GLIBCXX_ASSERTIONS -internal-isystem /usr/lib/llvm-21/lib/clang/21/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fmacro-prefix-map=/builds/wireshark/wireshark/= -fmacro-prefix-map=/builds/wireshark/wireshark/build/= -fmacro-prefix-map=../= -Wno-format-nonliteral -std=gnu11 -ferror-limit 19 -fvisibility=hidden -fwrapv -fwrapv-pointer -fstrict-flex-arrays=3 -stack-protector 2 -fstack-clash-protection -fcf-protection=full -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fexceptions -fcolor-diagnostics -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /builds/wireshark/wireshark/sbout/2025-12-10-100316-3573-1 -x c /builds/wireshark/wireshark/epan/dissectors/packet-ieee80211.c
1/* packet-ieee80211.c
2 * Routines for Wireless LAN (IEEE 802.11) dissection
3 * Copyright 2000, Axis Communications AB
4 *
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <[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/* association_counter is assigned in authentication for AKM 24/MLD */
181static uint32_t assoc_counter_in_auth;
182
183/* Treat all Wi-Fi frames as being S1G frames where it is important */
184static bool_Bool treat_as_s1g;
185
186/* Table for reassembly of fragments. */
187static reassembly_table wlan_reassembly_table;
188
189/* Statistical data */
190static struct _wlan_stats wlan_stats;
191
192/*-------------------------------------
193 * UAT for WEP decoder
194 *-------------------------------------
195 */
196static uat_wep_key_record_t *uat_wep_key_records;
197static uat_t *wep_uat;
198static unsigned num_wepkeys_uat;
199
200static void *
201uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U___attribute__((unused)))
202{
203 uat_wep_key_record_t* new_key = (uat_wep_key_record_t *)n;
204 const uat_wep_key_record_t* old_key = (const uat_wep_key_record_t *)o;
205
206 new_key->string = g_strdup(old_key->string)g_strdup_inline (old_key->string);
207
208 return new_key;
209}
210
211static bool_Bool
212uat_wep_key_record_update_cb(void* r, char** err)
213{
214 uat_wep_key_record_t* rec = (uat_wep_key_record_t *)r;
215 decryption_key_t* dk;
216 unsigned dk_type;
217
218 if (rec->string == NULL((void*)0)) {
219 *err = g_strdup("Key can't be blank")g_strdup_inline ("Key can't be blank");
220 return false0;
221 }
222
223 *err = NULL((void*)0);
224 g_strstrip(rec->string)g_strchomp (g_strchug (rec->string));
225 dk = parse_key_string(rec->string, rec->key, err);
226
227 if (dk != NULL((void*)0)) {
228 dk_type = dk->type;
229 free_key_string(dk);
230 switch (dk_type) {
231 case DOT11DECRYPT_KEY_TYPE_WEP0:
232 case DOT11DECRYPT_KEY_TYPE_WEP_401:
233 case DOT11DECRYPT_KEY_TYPE_WEP_1042:
234 if (rec->key != DOT11DECRYPT_KEY_TYPE_WEP0) {
235 *err = g_strdup("Invalid WEP key format")g_strdup_inline ("Invalid WEP key format");
236 return false0;
237 }
238 break;
239 case DOT11DECRYPT_KEY_TYPE_WPA_PWD3:
240 if (rec->key != DOT11DECRYPT_KEY_TYPE_WPA_PWD3) {
241 *err = g_strdup("Invalid WPA_PWD key format")g_strdup_inline ("Invalid WPA_PWD key format");
242 return false0;
243 }
244 break;
245 case DOT11DECRYPT_KEY_TYPE_WPA_PSK4:
246 if (rec->key != DOT11DECRYPT_KEY_TYPE_WPA_PSK4) {
247 *err = g_strdup("Invalid WPA_PSK key format")g_strdup_inline ("Invalid WPA_PSK key format");
248 return false0;
249 }
250 break;
251 case DOT11DECRYPT_KEY_TYPE_TK6:
252 if (rec->key != DOT11DECRYPT_KEY_TYPE_TK6) {
253 *err = g_strdup("Invalid TK key format")g_strdup_inline ("Invalid TK key format");
254 return false0;
255 }
256 break;
257 case DOT11DECRYPT_KEY_TYPE_MSK7:
258 if (rec->key != DOT11DECRYPT_KEY_TYPE_MSK7) {
259 *err = g_strdup("Invalid MSK key format")g_strdup_inline ("Invalid MSK key format");
260 return false0;
261 }
262 break;
263 default:
264 *err = g_strdup("Invalid key format")g_strdup_inline ("Invalid key format");
265 return false0;
266 }
267 } else {
268 if (*err == NULL((void*)0)) {
269 *err = g_strdup("Invalid key format")g_strdup_inline ("Invalid key format");
270 }
271 return false0;
272 }
273 return true1;
274}
275
276static void
277uat_wep_key_record_free_cb(void*r)
278{
279 uat_wep_key_record_t* key = (uat_wep_key_record_t *)r;
280 g_free(key->string);
281}
282
283UAT_VS_DEF(uat_wep_key_records, key, uat_wep_key_record_t, uint8_t, 0, STRING_KEY_TYPE_WEP)static void uat_wep_key_records_key_set_cb(void* rec, const char
* buf, unsigned len, const void* vs, const void* u2 __attribute__
((unused))) { unsigned i; char* str = g_strndup(buf,len); const
char* cstr; ((uat_wep_key_record_t*)rec)->key = 0; for(i=
0; ( cstr = ((const value_string*)vs)[i].strptr ) ;i++) { if (
(strcmp ((const char *) (cstr), (const char *) (str)) == 0)) {
((uat_wep_key_record_t*)rec)->key = (uint8_t)((const value_string
*)vs)[i].value; g_free(str); return; } } g_free(str); } static
void uat_wep_key_records_key_tostr_cb(void* rec, char** out_ptr
, unsigned* out_len, const void* vs, const void* u2 __attribute__
((unused))) { unsigned i; for(i=0;((const value_string*)vs)[i
].strptr;i++) { if ( ((const value_string*)vs)[i].value == ((
uat_wep_key_record_t*)rec)->key ) { *out_ptr = g_strdup_inline
(((const value_string*)vs)[i].strptr); *out_len = (unsigned)
strlen(*out_ptr); return; } } *out_ptr = g_strdup_inline ("wep"
); *out_len = (unsigned)strlen("wep"); }
284UAT_CSTRING_CB_DEF(uat_wep_key_records, string, uat_wep_key_record_t)static void uat_wep_key_records_string_set_cb(void* rec, const
char* buf, unsigned len, const void* u1 __attribute__((unused
)), const void* u2 __attribute__((unused))) { char* new_buf =
g_strndup(buf,len); g_free((((uat_wep_key_record_t*)rec)->
string)); (((uat_wep_key_record_t*)rec)->string) = new_buf
; } static void uat_wep_key_records_string_tostr_cb(void* rec
, char** out_ptr, unsigned* out_len, const void* u1 __attribute__
((unused)), const void* u2 __attribute__((unused))) { if (((uat_wep_key_record_t
*)rec)->string ) { *out_ptr = g_strdup_inline ((((uat_wep_key_record_t
*)rec)->string)); *out_len = (unsigned)strlen((((uat_wep_key_record_t
*)rec)->string)); } else { *out_ptr = g_strdup_inline ("")
; *out_len = 0; } }
285
286/* Stuff for the WEP/WPA/WPA2 decoder */
287static bool_Bool enable_decryption = true1;
288
289static void
290ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
291 proto_tree *tree, int tagged_parameters_len, int ftype,
292 association_sanity_check_t *association_sanity_check);
293
294
295static void
296save_proto_data(tvbuff_t *tvb, packet_info *pinfo, int offset, size_t size, int key);
297
298static void
299save_proto_data_value(packet_info *pinfo, unsigned value, int key);
300
301static void try_scan_tdls_keys(tvbuff_t *tvb, packet_info *pinfo, int offset);
302
303static void try_scan_ft_assoc_keys(packet_info *pinfo, const wlan_hdr_t *whdr);
304
305static tvbuff_t *
306try_decrypt(tvbuff_t *tvb, packet_info *pinfo, unsigned offset, unsigned len,
307 uint8_t *algorithm, uint32_t *sec_trailer,
308 PDOT11DECRYPT_KEY_ITEM used_key);
309
310static int weak_iv(unsigned char *iv);
311
312typedef struct mimo_control
313{
314 uint8_t nc;
315 uint8_t nr;
316 bool_Bool chan_width;
317 uint8_t grouping;
318 uint8_t coefficient_size;
319 uint8_t codebook_info;
320 uint8_t remaining_matrix_segment;
321} mimo_control_t;
322
323/* ************************************************************************* */
324/* Miscellaneous Constants */
325/* ************************************************************************* */
326#define SHORT_STR256 256
327
328typedef enum {
329 IS_DMG_KEY = 1,
330 IS_AP_KEY,
331 IS_CTRL_GRANT_OR_GRANT_ACK_KEY,
332 IS_S1G_KEY,
333 DECRYPTED_EAPOL_KEY,
334 DECRYPTED_GTK_KEY,
335 PACKET_DATA_KEY,
336 ASSOC_COUNTER_KEY,
337 STA_KEY,
338 BSSID_KEY,
339 NONCE_KEY,
340 GROUP_CIPHER_KEY,
341 CIPHER_KEY,
342 AKM_KEY,
343 MIC_KEY,
344 MIC_LEN_KEY,
345 KEY_VERSION_KEY,
346 KEY_LEN_KEY,
347 KEY_IV_KEY,
348 KEY_DATA_KEY,
349 KEY_DATA_LEN_KEY,
350 GTK_KEY,
351 GTK_LEN_KEY,
352 MDID_KEY,
353 FTE_R0KH_ID_KEY,
354 FTE_R0KH_ID_LEN_KEY,
355 FTE_R1KH_ID_KEY,
356 FTE_R1KH_ID_LEN_KEY,
357 FTE_ANONCE_KEY,
358 FTE_SNONCE_KEY,
359 FTE_MIC_KEY,
360 FTE_MIC_LEN_KEY,
361 FTE_TAG_KEY,
362 MDE_TAG_KEY,
363 RSNE_TAG_KEY,
364 RSNXE_TAG_KEY,
365 RDE_TAG_KEY,
366 GTK_SUBELEM_KEY_LEN_KEY,
367 PASN_DATA_KEY,
368 HE_CHANNEL_WIDTH_KEY,
369 FRAME_TYPE_KEY,
370} wlan_proto_key_t;
371
372/* ************************************************************************* */
373/* Define some very useful macros that are used to analyze frame types etc. */
374/* ************************************************************************* */
375
376/*
377 * Fetch the frame control field and swap it if needed. "fcf" and "tvb"
378 * must be valid variables.
379 */
380#define FETCH_FCF(off)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, off)) >> 8) | (guint16) (
(guint16) (tvb_get_letohs(tvb, off)) << 8)))) : tvb_get_letohs
(tvb, off))
((option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001) ? \
381 GUINT16_SWAP_LE_BE(tvb_get_letohs(tvb, off))(((guint16) ( (guint16) ((guint16) (tvb_get_letohs(tvb, off))
>> 8) | (guint16) ((guint16) (tvb_get_letohs(tvb, off)
) << 8))))
: \
382 tvb_get_letohs(tvb, off))
383
384/*
385 * Extract the fragment number and sequence number from the sequence
386 * control field.
387 */
388#define SEQCTL_FRAGMENT_NUMBER(x)((x) & 0x000F) ((x) & 0x000F)
389#define SEQCTL_SEQUENCE_NUMBER(x)(((x) & 0xFFF0) >> 4) (((x) & 0xFFF0) >> 4)
390
391/*
392 * Extract subfields from the QoS control field.
393 */
394#define QOS_TID(x)((x) & 0x000F) ((x) & 0x000F)
395#define QOS_PRIORITY(x)((x) & 0x0007) ((x) & 0x0007)
396#define QOS_EOSP(x)(((x) & 0x0010) >> 4) (((x) & 0x0010) >> 4) /* end of service period */
397#define QOS_ACK_POLICY(x)(((x) & 0x0060) >> 5) (((x) & 0x0060) >> 5)
398#define QOS_AMSDU_PRESENT(x)(((x) & 0x0080) >> 6) (((x) & 0x0080) >> 6)
399#define QOS_FIELD_CONTENT(x)(((x) & 0xFF00) >> 8) (((x) & 0xFF00) >> 8)
400#define QOS_SCALING_FACTOR(x)(((x) & 0xD0) >> 6) (((x) & 0xD0) >> 6)
401#define QOS_UNSCALED_VALUE(x)((x) & 0x3F) ((x) & 0x3F)
402#define QOS_MESH_CONTROL_PRESENT(x)(((x) & 0x0100) >> 8) (((x) & 0x0100) >> 8)
403
404#define QOS_FLAG_EOSP0x0010 0x0010
405
406/*
407 * Extract subfields from the result of QOS_FIELD_CONTENT().
408 */
409#define QOS_PS_BUF_STATE_INDICATED(x)(((x) & 0x02) >> 1) (((x) & 0x02) >> 1)
410#define QOS_PS_HIGHEST_PRI_BUF_AC(x)(((x) & 0x0C) >> 2) (((x) & 0x0C) >> 2)
411#define QOS_PS_QAP_BUF_LOAD(x)(((x) & 0xF0) >> 4) (((x) & 0xF0) >> 4)
412
413/*
414 * Bits from the HT Control field.
415 * 802.11-2016 9.2.4.6, and 802.11ax draft, 32 bits.
416 */
417#define HTC_VHT0x00000001 0x00000001
418#define HTC_HE0x00000002 0x00000002
419#define HTC_MRQ0x00000004 0x00000004
420#define HTC_UNSOLICITED_MFB0x20000000 0x20000000
421
422/*
423 * Extract subfields from the HT Control field.
424 */
425#define HTC_LAC(htc)((htc) & 0xFE) ((htc) & 0xFE)
426#define HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) (((htc) >> 2) & 0xF)
427#define HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE) (HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) == 0xE)
428#define HTC_LAC_MAI_MRQ(htc)(((((htc) >> 2) & 0xF)) & 0x1) ((HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF)) & 0x1)
429#define HTC_LAC_MAI_MSI(htc)(((((htc) >> 2) & 0xF) >> 1) & 0x7) ((HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) >> 1) & 0x7)
430#define HTC_LAC_MFSI(htc)(((htc) >> 4) & 0x7) (((htc) >> 4) & 0x7)
431#define HTC_LAC_ASEL_CMD(htc)(((htc) >> 9) & 0x7) (((htc) >> 9) & 0x7)
432#define HTC_LAC_ASEL_DATA(htc)(((htc) >> 12) & 0xF) (((htc) >> 12) & 0xF)
433#define HTC_LAC_MFB(htc)(((htc) >> 9) & 0x7F) (((htc) >> 9) & 0x7F)
434#define HTC_CAL_POS(htc)(((htc) >> 16) & 0x3) (((htc) >> 16) & 0x3)
435#define HTC_CAL_SEQ(htc)(((htc) >> 18) & 0x3) (((htc) >> 18) & 0x3)
436#define HTC_CSI_STEERING(htc)(((htc) >> 22) & 0x3) (((htc) >> 22) & 0x3)
437#define HTC_NDP_ANN(htc)(((htc) >> 24) & 0x1) (((htc) >> 24) & 0x1)
438#define HTC_AC_CONSTRAINT(htc)(((htc) >> 30) & 0x1) (((htc) >> 30) & 0x1)
439#define HTC_RDG_MORE_PPDU(htc)(((htc) >> 31) & 0x1) (((htc) >> 31) & 0x1)
440
441#define HTC_MFB(htc)(((htc) >> 9) & 0x7FFF) (((htc) >> 9) & 0x7FFF)
442
443/* VHT-MCS = 15, NUM_STS = 7 */
444#define HTC_NO_FEEDBACK_PRESENT(mfb)(((mfb) & 0x7F) == 0x7F) (((mfb) & 0x7F) == 0x7F)
445
446/*
447 * Extract subfields from the key octet in WEP-encrypted frames.
448 */
449#define KEY_OCTET_WEP_KEY(x)(((x) & 0xC0) >> 6) (((x) & 0xC0) >> 6)
450
451#define KEY_EXTIV0x20 0x20
452#define EXTIV_LEN8 8
453
454/*
455 * Bits from the Mesh Flags field
456 */
457#define MESH_FLAGS_ADDRESS_EXTENSION0x3 0x3
458
459/* ************************************************************************* */
460/* Constants used to identify cooked frame types */
461/* ************************************************************************* */
462#define MGT_FRAME0x00 0x00 /* Frame type is management */
463#define CONTROL_FRAME0x01 0x01 /* Frame type is control */
464#define DATA_FRAME0x02 0x02 /* Frame type is Data */
465#define EXTENSION_FRAME0x03 0x03 /* Frame type is Extension */
466
467#define DATA_SHORT_HDR_LEN24 24
468#define DATA_LONG_HDR_LEN30 30
469#define MGT_FRAME_HDR_LEN24 24 /* Length of Management frame-headers */
470
471/* ************************************************************************* */
472/* Logical field codes (IEEE 802.11 encoding of tags) */
473/* ************************************************************************* */
474const value_string ie_tag_num_vals[] = {
475 { TAG_SSID0, "SSID parameter set" },
476 { TAG_SUPP_RATES1, "Supported Rates" },
477 { TAG_FH_PARAMETER2, "FH Parameter set" },
478 { TAG_DS_PARAMETER3, "DS Parameter set" },
479 { TAG_CF_PARAMETER4, "CF Parameter set" },
480 { TAG_TIM5, "Traffic Indication Map (TIM)" },
481 { TAG_IBSS_PARAMETER6, "IBSS Parameter set" },
482 { TAG_COUNTRY_INFO7, "Country Information" },
483 { TAG_FH_HOPPING_PARAMETER8, "Hopping Pattern Parameters" },
484 { TAG_FH_HOPPING_TABLE9, "Hopping Pattern Table" },
485 { TAG_REQUEST10, "Request" },
486 { TAG_QBSS_LOAD11, "QBSS Load Element" },
487 { TAG_EDCA_PARAM_SET12, "EDCA Parameter Set" },
488 { TAG_TSPEC13, "Traffic Specification" },
489 { TAG_TCLAS14, "Traffic Classification" },
490 { TAG_SCHEDULE15, "Schedule" },
491 { TAG_CHALLENGE_TEXT16, "Challenge text" },
492 { TAG_POWER_CONSTRAINT32, "Power Constraint" },
493 { TAG_POWER_CAPABILITY33, "Power Capability" },
494 { TAG_TPC_REQUEST34, "TPC Request" },
495 { TAG_TPC_REPORT35, "TPC Report" },
496 { TAG_SUPPORTED_CHANNELS36, "Supported Channels" },
497 { TAG_CHANNEL_SWITCH_ANN37, "Channel Switch Announcement" },
498 { TAG_MEASURE_REQ38, "Measurement Request" },
499 { TAG_MEASURE_REP39, "Measurement Report" },
500 { TAG_QUIET40, "Quiet" },
501 { TAG_IBSS_DFS41, "IBSS DFS" },
502 { TAG_ERP_INFO42, "ERP Information" },
503 { TAG_TS_DELAY43, "TS Delay" },
504 { TAG_TCLAS_PROCESS44, "TCLAS Processing" },
505 { TAG_HT_CAPABILITY45, "HT Capabilities" },
506 { TAG_QOS_CAPABILITY46, "QoS Capability" },
507 { TAG_ERP_INFO_OLD47, "ERP Information" }, /* Reserved... */
508 { TAG_RSN_IE48, "RSN Information" },
509 { TAG_EXT_SUPP_RATES50, "Extended Supported Rates" },
510 { TAG_AP_CHANNEL_REPORT51, "AP Channel Report" },
511 { TAG_NEIGHBOR_REPORT52, "Neighbor Report" },
512 { TAG_RCPI53, "RCPI" },
513 { TAG_MOBILITY_DOMAIN54, "Mobility Domain" },
514 { TAG_FAST_BSS_TRANSITION55, "Fast BSS Transition" },
515 { TAG_TIMEOUT_INTERVAL56, "Timeout Interval" },
516 { TAG_RIC_DATA57, "RIC Data" },
517 { TAG_DSE_REG_LOCATION58, "DSE Registered Location" },
518 { TAG_SUPPORTED_OPERATING_CLASSES59, "Supported Operating Classes" },
519 { TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60, "Extended Channel Switch Announcement" },
520 { TAG_HT_OPERATION61, "HT Operation" },
521 { TAG_SECONDARY_CHANNEL_OFFSET62, "Secondary Channel Offset (802.11n D1.10)" },
522 { TAG_BSS_AVG_ACCESS_DELAY63, "BSS Average Access Delay" },
523 { TAG_ANTENNA64, "Antenna" },
524 { TAG_RSNI65, "RSNI" },
525 { TAG_MEASURE_PILOT_TRANS66, "Measurement Pilot Transmission" },
526 { TAG_BSS_AVB_ADM_CAPACITY67, "BSS Available Admission Capacity" },
527 { TAG_IE_68_CONFLICT68, "BSS AC Access Delay/WAPI Parameter Set" },
528 { TAG_TIME_ADV69, "Time Advertisement" },
529 { TAG_RM_ENABLED_CAPABILITY70, "RM Enabled Capabilities" },
530 { TAG_MULTIPLE_BSSID71, "Multiple BSSID" },
531 { TAG_20_40_BSS_CO_EX72, "20/40 BSS Coexistence" },
532 { TAG_20_40_BSS_INTOL_CH_REP73, "20/40 BSS Intolerant Channel Report" }, /* IEEE P802.11n/D6.0 */
533 { TAG_OVERLAP_BSS_SCAN_PAR74, "Overlapping BSS Scan Parameters" }, /* IEEE P802.11n/D6.0 */
534 { TAG_RIC_DESCRIPTOR75, "RIC Descriptor" },
535 { TAG_MMIE76, "Management MIC" },
536 { TAG_EVENT_REQUEST78, "Event Request" },
537 { TAG_EVENT_REPORT79, "Event Report" },
538 { TAG_DIAGNOSTIC_REQUEST80, "Diagnostic Request" },
539 { TAG_DIAGNOSTIC_REPORT81, "Diagnostic Report" },
540 { TAG_LOCATION_PARAMETERS82, "Location Parameters" },
541 { TAG_NO_BSSID_CAPABILITY83, "Non Transmitted BSSID Capability" },
542 { TAG_SSID_LIST84, "SSID List" },
543 { TAG_MULTIPLE_BSSID_INDEX85, "Multiple BSSID Index" },
544 { TAG_FMS_DESCRIPTOR86, "FMS Descriptor" },
545 { TAG_FMS_REQUEST87, "FMS Request" },
546 { TAG_FMS_RESPONSE88, "FMS Response" },
547 { TAG_QOS_TRAFFIC_CAPABILITY89, "QoS Traffic Capability" },
548 { TAG_BSS_MAX_IDLE_PERIOD90, "BSS Max Idle Period" },
549 { TAG_TFS_REQUEST91, "TFS Request" },
550 { TAG_TFS_RESPONSE92, "TFS Response" },
551 { TAG_WNM_SLEEP_MODE93, "WNM-Sleep Mode" },
552 { TAG_TIM_BROADCAST_REQUEST94, "TIM Broadcast Request" },
553 { TAG_TIM_BROADCAST_RESPONSE95, "TIM Broadcast Response" },
554 { TAG_COLLOCATED_INTER_REPORT96, "Collocated Interference Report" },
555 { TAG_CHANNEL_USAGE97, "Channel Usage" },
556 { TAG_TIME_ZONE98, "Time Zone" },
557 { TAG_DMS_REQUEST99, "DMS Request" },
558 { TAG_DMS_RESPONSE100, "DMS Response" },
559 { TAG_LINK_IDENTIFIER101, "Link Identifier" },
560 { TAG_WAKEUP_SCHEDULE102, "Wakeup Schedule" },
561 { TAG_CHANNEL_SWITCH_TIMING104, "Channel Switch Timing" },
562 { TAG_PTI_CONTROL105, "PTI Control" },
563 { TAG_PU_BUFFER_STATUS106, "PU Buffer Status" },
564 { TAG_INTERWORKING107, "Interworking" },
565 { TAG_ADVERTISEMENT_PROTOCOL108, "Advertisement Protocol"},
566 { TAG_EXPIDITED_BANDWIDTH_REQ109, "Expedited Bandwidth Request" },
567 { TAG_QOS_MAP_SET110, "QoS Map Set" },
568 { TAG_ROAMING_CONSORTIUM111, "Roaming Consortium" },
569 { TAG_EMERGENCY_ALERT_ID112, "Emergency Alert Identifier" },
570 { TAG_MESH_CONFIGURATION113, "Mesh Configuration" },
571 { TAG_MESH_ID114, "Mesh ID" },
572 { TAG_MESH_LINK_METRIC_REPORT115, "Mesh Link Metric Report" },
573 { TAG_CONGESTION_NOTIFICATION116, "Congestion Notification" },
574 { TAG_MESH_PEERING_MGMT117, "Mesh Peering Management" },
575 { TAG_MESH_CHANNEL_SWITCH118, "Mesh Channel Switch Parameters" },
576 { TAG_MESH_AWAKE_WINDOW119, "Mesh Awake Window" },
577 { TAG_BEACON_TIMING120, "Beacon Timing" },
578 { TAG_MCCAOP_SETUP_REQUEST121, "MCCAOP Setup Request" },
579 { TAG_MCCAOP_SETUP_REPLY122, "MCCAOP SETUP Reply" },
580 { TAG_MCCAOP_ADVERTISEMENT123, "MCCAOP Advertisement" },
581 { TAG_MCCAOP_TEARDOWN124, "MCCAOP Teardown" },
582 { TAG_GANN125, "Gate Announcement" },
583 { TAG_RANN126, "Root Announcement" },
584 { TAG_EXTENDED_CAPABILITIES127, "Extended Capabilities" },
585 { TAG_AGERE_PROPRIETARY128, "Agere Proprietary" },
586 { TAG_MESH_PREQ130, "Path Request" },
587 { TAG_MESH_PREP131, "Path Reply" },
588 { TAG_MESH_PERR132, "Path Error" },
589 { TAG_CISCO_CCX1_CKIP133, "Cisco CCX1 CKIP + Device Name" },
590 { TAG_CISCO_CCX2136, "Cisco CCX2" },
591 { TAG_PXU137, "Proxy Update" },
592 { TAG_PXUC138, "Proxy Update Confirmation"},
593 { TAG_AUTH_MESH_PEERING_EXCH139, "Authenticated Mesh Peering Exchange" },
594 { TAG_MIC140, "MIC (Message Integrity Code)" },
595 { TAG_DESTINATION_URI141, "Destination URI" },
596 { TAG_U_APSD_COEX142, "U-APSD Coexistence" },
597 { TAG_WAKEUP_SCHEDULE_AD143, "Wakeup Schedule 802.11ad" },
598 { TAG_EXTENDED_SCHEDULE144, "Extended Schedule" },
599 { TAG_STA_AVAILABILITY145, "STA Availability" },
600 { TAG_DMG_TSPEC146, "DMG TSPEC" },
601 { TAG_NEXT_DMG_ATI147, "Next DMG ATI" },
602 { TAG_DMG_CAPABILITIES148, "DMG Capabilities" },
603 { TAG_CISCO_CCX3149, "Cisco Unknown 95" },
604 { TAG_CISCO_VENDOR_SPECIFIC150, "Vendor Specific" },
605 { TAG_DMG_OPERATION151, "DMG Operating" },
606 { TAG_DMG_BSS_PARAMETER_CHANGE152, "DMG BSS Parameter Change" },
607 { TAG_DMG_BEAM_REFINEMENT153, "DMG Beam Refinement" },
608 { TAG_CHANNEL_MEASURMENT_FB154, "Channel Measurement Feedback" },
609 { TAG_AWAKE_WINDOW157, "Awake Window" },
610 { TAG_MULTI_BAND158, "Multi Band" },
611 { TAG_ADDBA_EXT159, "ADDBA Extension" },
612 { TAG_NEXTPCP_LIST160, "NEXTPCP List" },
613 { TAG_PCP_HANDOVER161, "PCP Handover" },
614 { TAG_DMG_LINK_MARGIN162, "DMG Link Margin" },
615 { TAG_SWITCHING_STREAM163, "Switching Stream" },
616 { TAG_SESSION_TRANSMISSION164, "Session Transmission" },
617 { TAG_DYN_TONE_PAIR_REP165, "Dynamic Tone Pairing Report" },
618 { TAG_CLUSTER_REP166, "Cluster Report" },
619 { TAG_RELAY_CAPABILITIES167, "Relay Capabilities" },
620 { TAG_RELAY_TRANSFER_PARAM168, "Relay Transfer Parameter" },
621 { TAG_BEAMLINK_MAINTENANCE169, "Beamlink Maintenance" },
622 { TAG_MULTIPLE_MAC_SUBLAYERS170, "Multiple MAC Sublayers" },
623 { TAG_U_PID171, "U-PID" },
624 { TAG_DMG_LINK_ADAPTION_ACK172, "DMG Link Adaption Acknowledgment" },
625 { TAG_SYMBOL_PROPRIETARY173, "Symbol Proprietary" },
626 { TAG_MCCAOP_ADVERTISEMENT_OV174, "MCCAOP Advertisement Overview" },
627 { TAG_QUIET_PERIOD_REQ175, "Quiet Period Request" },
628 { TAG_QUIET_PERIOD_RES177, "Quiet Period Response" },
629 { TAG_ECAPC_POLICY182, "ECAPC Policy" },
630 { TAG_CLUSTER_TIME_OFFSET183, "Cluster Time Offset" },
631 { TAG_INTRA_ACCESS_CAT_PRIO184, "Intra-Access Category Priority" },
632 { TAG_SCS_DESCRIPTOR185, "SCS Descriptor" },
633 { TAG_ANTENNA_SECTOR_ID190, "Antenna Sector ID" },
634 { TAG_VHT_CAPABILITY191, "VHT Capabilities" },
635 { TAG_VHT_OPERATION192, "VHT Operation" },
636 { TAG_EXT_BSS_LOAD193, "Extended BSS Load" },
637 { TAG_WIDE_BW_CHANNEL_SWITCH194, "Wide Bandwidth Channel Switch" },
638 { TAG_TX_PWR_ENVELOPE195, "Tx Power Envelope" },
639 { TAG_CHANNEL_SWITCH_WRAPPER196, "Channel Switch Wrapper" },
640 { TAG_OPERATING_MODE_NOTIFICATION199, "Operating Mode Notification" },
641 { TAG_REDUCED_NEIGHBOR_REPORT201, "Reduced Neighbor Report" },
642 { TAG_FINE_TIME_MEASUREMENT_PARAM206, "Fine Time Measurement Params" },
643 { TAG_S1G_OPEN_LOOP_LINK_MARGIN_INDEX207, "S1G Open-Loop Link Margin Index" },
644 { TAG_RPS208, "RPS" },
645 { TAG_PAGE_SLICE209, "Page Slice" },
646 { TAG_AID_REQUEST210, "AID Request" },
647 { TAG_AID_RESPONSE211, "AID Response" },
648 { TAG_S1G_SECTOR_OPERATION212, "Sector Operation" },
649 { TAG_S1G_BEACON_COMPATIBILITY213, "S1G Beacon Compatibility" },
650 { TAG_SHORT_BEACON_INTERVAL214, "Short Beacon Interval" },
651 { TAG_CHANGE_SEQUENCE215, "Change Sequence" },
652 { TAG_TWT216, "Target Wake Time" },
653 { TAG_S1G_CAPABILITIES217, "S1G Capabilities" },
654 { TAG_SUBCHANNEL_SELECTIVE_TRANSMISSION220, "Subchannel Selective Transmission" },
655 { TAG_VENDOR_SPECIFIC_IE221, "Vendor Specific" },
656 { TAG_AUTHENTICATION_CONTROL222, "Authentication Control" },
657 { TAG_TSF_TIMER_ACCURACY223, "TSF Timer Accuracy" },
658 { TAG_S1G_RELAY224, "S1G Relay" },
659 { TAG_REACHABLE_ADDRESS225, "Reachable Address" },
660 { TAG_S1G_RELAY_DISCOVERY226, "S1G Relay Discovery" },
661 { TAG_AID_ANNOUNCEMENT228, "AID Announcement" },
662 { TAG_PV1_PROBE_RESPONSE_OPTION229, "PV1 Probe Response Option" },
663 { TAG_EL_OPERATION230, "EL Operation" },
664 { TAG_SECTORIZED_GROUP_ID_LIST231, "Sectorized Group ID List" },
665 { TAG_S1G_OPERATION232, "S1G Operation" },
666 { TAG_HEADER_COMPRESSION233, "Header Compression" },
667 { TAG_SST_OPERATION234, "SST Operation" },
668 { TAG_MAD235, "MAD" },
669 { TAG_S1G_RELAY_ACTIVATION236, "S1G Relay Activation" },
670 { TAG_CAG_NUMBER237, "CAG Number"},
671 { TAG_AP_CSN239, "AP-CSN"},
672 { TAG_FILS_INDICATION240, "FILS Indication"},
673 { TAG_DIFF_INITIAL_LINK_SETUP241, "Differential Initial Link Setup"},
674 { TAG_FRAGMENT242, "Fragment"},
675 { TAG_RSNX244, "RSN eXtension"},
676 { TAG_ELEMENT_ID_EXTENSION255, "Element ID Extension" },
677 { 0, NULL((void*)0) }
678};
679
680static value_string_ext tag_num_vals_ext = VALUE_STRING_EXT_INIT(ie_tag_num_vals){ _try_val_to_str_ext_init, 0, (sizeof (ie_tag_num_vals) / sizeof
((ie_tag_num_vals)[0]))-1, ie_tag_num_vals, "ie_tag_num_vals"
, ((void*)0) }
;
681
682#define ETAG_ASSOC_DELAY_INFO1 1
683#define ETAG_FILS_REQ_PARAMS2 2
684#define ETAG_FILS_KEY_CONFIRM3 3
685#define ETAG_FILS_SESSION4 4
686#define ETAG_FILS_HLP_CONTAINER5 5
687#define ETAG_FILS_IP_ADDRESS_ASSIGN6 6
688#define ETAG_KEY_DELIVERY7 7
689#define ETAG_FILS_WRAPPED_DATA8 8
690#define ETAG_FTM_SYNC_INFO9 9
691#define ETAG_EXTENDED_REQUEST10 10
692#define ETAG_ESTIMATED_SERVICE_PARAM11 11
693#define ETAG_FILS_PUBLIC_KEY12 12
694#define ETAG_FILS_NONCE13 13
695#define ETAG_FUTURE_CHANNEL_GUIDANCE14 14
696
697/* RFC 8110 */
698#define ETAG_OWE_DH_PARAMETER32 32
699
700#define ETAG_PASSWORD_IDENTIFIER33 33
701
702/* 802.11AX defined tags */
703#define ETAG_HE_CAPABILITIES35 35
704#define ETAG_HE_OPERATION36 36
705#define ETAG_UORA_PARAMETER_SET37 37
706#define ETAG_MU_EDCA_PARAMETER_SET38 38
707#define ETAG_SPATIAL_REUSE_PARAMETER_SET39 39
708#define ETAG_NDP_FEEDBACK_REPORT_PARAMETER_SET41 41
709#define ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42 42
710#define ETAG_QUIET_TIME_PERIOD_SETUP43 43
711#define ETAG_ESS_REPORT45 45
712#define ETAG_OPS46 46
713#define ETAG_HE_BSS_LOAD47 47
714#define ETAG_MAX_CHANNEL_SWITCH_TIME52 52
715#define ETAG_OCI54 54
716#define ETAG_MULTIPLE_BSSID_CONFIGURATION55 55
717#define ETAG_NON_INHERITANCE56 56
718#define ETAG_KNOWN_BSSID57 57
719#define ETAG_SHORT_SSID58 58
720#define ETAG_HE_6GHZ_BAND_CAPABILITIES59 59
721#define ETAG_UL_MU_POWER_CAPABILITIES60 60
722#define ETAG_MSCS_DESCRIPTOR_ELEMENT88 88
723#define ETAG_TCLAS_MASK89 89
724#define ETAG_REJECTED_GROUPS92 92
725#define ETAG_ANTI_CLOGGING_TOKEN93 93
726
727/* 802.11az */
728#define ETAG_SECURE_LTF_PARAMETERS94 94
729#define ETAG_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT95 95
730#define ETAG_RSTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT96 96
731#define ETAG_PASSIVE_TB_RANGING_LCI_TABLE_ELEMENT97 97
732#define ETAG_ISTA_AVAILABILITY_WINDOW98 98
733#define ETAG_RSTA_AVAILABILITY_WINDOW99 99
734#define ETAG_PASN_PARAMETERS100 100
735#define ETAG_RANGING_PARAMETERS101 101
736#define ETAG_DIRECTION_MEASUREMENT_RESULTS102 102
737#define ETAG_MULTIPLE_AOD_FEEDBACK103 103
738#define ETAG_MULTIPLE_BEST_AWV_ID104 104
739#define ETAG_LOS_LIKELIHOOD105 105
740#define ETAG_EHT_OPERATION106 106
741#define ETAG_MULTI_LINK107 107
742#define ETAG_EHT_CAPABILITIES108 108
743#define ETAG_TID_TO_LINK_MAPPING109 109
744#define ETAG_MULTI_LINK_TRAFFIC110 110
745#define ETAG_QOS_CHARACTERISTICS113 113
746#define ETAG_AKM_SUITE_SELECTOR114 114
747#define ETAG_MLO_LINK_INFORMATION133 133
748#define ETAG_AID_BITMAP134 134
749#define ETAG_BANDWIDTH_INDICATION135 135
750#define ETAG_NONAP_STA_REGULATORY_CONNECT137 137
751
752
753static const value_string tag_num_vals_eid_ext[] = {
754 { ETAG_ASSOC_DELAY_INFO1, "Association Delay Info" },
755 { ETAG_FILS_REQ_PARAMS2, "FILS Request Parameters" },
756 { ETAG_FILS_KEY_CONFIRM3, "FILS Key Confirmation" },
757 { ETAG_FILS_SESSION4, "FILS Session" },
758 { ETAG_FILS_HLP_CONTAINER5, "FILS HLP Container" },
759 { ETAG_FILS_IP_ADDRESS_ASSIGN6, "FILS IP Address Assignment" },
760 { ETAG_KEY_DELIVERY7, "Key Delivery" },
761 { ETAG_FILS_WRAPPED_DATA8, "Wrapped Data" },
762 { ETAG_FTM_SYNC_INFO9, "FTM Synchronization Information" },
763 { ETAG_EXTENDED_REQUEST10, "Extended Request" },
764 { ETAG_ESTIMATED_SERVICE_PARAM11, "Estimated Service Parameters" },
765 { ETAG_FILS_PUBLIC_KEY12, "FILS Public Key" },
766 { ETAG_FILS_NONCE13, "FILS Nonce" },
767 { ETAG_FUTURE_CHANNEL_GUIDANCE14, "Future Channel Guidance" },
768 { ETAG_OWE_DH_PARAMETER32, "OWE Diffie-Hellman Parameter" },
769 { ETAG_PASSWORD_IDENTIFIER33, "Password Identifier" },
770 { ETAG_HE_CAPABILITIES35, "HE Capabilities" },
771 { ETAG_HE_OPERATION36, "HE Operation" },
772 { ETAG_UORA_PARAMETER_SET37, "UORA Parameter Set" },
773 { ETAG_MU_EDCA_PARAMETER_SET38, "MU EDCA Parameter Set" },
774 { ETAG_SPATIAL_REUSE_PARAMETER_SET39, "Spatial Reuse Parameter Set" },
775 { ETAG_NDP_FEEDBACK_REPORT_PARAMETER_SET41, "NDP Feedback Report Parameter Set" },
776 { ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42, "BSS Color Change Announcement" },
777 { ETAG_QUIET_TIME_PERIOD_SETUP43, "Quiet Time Period Setup" },
778 { ETAG_ESS_REPORT45, "ESS Report" },
779 { ETAG_OPS46, "Opportunistic Power Save" },
780 { ETAG_HE_BSS_LOAD47, "HE BSS Load" },
781 { ETAG_MAX_CHANNEL_SWITCH_TIME52, "Max Channel Switch Time" },
782 { ETAG_OCI54, "Operating Channel Information" },
783 { ETAG_MULTIPLE_BSSID_CONFIGURATION55, "Multiple BSSID Configuration" },
784 { ETAG_NON_INHERITANCE56, "Non-Inheritance"},
785 { ETAG_KNOWN_BSSID57, "Known BSSID" },
786 { ETAG_SHORT_SSID58, "Short SSID" },
787 { ETAG_HE_6GHZ_BAND_CAPABILITIES59, "HE 6 GHz Band Capabilities" },
788 { ETAG_UL_MU_POWER_CAPABILITIES60, "UL MU Power Capabilities" },
789 { ETAG_MSCS_DESCRIPTOR_ELEMENT88, "MSCS Descriptor Element" },
790 { ETAG_TCLAS_MASK89, "TCLAS Mask" },
791 { ETAG_REJECTED_GROUPS92, "Rejected Groups" },
792 { ETAG_ANTI_CLOGGING_TOKEN93, "Anti-Clogging Token Container" },
793 /* 802.11az */
794 { ETAG_SECURE_LTF_PARAMETERS94, "Secure LTF Parameters" },
795 { ETAG_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT95, "ISTA Passive TB Ranging Measurement Report" },
796 { ETAG_RSTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT96, "RSTA Passive TB Ranging Measurement Report" },
797 { ETAG_PASSIVE_TB_RANGING_LCI_TABLE_ELEMENT97, "Passive TB Ranging LCI Table element" },
798 { ETAG_ISTA_AVAILABILITY_WINDOW98, "ISTA Availability Window" },
799 { ETAG_RSTA_AVAILABILITY_WINDOW99, "RSTA Availability Window" },
800 { ETAG_PASN_PARAMETERS100, "PASN Parameters" },
801 { ETAG_RANGING_PARAMETERS101, "Ranging Parameters" },
802 { ETAG_DIRECTION_MEASUREMENT_RESULTS102, "Direction Measurement Results" },
803 { ETAG_MULTIPLE_AOD_FEEDBACK103, "Multiple AOD Feedback" },
804 { ETAG_MULTIPLE_BEST_AWV_ID104, "Multiple Best AWV ID" },
805 { ETAG_LOS_LIKELIHOOD105, "LOS Likelihood" },
806 { ETAG_EHT_OPERATION106, "EHT Operation (802.11be D3.0)" },
807 { ETAG_MULTI_LINK107, "Multi-Link (802.11be D3.0)" },
808 { ETAG_EHT_CAPABILITIES108, "EHT Capabilities (802.11be D3.0)" },
809 { ETAG_TID_TO_LINK_MAPPING109, "TID-To-Link Mapping (802.11be D3.0)" },
810 { ETAG_MULTI_LINK_TRAFFIC110, "Multi-Link Traffic Indication (802.11be D3.0)" },
811 { ETAG_QOS_CHARACTERISTICS113, "QoS Characteristics (802.11be D3.0)" },
812 { ETAG_AKM_SUITE_SELECTOR114, "AKM Suite Selector" },
813 { ETAG_MLO_LINK_INFORMATION133, "MLO Link Information (802.11be D3.0)" },
814 { ETAG_AID_BITMAP134, "AID Bitmap (802.11be D3.0)" },
815 { ETAG_BANDWIDTH_INDICATION135, "Bandwidth Indication (802.11be D3.0)" },
816 { ETAG_NONAP_STA_REGULATORY_CONNECT137, "Non-AP STA Regulatory Connectivity" },
817 { 0, NULL((void*)0) }
818};
819static value_string_ext tag_num_vals_eid_ext_ext = VALUE_STRING_EXT_INIT(tag_num_vals_eid_ext){ _try_val_to_str_ext_init, 0, (sizeof (tag_num_vals_eid_ext)
/ sizeof ((tag_num_vals_eid_ext)[0]))-1, tag_num_vals_eid_ext
, "tag_num_vals_eid_ext", ((void*)0) }
;
820
821static const value_string wfa_qos_subtype_vals[] = {
822 { 0, "DSCP Policy Query" },
823 { 1, "DSCP Policy Request" },
824 { 2, "DSCP Policy Response" },
825 { 0, NULL((void*)0) }
826};
827
828static const value_string wfa_action_subtype_vals[] = {
829 { WFA_SUBTYPE_ACTION_QOS_MGMT0x1A, "QoS Management" },
830 { WFA_SUBTYPE_ACTION_CAPABILITIES0x1B, "Wi-Fi Alliance Capabilities" },
831 { 0, NULL((void*)0) }
832};
833
834const value_string wfa_subtype_vals[] = {
835 { WFA_SUBTYPE_SUBSCRIPTION_REMEDIATION0, "Subscription Remediation" },
836 { WFA_SUBTYPE_DEAUTHENTICATION_IMMINENT1, "Deauthentication Imminent" },
837 { WFA_WNM_SUBTYPE_NON_PREF_CHAN_REPORT2, "Non-preferred Channel Report" },
838 { WFA_WNM_SUBTYPE_CELL_DATA_CAPABILITIES3, "Cellular Data Capabilities" },
839 { WFA_SUBTYPE_P2P9, "P2P" },
840 { WFA_SUBTYPE_HS20_INDICATION16, "Hotspot 2.0 Indication" },
841 { WFA_SUBTYPE_NAN_IE19, "NAN" },
842 { WFA_SUBTYPE_OSEN20, "OSU Server-only l2 Encryption Network" },
843 { WFA_SUBTYPE_MBO_OCE22, "Multi Band Operation - Optimized Connectivity Experience"},
844 { WFA_SUBTYPE_WIFI_60G23, "60GHz Information Element" },
845 { WFA_SUBTYPE_NAN_ACTION24, "NAN Action" },
846 { WFA_SUBTYPE_DPP26, "Device Provisioning Protocol" },
847 { WFA_SUBTYPE_IEEE1905_MULTI_AP27, "IEEE1905 Multi-AP" },
848 { WFA_SUBTYPE_OWE_TRANSITION_MODE28, "OWE Transition Mode" },
849 { WFA_SUBTYPE_TRANSITION_DISABLE_KDE32, "Transition Disable KDE" },
850 { WFA_SUBTYPE_QOS_MGMT34, "QoS Management" },
851 { WFA_SUBTYPE_WFA_CAPA35, "Wi-Fi Alliance Capabilities" },
852 { WFA_SUBTYPE_RSN_OVERRIDE41, "RSN Element Override" },
853 { WFA_SUBTYPE_RSN_OVERRIDE_242, "RSN Element Override 2" },
854 { WFA_SUBTYPE_RSNX_OVERRIDE43, "RSN Extension Element Override" },
855 { WFA_SUBTYPE_RSN_SELECTION44, "RSN Selection" },
856 { WFA_SUBTYPE_RSN_OVERRIDE_LINK_KDE45, "RSN Override Link KDE" },
857 { 0, NULL((void*)0) }
858};
859
860static const value_string wfa_anqp_subtype_vals[] = {
861 { WFA_ANQP_SUBTYPE_HS2017, "Hotspot 2.0 ANQP" },
862 { WFA_ANQP_SUBTYPE_MBO18, "Multi Band Operation ANQP" },
863 { 0, NULL((void*)0) }
864};
865
866#define DPP_CONFIGURATION_PROTOCOL0x01 0x01
867
868static const value_string dpp_subtype_vals[] = {
869 { DPP_CONFIGURATION_PROTOCOL0x01, "DPP Configuration Protocol" },
870 { 0, NULL((void*)0) }
871};
872
873/* ************************************************************************* */
874/* Supported Rates (7.3.2.2) */
875/* ************************************************************************* */
876
877static const value_string ieee80211_supported_rates_vals[] = {
878 { 0x02, "1" },
879 { 0x03, "1.5" },
880 { 0x04, "2" },
881 { 0x05, "2.5" },
882 { 0x06, "3" },
883 { 0x09, "4.5" },
884 { 0x0B, "5.5" },
885 { 0x0C, "6" },
886 { 0x12, "9" },
887 { 0x16, "11" },
888 { 0x18, "12" },
889 { 0x1B, "13.5" },
890 { 0x24, "18" },
891 { 0x2C, "22" },
892 { 0x30, "24" },
893 { 0x36, "27" },
894 { 0x42, "33" },
895 { 0x48, "36" },
896 { 0x60, "48" },
897 { 0x6C, "54" },
898 { 0x82, "1(B)" },
899 { 0x83, "1.5(B)" },
900 { 0x84, "2(B)" },
901 { 0x85, "2.5(B)" },
902 { 0x86, "3(B)" },
903 { 0x89, "4.5(B)" },
904 { 0x8B, "5.5(B)" },
905 { 0x8C, "6(B)" },
906 { 0x92, "9(B)" },
907 { 0x96, "11(B)" },
908 { 0x98, "12(B)" },
909 { 0x9B, "13.5(B)" },
910 { 0xA4, "18(B)" },
911 { 0xAC, "22(B)" },
912 { 0xB0, "24(B)" },
913 { 0xB6, "27(B)" },
914 { 0xC2, "33(B)" },
915 { 0xC8, "36(B)" },
916 { 0xE0, "48(B)" },
917 { 0xEC, "54(B)" },
918 /* BSS membership selector */
919 { 0xFA, "HE PHY" },
920 { 0xFB, "SAE Hash to Element Only" },
921 { 0xFC, "EPD" }, /* 802.11ak */
922 { 0xFD, "GLK" }, /* 802.11ak */
923 { 0xFE, "VHT PHY" },
924 { 0xFF, "HT PHY" },
925 { 0, NULL((void*)0)}
926};
927value_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) }
;
928
929/* ************************************************************************* */
930/* 8.4.1.7 Reason Code field */
931/* ************************************************************************* */
932static const value_string ieee80211_reason_code[] = {
933 { 1, "Unspecified reason" },
934 { 2, "Previous authentication no longer valid" },
935 { 3, "Deauthenticated because sending STA is leaving (or has left) the BSS" },
936 { 4, "Disassociated due to inactivity" },
937 { 5, "Disassociated because AP is unable to handle all currently associated STAs" },
938 { 6, "Class 2 frame received from nonauthenticated STA" },
939 { 7, "Class 3 frame received from nonassociated STA" },
940 { 8, "Disassociated because sending STA is leaving (or has left) BSS" },
941 { 9, "STA requesting (re)association is not authenticated with responding STA" },
942 { 10, "Disassociated because the information in the Power Capability element is unacceptable" },
943 { 11, "Disassociated because the information in the Supported Channels element is unacceptable" },
944 { 12, "Disassociated due to BSS transition management" },
945 { 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" },
946 { 14, "Message integrity code (MIC) failure" },
947 { 15, "4-way handshake timeout" },
948 { 16, "Group key handshake timeout" },
949 { 17, "Element in 4-way handshake different from (Re)Association Request/Probe Response/Beacon frame" },
950 { 18, "Invalid group cipher" },
951 { 19, "Invalid pairwise cipher" },
952 { 20, "Invalid AKMP" },
953 { 21, "Unsupported RSNE version" },
954 { 22, "Invalid RSNE capabilities" },
955 { 23, "IEEE 802.1X authentication failed" },
956 { 24, "Cipher suite rejected because of the security policy" },
957 { 25, "TDLS direct-link teardown due to TDLS peer STA unreachable via the TDLS direct link" },
958 { 26, "TDLS direct-link teardown for unspecified reason" },
959 { 27, "Disassociated because session terminated by SSP request" },
960 { 28, "Disassociated because of lack of SSP roaming agreement" },
961 { 29, "Requested service rejected because of SSP cipher suite or AKM requirement " },
962 { 30, "Requested service not authorized in this location" },
963 { 31, "TS deleted because QoS AP lacks sufficient bandwidth for this QoS STA due to a change in BSS service characteristics or operational mode" },
964 { 32, "Disassociated for unspecified, QoS-related reason" },
965 { 33, "Disassociated because QoS AP lacks sufficient bandwidth for this QoS STA" },
966 { 34, "Disassociated because excessive number of frames need to be acknowledged, but are not acknowledged due to AP transmissions and/or poor channel conditions" },
967 { 35, "Disassociated because STA is transmitting outside the limits of its TXOPs" },
968 { 36, "Requested from peer STA as the STA is leaving the BSS (or resetting)" },
969 { 37, "Requesting STA is no longer using the stream or session" },
970 { 38, "Requesting STA received frames using a mechanism for which a setup has not been completed" },
971 { 39, "Requested from peer STA due to timeout" },
972 { 46, "Disassociated because authorized access limit reached" },
973 { 47, "Disassociated due to external service requirements" },
974 { 48, "Invalid FT Action frame count" },
975 { 49, "Invalid pairwise master key identifier (PMKID)" },
976 { 50, "Invalid MDE" },
977 { 51, "Invalid FTE" },
978 { 52, "Mesh peering canceled for unknown reasons" },
979 { 53, "The mesh STA has reached the supported maximum number of peer mesh STAs" },
980 { 54, "The received information violates the Mesh Configuration policy configured in the mesh STA profile" },
981 { 55, "The mesh STA has received a Mesh Peering Close message requesting to close the mesh peering" },
982 { 56, "The mesh STA has re-sent dot11MeshMaxRetries Mesh Peering Open messages, without receiving a Mesh Peering Confirm message" },
983 { 57, "The confirmTimer for the mesh peering instance times out" },
984 { 58, "The mesh STA fails to unwrap the GTK or the values in the wrapped contents do not match" },
985 { 59, "The mesh STA receives inconsistent information about the mesh parameters between Mesh Peering Management frames" },
986 { 60, "The mesh STA fails the authenticated mesh peering exchange because due to failure in selecting either the pairwise ciphersuite or group ciphersuite" },
987 { 61, "The mesh STA does not have proxy information for this external destination" },
988 { 62, "The mesh STA does not have forwarding information for this destination" },
989 { 63, "The mesh STA determines that the link to the next hop of an active path in its forwarding information is no longer usable" },
990 { 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)" },
991 { 65, "The mesh STA performs channel switch to meet regulatory requirements" },
992 { 66, "The mesh STA performs channel switch with unspecified reason" },
993 { 67, "Transmission link establishment in alternative channel failed" },
994 { 68, "The alternative channel is occupied" },
995 { 71, "Disassociated due to poor RSSI" },
996 { 0, NULL((void*)0)}
997};
998value_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) }
;
999
1000/* ************************************************************************* */
1001/* 8.4.1.9 Status Code field */
1002/* ************************************************************************* */
1003static const value_string ieee80211_status_code[] = {
1004 { 0, "Successful" },
1005 { 1, "Unspecified failure" },
1006 { 2, "TDLS wakeup schedule rejected but alternative schedule provided" },
1007 { 3, "TDLS wakeup schedule rejected" },
1008 { 4, "Reserved" },
1009 { 5, "Security disabled" },
1010 { 6, "Unacceptable lifetime" },
1011 { 7, "Not in same BSS" },
1012 { 8, "Reserved" },
1013 { 9, "Reserved" },
1014 { 10, "Cannot support all requested capabilities in the Capability Information field" },
1015 { 11, "Reassociation denied due to inability to confirm that association exists" },
1016 { 12, "Association denied due to reason outside the scope of this standard" },
1017 { 13, "Responding STA does not support the specified authentication algorithm" },
1018 { 14, "Received an Authentication frame with authentication transaction sequence number out of expected sequence" },
1019 { 15, "Authentication rejected because of challenge failure" },
1020 { 16, "Authentication rejected due to timeout waiting for next frame in sequence" },
1021 { 17, "Association denied because AP is unable to handle additional associated STAs" },
1022 { 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" },
1023 { 19, "Association denied due to requesting STA not supporting the short preamble option" },
1024 { 20, "Reserved" },
1025 { 21, "Reserved" },
1026 { 22, "Association request rejected because spectrum management capability is required" },
1027 { 23, "Association request rejected because the information in the Power Capability element is unacceptable" },
1028 { 24, "Association request rejected because the information in the Supported Channels element is unacceptable" },
1029 { 25, "Association denied due to requesting STA not supporting short slot time" },
1030 { 26, "Reserved" },
1031 { 27, "Association denied because the requesting STA does not support HT features" },
1032 { 28, "R0KH unreachable" },
1033 { 29, "Reserved"},
1034 { 30, "Association request rejected temporarily; try again later" },
1035 { 31, "Robust management frame policy violation" },
1036 { 32, "Unspecified, QoS-related failure" },
1037 { 33, "Association denied because QoS AP or PCP has insufficient bandwidth to handle another QoS STA" },
1038 { 34, "Association denied due to excessive frame loss rates and/ or poor conditions on current operating channel" },
1039 { 35, "Association (with QoS BSS) denied because the requesting STA does not support the QoS facility" },
1040 { 36, "Reserved" },
1041 { 37, "The request has been declined" },
1042 { 38, "The request has not been successful as one or more parameters have invalid values" },
1043 { 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" },
1044 { 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)" },
1045 { 41, "Invalid group cipher" },
1046 { 42, "Invalid pairwise cipher" },
1047 { 43, "Invalid AKMP" },
1048 { 44, "Unsupported RSNE version" },
1049 { 45, "Invalid RSNE capabilities" },
1050 { 46, "Cipher suite rejected because of security policy" },
1051 { 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" },
1052 { 48, "Reserved" },
1053 { 49, "The Destination STA is not present within this BSS" },
1054 { 50, "The Destination STA is not a QoS STA" },
1055 { 51, "Association denied because the listen interval is too large" },
1056 { 52, "Invalid FT Action frame count" },
1057 { 53, "Invalid pairwise master key identifier (PMKID)" },
1058 { 54, "Invalid MDE" },
1059 { 55, "Invalid FTE" },
1060 { 56, "Requested TCLAS processing is not supported by the AP or PCP" },
1061 { 57, "The AP or PCP has insufficient TCLAS processing resources to satisfy the request" },
1062 { 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" },
1063 { 59, "GAS advertisement protocol not supported" },
1064 { 60, "No outstanding GAS request" },
1065 { 61, "GAS response not received from the advertisement server" },
1066 { 62, "STA timed out waiting for GAS query response" },
1067 { 63, "GAS response is larger than query response length limit" },
1068 { 64, "Request refused because home network does not support request" },
1069 { 65, "Advertisement server in the network is not currently reachable" },
1070 { 66, "Reserved" },
1071 { 67, "Request refused due to permissions received via SSPN interface" },
1072 { 68, "Request refused because the AP or PCP does not support unauthenticated access" },
1073 { 69, "Reserved" },
1074 { 70, "Reserved" },
1075 { 71, "Reserved" },
1076 { 72, "Invalid contents of RSNE, other than unsupported RSNE version or invalid RSNE capabilities, AKMP or pairwise cipher" },
1077 { 73, "U-APSD coexistence is not supported" },
1078 { 74, "Requested U-APSD coexistence mode is not supported" },
1079 { 75, "Requested interval/duration value cannot be supported with U-APSD coexistence" },
1080 { 76, "Authentication is rejected because an anti-clogging token is required" },
1081 { 77, "Authentication is rejected because the offered finite cyclic group is not supported" },
1082 { 78, "The TBTT adjustment request has not been successful because the STA could not find an alternative TBTT" },
1083 { 79, "Transmission failure" },
1084 { 80, "Requested TCLAS not supported" },
1085 { 81, "TCLAS resources exhausted" },
1086 { 82, "Rejected with suggested BSS transition" },
1087 { 83, "Reject with recommended schedule" },
1088 { 84, "Reject because no wakeup schedule specified" },
1089 { 85, "Success, the destination STA is in power save mode" },
1090 { 86, "FST pending, in process of admitting FST session" },
1091 { 87, "Performing FST now" },
1092 { 88, "FST pending, gap(s) in block ack window" },
1093 { 89, "Reject because of U-PID setting" },
1094 { 90, "Reserved" },
1095 { 91, "Reserved" },
1096 { 92, "(Re)Association refused for some external reason" },
1097 { 93, "(Re)Association refused because of memory limits at the AP" },
1098 { 94, "(Re)Association refused because emergency services are not supported at the AP" },
1099 { 95, "GAS query response not yet received" },
1100 { 96, "Reject since the request is for transition to a frequency band subject to DSE procedures and FST Initiator is a dependent STA" },
1101 { 97, "Requested TCLAS processing has been terminated by the AP" },
1102 { 98, "The TS schedule conflicts with an existing schedule; an alternative schedule is provided" },
1103 { 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" },
1104 { 100, "The request failed due to a reservation conflict" },
1105 { 101, "The request failed due to exceeded MAF limit" },
1106 { 102, "The request failed due to exceeded MCCA track limit" },
1107 { 103, "Association denied because the information in the Spectrum Management field is unacceptable" },
1108 { 104, "Association denied because the requesting STA does not support VHT features" },
1109 { 105, "Enablement denied" },
1110 { 106, "Enablement denied due to restriction from an authorized GDB" },
1111 { 107, "Authorization deenabled" },
1112 { 108, "Re(association) refused or disassociated because energy limited operation is not supported at the AP" },
1113 { 109, "BlockAck negotiation refused because, due to buffer constraints and other unspecified reasons, the recipient prefers to generate only NDP BlockAck frames" },
1114 { 110, "Association denied/disassociated because the suggested value for max away duration is unacceptable" },
1115 { 111, "Re(association) refused or disassociated because flow control operation is not supported by the non-AP STA" },
1116 { 112, "Authentication rejected due to FILS authentication failure" },
1117 { 113, "Authentication rejected due to unknown Authentication Server" },
1118 { 114, "Reserved" },
1119 { 115, "Reserved" },
1120 { 116, "Request denied because the allocation of notification period is failed" },
1121 { 117, "Request denied because the request of channel splitting is failed" },
1122 { 118, "Request denied because the allocation request is failed" },
1123 { 119, "Association denied because the requesting STA does not support CMMG features" },
1124 { 120, "The requested GAS fragment is not available" },
1125 { 121, "Success, the CAG Version provided by the requesting STA is the same as the latest CAG Version provided by the relevant server" },
1126 { 122, "The STA is not authorized to use GLK per local policy" },
1127 { 123, "Authentication rejected because the password identifier is unknown" },
1128 { 124, "Reserved"},
1129 { 125, "Request denied because source address of request is inconsistent with local MAC address policy" },
1130 { 126, "SAE authentication uses direct hashing, instead of looping, to obtain the PWE" },
1131 { 127, "Reserved"},
1132 { 128, "Requested TCLAS processing has been terminated by the AP due to insufficient QoS capacity" },
1133 { 129, "Requested TCLAS processing has been terminated by the AP due to conflict with higher layer QoS policies" },
1134 { 130, "Association denied because the requesting STA is affiliated with a non-AP MLD that is associated with the AP MLD"},
1135 { 131, "EPCS priority access denied because the non-AP MLD is not authorized to use the service"},
1136 { 132, "EPCS priority access denied due to reason outside the scope of this standard"},
1137 { 133, "Request denied because the requested TID-to-link mapping is unacceptable"},
1138 { 134, "Preferred TID-to-link mapping suggested"},
1139 { 135, "Association denied because the requesting STA does not support EHT features"},
1140 { 139, "Link not accepted because the link on which the (Re)Association Request frame is transmitted is not accepted"},
1141 { 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"},
1142 { 141, "Operation parameter update denied because the requested operation parameters or capabilities are not acceptable"},
1143 { 0, NULL((void*)0)}
1144};
1145value_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) }
;
1146
1147static const value_string ieee80211_transition_reasons[] = {
1148 { 0, "Unspecified" },
1149 { 1, "Excessive frame loss rates and/or poor conditions" },
1150 { 2, "Excessive delay for current traffic streams" },
1151 { 3, "Insufficient QoS capacity for current traffic streams (TSPEC rejected)" },
1152 { 4, "First association to ESS (the association initiated by an Association Request frame instead of a Reassociation Request frame)" },
1153 { 5, "Load balancing" },
1154 { 6, "Better AP found" },
1155 { 7, "Deauthenticated or Disassociated from the previous AP" },
1156 { 8, "AP failed IEEE 802.1X EAP Authentication" },
1157 { 9, "AP failed 4-way handshake" },
1158 { 10, "Received too many replay counter failures" },
1159 { 11, "Received too many data MIC failures" },
1160 { 12, "Exceeded maximum number of retransmissions" },
1161 { 13, "Received too many broadcast disassociations" },
1162 { 14, "Received too many broadcast deauthentications" },
1163 { 15, "Previous transition failed" },
1164 { 16, "Low RSSI" },
1165 { 17, "Roam from a non-IEEE-802.11 system" },
1166 { 18, "Transition due to received BSS Transition Request frame" },
1167 { 19, "Preferred BSS transition candidate list included" },
1168 { 20, "Leaving ESS" },
1169 { 0, NULL((void*)0)}
1170};
1171/* ************************************************************************* */
1172/* Frame types, and their names */
1173/* ************************************************************************* */
1174static const value_string frame_type_subtype_vals[] = {
1175 {MGT_ASSOC_REQ0x00, "Association Request"},
1176 {MGT_ASSOC_RESP0x01, "Association Response"},
1177 {MGT_REASSOC_REQ0x02, "Reassociation Request"},
1178 {MGT_REASSOC_RESP0x03, "Reassociation Response"},
1179 {MGT_PROBE_REQ0x04, "Probe Request"},
1180 {MGT_PROBE_RESP0x05, "Probe Response"},
1181 {MGT_MEASUREMENT_PILOT0x06, "Measurement Pilot"},
1182 {MGT_BEACON0x08, "Beacon frame"},
1183 {MGT_ATIM0x09, "ATIM"},
1184 {MGT_DISASS0x0A, "Disassociate"},
1185 {MGT_AUTHENTICATION0x0B, "Authentication"},
1186 {MGT_DEAUTHENTICATION0x0C, "Deauthentication"},
1187 {MGT_ACTION0x0D, "Action"},
1188 {MGT_ACTION_NO_ACK0x0E, "Action No Ack"},
1189 {MGT_ARUBA_WLAN0x0F, "Aruba Management"},
1190
1191 {CTRL_TRIGGER0x12, "Trigger"},
1192 {CTRL_TACK0x13, "TWT Ack"},
1193 {CTRL_BEAMFORM_RPT_POLL0x14, "Beamforming Report Poll"},
1194 {CTRL_VHT_NDP_ANNC0x15, "VHT/HE/EHT/RANGING NDP Announcement"},
1195 {CTRL_CONTROL_WRAPPER0x17, "Control Wrapper"},
1196 {CTRL_BLOCK_ACK_REQ0x18, "802.11 Block Ack Req"},
1197 {CTRL_BLOCK_ACK0x19, "802.11 Block Ack"},
1198 {CTRL_PS_POLL0x1A, "Power-Save poll"},
1199 {CTRL_RTS0x1B, "Request-to-send"},
1200 {CTRL_CTS0x1C, "Clear-to-send"},
1201 {CTRL_ACKNOWLEDGEMENT0x1D, "Acknowledgement"},
1202 {CTRL_CFP_END0x1E, "CF-End (Control-frame)"},
1203 {CTRL_CFP_ENDACK0x1F, "CF-End + CF-Ack (Control-frame)"},
1204
1205 {DATA0x20, "Data"},
1206 {DATA_CF_ACK0x21, "Data + CF-Ack"},
1207 {DATA_CF_POLL0x22, "Data + CF-Poll"},
1208 {DATA_CF_ACK_POLL0x23, "Data + CF-Ack + CF-Poll"},
1209 {DATA_NULL_FUNCTION0x24, "Null function (No data)"},
1210 {DATA_CF_ACK_NOD0x25, "Acknowledgement (No data)"},
1211 {DATA_CF_POLL_NOD0x26, "CF-Poll (No data)"},
1212 {DATA_CF_ACK_POLL_NOD0x27, "CF-Ack/Poll (No data)"},
1213 {DATA_QOS_DATA0x28, "QoS Data"},
1214 {DATA_QOS_DATA_CF_ACK0x29, "QoS Data + CF-Acknowledgment"},
1215 {DATA_QOS_DATA_CF_POLL0x2A, "QoS Data + CF-Poll"},
1216 {DATA_QOS_DATA_CF_ACK_POLL0x2B, "QoS Data + CF-Ack + CF-Poll"},
1217 {DATA_QOS_NULL0x2C, "QoS Null function (No data)"},
1218 {DATA_QOS_CF_POLL_NOD0x2E, "QoS CF-Poll (No Data)"},
1219 {DATA_QOS_CF_ACK_POLL_NOD0x2F, "QoS CF-Ack + CF-Poll (No data)"},
1220
1221 {EXTENSION_DMG_BEACON0x30, "DMG Beacon"},
1222 {EXTENSION_S1G_BEACON0x31, "S1G Beacon"},
1223
1224 {CTRL_POLL0x162, "Poll"},
1225 {CTRL_SPR0x163, "Service Period Request"},
1226 {CTRL_GRANT0x164, "Grant"},
1227 {CTRL_DMG_CTS0x165, "DMG Clear-to-send"},
1228 {CTRL_DMG_DTS0x166, "DMG Denial-to-send"},
1229 {CTRL_GRANT_ACK0x167, "Grant Acknowledgment"},
1230 {CTRL_SSW0x168, "Sector Sweep"},
1231 {CTRL_SSW_FEEDBACK0x169, "Sector Sweep Feedback"},
1232 {CTRL_SSW_ACK0x16A, "Sector Sweep Acknowledgment"},
1233
1234 {0, NULL((void*)0)}
1235};
1236static 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) }
;
1237
1238/* ************************************************************************* */
1239/* 802.1D Tag Name (by WME Access Category Names) */
1240/* ************************************************************************* */
1241static const value_string ieee80211_qos_tags_acs[] = {
1242 { 0, "Best Effort (Best Effort)" },
1243 { 1, "Background (Background)" },
1244 { 2, "Spare (Background)" },
1245 { 3, "Excellent Effort (Best Effort)" },
1246 { 4, "Controlled Load (Video)" },
1247 { 5, "Video (Video)" },
1248 { 6, "Voice (Voice)" },
1249 { 7, "Network Control (Voice)" },
1250 { 0, NULL((void*)0) }
1251};
1252
1253/* ************************************************************************* */
1254/* WME Access Category Names (by WME ACI) */
1255/* ************************************************************************* */
1256static const value_string wme_acs[] = {
1257 { 0, "Best Effort" },
1258 { 1, "Background" },
1259 { 2, "Video" },
1260 { 3, "Voice" },
1261 { 0, NULL((void*)0) }
1262};
1263
1264/* ************************************************************************* */
1265/* Aruba Management Type */
1266/* ************************************************************************* */
1267static const value_string aruba_mgt_typevals[] = {
1268 { 0x0001, "Hello" },
1269 { 0x0002, "Probe" },
1270 { 0x0003, "MTU" },
1271 { 0x0004, "Ageout" },
1272 { 0x0005, "Heartbeat" },
1273 { 0x0006, "Deauth" },
1274 { 0x0007, "Disassoc" },
1275 { 0x0008, "Probe response" },
1276 { 0x0009, "Tunnel update" },
1277 { 0x000A, "Laser beam active" },
1278 { 0x000B, "Client IP" },
1279 { 0x000C, "Laser beam active v2" },
1280 { 0x000D, "AP statistics" },
1281 { 0, NULL((void*)0) }
1282};
1283static 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) }
;
1284
1285/*** Begin: Action Fixed Parameter ***/
1286#define CAT_SPECTRUM_MGMT0 0
1287#define CAT_QOS1 1
1288#define CAT_DLS2 2
1289#define CAT_BLOCK_ACK3 3
1290#define CAT_PUBLIC4 4
1291#define CAT_RADIO_MEASUREMENT5 5
1292#define CAT_FAST_BSS_TRANSITION6 6
1293#define CAT_HT7 7
1294#define CAT_SA_QUERY8 8
1295#define CAT_PUBLIC_PROTECTED9 9
1296#define CAT_WNM10 10
1297#define CAT_UNPROTECTED_WNM11 11
1298#define CAT_TDLS12 12
1299#define CAT_MESH13 13
1300#define CAT_MULTIHOP14 14
1301#define CAT_SELF_PROTECTED15 15
1302#define CAT_DMG16 16
1303#define CAT_MGMT_NOTIFICATION17 17
1304#define CAT_FAST_SESSION_TRANSFER18 18
1305#define CAT_ROBUST_AV_STREAMING19 19
1306#define CAT_UNPROTECTED_DMG20 20
1307#define CAT_VHT21 21
1308#define CAT_S1G22 22
1309#define CAT_PROTECTED_S1G23 23
1310#define CAT_FLOW_CONTROL24 24
1311#define CAT_CONTROL_RESPONSE_MCS_NEG25 25
1312#define CAT_FILS26 26
1313/* aj */
1314#define CAT_CDMG27 27
1315#define CAT_CMMG28 28
1316/* ak */
1317#define CAT_GLK29 29
1318
1319#define CAT_HE30 30
1320#define CAT_PROTECTED_HE31 31
1321#define CAT_PROTECTED_FTM34 34
1322#define CAT_EHT36 36
1323#define CAT_PROTECTED_EHT37 37
1324#define CAT_VENDOR_SPECIFIC_PROTECTED126 126
1325#define CAT_VENDOR_SPECIFIC127 127
1326
1327#define CAT_MESH_LINK_METRIC31 31
1328#define CAT_MESH_PATH_SELECTION32 32
1329#define CAT_MESH_INTERWORKING33 33
1330#define CAT_MESH_RESOURCE_COORDINATION34 34
1331#define CAT_MESH_SECURITY_ARCHITECTURE35 35
1332
1333#define SM_ACTION_MEASUREMENT_REQUEST0 0
1334#define SM_ACTION_MEASUREMENT_REPORT1 1
1335#define SM_ACTION_TPC_REQUEST2 2
1336#define SM_ACTION_TPC_REPORT3 3
1337#define SM_ACTION_CHAN_SWITCH_ANNC4 4
1338#define SM_ACTION_EXT_CHAN_SWITCH_ANNC5 5
1339
1340#define QOS_ACTION_ADDTS_REQUEST0 0
1341#define QOS_ACTION_ADDTS_RESPONSE1 1
1342#define QOS_ACTION_DELTS2 2
1343#define QOS_ACTION_SCHEDULE3 3
1344#define QOS_ACTION_MAP_CONFIGURE4 4
1345
1346#define DLS_ACTION_REQUEST0 0
1347#define DLS_ACTION_RESPONSE1 1
1348#define DLS_ACTION_TEARDOWN2 2
1349
1350#define BA_ADD_BLOCK_ACK_REQUEST0 0
1351#define BA_ADD_BLOCK_ACK_RESPONSE1 1
1352#define BA_DELETE_BLOCK_ACK2 2
1353
1354#define BA_NDP_ADD_BLOCK_ACK_REQUEST128 128
1355#define BA_NDP_ADD_BLOCK_ACK_RESPONSE129 129
1356#define BA_NDP_DELETE_BLOCK_ACK130 130
1357#define BA_BAT_ADD_BLOCK_ACK_REQUEST132 132
1358#define BA_BAT_ADD_BLOCK_ACK_RESPONSE133 133
1359#define BA_BAT_DELETE_BLOCK_ACK134 134
1360
1361#define BA_ADD_BLOCK_ACK_REQUEST0 0
1362#define BA_ADD_BLOCK_ACK_RESPONSE1 1
1363#define BA_DELETE_BLOCK_ACK2 2
1364
1365/* Keep in sync with PPA_* defines */
1366#define PA_20_40_BSS_COEXISTENCE_MANAGEMENT0 0
1367#define PA_DSE_ENABLEMENT1 1
1368#define PA_DSE_DEENABLEMENT2 2
1369#define PA_DSE_REG_LOC_ANNOUNCEMENT3 3
1370#define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4 4
1371#define PA_DSE_MEASUREMENT_REQUEST5 5
1372#define PA_DSE_MEASUREMENT_REPORT6 6
1373#define PA_MEASUREMENT_PILOT7 7
1374#define PA_DSE_POWER_CONSTRAINT8 8
1375#define PA_VENDOR_SPECIFIC9 9
1376#define PA_GAS_INITIAL_REQUEST10 10
1377#define PA_GAS_INITIAL_RESPONSE11 11
1378#define PA_GAS_COMEBACK_REQUEST12 12
1379#define PA_GAS_COMEBACK_RESPONSE13 13
1380#define PA_TDLS_DISCOVERY_RESPONSE14 14
1381#define PA_LOCATION_TRACK_NOTIFICATION15 15
1382#define PA_QAB_REQUEST16 16
1383#define PA_QAB_RESPONSE17 17
1384#define PA_QMF_POLICY18 18
1385#define PA_QMF_POLICY_CHANGE19 19
1386#define PA_QLOAD_REQUEST20 20
1387#define PA_QLOAD_REPORT21 21
1388#define PA_HCCA_TXOP_ADVERTISEMENT22 22
1389#define PA_HCCA_TXOP_RESPONSE23 23
1390#define PA_PUBLIC_KEY24 24
1391#define PA_CHANNEL_AVAILABILITY_QUERY25 25
1392#define PA_CHANNEL_SCHEDULE_MANAGEMENT26 26
1393#define PA_CONTACT_VERIFICATION_SIGNAL27 27
1394#define PA_GDD_ENABLEMENT_REQUEST28 28
1395#define PA_GDD_ENABLEMENT_RESPONSE29 29
1396#define PA_NETWORK_CHANNEL_CONTROL30 30
1397#define PA_WHITE_SPACE_MAP_ANNOUNCEMENT31 31
1398#define PA_FTM_REQUEST32 32
1399#define PA_FTM33 33
1400#define PA_FILS_DISCOVERY34 34
1401/* 802.11aj */
1402#define PA_DCS_MEASUREMENT_REQUEST35 35
1403#define PA_DCS_MEASUREMENT_REPORT36 36
1404#define PA_DCS_REQUEST37 37
1405#define PA_DCS_RESPONSE38 38
1406#define PA_EXTENDED_NOTIFICATION_PERIOD_REQUEST39 39
1407#define PA_EXTENDED_NOTIFICATION_PERIOD_RESPONSE40 40
1408#define PA_EXTENDED_CHANNEL_SPLITTING_REQUEST41 41
1409#define PA_EXTENDED_CHANNEL_SPLITTING_RESPONSE42 42
1410/* 802.11aq */
1411#define PA_GROUP_ADDRESSED_GAS_REQUEST43 43
1412#define PA_GROUP_ADDRESSED_GAS_RESPONSE44 44
1413/* Unknown */
1414#define PA_ON_CHANNEL_TUNNEL_REQUEST45 45
1415#define PA_VALUE_4646 46
1416/* 802.11az */
1417#define PA_LOCATION_MEASUREMENT_REPORT47 47
1418#define PA_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT48 48
1419#define PA_PRIMARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT49 49
1420#define PA_SECONDARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT50 50
1421
1422/* Keep in sync with PA_* defines */
1423#define PPA_DSE_ENABLEMENT1 1
1424#define PPA_DSE_DEENABLEMENT2 2
1425#define PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4 4
1426#define PPA_DSE_MEASUREMENT_REQUEST5 5
1427#define PPA_DSE_MEASUREMENT_REPORT6 6
1428#define PPA_DSE_POWER_CONSTRAINT8 8
1429#define PPA_VENDOR_SPECIFIC9 9
1430#define PPA_GAS_INITIAL_REQUEST10 10
1431#define PPA_GAS_INITIAL_RESPONSE11 11
1432#define PPA_GAS_COMEBACK_REQUEST12 12
1433#define PPA_GAS_COMEBACK_RESPONSE13 13
1434#define PPA_QAB_REQUEST16 16
1435#define PPA_QAB_RESPONSE17 17
1436
1437#define HT_ACTION_NOTIFY_CHAN_WIDTH0 0
1438#define HT_ACTION_SM_PWR_SAVE1 1
1439#define HT_ACTION_PSMP_ACTION2 2
1440#define HT_ACTION_SET_PCO_PHASE3 3
1441#define HT_ACTION_MIMO_CSI4 4
1442#define HT_ACTION_MIMO_BEAMFORMING5 5
1443#define HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6 6
1444#define HT_ACTION_ANT_SEL_FEEDBACK7 7
1445#define HT_ACTION_HT_INFO_EXCHANGE8 8
1446
1447#define DMG_ACTION_PWR_SAVE_CONFIG_REQ0 0
1448#define DMG_ACTION_PWR_SAVE_CONFIG_RES1 1
1449#define DMG_ACTION_INFO_REQ2 2
1450#define DMG_ACTION_INFO_RES3 3
1451#define DMG_ACTION_HANDOVER_REQ4 4
1452#define DMG_ACTION_HANDOVER_RES5 5
1453#define DMG_ACTION_DTP_REQ6 6
1454#define DMG_ACTION_DTP_RES7 7
1455#define DMG_ACTION_RELAY_SEARCH_REQ8 8
1456#define DMG_ACTION_RELAY_SEARCH_RES9 9
1457#define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10 10
1458#define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11 11
1459#define DMG_ACTION_RLS_REQ12 12
1460#define DMG_ACTION_RLS_RES13 13
1461#define DMG_ACTION_RLS_ANNOUNCE14 14
1462#define DMG_ACTION_RLS_TEARDOWN15 15
1463#define DMG_ACTION_RELAY_ACK_REQ16 16
1464#define DMG_ACTION_RELAY_ACK_RES17 17
1465#define DMG_ACTION_TPA_REQ18 18
1466#define DMG_ACTION_TPA_RES19 19
1467#define DMG_ACTION_TPA_REP20 20
1468#define DMG_ACTION_ROC_REQ21 21
1469#define DMG_ACTION_ROC_RES22 22
1470
1471#define UNPROTECTED_DMG_ANNOUNCE0 0
1472#define UNPROTECTED_DMG_BRP1 1
1473
1474#define FST_SETUP_REQUEST0 0
1475#define FST_SETUP_RESPONSE1 1
1476#define FST_TEAR_DOWN2 2
1477#define FST_ACK_REQUEST3 3
1478#define FST_ACK_RESPONSE4 4
1479#define FST_ON_CHANNEL_TUNNEL_REQUEST5 5
1480
1481#define ROBUST_AV_STREAMING_SCS_REQUEST0 0
1482#define ROBUST_AV_STREAMING_SCS_RESPONSE1 1
1483#define ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_REQ2 2
1484#define ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_RSP3 3
1485#define ROBUST_AV_STREAMING_MSCS_REQUEST4 4
1486#define ROBUST_AV_STREAMING_MSCS_RESPONSE5 5
1487
1488
1489/* IEEE Std 802.11r-2008, 7.4.8, Table 7-57g */
1490#define FT_ACTION_REQUEST1 1
1491#define FT_ACTION_RESPONSE2 2
1492#define FT_ACTION_CONFIRM3 3
1493#define FT_ACTION_ACK4 4
1494
1495/* SA Query Action frame codes (IEEE 802.11w-2009, 7.4.9) */
1496#define SA_QUERY_REQUEST0 0
1497#define SA_QUERY_RESPONSE1 1
1498
1499/* IEEE Std 802.11z-2010, 7.4.11, Table 7-57v1 */
1500#define TDLS_SETUP_REQUEST0 0
1501#define TDLS_SETUP_RESPONSE1 1
1502#define TDLS_SETUP_CONFIRM2 2
1503#define TDLS_TEARDOWN3 3
1504#define TDLS_PEER_TRAFFIC_INDICATION4 4
1505#define TDLS_CHANNEL_SWITCH_REQUEST5 5
1506#define TDLS_CHANNEL_SWITCH_RESPONSE6 6
1507#define TDLS_PEER_PSM_REQUEST7 7
1508#define TDLS_PEER_PSM_RESPONSE8 8
1509#define TDLS_PEER_TRAFFIC_RESPONSE9 9
1510#define TDLS_DISCOVERY_REQUEST10 10
1511
1512/* IEEE Std 802.11-2012, 8.5.7.1, Table 8-206 */
1513#define RM_ACTION_RADIO_MEASUREMENT_REQUEST0 0
1514#define RM_ACTION_RADIO_MEASUREMENT_REPORT1 1
1515#define RM_ACTION_LINK_MEASUREMENT_REQUEST2 2
1516#define RM_ACTION_LINK_MEASUREMENT_REPORT3 3
1517#define RM_ACTION_NEIGHBOR_REPORT_REQUEST4 4
1518#define RM_ACTION_NEIGHBOR_REPORT_RESPONSE5 5
1519
1520/* 11s draft 12.0, table 7-57v30 */
1521#define MESH_ACTION_LINK_METRIC_REPORT0 0
1522#define MESH_ACTION_HWMP1 1
1523#define MESH_ACTION_GATE_ANNOUNCE2 2
1524#define MESH_ACTION_CONGESTION_CTL3 3
1525#define MESH_ACTION_MCCA_SETUP_REQUEST4 4
1526#define MESH_ACTION_MCCA_SETUP_REPLY5 5
1527#define MESH_ACTION_MCCA_ADV_REQUEST6 6
1528#define MESH_ACTION_MCCA_ADV7 7
1529#define MESH_ACTION_MCCA_TEARDOWN8 8
1530#define MESH_ACTION_TBTT_ADJ_REQUEST9 9
1531#define MESH_ACTION_TBTT_ADJ_RESPONSE10 10
1532
1533/* 11s draft 12.0, table 7-57v42: Multihop Action field values */
1534#define MULTIHOP_ACTION_PROXY_UPDATE0 0
1535#define MULTIHOP_ACTION_PROXY_UPDATE_CONF1 1
1536
1537/* 11s draft 12.0, table 7-57v24: Self-protected Action field values */
1538#define SELFPROT_ACTION_MESH_PEERING_OPEN1 1
1539#define SELFPROT_ACTION_MESH_PEERING_CONFIRM2 2
1540#define SELFPROT_ACTION_MESH_PEERING_CLOSE3 3
1541#define SELFPROT_ACTION_MESH_GROUP_KEY_INFORM4 4
1542#define SELFPROT_ACTION_MESH_GROUP_KEY_ACK5 5
1543
1544/* 11s draft 12.0, table 7-43bj6: Mesh Peering Protocol Identifier field values */
1545#define MESH_PEERING_PROTO_MGMT0 0
1546#define MESH_PEERING_PROTO_AMPE1 1
1547#define MESH_PEERING_PROTO_VENDOR255 255
1548
1549/* Vendor actions */
1550/* MARVELL */
1551#define MRVL_ACTION_MESH_MANAGEMENT1 1
1552
1553#define MRVL_MESH_MGMT_ACTION_RREQ0 0
1554#define MRVL_MESH_MGMT_ACTION_RREP1 1
1555#define MRVL_MESH_MGMT_ACTION_RERR2 2
1556#define MRVL_MESH_MGMT_ACTION_PLDM3 3
1557
1558#define ANQP_INFO_ANQP_QUERY_LIST256 256
1559#define ANQP_INFO_ANQP_CAPAB_LIST257 257
1560#define ANQP_INFO_VENUE_NAME_INFO258 258
1561#define ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO259 259
1562#define ANQP_INFO_NETWORK_AUTH_TYPE_INFO260 260
1563#define ANQP_INFO_ROAMING_CONSORTIUM_LIST261 261
1564#define ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262 262
1565#define ANQP_INFO_NAI_REALM_LIST263 263
1566#define ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264 264
1567#define ANQP_INFO_AP_GEOSPATIAL_LOCATION265 265
1568#define ANQP_INFO_AP_CIVIC_LOCATION266 266
1569#define ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI267 267
1570#define ANQP_INFO_DOMAIN_NAME_LIST268 268
1571#define ANQP_INFO_EMERGENCY_ALERT_ID_URI269 269
1572#define ANQP_INFO_TDLS_CAPAB_INFO270 270
1573#define ANQP_INFO_EMERGENCY_NAI271 271
1574#define ANQP_INFO_NEIGHBOR_REPORT272 272
1575#define ANQP_INFO_QUERY_AP_LIST273 273
1576#define ANQP_INFO_AP_LIST_RESPONSE274 274
1577#define ANQP_INFO_FILS_REALM_INFO275 275
1578#define ANQP_INFO_CAG276 276
1579#define ANQP_INFO_VENUE_URL277 277
1580#define ANQP_INFO_ADVICE_OF_CHARGE278 278
1581#define ANQP_INFO_LOCAL_CONTENT279 279
1582#define ANQP_INFO_NETWORK_AUTH_TYPE_TIMESTAMP280 280
1583#define ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797 56797
1584
1585/* ANQP information ID - IEEE Std 802.11u-2011 - Table 7-43bk */
1586static const value_string anqp_info_id_vals[] = {
1587 {ANQP_INFO_ANQP_QUERY_LIST256, "ANQP Query list"},
1588 {ANQP_INFO_ANQP_CAPAB_LIST257, "ANQP Capability list"},
1589 {ANQP_INFO_VENUE_NAME_INFO258, "Venue Name information"},
1590 {ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO259, "Emergency Call Number information"},
1591 {ANQP_INFO_NETWORK_AUTH_TYPE_INFO260,
1592 "Network Authentication Type information"},
1593 {ANQP_INFO_ROAMING_CONSORTIUM_LIST261, "Roaming Consortium list"},
1594 {ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262,
1595 "IP Address Type Availability information"},
1596 {ANQP_INFO_NAI_REALM_LIST263, "NAI Realm list"},
1597 {ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264, "3GPP Cellular Network information"},
1598 {ANQP_INFO_AP_GEOSPATIAL_LOCATION265, "AP Geospatial Location"},
1599 {ANQP_INFO_AP_CIVIC_LOCATION266, "AP Civic Location"},
1600 {ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI267, "AP Location Public Identifier URI"},
1601 {ANQP_INFO_DOMAIN_NAME_LIST268, "Domain Name list"},
1602 {ANQP_INFO_EMERGENCY_ALERT_ID_URI269, "Emergency Alert Identifier URI"},
1603 {ANQP_INFO_TDLS_CAPAB_INFO270, "TDLS Capability information"},
1604 {ANQP_INFO_EMERGENCY_NAI271, "Emergency NAI"},
1605 {ANQP_INFO_NEIGHBOR_REPORT272, "Neighbor Report"},
1606 {ANQP_INFO_QUERY_AP_LIST273, "Query AP List"},
1607 {ANQP_INFO_AP_LIST_RESPONSE274, "AP List Response"},
1608 {ANQP_INFO_FILS_REALM_INFO275, "FILS Realm Info"},
1609 {ANQP_INFO_CAG276, "CAG"},
1610 {ANQP_INFO_VENUE_URL277, "Venue URL"},
1611 {ANQP_INFO_ADVICE_OF_CHARGE278, "Advice of Charge"},
1612 {ANQP_INFO_LOCAL_CONTENT279, "Local Content"},
1613 {ANQP_INFO_NETWORK_AUTH_TYPE_TIMESTAMP280,
1614 "Network Authentication Type with Timestamp"},
1615 {ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797, "ANQP vendor-specific list"},
1616 {0, NULL((void*)0)}
1617};
1618static 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) }
;
1619
1620/* IEEE 802.11v - WNM Action field values */
1621enum wnm_action {
1622 WNM_EVENT_REQ = 0,
1623 WNM_EVENT_REPORT = 1,
1624 WNM_DIAGNOSTIC_REQ = 2,
1625 WNM_DIAGNOSTIC_REPORT = 3,
1626 WNM_LOCATION_CFG_REQ = 4,
1627 WNM_LOCATION_CFG_RESP = 5,
1628 WNM_BSS_TRANS_MGMT_QUERY = 6,
1629 WNM_BSS_TRANS_MGMT_REQ = 7,
1630 WNM_BSS_TRANS_MGMT_RESP = 8,
1631 WNM_FMS_REQ = 9,
1632 WNM_FMS_RESP = 10,
1633 WNM_COLLOCATED_INTERFERENCE_REQ = 11,
1634 WNM_COLLOCATED_INTERFERENCE_REPORT = 12,
1635 WNM_TFS_REQ = 13,
1636 WNM_TFS_RESP = 14,
1637 WNM_TFS_NOTIFY = 15,
1638 WNM_SLEEP_MODE_REQ = 16,
1639 WNM_SLEEP_MODE_RESP = 17,
1640 WNM_TIM_BROADCAST_REQ = 18,
1641 WNM_TIM_BROADCAST_RESP = 19,
1642 WNM_QOS_TRAFFIC_CAPAB_UPDATE = 20,
1643 WNM_CHANNEL_USAGE_REQ = 21,
1644 WNM_CHANNEL_USAGE_RESP = 22,
1645 WNM_DMS_REQ = 23,
1646 WNM_DMS_RESP = 24,
1647 WNM_TIMING_MEASUREMENT_REQ = 25,
1648 WNM_NOTIFICATION_REQ = 26,
1649 WNM_NOTIFICATION_RESP = 27
1650};
1651
1652static const value_string wnm_action_codes[] = {
1653 { WNM_EVENT_REQ, "Event Request" },
1654 { WNM_EVENT_REPORT, "Event Report" },
1655 { WNM_DIAGNOSTIC_REQ, "Diagnostic Request" },
1656 { WNM_DIAGNOSTIC_REPORT, "Diagnostic Report" },
1657 { WNM_LOCATION_CFG_REQ, "Location Configuration Request" },
1658 { WNM_LOCATION_CFG_RESP, "Location Configuration Response" },
1659 { WNM_BSS_TRANS_MGMT_QUERY, "BSS Transition Management Query" },
1660 { WNM_BSS_TRANS_MGMT_REQ, "BSS Transition Management Request" },
1661 { WNM_BSS_TRANS_MGMT_RESP, "BSS Transition Management Response" },
1662 { WNM_FMS_REQ, "FMS Request" },
1663 { WNM_FMS_RESP, "FMS Response" },
1664 { WNM_COLLOCATED_INTERFERENCE_REQ, "Collocated Interference Request" },
1665 { WNM_COLLOCATED_INTERFERENCE_REPORT, "Collocated Interference Report" },
1666 { WNM_TFS_REQ, "TFS Request" },
1667 { WNM_TFS_RESP, "TFS Response" },
1668 { WNM_TFS_NOTIFY, "TFS Notify" },
1669 { WNM_SLEEP_MODE_REQ, "WNM-Sleep Mode Request" },
1670 { WNM_SLEEP_MODE_RESP, "WNM-Sleep Mode Response" },
1671 { WNM_TIM_BROADCAST_REQ, "TIM Broadcast Request" },
1672 { WNM_TIM_BROADCAST_RESP, "TIM Broadcast Response" },
1673 { WNM_QOS_TRAFFIC_CAPAB_UPDATE, "QoS Traffic Capability Update" },
1674 { WNM_CHANNEL_USAGE_REQ, "Channel Usage Request" },
1675 { WNM_CHANNEL_USAGE_RESP, "Channel Usage Response" },
1676 { WNM_DMS_REQ, "DMS Request" },
1677 { WNM_DMS_RESP, "DMS Response" },
1678 { WNM_TIMING_MEASUREMENT_REQ, "Timing Measurement Request" },
1679 { WNM_NOTIFICATION_REQ, "WNM-Notification Request" },
1680 { WNM_NOTIFICATION_RESP, "WNM-Notification Response" },
1681 { 0, NULL((void*)0) }
1682};
1683static 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) }
;
1684
1685enum unprotected_wnm_action {
1686 UNPROTECTED_WNM_TIM = 0,
1687 UNPROTECTED_WNM_TIMING_MEASUREMENT = 1
1688};
1689
1690static const value_string unprotected_wnm_action_codes[] = {
1691 { UNPROTECTED_WNM_TIM, "TIM" },
1692 { UNPROTECTED_WNM_TIMING_MEASUREMENT, "Timing Measurement" },
1693 { 0, NULL((void*)0) }
1694};
1695static 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) }
;
1696
1697static const value_string wnm_notification_types[] = {
1698 { 0, "Firmware Update Notification" },
1699 { 1, "Reserved for use by WFA" },
1700 { 221, "Vendor Specific" },
1701 { 0, NULL((void*)0) }
1702};
1703
1704static value_string_ext wnm_notification_types_ext =
1705 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) }
;
1706
1707static const range_string wnm_notification_response_code[] = {
1708 { 0, 0, "Notification Acknowledged" },
1709 { 1, 255, "Reserved" },
1710 { 0, 0, NULL((void*)0) }
1711};
1712
1713/*** End: Action Fixed Parameter ***/
1714
1715static const value_string ieee80211_tag_measure_request_type_flags[] = {
1716 {0x00, "Basic Request"},
1717 {0x01, "Clear Channel Assessment (CCA) Request"},
1718 {0x02, "Receive Power Indication (RPI) Histogram Request"},
1719 {0x03, "Channel Load Request"},
1720 {0x04, "Noise Histogram Request"},
1721 {0x05, "Beacon Request"},
1722 {0x06, "Frame Request"},
1723 {0x07, "STA Statistics Request"},
1724 {0x08, "Location Configuration Indication (LCI) Request"},
1725 {0x09, "Transmit Stream Measurement Request"},
1726 {0x0a, "Multicast Diagnostics Request"},
1727 {0x0b, "Location Civic Request"},
1728 {0x0c, "Location Identifier Request"},
1729 {0x0d, "Directional Channel Quality Request"},
1730 {0x0e, "Directional Measurement Request"},
1731 {0x0f, "Directional Statistics Request"},
1732 {0x10, "Fine Timing Measurement Range Request"},
1733 {0xFF, "Measurement Pause Request"},
1734 {0x00, NULL((void*)0)}
1735};
1736static value_string_ext ieee80211_tag_measure_request_type_flags_ext =
1737 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) }
;
1738
1739static const value_string ieee80211_tag_measure_report_type_flags[] = {
1740 { 0x00, "Basic Report" },
1741 { 0x01, "Clear Channel Assessment (CCA) Report" },
1742 { 0x02, "Receive Power Indication (RPI) Histogram Report" },
1743 { 0x03, "Channel Load Report" },
1744 { 0x04, "Noise Histogram Report" },
1745 { 0x05, "Beacon Report" },
1746 { 0x06, "Frame Report" },
1747 { 0x07, "STA Statistics Report" },
1748 { 0x08, "Location Configuration Information (LCI) Report" },
1749 { 0x09, "Transmit Stream Measurement Report" },
1750 { 0x0a, "Multicast Diagnostics Report"},
1751 { 0x0b, "Location Civic Report"},
1752 { 0x0c, "Location Identifier Report"},
1753 { 0x0d, "Directional Channel Quality Report"},
1754 { 0x0e, "Directional Measurement Report"},
1755 { 0x0f, "Directional Statistics Report"},
1756 { 0x10, "Fine Timing Measurement Range Report"},
1757 { 0x00, NULL((void*)0) }
1758};
1759static value_string_ext ieee80211_tag_measure_report_type_flags_ext =
1760 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) }
;
1761
1762static const true_false_string ieee80211_tag_measure_report_frame_info_frame_type_flag = {
1763 "Measurement Pilot Frame",
1764 "Beacon/Probe Response Frame"
1765};
1766
1767static const true_false_string ig_tfs = {
1768 "Group address (multicast/broadcast)",
1769 "Individual address (unicast)"
1770};
1771
1772static const true_false_string lg_tfs = {
1773 "Locally administered address (this is NOT the factory default)",
1774 "Globally unique address (factory default)"
1775};
1776
1777static const true_false_string ieee80211_tag_measure_map_field_bss_flag = {
1778 "At least one valid MPDU was received by another BSS or IBSS during the measurement period.",
1779 "No valid MPDUs were received from another BSS or IBSS during the measurement period."
1780};
1781
1782static const value_string ieee80211_tag_measure_request_measurement_mode_flags[] = {
1783 { 0x00, "Passive" },
1784 { 0x01, "Active" },
1785 { 0x02, "Beacon Table" },
1786 { 0x00, NULL((void*)0) }
1787};
1788
1789#define MEASURE_REQ_BEACON_SUB_SSID0 0
1790#define MEASURE_REQ_BEACON_SUB_BRI1 1
1791#define MEASURE_REQ_BEACON_SUB_RD2 2
1792#define MEASURE_REQ_BEACON_SUB_REQUEST10 10
1793#define MEASURE_REQ_BEACON_SUB_REQUEST_EXT11 11
1794#define MEASURE_REQ_BEACON_SUB_APCP51 51
1795#define MEASURE_REQ_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163 163
1796#define MEASURE_REQ_BEACON_SUB_LAST_REPORT_REQ164 164
1797#define MEASURE_REQ_BEACON_SUB_VS221 221
1798
1799static const value_string ieee80211_tag_measure_request_beacon_sub_id_flags[] = {
1800 { MEASURE_REQ_BEACON_SUB_SSID0, "SSID" },
1801 { MEASURE_REQ_BEACON_SUB_BRI1, "Beacon Reporting Information" },
1802 { MEASURE_REQ_BEACON_SUB_RD2, "Reporting Detail" },
1803 { MEASURE_REQ_BEACON_SUB_REQUEST10, "Request" },
1804 { MEASURE_REQ_BEACON_SUB_REQUEST_EXT11, "Extended Request" },
1805 { MEASURE_REQ_BEACON_SUB_APCP51, "AP Channel Report" },
1806 { MEASURE_REQ_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163, "Wide Channel Bandwidth Switch" },
1807 { MEASURE_REQ_BEACON_SUB_LAST_REPORT_REQ164, "Last Beacon Report Indication Request" },
1808 { MEASURE_REQ_BEACON_SUB_VS221, "Vendor Specific" },
1809 { 0x00, NULL((void*)0)}
1810};
1811
1812static const value_string ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags[] = {
1813 { 0x00, "Report to be issued after each measurement." },
1814 { 0x01, "The measured RCPI level is greater than an absolute threshold." },
1815 { 0x02, "The measured RCPI level is less than an absolute threshold." },
1816 { 0x03, "The measured RSNI level is greater than an absolute threshold." },
1817 { 0x04, "The measured RSNI level is less than an absolute threshold." },
1818 { 0x05, "The measured RCPI level is greater than a threshold defined by an offset from the serving AP's reference RCPI." },
1819 { 0x06, "The measured RCPI level is less than a threshold defined by an offset from the serving AP's reference RCPI." },
1820 { 0x07, "The measured RSNI level is greater than a threshold defined by an offset from the serving AP's reference RSNI." },
1821 { 0x08, "The measured RSNI level is less than a threshold defined by an offset from the serving AP's reference RSNI." },
1822 { 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." },
1823 { 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." },
1824 { 0xfe, "Report not required to be issued" },
1825 { 0x00, NULL((void*)0) }
1826};
1827
1828static const value_string ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags[] = {
1829 { 0, "No fixed length fields or elements" },
1830 { 1, "All fixed length fields and any requested elements in the Request information element if present" },
1831 { 2, "All fixed length fields and elements (default, used when Reporting Detail subelement is not included in Beacon Request" },
1832 { 0x00, NULL((void*)0) }
1833};
1834
1835static const value_string ieee80211_tag_measure_request_group_id_flags[] = {
1836 { 0x00, "STA Counters from dot11CountersTable" },
1837 { 0x01, "STA Counters from dot11MacStatistics group" },
1838 { 0x02, "QoS STA Counters for UP0 from dot11QosCountersTable" },
1839 { 0x03, "QoS STA Counters for UP1 from dot11QosCountersTable" },
1840 { 0x04, "QoS STA Counters for UP2 from dot11QosCountersTable" },
1841 { 0x05, "QoS STA Counters for UP3 from dot11QosCountersTable" },
1842 { 0x06, "QoS STA Counters for UP4 from dot11QosCountersTable" },
1843 { 0x07, "QoS STA Counters for UP5 from dot11QosCountersTable" },
1844 { 0x08, "QoS STA Counters for UP6 from dot11QosCountersTable" },
1845 { 0x09, "QoS STA Counters for UP7 from dot11QosCountersTable" },
1846 { 0x0a, "BSS Average Access Delays" },
1847 { 0x0b, "STA Counters from dot11A-MSDU Group" },
1848 { 0x0c, "STA Counters from dot11A-MPDU Group" },
1849 { 0x0d, "STA Counters from dot11 BAR, Channel Width, PSMP Group" },
1850 { 0x0e, "STA Counters from dot11Protection Group" },
1851 { 0x0f, "STBC Group" },
1852 { 0x00, NULL((void*)0) }
1853};
1854static value_string_ext ieee80211_tag_measure_request_group_id_flags_ext =
1855 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) }
;
1856
1857static const value_string ieee80211_tag_measure_request_location_subject[] = {
1858 { 0, "Local" },
1859 { 1, "Remote" },
1860 { 2, "Third party" },
1861 { 0x00, NULL((void*)0) }
1862};
1863
1864static const value_string ieee80211_tag_measure_request_civic_location_type[] = {
1865 { 0, "IETF RFC 4776" },
1866 { 1, "Vendor Specific" },
1867 { 0x00, NULL((void*)0) }
1868};
1869
1870static const value_string ieee80211_tclas_process_flag[] = {
1871 {0x00, "Incoming MSDU's higher layer parameters have to match to the parameters in all associated TCLAS elements."},
1872 {0x01, "Incoming MSDU's higher layer parameters have to match to at least one of the associated TCLAS elements."},
1873 {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."},
1874 {0, NULL((void*)0)}
1875};
1876
1877
1878#define MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1 1
1879
1880static const value_string ieee80211_tag_measure_request_channel_load_sub_id_vals[] = {
1881 { MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1, "Channel Load Reporting Information" },
1882 { 221, "Vendor Specific" },
1883 { 0x00, NULL((void*)0)}
1884};
1885
1886static const value_string ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals[] = {
1887 { 0x00, "Report to be issued after each measurement (default, used when Channel Load Reporting Information subelement is not included in Channel Load Request)." },
1888 { 0x01, "Report to be issued when measured Channel Load is equal to or greater than the reference value." },
1889 { 0x02, "Report to be issued when measured Channel Load is equal to or less than the reference value." },
1890 { 0x00, NULL((void*)0)}
1891};
1892
1893#define MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1 1
1894
1895static const value_string ieee80211_tag_measure_request_noise_histogram_sub_id_vals[] = {
1896 { MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1, "Noise Histogram Reporting Information" },
1897 { 221, "Vendor Specific" },
1898 { 0x00, NULL((void*)0)}
1899};
1900
1901static const value_string ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals[] = {
1902 { 0x00, "Report to be issued after each measurement (default, used when Noise Histogram Reporting Information subelement is not included in Noise Histogram Request)." },
1903 { 0x01, "Noise Histogram Report to be issued when measured ANPI is equal to or greater than the reference value." },
1904 { 0x02, "Noise Histogram Report to be issued when measured ANPI is equal to or less than the reference value." },
1905 { 0x00, NULL((void*)0)}
1906};
1907
1908#define MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY1 1
1909#define MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2 2
1910#define MEASURE_REP_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163 163
1911#define MEASURE_REP_BEACON_SUB_LAST_REPORT_INDICATION164 164
1912
1913static const value_string ieee80211_tag_measure_report_beacon_sub_id_vals[] = {
1914 { MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY1, "Reported Frame Body" },
1915 { MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2, "Reported Frame Body Fragment ID" },
1916 { MEASURE_REP_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163, "Wide Bandwidth Channel Switch"},
1917 { MEASURE_REP_BEACON_SUB_LAST_REPORT_INDICATION164, "Last Beacon Report Indication"},
1918 { 221, "Vendor Specific" },
1919 { 0x00, NULL((void*)0)}
1920};
1921
1922#define MEASURE_REP_LCI_SUB_REPORTED_LCI0 0
1923#define MEASURE_REP_LCI_SUB_REPORTED_AZIMUTH_REPORT1 1
1924#define MEASURE_REP_LCI_SUB_REPORTED_OR_STA2 2
1925#define MEASURE_REP_LCI_SUB_REPORTED_T_MAC3 3
1926#define MEASURE_REP_LCI_SUB_REPORTED_Z4 4
1927#define MEASURE_REP_LCI_SUB_REPORTED_RLE5 5
1928#define MEASURE_REP_LCI_SUB_REPORTED_URP6 6
1929#define MEASURE_REP_LCI_SUB_REPORTED_CO_BSSID7 7
1930
1931static const value_string ieee80211_tag_measure_report_lci_sub_id_vals[] = {
1932 { MEASURE_REP_LCI_SUB_REPORTED_LCI0, "LCI" },
1933 { MEASURE_REP_LCI_SUB_REPORTED_AZIMUTH_REPORT1, "Azimuth Report" },
1934 { MEASURE_REP_LCI_SUB_REPORTED_OR_STA2, "Originator Requesting STA MAC Address" },
1935 { MEASURE_REP_LCI_SUB_REPORTED_T_MAC3, "Target MAC Address" },
1936 { MEASURE_REP_LCI_SUB_REPORTED_Z4, "Z" },
1937 { MEASURE_REP_LCI_SUB_REPORTED_RLE5, "Relative Location Error" },
1938 { MEASURE_REP_LCI_SUB_REPORTED_URP6, "Usage Rules/Policy" },
1939 { MEASURE_REP_LCI_SUB_REPORTED_CO_BSSID7, "Co-Located BSSID List" },
1940 { 221, "Vendor Specific" },
1941 { 0x00, NULL((void*)0)}
1942};
1943
1944#define MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_CIVIC0 0
1945#define MEASURE_REP_CIVIC_SUB_REPORTED_OR_STA1 1
1946#define MEASURE_REP_CIVIC_SUB_REPORTED_T_MAC2 2
1947#define MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_REFERENCE3 3
1948#define MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_SHAPE4 4
1949#define MEASURE_REP_CIVIC_SUB_REPORTED_MAP_IMAGE5 5
1950#define MEASURE_REP_CIVIC_SUB_REPORTED_RESERVED6 6
1951#define MEASURE_REP_CIVIC_SUB_REPORTED_CO_BSSID7 7
1952
1953static const value_string ieee80211_tag_measure_report_civic_sub_id_vals[] = {
1954 { MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_CIVIC0, "Location Civic" },
1955 { MEASURE_REP_CIVIC_SUB_REPORTED_OR_STA1, "Originator Requesting STA MAC Address" },
1956 { MEASURE_REP_CIVIC_SUB_REPORTED_T_MAC2, "Target MAC Address" },
1957 { MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_REFERENCE3, "Location Reference" },
1958 { MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_SHAPE4, "Location Shape" },
1959 { MEASURE_REP_CIVIC_SUB_REPORTED_MAP_IMAGE5, "Map Image" },
1960 { MEASURE_REP_CIVIC_SUB_REPORTED_RESERVED6, "Reserved" },
1961 { MEASURE_REP_CIVIC_SUB_REPORTED_CO_BSSID7, "Co-Located BSSID List" },
1962 { 221, "Vendor Specific" },
1963 { 0x00, NULL((void*)0)}
1964};
1965
1966static const value_string frame_type[] = {
1967 {MGT_FRAME0x00, "Management frame"},
1968 {CONTROL_FRAME0x01, "Control frame"},
1969 {DATA_FRAME0x02, "Data frame"},
1970 {EXTENSION_FRAME0x03, "Extension frame"},
1971 {0, NULL((void*)0)}
1972};
1973
1974static const value_string tofrom_ds[] = {
1975 {0, "Not leaving DS or network is operating "
1976 "in AD-HOC mode (To DS: 0 From DS: 0)"},
1977 {FLAG_TO_DS0x01, "Frame from STA to DS via an AP (To DS: 1 "
1978 "From DS: 0)"},
1979 {FLAG_FROM_DS0x02, "Frame from DS to a STA via AP(To DS: 0 "
1980 "From DS: 1)"},
1981 {FLAG_TO_DS0x01|FLAG_FROM_DS0x02, "WDS (AP to AP) or Mesh (MP to MP) Frame "
1982 "(To DS: 1 From DS: 1)"},
1983 {0, NULL((void*)0)}
1984};
1985
1986static const true_false_string tods_flag = {
1987 "Frame is entering DS",
1988 "Frame is not entering DS"
1989};
1990
1991static const true_false_string fromds_flag = {
1992 "Frame is exiting DS",
1993 "Frame is not exiting DS"
1994};
1995
1996static const true_false_string more_fragments = {
1997 "More fragments follow",
1998 "This is the last fragment"
1999};
2000
2001static const true_false_string retry_flags = {
2002 "Frame is being retransmitted",
2003 "Frame is not being retransmitted"
2004};
2005
2006static const true_false_string s1g_dynamic_indication_flags = {
2007 "Dynamic",
2008 "Static"
2009};
2010
2011static const true_false_string pm_flags = {
2012 "STA will go to sleep",
2013 "STA will stay up"
2014};
2015
2016static const true_false_string md_flags = {
2017 "Data is buffered for STA at AP",
2018 "No data buffered"
2019};
2020
2021static const true_false_string protected_flags = {
2022 "Data is protected",
2023 "Data is not protected"
2024};
2025
2026static const true_false_string order_flags = {
2027 "Strictly ordered",
2028 "Not strictly ordered"
2029};
2030
2031static const true_false_string cf_ess_flags = {
2032 "Transmitter is an AP",
2033 "Transmitter is a STA"
2034};
2035
2036
2037static const true_false_string cf_privacy_flags = {
2038 "Data confidentiality required",
2039 "Data confidentiality not required"
2040};
2041
2042static const true_false_string cf_ibss_flags = {
2043 "Transmitter belongs to an IBSS",
2044 "Transmitter belongs to a BSS"
2045};
2046
2047static const true_false_string eosp_flag = {
2048 "End of service period",
2049 "Service period"
2050};
2051
2052static const true_false_string bit4_flag = {
2053 "Bits 8-15 of QoS Control field are Queue Size",
2054 "Bits 8-15 of QoS Control field are TXOP Duration Requested"
2055};
2056
2057static const true_false_string ieee80211_qos_amsdu_present_flag = {
2058 "A-MSDU",
2059 "MSDU"
2060};
2061
2062static const true_false_string csa_txrestrict_flags = {
2063 "Tx Restrict",
2064 "No Tx Restrict"
2065};
2066
2067static const true_false_string csa_initiator_flags = {
2068 "Initiator",
2069 "Non Initiator"
2070};
2071
2072static const true_false_string mesh_config_cap_power_save_level_flags = {
2073 "At least one of the peer-specific mesh power modes is deep sleep mode",
2074 "None of the peer-specific mesh power modes is deep sleep mode"
2075};
2076
2077static const true_false_string ieee80211_qos_mesh_ps = {
2078 "deep sleep mode",
2079 "light sleep mode"
2080};
2081
2082#define AUTH_ALG_OPEN0 0
2083#define AUTH_ALG_SHARED1 1
2084#define AUTH_ALG_FAST_BSS_TRANS2 2
2085#define AUTH_ALG_SAE3 3
2086#define AUTH_ALG_FILS_SK_WITHOUT_PFS4 4
2087#define AUTH_ALG_FILS_SK_WITH_PFS5 5
2088#define AUTH_ALG_FILS_PK6 6
2089#define AUTH_ALG_PASN7 7
2090#define AUTH_ALG_NETWORK_EAP0x80 0x80
2091
2092static const value_string auth_alg[] = {
2093 {AUTH_ALG_OPEN0, "Open System"},
2094 {AUTH_ALG_SHARED1, "Shared key"},
2095 {AUTH_ALG_FAST_BSS_TRANS2, "Fast BSS Transition"},
2096 {AUTH_ALG_SAE3, "Simultaneous Authentication of Equals (SAE)"},
2097 {AUTH_ALG_FILS_SK_WITHOUT_PFS4, "FILS Shared Key authentication without PFS"},
2098 {AUTH_ALG_FILS_SK_WITH_PFS5, "FILS Shared Key authentication with PFS"},
2099 {AUTH_ALG_FILS_PK6, "FILS Public Key authentication"},
2100 {AUTH_ALG_PASN7, "Pre-Association Security Negotiation (PASN)"},
2101 {AUTH_ALG_NETWORK_EAP0x80, "Network EAP"}, /* Cisco proprietary? */
2102 {0, NULL((void*)0)}
2103};
2104
2105/* IANA - Internet Key Exchange (IKE) Attributes - Group Description (https://www.iana.org/assignments/ipsec-registry/ipsec-registry.xhtml) */
2106static const value_string ff_finite_cyclic_group_vals[] = {
2107 { 1, "default 768-bit MODP group"},
2108 { 2, "alternate 1024-bit MODP group"},
2109 { 3, "EC2N group on GP[2^155]"},
2110 { 4, "EC2N group on GP[2^185]"},
2111 { 5, "1536-bit MODP group"},
2112 {14, "2048-bit MODP group"},
2113 {15, "3072-bit MODP group"},
2114 {16, "4096-bit MODP group"},
2115 {17, "6144-bit MODP group"},
2116 {18, "8192-bit MODP group"},
2117 {19, "256-bit random ECP group"},
2118 {20, "384-bit random ECP group"},
2119 {21, "521-bit random ECP group"},
2120 {22, "1024-bit MODP Group with 160-bit Prime Order Subgroup"},
2121 {23, "2048-bit MODP Group with 224-bit Prime Order Subgroup"},
2122 {24, "2048-bit MODP Group with 256-bit Prime Order Subgroup"},
2123 {25, "192-bit Random ECP Group"},
2124 {26, "224-bit Random ECP Group"},
2125 {27, "224-bit Brainpool ECP group"},
2126 {28, "256-bit Brainpool ECP group"},
2127 {29, "384-bit Brainpool ECP group"},
2128 {30, "512-bit Brainpool ECP group"},
2129 {0, NULL((void*)0)}
2130};
2131
2132static const true_false_string ff_block_ack_params_amsdu_permitted_flag = {
2133 "Permitted in QoS Data MPDUs",
2134 "Not Permitted"
2135};
2136
2137static const true_false_string ff_block_ack_params_policy_flag = {
2138 "Immediate Block Ack",
2139 "Delayed Block Ack"
2140};
2141
2142static const value_string ff_channel_width_vals[] = {
2143 {0x00, "20 MHz channel width only"},
2144 {0x01, "Any channel width in the STA's Supported Channel Width Set"},
2145 {0, NULL((void*)0)}
2146};
2147
2148static const true_false_string ff_qos_info_ap_q_ack_flag = {
2149 "APs MIB attribute dot11QAckOptionImplemented is true",
2150 "APs MIB attribute dot11QAckOptionImplemented is false"
2151};
2152
2153static const true_false_string ff_qos_info_ap_queue_req_flag = {
2154 "AP can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
2155 "AP cannot process a nonzero Queue Size subfield in the QoS Control field in QoS data frames"
2156};
2157
2158static const true_false_string ff_qos_info_ap_txop_request_flag = {
2159 "AP can process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames",
2160 "AP cannot process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames"
2161};
2162
2163static const true_false_string ff_qos_info_sta_ac_flag = {
2164 "Trigger-enabled and Delivery-enabled",
2165 "Neither Trigger-enabled nor Delivery-enabled"
2166};
2167
2168static const true_false_string ff_qos_info_sta_q_ack_flag = {
2169 "STAs MIB attribute dot11QAckOptionImplemented is true",
2170 "STAs MIB attribute dot11QAckOptionImplemented is false"
2171};
2172
2173static const value_string ff_qos_info_sta_max_sp_len_flags[] = {
2174 {0x00, "AP may deliver all buffered MSDUs, A-MSDUs and MMPDUs"},
2175 {0x01, "AP may deliver a maximum of two MSDUs, A-MSDUs and MMPDUs per SP"},
2176 {0x02, "AP may deliver a maximum of four MSDUs, A-MSDUs and MMPDUs per SP"},
2177 {0x03, "AP may deliver a maximum of six MSDUs, A-MSDUs and MMPDUs per SP"},
2178 {0, NULL((void*)0)}
2179};
2180
2181static const true_false_string ff_qos_info_sta_more_data_ack_flag = {
2182 "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",
2183 "STA cannot process ACK frames with the More Data bit in the Frame Control field set to 1"
2184};
2185
2186static const true_false_string ff_sm_pwr_save_sm_mode_flag = {
2187 "Dynamic SM Power Save mode",
2188 "Static SM Power Save mode"
2189};
2190
2191static const true_false_string ff_pco_phase_cntrl_flag = {
2192 "40 MHz Phase",
2193 "20 MHz Phase"
2194};
2195
2196static const true_false_string ff_psmp_param_set_more_psmp_flag = {
2197 "More PSMP Sequences Follow",
2198 "No PSMP Sequences Follow"
2199};
2200
2201static const value_string ff_mimo_cntrl_nc_index_flags[] = {
2202 {0x00, "1 Column"},
2203 {0x01, "2 Columns"},
2204 {0x02, "3 Columns"},
2205 {0x03, "4 Columns"},
2206 {0, NULL((void*)0)}
2207};
2208
2209static const value_string ff_mimo_cntrl_nr_index_flags[] = {
2210 {0x00, "1 Row"},
2211 {0x01, "2 Rows"},
2212 {0x02, "3 Rows"},
2213 {0x03, "4 Rows"},
2214 {0, NULL((void*)0)}
2215};
2216
2217static const true_false_string ff_mimo_cntrl_channel_width_flag = {
2218 "40 MHz",
2219 "20 MHz"
2220};
2221
2222static const true_false_string ff_ht_info_information_request_flag = {
2223 "Requesting HT Information Exchange management action frame",
2224 "Should not send an HT Information Exchange management action frame"
2225};
2226
2227static const true_false_string ff_ht_info_40_mhz_intolerant_flag = {
2228 "Transmitting station is intolerant of 40 MHz operation",
2229 "Transmitting station permits 40 MHz operation"
2230};
2231
2232static const true_false_string ff_ht_info_sta_chan_width_flag = {
2233 "40 MHz",
2234 "20 MHz"
2235};
2236
2237static const value_string ff_ht_action_flags[] = {
2238 {HT_ACTION_NOTIFY_CHAN_WIDTH0, "Notify Channel Width"},
2239 {HT_ACTION_SM_PWR_SAVE1, "Spatial Multiplexing (SM) Power Save"},
2240 {HT_ACTION_PSMP_ACTION2, "Power Save Multi-Poll (PSMP) action frame"},
2241 {HT_ACTION_SET_PCO_PHASE3, "Set PCO Phase"},
2242 {HT_ACTION_MIMO_CSI4, "MIMO CSI Matrices"},
2243 {HT_ACTION_MIMO_BEAMFORMING5, "MIMO Non-compressed Beamforming"},
2244 {HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6, "MIMO Compressed Beamforming"},
2245 {HT_ACTION_ANT_SEL_FEEDBACK7, "Antenna Selection Indices Feedback"},
2246 {HT_ACTION_HT_INFO_EXCHANGE8, "HT Information Exchange"},
2247 {0x00, NULL((void*)0)}
2248};
2249
2250static const value_string ff_fst_action_flags[] = {
2251 {FST_SETUP_REQUEST0, "FST Setup Request"},
2252 {FST_SETUP_RESPONSE1, "FST Setup Response"},
2253 {FST_TEAR_DOWN2, "FST Tear Down"},
2254 {FST_ACK_REQUEST3, "FST Ack Request"},
2255 {FST_ACK_RESPONSE4, "FST Ack Response"},
2256 {FST_ON_CHANNEL_TUNNEL_REQUEST5, "FST On-channel Tunnel Request"},
2257 {0x00, NULL((void*)0)}
2258};
2259
2260static const value_string ff_robust_av_streaming_action_flags[] = {
2261 {ROBUST_AV_STREAMING_SCS_REQUEST0, "SCS Request"},
2262 {ROBUST_AV_STREAMING_SCS_RESPONSE1, "SCS Response"},
2263 {ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_REQ2, "Group Membership Request"},
2264 {ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_RSP3, "Group Membership Response"},
2265 {ROBUST_AV_STREAMING_MSCS_REQUEST4, "MSCS Request"},
2266 {ROBUST_AV_STREAMING_MSCS_RESPONSE5, "MSCS Response"},
2267 {0x00, NULL((void*)0)}
2268};
2269
2270static const value_string ff_dmg_action_flags[] = {
2271 {DMG_ACTION_PWR_SAVE_CONFIG_REQ0, "Power Save Configuration Request"},
2272 {DMG_ACTION_PWR_SAVE_CONFIG_RES1, "Power Save Configuration Response"},
2273 {DMG_ACTION_INFO_REQ2, "Information Request"},
2274 {DMG_ACTION_INFO_RES3, "Information Response"},
2275 {DMG_ACTION_HANDOVER_REQ4, "Handover Request"},
2276 {DMG_ACTION_HANDOVER_RES5, "Handover Response"},
2277 {DMG_ACTION_DTP_REQ6, "DTP Request"},
2278 {DMG_ACTION_DTP_RES7, "DTP Response"},
2279 {DMG_ACTION_RELAY_SEARCH_REQ8, "Relay Search Request"},
2280 {DMG_ACTION_RELAY_SEARCH_RES9, "Relay Search Response"},
2281 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10, "Multi Relay Channel Measurement Request"},
2282 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11, "Multi Relay Channel Measurement Response"},
2283 {DMG_ACTION_RLS_REQ12, "RLS Request"},
2284 {DMG_ACTION_RLS_RES13, "RLS Response"},
2285 {DMG_ACTION_RLS_ANNOUNCE14, "RLS Announcement"},
2286 {DMG_ACTION_RLS_TEARDOWN15, "RLS Teardown"},
2287 {DMG_ACTION_RELAY_ACK_REQ16, "Relay ACK Request"},
2288 {DMG_ACTION_RELAY_ACK_RES17, "Relay ACK Response"},
2289 {DMG_ACTION_TPA_REQ18, "TPA Request"},
2290 {DMG_ACTION_TPA_RES19, "TPA Response"},
2291 {DMG_ACTION_TPA_REP20, "TPA Report"},
2292 {DMG_ACTION_ROC_REQ21, "ROC Request"},
2293 {DMG_ACTION_ROC_RES22, "ROC Response"},
2294 {0x00, NULL((void*)0)}
2295};
2296
2297static const value_string ff_unprotected_dmg_action_flags[] = {
2298 {UNPROTECTED_DMG_ANNOUNCE0, "Announce"},
2299 {UNPROTECTED_DMG_BRP1, "BRP"},
2300 {0x00, NULL((void*)0)}
2301};
2302static const value_string ff_mimo_cntrl_grouping_flags[] = {
2303 {0x00, "No Grouping"},
2304 {0x01, "Carrier Groups of 2"},
2305 {0x02, "Carrier Groups of 4"},
2306 {0x03, "Reserved"},
2307 {0, NULL((void*)0)}
2308};
2309
2310static const value_string ff_mimo_cntrl_coefficient_size_flags[] = {
2311 {0x00, "4 Bits"},
2312 {0x01, "5 Bits"},
2313 {0x02, "6 Bits"},
2314 {0x03, "8 Bits"},
2315 {0, NULL((void*)0)}
2316};
2317
2318static const value_string ff_mimo_cntrl_codebook_info_flags[] = {
2319 {0x00, "1 bit for 'Capital Psi', 3 bits for 'Small Psi'"},
2320 {0x01, "2 bit for 'Capital Psi', 4 bits for 'Small Psi'"},
2321 {0x02, "3 bit for 'Capital Psi', 5 bits for 'Small Psi'"},
2322 {0x03, "4 bit for 'Capital Psi', 6 bits for 'Small Psi'"},
2323 {0, NULL((void*)0)}
2324};
2325
2326static const value_string ff_ppa_action_codes[] = {
2327 {PPA_DSE_ENABLEMENT1, "Protected DSE enablement"},
2328 {PPA_DSE_DEENABLEMENT2, "Protected DSE deenablement"},
2329 {PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4, "Protected Extended Channel Switch Announcement"},
2330 {PPA_DSE_MEASUREMENT_REQUEST5, "Protected DSE measurement request"},
2331 {PPA_DSE_MEASUREMENT_REPORT6, "Protected DSE measurement report"},
2332 {PPA_DSE_POWER_CONSTRAINT8, "Protected DSE power constraint"},
2333 {PPA_VENDOR_SPECIFIC9, "Protected Vendor Specific"},
2334 {PPA_GAS_INITIAL_REQUEST10, "Protected GAS Initial Request"},
2335 {PPA_GAS_INITIAL_RESPONSE11, "Protected GAS Initial Response"},
2336 {PPA_GAS_COMEBACK_REQUEST12, "Protected GAS Comeback Request"},
2337 {PPA_GAS_COMEBACK_RESPONSE13, "Protected GAS Comeback Response"},
2338 {PPA_QAB_REQUEST16, "Protected QAB Request"},
2339 {PPA_QAB_RESPONSE17, "Protected QAB Response"},
2340 {0x00, NULL((void*)0)}
2341};
2342static 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) }
;
2343
2344static const value_string ff_pa_action_codes[] = {
2345 {PA_20_40_BSS_COEXISTENCE_MANAGEMENT0, "20/40 BSS Coexistence Management"},
2346 {PA_DSE_ENABLEMENT1, "DSE enablement"},
2347 {PA_DSE_DEENABLEMENT2, "DSE deenablement"},
2348 {PA_DSE_REG_LOC_ANNOUNCEMENT3, "DSE Registered Location Announcement"},
2349 {PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4, "Extended Channel Switch Announcement"},
2350 {PA_DSE_MEASUREMENT_REQUEST5, "DSE measurement request"},
2351 {PA_DSE_MEASUREMENT_REPORT6, "DSE measurement report"},
2352 {PA_MEASUREMENT_PILOT7, "Measurement Pilot"},
2353 {PA_DSE_POWER_CONSTRAINT8, "DSE power constraint"},
2354 {PA_VENDOR_SPECIFIC9, "Vendor Specific"},
2355 {PA_GAS_INITIAL_REQUEST10, "GAS Initial Request"},
2356 {PA_GAS_INITIAL_RESPONSE11, "GAS Initial Response"},
2357 {PA_GAS_COMEBACK_REQUEST12, "GAS Comeback Request"},
2358 {PA_GAS_COMEBACK_RESPONSE13, "GAS Comeback Response"},
2359 {PA_TDLS_DISCOVERY_RESPONSE14, "TDLS Discovery Response"},
2360 {PA_LOCATION_TRACK_NOTIFICATION15, "Location Track Notification"},
2361 {PA_QAB_REQUEST16, "QAB Request"},
2362 {PA_QAB_RESPONSE17, "QAB Response"},
2363 {PA_QMF_POLICY18, "QMF Policy"},
2364 {PA_QMF_POLICY_CHANGE19, "QMF Policy Change"},
2365 {PA_QLOAD_REQUEST20, "QLoad Request"},
2366 {PA_QLOAD_REPORT21, "QLoad Report"},
2367 {PA_HCCA_TXOP_ADVERTISEMENT22, "HCCA TXOP Advertisement"},
2368 {PA_HCCA_TXOP_RESPONSE23, "HCCA TXOP Response"},
2369 {PA_PUBLIC_KEY24, "Public Key"},
2370 {PA_CHANNEL_AVAILABILITY_QUERY25, "Channel Availability Query"},
2371 {PA_CHANNEL_SCHEDULE_MANAGEMENT26, "Channel Schedule Management"},
2372 {PA_CONTACT_VERIFICATION_SIGNAL27, "Contact Verification Signal"},
2373 {PA_GDD_ENABLEMENT_REQUEST28, "GDD Enablement Request"},
2374 {PA_GDD_ENABLEMENT_RESPONSE29, "GDD Enablement Response"},
2375 {PA_NETWORK_CHANNEL_CONTROL30, "Network Channel Control"},
2376 {PA_WHITE_SPACE_MAP_ANNOUNCEMENT31, "White Space Map Announcement"},
2377 {PA_FTM_REQUEST32, "FTM Request"},
2378 {PA_FTM33, "FTM"},
2379 {PA_FILS_DISCOVERY34, "FILS Discovery"},
2380 {PA_LOCATION_MEASUREMENT_REPORT47, "Location Measurement Report"},
2381 {PA_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT48, "ISTA Passive TB Ranging Measurement Report"},
2382 {PA_PRIMARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT49, "Primary RSTA Broadcast Passive TB Ranging Measurement Report"},
2383 {PA_SECONDARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT50, "Secondary RSTA Broadcast Passive TB Ranging Measurement Report"},
2384 {0x00, NULL((void*)0)}
2385};
2386value_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) }
;
2387
2388static const value_string protected_ftm_action_vals[] = {
2389 {0, "Reserved"},
2390 {1, "Protected FTM Request"},
2391 {2, "Protected FTM"},
2392 {3, "Protected Location Measurement Report"},
2393 {0, NULL((void*)0)}
2394};
2395
2396static const value_string ftm_trigger_vals[] = {
2397 {0, "Stop sending FTM frames"},
2398 {1, "Start or continue sending FTM frames"},
2399 /* all other values reserved */
2400 {0, NULL((void*)0)}
2401};
2402
2403static const value_string category_codes[] = {
2404 {CAT_SPECTRUM_MGMT0, "Spectrum Management (SM)"},
2405 {CAT_QOS1, "Quality of Service (QoS)"},
2406 {CAT_DLS2, "Direct-Link Setup (DLS)"},
2407 {CAT_BLOCK_ACK3, "Block Ack"},
2408 {CAT_PUBLIC4, "Public Action"},
2409 {CAT_RADIO_MEASUREMENT5, "Radio Measurement"},
2410 {CAT_FAST_BSS_TRANSITION6, "Fast BSS Transition"},
2411 {CAT_HT7, "High Throughput"},
2412 {CAT_SA_QUERY8, "SA Query"},
2413 {CAT_PUBLIC_PROTECTED9, "Protected Dual of Public Action"},
2414 {CAT_WNM10, "WNM"},
2415 {CAT_UNPROTECTED_WNM11, "Unprotected WNM"},
2416 {CAT_TDLS12, "TDLS"},
2417 {CAT_MESH13, "MESH"},
2418 {CAT_MULTIHOP14, "Multihop"},
2419 {CAT_SELF_PROTECTED15, "Self-protected"},
2420 {CAT_DMG16, "DMG"},
2421 {CAT_MGMT_NOTIFICATION17, "Management Notification"},
2422 {CAT_FAST_SESSION_TRANSFER18, "Fast Session Transfer"},
2423 {CAT_ROBUST_AV_STREAMING19, "Robust AV Streaming"},
2424 {CAT_UNPROTECTED_DMG20, "Unprotected DMG"},
2425 {CAT_VHT21, "VHT"},
2426 {CAT_S1G22, "S1G"},
2427 {CAT_PROTECTED_S1G23, "Protected S1G"},
2428 {CAT_FLOW_CONTROL24, "Flow Control"},
2429 {CAT_CONTROL_RESPONSE_MCS_NEG25, "Control Response MCS Negotiation"},
2430 {CAT_FILS26, "FILS"},
2431 {CAT_HE30, "HE"},
2432 {CAT_PROTECTED_HE31, "Protected HE"},
2433 {CAT_PROTECTED_FTM34, "Protected FTM"},
2434 {CAT_EHT36, "EHT"},
2435 {CAT_PROTECTED_EHT37, "Protected EHT"},
2436 {CAT_VENDOR_SPECIFIC_PROTECTED126, "Vendor-specific Protected"},
2437 {CAT_VENDOR_SPECIFIC127, "Vendor Specific"},
2438
2439 {0x80 | CAT_SPECTRUM_MGMT0, "Spectrum Management (SM) (error)"},
2440 {0x80 | CAT_QOS1, "Quality of Service (QoS (error))"},
2441 {0x80 | CAT_DLS2, "Direct-Link Setup (DLS) (error)"},
2442 {0x80 | CAT_BLOCK_ACK3, "Block Ack (error)"},
2443 {0x80 | CAT_PUBLIC4, "Public Action (error)"},
2444 {0x80 | CAT_RADIO_MEASUREMENT5, "Radio Measurement (error)"},
2445 {0x80 | CAT_FAST_BSS_TRANSITION6, "Fast BSS Transition (error)"},
2446 {0x80 | CAT_HT7, "High Throughput (error)"},
2447 {0x80 | CAT_SA_QUERY8, "SA Query (error)"},
2448 {0x80 | CAT_PUBLIC_PROTECTED9, "Protected Dual of Public Action (error)"},
2449 {0x80 | CAT_WNM10, "WNM (error)"},
2450 {0x80 | CAT_UNPROTECTED_WNM11, "Unprotected WNM (error)"},
2451 {0x80 | CAT_TDLS12, "TDLS (error)"},
2452 {0x80 | CAT_MESH13, "Mesh (error)"},
2453 {0x80 | CAT_MULTIHOP14, "Multihop (error)"},
2454 {0x80 | CAT_SELF_PROTECTED15, "Self-protected (error)"},
2455 {0x80 | CAT_DMG16, "DMG (error)"},
2456 {0x80 | CAT_MGMT_NOTIFICATION17, "Management Notification (error)"},
2457 {0x80 | CAT_FAST_SESSION_TRANSFER18, "Fast Session Transfer (error)"},
2458 {0x80 | CAT_ROBUST_AV_STREAMING19, "Robust AV Streaming (error)"},
2459 {0x80 | CAT_UNPROTECTED_DMG20, "Unprotected DMG (error)"},
2460 {0x80 | CAT_VHT21, "VHT (error)"},
2461 {0x80 | CAT_HE30, "HE (error)"},
2462 {0x80 | CAT_PROTECTED_HE31, "Protected HE (error)"},
2463 {0x80 | CAT_PROTECTED_FTM34, "Protected FTM (error)"},
2464 {0x80 | CAT_EHT36, "EHT (error)"},
2465 {0x80 | CAT_PROTECTED_EHT37, "Protected EHT (error)"},
2466 {0x80 | CAT_VENDOR_SPECIFIC_PROTECTED126, "Vendor-specific Protected (error)"},
2467 {0x80 | CAT_VENDOR_SPECIFIC127, "Vendor Specific (error)"},
2468 {0, NULL((void*)0)}
2469};
2470static 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) }
;
2471
2472#define NR_SUB_ID_TSF_INFO1 1
2473#define NR_SUB_ID_CON_COU_STR2 2
2474#define NR_SUB_ID_BSS_TRN_CAN_PREF3 3
2475#define NR_SUB_ID_BSS_TER_DUR4 4
2476#define NR_SUB_ID_BEARING5 5
2477#define NR_SUB_ID_WIDE_BW_CHANNEL6 6
2478
2479#define NR_SUB_ID_MEASUREMENT_REPORT39 39
2480#define NR_SUB_ID_HT_CAPABILITIES45 45
2481#define NR_SUB_ID_HT_OPERATION61 61
2482#define NR_SUB_ID_SEC_CHANNEL_OFFSET62 62
2483#define NR_SUB_ID_MEASUREMENT_PILOT_INFO66 66
2484#define NR_SUB_ID_RM_ENABLE_CAP70 70
2485#define NR_SUB_ID_HT_MULTIPLE_BSSID71 71
2486#define NR_SUB_ID_VHT_CAPABILITIES191 191
2487#define NR_SUB_ID_VHT_OPERATION192 192
2488#define NR_SUB_ID_HE_CAPABILITIES193 193
2489#define NR_SUB_ID_HE_OPERATION194 194
2490#define NR_SUB_ID_EHT_CAPABILITIES199 199
2491#define NR_SUB_ID_EHT_OPERATION200 200
2492#define NR_SUB_ID_BASIC_MULTI_LINK201 201
2493
2494#define NR_SUB_ID_VENDOR_SPECIFIC221 221
2495
2496static const value_string ieee80211_neighbor_report_subelement_id_vals[] = {
2497 {NR_SUB_ID_TSF_INFO1, "TSF Information"},
2498 {NR_SUB_ID_CON_COU_STR2, "Condensed Country String"},
2499 {NR_SUB_ID_BSS_TRN_CAN_PREF3, "BSS Transition Candidate Preference"},
2500 {NR_SUB_ID_BSS_TER_DUR4, "BSS Termination Duration"},
2501 {NR_SUB_ID_BEARING5, "Bearing"},
2502 {NR_SUB_ID_WIDE_BW_CHANNEL6, "Wide Bandwidth Channel"},
2503 {NR_SUB_ID_MEASUREMENT_REPORT39, "Measurement Report"},
2504 {NR_SUB_ID_HT_CAPABILITIES45, "HT Capabilities"},
2505 {NR_SUB_ID_HT_OPERATION61, "HT Operation"},
2506 {NR_SUB_ID_SEC_CHANNEL_OFFSET62, "Secondary Channel Offset"},
2507 {NR_SUB_ID_MEASUREMENT_PILOT_INFO66, "Measurement Pilot Transmission"},
2508 {NR_SUB_ID_RM_ENABLE_CAP70, "RM Enabled Capabilities"},
2509 {NR_SUB_ID_HT_MULTIPLE_BSSID71, "Multiple BSSID"},
2510 {NR_SUB_ID_VHT_CAPABILITIES191, "VHT Capabilities"},
2511 {NR_SUB_ID_VHT_OPERATION192, "VHT Operation"},
2512 {NR_SUB_ID_HE_CAPABILITIES193, "HE Capabilities"},
2513 {NR_SUB_ID_HE_OPERATION194, "HE Operation"},
2514 {NR_SUB_ID_EHT_CAPABILITIES199, "EHT Capabilities"},
2515 {NR_SUB_ID_EHT_OPERATION200, "EHT Operation"},
2516 {NR_SUB_ID_BASIC_MULTI_LINK201, "Basic Multi-Link"},
2517 {NR_SUB_ID_VENDOR_SPECIFIC221, "Vendor Specific"},
2518 {0, NULL((void*)0)}
2519};
2520
2521static const value_string ieee80211_neighbor_report_bssid_info_reachability_vals[] = {
2522 {0, "Reserved"},
2523 {1, "Not Reachable"},
2524 {2, "Unknown"},
2525 {3, "Reachable"},
2526 {0, NULL((void*)0)}
2527};
2528
2529static const value_string action_codes[] = {
2530 {SM_ACTION_MEASUREMENT_REQUEST0, "Measurement Request"},
2531 {SM_ACTION_MEASUREMENT_REPORT1, "Measurement Report"},
2532 {SM_ACTION_TPC_REQUEST2, "TPC Request"},
2533 {SM_ACTION_TPC_REPORT3, "TPC Report"},
2534 {SM_ACTION_CHAN_SWITCH_ANNC4, "Channel Switch Announcement"},
2535 {0, NULL((void*)0)}
2536};
2537
2538static const value_string vendor_action_types_mrvl[] = {
2539 {MRVL_ACTION_MESH_MANAGEMENT1, "Mesh Management"},
2540 {0, NULL((void*)0)}
2541};
2542
2543static const value_string mesh_mgt_action_codes_mrvl[] = {
2544 {MRVL_MESH_MGMT_ACTION_RREQ0, "Route Request"},
2545 {MRVL_MESH_MGMT_ACTION_RREP1, "Route Response"},
2546 {MRVL_MESH_MGMT_ACTION_RERR2, "Route Error"},
2547 {MRVL_MESH_MGMT_ACTION_PLDM3, "Peer Link Down"},
2548 {0, NULL((void*)0)}
2549};
2550
2551static const value_string mesh_path_selection_codes[] = {
2552 {0x0, "Hybrid Wireless Mesh Protocol"},
2553 {0, NULL((void*)0)}
2554};
2555
2556static const value_string mesh_metric_codes[] = {
2557 {0x0, "Airtime Link Metric"},
2558 {0, NULL((void*)0)}
2559};
2560
2561static const value_string wme_action_codes[] = {
2562 {0x00, "Setup request"},
2563 {0x01, "Setup response"},
2564 {0x02, "Teardown"},
2565 {0x00, NULL((void*)0)}
2566};
2567
2568static const value_string wme_status_codes[] = {
2569 {0x00, "Admission accepted"},
2570 {0x01, "Invalid parameters"},
2571 {0x03, "Refused"},
2572 {0x00, NULL((void*)0)}
2573};
2574
2575static const value_string mesh_action[] = {
2576 {MESH_ACTION_LINK_METRIC_REPORT0, "Mesh Link Metric Report"},
2577 {MESH_ACTION_HWMP1, "HWMP Mesh Path Selection"},
2578 {MESH_ACTION_GATE_ANNOUNCE2, "Gate Announcement"},
2579 {MESH_ACTION_CONGESTION_CTL3, "Congestion Control Notification"},
2580 {MESH_ACTION_MCCA_SETUP_REQUEST4, "MCCA Setup Request"},
2581 {MESH_ACTION_MCCA_SETUP_REPLY5, "MCCA Setup Reply"},
2582 {MESH_ACTION_MCCA_ADV_REQUEST6, "MCCA Advertisement Request"},
2583 {MESH_ACTION_MCCA_ADV7, "MCCA Advertisement"},
2584 {MESH_ACTION_MCCA_TEARDOWN8, "MCCA Teardown"},
2585 {MESH_ACTION_TBTT_ADJ_REQUEST9, "TBTT Adjustment Request"},
2586 {MESH_ACTION_TBTT_ADJ_RESPONSE10, "TBTT Adjustment Response"},
2587 {0, NULL((void*)0)}
2588};
2589static 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
) }
;
2590
2591static const value_string multihop_action[] = {
2592 {MULTIHOP_ACTION_PROXY_UPDATE0, "Proxy Update"},
2593 {MULTIHOP_ACTION_PROXY_UPDATE_CONF1, "Proxy Update Confirmation"},
2594 {0, NULL((void*)0)}
2595};
2596
2597static const value_string selfprot_action[] = {
2598 {SELFPROT_ACTION_MESH_PEERING_OPEN1, "Mesh Peering Open"},
2599 {SELFPROT_ACTION_MESH_PEERING_CONFIRM2, "Mesh Peering Confirm"},
2600 {SELFPROT_ACTION_MESH_PEERING_CLOSE3, "Mesh Peering Close"},
2601 {SELFPROT_ACTION_MESH_GROUP_KEY_INFORM4, "Mesh Group Key Inform"},
2602 {SELFPROT_ACTION_MESH_GROUP_KEY_ACK5, "Mesh Group Key Ack"},
2603 {0, NULL((void*)0)}
2604};
2605
2606static const value_string mesh_peering_proto_ids[] = {
2607 {MESH_PEERING_PROTO_MGMT0, "Mesh peering management protocol"},
2608 {MESH_PEERING_PROTO_AMPE1, "Authenticated mesh peering exchange protocol"},
2609 {MESH_PEERING_PROTO_VENDOR255, "Vendor specific"},
2610 {0, NULL((void*)0)}
2611};
2612
2613static const true_false_string hwmp_targ_usn_flags = {
2614 "[USN = 1] Target Sequence Number Unknown at Originator",
2615 "[USN = 0] Target Sequence Number Known at Originator"
2616};
2617
2618static const true_false_string hwmp_targ_to_flags = {
2619 "[TO = 1] Only Target Will Respond",
2620 "[TO = 0] Intermediate Nodes May Respond"
2621};
2622
2623static const value_string ack_policy[] = {
2624 {0x00, "Normal Ack"},
2625 {0x01, "No Ack"},
2626 {0x02, "No explicit acknowledgment"},
2627 {0x03, "Block Ack"},
2628 {0x00, NULL((void*)0)}
2629};
2630
2631static const value_string qos_action_codes[] = {
2632 {QOS_ACTION_ADDTS_REQUEST0, "ADDTS Request"},
2633 {QOS_ACTION_ADDTS_RESPONSE1, "ADDTS Response"},
2634 {QOS_ACTION_DELTS2, "DELTS"},
2635 {QOS_ACTION_SCHEDULE3, "Schedule"},
2636 {QOS_ACTION_MAP_CONFIGURE4, "QoS Map Configure"},
2637 {0, NULL((void*)0)}
2638};
2639
2640static const value_string ba_action_codes[] = {
2641 {BA_ADD_BLOCK_ACK_REQUEST0, "Add Block Ack Request"},
2642 {BA_ADD_BLOCK_ACK_RESPONSE1, "Add Block Ack Response"},
2643 {BA_DELETE_BLOCK_ACK2, "Delete Block Ack"},
2644 {BA_NDP_ADD_BLOCK_ACK_REQUEST128, "NDP ADDBA Request"},
2645 {BA_NDP_ADD_BLOCK_ACK_RESPONSE129, "NDP ADDBA Response"},
2646 {BA_NDP_DELETE_BLOCK_ACK130, "NDP DELBA"},
2647 {BA_BAT_ADD_BLOCK_ACK_REQUEST132, "BAT ADDBA Request"},
2648 {BA_BAT_ADD_BLOCK_ACK_RESPONSE133, "BAT ADDBA Response"},
2649 {BA_BAT_DELETE_BLOCK_ACK134, "BAT DELBA"},
2650 {0x00, NULL((void*)0)}
2651};
2652
2653static const value_string dls_action_codes[] = {
2654 {DLS_ACTION_REQUEST0, "DLS Request"},
2655 {DLS_ACTION_RESPONSE1, "DLS Response"},
2656 {DLS_ACTION_TEARDOWN2, "DLS Teardown"},
2657 {0, NULL((void*)0)}
2658};
2659
2660static const value_string tsinfo_type[] = {
2661 {0x0, "Aperiodic or unspecified Traffic"},
2662 {0x1, "Periodic Traffic"},
2663 {0, NULL((void*)0)}
2664};
2665
2666static const value_string tsinfo_direction[] = {
2667 {0x00, "Uplink"},
2668 {0x01, "Downlink"},
2669 {0x02, "Direct link"},
2670 {0x03, "Bidirectional link"},
2671 {0, NULL((void*)0)}
2672};
2673
2674static const value_string tsinfo_access[] = {
2675 {0x00, "Reserved"},
2676 {0x01, "EDCA"},
2677 {0x02, "HCCA"},
2678 {0x03, "HEMM"},
2679 {0, NULL((void*)0)}
2680};
2681
2682static const value_string qos_up[] = {
2683 {0x00, "Best Effort"},
2684 {0x01, "Background"},
2685 {0x02, "Spare"},
2686 {0x03, "Excellent Effort"},
2687 {0x04, "Controlled Load"},
2688 {0x05, "Video"},
2689 {0x06, "Voice"},
2690 {0x07, "Network Control"},
2691 {0, NULL((void*)0)}
2692};
2693
2694static const range_string classifier_type[] = {
2695 {0x00, 0x00, "Ethernet parameters"},
2696 {0x01, 0x01, "TCP/UDP IP parameters"},
2697 {0x02, 0x02, "IEEE 802.1D/Q parameters"},
2698 {0x03, 0x03, "Filter Offset parameters"},
2699 {0x04, 0x04, "IP and higher layer parameters"},
2700 {0x05, 0x05, "IEEE 802.1D/Q parameters"},
2701 {0x06, 0x06, "IEEE 802.11 MAC header parameters"},
2702 {0x07, 0x07, "IEEE Std 802.11 downlink PV1 MPDU MAC header parameters"},
2703 {0x08, 0x08, "IEEE Std 802.11 non-downlink PV1 MPDU MAC header parameters"},
2704 {0x09, 0x09, "IEEE Std 802.11 PV1 MPDU Full Address MAC header parameters"},
2705 {0x0A, 0x0A, "IP extensions and higher layer parameters"},
2706 {0x0B, 0xFF, "Reserved" },
2707 {0, 0, NULL((void*)0)}
2708};
2709
2710static const true_false_string ieee80211_block_ack_control_ack_policy_flag = {
2711 "Sender Does Not Require Immediate Acknowledgement",
2712 "Immediate Acknowledgement Required"
2713};
2714
2715static const value_string ft_action_codes[] = {
2716 {FT_ACTION_REQUEST1, "FT Request"},
2717 {FT_ACTION_RESPONSE2, "FT Response"},
2718 {FT_ACTION_CONFIRM3, "FT Confirm"},
2719 {FT_ACTION_ACK4, "FT Ack"},
2720 {0, NULL((void*)0)}
2721};
2722
2723static const value_string sa_query_action_codes[] = {
2724 {SA_QUERY_REQUEST0, "SA Query Request"},
2725 {SA_QUERY_RESPONSE1, "SA Query Response"},
2726 {0, NULL((void*)0)}
2727};
2728
2729static const value_string ieee80211_data_encap_payload_types[] = {
2730 {1, "Remote Request/Response"},
2731 {2, "TDLS"},
2732 {0, NULL((void*)0)}
2733};
2734
2735static const true_false_string rsn_preauth_flags = {
2736 "Transmitter supports pre-authentication",
2737 "Transmitter does not support pre-authentication"
2738};
2739
2740static const true_false_string rsn_no_pairwise_flags = {
2741 "Transmitter cannot support WEP default key 0 simultaneously with "
2742 "Pairwise key",
2743 "Transmitter can support WEP default key 0 simultaneously with "
2744 "Pairwise key"
2745};
2746
2747static const value_string rsn_cap_replay_counter[] = {
2748 {0x00, "1 replay counter per PTKSA/GTKSA/STAKeySA"},
2749 {0x01, "2 replay counters per PTKSA/GTKSA/STAKeySA"},
2750 {0x02, "4 replay counters per PTKSA/GTKSA/STAKeySA"},
2751 {0x03, "16 replay counters per PTKSA/GTKSA/STAKeySA"},
2752 {0, NULL((void*)0)}
2753};
2754
2755static const true_false_string ht_ldpc_coding_flag = {
2756 "Transmitter supports receiving LDPC coded packets",
2757 "Transmitter does not support receiving LDPC coded packets"
2758};
2759
2760static const true_false_string ht_chan_width_flag = {
2761 "Transmitter supports 20MHz and 40MHz operation",
2762 "Transmitter only supports 20MHz operation"
2763};
2764
2765static const value_string ht_sm_pwsave_flag[] = {
2766 {0x00, "Static SM Power Save mode"},
2767 {0x01, "Dynamic SM Power Save mode"},
2768 {0x02, "Reserved"},
2769 {0x03, "SM Power Save disabled"},
2770 {0x00, NULL((void*)0)}
2771};
2772
2773static const true_false_string ht_green_flag = {
2774 "Transmitter is able to receive PPDUs with Green Field (GF) preamble",
2775 "Transmitter is not able to receive PPDUs with Green Field (GF) preamble"
2776};
2777
2778static const value_string ht_rx_stbc_flag[] = {
2779 {0x00, "No Rx STBC support"},
2780 {0x01, "Rx support of one spatial stream"},
2781 {0x02, "Rx support of one and two spatial streams"},
2782 {0x03, "Rx support of one, two, and three spatial streams"},
2783 {0x00, NULL((void*)0)}
2784};
2785
2786 /* IEEE Stc 802.11ac-2013 8.4.2.29 Extended Capabilities element*/
2787static const value_string vht_max_mpdu_in_amsdu[] = {
2788 {0x00, "No limit"},
2789 {0x01, "32"},
2790 {0x02, "16"},
2791 {0x03, "8"},
2792 {0, NULL((void*)0)}
2793};
2794
2795 /* IEEE Stc 802.11ac/D3.1 */
2796
2797static const value_string vht_max_mpdu_length_flag[] = {
2798 {0x00, "3 895"},
2799 {0x01, "7 991"},
2800 {0x02, "11 454"},
2801 {0x03, "Reserved"},
2802 {0x00, NULL((void*)0)}
2803};
2804
2805static const value_string vht_supported_chan_width_set_flag[] = {
2806 {0x00, "Neither 160MHz nor 80+80 supported"},
2807 {0x01, "160MHz supported"},
2808 {0x02, "160MHz and 80+80 Supported"},
2809 {0x03, "Reserved"},
2810 {0x00, NULL((void*)0)}
2811};
2812
2813static const value_string vht_rx_stbc_flag[] = {
2814 {0x00, "None"},
2815 {0x01, "1 Spatial Stream Supported"},
2816 {0x02, "1 to 2 Spatial Stream Supported"},
2817 {0x03, "1 to 3 Spatial Stream Supported"},
2818 {0x04, "1 to 4 Spatial Stream Supported"},
2819 {0x05, "Reserved"},
2820 {0x06, "Reserved"},
2821 {0x07, "Reserved"},
2822 {0x00, NULL((void*)0)}
2823};
2824
2825static const value_string num_plus_one_3bit_flag[] = {
2826 {0x00, "1"},
2827 {0x01, "2"},
2828 {0x02, "3"},
2829 {0x03, "4"},
2830 {0x04, "5"},
2831 {0x05, "6"},
2832 {0x06, "7"},
2833 {0x07, "8"},
2834 {0x00, NULL((void*)0)}
2835};
2836
2837static const value_string vht_max_ampdu_flag[] = {
2838 {0x00, "8 191"},
2839 {0x01, "16 383"},
2840 {0x02, "32 767"},
2841 {0x03, "65 535"},
2842 {0x04, "131 071"},
2843 {0x05, "262 143"},
2844 {0x06, "524 287"},
2845 {0x07, "1 048 575"},
2846 {0x00, NULL((void*)0)}
2847};
2848
2849static const value_string vht_link_adapt_flag[] = {
2850 {0x00, "No Feedback"},
2851 {0x01, "Reserved (logically only solicited feedback)"},
2852 {0x02, "Unsolicited feedback only"},
2853 {0x03, "Both (can provide unsolicited feedback and respond to VHT MRQ)"},
2854 {0x00, NULL((void*)0)}
2855};
2856
2857static const value_string vht_supported_mcs_flag[] = {
2858 {0x00, "MCS 0-7"},
2859 {0x01, "MCS 0-8"},
2860 {0x02, "MCS 0-9"},
2861 {0x03, "Not Supported"},
2862 {0x00, NULL((void*)0)}
2863};
2864
2865static const value_string vht_tpe_pwr_units[] = {
2866 { 0, "Local EIRP" },
2867 { 1, "Local EIRP PSD" },
2868 { 2, "Regulatory client EIRP" },
2869 { 3, "Regulatory client EIRP PSD" },
2870 { 4, "Additional regulatory client EIRP" },
2871 { 5, "Additional regulatory client EIRP PSD" },
2872 { 6, "Reserved" },
2873 { 7, "Reserved" },
2874 {0x00, NULL((void*)0)}
2875};
2876
2877static const true_false_string vht_ndp_annc_sta_info_feedback_type = {
2878 "MU feedback requested",
2879 "SU feedback requested"
2880};
2881
2882static const true_false_string ht_max_amsdu_flag = {
2883 "7935 bytes",
2884 "3839 bytes"
2885};
2886
2887static const true_false_string ht_dss_cck_40_flag = {
2888 "Will/Can use DSSS/CCK in 40 MHz",
2889 "Won't/Can't use of DSSS/CCK in 40 MHz"
2890};
2891
2892static const true_false_string ht_40_mhz_intolerant_flag = {
2893 "Use of 40 MHz transmissions restricted/disallowed",
2894 "Use of 40 MHz transmissions unrestricted/allowed"
2895};
2896
2897static const value_string ampduparam_mpdu_start_spacing_flags[] = {
2898 {0x00, "No restriction"},
2899 {0x01, "1/4 [usec]"},
2900 {0x02, "1/2 [usec]"},
2901 {0x03, "1 [usec]"},
2902 {0x04, "2 [usec]"},
2903 {0x05, "4 [usec]"},
2904 {0x06, "8 [usec]"},
2905 {0x07, "16 [usec]"},
2906 {0x00, NULL((void*)0)}
2907};
2908
2909static const true_false_string mcsset_tx_rx_mcs_set_not_equal_flag = {
2910 "Not Equal",
2911 "Equal",
2912};
2913
2914static const value_string mcsset_tx_max_spatial_streams_flags[] = {
2915 {0x00, "1 spatial stream"},
2916 {0x01, "2 spatial streams"},
2917 {0x02, "3 spatial streams"},
2918 {0x03, "4 spatial streams"},
2919 {0x04, "TX MCS Set Not Defined"},
2920 {0x00, NULL((void*)0)}
2921};
2922
2923static const value_string htex_mcs_flags[] = {
2924 {0x00, "STA does not provide MCS feedback"},
2925 {0x01, "Reserved"},
2926 {0x02, "STA provides only unsolicited MCS feedback"},
2927 {0x03, "STA can provide MCS feedback in response to MRQ as well as unsolicited MCS feedback"},
2928 {0x00, NULL((void*)0)}
2929};
2930
2931static const value_string txbf_calib_flag[] = {
2932 {0x00, "Not supported"},
2933 {0x01, "Can respond to a calibration request but cannot initiate calibration"},
2934 {0x02, "Reserved"},
2935 {0x03, "Can both initiate and respond to a calibration request"},
2936 {0x00, NULL((void*)0)}
2937};
2938
2939static const value_string txbf_feedback_flags[] = {
2940 {0x00, "Not supported"},
2941 {0x01, "Delayed feedback capable"},
2942 {0x02, "Immediate feedback capable"},
2943 {0x03, "Delayed and immediate feedback capable"},
2944 {0x00, NULL((void*)0)}
2945};
2946
2947static const value_string txbf_antenna_flags[] = {
2948 {0x00, "1 TX antenna sounding"},
2949 {0x01, "2 TX antenna sounding"},
2950 {0x02, "3 TX antenna sounding"},
2951 {0x03, "4 TX antenna sounding"},
2952 {0x00, NULL((void*)0)}
2953};
2954
2955static const value_string txbf_csi_max_rows_bf_flags[] = {
2956 {0x00, "1 row of CSI"},
2957 {0x01, "2 rows of CSI"},
2958 {0x02, "3 rows of CSI"},
2959 {0x03, "4 rows of CSI"},
2960 {0x00, NULL((void*)0)}
2961};
2962
2963static const value_string txbf_chan_est_flags[] = {
2964 {0x00, "1 space time stream"},
2965 {0x01, "2 space time streams"},
2966 {0x02, "3 space time streams"},
2967 {0x03, "4 space time streams"},
2968 {0x00, NULL((void*)0)}
2969};
2970
2971static const value_string txbf_min_group_flags[] = {
2972 {0x00, "No grouping supported"},
2973 {0x01, "Groups of 1, 2 supported"},
2974 {0x02, "Groups of 1, 4 supported"},
2975 {0x03, "Groups of 1, 2, 4 supported"},
2976 {0x00, NULL((void*)0)}
2977};
2978
2979static const value_string hta_ext_chan_offset_flag[] = {
2980 {0x00, "No Extension Channel"},
2981 {0x01, "Extension Channel above control channel"},
2982 {0x02, "Undefined"},
2983 {0x03, "Extension Channel below control channel"},
2984 {0x00, NULL((void*)0)}
2985};
2986
2987static const true_false_string hta_rec_tx_width_flag = {
2988 "Any channel width enabled",
2989 "Use 20MHz channel (control)"
2990};
2991
2992static const true_false_string hta_rifs_mode_flag = {
2993 "Use of RIFS permitted",
2994 "Use of RIFS prohibited"
2995};
2996
2997static const true_false_string hta_controlled_access_flag = {
2998 "Not only PSMP",
2999 "PSMP only"
3000};
3001
3002static const value_string hta_service_interval_flag[] = {
3003 {0x00, "5ms"},
3004 {0x01, "10ms"},
3005 {0x02, "15ms"},
3006 {0x03, "20ms"},
3007 {0x04, "25ms"},
3008 {0x05, "30ms"},
3009 {0x06, "35ms"},
3010 {0x07, "40ms"},
3011 {0x00, NULL((void*)0)}
3012};
3013
3014static const value_string hta_operating_mode_flag[] = {
3015 {0x00, "Pure HT, no protection"},
3016 {0x01, "There may be non-HT devices (control & ext channel)"},
3017 {0x02, "No non-HT is associated, but at least 1 20MHz is. protect on"},
3018 {0x03, "Mixed: no non-HT is associated, protect on"},
3019 {0x00, NULL((void*)0)}
3020};
3021
3022static const true_false_string hta_non_gf_devices_flag = {
3023 "All HT devices associated are GF capable",
3024 "One or More HT devices are not GF capable"
3025};
3026
3027static const true_false_string hta_dual_stbc_protection_flag = {
3028 "Dual CTS protections is used",
3029 "Regular use of RTS/CTS"
3030};
3031
3032static const true_false_string hta_secondary_beacon_flag = {
3033 "Secondary Beacon",
3034 "Primary Beacon"
3035};
3036
3037static const true_false_string hta_lsig_txop_protection_flag = {
3038 "Full Support",
3039 "Not full support"
3040};
3041
3042static const true_false_string hta_pco_active_flag = {
3043 "PCO is activated in the BSS",
3044 "PCO is not activated in the BSS"
3045};
3046
3047static const true_false_string hta_pco_phase_flag = {
3048 "Switch to 20MHz phase/keep 20MHz",
3049 "Switch to 40MHz phase/keep 40MHz"
3050};
3051
3052static const value_string ht_info_secondary_channel_offset_flags[] = {
3053 {0x00, "No secondary channel"},
3054 {0x01, "Secondary channel is above the primary channel"},
3055 {0x02, "Reserved"},
3056 {0x03, "Secondary channel is below the primary channel"},
3057 {0x00, NULL((void*)0)}
3058};
3059
3060static const true_false_string ht_info_channel_sta_width_flag = {
3061 "Channel of any width supported",
3062 "20 MHz channel width only"
3063};
3064
3065static const true_false_string ht_info_rifs_mode_flag = {
3066 "Permitted",
3067 "Prohibited"
3068};
3069
3070static const value_string ht_info_operating_protection_mode_flags[] = {
3071 {0x00, "No protection mode"},
3072 {0x01, "HT non-member protection mode"},
3073 {0x02, "20 MHz protection mode"},
3074 {0x03, "non-HT mixed mode"},
3075 {0x00, NULL((void*)0)}
3076};
3077
3078static const true_false_string ht_info_non_greenfield_sta_present_flag = {
3079 "One or more associated STAs are not greenfield capable",
3080 "All associated STAs are greenfield capable"
3081};
3082
3083static const true_false_string ht_info_obss_non_ht_stas_present_flag = {
3084 "Use of protection for non-HT STAs by overlapping BSSs is needed",
3085 "Use of protection for non-HT STAs by overlapping BSSs is not needed"
3086};
3087
3088static const true_false_string ht_info_dual_beacon_flag = {
3089 "AP transmits a secondary beacon",
3090 "No second beacon is transmitted"
3091};
3092
3093static const true_false_string ht_info_stbc_beacon_flag = {
3094 "STBC beacon",
3095 "Primary beacon"
3096};
3097
3098static const true_false_string htc_lac_trq_flag = {
3099 "Want sounding PPDU",
3100 "Don't want sounding PPDU"
3101};
3102
3103static const true_false_string htc_lac_mai_mrq_flag = {
3104 "MCS feedback requested",
3105 "No MCS feedback requested"
3106};
3107
3108static const value_string ieee80211_htc_lac_asel_command_flags[] = {
3109 {0x00, "Transmit Antenna Selection Sounding Indication (TXASSI)"},
3110 {0x01, "Transmit Antenna Selection Sounding Request (TXASSR)"},
3111 {0x02, "Receive Antenna Selection Sounding Indication (RXASSI)"},
3112 {0x03, "Receive Antenna Selection Sounding Request (RXASSR)"},
3113 {0x04, "Sounding Label"},
3114 {0x05, "No feedback, ASEL training failure"},
3115 {0x06, "Transmit Antenna Selection Sounding Indication (TXASSI) requesting feedback of explicit CSI"},
3116 {0x07, "Reserved"},
3117 {0x00, NULL((void*)0)}
3118};
3119
3120static const value_string ieee80211_htc_cal_pos_flags[] = {
3121 {0x00, "Not a calibration frame"},
3122 {0x01, "Calibration Start"},
3123 {0x02, "Sounding Response"},
3124 {0x03, "Sounding Complete"},
3125 {0x00, NULL((void*)0)}
3126};
3127
3128static const value_string ieee80211_htc_csi_steering_flags[] = {
3129 {0x00, "No feedback required"},
3130 {0x01, "CSI"},
3131 {0x02, "Non-compressed Beamforming Feedback Matrix"},
3132 {0x03, "Compressed Beamforming Feedback Matrix"},
3133 {0x00, NULL((void*)0)}
3134};
3135
3136static const true_false_string ieee80211_htc_ndp_announcement_flag = {
3137 "NDP will follow",
3138 "No NDP will follow"
3139};
3140
3141static const value_string ieee80211_htc_bw_recommended_vht_mcs_vals[] = {
3142 {0, "20 MHz"},
3143 {1, "40 MHz"},
3144 {2, "80 MHz"},
3145 {3, "160 MHz and 80+80 MHz"},
3146 {0, NULL((void*)0)}
3147};
3148
3149static const value_string ieee80211_htc_s1g_bw_recommended_vht_mcs_vals[] = {
3150 {0, "1 MHz"},
3151 {1, "2 MHz"},
3152 {2, "4 MHz"},
3153 {3, "8 MHz"},
3154 {4, "16 MHz"},
3155 {5, "Reserved"},
3156 {6, "Reserved"},
3157 {7, "Reserved"},
3158 {0, NULL((void*)0)}
3159};
3160
3161static const value_string ieee80211_htc_coding_type_vals[] = {
3162 {0, "BCC"},
3163 {1, "LDPC"},
3164 {0, NULL((void*)0)}
3165};
3166
3167static const value_string ieee80211_htc_fb_tx_type_vals[] = {
3168 {0, "Not beamformed"},
3169 {1, "Beamformed"},
3170 {0, NULL((void*)0)}
3171};
3172
3173static const value_string ieee80211_tag_secondary_channel_offset_flags[] = {
3174 {0x00, "No Secondary Channel"},
3175 {0x01, "Above Primary Channel"},
3176 {0x02, "Reserved"},
3177 {0x03, "Below Primary Channel"},
3178 {0x00, NULL((void*)0)}
3179};
3180
3181#define BSS_BITMASK_UP00x0001 0x0001
3182#define BSS_BITMASK_UP10x0002 0x0002
3183#define BSS_BITMASK_UP20x0004 0x0004
3184#define BSS_BITMASK_UP30x0008 0x0008
3185#define BSS_BITMASK_UP40x0010 0x0010
3186#define BSS_BITMASK_UP50x0020 0x0020
3187#define BSS_BITMASK_UP60x0040 0x0040
3188#define BSS_BITMASK_UP70x0080 0x0080
3189#define BSS_BITMASK_AC00x0100 0x0100
3190#define BSS_BITMASK_AC10x0200 0x0200
3191#define BSS_BITMASK_AC20x0400 0x0400
3192#define BSS_BITMASK_AC30x0800 0x0800
3193#define BSS_BITMASK_RSV0xF000 0xF000
3194
3195static const value_string ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags[] = {
3196 {0x00, "Frames may be transmitted before the channel switch has been completed"},
3197 {0x01, "No more frames are to be transmitted until the channel switch has been completed"},
3198 {0x00, NULL((void*)0)}
3199};
3200
3201static const value_string service_interval_granularity_vals[] = {
3202 { 0, "5 ms" },
3203 { 1, "10 ms" },
3204 { 2, "15 ms" },
3205 { 3, "20 ms" },
3206 { 4, "25 ms" },
3207 { 5, "30 ms" },
3208 { 6, "35 ms" },
3209 { 7, "40 ms" },
3210 { 0x00, NULL((void*)0) }
3211};
3212
3213static const value_string wep_type_vals[] = {
3214 { DOT11DECRYPT_KEY_TYPE_WEP0, STRING_KEY_TYPE_WEP"wep" },
3215 { DOT11DECRYPT_KEY_TYPE_WPA_PWD3, STRING_KEY_TYPE_WPA_PWD"wpa-pwd" },
3216 { DOT11DECRYPT_KEY_TYPE_WPA_PSK4, STRING_KEY_TYPE_WPA_PSK"wpa-psk" },
3217 { DOT11DECRYPT_KEY_TYPE_TK6, STRING_KEY_TYPE_TK"tk" },
3218 { DOT11DECRYPT_KEY_TYPE_MSK7, STRING_KEY_TYPE_MSK"msk" },
3219 { 0x00, NULL((void*)0) }
3220};
3221
3222static const value_string ieee80211_ht_pren_type_vals[] = {
3223 { 51, "HT Capabilities (802.11n D1.10)" },
3224 { 52, "HT Additional Capabilities (802.11n D1.00)" },
3225 { 0, NULL((void*)0) }
3226};
3227
3228static const true_false_string ieee80211_cf_ssw_direction = {
3229 "Transmitted by the beamforming responder",
3230 "Transmitted by the beamforming initiator"
3231};
3232
3233static const value_string bss_type[] = {
3234 {0x0, "Reserved"},
3235 {0x1, "IBSS"},
3236 {0x2, "PBSS"},
3237 {0x3, "Infrastructure BSS"},
3238 {0, NULL((void*)0)}
3239};
3240
3241static const value_string band_id[] = {
3242 {0x0, "TV white spaces"},
3243 {0x1, "Sub-1 GHz (excluding TV white spaces)"},
3244 {0x2, "2.4 GHz"},
3245 {0x3, "3.6 GHz"},
3246 {0x4, "4.9 and 5 GHz"},
3247 {0x5, "60 GHz"},
3248 {0x6, "45 GHz"},
3249 {0x7, "6 GHz"},
3250 {0, NULL((void*)0)}
3251};
3252
3253static const value_string extended_sc_mcs[] = {
3254 {0x0, "None"},
3255 {0x1, "MCS 9.1"},
3256 {0x2, "MCS 12.1"},
3257 {0x3, "MCS 12.2"},
3258 {0x4, "MCS 12.3"},
3259 {0x5, "MCS 12.4"},
3260 {0x6, "MCS 12.5"},
3261 {0x7, "MCS 12.6"},
3262 {0, NULL((void*)0)}
3263};
3264
3265static const range_string max_basic_sf_amsdu[] = {
3266 {0, 0, "No Limit"},
3267 {1, 1, "4 Basic subframes"},
3268 {2, 2, "8 Basic subframes"},
3269 {3, 3, "16 Basic subframes"},
3270 {4, 4, "32 Basic subframes"},
3271 {5, 5, "64 Basic subframes"},
3272 {6, 6, "128 Basic subframes"},
3273 {7, 7, "256 Basic subframes"},
3274 {8, 255, "reserved"},
3275 {0, 0, NULL((void*)0)}
3276};
3277
3278static const range_string max_short_sf_amsdu[] = {
3279 {0, 0, "No Limit"},
3280 {1, 1, "32 Short subframes"},
3281 {2, 2, "64 Short subframes"},
3282 {3, 3, "128 Short subframes"},
3283 {4, 4, "256 Short subframes"},
3284 {5, 5, "512 Short subframes"},
3285 {6, 6, "1024 Short subframes"},
3286 {7, 255, "reserved"},
3287 {0, 0, NULL((void*)0)}
3288};
3289
3290static const value_string allocation_type[] = {
3291 {0x0, "SP Allocation"},
3292 {0x1, "CBAP allocation"},
3293 {0, NULL((void*)0)}
3294};
3295
3296static const value_string vht_operation_info_channel_width[] = {
3297 {0x00, "20MHz or 40MHz"},
3298 {0x01, "80MHZ"},
3299 {0x10, "160MHz"},
3300 {0x11, "80MHz+80MHz"},
3301 {0, NULL((void*)0)}
3302};
3303static const value_string operating_mode_field_channel_width[] = {
3304 {0x00, "20MHz"},
3305 {0x01, "40MHZ"},
3306 {0x02, "80MHz"},
3307 {0x03, "160MHz or 80MHz+80MHz"},
3308 {0, NULL((void*)0)}
3309};
3310
3311static const value_string operat_mode_field_rxnss[] = {
3312 {0x0, "1Nss"},
3313 {0x1, "2Nss"},
3314 {0x2, "3Nss"},
3315 {0x3, "4Nss"},
3316 {0x4, "5Nss"},
3317 {0x5, "6Nss"},
3318 {0x6, "7Nss"},
3319 {0x7, "8Nss"},
3320 {0, NULL((void*)0)}
3321};
3322
3323#define VHT_ACT_VHT_COMPRESSED_BEAMFORMING0 0
3324#define VHT_ACT_GROUP_ID_MANAGEMENT1 1
3325#define VHT_ACT_OPERATION_MODE_NOTIFICATION2 2
3326
3327static const value_string vht_action_vals[] = {
3328 {VHT_ACT_VHT_COMPRESSED_BEAMFORMING0, "VHT Compressed Beamforming"},
3329 {VHT_ACT_GROUP_ID_MANAGEMENT1, "Group ID Management"},
3330 {VHT_ACT_OPERATION_MODE_NOTIFICATION2, "Operating Mode Notification"},
3331 {0, NULL((void*)0)}
3332};
3333
3334static const value_string ff_vht_mimo_cntrl_nc_index_vals[] = {
3335 {0x00, "1 Column"},
3336 {0x01, "2 Columns"},
3337 {0x02, "3 Columns"},
3338 {0x03, "4 Columns"},
3339 {0x04, "5 Columns"},
3340 {0x05, "6 Columns"},
3341 {0x06, "7 Columns"},
3342 {0x07, "8 Columns"},
3343 {0, NULL((void*)0)}
3344};
3345
3346static const value_string ff_vht_mimo_cntrl_nr_index_vals[] = {
3347 {0x00, "1 Row"},
3348 {0x01, "2 Rows"},
3349 {0x02, "3 Rows"},
3350 {0x03, "4 Rows"},
3351 {0x04, "5 Rows"},
3352 {0x05, "6 Rows"},
3353 {0x06, "7 Rows"},
3354 {0x07, "8 Rows"},
3355 {0, NULL((void*)0)}
3356};
3357
3358static const value_string ff_vht_mimo_cntrl_channel_width_vals[] = {
3359 {0x00, "20 MHz"},
3360 {0x01, "40 MHz"},
3361 {0x02, "80 MHz"},
3362 {0x03, "160 MHz / 80+80 MHz"},
3363 {0, NULL((void*)0)}
3364};
3365
3366static const value_string ff_vht_mimo_cntrl_grouping_vals[] = {
3367 {0x00, "1 (No Grouping)"},
3368 {0x01, "2"},
3369 {0x02, "4"},
3370 {0x03, "Reserved"},
3371 {0, NULL((void*)0)}
3372};
3373
3374static const value_string ff_vht_mimo_cntrl_feedback_vals[] = {
3375 {0x00, "SU"},
3376 {0x01, "MU"},
3377 {0, NULL((void*)0)}
3378};
3379
3380#define S1G_ACT_AID_SWITCH_REQUEST0 0
3381#define S1G_ACT_AID_SWITCH_RESPONSE1 1
3382#define S1G_ACT_SYNC_CONTROL2 2
3383#define S1G_ACT_STA_INFO_ANNOUNCE3 3
3384#define S1G_ACT_EDCA_PARAM_SET4 4
3385#define S1G_ACT_EL_OPERATION5 5
3386#define S1G_ACT_TWT_SETUP6 6
3387#define S1G_ACT_TWT_TEARDOWN7 7
3388#define S1G_ACT_SECT_GROUP_ID_LIST8 8
3389#define S1G_ACT_SECT_ID_FEEDBACK9 9
3390#define S1G_ACT_RESERVED10 10
3391#define S1G_ACT_TWT_INFORMATION11 11
3392
3393static const value_string s1g_action_vals[] = {
3394 {S1G_ACT_AID_SWITCH_REQUEST0, "AID Switch Request"},
3395 {S1G_ACT_AID_SWITCH_RESPONSE1, "AID Switch Response"},
3396 {S1G_ACT_SYNC_CONTROL2, "Sync Control"},
3397 {S1G_ACT_STA_INFO_ANNOUNCE3, "STA Information Announcement"},
3398 {S1G_ACT_EDCA_PARAM_SET4, "EDCA Parameter Set"},
3399 {S1G_ACT_EL_OPERATION5, "EL Operation"},
3400 {S1G_ACT_TWT_SETUP6, "TWT Setup"},
3401 {S1G_ACT_TWT_TEARDOWN7, "TWT Teardown"},
3402 {S1G_ACT_SECT_GROUP_ID_LIST8, "Sectorized Group ID List"},
3403 {S1G_ACT_SECT_ID_FEEDBACK9, "Sector ID Feedback"},
3404 {S1G_ACT_RESERVED10, "Reserved"},
3405 {S1G_ACT_TWT_INFORMATION11, "TWT Information"},
3406 {0, NULL((void*)0)},
3407};
3408
3409#define PROT_S1G_ACT_REACH_ADDR_UPDATE0 0
3410#define PROT_S1G_ACT_RELAY_ACTIVATE_REQ1 1
3411#define PROT_S1G_ACT_RELAY_ACTIVATE_RESP2 2
3412#define PROT_S1G_ACT_HEADER_COMPRESSION3 3
3413#define PROT_S1G_ACT_TWT_SETUP4 4
3414#define PROT_S1G_ACT_TWT_TEARDOWN5 5
3415#define PROT_S1G_ACT_TWT_INFORMATION6 6
3416#define PROT_S1G_ACT_AID_SWITCH_REQUEST7 7
3417#define PROT_S1G_ACT_AID_SWITCH_RESPONSE8 8
3418#define PROT_S1G_ACT_SYNC_CONTROL9 9
3419#define PROT_S1G_ACT_STA_INFO_ANNOUNCE10 10
3420#define PROT_S1G_ACT_EDCA_PARAM_SET11 11
3421#define PROT_S1G_ACT_EL_OPERATION12 12
3422#define PROT_S1G_ACT_SECT_GROUP_ID_LIST13 13
3423#define PROT_S1G_ACT_SECT_ID_FEEDBACK14 14
3424
3425static const value_string prot_s1g_action_vals[] = {
3426 {PROT_S1G_ACT_REACH_ADDR_UPDATE0, "Reachable Address Update"},
3427 {PROT_S1G_ACT_RELAY_ACTIVATE_REQ1, "Relay Activation Request"},
3428 {PROT_S1G_ACT_RELAY_ACTIVATE_RESP2, "Relay Activation Response"},
3429 {PROT_S1G_ACT_HEADER_COMPRESSION3, "Header Compression"},
3430 {PROT_S1G_ACT_TWT_SETUP4, "Protected TWT Setup"},
3431 {PROT_S1G_ACT_TWT_TEARDOWN5, "Protected TWT Teardown"},
3432 {PROT_S1G_ACT_TWT_INFORMATION6, "Protected TWT Information"},
3433 {PROT_S1G_ACT_AID_SWITCH_REQUEST7, "Protected AID Switch Request"},
3434 {PROT_S1G_ACT_AID_SWITCH_RESPONSE8, "Protected AID Switch Response"},
3435 {PROT_S1G_ACT_SYNC_CONTROL9, "Protected Sync Control"},
3436 {PROT_S1G_ACT_STA_INFO_ANNOUNCE10, "Protected STA Information Announcement"},
3437 {PROT_S1G_ACT_EDCA_PARAM_SET11, "Protected EDCA Parameter Set"},
3438 {PROT_S1G_ACT_EL_OPERATION12, "Protected EL Operation"},
3439 {PROT_S1G_ACT_SECT_GROUP_ID_LIST13, "Protected Sectorized Group ID List"},
3440 {PROT_S1G_ACT_SECT_ID_FEEDBACK14, "Protected Sector ID Feedback"},
3441 {0, NULL((void*)0)},
3442};
3443
3444static const value_string twt_neg_type_vals[] = {
3445 {0x0, "Individual TWT"},
3446 {0x1, "Wake TBTT"},
3447 {0x2, "Broadcast TWT schedule, TWT element in broadcast management frame"},
3448 {0x3, "Broadcast TWT schedule, TWT element in unicast management frame"},
3449 {0, NULL((void*)0)},
3450};
3451
3452static const true_false_string twt_responder_pm_mode_tfs = {
3453 "AP may doze outside the TWT",
3454 "AP is always awake",
3455};
3456
3457static const true_false_string twt_requester_tfs = {
3458 "This STA is a TWT Requesting STA",
3459 "This STA is a TWT Responding STA or a TWT scheduling AP",
3460};
3461
3462static const true_false_string twt_info_frame_disabled_tfs = {
3463 "Reception of TWT Information frames is disabled",
3464 "Reception of TWT Information frames is enabled",
3465};
3466
3467static const true_false_string twt_wake_duration_unit_tfs = {
3468 "1 TU",
3469 "256 microseconds",
3470};
3471
3472#define REQUEST_TWT0 0
3473#define SUGGEST_TWT1 1
3474#define DEMAND_TWT2 2
3475#define TWT_GROUPING3 3
3476#define ACCEPT_TWT4 4
3477#define ALTERNATE_TWT5 5
3478#define DICTATE_TWT6 6
3479#define REJECT_TWT7 7
3480
3481static const value_string twt_setup_cmd[] = {
3482 {REQUEST_TWT0, "Request TWT"},
3483 {SUGGEST_TWT1, "Suggest TWT"},
3484 {DEMAND_TWT2, "Demand TWT"},
3485 {TWT_GROUPING3, "TWT Grouping"},
3486 {ACCEPT_TWT4, "Accept TWT"},
3487 {ALTERNATE_TWT5, "Alternate TWT"},
3488 {DICTATE_TWT6, "Dictate TWT"},
3489 {REJECT_TWT7, "Reject TWT"},
3490 {0, NULL((void*)0)},
3491};
3492
3493static const true_false_string twt_trigger = {
3494 "TWT SP includes trigger frames",
3495 "TWT SP does not include trigger frames",
3496};
3497
3498static const true_false_string twt_implicit = {
3499 "TWT is implicit",
3500 "TWT is explicit",
3501};
3502
3503static const true_false_string twt_flow_type = {
3504 "TWT is unannounced, the TWT responding STA can send frames at any time",
3505 "TWT is announced, the TWT Requesting STA will send trigger frames",
3506};
3507
3508static const value_string he_phy_device_class_vals[] = {
3509 { 0, "Class B Device" },
3510 { 1, "Class A Device" },
3511 { 0, NULL((void*)0) }
3512};
3513
3514static const value_string he_phy_midamble_tx_rx_max_nsts_vals[] = {
3515 { 0, "1 Space-Time Stream" },
3516 { 1, "2 Space-Time Streams" },
3517 { 2, "3 Space-Time Streams" },
3518 { 3, "4 Space-Time Streams" },
3519 { 0, NULL((void*)0) }
3520};
3521
3522static const value_string he_phy_dcm_max_constellation_vals[] = {
3523 { 0, "DCM is not supported" },
3524 { 1, "BPSK" },
3525 { 2, "QPSK" },
3526 { 3, "16-QAM" },
3527 { 0, NULL((void*)0) }
3528};
3529
3530static const value_string he_phy_dcm_max_nss_vals[] = {
3531 { 0, "1 Spatial Stream" },
3532 { 1, "2 Spatial Streams" },
3533 { 0, NULL((void*)0) }
3534};
3535
3536static const value_string he_phy_dcm_max_ru_vals[] = {
3537 { 0, "242-tone RU" },
3538 { 1, "484-tone RU" },
3539 { 2, "996-tone RU" },
3540 { 3, "2x996-tone RU"},
3541 { 0, NULL((void*)0) }
3542};
3543
3544static const value_string he_phy_nominal_packet_padding_vals[] = {
3545 { 0, "0 µs for all constellations, Nss and RU allocations" },
3546 { 1, "8 µs for all constellations, Nss and RU allocations" },
3547 { 2, "16 µs for all constellations, Nss and RU allocations" },
3548 { 3, "Reserved" },
3549 { 0, NULL((void*)0) }
3550};
3551
3552// MBO-OCE attributes
3553#define MBO_AP_CAPABILITY_INDICATION1 1
3554#define MBO_NON_PREF_CHANNEL_REPORT2 2
3555#define MBO_CELLULAR_DATA_CAPABILITIES3 3
3556#define MBO_ASSOCIATION_DISALLOWED4 4
3557#define MBO_CELLULAR_DATA_PREFERENCE5 5
3558#define MBO_TRANSITION_REASON6 6
3559#define MBO_TRANSITION_REJECTION_REASON7 7
3560#define MBO_ASSOCIATION_RETRY_DELAY8 8
3561#define OCE_CAPABILITY_INDICATION101 101
3562#define OCE_RSSI_ASSOCIATION_REJECTION102 102
3563#define OCE_REDUCED_WAN_METRICS103 103
3564#define OCE_RNR_COMPLETENESS104 104
3565#define OCE_PROBE_SUPPR_BSSID105 105
3566#define OCE_PROBE_SUPPR_SSID106 106
3567
3568static const value_string wfa_mbo_oce_attr_id_vals[] = {
3569 { MBO_AP_CAPABILITY_INDICATION1, "MBO AP Capability Indication"},
3570 { MBO_NON_PREF_CHANNEL_REPORT2, "Non-preferred Channel Report"},
3571 { MBO_CELLULAR_DATA_CAPABILITIES3, "Cellular Data Capabilities"},
3572 { MBO_ASSOCIATION_DISALLOWED4, "Association Disallowed"},
3573 { MBO_CELLULAR_DATA_PREFERENCE5, "Cellular Data Connection Preference"},
3574 { MBO_TRANSITION_REASON6, "Transition Reason Code BTM Request"},
3575 { MBO_TRANSITION_REJECTION_REASON7, "Transition Rejection Reason Code"},
3576 { MBO_ASSOCIATION_RETRY_DELAY8, "Association Retry Delay"},
3577 { OCE_CAPABILITY_INDICATION101, "OCE Capability Indication" },
3578 { OCE_RSSI_ASSOCIATION_REJECTION102, "RSSI-based (Re-)Association Rejection" },
3579 { OCE_REDUCED_WAN_METRICS103, "Reduced WAN Metrics" },
3580 { OCE_RNR_COMPLETENESS104, "RNR Completeness" },
3581 { OCE_PROBE_SUPPR_BSSID105, "Probe Suppression BSSIDs" },
3582 { OCE_PROBE_SUPPR_SSID106, "Probe Suppression SSIDs" },
3583 { 0, NULL((void*)0)}
3584};
3585
3586static const value_string wfa_mbo_non_pref_chan_pref_vals[] = {
3587 { 0, "non-operable band/channel for the STA"},
3588 { 1, "band/channel the STA prefers not to operate in"},
3589 { 255, "band/channel the STA prefers to operate in"},
3590 { 0, NULL((void*)0) }
3591};
3592
3593static const value_string wfa_mbo_non_pref_chan_reason_vals[] = {
3594 { 0, "Unspecified reason"},
3595 { 1, "An unacceptable level of interference is being experienced by STA in this channel"},
3596 { 2, "The STA has another active connection in this channel, "
3597 "or near enough to this channel to cause operating interference"},
3598 { 0, NULL((void*)0) }
3599};
3600
3601static const value_string wfa_mbo_cellular_cap_vals[] = {
3602 { 1, "Cellular data connection available"},
3603 { 2, "Cellular data connection not available"},
3604 { 3, "Not Cellular data capable"},
3605 { 0, NULL((void*)0) }
3606};
3607
3608static const value_string wfa_mbo_assoc_disallow_reason_vals[] = {
3609 { 1, "Unspecified reason"},
3610 { 2, "Maximum number of associated STAs reached"},
3611 { 3, "Air interface is overloaded"},
3612 { 4, "Authentication server overloaded"},
3613 { 5, "Insufficient RSSI"},
3614 { 0, NULL((void*)0) }
3615};
3616
3617static const value_string wfa_mbo_cellular_pref_vals[] = {
3618 { 0, "Excluded. The AP does not want STA to use the cellular data connection"},
3619 { 1, "The AP prefers the STA should not use cellular data connection"},
3620 { 255, "The AP prefers the STA should use cellular data connection"},
3621 { 0, NULL((void*)0) }
3622};
3623
3624static const value_string wfa_mbo_transition_reason_vals[] = {
3625 { 0, "Unspecified"},
3626 { 1, "Excessive frame loss rate"},
3627 { 2, "Excessive delay for current traffic stream"},
3628 { 3, "Insufficient bandwidth for current traffic stream"},
3629 { 4, "Load balancing"},
3630 { 5, "Low RSSI"},
3631 { 6, "Received excessive number of retransmissions"},
3632 { 7, "High interference"},
3633 { 8, "Gray zone"},
3634 { 9, "Transitioning to a premium AP"},
3635 { 0, NULL((void*)0) }
3636};
3637
3638static const value_string wfa_mbo_transition_rej_reason_vals[] = {
3639 { 0, "Unspecified"},
3640 { 1, "Excessive frame loss rate expected by the STA if it transitions"},
3641 { 2, "Excessive delay for current traffic stream would be incurred by BSS transition at this time"},
3642 { 3, "Insufficient QoS capacity for current traffic stream expected by the STA if it transitions"},
3643 { 4, "Low RSSI in frames being received by the STA from to the suggested candidate BSS(s)"},
3644 { 5, "High interference expected by STA if it transitions"},
3645 { 6, "Service Availability – the STA expects that services it needs "
3646 "which are available at its serving AP will not be available if it transitions"},
3647 { 0, NULL((void*)0) }
3648};
3649
3650/* 802.11ai FILS Discovery */
3651#define PA_FILS_FC_SSID_LENGTH0x001F 0x001F
3652#define PA_FILS_FC_CAPABILITY0x0020 0x0020
3653#define PA_FILS_FC_SHORT_SSID0x0040 0x0040
3654#define PA_FILS_FC_AP_CSN0x0080 0x0080
3655#define PA_FILS_FC_ANO0x0100 0x0100
3656#define PA_FILS_FC_CCFS10x0200 0x0200
3657#define PA_FILS_FC_PC0x0400 0x0400
3658#define PA_FILS_FC_RSN_INFO0x0800 0x0800
3659#define PA_FILS_FC_LENGTH0x1000 0x1000
3660#define PA_FILS_FC_MD0x2000 0x2000
3661#define PA_FILS_FC_RESERVED0xC000 0xC000
3662
3663static const value_string fils_discovery_capability_bss_operating_channel_width[] = {
3664 {0, "20MHz (or 22Mhz) / TVHT_W"},
3665 {1, "40MHZ / TVHT_W+W"},
3666 {2, "80MHz / TVHT_2W"},
3667 {3, "160MHz or 80MHz+80MHz / TVHT_4W or TVHT_2W+2W"},
3668 {0, NULL((void*)0)}
3669};
3670
3671static const value_string fils_discovery_capability_max_number_of_spatial_streams[] = {
3672 {0, "1 spatial stream"},
3673 {1, "2 spatial streams"},
3674 {2, "3 spatial streams"},
3675 {3, "4 spatial streams"},
3676 {4, "5-8 spatial streams"},
3677 {0, NULL((void*)0)}
3678};
3679
3680static const value_string fils_discovery_capability_phy_index[] = {
3681 {0, "HR/DSSS"},
3682 {1, "ERP-OFDM"},
3683 {2, "HT"},
3684 {3, "VHT or TVHT"},
3685 {4, "HE"},
3686 {0x00, NULL((void*)0)}
3687};
3688
3689static const value_string fils_discovery_capability_fils_minimum_rate_dsss[] = {
3690 {0, "1 Mbps"},
3691 {1, "2 Mbps"},
3692 {2, "5.5 Mbps"},
3693 {3, "11 Mbps"},
3694 {0x00, NULL((void*)0)}
3695};
3696
3697static const value_string fils_discovery_capability_fils_minimum_rate_ofdm[] = {
3698 {0, "6 Mbps"},
3699 {1, "9 Mbps"},
3700 {2, "12 Mbps"},
3701 {3, "18 Mbps"},
3702 {4, "24 Mbps"},
3703 {0x00, NULL((void*)0)}
3704};
3705
3706static const value_string fils_discovery_capability_fils_minimum_rate_ht_vht_tvht[] = {
3707 {0, "MCS 0"},
3708 {1, "MCS 1"},
3709 {2, "MCS 2"},
3710 {3, "MCS 3"},
3711 {4, "MCS 4"},
3712 {0x00, NULL((void*)0)}
3713};
3714
3715static const value_string fils_discovery_capability_fils_minimum_rate_he[] = {
3716 {0, "HE-MCS 0"},
3717 {1, "HE-MCS 1"},
3718 {2, "HE-MCS 2"},
3719 {3, "HE-MCS 3"},
3720 {4, "HE-MCS 4"},
3721 {0x00, NULL((void*)0)}
3722};
3723
3724static const value_string wfa_rsne_variant_vals[] = {
3725 { 0, "RSNE" },
3726 { 1, "RSNE Override" },
3727 { 2, "RSNE Override 2" },
3728 { 0, NULL((void*)0) }
3729};
3730
3731static int proto_wlan;
3732static int proto_centrino;
3733static int proto_aggregate;
3734static bool_Bool ieee80211_tvb_invalid;
3735static int proto_eapol; /* Externally retrieved */
3736
3737/* ************************************************************************* */
3738/* Header field info values for FC-field */
3739/* ************************************************************************* */
3740static int hf_ieee80211_fc_field;
3741static int hf_ieee80211_fc_proto_version;
3742static int hf_ieee80211_fc_frame_type;
3743static int hf_ieee80211_fc_frame_subtype;
3744static int hf_ieee80211_fc_frame_extension;
3745static int hf_ieee80211_fc_frame_type_subtype;
3746
3747static int hf_ieee80211_fc_flags;
3748static int hf_ieee80211_fc_flags_str;
3749static int hf_ieee80211_fc_to_ds;
3750static int hf_ieee80211_fc_from_ds;
3751static int hf_ieee80211_fc_data_ds;
3752
3753static int hf_ieee80211_fc_more_frag;
3754static int hf_ieee80211_fc_retry;
3755static int hf_ieee80211_fc_pwr_mgt;
3756static int hf_ieee80211_fc_more_data;
3757static int hf_ieee80211_fc_protected;
3758static int hf_ieee80211_fc_order;
3759
3760/* S1G Flags */
3761static int hf_ieee80211_fc_s1g_next_tbtt_present;
3762static int hf_ieee80211_fc_s1g_compressed_ssid_present;
3763static int hf_ieee80211_fc_s1g_ano_present;
3764static int hf_ieee80211_fc_s1g_bss_bw;
3765static int hf_ieee80211_fc_s1g_security;
3766static int hf_ieee80211_fc_s1g_ap_pm;
3767
3768/* S1G PV0 fields */
3769static int hf_ieee80211_fc_s1g_bw_indication;
3770static int hf_ieee80211_fc_s1g_dynamic_indication;
3771
3772/* PV1 fields */
3773static int hf_ieee80211_fc_pv1_proto_version;
3774static int hf_ieee80211_fc_pv1_type;
3775static int hf_ieee80211_fc_pv1_ptid;
3776static int hf_ieee80211_fc_pv1_mgmt_subtype;
3777static int hf_ieee80211_fc_pv1_cntl_subtype;
3778static int hf_ieee80211_fc_pv1_unk_field;
3779static int hf_ieee80211_fc_pv1_bw_indication;
3780static int hf_ieee80211_fc_pv1_dynamic_indication;
3781static int hf_ieee80211_fc_pv1_cntl_power_mgmt;
3782static int hf_ieee80211_fc_pv1_cntl_more_data;
3783static int hf_ieee80211_fc_pv1_cntl_flow_control;
3784static int hf_ieee80211_fc_pv1_cntl_next_twt_info;
3785static int hf_ieee80211_fc_pv1_mgmt_pr_next_tbt;
3786static int hf_ieee80211_fc_pv1_mgmt_pr_full_ssid;
3787static int hf_ieee80211_fc_pv1_mgmt_pr_ano;
3788static int hf_ieee80211_fc_pv1_mgmt_pr_bss_bw;
3789static int hf_ieee80211_fc_pv1_mgmt_pr_security;
3790static int hf_ieee80211_fc_pv1_mgmt_pr_1mhz_pc;
3791static int hf_ieee80211_fc_pv1_mgmt_pr_slot_assign;
3792static int hf_ieee80211_fc_pv1_mgmt_pr_more_frag;
3793static int hf_ieee80211_fc_pv1_mgmt_pr_pwr_mgmt;
3794static int hf_ieee80211_fc_pv1_mgmt_pr_grp_indic;
3795static int hf_ieee80211_fc_pv1_mgmt_pr_protected;
3796static int hf_ieee80211_fc_pv1_mgmt_pr_end_of_svc;
3797static int hf_ieee80211_fc_pv1_mgmt_pr_relayed_frm;
3798static int hf_ieee80211_fc_pv1_mgmt_pr_ack_policy;
3799static int hf_ieee80211_fc_pv1_from_ds;
3800static int hf_ieee80211_fc_pv1_more_fragments;
3801static int hf_ieee80211_fc_pv1_power_mgmt;
3802static int hf_ieee80211_fc_pv1_more_data;
3803static int hf_ieee80211_fc_pv1_protected_frame;
3804static int hf_ieee80211_fc_pv1_end_service_per;
3805static int hf_ieee80211_fc_pv1_relayed_frame;
3806static int hf_ieee80211_fc_pv1_ack_policy;
3807static int hf_ieee80211_pv1_sid;
3808static int hf_ieee80211_pv1_sid_association_id;
3809static int hf_ieee80211_pv1_sid_a3_present;
3810static int hf_ieee80211_pv1_sid_a4_present;
3811static int hf_ieee80211_pv1_sid_a_msdu;
3812
3813static int hf_ieee80211_pv1_cnt_stack_tetra_timest;
3814static int hf_ieee80211_pv1_cnt_bat_beacon_seq;
3815static int hf_ieee80211_pv1_cnt_bat_penta_timest;
3816static int hf_ieee80211_pv1_cnt_bat_next_twt_info;
3817static int hf_ieee80211_pv1_cnt_bat_stating_seq_cntl;
3818static int hf_ieee80211_pv1_cnt_bat_bitmap;
3819
3820static int hf_ieee80211_pv1_mgmt_reserved;
3821static int hf_ieee80211_pv1_cntl_reserved;
3822
3823typedef struct retransmit_key {
3824 uint8_t bssid[6];
3825 uint8_t src[6];
3826 uint16_t seq_control;
3827 unsigned fnum;
3828} retransmit_key;
3829
3830static GHashTable *fc_analyse_retransmit_table;
3831static GHashTable *fc_first_frame_table;
3832
3833static int hf_ieee80211_fc_analysis_retransmission;
3834static int hf_ieee80211_fc_analysis_retransmission_frame;
3835
3836/* ************************************************************************* */
3837/* Header values for Duration/ID field */
3838/* ************************************************************************* */
3839static int hf_ieee80211_did_duration;
3840static int hf_ieee80211_assoc_id;
3841
3842/* ************************************************************************* */
3843/* Header values for different address-fields (all 4 of them) */
3844/* ************************************************************************* */
3845static int hf_ieee80211_addr_da; /* Destination address subfield */
3846static int hf_ieee80211_addr_da_resolved; /* Dst addr subfield resolved*/
3847static int hf_ieee80211_addr_da_oui; /* Destination address subfield */
3848static int hf_ieee80211_addr_da_oui_resolved; /* Dst addr subfield resolved*/
3849static int hf_ieee80211_addr_da_ig; /* Destination address IG bit */
3850static int hf_ieee80211_addr_da_lg; /* Destination address LG bit */
3851
3852static int hf_ieee80211_addr_sa; /* Source address subfield */
3853static int hf_ieee80211_addr_sa_resolved; /* Src addr subfield resolved*/
3854static int hf_ieee80211_addr_sa_oui; /* Source address subfield */
3855static int hf_ieee80211_addr_sa_oui_resolved; /* Src addr subfield resolved*/
3856static int hf_ieee80211_addr_sa_ig; /* Source address IG bit */
3857static int hf_ieee80211_addr_sa_lg; /* Source address LG bit */
3858
3859static int hf_ieee80211_addr_ra; /* Receiver address subfield */
3860static int hf_ieee80211_addr_ra_resolved; /* Rcv addr subfield resolved*/
3861static int hf_ieee80211_addr_ra_oui; /* Receiver address subfield */
3862static int hf_ieee80211_addr_ra_oui_resolved; /* Rcv addr subfield resolved*/
3863static int hf_ieee80211_addr_ra_ig; /* Receiver address IG bit */
3864static int hf_ieee80211_addr_ra_lg; /* Receiver address LG bit */
3865
3866static int hf_ieee80211_addr_ta; /* Transmitter address subfield */
3867static int hf_ieee80211_addr_ta_resolved; /* Txm addr subfield resolved*/
3868static int hf_ieee80211_addr_ta_oui; /* Transmitter address subfield */
3869static int hf_ieee80211_addr_ta_oui_resolved; /* Txm addr subfield resolved*/
3870static int hf_ieee80211_addr_ta_ig; /* Transmitter address IG bit */
3871static int hf_ieee80211_addr_ta_lg; /* Transmitter address LG bit */
3872
3873static int hf_ieee80211_addr_bssid; /* address is bssid */
3874static int hf_ieee80211_addr_bssid_resolved; /* bssid resolved*/
3875static int hf_ieee80211_addr_bssid_oui; /* address is bssid */
3876static int hf_ieee80211_addr_bssid_oui_resolved; /* bssid resolved*/
3877static int hf_ieee80211_addr_bssid_ig; /* bssid address IG bit */
3878static int hf_ieee80211_addr_bssid_lg; /* bssid address LG bit */
3879
3880static int hf_ieee80211_addr_staa; /* address is station address */
3881static int hf_ieee80211_addr_staa_resolved; /* station address resolved*/
3882static int hf_ieee80211_addr_staa_oui; /* address is station address */
3883static int hf_ieee80211_addr_staa_oui_resolved; /* station address resolved*/
3884static int hf_ieee80211_addr_staa_ig; /* station address IG bit */
3885static int hf_ieee80211_addr_staa_lg; /* station address LG bit */
3886
3887static int hf_ieee80211_addr; /* Source or destination address subfield */
3888static int hf_ieee80211_addr_resolved;/*Src/dst address subfield resolved*/
3889static int hf_ieee80211_addr_oui; /* Source or destination address subfield */
3890static int hf_ieee80211_addr_oui_resolved;/*Src/dst address subfield resolved*/
3891static int hf_ieee80211_addr_ig; /* Src/dst address IG bit */
3892static int hf_ieee80211_addr_lg; /* Src/dst address LG bit */
3893
3894static int hf_ieee80211_mgt;
3895
3896/* ************************************************************************* */
3897/* Header values for QoS control field */
3898/* ************************************************************************* */
3899static int hf_ieee80211_qos;
3900static int hf_ieee80211_qos_tid;
3901static int hf_ieee80211_qos_priority;
3902static int hf_ieee80211_qos_ack_policy;
3903static int hf_ieee80211_qos_amsdu_present;
3904static int hf_ieee80211_qos_eosp;
3905static int hf_ieee80211_qos_bit4;
3906static int hf_ieee80211_qos_txop_limit;
3907static int hf_ieee80211_qos_ps_buf_state;
3908static int hf_ieee80211_qos_buf_state_indicated;
3909static int hf_ieee80211_qos_highest_pri_buf_ac;
3910static int hf_ieee80211_qos_qap_buf_load;
3911static int hf_ieee80211_qos_txop_dur_req;
3912static int hf_ieee80211_qos_queue_size;
3913static int hf_ieee80211_qos_mesh_ctl_present;
3914static int hf_ieee80211_qos_mesh_ps_rsvd;
3915static int hf_ieee80211_qos_mesh_ps_unicast;
3916static int hf_ieee80211_qos_mesh_ps_multicast;
3917static int hf_ieee80211_qos_mesh_rspi;
3918
3919/* ************************************************************************* */
3920/* Header values for HT control field (+HTC) and HE control */
3921/* ************************************************************************* */
3922/* 802.11-2012 and 802.11ac-2013 8.2.4.6 */
3923static int hf_ieee80211_htc;
3924static int hf_ieee80211_htc_vht;
3925static int hf_ieee80211_htc_he;
3926static int hf_ieee80211_htc_he_ctrl_id;
3927static int hf_ieee80211_he_a_control_padding;
3928static int hf_ieee80211_he_a_control_ones;
3929static int hf_ieee80211_he_trs_he_tb_ppdu_len;
3930static int hf_ieee80211_he_trs_ru_allocation;
3931static int hf_ieee80211_he_dl_tx_power;
3932static int hf_ieee80211_he_ul_target_rssi;
3933static int hf_ieee80211_he_ul_mcs;
3934static int hf_ieee80211_he_ul_reserved;
3935static int hf_ieee80211_he_om_rx_nss;
3936static int hf_ieee80211_he_om_channel_width;
3937static int hf_ieee80211_he_om_ul_mu_disable;
3938static int hf_ieee80211_he_om_tx_nsts;
3939static int hf_ieee80211_he_om_er_su_disable;
3940static int hf_ieee80211_he_om_dl_mu_mimo_resound;
3941static int hf_ieee80211_he_om_ul_mu_data_disable;
3942static int hf_ieee80211_he_hla_unsolicited_mfb;
3943static int hf_ieee80211_he_hla_mrq;
3944static int hf_ieee80211_he_hla_nss;
3945static int hf_ieee80211_he_hla_he_mcs;
3946static int hf_ieee80211_he_hla_dcm;
3947static int hf_ieee80211_he_hla_ru;
3948static int hf_ieee80211_he_hla_bw;
3949static int hf_ieee80211_he_hla_msi_ppdu_type;
3950static int hf_ieee80211_he_hla_tx_bf;
3951static int hf_ieee80211_he_hla_reserved;
3952static int hf_ieee80211_he_bsr_aci_bitmap;
3953static int hf_ieee80211_he_bsr_delta_tid;
3954static int hf_ieee80211_he_bsr_aci_high;
3955static int hf_ieee80211_he_bsr_scaling_factor;
3956static int hf_ieee80211_he_bsr_queue_size_high;
3957static int hf_ieee80211_he_bsr_queue_size_all;
3958static int hf_ieee80211_he_uph_ul_power_headroom;
3959static int hf_ieee80211_he_uph_ul_min_transmit_power_flag;
3960static int hf_ieee80211_he_uph_reserved;
3961static int hf_ieee80211_he_cci_ac_constraint;
3962static int hf_ieee80211_he_cci_rdg_more_ppdu;
3963static int hf_ieee80211_he_cci_sr_ppdu_indic;
3964static int hf_ieee80211_he_cci_reserved;
3965static int hf_ieee80211_he_eht_om_rx_nss_ext;
3966static int hf_ieee80211_he_eht_om_chan_w_ext;
3967static int hf_ieee80211_he_eht_om_tx_nsts_ext;
3968static int hf_ieee80211_he_eht_om_reserved;
3969static int hf_ieee80211_he_srs_ppdu_resp_dur;
3970static int hf_ieee80211_he_srs_reserved;
3971static int hf_ieee80211_he_aar_assisted_ap_bitmap;
3972static int hf_ieee80211_he_aar_reserved;
3973static int hf_ieee80211_he_btc_avail_chan;
3974static int hf_ieee80211_he_btc_reserved;
3975static int hf_ieee80211_he_trigger_common_info;
3976static int hf_ieee80211_he_trigger_type;
3977static int hf_ieee80211_he_trigger_ul_length;
3978static int hf_ieee80211_he_trigger_more_tf;
3979static int hf_ieee80211_he_trigger_cs_required;
3980static int hf_ieee80211_he_trigger_ul_bw;
3981static int hf_ieee80211_he_trigger_gi_and_ltf_type;
3982static int hf_ieee80211_he_trigger_mu_mimo_ltf_mode;
3983static int hf_ieee80211_he_trigger_num_he_ltf_syms_etc;
3984static int hf_ieee80211_he_trigger_ul_stbc;
3985static int hf_ieee80211_he_trigger_ldpc_extra_sym_seg;
3986static int hf_ieee80211_he_trigger_ap_tx_power;
3987static int hf_ieee80211_he_trigger_pre_fec_padding_factor;
3988static int hf_ieee80211_he_trigger_pe_disambiguity;
3989static int hf_ieee80211_he_trigger_ul_spatial_reuse;
3990static int hf_ieee80211_he_trigger_doppler;
3991static int hf_ieee80211_he_trigger_ul_he_sig_a_reserved;
3992static int hf_ieee80211_he_trigger_reserved;
3993static int hf_ieee80211_he_trigger_user_info;
3994static int hf_ieee80211_he_trigger_user_info_padding_start;
3995static int hf_ieee80211_he_trigger_padding;
3996static int hf_ieee80211_he_trigger_bar_ctrl;
3997static int hf_ieee80211_he_trigger_bar_ctrl_ba_ack_policy;
3998static int hf_ieee80211_he_trigger_bar_ctrl_ba_type;
3999static int hf_ieee80211_he_trigger_bar_ctrl_reserved;
4000static int hf_ieee80211_he_trigger_bar_ctrl_tid_info;
4001static int hf_ieee80211_he_trigger_bar_info;
4002static int hf_ieee80211_he_trigger_bar_info_blk_ack_seq_ctrl;
4003static int hf_ieee80211_he_trigger_mpdu_mu_spacing;
4004static int hf_ieee80211_he_trigger_tid_aggregation_limit;
4005static int hf_ieee80211_he_trigger_dependent_reserved1;
4006static int hf_ieee80211_he_trigger_preferred_ac;
4007static int hf_ieee80211_he_trigger_starting_aid;
4008static int hf_ieee80211_he_trigger_dependent_reserved2;
4009static int hf_ieee80211_he_trigger_feedback_type;
4010static int hf_ieee80211_he_trigger_dependent_reserved3;
4011static int hf_ieee80211_he_trigger_nfrp_target_rssi;
4012static int hf_ieee80211_he_trigger_multiplexing_flag;
4013static int hf_ieee80211_he_trigger_dep_nfrp_user_info;
4014static int hf_ieee80211_he_trigger_feedback_seg_retrans_bm;
4015static int hf_ieee80211_he_trigger_aid12;
4016static int hf_ieee80211_he_trigger_ru_allocation;
4017static int hf_ieee80211_he_trigger_ru_allocation_region;
4018static int hf_ieee80211_he_trigger_ru_starting_spatial_stream;
4019static int hf_ieee80211_he_trigger_ru_number_spatial_streams;
4020static int hf_ieee80211_he_trigger_ru_number_ra_ru;
4021static int hf_ieee80211_he_trigger_ru_no_more_ra_ru;
4022static int hf_ieee80211_he_trigger_ul_fec_coding_type;
4023static int hf_ieee80211_he_trigger_ul_mcs;
4024static int hf_ieee80211_he_trigger_ul_dcm;
4025static int hf_ieee80211_he_trigger_ul_target_rssi;
4026static int hf_ieee80211_he_trigger_user_reserved;
4027static int hf_ieee80211_he_trigger_dep_basic_user_info;
4028static int hf_ieee80211_he_trigger_ranging_common_info_1;
4029static int hf_ieee80211_he_trigger_ranging_common_info_2;
4030static int hf_ieee80211_eht_trigger_common_info;
4031static int hf_ieee80211_eht_trigger_type;
4032static int hf_ieee80211_eht_trigger_ul_length;
4033static int hf_ieee80211_eht_trigger_more_tf;
4034static int hf_ieee80211_eht_trigger_cs_required;
4035static int hf_ieee80211_eht_trigger_ul_bw;
4036static int hf_ieee80211_eht_trigger_gi_and_eht_ltf_type;
4037static int hf_ieee80211_eht_trigger_num_he_eht_ltf_syms_etc;
4038static int hf_ieee80211_eht_trigger_reserved2;
4039static int hf_ieee80211_eht_trigger_ldpc_extra_sym_seg;
4040static int hf_ieee80211_eht_trigger_ap_tx_power;
4041static int hf_ieee80211_eht_trigger_pre_fec_padding_factor;
4042static int hf_ieee80211_eht_trigger_pe_disambiguity;
4043static int hf_ieee80211_eht_trigger_ul_spatial_reuse;
4044static int hf_ieee80211_eht_trigger_reserved3;
4045static int hf_ieee80211_eht_trigger_he_eht_p160;
4046static int hf_ieee80211_eht_trigger_special_user_info_flag;
4047static int hf_ieee80211_eht_trigger_eht_reserved;
4048static int hf_ieee80211_eht_trigger_reserved4;
4049static int hf_ieee80211_eht_trigger_reserved;
4050static int hf_ieee80211_eht_trigger_aid12;
4051static int hf_ieee80211_eht_trigger_special_user_info;
4052static int hf_ieee80211_eht_trigger_phy_version_identifier;
4053static int hf_ieee80211_eht_trigger_ul_bw_extenstion;
4054static int hf_ieee80211_eht_trigger_eht_spatial_reuse_1;
4055static int hf_ieee80211_eht_trigger_eht_spatial_reuse_2;
4056static int hf_ieee80211_eht_trigger_disregard_u_sig_1;
4057static int hf_ieee80211_eht_trigger_validate_u_sig_2;
4058static int hf_ieee80211_eht_trigger_disregard_u_sig_2_4lsb;
4059static int hf_ieee80211_eht_trigger_disregard_u_sig_2_msb;
4060static int hf_ieee80211_eht_trigger_special_reserved;
4061static int hf_ieee80211_eht_trigger_user_info;
4062static int hf_ieee80211_eht_trigger_ru_allocation_region;
4063static int hf_ieee80211_eht_trigger_ru_allocation;
4064static int hf_ieee80211_eht_trigger_ul_fec_coding_type;
4065static int hf_ieee80211_eht_trigger_ul_eht_mcs;
4066static int hf_ieee80211_eht_trigger_ru_starting_spatial_stream;
4067static int hf_ieee80211_eht_trigger_ru_number_spatial_streams;
4068static int hf_ieee80211_eht_trigger_ul_target_recv_power;
4069static int hf_ieee80211_eht_trigger_ps160;
4070static int hf_ieee80211_eht_trigger_user_info_reserved;
4071static int hf_ieee80211_uhr_trigger_common_info;
4072static int hf_ieee80211_uhr_trigger_type;
4073static int hf_ieee80211_uhr_trigger_ul_length;
4074static int hf_ieee80211_uhr_trigger_more_tf;
4075static int hf_ieee80211_uhr_trigger_cs_required;
4076static int hf_ieee80211_uhr_trigger_ul_bw;
4077static int hf_ieee80211_uhr_trigger_gi_and_he_uhr_ltf_type;
4078static int hf_ieee80211_uhr_trigger_num_he_uhr_ltf_syms_etc;
4079static int hf_ieee80211_uhr_trigger_reserved2;
4080static int hf_ieee80211_uhr_trigger_ldpc_extra_sym_seg;
4081static int hf_ieee80211_uhr_trigger_ap_tx_power;
4082static int hf_ieee80211_uhr_trigger_pre_fec_padding_factor;
4083static int hf_ieee80211_uhr_trigger_pe_disambiguity;
4084static int hf_ieee80211_uhr_trigger_ul_spatial_reuse;
4085static int hf_ieee80211_uhr_trigger_reserved3;
4086static int hf_ieee80211_uhr_trigger_he_uhr_p160;
4087static int hf_ieee80211_uhr_trigger_special_user_info_flag;
4088static int hf_ieee80211_uhr_trigger_dru_rru;
4089static int hf_ieee80211_uhr_trigger_ifcs;
4090static int hf_ieee80211_uhr_trigger_uhr_reserved;
4091static int hf_ieee80211_uhr_trigger_reserved4;
4092static int hf_ieee80211_uhr_trigger_reserved;
4093static int hf_ieee80211_uhr_trigger_user_info;
4094static int hf_ieee80211_uhr_trigger_aid12;
4095static int hf_ieee80211_uhr_trigger_ru_allocation_region;
4096static int hf_ieee80211_uhr_trigger_ru_allocation;
4097static int hf_ieee80211_uhr_trigger_ul_fec_coding_type;
4098static int hf_ieee80211_uhr_trigger_ul_uhr_mcs;
4099static int hf_ieee80211_uhr_trigger_2xldpc;
4100static int hf_ieee80211_uhr_trigger_ru_starting_spatial_stream;
4101static int hf_ieee80211_uhr_trigger_ru_number_spatial_streams;
4102static int hf_ieee80211_uhr_trigger_dru_distribution_bw;
4103static int hf_ieee80211_uhr_trigger_dru_reserved;
4104static int hf_ieee80211_uhr_trigger_ul_target_recv_power;
4105static int hf_ieee80211_uhr_trigger_ps160;
4106
4107
4108static int hf_ieee80211_ranging_trigger_subtype1;
4109static int hf_ieee80211_ranging_trigger_reserved1;
4110static int hf_ieee80211_ranging_trigger_token;
4111static int hf_ieee80211_ranging_trigger_subtype2;
4112static int hf_ieee80211_ranging_trigger_reserved2;
4113static int hf_ieee80211_ranging_trigger_sounding_dialog_token;
4114static int hf_ieee80211_he_trigger_ranging_trigger_poll_rpt;
4115static int hf_ieee80211_ranging_pol_rpt_aid12_rsid12;
4116static int hf_ieee80211_ranging_pol_rpt_ru_alloc_region;
4117static int hf_ieee80211_ranging_pol_rpt_ru_alloc;
4118static int hf_ieee80211_ranging_pol_rpt_ul_fec_coding_type;
4119static int hf_ieee80211_ranging_pol_rpt_ulmcs;
4120static int hf_ieee80211_ranging_pol_rpt_uldcm;
4121static int hf_ieee80211_ranging_pol_rpt_starting_spatial_stream;
4122static int hf_ieee80211_ranging_pol_rpt_number_spatial_streams;
4123static int hf_ieee80211_ranging_pol_rpt_ul_target_rssi;
4124static int hf_ieee80211_ranging_pol_rpt_reserved;
4125static int hf_ieee80211_he_trigger_ranging_trigger_sounding;
4126static int hf_ieee80211_ranging_sounding_aid12_rsid12;
4127static int hf_ieee80211_ranging_sounding_reserved1;
4128static int hf_ieee80211_ranging_sounding_i2r_rep;
4129static int hf_ieee80211_ranging_sounding_reserved2;
4130static int hf_ieee80211_ranging_sounding_starting_spatial_stream;
4131static int hf_ieee80211_ranging_sounding_number_spatial_streams;
4132static int hf_ieee80211_ranging_sounding_ul_target_rssi;
4133static int hf_ieee80211_ranging_sounding_reserved3;
4134static int hf_ieee80211_he_trigger_ranging_trigger_sec_sound;
4135static int hf_ieee80211_ranging_sec_sound_aid12_rsid12;
4136static int hf_ieee80211_ranging_sec_sound_reserved1;
4137static int hf_ieee80211_ranging_sec_sound_i2r_rep;
4138static int hf_ieee80211_ranging_sec_sound_reserved2;
4139static int hf_ieee80211_ranging_sec_sound_starting_spatial_stream;
4140static int hf_ieee80211_ranging_sec_sound_number_spatial_streams;
4141static int hf_ieee80211_ranging_sec_sound_ul_target_rssi;
4142static int hf_ieee80211_ranging_sec_sound_reserved3;
4143static int hf_ieee80211_he_trigger_ranging_user_info_sac;
4144static int hf_ieee80211_he_ndp_annc_sta;
4145static int hf_ieee80211_he_ndp_annc_aid11;
4146static int hf_ieee80211_he_ndp_annc_ru_start;
4147static int hf_ieee80211_he_ndp_annc_ru_end;
4148static int hf_ieee80211_he_ndp_annc_feedback_type_and_ng;
4149static int hf_ieee80211_he_ndp_annc_disambiguation;
4150static int hf_ieee80211_he_ndp_annc_codebook_size;
4151static int hf_ieee80211_he_ndp_annc_nc;
4152static int hf_ieee80211_he_ndp_annc_disallowed_bitmap;
4153static int hf_ieee80211_he_ndp_annc_reserved1;
4154static int hf_ieee80211_he_ndp_annc_reserved2;
4155static int hf_ieee80211_he_qtp_control;
4156static int hf_ieee80211_he_qtp_setup_quiet_period_duration;
4157static int hf_ieee80211_he_qtp_setup_srv_specific_identif;
4158static int hf_ieee80211_he_qtp_request_dialog_token;
4159static int hf_ieee80211_he_qtp_request_quiet_period_offset;
4160static int hf_ieee80211_he_qtp_request_quiet_period_duration;
4161static int hf_ieee80211_he_qtp_request_quiet_period_interval;
4162static int hf_ieee80211_he_qtp_request_repetition_count;
4163static int hf_ieee80211_he_qtp_request_srv_specific_identif;
4164static int hf_ieee80211_he_qtp_response_dialog_token;
4165static int hf_ieee80211_he_qtp_response_status_code;
4166static int hf_ieee80211_he_qtp_response_quiet_period_offset;
4167static int hf_ieee80211_he_qtp_response_quiet_period_duration;
4168static int hf_ieee80211_he_qtp_response_quiet_period_interval;
4169static int hf_ieee80211_he_qtp_response_repetition_count;
4170static int hf_ieee80211_he_qtp_response_srv_specific_identif;
4171static int hf_ieee80211_htc_ht_lac;
4172static int hf_ieee80211_htc_lac_trq;
4173static int hf_ieee80211_htc_lac_mai_aseli;
4174static int hf_ieee80211_htc_lac_mai_mrq;
4175static int hf_ieee80211_htc_lac_mai_msi;
4176static int hf_ieee80211_htc_lac_mai_reserved;
4177static int hf_ieee80211_htc_lac_mfsi;
4178static int hf_ieee80211_htc_lac_mfb;
4179static int hf_ieee80211_htc_lac_asel_command;
4180static int hf_ieee80211_htc_lac_asel_data;
4181static int hf_ieee80211_htc_cal_pos;
4182static int hf_ieee80211_htc_cal_seq;
4183static int hf_ieee80211_htc_reserved1;
4184static int hf_ieee80211_htc_csi_steering;
4185static int hf_ieee80211_htc_ndp_announcement;
4186static int hf_ieee80211_htc_reserved2;
4187static int hf_ieee80211_htc_mrq;
4188static int hf_ieee80211_htc_msi;
4189static int hf_ieee80211_htc_msi_stbc_reserved;
4190static int hf_ieee80211_htc_compressed_msi;
4191static int hf_ieee80211_htc_ppdu_stbc_encoded;
4192static int hf_ieee80211_htc_mfsi;
4193static int hf_ieee80211_htc_gid_l;
4194static int hf_ieee80211_htc_mfb;
4195static int hf_ieee80211_htc_num_sts;
4196static int hf_ieee80211_htc_vht_mcs;
4197static int hf_ieee80211_htc_bw;
4198static int hf_ieee80211_htc_s1g_num_sts;
4199static int hf_ieee80211_htc_s1g_vht_mcs;
4200static int hf_ieee80211_htc_s1g_bw;
4201static int hf_ieee80211_htc_snr;
4202static int hf_ieee80211_htc_reserved3;
4203static int hf_ieee80211_htc_gid_h;
4204static int hf_ieee80211_htc_coding_type;
4205static int hf_ieee80211_htc_fb_tx_type;
4206static int hf_ieee80211_htc_unsolicited_mfb;
4207static int hf_ieee80211_htc_ac_constraint;
4208static int hf_ieee80211_htc_rdg_more_ppdu;
4209
4210/* ************************************************************************* */
4211/* Header values for sequence number field */
4212/* ************************************************************************* */
4213static int hf_ieee80211_frag_number;
4214static int hf_ieee80211_seq_number;
4215
4216/* ************************************************************************* */
4217/* Header values for Frame Check field */
4218/* ************************************************************************* */
4219static int hf_ieee80211_fcs;
4220static int hf_ieee80211_fcs_status;
4221
4222/* ************************************************************************* */
4223/* Header values for reassembly */
4224/* ************************************************************************* */
4225static int hf_ieee80211_fragments;
4226static int hf_ieee80211_fragment;
4227static int hf_ieee80211_fragment_overlap;
4228static int hf_ieee80211_fragment_overlap_conflict;
4229static int hf_ieee80211_fragment_multiple_tails;
4230static int hf_ieee80211_fragment_too_long_fragment;
4231static int hf_ieee80211_fragment_error;
4232static int hf_ieee80211_fragment_count;
4233static int hf_ieee80211_reassembled_in;
4234static int hf_ieee80211_reassembled_length;
4235
4236static int proto_wlan_ext;
4237
4238/* ************************************************************************* */
4239/* Fixed fields found in mgt frames */
4240/* ************************************************************************* */
4241static int hf_ieee80211_fixed_parameters; /* Protocol payload for management frames */
4242
4243static int hf_ieee80211_ff_auth_alg; /* Authentication algorithm field */
4244static int hf_ieee80211_ff_auth_seq; /* Authentication transaction sequence */
4245static int hf_ieee80211_ff_current_ap; /* Current AP MAC address */
4246static int hf_ieee80211_ff_listen_ival; /* Listen interval fixed field */
4247static int hf_ieee80211_ff_timestamp; /* 64 bit timestamp */
4248static int hf_ieee80211_ff_beacon_interval; /* 16 bit Beacon interval */
4249static int hf_ieee80211_ff_assoc_id; /* 16 bit AID field */
4250static int hf_ieee80211_ff_reason; /* 16 bit reason code */
4251static int hf_ieee80211_ff_status_code; /* Status code */
4252static int hf_ieee80211_ff_category_code; /* 8 bit Category code */
4253static int hf_ieee80211_ff_action_code; /* 8 bit Action code */
4254static int hf_ieee80211_ff_dialog_token; /* 8 bit Dialog token */
4255static int hf_ieee80211_ff_trigger;
4256static int hf_ieee80211_ff_ftm_tod;
4257static int hf_ieee80211_ff_ftm_toa;
4258static int hf_ieee80211_ff_ftm_tod_err;
4259static int hf_ieee80211_ff_ftm_toa_err;
4260static int hf_ieee80211_ff_followup_dialog_token;
4261static int hf_ieee80211_ff_wme_action_code; /* Management notification action code */
4262static int hf_ieee80211_ff_wme_status_code; /* Management notification setup response status code */
4263static int hf_ieee80211_ff_qos_action_code;
4264static int hf_ieee80211_ff_dls_action_code;
4265static int hf_ieee80211_ff_dst_mac_addr; /* DLS destination MAC address */
4266static int hf_ieee80211_ff_src_mac_addr; /* DLS source MAC address */
4267static int hf_ieee80211_ff_req_ap_addr;
4268static int hf_ieee80211_ff_res_ap_addr;
4269static int hf_ieee80211_ff_check_beacon;
4270static int hf_ieee80211_ff_dls_timeout; /* DLS timeout value */
4271static int hf_ieee80211_ff_ft_action_code; /* 8 bit FT Action code */
4272static int hf_ieee80211_ff_sta_address;
4273static int hf_ieee80211_ff_target_ap_address;
4274static int hf_ieee80211_ff_gas_comeback_delay;
4275static int hf_ieee80211_ff_gas_fragment_id;
4276static int hf_ieee80211_ff_more_gas_fragments;
4277static int hf_ieee80211_ff_query_request_length;
4278static int hf_ieee80211_ff_query_request;
4279static int hf_ieee80211_ff_query_response_length;
4280static int hf_ieee80211_ff_query_response;
4281static int hf_ieee80211_ff_anqp_info_id;
4282static int hf_ieee80211_ff_anqp_info_length;
4283static int hf_ieee80211_ff_anqp_info;
4284static int hf_ieee80211_ff_anqp_query_id;
4285static int hf_ieee80211_ff_anqp_capability;
4286static int hf_ieee80211_ff_anqp_capability_vlen;
4287static int hf_ieee80211_ff_anqp_capability_vendor;
4288static int hf_ieee80211_ff_venue_info_group;
4289static int hf_ieee80211_ff_venue_info_type;
4290static int hf_ieee80211_ff_anqp_venue_length;
4291static int hf_ieee80211_ff_anqp_venue_language;
4292static int hf_ieee80211_ff_anqp_venue_name;
4293static int hf_ieee80211_ff_anqp_nw_auth_type_indicator;
4294static int hf_ieee80211_ff_anqp_nw_auth_type_url_len;
4295static int hf_ieee80211_ff_anqp_nw_auth_type_url;
4296static int hf_ieee80211_ff_anqp_nw_auth_type_ts_indicator;
4297static int hf_ieee80211_ff_anqp_nw_auth_type_ts_url_len;
4298static int hf_ieee80211_ff_anqp_nw_auth_type_ts_url;
4299static int hf_ieee80211_ff_anqp_nw_auth_type_ts_year;
4300static int hf_ieee80211_ff_anqp_nw_auth_type_ts_mon;
4301static int hf_ieee80211_ff_anqp_nw_auth_type_ts_day;
4302static int hf_ieee80211_ff_anqp_nw_auth_type_ts_hr;
4303static int hf_ieee80211_ff_anqp_nw_auth_type_ts_min;
4304static int hf_ieee80211_ff_anqp_nw_auth_type_ts_sec;
4305static int hf_ieee80211_ff_anqp_nw_auth_type_ts_msec;
4306static int hf_ieee80211_ff_anqp_nw_auth_type_ts_rsvd;
4307static int hf_ieee80211_ff_anqp_roaming_consortium_oi_len;
4308static int hf_ieee80211_ff_anqp_roaming_consortium_oi;
4309static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv6;
4310static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv4;
4311static int hf_ieee80211_ff_anqp_nai_realm_count;
4312static int hf_ieee80211_ff_anqp_nai_field_len;
4313static int hf_ieee80211_ff_anqp_nai_realm_encoding;
4314static int hf_ieee80211_ff_anqp_nai_realm_length;
4315static int hf_ieee80211_ff_anqp_nai_realm;
4316static int hf_ieee80211_ff_anqp_nai_realm_eap_count;
4317static int hf_ieee80211_ff_anqp_nai_realm_eap_len;
4318static int hf_ieee80211_ff_anqp_nai_realm_eap_method;
4319static int hf_ieee80211_ff_anqp_nai_realm_auth_param_count;
4320static int hf_ieee80211_ff_anqp_nai_realm_auth_param_id;
4321static int hf_ieee80211_ff_anqp_nai_realm_auth_param_len;
4322static int hf_ieee80211_ff_anqp_nai_realm_auth_param_value;
4323static int hf_ieee80211_3gpp_gc_gud;
4324static int hf_ieee80211_3gpp_gc_udhl;
4325static int hf_ieee80211_3gpp_gc_iei;
4326static int hf_ieee80211_3gpp_gc_num_plmns;
4327static int hf_ieee80211_3gpp_gc_plmn;
4328static int hf_ieee80211_3gpp_gc_plmn_len;
4329static int hf_ieee80211_ff_anqp_domain_name_len;
4330static int hf_ieee80211_ff_anqp_domain_name;
4331static int hf_ieee80211_ff_tdls_action_code;
4332static int hf_ieee80211_ff_target_channel;
4333static int hf_ieee80211_ff_operating_class;
4334static int hf_ieee80211_ff_channel;
4335static int hf_ieee80211_ff_wnm_action_code;
4336static int hf_ieee80211_ff_unprotected_wnm_action_code;
4337static int hf_ieee80211_ff_key_data_length;
4338static int hf_ieee80211_ff_key_data;
4339static int hf_ieee80211_ff_wnm_notification_type;
4340static int hf_ieee80211_ff_wnm_notification_response_status;
4341static int hf_ieee80211_ff_rm_action_code;
4342static int hf_ieee80211_ff_rm_dialog_token;
4343static int hf_ieee80211_ff_rm_repetitions;
4344static int hf_ieee80211_ff_rm_tx_power;
4345static int hf_ieee80211_ff_rm_max_tx_power;
4346static int hf_ieee80211_ff_tpc;
4347static int hf_ieee80211_ff_tpc_element_id;
4348static int hf_ieee80211_ff_tpc_length;
4349static int hf_ieee80211_ff_tpc_tx_power;
4350static int hf_ieee80211_ff_tpc_link_margin;
4351static int hf_ieee80211_ff_rm_rx_antenna_id;
4352static int hf_ieee80211_ff_rm_tx_antenna_id;
4353static int hf_ieee80211_ff_rm_rcpi;
4354static int hf_ieee80211_ff_rm_rsni;
4355static int hf_ieee80211_ff_request_mode_pref_cand;
4356static int hf_ieee80211_ff_request_mode_abridged;
4357static int hf_ieee80211_ff_request_mode_disassoc_imminent;
4358static int hf_ieee80211_ff_request_mode_bss_term_included;
4359static int hf_ieee80211_ff_request_mode_ess_disassoc_imminent;
4360static int hf_ieee80211_ff_request_mode_link_removal_imminent;
4361static int hf_ieee80211_ff_request_mode_reserved;
4362static int hf_ieee80211_ff_disassoc_timer;
4363static int hf_ieee80211_ff_validity_interval;
4364static int hf_ieee80211_ff_url_len;
4365static int hf_ieee80211_ff_url;
4366static int hf_ieee80211_ff_target_bss;
4367static int hf_ieee80211_ff_bss_transition_query_reason;
4368static int hf_ieee80211_ff_bss_transition_status_code;
4369static int hf_ieee80211_ff_bss_termination_delay;
4370static int hf_ieee80211_ff_bss_transition_candidate_list_entries;
4371
4372static int hf_ieee80211_ff_sa_query_action_code;
4373static int hf_ieee80211_ff_transaction_id;
4374
4375static int hf_ieee80211_ff_send_confirm;
4376static int hf_ieee80211_ff_scalar;
4377static int hf_ieee80211_ff_finite_field_element;
4378static int hf_ieee80211_ff_confirm;
4379static int hf_ieee80211_ff_finite_cyclic_group;
4380static int hf_ieee80211_ff_sae_message_type;
4381static int hf_ieee80211_ff_sae_anti_clogging_token;
4382
4383
4384/* Vendor specific */
4385static int hf_ieee80211_ff_marvell_action_type;
4386static int hf_ieee80211_ff_marvell_mesh_mgt_action_code;
4387static int hf_ieee80211_ff_marvell_mesh_mgt_length; /* Mesh Management length */
4388static int hf_ieee80211_ff_marvell_mesh_mgt_mode; /* Mesh Management mode */
4389static int hf_ieee80211_ff_marvell_mesh_mgt_ttl; /* Mesh Management TTL */
4390static int hf_ieee80211_ff_marvell_mesh_mgt_dstcount; /* Mesh Management dst count */
4391static int hf_ieee80211_ff_marvell_mesh_mgt_hopcount; /* Mesh Management hop count */
4392static int hf_ieee80211_ff_marvell_mesh_mgt_rreqid; /* Mesh Management RREQ ID */
4393static int hf_ieee80211_ff_marvell_mesh_mgt_sa; /* Mesh Management src addr */
4394static int hf_ieee80211_ff_marvell_mesh_mgt_ssn; /* Mesh Management src sequence number */
4395static int hf_ieee80211_ff_marvell_mesh_mgt_metric; /* Mesh Management metric */
4396static int hf_ieee80211_ff_marvell_mesh_mgt_flags; /* Mesh Management RREQ flags */
4397static int hf_ieee80211_ff_marvell_mesh_mgt_da; /* Mesh Management dst addr */
4398static int hf_ieee80211_ff_marvell_mesh_mgt_dsn; /* Mesh Management dst sequence number */
4399static int hf_ieee80211_ff_marvell_mesh_mgt_lifetime; /* Mesh Management lifetime */
4400
4401
4402static int hf_ieee80211_ff_ba_action;
4403
4404static int hf_ieee80211_ff_block_ack_params;
4405static int hf_ieee80211_ff_block_ack_params_amsdu_permitted;
4406static int hf_ieee80211_ff_block_ack_params_policy;
4407static int hf_ieee80211_ff_block_ack_params_tid;
4408static int hf_ieee80211_ff_block_ack_params_buffer_size;
4409
4410static int * const ieee80211_ff_block_ack_params_fields[] = {
4411 &hf_ieee80211_ff_block_ack_params_amsdu_permitted,
4412 &hf_ieee80211_ff_block_ack_params_policy,
4413 &hf_ieee80211_ff_block_ack_params_tid,
4414 &hf_ieee80211_ff_block_ack_params_buffer_size,
4415 NULL((void*)0)
4416};
4417
4418static int hf_ieee80211_ff_block_ack_timeout;
4419
4420static int hf_ieee80211_ff_block_ack_ssc;
4421static int hf_ieee80211_ff_block_ack_ssc_fragment;
4422static int hf_ieee80211_ff_block_ack_ssc_sequence;
4423
4424static int * const ieee80211_ff_block_ack_ssc_fields[] = {
4425 &hf_ieee80211_ff_block_ack_ssc_fragment,
4426 &hf_ieee80211_ff_block_ack_ssc_sequence,
4427 NULL((void*)0)
4428};
4429
4430static int hf_ieee80211_ff_delba_param;
4431static int hf_ieee80211_ff_delba_param_reserved;
4432static int hf_ieee80211_ff_delba_param_init;
4433static int hf_ieee80211_ff_delba_param_tid;
4434
4435static int * const ieee80211_ff_delba_param_fields[] = {
4436 &hf_ieee80211_ff_delba_param_reserved,
4437 &hf_ieee80211_ff_delba_param_init,
4438 &hf_ieee80211_ff_delba_param_tid,
4439 NULL((void*)0)
4440};
4441
4442static int hf_ieee80211_ff_max_reg_pwr;
4443static int hf_ieee80211_ff_measurement_pilot_int;
4444static int hf_ieee80211_ff_country_str;
4445static int hf_ieee80211_ff_max_tx_pwr;
4446static int hf_ieee80211_ff_tx_pwr_used;
4447static int hf_ieee80211_ff_transceiver_noise_floor;
4448static int hf_ieee80211_ff_channel_width;
4449
4450static int hf_ieee80211_ff_qos_info_ap;
4451static int hf_ieee80211_ff_qos_info_ap_edca_param_set_counter;
4452static int hf_ieee80211_ff_qos_info_ap_q_ack;
4453static int hf_ieee80211_ff_qos_info_ap_queue_req;
4454static int hf_ieee80211_ff_qos_info_ap_txop_request;
4455static int hf_ieee80211_ff_qos_info_ap_more_data_ack;
4456
4457static int * const ieee80211_ff_qos_info_ap_fields[] = {
4458 &hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
4459 &hf_ieee80211_ff_qos_info_ap_q_ack,
4460 &hf_ieee80211_ff_qos_info_ap_queue_req,
4461 &hf_ieee80211_ff_qos_info_ap_txop_request,
4462 &hf_ieee80211_ff_qos_info_ap_more_data_ack,
4463 NULL((void*)0)
4464};
4465
4466static int hf_ieee80211_ff_qos_info_sta;
4467static int hf_ieee80211_ff_qos_info_sta_ac_vo;
4468static int hf_ieee80211_ff_qos_info_sta_ac_vi;
4469static int hf_ieee80211_ff_qos_info_sta_ac_bk;
4470static int hf_ieee80211_ff_qos_info_sta_ac_be;
4471static int hf_ieee80211_ff_qos_info_sta_q_ack;
4472static int hf_ieee80211_ff_qos_info_sta_max_sp_length;
4473static int hf_ieee80211_ff_qos_info_sta_more_data_ack;
4474
4475static int * const ieee80211_ff_qos_info_sta_fields[] = {
4476 &hf_ieee80211_ff_qos_info_sta_ac_vo,
4477 &hf_ieee80211_ff_qos_info_sta_ac_vi,
4478 &hf_ieee80211_ff_qos_info_sta_ac_bk,
4479 &hf_ieee80211_ff_qos_info_sta_ac_be,
4480 &hf_ieee80211_ff_qos_info_sta_q_ack,
4481 &hf_ieee80211_ff_qos_info_sta_max_sp_length,
4482 &hf_ieee80211_ff_qos_info_sta_more_data_ack,
4483 NULL((void*)0)
4484};
4485
4486static int hf_ieee80211_ff_sm_pwr_save;
4487static int hf_ieee80211_ff_sm_pwr_save_enabled;
4488static int hf_ieee80211_ff_sm_pwr_save_sm_mode;
4489static int hf_ieee80211_ff_sm_pwr_save_reserved;
4490
4491static int * const ieee80211_ff_sw_pwr_save_fields[] = {
4492 &hf_ieee80211_ff_sm_pwr_save_enabled,
4493 &hf_ieee80211_ff_sm_pwr_save_sm_mode,
4494 &hf_ieee80211_ff_sm_pwr_save_reserved,
4495 NULL((void*)0)
4496};
4497
4498static int hf_ieee80211_ff_pco_phase_cntrl;
4499
4500static int hf_ieee80211_ff_psmp_param_set;
4501static int hf_ieee80211_ff_psmp_param_set_n_sta;
4502static int hf_ieee80211_ff_psmp_param_set_more_psmp;
4503static int hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration;
4504
4505static int * const ieee80211_ff_psmp_param_set_fields[] = {
4506 &hf_ieee80211_ff_psmp_param_set_n_sta,
4507 &hf_ieee80211_ff_psmp_param_set_more_psmp,
4508 &hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
4509 NULL((void*)0)
4510};
4511
4512static int hf_ieee80211_ff_mimo_cntrl;
4513static int hf_ieee80211_ff_mimo_cntrl_nc_index;
4514static int hf_ieee80211_ff_mimo_cntrl_nr_index;
4515static int hf_ieee80211_ff_mimo_cntrl_channel_width;
4516static int hf_ieee80211_ff_mimo_cntrl_grouping;
4517static int hf_ieee80211_ff_mimo_cntrl_coefficient_size;
4518static int hf_ieee80211_ff_mimo_cntrl_codebook_info;
4519static int hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment;
4520static int hf_ieee80211_ff_mimo_cntrl_reserved;
4521static int hf_ieee80211_ff_mimo_cntrl_sounding_timestamp;
4522
4523static int hf_ieee80211_ff_ftm_param_delim1;
4524static int hf_ieee80211_ff_ftm_param_status_indication;
4525static int hf_ieee80211_ff_ftm_param_value;
4526static int hf_ieee80211_ff_ftm_param_reserved1;
4527static int hf_ieee80211_ff_ftm_param_burst_exponent;
4528static int hf_ieee80211_ff_ftm_param_burst_duration;
4529
4530static int hf_ieee80211_ff_ftm_param_delim2;
4531static int hf_ieee80211_ff_ftm_param_min_delta_ftm;
4532static int hf_ieee80211_ff_ftm_param_partial_tsf_timer;
4533static int hf_ieee80211_ff_ftm_param_partial_tsf_no_pref;
4534static int hf_ieee80211_ff_ftm_param_asap_capable;
4535static int hf_ieee80211_ff_ftm_param_asap;
4536static int hf_ieee80211_ff_ftm_param_ftm_per_burst;
4537
4538static int hf_ieee80211_ff_ftm_param_delim3;
4539static int hf_ieee80211_ff_ftm_param_reserved2;
4540static int hf_ieee80211_ff_ftm_param_format_and_bw;
4541static int hf_ieee80211_ff_ftm_param_burst_period;
4542
4543/* az D3.0 introduces a 1-octet TOD Error field; use a different name to avoid
4544 * conflicting with the existing hf_ieee80211_ff_ftm_tod_err (which is 2
4545 * octets).
4546 */
4547static int hf_ieee80211_ff_ftm_tod_err1;
4548static int hf_ieee80211_ff_ftm_max_tod_error_exponent;
4549static int hf_ieee80211_ff_ftm_tod_err_reserved;
4550static int hf_ieee80211_ff_ftm_tod_not_continuous;
4551
4552/* Same situation with ...toa_err1 as ...tod_err1 */
4553static int hf_ieee80211_ff_ftm_toa_err1;
4554static int hf_ieee80211_ff_ftm_max_toa_error_exponent;
4555static int hf_ieee80211_ff_ftm_toa_err_reserved;
4556static int hf_ieee80211_ff_ftm_invalid_measurement;
4557static int hf_ieee80211_ff_ftm_toa_type;
4558
4559static int hf_ieee80211_ff_ftm_cfo;
4560static int hf_ieee80211_ff_ftm_r2i_ndp_tx_power;
4561static int hf_ieee80211_ff_ftm_i2r_ndp_target_rssi;
4562
4563/* az: FTM Ranging Parameters Element */
4564static int hf_ieee80211_tag_ranging_parameters;
4565static int hf_ieee80211_tag_ranging_subelt_tag;
4566static int hf_ieee80211_tag_ranging_subelt_len;
4567static int hf_ieee80211_tag_ranging_status_indication;
4568static int hf_ieee80211_tag_ranging_value;
4569static int hf_ieee80211_tag_ranging_i2r_lmr_feedback;
4570static int hf_ieee80211_tag_ranging_secure_ltf_required;
4571static int hf_ieee80211_tag_ranging_secure_ltf_support;
4572static int hf_ieee80211_tag_ranging_ranging_priority;
4573static int hf_ieee80211_tag_ranging_r2i_toa_type;
4574static int hf_ieee80211_tag_ranging_i2r_toa_type;
4575static int hf_ieee80211_tag_ranging_r2i_aoa_requested;
4576static int hf_ieee80211_tag_ranging_i2r_aoa_requested;
4577static int hf_ieee80211_tag_ranging_format_and_bandwidth;
4578static int hf_ieee80211_tag_ranging_immediate_r2i_feedback;
4579static int hf_ieee80211_tag_ranging_immediate_i2r_feedback;
4580static int hf_ieee80211_tag_ranging_max_i2r_repetition;
4581static int hf_ieee80211_tag_ranging_max_r2i_repetition;
4582static int hf_ieee80211_tag_ranging_reserved1;
4583static int hf_ieee80211_tag_ranging_reserved2;
4584static int hf_ieee80211_tag_ranging_max_r2i_sts_le_80_mhz;
4585static int hf_ieee80211_tag_ranging_max_r2i_sts_gt_80_mhz;
4586static int hf_ieee80211_tag_ranging_max_r2i_ltf_total;
4587static int hf_ieee80211_tag_ranging_max_i2r_ltf_total;
4588static int hf_ieee80211_tag_ranging_max_i2r_sts_le_80_mhz;
4589static int hf_ieee80211_tag_ranging_max_i2r_sts_gt_80_mhz;
4590static int hf_ieee80211_tag_ranging_bss_color_info;
4591
4592/* az: FTM Ranging Parameters NTB-specific subelement */
4593static int hf_ieee80211_tag_ranging_ntb;
4594static int hf_ieee80211_tag_ranging_ntb_reserved1;
4595static int hf_ieee80211_tag_ranging_ntb_min_time_msmts;
4596static int hf_ieee80211_tag_ranging_ntb_max_time_msmts;
4597static int hf_ieee80211_tag_ranging_ntb_r2i_tx_power;
4598static int hf_ieee80211_tag_ranging_ntb_i2r_tx_power;
4599static int hf_ieee80211_tag_ranging_ntb_reserved2;
4600
4601/* az: FTM Ranging Specific TB subelement */
4602static int hf_ieee80211_tag_ranging_aid_rsid;
4603static int hf_ieee80211_tag_ranging_device_class;
4604static int hf_ieee80211_tag_ranging_full_bw_ul_mu_mimo;
4605static int hf_ieee80211_tag_ranging_trigger_frame_paddur;
4606static int hf_ieee80211_tag_ranging_max_sess_exp;
4607static int hf_ieee80211_tag_ranging_passive_tb_ranging;
4608static int hf_ieee80211_tag_ranging_tb_specific_reserved;
4609
4610/* az: FTM Ranging Secure HE-LTF subelement */
4611static int hf_ieee80211_tag_ranging_secure_he_ltf;
4612static int hf_ieee80211_tag_ranging_secure_he_ltf_version;
4613static int hf_ieee80211_tag_ranging_secure_he_ltf_req;
4614static int hf_ieee80211_tag_ranging_secure_he_ltf_r2i_tx_window;
4615static int hf_ieee80211_tag_ranging_secure_he_ltf_i2r_tx_window;
4616static int hf_ieee80211_tag_ranging_secure_he_ltf_reserved;
4617
4618/* az: PASN subelements etc. */
4619static int hf_ieee80211_tag_pasn_parameters_control;
4620static int hf_ieee80211_tag_pasn_params_comeback_info_present;
4621static int hf_ieee80211_tag_pasn_params_group_and_key_present;
4622static int hf_ieee80211_tag_pasn_parameters_reserved;
4623static int hf_ieee80211_tag_pasn_parameters_wrapped_fmt;
4624static int hf_ieee80211_tag_pasn_comeback_after;
4625static int hf_ieee80211_tag_pasn_cookie_length;
4626static int hf_ieee80211_tag_pasn_cookie;
4627static int hf_ieee80211_tag_pasn_finite_cyclic_group_id;
4628static int hf_ieee80211_tag_pasn_ephemeral_public_key_len;
4629static int hf_ieee80211_tag_pasn_ephemeral_public_key;
4630static int hf_ieee80211_pasn_auth1_frame_len;
4631static int hf_ieee80211_pasn_auth2_frame_len;
4632
4633/* az: Secure LTF Parameters */
4634static int hf_ieee80211_tag_secure_ltf_params_counter;
4635static int hf_ieee80211_tag_secure_ltf_generation_sac;
4636static int hf_ieee80211_tag_secure_ltf_management_sac;
4637static int hf_ieee80211_tag_secure_ltf_result_ltf_ofs;
4638
4639/* az: ista and rsta availability details */
4640static int hf_ieee80211_ftm_ista_availability_count;
4641static int hf_ieee80211_ftm_ista_availability_reserved;
4642static int hf_ieee80211_ftm_ista_avail_bits;
4643static int hf_ieee80211_ftm_ista_avail_pad;
4644
4645static int hf_ieee80211_ftm_rsta_header;
4646static int hf_ieee80211_ftm_rsta_count;
4647static int hf_ieee80211_ftm_rsta_avail_window_bcast_fmt;
4648static int hf_ieee80211_ftm_rsta_partial_tsf_timer1;
4649static int hf_ieee80211_ftm_rsta_duration1;
4650static int hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved1;
4651static int hf_ieee80211_ftm_rsta_periodicity1;
4652static int hf_ieee80211_ftm_rsta_partial_tsf_timer;
4653static int hf_ieee80211_ftm_rsta_duration;
4654static int hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved;
4655static int hf_ieee80211_ftm_rsta_periodicity;
4656static int hf_ieee80211_ftm_rsta_format_and_bandwidth;
4657static int hf_ieee80211_ftm_rsta_reserved;
4658static int hf_ieee80211_ftm_rsta_avail_subfield_short;
4659static int hf_ieee80211_ftm_rsta_avail_subfield_long;
4660
4661/* be: Multi-link elements and other fields */
4662static int hf_ieee80211_eht_multi_link_control;
4663static int hf_ieee80211_eht_multi_link_control_type;
4664static int hf_ieee80211_eht_multi_link_control_reserved;
4665static int hf_ieee80211_eht_multi_link_control_link_id_present;
4666static int hf_ieee80211_eht_multi_link_control_bss_parms_ch_count;
4667static int hf_ieee80211_eht_multi_link_control_medium_sync_delay;
4668static int hf_ieee80211_eht_multi_link_control_eml_capa;
4669static int hf_ieee80211_eht_multi_link_control_mld_capa;
4670static int hf_ieee80211_eht_multi_link_control_basic_mld_id_present;
4671static int hf_ieee80211_eht_multi_link_control_ext_mld_capa;
4672static int hf_ieee80211_eht_multi_link_control_bitmap_reserved;
4673static int hf_ieee80211_eht_multi_link_control_probe_mld_id_present;
4674static int hf_ieee80211_eht_multi_link_control_probe_mld_mac_addr_present;
4675static int hf_ieee80211_eht_multi_link_control_probe_reserved;
4676static int hf_ieee80211_eht_multi_link_control_reconfig_mld_mac;
4677static int hf_ieee80211_eht_multi_link_control_reconfig_eml_capa;
4678static int hf_ieee80211_eht_multi_link_control_reconfig_mld_capa_oper;
4679static int hf_ieee80211_eht_multi_link_control_reconfig_ext_mld_capa_oper;
4680static int hf_ieee80211_eht_multi_link_control_reconfig_reserved;
4681static int hf_ieee80211_eht_multi_link_control_tdls_reserved;
4682static int hf_ieee80211_eht_multi_link_control_prio_access_reserved;
4683static int hf_ieee80211_eht_common_field_length;
4684static int hf_ieee80211_eht_common_field_mld_mac;
4685static int hf_ieee80211_eht_common_field_link_id_field;
4686static int hf_ieee80211_eht_common_info_link_id;
4687static int hf_ieee80211_eht_common_info_link_id_reserved;
4688static int hf_ieee80211_eht_common_field_bss_param_change_count;
4689static int hf_ieee80211_eht_common_field_medium_sync_field;
4690static int hf_ieee80211_eht_common_info_medium_sync_duration;
4691static int hf_ieee80211_eht_common_info_medium_sync_threshold;
4692static int hf_ieee80211_eht_common_info_medium_sync_max_txops;
4693static int hf_ieee80211_eht_common_field_eml_capabilities;
4694static int hf_ieee80211_eht_common_info_eml_capa_emlsr_support;
4695static int hf_ieee80211_eht_common_info_eml_capa_emlsr_padding_delay;
4696static int hf_ieee80211_eht_common_info_eml_capa_emlsr_transition_delay;
4697static int hf_ieee80211_eht_common_info_eml_capa_emlmr_support;
4698static int hf_ieee80211_eht_common_info_eml_capa_emlmr_delay;
4699static int hf_ieee80211_eht_common_info_eml_capa_transition_timeout;
4700static int hf_ieee80211_eht_common_info_eml_capa_reserved;
4701static int hf_ieee80211_eht_common_field_mld_capabilities;
4702static int hf_ieee80211_eht_common_info_mld_max_simul_links;
4703static int hf_ieee80211_eht_common_info_mld_srs_support;
4704static int hf_ieee80211_eht_common_info_mld_tid_to_link_map_neg;
4705static int hf_ieee80211_eht_common_info_mld_freq_sep_for_str;
4706static int hf_ieee80211_eht_common_info_mld_aar_support;
4707static int hf_ieee80211_eht_common_info_mld_link_reconf_op_support;
4708static int hf_ieee80211_eht_common_info_mld_aligned_twt_support;
4709static int hf_ieee80211_eht_common_info_mld_reserved;
4710static int hf_ieee80211_eht_common_field_mld_id;
4711static int hf_ieee80211_eht_common_field_ap_mld_mac;
4712static int hf_ieee80211_eht_common_field_ext_mld_capabilities;
4713static int hf_ieee80211_eht_common_info_ext_mld_op_update_support;
4714static int hf_ieee80211_eht_common_info_ext_mld_max_simul_links;
4715static int hf_ieee80211_eht_common_info_ext_mld_nstr_status_support;
4716static int hf_ieee80211_eht_common_info_ext_mld_emlsr_enable_one_link_support;
4717static int hf_ieee80211_eht_common_info_ext_mld_btm_mld_recom_aps_support;
4718static int hf_ieee80211_eht_common_info_ext_mld_reserved;
4719static int hf_ieee80211_eht_multi_link_subelt_tag;
4720static int hf_ieee80211_eht_multi_link_subelt_len;
4721static int hf_ieee80211_eht_multi_link_type_0_link_count;
4722static int hf_ieee80211_eht_multi_link_type_1_link_count;
4723static int hf_ieee80211_eht_multi_link_type_2_link_count;
4724static int hf_ieee80211_eht_multi_link_type_3_link_count;
4725static int hf_ieee80211_eht_multi_link_type_4_link_count;
4726static int hf_ieee80211_eht_multi_link_link_id_list;
4727static int hf_ieee80211_eht_profile_sta_control;
4728static int hf_ieee80211_eht_profile_link_id;
4729static int hf_ieee80211_eht_profile_complete_profile;
4730static int hf_ieee80211_eht_profile_mac_address_present;
4731static int hf_ieee80211_eht_profile_beacon_interval_present;
4732static int hf_ieee80211_eht_profile_tsf_offset_present;
4733static int hf_ieee80211_eht_profile_dtim_info_present;
4734static int hf_ieee80211_eht_profile_nstr_link_pair_present;
4735static int hf_ieee80211_eht_profile_nstr_bitmap_size;
4736static int hf_ieee80211_eht_profile_bss_params_change_count_present;
4737static int hf_ieee80211_eht_profile_reserved;
4738static int hf_ieee80211_eht_profile_probe_reserved;
4739static int hf_ieee80211_eht_profile_removal_timer_present;
4740static int hf_ieee80211_eht_profile_reconfig_operation_type;
4741static int hf_ieee80211_eht_profile_operation_para_present;
4742static int hf_ieee80211_eht_profile_reconfig_nstr_bitmap_size;
4743static int hf_ieee80211_eht_profile_reconfig_nstr_bitmap_present;
4744static int hf_ieee80211_eht_profile_reconfig_reserved;
4745static int hf_ieee80211_eht_profile_prio_acc_reserved;
4746static int hf_ieee80211_eht_sta_profile_info_len;
4747static int hf_ieee80211_eht_sta_profile_info_mac;
4748static int hf_ieee80211_eht_sta_profile_info_beacon;
4749static int hf_ieee80211_eht_sta_profile_info_tsf_offset;
4750static int hf_ieee80211_eht_sta_profile_info_dtim_count;
4751static int hf_ieee80211_eht_sta_profile_info_dtim_period;
4752static int hf_ieee80211_eht_sta_profile_info_bitmap;
4753static int hf_ieee80211_eht_sta_profile_bss_params_change_count;
4754static int hf_ieee80211_eht_sta_profile_removal_timer;
4755static int hf_ieee80211_eht_sta_profile_presence_indi;
4756static int hf_ieee80211_eht_sta_profile_presence_indi_max_mpdu_length_present;
4757static int hf_ieee80211_eht_sta_profile_presence_indi_max_amsdu_length_present;
4758static int hf_ieee80211_eht_sta_profile_presence_indi_reserved;
4759static int hf_ieee80211_eht_sta_profile_operation_para_info;
4760static int hf_ieee80211_eht_sta_profile_operation_para_info_max_mpdu_length;
4761static int hf_ieee80211_eht_sta_profile_operation_para_info_amsdu_length;
4762static int hf_ieee80211_eht_sta_profile_operation_para_info_pad;
4763static int hf_ieee80211_eht_operation_parameters;
4764static int hf_ieee80211_eht_basic_eht_mcs_nss_set;
4765static int hf_ieee80211_eht_operation_control_chan_width;
4766static int hf_ieee80211_eht_operation_control_reserved;
4767static int hf_ieee80211_eht_operation_info_present;
4768static int hf_ieee80211_eht_operation_subchannel_bitmap_present;
4769static int hf_ieee80211_eht_operation_default_pe_duration;
4770static int hf_ieee80211_eht_operation_group_addressed_bu_indication_limit;
4771static int hf_ieee80211_eht_operation_group_addressed_bu_indication_exp;
4772static int hf_ieee80211_eht_operation_mcs15_disable;
4773static int hf_ieee80211_eht_operation_reserved;
4774static int hf_ieee80211_eht_operation_control;
4775static int hf_ieee80211_eht_operation_ccfs0;
4776static int hf_ieee80211_eht_operation_ccfs1;
4777static int hf_ieee80211_eht_operation_disabled_bitmap;
4778static int hf_ieee80211_eht_mac_capabilities;
4779static int hf_ieee80211_eht_mac_capa_epcs_prio_access_support;
4780static int hf_ieee80211_eht_mac_capa_eht_om_control_support;
4781static int hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_1_support;
4782static int hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_2_support;
4783static int hf_ieee80211_eht_mac_capa_restricted_twt_support;
4784static int hf_ieee80211_eht_mac_capa_scs_traffic_description_support;
4785static int hf_ieee80211_eht_mac_capa_maximum_mpdu_length;
4786static int hf_ieee80211_eht_mac_capa_maximum_ampdu_length_exp_ext;
4787static int hf_ieee80211_eht_mac_capa_eht_trs_support;
4788static int hf_ieee80211_eht_mac_capa_txop_return_support_txop_sha_mode;
4789static int hf_ieee80211_eht_mac_capa_two_bqrs_support;
4790static int hf_ieee80211_eht_mac_capa_eht_link_adaptation_support;
4791static int hf_ieee80211_eht_mac_capa_unsolicited_epcs_update;
4792static int hf_ieee80211_eht_mac_capa_reserved;
4793static int hf_ieee80211_eht_phy_bits_0_15;
4794static int hf_ieee80211_eht_phy_bits_0_15_reserved;
4795static int hf_ieee80211_eht_phy_bits_0_15_320_mhz_in_6ghz;
4796static int hf_ieee80211_eht_phy_bits_0_15_242_tone_ru_bw_wider_20mhz;
4797static int hf_ieee80211_eht_phy_bits_0_15_ndp_and_3_2_us_gi;
4798static int hf_ieee80211_eht_phy_bits_0_15_partial_bw_ul_mu_mimo;
4799static int hf_ieee80211_eht_phy_bits_0_15_su_beamformer;
4800static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee;
4801static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee_le_80mhz;
4802static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_160mhz;
4803static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_320mhz;
4804static int hf_ieee80211_eht_phy_bits_16_31;
4805static int hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_lt_80mhz;
4806static int hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_160mhz;
4807static int hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_320mhz;
4808static int hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_su_feedback;
4809static int hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_mu_feedback;
4810static int hf_ieee80211_eht_phy_bits_16_31_codebook_size_4_2_su_fbck;
4811static int hf_ieee80211_eht_phy_bits_16_31_codebook_size_7_5_mu_fbck;
4812static int hf_ieee80211_eht_phy_bits_16_31_triggered_su_beemform_fbck;
4813static int hf_ieee80211_eht_phy_bits_16_31_triggered_mu_beemform_p_bw_fbck;
4814static int hf_ieee80211_eht_phy_bits_16_31_triggered_cqi_feedback;
4815static int hf_ieee80211_eht_phy_bits_32_39;
4816static int hf_ieee80211_eht_phy_bits_32_39_partial_bw_dl_mu_mimo;
4817static int hf_ieee80211_eht_phy_bits_32_39_eht_psr_based_sr_support;
4818static int hf_ieee80211_eht_phy_bits_32_39_power_boost_factor_support;
4819static int hf_ieee80211_eht_phy_bits_32_39_eht_mu_ppdu_w_4x_eht_ltf_08_gi;
4820static int hf_ieee80211_eht_phy_bits_32_39_max_nc;
4821static int hf_ieee80211_eht_phy_bits_40_63;
4822static int hf_ieee80211_eht_phy_bits_40_63_non_triggered_cqi_fbck;
4823static int hf_ieee80211_eht_phy_bits_40_63_tx_1024_4096_qam_lt_242_ru_support;
4824static int hf_ieee80211_eht_phy_bits_40_63_rx_1024_4096_qam_lt_242_ru_support;
4825static int hf_ieee80211_eht_phy_bits_40_63_ppe_thresholds_present;
4826static int hf_ieee80211_eht_phy_bits_40_63_common_nominal_packet_padding;
4827static int hf_ieee80211_eht_phy_bits_40_63_max_num_supported_eht_ltfs;
4828static int hf_ieee80211_eht_phy_bits_40_63_support_of_mcx_15;
4829static int hf_ieee80211_eht_phy_bits_40_63_support_of_eht_dup_in_6_ghz;
4830static int hf_ieee80211_eht_phy_bits_40_63_support_20_mhz_sta_ndp_wide_bw;
4831static int hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_le_80_mhz;
4832static int hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_160_mhz;
4833static int hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_320_mhz;
4834static int hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_le_80_mhz;
4835static int hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_160_mhz;
4836static int hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_320_mhz;
4837static int hf_ieee80211_eht_phy_bits_40_63_tb_sounding_feedback_rate_limit;
4838static int hf_ieee80211_eht_phy_bits_64_71;
4839static int hf_ieee80211_eht_phy_bits_64_71_rx_1024_qam_wid_bw_dl_ofdma_sup;
4840static int hf_ieee80211_eht_phy_bits_64_71_rx_4096_qam_wid_bw_dl_ofdma_sup;
4841static int hf_ieee80211_eht_phy_bits_64_71_20m_limit_capa_support;
4842static int hf_ieee80211_eht_phy_bits_64_71_20m_mu_beam_feedback_dl_mu_mimo;
4843static int hf_ieee80211_eht_phy_bits_64_71_20m_mru_support;
4844static int hf_ieee80211_eht_phy_bits_64_71_reserved;
4845static int hf_ieee80211_eht_supported_mcs_nss_bytes;
4846static int hf_ieee80211_eht_mcs_and_nss_non_ap;
4847static int hf_ieee80211_eht_rx_max_nss_20mhz_0_7;
4848static int hf_ieee80211_eht_tx_max_nss_20mhz_0_7;
4849static int hf_ieee80211_eht_rx_max_nss_20mhz_8_9;
4850static int hf_ieee80211_eht_tx_max_nss_20mhz_8_9;
4851static int hf_ieee80211_eht_rx_max_nss_20mhz_10_11;
4852static int hf_ieee80211_eht_tx_max_nss_20mhz_10_11;
4853static int hf_ieee80211_eht_rx_max_nss_20mhz_12_13;
4854static int hf_ieee80211_eht_tx_max_nss_20mhz_12_13;
4855static int hf_ieee80211_eht_le_80_rx_max_nss_0_9;
4856static int hf_ieee80211_eht_le_80_tx_max_nss_0_9;
4857static int hf_ieee80211_eht_le_80_rx_max_nss_10_11;
4858static int hf_ieee80211_eht_le_80_tx_max_nss_10_11;
4859static int hf_ieee80211_eht_le_80_rx_max_nss_12_13;
4860static int hf_ieee80211_eht_le_80_tx_max_nss_12_13;
4861static int hf_ieee80211_eht_160_rx_max_nss_0_9;
4862static int hf_ieee80211_eht_160_tx_max_nss_0_9;
4863static int hf_ieee80211_eht_160_rx_max_nss_10_11;
4864static int hf_ieee80211_eht_160_tx_max_nss_10_11;
4865static int hf_ieee80211_eht_160_rx_max_nss_12_13;
4866static int hf_ieee80211_eht_160_tx_max_nss_12_13;
4867static int hf_ieee80211_eht_320_rx_max_nss_0_9;
4868static int hf_ieee80211_eht_320_tx_max_nss_0_9;
4869static int hf_ieee80211_eht_320_rx_max_nss_10_11;
4870static int hf_ieee80211_eht_320_tx_max_nss_10_11;
4871static int hf_ieee80211_eht_320_rx_max_nss_12_13;
4872static int hf_ieee80211_eht_320_tx_max_nss_12_13;
4873static int hf_ieee80211_eht_mcs_and_nss_le_80mhz;
4874static int hf_ieee80211_eht_mcs_and_nss_eq_160mhz;
4875static int hf_ieee80211_eht_mcs_and_nss_eq_320mhz;
4876static int hf_ieee80211_eht_ppe_thresholds;
4877static int hf_ieee80211_eht_ttl_mapping_control;
4878static int hf_ieee80211_eht_ttl_mapping_direction;
4879static int hf_ieee80211_eht_ttl_default_link_mapping;
4880static int hf_ieee80211_eht_ttl_mapping_switch_time_pres;
4881static int hf_ieee80211_eht_ttl_expected_dura_pres;
4882static int hf_ieee80211_eht_ttl_link_mapping_size;
4883static int hf_ieee80211_eht_ttl_mapping_reserved;
4884static int hf_ieee80211_eht_ttl_mapping_presence;
4885static int hf_ieee80211_eht_ttl_mapping_switch_time;
4886static int hf_ieee80211_eht_ttl_mapping_expected_duration;
4887static int hf_ieee80211_eht_ttl_mapping_tid_0_link_mapping;
4888static int hf_ieee80211_eht_ttl_mapping_tid_1_link_mapping;
4889static int hf_ieee80211_eht_ttl_mapping_tid_2_link_mapping;
4890static int hf_ieee80211_eht_ttl_mapping_tid_3_link_mapping;
4891static int hf_ieee80211_eht_ttl_mapping_tid_4_link_mapping;
4892static int hf_ieee80211_eht_ttl_mapping_tid_5_link_mapping;
4893static int hf_ieee80211_eht_ttl_mapping_tid_6_link_mapping;
4894static int hf_ieee80211_eht_ttl_mapping_tid_7_link_mapping;
4895static int hf_ieee80211_eht_multi_link_traffic_control;
4896static int hf_ieee80211_eht_multi_link_tc_bitmap_size;
4897static int hf_ieee80211_eht_multi_link_tc_aid_offset;
4898static int hf_ieee80211_eht_multi_link_tc_reserved;
4899static int hf_ieee80211_eht_multi_link_traffic_indication;
4900static int hf_ieee80211_eht_qos_chars_dirn;
4901static int hf_ieee80211_eht_qos_chars_tid;
4902static int hf_ieee80211_eht_qos_chars_user_prio;
4903static int hf_ieee80211_eht_qos_chars_bitmap;
4904static int hf_ieee80211_eht_qos_chars_linkid;
4905static int hf_ieee80211_eht_qos_chars_resrvd;
4906static int hf_ieee80211_eht_qos_chars_min_svc_interval;
4907static int hf_ieee80211_eht_qos_chars_max_svc_interval;
4908static int hf_ieee80211_eht_qos_chars_min_data_rate;
4909static int hf_ieee80211_eht_qos_chars_delay_bound;
4910static int hf_ieee80211_eht_qos_chars_max_msdu_size;
4911static int hf_ieee80211_eht_qos_chars_service_start_time;
4912static int hf_ieee80211_eht_qos_chars_service_start_time_linkid;
4913static int hf_ieee80211_eht_qos_chars_mean_data_rate;
4914static int hf_ieee80211_eht_qos_chars_burst_size;
4915static int hf_ieee80211_eht_qos_chars_msdu_lifetime;
4916static int hf_ieee80211_eht_qos_chars_msdu_delivery_ratio;
4917static int hf_ieee80211_eht_qos_chars_msdu_count_exponent;
4918static int hf_ieee80211_eht_qos_chars_medium_time;
4919static int hf_ieee80211_eht_link_id_bitmap;
4920static int hf_ieee80211_eht_aid_bitmap_length;
4921static int hf_ieee80211_eht_aid_bitmap_control;
4922static int hf_ieee80211_eht_aid_bitmap_control_reserved;
4923static int hf_ieee80211_eht_aid_bitmap_control_offset;
4924static int hf_ieee80211_eht_aid_bitmap_partial_aid_bitmap;
4925static int hf_ieee80211_eht_aid_bitmap_aid;
4926static int hf_ieee80211_eht_bw_indi_param;
4927static int hf_ieee80211_eht_bw_indi_param_reserved;
4928static int hf_ieee80211_eht_bw_indi_param_disabled_subchan_bitmap;
4929static int hf_ieee80211_eht_bw_indi_param_reserved1;
4930static int hf_ieee80211_eht_bw_indi_diabled_bitmap;
4931static int hf_ieee80211_eht_mimo_ctrl_field;
4932static int hf_ieee80211_eht_mimo_ctrl_nc_index;
4933static int hf_ieee80211_eht_mimo_ctrl_nr_index;
4934static int hf_ieee80211_eht_mimo_ctrl_bw;
4935static int hf_ieee80211_eht_mimo_ctrl_grouping;
4936static int hf_ieee80211_eht_mimo_ctrl_feedback_type;
4937static int hf_ieee80211_eht_mimo_ctrl_reserved1;
4938static int hf_ieee80211_eht_mimo_ctrl_remaining_feedback_segments;
4939static int hf_ieee80211_eht_mimo_ctrl_first_feedback_segment;
4940static int hf_ieee80211_eht_mimo_ctrl_partial_bw_info;
4941static int hf_ieee80211_eht_mimo_ctrl_sounding_dialog_token_number;
4942static int hf_ieee80211_eht_mimo_ctrl_codebook_info;
4943static int hf_ieee80211_eht_mimo_ctrl_reserved2;
4944
4945/* be: Compressed beamforming report etc */
4946static int hf_ieee80211_eht_compressed_beamforming_report_snr;
4947static int hf_ieee80211_eht_compressed_beamform_scidx;
4948
4949/* be: MU Exclusive beamforming report */
4950static int hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr;
4951
4952static int hf_ieee80211_eht_eml_control_field;
4953static int hf_ieee80211_eht_eml_control_emlsr_mode;
4954static int hf_ieee80211_eht_eml_control_emlmr_mode;
4955static int hf_ieee80211_eht_eml_control_emlsr_para_update_control;
4956static int hf_ieee80211_eht_eml_control_device_coexist_activities;
4957static int hf_ieee80211_eht_eml_control_reserved;
4958static int hf_ieee80211_eht_eml_control_link_bitmap;
4959static int hf_ieee80211_eht_eml_control_link_enable_id;
4960static int hf_ieee80211_eht_eml_control_mcs_map_count;
4961static int hf_ieee80211_eht_eml_control_mcs_map_count_bw;
4962static int hf_ieee80211_eht_eml_control_mcs_map_count_reserved;
4963static int hf_ieee80211_eht_emlsr_para_update;
4964static int hf_ieee80211_eht_emlsr_para_update_padding_delay;
4965static int hf_ieee80211_eht_emlsr_para_update_tran_delay;
4966static int hf_ieee80211_eht_emlsr_para_update_reserved;
4967
4968static int hf_ieee80211_eht_group_key_data_length;
4969static int hf_ieee80211_eht_reconfig_link_id_info;
4970static int hf_ieee80211_eht_reconfig_link_id;
4971static int hf_ieee80211_eht_reconfig_link_id_reserved;
4972static int hf_ieee80211_eht_reconfig_status_code;
4973
4974static int hf_ieee80211_ff_ant_selection;
4975static int hf_ieee80211_ff_ant_selection_0;
4976static int hf_ieee80211_ff_ant_selection_1;
4977static int hf_ieee80211_ff_ant_selection_2;
4978static int hf_ieee80211_ff_ant_selection_3;
4979static int hf_ieee80211_ff_ant_selection_4;
4980static int hf_ieee80211_ff_ant_selection_5;
4981static int hf_ieee80211_ff_ant_selection_6;
4982static int hf_ieee80211_ff_ant_selection_7;
4983
4984static int * const ieee80211_ff_ant_selection_fields[] = {
4985 &hf_ieee80211_ff_ant_selection_0,
4986 &hf_ieee80211_ff_ant_selection_1,
4987 &hf_ieee80211_ff_ant_selection_2,
4988 &hf_ieee80211_ff_ant_selection_3,
4989 &hf_ieee80211_ff_ant_selection_4,
4990 &hf_ieee80211_ff_ant_selection_5,
4991 &hf_ieee80211_ff_ant_selection_6,
4992 &hf_ieee80211_ff_ant_selection_7,
4993 NULL((void*)0)
4994};
4995
4996static int hf_ieee80211_ff_ext_channel_switch_announcement;
4997static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode;
4998static int hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class;
4999static int hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number;
5000static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_count;
5001
5002static int * const ieee80211_ff_ext_channel_switch_announcement_fields[] = {
5003 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
5004 &hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
5005 &hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
5006 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
5007 NULL((void*)0)
5008};
5009
5010static int hf_ieee80211_ff_ht_info;
5011static int hf_ieee80211_ff_ht_info_information_request;
5012static int hf_ieee80211_ff_ht_info_40_mhz_intolerant;
5013static int hf_ieee80211_ff_ht_info_sta_chan_width;
5014static int hf_ieee80211_ff_ht_info_reserved;
5015
5016static int * const ieee80211_ff_ht_info_fields[] = {
5017 &hf_ieee80211_ff_ht_info_information_request,
5018 &hf_ieee80211_ff_ht_info_40_mhz_intolerant,
5019 &hf_ieee80211_ff_ht_info_sta_chan_width,
5020 &hf_ieee80211_ff_ht_info_reserved,
5021 NULL((void*)0)
5022};
5023
5024static int hf_ieee80211_ff_ht_action;
5025
5026static int hf_ieee80211_ff_psmp_sta_info;
5027static int hf_ieee80211_ff_psmp_sta_info_type;
5028static int hf_ieee80211_ff_psmp_sta_info_dtt_start_offset;
5029static int hf_ieee80211_ff_psmp_sta_info_dtt_duration;
5030static int hf_ieee80211_ff_psmp_sta_info_sta_id;
5031static int hf_ieee80211_ff_psmp_sta_info_utt_start_offset;
5032static int hf_ieee80211_ff_psmp_sta_info_utt_duration;
5033static int hf_ieee80211_ff_psmp_sta_info_reserved_small;
5034static int hf_ieee80211_ff_psmp_sta_info_reserved_large;
5035static int hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id;
5036
5037static int hf_ieee80211_ff_mimo_csi_snr;
5038static int hf_ieee80211_ff_mimo_csi_matrices;
5039static int hf_ieee80211_ff_mimo_csi_bf_matrices;
5040static int hf_ieee80211_ff_mimo_csi_cbf_matrices;
5041
5042/*** Begin: 802.11s additions ***/
5043static int hf_ieee80211_mesh_control_field;
5044
5045static int hf_ieee80211_ff_mesh_action;
5046static int hf_ieee80211_ff_multihop_action;
5047static int hf_ieee80211_ff_mesh_flags;
5048static int hf_ieee80211_ff_mesh_ttl;
5049static int hf_ieee80211_ff_mesh_sequence;
5050static int hf_ieee80211_ff_mesh_addr4;
5051static int hf_ieee80211_ff_mesh_addr5;
5052static int hf_ieee80211_ff_mesh_addr6;
5053static int hf_ieee80211_ff_selfprot_action;
5054
5055static int hf_ieee80211_mesh_peering_proto;
5056static int hf_ieee80211_mesh_peering_local_link_id;
5057static int hf_ieee80211_mesh_peering_peer_link_id;
5058
5059static int hf_ieee80211_ff_hwmp_flags;
5060static int hf_ieee80211_ff_hwmp_hopcount;
5061static int hf_ieee80211_ff_hwmp_ttl;
5062static int hf_ieee80211_ff_hwmp_pdid;
5063static int hf_ieee80211_ff_hwmp_orig_sta;
5064static int hf_ieee80211_ff_hwmp_orig_sn;
5065static int hf_ieee80211_ff_hwmp_orig_ext;
5066static int hf_ieee80211_ff_hwmp_lifetime;
5067static int hf_ieee80211_ff_hwmp_metric;
5068static int hf_ieee80211_ff_hwmp_targ_count;
5069static int hf_ieee80211_ff_hwmp_targ_flags;
5070static int hf_ieee80211_ff_hwmp_targ_to_flags;
5071static int hf_ieee80211_ff_hwmp_targ_usn_flags;
5072static int hf_ieee80211_ff_hwmp_targ_sta;
5073static int hf_ieee80211_ff_hwmp_targ_sn;
5074static int hf_ieee80211_ff_hwmp_targ_ext;
5075static int hf_ieee80211_rann_flags;
5076static int hf_ieee80211_rann_root_sta;
5077static int hf_ieee80211_rann_sn;
5078static int hf_ieee80211_rann_interval;
5079
5080static int hf_ieee80211_mesh_channel_switch_ttl;
5081static int hf_ieee80211_mesh_channel_switch_flag;
5082static int hf_ieee80211_mesh_channel_switch_reason_code;
5083static int hf_ieee80211_mesh_channel_switch_precedence_value;
5084static int hf_ieee80211_mesh_chswitch_flag_txrestrict;
5085static int hf_ieee80211_mesh_chswitch_flag_initiator;
5086
5087static int hf_ieee80211_mesh_config_path_sel_protocol;
5088static int hf_ieee80211_mesh_config_path_sel_metric;
5089static int hf_ieee80211_mesh_config_congestion_control;
5090static int hf_ieee80211_mesh_config_sync_method;
5091static int hf_ieee80211_mesh_config_auth_protocol;
5092static int hf_ieee80211_mesh_config_formation_info;
5093static int hf_ieee80211_mesh_config_capability;
5094static int hf_ieee80211_mesh_id;
5095static int hf_ieee80211_mesh_config_cap_accepting;
5096static int hf_ieee80211_mesh_config_cap_mcca_support;
5097static int hf_ieee80211_mesh_config_cap_mcca_enabled;
5098static int hf_ieee80211_mesh_config_cap_forwarding;
5099static int hf_ieee80211_mesh_config_cap_mbca_enabled;
5100static int hf_ieee80211_mesh_config_cap_tbtt_adjusting;
5101static int hf_ieee80211_mesh_config_cap_power_save_level;
5102static int hf_ieee80211_mesh_config_cap_reserved;
5103static int hf_ieee80211_mesh_form_info_conn_to_mesh_gate;
5104static int hf_ieee80211_mesh_form_info_num_of_peerings;
5105static int hf_ieee80211_mesh_form_info_conn_to_as;
5106static int hf_ieee80211_mesh_awake_window;
5107static int hf_ieee80211_mesh_mic;
5108static int hf_ieee80211_mesh_ampe_encrypted_data;
5109
5110static int hf_ieee80211_bcn_timing_rctrl;
5111static int hf_ieee80211_bcn_timing_rctrl_more;
5112static int hf_ieee80211_bcn_timing_rctrl_element_num;
5113static int hf_ieee80211_bcn_timing_rctrl_status_num;
5114static int hf_ieee80211_bcn_timing_info;
5115static int hf_ieee80211_bcn_timing_info_nsta_id;
5116static int hf_ieee80211_bcn_timing_info_nsta_tbtt;
5117static int hf_ieee80211_bcn_timing_info_nsta_bi;
5118
5119static int hf_ieee80211_gann_flags;
5120static int hf_ieee80211_gann_flags_reserved;
5121static int hf_ieee80211_gann_hop_count;
5122static int hf_ieee80211_gann_elem_ttl;
5123static int hf_ieee80211_gann_mesh_gate_addr;
5124static int hf_ieee80211_gann_seq_num;
5125static int hf_ieee80211_gann_interval;
5126
5127static int hf_ieee80211_pxu_pxu_id;
5128static int hf_ieee80211_pxu_pxu_origin_mac;
5129static int hf_ieee80211_pxu_no_proxy_info;
5130static int hf_ieee80211_pxu_proxy_info;
5131static int hf_ieee80211_pxu_proxy_info_flags;
5132static int hf_ieee80211_pxu_proxy_info_flags_delete;
5133static int hf_ieee80211_pxu_proxy_info_flags_orig_is_proxy;
5134static int hf_ieee80211_pxu_proxy_info_flags_lifetime;
5135static int hf_ieee80211_pxu_proxy_info_flags_reserved;
5136static int hf_ieee80211_pxu_proxy_info_ext_mac;
5137static int hf_ieee80211_pxu_proxy_info_seq_num;
5138static int hf_ieee80211_pxu_proxy_info_proxy_mac;
5139static int hf_ieee80211_pxu_proxy_info_lifetime;
5140
5141static int hf_ieee80211_pxuc_pxu_id;
5142static int hf_ieee80211_pxuc_pxu_recip_mac;
5143
5144static int hf_ieee80211_ff_public_action;
5145static int hf_ieee80211_ff_protected_public_action;
5146static int hf_ieee80211_ff_tod;
5147static int hf_ieee80211_ff_toa;
5148static int hf_ieee80211_ff_max_tod_err;
5149static int hf_ieee80211_ff_max_toa_err;
5150
5151/* ************************************************************************* */
5152/* Flags found in the capability field (fixed field) */
5153/* ************************************************************************* */
5154static int hf_ieee80211_ff_capture;
5155static int hf_ieee80211_ff_cf_ess;
5156static int hf_ieee80211_ff_cf_ibss;
5157static int hf_ieee80211_ff_cf_reserved1;
5158static int hf_ieee80211_ff_cf_reserved2;
5159static int hf_ieee80211_ff_cf_privacy;
5160static int hf_ieee80211_ff_cf_preamble;
5161static int hf_ieee80211_ff_cf_critical_update_flag;
5162static int hf_ieee80211_ff_cf_nontran_bss_critical_update_flag;
5163static int hf_ieee80211_ff_cf_spec_man;
5164static int hf_ieee80211_ff_cf_qos;
5165static int hf_ieee80211_ff_cf_short_slot_time;
5166static int hf_ieee80211_ff_cf_apsd;
5167static int hf_ieee80211_ff_cf_radio_measurement;
5168static int hf_ieee80211_ff_cf_epd;
5169static int hf_ieee80211_ff_cf_reserved5;
5170static int hf_ieee80211_ff_cf_reserved6;
5171
5172/* ************************************************************************* */
5173/* A-MSDU fields */
5174/* ************************************************************************* */
5175static int hf_ieee80211_amsdu_subframe;
5176static int hf_ieee80211_amsdu_length;
5177static int hf_ieee80211_amsdu_padding;
5178
5179/* ************************************************************************* */
5180/* Tagged value format fields */
5181/* ************************************************************************* */
5182static int hf_ieee80211_tagged_parameters; /* Tagged payload item */
5183static int hf_ieee80211_tag;
5184static int hf_ieee80211_tag_number;
5185static int hf_ieee80211_tag_length;
5186static int hf_ieee80211_tag_data;
5187static int hf_ieee80211_tag_oui;
5188static int hf_ieee80211_tag_oui_wfa_subtype;
5189static int hf_ieee80211_tag_oui_wfa_action_type;
5190static int hf_ieee80211_tag_ssid;
5191static int hf_ieee80211_tag_supp_rates;
5192static int hf_ieee80211_tag_fh_dwell_time;
5193static int hf_ieee80211_tag_fh_hop_set;
5194static int hf_ieee80211_tag_fh_hop_pattern;
5195static int hf_ieee80211_tag_fh_hop_index;
5196static int hf_ieee80211_tag_ds_param_channel;
5197static int hf_ieee80211_tag_cfp_count;
5198static int hf_ieee80211_tag_cfp_period;
5199static int hf_ieee80211_tag_cfp_max_duration;
5200static int hf_ieee80211_tag_cfp_dur_remaining;
5201static int hf_ieee80211_tim_dtim_count;
5202static int hf_ieee80211_tim_dtim_period;
5203static int hf_ieee80211_tim_bmapctl;
5204static int hf_ieee80211_tim_bmapctl_mcast;
5205static int hf_ieee80211_tim_bmapctl_offset;
5206static int hf_ieee80211_tim_partial_virtual_bitmap;
5207static int hf_ieee80211_tim_aid;
5208static int hf_ieee80211_tag_ibss_atim_window;
5209static int hf_ieee80211_tag_country_info_code;
5210static int hf_ieee80211_tag_country_info_env;
5211static int hf_ieee80211_tag_country_info_pad;
5212static int hf_ieee80211_tag_country_info_fnm;
5213static int hf_ieee80211_tag_country_info_fnm_fcn;
5214static int hf_ieee80211_tag_country_info_fnm_nc;
5215static int hf_ieee80211_tag_country_info_fnm_mtpl;
5216static int hf_ieee80211_tag_country_info_rrc;
5217static int hf_ieee80211_tag_country_info_rrc_oei;
5218static int hf_ieee80211_tag_country_info_rrc_oc;
5219static int hf_ieee80211_tag_country_info_rrc_cc;
5220static int hf_ieee80211_tag_fh_hopping_parameter_prime_radix;
5221static int hf_ieee80211_tag_fh_hopping_parameter_nb_channels;
5222static int hf_ieee80211_tag_fh_hopping_table_flag;
5223static int hf_ieee80211_tag_fh_hopping_table_number_of_sets;
5224static int hf_ieee80211_tag_fh_hopping_table_modulus;
5225static int hf_ieee80211_tag_fh_hopping_table_offset;
5226static int hf_ieee80211_tag_fh_hopping_random_table;
5227static int hf_ieee80211_tag_request;
5228static int hf_ieee80211_tag_extended_request_id;
5229static int hf_ieee80211_tag_extended_request_extension;
5230static int hf_ieee80211_tag_challenge_text;
5231
5232static int hf_ieee80211_oui_qos_subtype;
5233static int hf_ieee80211_oui_qos_mgmt_dialog_token;
5234static int hf_ieee80211_oui_qos_mgmt_resp_control;
5235static int hf_ieee80211_oui_qos_mgmt_rsp_ctrl_more;
5236static int hf_ieee80211_oui_qos_mgmt_rsp_ctrl_reset;
5237static int hf_ieee80211_oui_qos_mgmt_rsp_reserved;
5238static int hf_ieee80211_oui_qos_mgmt_rqst_control;
5239static int hf_ieee80211_oui_qos_mgmt_rq_ctrl_more;
5240static int hf_ieee80211_oui_qos_mgmt_rq_ctrl_reset;
5241static int hf_ieee80211_oui_qos_mgmt_rq_reserved;
5242static int hf_ieee80211_oui_qos_mgmt_count;
5243static int hf_ieee80211_dscp_policy_id;
5244static int hf_ieee80211_dscp_policy_status;
5245static int hf_ieee80211_dscp_policy_scs_sts_list;
5246
5247static int hf_ieee80211_tag_he_6ghz_cap_inf;
5248static int hf_ieee80211_tag_he_6ghz_cap_inf_b0_b2;
5249static int hf_ieee80211_tag_he_6ghz_cap_inf_b3_b5;
5250static int hf_ieee80211_tag_he_6ghz_cap_inf_b6_b7;
5251static int hf_ieee80211_tag_he_6ghz_cap_inf_b8;
5252static int hf_ieee80211_tag_he_6ghz_cap_inf_b9_b10;
5253static int hf_ieee80211_tag_he_6ghz_cap_inf_b11;
5254static int hf_ieee80211_tag_he_6ghz_cap_inf_b12;
5255static int hf_ieee80211_tag_he_6ghz_cap_inf_b13;
5256static int hf_ieee80211_tag_he_6ghz_cap_inf_b14_b15;
5257
5258static int hf_ieee80211_tag_ftm_tsf_sync_info;
5259
5260static int * const ieee80211_tag_he_6ghz_cap_inf[] = {
5261 &hf_ieee80211_tag_he_6ghz_cap_inf_b0_b2,
5262 &hf_ieee80211_tag_he_6ghz_cap_inf_b3_b5,
5263 &hf_ieee80211_tag_he_6ghz_cap_inf_b6_b7,
5264 &hf_ieee80211_tag_he_6ghz_cap_inf_b8,
5265 &hf_ieee80211_tag_he_6ghz_cap_inf_b9_b10,
5266 &hf_ieee80211_tag_he_6ghz_cap_inf_b11,
5267 &hf_ieee80211_tag_he_6ghz_cap_inf_b12,
5268 &hf_ieee80211_tag_he_6ghz_cap_inf_b13,
5269 &hf_ieee80211_tag_he_6ghz_cap_inf_b14_b15,
5270 NULL((void*)0)
5271};
5272
5273
5274static int hf_ieee80211_wep_iv;
5275static int hf_ieee80211_wep_iv_weak;
5276static int hf_ieee80211_tkip_extiv;
5277static int hf_ieee80211_ccmp_extiv;
5278static int hf_ieee80211_wep_key;
5279static int hf_ieee80211_wep_icv;
5280static int hf_ieee80211_fc_analysis_pmk;
5281static int hf_ieee80211_fc_analysis_kck;
5282static int hf_ieee80211_fc_analysis_kek;
5283static int hf_ieee80211_fc_analysis_tk;
5284static int hf_ieee80211_fc_analysis_gtk;
5285
5286static int hf_ieee80211_block_ack_control;
5287static int hf_ieee80211_block_ack_control_ack_policy;
5288static int hf_ieee80211_block_ack_control_type;
5289static int hf_ieee80211_block_ack_control_reserved;
5290static int hf_ieee80211_block_ack_control_tid_info;
5291
5292static int hf_ieee80211_block_ack_multi_tid_reserved;
5293static int hf_ieee80211_block_ack_multi_tid_value;
5294static int hf_ieee80211_block_ack_bitmap;
5295static int hf_ieee80211_block_ack_bitmap_missing_frame;
5296static int hf_ieee80211_block_ack_bitmap_last_ack_frame;
5297static int hf_ieee80211_block_ack_gcr_addr;
5298
5299static int hf_ieee80211_block_ack_multi_sta_aid11;
5300static int hf_ieee80211_block_ack_multi_sta_ack_type;
5301static int hf_ieee80211_block_ack_multi_sta_tid;
5302static int hf_ieee80211_block_ack_multi_sta_aid_tid;
5303static int hf_ieee80211_block_ack_multi_sta_reserved;
5304static int hf_ieee80211_block_ack_multi_sta_ra;
5305
5306static int hf_ieee80211_tag_measure_request_measurement_mode;
5307static int hf_ieee80211_tag_measure_request_bssid;
5308
5309static int hf_ieee80211_tag_measure_request_subelement_length;
5310static int hf_ieee80211_tag_measure_request_beacon_sub_id;
5311static int hf_ieee80211_tag_measure_request_beacon_sub_ssid;
5312static int hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition;
5313static int hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset;
5314static int hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail;
5315static int hf_ieee80211_tag_measure_request_beacon_sub_last_report_indication_request;
5316static int hf_ieee80211_tag_measure_request_beacon_unknown;
5317
5318static int hf_ieee80211_tag_measure_request_channel_load_sub_id;
5319static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition;
5320static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref;
5321
5322static int hf_ieee80211_tag_measure_request_noise_histogram_sub_id;
5323static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition;
5324static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref;
5325
5326static int hf_ieee80211_tag_measure_request_frame_request_type;
5327static int hf_ieee80211_tag_measure_request_mac_address;
5328static int hf_ieee80211_tag_measure_request_peer_mac_address;
5329static int hf_ieee80211_tag_measure_request_group_id;
5330
5331static int hf_ieee80211_tag_measure_request_location_subject;
5332static int hf_ieee80211_tag_measure_request_civic_location_type;
5333static int hf_ieee80211_tag_measure_request_location_service_interval_units;
5334static int hf_ieee80211_tag_measure_request_location_service_interval;
5335
5336static int hf_ieee80211_tag_measure_request_unknown;
5337
5338static int hf_ieee80211_ht_pren_type;
5339static int hf_ieee80211_ht_pren_unknown;
5340
5341static int hf_ieee80211_ht_cap;
5342static int hf_ieee80211_ht_vs_cap;
5343static int hf_ieee80211_ht_ldpc_coding;
5344static int hf_ieee80211_ht_chan_width;
5345static int hf_ieee80211_ht_sm_pwsave;
5346static int hf_ieee80211_ht_green;
5347static int hf_ieee80211_ht_short20;
5348static int hf_ieee80211_ht_short40;
5349static int hf_ieee80211_ht_tx_stbc;
5350static int hf_ieee80211_ht_rx_stbc;
5351static int hf_ieee80211_ht_reserved_b10;
5352static int hf_ieee80211_ht_max_amsdu;
5353static int hf_ieee80211_ht_dss_cck_40;
5354static int hf_ieee80211_ht_reserved_b13;
5355static int hf_ieee80211_ht_40_mhz_intolerant;
5356static int hf_ieee80211_ht_reserved_b15;
5357
5358static int hf_ieee80211_ext_bss_mu_mimo_capable_sta_count;
5359static int hf_ieee80211_ext_bss_ss_underutilization;
5360static int hf_ieee80211_ext_bss_observable_sec_20mhz_utilization;
5361static int hf_ieee80211_ext_bss_observable_sec_40mhz_utilization;
5362static int hf_ieee80211_ext_bss_observable_sec_80mhz_utilization;
5363static int hf_ieee80211_wide_bw_new_channel_width;
5364static int hf_ieee80211_wide_bw_new_channel_center_freq_segment0;
5365static int hf_ieee80211_wide_bw_new_channel_center_freq_segment1;
5366
5367static int hf_ieee80211_operat_notification_mode;
5368static int hf_ieee80211_operat_mode_field_channel_width;
5369static int hf_ieee80211_operat_mode_field_160_80plus80_bw;
5370static int hf_ieee80211_operat_mode_field_no_ldpc;
5371static int hf_ieee80211_operat_mode_field_rxnss;
5372static int hf_ieee80211_operat_mode_field_rxnsstype;
5373
5374static int hf_ieee80211_tbtt_info;
5375static int hf_ieee80211_tbtt_filtered_nap;
5376static int hf_ieee80211_tbtt_info_count;
5377static int hf_ieee80211_tbtt_info_length;
5378
5379static int hf_ieee80211_tbtt_operating_class;
5380static int hf_ieee80211_tbtt_channel_number;
5381
5382static int hf_ieee80211_tbtt_offset;
5383static int hf_ieee80211_tbtt_bssid;
5384static int hf_ieee80211_tbtt_short_ssid;
5385static int hf_ieee80211_rnr_bss_params;
5386static int hf_ieee80211_rnr_oct_recommended;
5387static int hf_ieee80211_rnr_same_ssid;
5388static int hf_ieee80211_rnr_multiple_bssid;
5389static int hf_ieee80211_rnr_transmitted_bssid;
5390static int hf_ieee80211_rnr_ess_with_colocated_ap;
5391static int hf_ieee80211_rnr_unsolicited_probe_responses;
5392static int hf_ieee80211_rnr_same_colocated_ap;
5393static int hf_ieee80211_rnr_same_reserved;
5394static int hf_ieee80211_rnr_20mhz_psd_subfield;
5395static int hf_ieee80211_rnr_reserved_data;
5396static int hf_ieee80211_rnr_mld_params;
5397static int hf_ieee80211_rnr_mld_id;
5398static int hf_ieee80211_rnr_mld_link_id;
5399static int hf_ieee80211_rnr_mld_bss_params_change_count;
5400static int hf_ieee80211_rnr_mld_all_updates_included;
5401static int hf_ieee80211_rnr_mld_disabled_link_indication;
5402static int hf_ieee80211_rnr_mld_reserved;
5403
5404static int hf_ieee80211_ampduparam;
5405static int hf_ieee80211_ampduparam_vs;
5406static int hf_ieee80211_ampduparam_mpdu;
5407static int hf_ieee80211_ampduparam_mpdu_start_spacing;
5408static int hf_ieee80211_ampduparam_reserved;
5409
5410static int hf_ieee80211_beacon_sequence;
5411static int hf_ieee80211_pentapartial_timestamp;
5412static int hf_ieee80211_tack_next_twt_info;
5413static int hf_ieee80211_tack_next_twt;
5414static int hf_ieee80211_tack_flow_identifier;
5415
5416static int hf_ieee80211_ff_s1g_action;
5417static int hf_ieee80211_ff_prot_s1g_action;
5418static int hf_ieee80211_ff_s1g_timestamp;
5419static int hf_ieee80211_ff_s1g_change_sequence;
5420static int hf_ieee80211_ff_s1g_next_tbtt;
5421static int hf_ieee80211_ff_s1g_compressed_ssid;
5422static int hf_ieee80211_ff_s1g_access_network_options;
5423
5424static int hf_ieee80211_s1g_sync_control;
5425static int hf_ieee80211_s1g_sync_control_uplink_sync_request;
5426static int hf_ieee80211_s1g_sync_control_time_slot_protection_request;
5427static int hf_ieee80211_s1g_sync_control_reserved;
5428
5429static int hf_ieee80211_s1g_sector_id_index;
5430static int hf_ieee80211_s1g_sector_id_preferred_sector_id;
5431static int hf_ieee80211_s1g_sector_id_snr;
5432static int hf_ieee80211_s1g_sector_id_receive_sector_bitmap;
5433
5434static int hf_ieee80211_s1g_twt_information_control;
5435static int hf_ieee80211_s1g_twt_flow_identifier;
5436static int hf_ieee80211_s1g_twt_response_required;
5437static int hf_ieee80211_s1g_twt_next_twt_request;
5438static int hf_ieee80211_s1g_twt_next_twt_subfield_size;
5439static int hf_ieee80211_s1g_twt_reserved;
5440static int hf_ieee80211_s1g_twt_next_twt_32;
5441static int hf_ieee80211_s1g_twt_next_twt_48;
5442static int hf_ieee80211_s1g_twt_next_twt_64;
5443
5444static int hf_ieee80211_s1g_update_edca_info;
5445static int hf_ieee80211_s1g_update_edca_override;
5446static int hf_ieee80211_s1g_update_edca_ps_poll_aci;
5447static int hf_ieee80211_s1g_update_edca_raw_aci;
5448static int hf_ieee80211_s1g_update_edca_sta_type;
5449static int hf_ieee80211_s1g_update_edca_reserved;
5450
5451static int hf_ieee80211_s1g_cap_byte1;
5452static int hf_ieee80211_s1g_cap_byte2;
5453static int hf_ieee80211_s1g_cap_byte3;
5454static int hf_ieee80211_s1g_cap_byte4;
5455static int hf_ieee80211_s1g_cap_byte5;
5456static int hf_ieee80211_s1g_cap_byte6;
5457static int hf_ieee80211_s1g_cap_byte7;
5458static int hf_ieee80211_s1g_cap_byte8;
5459static int hf_ieee80211_s1g_cap_byte9;
5460static int hf_ieee80211_s1g_cap_byte10;
5461static int hf_ieee80211_s1g_cap_s1g_long_support;
5462static int hf_ieee80211_s1g_cap_short_gi_for_1_mhz;
5463static int hf_ieee80211_s1g_cap_short_gi_for_2_mhz;
5464static int hf_ieee80211_s1g_cap_short_gi_for_4_mhz;
5465static int hf_ieee80211_s1g_cap_short_gi_for_8_mhz;
5466static int hf_ieee80211_s1g_cap_short_gi_for_16_mhz;
5467static int hf_ieee80211_s1g_cap_supported_channel_width;
5468static int hf_ieee80211_s1g_cap_rx_ldpc;
5469static int hf_ieee80211_s1g_cap_tx_stbc;
5470static int hf_ieee80211_s1g_cap_rx_stbc;
5471static int hf_ieee80211_s1g_cap_su_beamformer_capable;
5472static int hf_ieee80211_s1g_cap_su_beamformee_capable;
5473static int hf_ieee80211_s1g_cap_beamformee_sts_capability;
5474static int hf_ieee80211_s1g_cap_number_sounding_dimensions;
5475static int hf_ieee80211_s1g_cap_mu_beamformer_capable;
5476static int hf_ieee80211_s1g_cap_mu_beamformee_capable;
5477static int hf_ieee80211_s1g_cap_htc_vht_capable;
5478static int hf_ieee80211_s1g_cap_travelling_pilot_support;
5479static int hf_ieee80211_s1g_cap_rd_responder;
5480static int hf_ieee80211_s1g_cap_ht_delayed_block_ack;
5481static int hf_ieee80211_s1g_cap_maximum_mpdu_length;
5482static int hf_ieee80211_s1g_cap_maximum_a_mpdu_length_exp;
5483static int hf_ieee80211_s1g_cap_minimum_mpdu_start_spacing;
5484static int hf_ieee80211_s1g_cap_uplink_sync_capable;
5485static int hf_ieee80211_s1g_cap_dynamic_aid;
5486static int hf_ieee80211_s1g_cap_bat_support;
5487static int hf_ieee80211_s1g_cap_tim_ade_support;
5488static int hf_ieee80211_s1g_cap_non_tim_support;
5489static int hf_ieee80211_s1g_cap_group_aid_support;
5490static int hf_ieee80211_s1g_cap_sta_type_support;
5491static int hf_ieee80211_s1g_cap_centralized_authentication_control;
5492static int hf_ieee80211_s1g_cap_distributed_authentication_control;
5493static int hf_ieee80211_s1g_cap_a_msdu_support;
5494static int hf_ieee80211_s1g_cap_a_mpdu_support;
5495static int hf_ieee80211_s1g_cap_asymmetic_block_ack_support;
5496static int hf_ieee80211_s1g_cap_flow_control_support;
5497static int hf_ieee80211_s1g_cap_sectorized_beam_capable;
5498static int hf_ieee80211_s1g_cap_obss_mitigation_support;
5499static int hf_ieee80211_s1g_cap_fragment_ba_support;
5500static int hf_ieee80211_s1g_cap_ndp_ps_poll_supported;
5501static int hf_ieee80211_s1g_cap_raw_operation_support;
5502static int hf_ieee80211_s1g_cap_page_slicing_support;
5503static int hf_ieee80211_s1g_cap_txop_sharing_implicit_ack_support;
5504static int hf_ieee80211_s1g_cap_vht_link_adaptation_capable;
5505static int hf_ieee80211_s1g_cap_tack_support_as_ps_poll_response;
5506static int hf_ieee80211_s1g_cap_duplicate_1_mhz_support;
5507static int hf_ieee80211_s1g_cap_mcs_negotiation_support;
5508static int hf_ieee80211_s1g_cap_1_mhz_control_response_preamble_support;
5509static int hf_ieee80211_s1g_cap_ndp_beamforming_report_poll_support;
5510static int hf_ieee80211_s1g_cap_unsolicited_dynamic_aid;
5511static int hf_ieee80211_s1g_cap_sector_training_operation_supported;
5512static int hf_ieee80211_s1g_cap_temporary_ps_mode_switch;
5513static int hf_ieee80211_s1g_cap_twt_grouping_support;
5514static int hf_ieee80211_s1g_cap_bdt_capable;
5515static int hf_ieee80211_s1g_cap_color;
5516static int hf_ieee80211_s1g_cap_twt_requester_support;
5517static int hf_ieee80211_s1g_cap_twt_responder_support;
5518static int hf_ieee80211_s1g_cap_pv1_frame_support;
5519static int hf_ieee80211_s1g_cap_link_adaptation_per_normal_control_response_capable;
5520static int hf_ieee80211_s1g_cap_reserved;
5521static int hf_ieee80211_s1g_mcs_and_nss_set;
5522static int hf_ieee80211_s1g_rx_s1g_mcs_map;
5523static int hf_ieee80211_s1g_rx_highest_supported_long_gi_data_rate;
5524static int hf_ieee80211_s1g_tx_s1g_mcs_map;
5525static int hf_ieee80211_s1g_tx_highest_supported_long_gi_data_rate;
5526static int hf_ieee80211_s1g_rx_single_spatial_stream_map_for_1_mhz;
5527static int hf_ieee80211_s1g_tx_single_spatial_stream_map_for_1_mhz;
5528static int hf_ieee80211_s1g_mcs_and_nss_reserved;
5529static int hf_ieee80211_s1g_subchannel_selective_transmission;
5530static int hf_ieee80211_s1g_sst_sounding_option;
5531static int hf_ieee80211_s1g_channel_activity_bitmap;
5532static int hf_ieee80211_s1g_ul_activity;
5533static int hf_ieee80211_s1g_dl_activity;
5534static int hf_ieee80211_s1g_max_trans_width;
5535static int hf_ieee80211_s1g_activity_start_time;
5536static int hf_ieee80211_s1g_sst_sounding_option1;
5537static int hf_ieee80211_s1g_channel_activity_bitmap1;
5538static int hf_ieee80211_s1g_sounding_start_time_present;
5539static int hf_ieee80211_s1g_channel_activity_reserved;
5540static int hf_ieee80211_s1g_max_trans_width1;
5541static int hf_ieee80211_s1g_sounding_start_time;
5542static int hf_ieee80211_s1g_open_loop_link_margin;
5543static int hf_ieee80211_s1g_raw_control;
5544static int hf_ieee80211_s1g_raw_type;
5545static int hf_ieee80211_s1g_raw_type_options;
5546static int hf_ieee80211_s1g_raw_start_time_indication;
5547static int hf_ieee80211_s1g_raw_raw_group_indication;
5548static int hf_ieee80211_s1g_raw_channel_indication_preference;
5549static int hf_ieee80211_s1g_raw_periodic_raw_indication;
5550static int hf_ieee80211_s1g_raw_slot_def;
5551static int hf_ieee80211_s1g_slot_def_format_indication;
5552static int hf_ieee80211_s1g_slot_def_cross_slot_boundary;
5553static int hf_ieee80211_s1g_slot_def_slot_duration_count8;
5554static int hf_ieee80211_s1g_slot_def_num_slots6;
5555static int hf_ieee80211_s1g_slot_def_slot_duration_count11;
5556static int hf_ieee80211_s1g_slot_def_num_slots3;
5557static int hf_ieee80211_s1g_raw_start_time;
5558static int hf_ieee80211_s1g_raw_group_subfield;
5559static int hf_ieee80211_s1g_raw_group_page_index;
5560static int hf_ieee80211_s1g_raw_group_start_aid;
5561static int hf_ieee80211_s1g_raw_group_end_aid;
5562static int hf_ieee80211_s1g_raw_channel_indication;
5563static int hf_ieee80211_s1g_raw_ci_channel_activity_bitmap;
5564static int hf_ieee80211_s1g_raw_ci_max_trans_width;
5565static int hf_ieee80211_s1g_raw_ci_ul_activity;
5566static int hf_ieee80211_s1g_raw_ci_dl_activity;
5567static int hf_ieee80211_s1g_raw_ci_reserved;
5568static int hf_ieee80211_s1g_raw_praw_periodicity;
5569static int hf_ieee80211_s1g_raw_praw_validity;
5570static int hf_ieee80211_s1g_raw_praw_start_offset;
5571static int hf_ieee80211_s1g_page_slice_page_period;
5572static int hf_ieee80211_s1g_page_slice_control;
5573static int hf_ieee80211_s1g_page_slice_page_index;
5574static int hf_ieee80211_s1g_page_slice_page_slice_length;
5575static int hf_ieee80211_s1g_page_slice_page_slice_count;
5576static int hf_ieee80211_s1g_page_slice_block_offset;
5577static int hf_ieee80211_s1g_page_slice_tim_offset;
5578static int hf_ieee80211_s1g_page_slice_reserved;
5579static int hf_ieee80211_s1g_page_slice_page_bitmap;
5580static int hf_ieee80211_s1g_aid_request_mode;
5581static int hf_ieee80211_s1g_aid_request_interval_present;
5582static int hf_ieee80211_s1g_aid_request_per_sta_address_present;
5583static int hf_ieee80211_s1g_aid_request_service_characteristic_present;
5584static int hf_ieee80211_s1g_aid_request_non_tim_mode_switch;
5585static int hf_ieee80211_s1g_aid_request_tim_mode_switch;
5586static int hf_ieee80211_s1g_aid_request_group_address_present;
5587static int hf_ieee80211_s1g_aid_request_reserved;
5588static int hf_ieee80211_s1g_aid_request_interval;
5589static int hf_ieee80211_s1g_aid_request_characteristic_sensor;
5590static int hf_ieee80211_s1g_aid_request_characteristic_offload;
5591static int hf_ieee80211_s1g_aid_request_characteristic_official_service;
5592static int hf_ieee80211_s1g_aid_request_characteristic_reserved;
5593static int hf_ieee80211_s1g_aid_req_peer_sta_addr;
5594static int hf_ieee80211_s1g_aid_request_characteristic;
5595static int hf_ieee80211_s1g_aid_req_group_addr;
5596static int hf_ieee80211_s1g_aid_rsp_aid_group_aid;
5597static int hf_ieee80211_s1g_aid_rsp_aid_switch_count;
5598static int hf_ieee80211_s1g_aid_rsp_aid_response_interval;
5599static int hf_ieee80211_s1g_sector_op_control_16b;
5600static int hf_ieee80211_s1g_sector_op_sectorization_type_b16;
5601static int hf_ieee80211_s1g_sector_op_periodic_training_indicator;
5602static int hf_ieee80211_s1g_sector_op_training_period;
5603static int hf_ieee80211_s1g_sector_op_remaining_beacon_interval;
5604static int hf_ieee80211_s1g_sector_op_reserved_b16;
5605static int hf_ieee80211_s1g_sector_op_control;
5606static int hf_ieee80211_s1g_sector_op_sectorization_type;
5607static int hf_ieee80211_s1g_sector_op_period;
5608static int hf_ieee80211_s1g_sector_op_omni;
5609static int hf_ieee80211_s1g_sector_op_group_info;
5610static int hf_ieee80211_s1g_short_beacon_interval;
5611static int hf_ieee80211_s1g_change_sequence;
5612static int hf_ieee80211_s1g_auth_control_control;
5613static int hf_ieee80211_s1g_auth_control_deferral;
5614static int hf_ieee80211_s1g_auth_control_reserved;
5615static int hf_ieee80211_s1g_auth_control_thresh;
5616static int hf_ieee80211_s1g_auth_control_thresh_tus;
5617static int hf_ieee80211_s1g_auth_slot_duration;
5618static int hf_ieee80211_s1g_auth_max_trans_int;
5619static int hf_ieee80211_s1g_auth_min_trans_int;
5620static int hf_ieee80211_s1g_tsf_timer_accuracy;
5621static int hf_ieee80211_s1g_relay_control;
5622static int hf_ieee80211_s1g_relay_control_rootap_bssid;
5623static int hf_ieee80211_s1g_relay_function_activation_mode;
5624static int hf_ieee80211_s1g_relay_function_direction;
5625static int hf_ieee80211_s1g_relay_function_enable_relay_function;
5626static int hf_ieee80211_s1g_relay_function_stas_present_indic;
5627static int hf_ieee80211_s1g_relay_function_reserved;
5628static int hf_ieee80211_s1g_number_of_stas;
5629static int hf_ieee80211_s1g_initiator_mac_address;
5630static int hf_ieee80211_s1g_address_count;
5631static int hf_ieee80211_s1g_reachable_add_remove;
5632static int hf_ieee80211_s1g_reachable_relay_capable;
5633static int hf_ieee80211_s1g_reachable_reserved;
5634static int hf_ieee80211_s1g_reachable_mac_address;
5635static int hf_ieee80211_s1g_relay_discovery_control;
5636static int hf_ieee80211_s1g_min_data_rate_included;
5637static int hf_ieee80211_s1g_mean_data_rate_included;
5638static int hf_ieee80211_s1g_max_data_rate_included;
5639static int hf_ieee80211_s1g_delay_and_min_phy_rate;
5640static int hf_ieee80211_s1g_information_not_available;
5641static int hf_ieee80211_s1g_relay_discovery_reserved;
5642static int hf_ieee80211_s1g_relay_control_ul_min;
5643static int hf_ieee80211_s1g_relay_control_ul_mean;
5644static int hf_ieee80211_s1g_relay_control_ul_max;
5645static int hf_ieee80211_s1g_relay_control_dl_min;
5646static int hf_ieee80211_s1g_relay_control_dl_mean;
5647static int hf_ieee80211_s1g_relay_control_dl_max;
5648static int hf_ieee80211_s1g_relay_hierarchy_identifier;
5649static int hf_ieee80211_s1g_relay_no_more_relay_flag;
5650static int hf_ieee80211_s1g_aid_entry_mac_addr;
5651static int hf_ieee80211_s1g_aid_entry_assoc_id;
5652static int hf_ieee80211_s1g_beacon_compatibility_info;
5653static int hf_ieee80211_s1g_beacon_interval;
5654static int hf_ieee80211_s1g_tsf_completion;
5655static int hf_ieee80211_s1g_channel_width;
5656static int hf_ieee80211_s1g_primary_channel_width;
5657static int hf_ieee80211_s1g_bss_operating_channel_width;
5658static int hf_ieee80211_s1g_primary_channel_location;
5659static int hf_ieee80211_s1g_reserved_b6;
5660static int hf_ieee80211_s1g_mcs10_use;
5661static int hf_ieee80211_s1g_operating_class;
5662static int hf_ieee80211_s1g_primary_channel_number;
5663static int hf_ieee80211_s1g_channel_center_frequency;
5664static int hf_ieee80211_s1g_basic_mcs_and_nss_set;
5665static int hf_ieee80211_s1g_sst_enabled_channel_bitmap;
5666static int hf_ieee80211_s1g_sst_primary_channel_offset;
5667static int hf_ieee80211_s1g_sst_channel_unit;
5668static int hf_ieee80211_s1g_sst_reserved;
5669static int hf_ieee80211_s1g_max_away_duration;
5670static int hf_ieee80211_s1g_tim_bmapctrl;
5671static int hf_ieee80211_s1g_tim_bmapctl_traffic_indicator;
5672static int hf_ieee80211_s1g_tim_page_slice_number;
5673static int hf_ieee80211_s1g_tim_page_index;
5674static int hf_ieee80211_s1g_pvb_block_control_byte;
5675static int hf_ieee80211_s1g_pvb_encoding_mode;
5676static int hf_ieee80211_s1g_pvb_inverse_bitmap;
5677static int hf_ieee80211_s1g_pvb_block_offset;
5678static int hf_ieee80211_s1g_block_bitmap;
5679static int hf_ieee80211_s1g_block_bitmap_sta_aid13;
5680static int hf_ieee80211_s1g_block_bitmap_single_aid;
5681static int hf_ieee80211_s1g_block_bitmap_olb_length;
5682static int hf_ieee80211_s1g_block_bitmap_ade;
5683static int hf_ieee80211_s1g_block_bitmap_ewl;
5684static int hf_ieee80211_s1g_block_bitmap_len;
5685static int hf_ieee80211_s1g_block_bitmap_ade_bytes;
5686static int hf_ieee80211_s1g_probe_response_group_bitmap;
5687static int hf_ieee80211_s1g_probe_resp_subfield_0;
5688static int hf_ieee80211_pv1_probe_response_req_full_ssid;
5689static int hf_ieee80211_pv1_probe_response_req_next_tbtt;
5690static int hf_ieee80211_pv1_probe_response_req_access_network_option;
5691static int hf_ieee80211_pv1_probe_response_req_s1g_beacon_compatibility;
5692static int hf_ieee80211_pv1_probe_response_req_supported_rates;
5693static int hf_ieee80211_pv1_probe_response_req_s1g_capability;
5694static int hf_ieee80211_pv1_probe_response_req_s1g_operation;
5695static int hf_ieee80211_pv1_probe_response_req_rsn;
5696static int hf_ieee80211_s1g_el_op_max_awake_duration;
5697static int hf_ieee80211_s1g_el_op_recovery_time_duration;
5698static int hf_ieee80211_s1g_sectorized_group_id_list;
5699static int hf_ieee80211_s1g_header_comp_control;
5700static int hf_ieee80211_s1g_header_comp_req_resp;
5701static int hf_ieee80211_s1g_header_comp_store_a3;
5702static int hf_ieee80211_s1g_header_comp_store_a4;
5703static int hf_ieee80211_s1g_header_comp_ccmp_update_present;
5704static int hf_ieee80211_s1g_header_comp_pv1_data_type_3_supported;
5705static int hf_ieee80211_s1g_header_comp_reserved;
5706static int hf_ieee80211_s1g_header_comp_a3;
5707static int hf_ieee80211_s1g_header_comp_a4;
5708static int hf_ieee80211_s1g_header_comp_ccmp_update;
5709
5710static int hf_ieee80211_mcsset;
5711static int hf_ieee80211_mcsset_vs;
5712static int hf_ieee80211_mcsset_rx_bitmask;
5713static int hf_ieee80211_mcsset_rx_bitmask_0to7;
5714static int hf_ieee80211_mcsset_rx_bitmask_8to15;
5715static int hf_ieee80211_mcsset_rx_bitmask_16to23;
5716static int hf_ieee80211_mcsset_rx_bitmask_24to31;
5717static int hf_ieee80211_mcsset_rx_bitmask_32;
5718static int hf_ieee80211_mcsset_rx_bitmask_33to38;
5719static int hf_ieee80211_mcsset_rx_bitmask_39to52;
5720static int hf_ieee80211_mcsset_rx_bitmask_53to76;
5721static int hf_ieee80211_mcsset_highest_data_rate;
5722static int hf_ieee80211_mcsset_tx_mcs_set_defined;
5723static int hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal;
5724static int hf_ieee80211_mcsset_tx_max_spatial_streams;
5725static int hf_ieee80211_mcsset_tx_unequal_modulation;
5726
5727static int hf_ieee80211_htex_cap;
5728static int hf_ieee80211_htex_vs_cap;
5729static int hf_ieee80211_htex_reserved_b0_b7;
5730static int hf_ieee80211_htex_mcs;
5731static int hf_ieee80211_htex_htc_support;
5732static int hf_ieee80211_htex_rd_responder;
5733static int hf_ieee80211_htex_reserved_b12_b15;
5734
5735static int hf_ieee80211_txbf;
5736static int hf_ieee80211_txbf_vs;
5737static int hf_ieee80211_txbf_cap;
5738static int hf_ieee80211_txbf_rcv_ssc;
5739static int hf_ieee80211_txbf_tx_ssc;
5740static int hf_ieee80211_txbf_rcv_ndp;
5741static int hf_ieee80211_txbf_tx_ndp;
5742static int hf_ieee80211_txbf_impl_txbf;
5743static int hf_ieee80211_txbf_calib;
5744static int hf_ieee80211_txbf_expl_csi;
5745static int hf_ieee80211_txbf_expl_uncomp_fm;
5746static int hf_ieee80211_txbf_expl_comp_fm;
5747static int hf_ieee80211_txbf_expl_bf_csi;
5748static int hf_ieee80211_txbf_expl_uncomp_fm_feed;
5749static int hf_ieee80211_txbf_expl_comp_fm_feed;
5750static int hf_ieee80211_txbf_csi_num_bf_ant;
5751static int hf_ieee80211_txbf_min_group;
5752static int hf_ieee80211_txbf_uncomp_sm_bf_ant;
5753static int hf_ieee80211_txbf_comp_sm_bf_ant;
5754static int hf_ieee80211_txbf_csi_max_rows_bf;
5755static int hf_ieee80211_txbf_chan_est;
5756static int hf_ieee80211_txbf_resrv;
5757
5758/*** Begin: 802.11n - HT Operation IE ***/
5759static int hf_ieee80211_ht_operation_primary_channel;
5760
5761static int hf_ieee80211_ht_operation_info_delimiter1;
5762static int hf_ieee80211_ht_operation_info_secondary_channel_offset;
5763static int hf_ieee80211_ht_operation_info_sta_channel_width;
5764static int hf_ieee80211_ht_operation_info_rifs_mode;
5765static int hf_ieee80211_ht_operation_info_reserved_b4_b7;
5766
5767static int hf_ieee80211_ht_operation_info_delimiter2;
5768static int hf_ieee80211_ht_operation_info_protection;
5769static int hf_ieee80211_ht_operation_info_non_greenfield_sta_present;
5770static int hf_ieee80211_ht_operation_info_reserved_b11;
5771static int hf_ieee80211_ht_operation_info_obss_non_ht_stas_present;
5772static int hf_ieee80211_ht_operation_info_channel_center_freq_seg_2;
5773static int hf_ieee80211_ht_operation_info_reserved_b21_b23;
5774
5775static int hf_ieee80211_ht_operation_info_delimiter3;
5776static int hf_ieee80211_ht_operation_info_reserved_b24_b29;
5777static int hf_ieee80211_ht_operation_info_dual_beacon;
5778static int hf_ieee80211_ht_operation_info_dual_cts_protection;
5779static int hf_ieee80211_ht_operation_info_stbc_beacon;
5780static int hf_ieee80211_ht_operation_info_reserved_b33_b39;
5781
5782static int hf_ieee80211_ht_operation_mcsset_reserved;
5783/*** End: 802.11n - HT Operation IE ***/
5784
5785static int hf_ieee80211_tag_ap_channel_report_operating_class;
5786static int hf_ieee80211_tag_ap_channel_report_channel_list;
5787
5788static int hf_ieee80211_tag_secondary_channel_offset;
5789
5790static int hf_ieee80211_tag_bss_ap_avg_access_delay;
5791
5792static int hf_ieee80211_tag_antenna_id;
5793
5794static int hf_ieee80211_tag_rsni;
5795
5796static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask;
5797static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0;
5798static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1;
5799static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2;
5800static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3;
5801static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4;
5802static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5;
5803static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6;
5804static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7;
5805static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0;
5806static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1;
5807static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2;
5808static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3;
5809static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv;
5810static int hf_ieee80211_tag_bss_avb_adm_cap_up0;
5811static int hf_ieee80211_tag_bss_avb_adm_cap_up1;
5812static int hf_ieee80211_tag_bss_avb_adm_cap_up2;
5813static int hf_ieee80211_tag_bss_avb_adm_cap_up3;
5814static int hf_ieee80211_tag_bss_avb_adm_cap_up4;
5815static int hf_ieee80211_tag_bss_avb_adm_cap_up5;
5816static int hf_ieee80211_tag_bss_avb_adm_cap_up6;
5817static int hf_ieee80211_tag_bss_avb_adm_cap_up7;
5818static int hf_ieee80211_tag_bss_avb_adm_cap_ac0;
5819static int hf_ieee80211_tag_bss_avb_adm_cap_ac1;
5820static int hf_ieee80211_tag_bss_avb_adm_cap_ac2;
5821static int hf_ieee80211_tag_bss_avb_adm_cap_ac3;
5822
5823static int hf_ieee80211_tag_bss_avg_ac_access_delay_be;
5824static int hf_ieee80211_tag_bss_avg_ac_access_delay_bk;
5825static int hf_ieee80211_tag_bss_avg_ac_access_delay_vi;
5826static int hf_ieee80211_tag_bss_avg_ac_access_delay_vo;
5827
5828static int hf_ieee80211_tag_rm_enabled_capabilities;
5829static int hf_ieee80211_tag_rm_enabled_capabilities_b0;
5830static int hf_ieee80211_tag_rm_enabled_capabilities_b1;
5831static int hf_ieee80211_tag_rm_enabled_capabilities_b2;
5832static int hf_ieee80211_tag_rm_enabled_capabilities_b3;
5833static int hf_ieee80211_tag_rm_enabled_capabilities_b4;
5834static int hf_ieee80211_tag_rm_enabled_capabilities_b5;
5835static int hf_ieee80211_tag_rm_enabled_capabilities_b6;
5836static int hf_ieee80211_tag_rm_enabled_capabilities_b7;
5837static int hf_ieee80211_tag_rm_enabled_capabilities_b8;
5838static int hf_ieee80211_tag_rm_enabled_capabilities_b9;
5839static int hf_ieee80211_tag_rm_enabled_capabilities_b10;
5840static int hf_ieee80211_tag_rm_enabled_capabilities_b11;
5841static int hf_ieee80211_tag_rm_enabled_capabilities_b12;
5842static int hf_ieee80211_tag_rm_enabled_capabilities_b13;
5843static int hf_ieee80211_tag_rm_enabled_capabilities_b14;
5844static int hf_ieee80211_tag_rm_enabled_capabilities_b15;
5845static int hf_ieee80211_tag_rm_enabled_capabilities_b16;
5846static int hf_ieee80211_tag_rm_enabled_capabilities_b17;
5847static int hf_ieee80211_tag_rm_enabled_capabilities_b18to20;
5848static int hf_ieee80211_tag_rm_enabled_capabilities_b21to23;
5849static int hf_ieee80211_tag_rm_enabled_capabilities_b24to26;
5850static int hf_ieee80211_tag_rm_enabled_capabilities_b27;
5851static int hf_ieee80211_tag_rm_enabled_capabilities_b28;
5852static int hf_ieee80211_tag_rm_enabled_capabilities_b29;
5853static int hf_ieee80211_tag_rm_enabled_capabilities_b30;
5854static int hf_ieee80211_tag_rm_enabled_capabilities_b31;
5855static int hf_ieee80211_tag_rm_enabled_capabilities_b32;
5856static int hf_ieee80211_tag_rm_enabled_capabilities_b33;
5857static int hf_ieee80211_tag_rm_enabled_capabilities_b34;
5858static int hf_ieee80211_tag_rm_enabled_capabilities_b35;
5859static int hf_ieee80211_tag_rm_enabled_capabilities_o5;
5860
5861static int hf_ieee80211_tag_rcpi;
5862static int hf_ieee80211_tag_multiple_bssid;
5863static int hf_ieee80211_tag_multiple_bssid_subelem_id;
5864static int hf_ieee80211_tag_multiple_bssid_subelem_len;
5865static int hf_ieee80211_tag_multiple_bssid_subelem_reserved;
5866static int hf_ieee80211_tag_multiple_bssid_subelem_nontrans_profile;
5867
5868static int hf_ieee80211_tag_20_40_bc;
5869static int hf_ieee80211_tag_20_40_bc_information_request;
5870static int hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant;
5871static int hf_ieee80211_tag_20_40_bc_20_mhz_bss_width_request;
5872static int hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request;
5873static int hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant;
5874static int hf_ieee80211_tag_20_40_bc_reserved;
5875
5876static int hf_ieee80211_tag_intolerant_operating_class;
5877static int hf_ieee80211_tag_intolerant_channel_list;
5878static int hf_ieee80211_tag_intolerant_channel;
5879
5880static int hf_ieee80211_tag_power_constraint_local;
5881
5882static int hf_ieee80211_tag_power_capability_min;
5883static int hf_ieee80211_tag_power_capability_max;
5884
5885static int hf_ieee80211_tag_tpc_report_trsmt_pow;
5886static int hf_ieee80211_tag_tpc_report_link_mrg;
5887static int hf_ieee80211_tag_tpc_report_reserved;
5888
5889static int hf_ieee80211_tag_supported_channels;
5890static int hf_ieee80211_tag_supported_channels_first;
5891static int hf_ieee80211_tag_supported_channels_range;
5892
5893static int hf_ieee80211_csa_channel_switch_mode;
5894static int hf_ieee80211_csa_new_channel_number;
5895static int hf_ieee80211_csa_channel_switch_count;
5896
5897static int hf_ieee80211_tag_measure_request_token;
5898static int hf_ieee80211_tag_measure_request_mode;
5899static int hf_ieee80211_tag_measure_request_mode_parallel;
5900static int hf_ieee80211_tag_measure_request_mode_enable;
5901static int hf_ieee80211_tag_measure_request_mode_request;
5902static int hf_ieee80211_tag_measure_request_mode_report;
5903static int hf_ieee80211_tag_measure_request_mode_duration_mandatory;
5904static int hf_ieee80211_tag_measure_request_mode_reserved;
5905static int hf_ieee80211_tag_measure_request_type;
5906
5907static int hf_ieee80211_tag_measure_request_channel_number;
5908static int hf_ieee80211_tag_measure_request_start_time;
5909static int hf_ieee80211_tag_measure_request_duration;
5910
5911static int hf_ieee80211_tag_measure_request_operating_class;
5912static int hf_ieee80211_tag_measure_request_randomization_interval;
5913
5914static int hf_ieee80211_tag_measure_report_measurement_token;
5915static int hf_ieee80211_tag_measure_report_mode;
5916static int hf_ieee80211_tag_measure_report_mode_late;
5917static int hf_ieee80211_tag_measure_report_mode_incapable;
5918static int hf_ieee80211_tag_measure_report_mode_refused;
5919static int hf_ieee80211_tag_measure_report_mode_reserved;
5920static int hf_ieee80211_tag_measure_report_type;
5921static int hf_ieee80211_tag_measure_report_channel_number;
5922static int hf_ieee80211_tag_measure_report_start_time;
5923static int hf_ieee80211_tag_measure_report_duration;
5924
5925static int hf_ieee80211_tag_measure_basic_map_field;
5926static int hf_ieee80211_tag_measure_map_field_bss;
5927static int hf_ieee80211_tag_measure_map_field_ofdm;
5928static int hf_ieee80211_tag_measure_map_field_unident_signal;
5929static int hf_ieee80211_tag_measure_map_field_radar;
5930static int hf_ieee80211_tag_measure_map_field_unmeasured;
5931static int hf_ieee80211_tag_measure_map_field_reserved;
5932
5933static int hf_ieee80211_tag_measure_cca_busy_fraction;
5934
5935static int hf_ieee80211_tag_measure_rpi_histogram_report;
5936static int hf_ieee80211_tag_measure_rpi_histogram_report_0;
5937static int hf_ieee80211_tag_measure_rpi_histogram_report_1;
5938static int hf_ieee80211_tag_measure_rpi_histogram_report_2;
5939static int hf_ieee80211_tag_measure_rpi_histogram_report_3;
5940static int hf_ieee80211_tag_measure_rpi_histogram_report_4;
5941static int hf_ieee80211_tag_measure_rpi_histogram_report_5;
5942static int hf_ieee80211_tag_measure_rpi_histogram_report_6;
5943static int hf_ieee80211_tag_measure_rpi_histogram_report_7;
5944
5945static int hf_ieee80211_tag_measure_report_operating_class;
5946static int hf_ieee80211_tag_measure_report_channel_load;
5947static int hf_ieee80211_tag_measure_report_frame_info;
5948static int hf_ieee80211_tag_measure_report_frame_info_phy_type;
5949static int hf_ieee80211_tag_measure_report_frame_info_frame_type;
5950static int hf_ieee80211_tag_measure_report_rcpi;
5951static int hf_ieee80211_tag_measure_report_rsni;
5952static int hf_ieee80211_tag_measure_report_bssid;
5953static int hf_ieee80211_tag_measure_report_ant_id;
5954static int hf_ieee80211_tag_measure_report_anpi;
5955static int hf_ieee80211_tag_measure_report_ipi_density_0;
5956static int hf_ieee80211_tag_measure_report_ipi_density_1;
5957static int hf_ieee80211_tag_measure_report_ipi_density_2;
5958static int hf_ieee80211_tag_measure_report_ipi_density_3;
5959static int hf_ieee80211_tag_measure_report_ipi_density_4;
5960static int hf_ieee80211_tag_measure_report_ipi_density_5;
5961static int hf_ieee80211_tag_measure_report_ipi_density_6;
5962static int hf_ieee80211_tag_measure_report_ipi_density_7;
5963static int hf_ieee80211_tag_measure_report_ipi_density_8;
5964static int hf_ieee80211_tag_measure_report_ipi_density_9;
5965static int hf_ieee80211_tag_measure_report_ipi_density_10;
5966static int hf_ieee80211_tag_measure_report_parent_tsf;
5967
5968static int hf_ieee80211_tag_measure_report_subelement_length;
5969static int hf_ieee80211_tag_measure_report_beacon_sub_id;
5970static int hf_ieee80211_tag_measure_report_beacon_unknown;
5971static int hf_ieee80211_tag_measure_report_beacon_sub_last_report_indication;
5972static int hf_ieee80211_tag_measure_reported_frame_frag_id;
5973static int hf_ieee80211_tag_measure_reported_frame_frag_rep_id;
5974static int hf_ieee80211_tag_measure_reported_frame_frag_number;
5975static int hf_ieee80211_tag_measure_reported_frame_frag_more;
5976
5977static int hf_ieee80211_tag_measure_report_lci_sub_id;
5978static int hf_ieee80211_tag_measure_report_lci_lci;
5979static int hf_ieee80211_tag_measure_report_lci_z_sta_floor_info;
5980static int hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_expected_to_move;
5981static int hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_sta_floor_number;
5982static int hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor;
5983static int hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor_uncertainty;
5984static int hf_ieee80211_tag_measure_report_lci_urp;
5985static int hf_ieee80211_tag_measure_report_lci_urp_retransmission_allowed;
5986static int hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative_present;
5987static int hf_ieee80211_tag_measure_report_lci_urp_sta_location_policy;
5988static int hf_ieee80211_tag_measure_report_lci_urp_reserved;
5989static int hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative;
5990static int hf_ieee80211_tag_measure_report_lci_unknown;
5991
5992static int hf_ieee80211_tag_measure_report_civic_location_type;
5993static int hf_ieee80211_tag_measure_report_civic_sub_id;
5994static int hf_ieee80211_tag_measure_report_location_civic_country;
5995static int hf_ieee80211_tag_measure_report_location_civic_type;
5996static int hf_ieee80211_tag_measure_report_location_civic_length;
5997static int hf_ieee80211_tag_measure_report_location_civic;
5998
5999static int hf_ieee80211_tag_measure_report_unknown;
6000
6001static int hf_ieee80211_tag_quiet_count;
6002static int hf_ieee80211_tag_quiet_period;
6003static int hf_ieee80211_tag_quiet_duration;
6004static int hf_ieee80211_tag_quiet_offset;
6005
6006static int hf_ieee80211_tag_dfs_owner;
6007static int hf_ieee80211_tag_dfs_recovery_interval;
6008static int hf_ieee80211_tag_dfs_channel_map;
6009static int hf_ieee80211_tag_dfs_channel_number;
6010static int hf_ieee80211_tag_dfs_map;
6011
6012static int hf_ieee80211_tag_erp_info;
6013static int hf_ieee80211_tag_erp_info_erp_present;
6014static int hf_ieee80211_tag_erp_info_use_protection;
6015static int hf_ieee80211_tag_erp_info_barker_preamble_mode;
6016static int hf_ieee80211_tag_erp_info_reserved;
6017
6018static int hf_ieee80211_tag_extended_capabilities;
6019static int hf_ieee80211_tag_extended_capabilities_b0;
6020static int hf_ieee80211_tag_extended_capabilities_b1;
6021static int hf_ieee80211_tag_extended_capabilities_b2;
6022static int hf_ieee80211_tag_extended_capabilities_b3;
6023static int hf_ieee80211_tag_extended_capabilities_b4;
6024static int hf_ieee80211_tag_extended_capabilities_b5;
6025static int hf_ieee80211_tag_extended_capabilities_b6;
6026static int hf_ieee80211_tag_extended_capabilities_b7;
6027static int hf_ieee80211_tag_extended_capabilities_b8;
6028static int hf_ieee80211_tag_extended_capabilities_b9;
6029static int hf_ieee80211_tag_extended_capabilities_b10;
6030static int hf_ieee80211_tag_extended_capabilities_b11;
6031static int hf_ieee80211_tag_extended_capabilities_b12;
6032static int hf_ieee80211_tag_extended_capabilities_b13;
6033static int hf_ieee80211_tag_extended_capabilities_b14;
6034static int hf_ieee80211_tag_extended_capabilities_b15;
6035static int hf_ieee80211_tag_extended_capabilities_b16;
6036static int hf_ieee80211_tag_extended_capabilities_b17;
6037static int hf_ieee80211_tag_extended_capabilities_b18;
6038static int hf_ieee80211_tag_extended_capabilities_b19;
6039static int hf_ieee80211_tag_extended_capabilities_b20;
6040static int hf_ieee80211_tag_extended_capabilities_b21;
6041static int hf_ieee80211_tag_extended_capabilities_b22;
6042static int hf_ieee80211_tag_extended_capabilities_b23;
6043static int hf_ieee80211_tag_extended_capabilities_b24;
6044static int hf_ieee80211_tag_extended_capabilities_b25;
6045static int hf_ieee80211_tag_extended_capabilities_b26;
6046static int hf_ieee80211_tag_extended_capabilities_b27;
6047static int hf_ieee80211_tag_extended_capabilities_b28;
6048static int hf_ieee80211_tag_extended_capabilities_b29;
6049static int hf_ieee80211_tag_extended_capabilities_b30;
6050static int hf_ieee80211_tag_extended_capabilities_b31;
6051static int hf_ieee80211_tag_extended_capabilities_b32;
6052static int hf_ieee80211_tag_extended_capabilities_b33;
6053static int hf_ieee80211_tag_extended_capabilities_b34;
6054static int hf_ieee80211_tag_extended_capabilities_b35;
6055static int hf_ieee80211_tag_extended_capabilities_b36;
6056static int hf_ieee80211_tag_extended_capabilities_b37;
6057static int hf_ieee80211_tag_extended_capabilities_b38;
6058static int hf_ieee80211_tag_extended_capabilities_b39;
6059static int hf_ieee80211_tag_extended_capabilities_b40;
6060static int hf_ieee80211_tag_extended_capabilities_serv_int_granularity;
6061static int hf_ieee80211_tag_extended_capabilities_b44;
6062static int hf_ieee80211_tag_extended_capabilities_b45;
6063static int hf_ieee80211_tag_extended_capabilities_b46;
6064static int hf_ieee80211_tag_extended_capabilities_b47;
6065static int hf_ieee80211_tag_extended_capabilities_b48;
6066static int hf_ieee80211_tag_extended_capabilities_b49;
6067static int hf_ieee80211_tag_extended_capabilities_b50;
6068static int hf_ieee80211_tag_extended_capabilities_b51;
6069static int hf_ieee80211_tag_extended_capabilities_b52;
6070static int hf_ieee80211_tag_extended_capabilities_b53;
6071static int hf_ieee80211_tag_extended_capabilities_b54;
6072static int hf_ieee80211_tag_extended_capabilities_b55;
6073static int hf_ieee80211_tag_extended_capabilities_b56;
6074static int hf_ieee80211_tag_extended_capabilities_b57;
6075static int hf_ieee80211_tag_extended_capabilities_b58;
6076static int hf_ieee80211_tag_extended_capabilities_b59;
6077static int hf_ieee80211_tag_extended_capabilities_b60;
6078static int hf_ieee80211_tag_extended_capabilities_b61;
6079static int hf_ieee80211_tag_extended_capabilities_b62;
6080static int hf_ieee80211_tag_extended_capabilities_b63;
6081/* Used for the two-byte ext-cap field when present */
6082static int hf_ieee80211_tag_extended_capabilities_2;
6083static int hf_ieee80211_tag_extended_capabilities_b56_2;
6084static int hf_ieee80211_tag_extended_capabilities_b57_2;
6085static int hf_ieee80211_tag_extended_capabilities_b58_2;
6086static int hf_ieee80211_tag_extended_capabilities_b59_2;
6087static int hf_ieee80211_tag_extended_capabilities_b60_2;
6088static int hf_ieee80211_tag_extended_capabilities_b61_2;
6089static int hf_ieee80211_tag_extended_capabilities_b62_2;
6090static int hf_ieee80211_tag_extended_capabilities_max_num_msdus;
6091static int hf_ieee80211_tag_extended_capabilities_b65_2;
6092static int hf_ieee80211_tag_extended_capabilities_b66_2;
6093static int hf_ieee80211_tag_extended_capabilities_b67_2;
6094static int hf_ieee80211_tag_extended_capabilities_b68_2;
6095static int hf_ieee80211_tag_extended_capabilities_b69_2;
6096static int hf_ieee80211_tag_extended_capabilities_b70_2;
6097static int hf_ieee80211_tag_extended_capabilities_b71_2;
6098
6099static int hf_ieee80211_tag_extended_capabilities_b72;
6100static int hf_ieee80211_tag_extended_capabilities_b73;
6101static int hf_ieee80211_tag_extended_capabilities_b74;
6102static int hf_ieee80211_tag_extended_capabilities_b75;
6103static int hf_ieee80211_tag_extended_capabilities_b76;
6104static int hf_ieee80211_tag_extended_capabilities_b77;
6105static int hf_ieee80211_tag_extended_capabilities_b78;
6106static int hf_ieee80211_tag_extended_capabilities_b79;
6107static int hf_ieee80211_tag_extended_capabilities_b80;
6108static int hf_ieee80211_tag_extended_capabilities_b81;
6109static int hf_ieee80211_tag_extended_capabilities_b82;
6110static int hf_ieee80211_tag_extended_capabilities_b83;
6111static int hf_ieee80211_tag_extended_capabilities_b84;
6112static int hf_ieee80211_tag_extended_capabilities_b85;
6113static int hf_ieee80211_tag_extended_capabilities_b86;
6114static int hf_ieee80211_tag_extended_capabilities_b87;
6115
6116static int hf_ieee80211_tag_extended_capabilities_b88;
6117static int hf_ieee80211_tag_extended_capabilities_b89;
6118static int hf_ieee80211_tag_extended_capabilities_b90;
6119static int hf_ieee80211_tag_extended_capabilities_b91;
6120static int hf_ieee80211_tag_extended_capabilities_b92;
6121static int hf_ieee80211_tag_extended_capabilities_b93;
6122static int hf_ieee80211_tag_extended_capabilities_b94;
6123static int hf_ieee80211_tag_extended_capabilities_b95;
6124
6125static int hf_ieee80211_tag_extended_capabilities_b96;
6126static int hf_ieee80211_tag_extended_capabilities_b97;
6127static int hf_ieee80211_tag_extended_capabilities_b98;
6128static int hf_ieee80211_tag_extended_capabilities_b99;
6129static int hf_ieee80211_tag_extended_capabilities_b100;
6130static int hf_ieee80211_tag_extended_capabilities_b101;
6131static int hf_ieee80211_tag_extended_capabilities_b102;
6132static int hf_ieee80211_tag_extended_capabilities_b103;
6133static int hf_ieee80211_tag_extended_capabilities_b104;
6134static int hf_ieee80211_tag_extended_capabilities_b105;
6135static int hf_ieee80211_tag_extended_capabilities_reserved2;
6136
6137static int hf_ieee80211_tag_cisco_ccx1_unknown;
6138static int hf_ieee80211_tag_cisco_ccx1_name;
6139static int hf_ieee80211_tag_cisco_ccx1_clients;
6140static int hf_ieee80211_tag_cisco_ccx1_unknown2;
6141
6142static int hf_ieee80211_vs_cisco_ap_name_v2;
6143
6144static int hf_ieee80211_vht_cap;
6145static int hf_ieee80211_vht_max_mpdu_length;
6146static int hf_ieee80211_vht_supported_chan_width_set;
6147static int hf_ieee80211_vht_rx_ldpc;
6148static int hf_ieee80211_vht_short_gi_for_80;
6149static int hf_ieee80211_vht_short_gi_for_160;
6150static int hf_ieee80211_vht_tx_stbc;
6151static int hf_ieee80211_vht_rx_stbc;
6152static int hf_ieee80211_vht_su_beamformer_cap;
6153static int hf_ieee80211_vht_su_beamformee_cap;
6154static int hf_ieee80211_vht_beamformer_antennas;
6155static int hf_ieee80211_vht_sounding_dimensions;
6156static int hf_ieee80211_vht_mu_beamformer_cap;
6157static int hf_ieee80211_vht_mu_beamformee_cap;
6158static int hf_ieee80211_vht_txop_ps;
6159static int hf_ieee80211_vht_var_htc_field;
6160static int hf_ieee80211_vht_max_ampdu;
6161static int hf_ieee80211_vht_link_adaptation_cap;
6162static int hf_ieee80211_vht_rx_pattern;
6163static int hf_ieee80211_vht_tx_pattern;
6164static int hf_ieee80211_vht_ext_nss_bw_support;
6165
6166static int hf_ieee80211_vht_mcsset;
6167
6168static int hf_ieee80211_vht_mcsset_rx_mcs_map;
6169static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss;
6170static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss;
6171static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss;
6172static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss;
6173static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss;
6174static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss;
6175static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss;
6176static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss;
6177
6178static int hf_ieee80211_vht_mcsset_max_nsts_total;
6179static int hf_ieee80211_vht_mcsset_rx_highest_long_gi;
6180static int hf_ieee80211_vht_mcsset_extended_nss_bw_capable;
6181static int hf_ieee80211_vht_mcsset_reserved;
6182
6183static int hf_ieee80211_vht_mcsset_tx_mcs_map;
6184static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss;
6185static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss;
6186static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss;
6187static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss;
6188static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss;
6189static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss;
6190static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss;
6191static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss;
6192
6193static int hf_ieee80211_vht_op;
6194static int hf_ieee80211_vht_op_channel_width;
6195static int hf_ieee80211_vht_op_channel_center0;
6196static int hf_ieee80211_vht_op_channel_center1;
6197
6198static int hf_ieee80211_vht_op_basic_mcs_map;
6199static int hf_ieee80211_vht_op_max_basic_mcs_for_1_ss;
6200static int hf_ieee80211_vht_op_max_basic_mcs_for_2_ss;
6201static int hf_ieee80211_vht_op_max_basic_mcs_for_3_ss;
6202static int hf_ieee80211_vht_op_max_basic_mcs_for_4_ss;
6203static int hf_ieee80211_vht_op_max_basic_mcs_for_5_ss;
6204static int hf_ieee80211_vht_op_max_basic_mcs_for_6_ss;
6205static int hf_ieee80211_vht_op_max_basic_mcs_for_7_ss;
6206static int hf_ieee80211_vht_op_max_basic_mcs_for_8_ss;
6207static int hf_ieee80211_vht_mcsset_tx_highest_long_gi;
6208
6209static int hf_ieee80211_vht_tpe_pwr_info;
6210static int hf_ieee80211_vht_tpe_pwr_info_count;
6211static int hf_ieee80211_vht_tpe_pwr_info_unit;
6212static int hf_ieee80211_vht_tpe_pwr_info_category;
6213static int hf_ieee80211_vht_tpe_pwr_constr_20;
6214static int hf_ieee80211_vht_tpe_pwr_constr_40;
6215static int hf_ieee80211_vht_tpe_pwr_constr_80;
6216static int hf_ieee80211_vht_tpe_pwr_constr_160;
6217static int hf_ieee80211_vht_tpe_pwr_constr_320;
6218static int hf_ieee80211_vht_tpe_any_bw_psd;
6219static int hf_ieee80211_vht_tpe_psd;
6220static int hf_ieee80211_vht_tpe_ext_count;
6221static int hf_ieee80211_vht_tpe_ext_reserved;
6222
6223static int hf_ieee80211_beamform_feedback_seg_retrans_bitmap;
6224
6225static int hf_ieee80211_ndp_annc_token;
6226static int hf_ieee80211_ndp_annc_variant;
6227static int hf_ieee80211_ndp_annc_token_number;
6228static int hf_ieee80211_vht_ndp_annc_sta_info_aid12;
6229static int hf_ieee80211_vht_ndp_annc_sta_info_feedback_type;
6230static int hf_ieee80211_vht_ndp_annc_sta_info_nc_index;
6231static int hf_ieee80211_vht_ndp_annc_sta_info_reserved;
6232
6233static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008;
6234static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_aid11;
6235static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_ltf_offset;
6236static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_n_sts;
6237static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_rep;
6238static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_n_sts;
6239static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved1;
6240static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_disambiguation;
6241static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_rep;
6242static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved2;
6243
6244static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043;
6245static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_aid11;
6246static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_sac;
6247static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_disambiguation;
6248static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_reserved;
6249
6250static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044;
6251static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_aid11;
6252static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_partial_tsf;
6253static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_disambiguation;
6254static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_reserved;
6255static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_token;
6256
6257static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045;
6258static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_aid11;
6259static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_i2r_ndp_tx_power;
6260static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_r2i_ndp_target_rssi;
6261static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_disambiguation;
6262static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_reserved;
6263
6264
6265static int hf_ieee80211_ndp_eht_annc_sta_info;
6266static int hf_ieee80211_ndp_eht_annc_aid11;
6267static int hf_ieee80211_ndp_eht_annc_resolution;
6268static int hf_ieee80211_ndp_eht_annc_feedback_map;
6269static int hf_ieee80211_ndp_eht_annc_reserved1;
6270static int hf_ieee80211_ndp_eht_annc_nc_index;
6271static int hf_ieee80211_ndp_eht_annc_feedback_type;
6272static int hf_ieee80211_ndp_eht_annc_disambiguation;
6273static int hf_ieee80211_ndp_eht_annc_codebook_size;
6274static int hf_ieee80211_ndp_eht_annc_reserved2;
6275
6276static int hf_ieee80211_ff_vht_action;
6277static int hf_ieee80211_ff_vht_mimo_cntrl;
6278static int hf_ieee80211_ff_vht_mimo_cntrl_nc_index;
6279static int hf_ieee80211_ff_vht_mimo_cntrl_nr_index;
6280static int hf_ieee80211_ff_vht_mimo_cntrl_channel_width;
6281static int hf_ieee80211_ff_vht_mimo_cntrl_grouping;
6282static int hf_ieee80211_ff_vht_mimo_cntrl_codebook_info;
6283static int hf_ieee80211_ff_vht_mimo_cntrl_feedback_type;
6284static int hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg;
6285static int hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg;
6286static int hf_ieee80211_ff_vht_mimo_cntrl_reserved;
6287static int hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number;
6288
6289static int * const hf_ieee80211_ff_vht_mimo_cntrl_fields[] = {
6290 &hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
6291 &hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
6292 &hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
6293 &hf_ieee80211_ff_vht_mimo_cntrl_grouping,
6294 &hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
6295 &hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
6296 &hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
6297 &hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
6298 &hf_ieee80211_ff_vht_mimo_cntrl_reserved,
6299 &hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
6300 NULL((void*)0),
6301};
6302
6303static int hf_ieee80211_vht_compressed_beamforming_report;
6304static int hf_ieee80211_vht_compressed_beamforming_report_snr;
6305static int hf_ieee80211_vht_compressed_beamform_scidx;
6306static int hf_ieee80211_vht_group_id_management;
6307static int hf_ieee80211_vht_membership_status_array;
6308static int hf_ieee80211_vht_user_position_array;
6309static int hf_ieee80211_vht_operation_mode_notification;
6310static int hf_ieee80211_vht_membership_status_field;
6311static int hf_ieee80211_vht_user_position_field;
6312static int hf_ieee80211_vht_mu_exclusive_beamforming_report;
6313static int hf_ieee80211_vht_mu_exclusive_beamforming_delta_snr;
6314
6315static int hf_ieee80211_ff_he_action;
6316static int hf_ieee80211_ff_protected_he_action;
6317static int hf_ieee80211_ff_protected_ftm_action;
6318static int hf_ieee80211_ff_eht_action;
6319static int hf_ieee80211_ff_protected_eht_action;
6320static int hf_ieee80211_he_mimo_control_nc_index;
6321static int hf_ieee80211_he_mimo_control_nr_index;
6322static int hf_ieee80211_he_mimo_control_bw;
6323static int hf_ieee80211_he_mimo_control_grouping;
6324static int hf_ieee80211_he_mimo_control_codebook_info;
6325static int hf_ieee80211_he_mimo_control_feedback_type;
6326static int hf_ieee80211_he_mimo_control_remaining_feedback_segs;
6327static int hf_ieee80211_he_mimo_control_first_feedback_seg;
6328static int hf_ieee80211_he_mimo_control_ru_start_index;
6329static int hf_ieee80211_he_mimo_control_ru_end_index;
6330static int hf_ieee80211_he_mimo_control_sounding_dialog_token_num;
6331static int hf_ieee80211_he_mimo_control_reserved;
6332static int hf_ieee80211_he_mimo_control_field;
6333static int hf_ieee80211_he_compressed_beamforming_report_snr;
6334static int hf_ieee80211_he_compressed_beamform_scidx;
6335static int hf_ieee80211_he_beamforming_report_len;
6336
6337static int hf_ieee80211_tag_neighbor_report_bssid;
6338static int hf_ieee80211_tag_neighbor_report_bssid_info;
6339static int hf_ieee80211_tag_neighbor_report_bssid_info_reachability;
6340static int hf_ieee80211_tag_neighbor_report_bssid_info_security;
6341static int hf_ieee80211_tag_neighbor_report_bssid_info_key_scope;
6342static int hf_ieee80211_tag_neighbor_report_bssid_info_capability;
6343static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng;
6344static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos;
6345static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd;
6346static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt;
6347static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b4;
6348static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b5;
6349static int hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain;
6350static int hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput;
6351static int hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput;
6352static int hf_ieee80211_tag_neighbor_report_bssid_info_ftm;
6353static int hf_ieee80211_tag_neighbor_report_bssid_info_high_efficiency;
6354static int hf_ieee80211_tag_neighbor_report_bssid_info_er_bss;
6355static int hf_ieee80211_tag_neighbor_report_bssid_info_colocated_ap;
6356static int hf_ieee80211_tag_neighbor_report_bssid_info_unsolicited_probe_responses_active;
6357static int hf_ieee80211_tag_neighbor_report_bssid_info_ess_with_colocated_ap;
6358static int hf_ieee80211_tag_neighbor_report_bssid_info_oct_supported_with_reporting_ap;
6359static int hf_ieee80211_tag_neighbor_report_bssid_info_colocated_6ghz_ap;
6360static int hf_ieee80211_tag_neighbor_report_bssid_info_eht;
6361static int hf_ieee80211_tag_neighbor_report_bssid_info_dmg_positioning;
6362static int hf_ieee80211_tag_neighbor_report_bssid_info_reserved;
6363static int hf_ieee80211_tag_neighbor_report_ope_class;
6364static int hf_ieee80211_tag_neighbor_report_channel_number;
6365static int hf_ieee80211_tag_neighbor_report_phy_type;
6366static int hf_ieee80211_tag_neighbor_report_subelement_id;
6367static int hf_ieee80211_tag_neighbor_report_subelement_length;
6368static int hf_ieee80211_tag_neighbor_report_subelement_data;
6369static int hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref;
6370static int hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf;
6371static int hf_ieee80211_tag_neighbor_report_subelement_bss_dur;
6372static int hf_ieee80211_tag_neighbor_report_subelement_tsf_offset;
6373static int hf_ieee80211_tag_neighbor_report_subelement_beacon_interval;
6374static int hf_ieee80211_tag_neighbor_report_subelement_country_code;
6375static int hf_ieee80211_tag_supported_ope_classes_current;
6376static int hf_ieee80211_tag_supported_ope_classes_alternate;
6377
6378static int hf_ieee80211_tag_dirn_meas_results_aoa_results;
6379static int hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth;
6380static int hf_ieee80211_tag_ftm_aoa_results_aoa_elevation;
6381static int hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth_accuracy;
6382static int hf_ieee80211_tag_ftm_aoa_results_aoa_elevation_accuracy;
6383static int hf_ieee80211_tag_ftm_aoa_results_best_awv_id;
6384static int hf_ieee80211_tag_ftm_aoa_results_aoa_reference;
6385static int hf_ieee80211_tag_ftm_aoa_results_reserved;
6386
6387/* IEEE Std 802.11r-2008 7.3.2.47 */
6388static int hf_ieee80211_tag_mobility_domain_mdid;
6389static int hf_ieee80211_tag_mobility_domain_ft_capab;
6390static int hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds;
6391static int hf_ieee80211_tag_mobility_domain_ft_capab_resource_req;
6392static int hf_ieee80211_tag_mobility_domain_ft_capab_reserved;
6393static int * const ieee80211_tag_mobility_domain_ft_capab_fields[] = {
6394 &hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
6395 &hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
6396 &hf_ieee80211_tag_mobility_domain_ft_capab_reserved,
6397 NULL((void*)0)
6398};
6399
6400/* IEEE Std 802.11r-2008 7.3.2.48 */
6401static int hf_ieee80211_tag_ft_mic_control;
6402static int hf_ieee80211_tag_ft_mic_control_rsnxe_used;
6403static int hf_ieee80211_tag_ft_mic_control_mic_length;
6404static int hf_ieee80211_tag_ft_mic_control_reserved;
6405static int hf_ieee80211_tag_ft_mic_control_element_count;
6406static int * const ieee80211_tag_ft_mic_control_fields[] = {
6407 &hf_ieee80211_tag_ft_mic_control_rsnxe_used,
6408 &hf_ieee80211_tag_ft_mic_control_mic_length,
6409 &hf_ieee80211_tag_ft_mic_control_reserved,
6410 &hf_ieee80211_tag_ft_mic_control_element_count,
6411 NULL((void*)0)
6412};
6413static int hf_ieee80211_tag_ft_mic;
6414static int hf_ieee80211_tag_ft_anonce;
6415static int hf_ieee80211_tag_ft_snonce;
6416static int hf_ieee80211_tag_ft_subelem_id;
6417static int hf_ieee80211_tag_ft_subelem_len;
6418static int hf_ieee80211_tag_ft_subelem_data;
6419static int hf_ieee80211_tag_ft_subelem_r1kh_id;
6420static int hf_ieee80211_tag_ft_subelem_gtk_key_info;
6421static int hf_ieee80211_tag_ft_subelem_gtk_key_id;
6422static int hf_ieee80211_tag_ft_subelem_gtk_key_length;
6423static int hf_ieee80211_tag_ft_subelem_gtk_rsc;
6424static int hf_ieee80211_tag_ft_subelem_gtk_key;
6425static int hf_ieee80211_tag_ft_subelem_gtk_key_encrypted;
6426static int hf_ieee80211_tag_ft_subelem_r0kh_id;
6427static int hf_ieee80211_tag_ft_subelem_igtk_key_id;
6428static int hf_ieee80211_tag_ft_subelem_igtk_ipn;
6429static int hf_ieee80211_tag_ft_subelem_igtk_key_length;
6430static int hf_ieee80211_tag_ft_subelem_igtk_key;
6431static int hf_ieee80211_tag_ft_subelem_oci_op_class;
6432static int hf_ieee80211_tag_ft_subelem_oci_prim_chan_num;
6433static int hf_ieee80211_tag_ft_subelem_oci_freq_seg_1;
6434static int hf_ieee80211_tag_ft_subelem_oci_oct_op_class;
6435static int hf_ieee80211_tag_ft_subelem_oci_oct_prim_chan_num;
6436static int hf_ieee80211_tag_ft_subelem_oci_oct_freq_seg_1;
6437static int hf_ieee80211_tag_ft_subelem_bigtk_key_id;
6438static int hf_ieee80211_tag_ft_subelem_bigtk_bipn;
6439static int hf_ieee80211_tag_ft_subelem_bigtk_key_length;
6440static int hf_ieee80211_tag_ft_subelem_bigtk_key;
6441static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key_info;
6442static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key_id;
6443static int hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id_info;
6444static int hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id;
6445static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key_length;
6446static int hf_ieee80211_tag_ft_subelem_mlo_gtk_rsc;
6447static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key;
6448static int hf_ieee80211_tag_ft_subelem_mlo_igtk_key_id;
6449static int hf_ieee80211_tag_ft_subelem_mlo_igtk_ipn;
6450static int hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id_info;
6451static int hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id;
6452static int hf_ieee80211_tag_ft_subelem_mlo_igtk_key_length;
6453static int hf_ieee80211_tag_ft_subelem_mlo_igtk_key;
6454static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_id;
6455static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_bipn;
6456static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id_info;
6457static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id;
6458static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_length;
6459static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_key;
6460
6461/* IEEE Std 802.11-2012: 11r 8.4.2.52 */
6462static int hf_ieee80211_tag_ric_data_id;
6463static int hf_ieee80211_tag_ric_data_desc_cnt;
6464static int hf_ieee80211_tag_ric_data_status_code;
6465
6466/* IEEE Std 802.11-2012: 11r 8.4.2.53 */
6467static int hf_ieee80211_tag_ric_desc_rsrc_type;
6468static int hf_ieee80211_tag_ric_desc_var_params;
6469
6470/* IEEE Std 802.11w-2009 7.3.2.55 */
6471static int hf_ieee80211_tag_mmie_keyid;
6472static int hf_ieee80211_tag_mmie_ipn;
6473static int hf_ieee80211_tag_mmie_mic;
6474
6475/* IEEE Std 802.11-2016: 9.4.2.72 */
6476static int hf_ieee80211_tag_no_bssid_capability_dmg_bss_control;
6477static int hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_type;
6478static int hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_reserved;
6479
6480/* IEEE Std 802.11-2016: 9.4.2.74 */
6481static int hf_ieee80211_tag_multiple_bssid_index_bssid_index;
6482static int hf_ieee80211_tag_multiple_bssid_index_dtim_period;
6483static int hf_ieee80211_tag_multiple_bssid_index_dtim_count;
6484
6485/* IEEE Std 802.11-2012: 8.4.2.61 */
6486static int hf_ieee80211_tag_obss_spd;
6487static int hf_ieee80211_tag_obss_sad;
6488static int hf_ieee80211_tag_obss_cwtsi;
6489static int hf_ieee80211_tag_obss_sptpc;
6490static int hf_ieee80211_tag_obss_satpc;
6491static int hf_ieee80211_tag_obss_wctdf;
6492static int hf_ieee80211_tag_obss_sat;
6493
6494/* IEEE Std 802.11-2012: 8.4.2.25.1 */
6495static int hf_ieee80211_group_data_cipher_suite_oui;
6496static int hf_ieee80211_group_data_cipher_suite_type;
6497static int hf_ieee80211_osen_pairwise_cipher_suite_oui;
6498static int hf_ieee80211_osen_pairwise_cipher_suite_type;
6499static int hf_ieee80211_osen_pcs_count;
6500static int hf_ieee80211_osen_akm_count;
6501static int hf_ieee80211_osen_akm_cipher_suite_oui;
6502static int hf_ieee80211_osen_akm_cipher_suite_type;
6503static int hf_ieee80211_osen_rsn_cap_preauth;
6504static int hf_ieee80211_osen_rsn_cap_no_pairwise;
6505static int hf_ieee80211_osen_rsn_cap_ptksa_replay_counter;
6506static int hf_ieee80211_osen_rsn_cap_gtksa_replay_counter;
6507static int hf_ieee80211_osen_rsn_cap_mfpr;
6508static int hf_ieee80211_osen_rsn_cap_mfpc;
6509static int hf_ieee80211_osen_rsn_cap_jmr;
6510static int hf_ieee80211_osen_rsn_cap_peerkey;
6511static int hf_ieee80211_osen_rsn_spp_a_msdu_capable;
6512static int hf_ieee80211_osen_rsn_spp_a_msdu_required;
6513static int hf_ieee80211_osen_rsn_pbac;
6514static int hf_ieee80211_osen_extended_key_id_iaf;
6515static int hf_ieee80211_osen_reserved;
6516static int hf_ieee80211_osen_rsn_cap_flags;
6517static int hf_ieee80211_osen_pmkid_count;
6518static int hf_ieee80211_osen_pmkid;
6519static int hf_ieee80211_osen_group_management_cipher_suite_oui;
6520static int hf_ieee80211_osen_group_management_cipher_suite_type;
6521
6522/*WAPI-Specification 7.3.2.25 : WAPI Parameter Set*/
6523static int hf_ieee80211_tag_wapi_param_set_version;
6524
6525static int hf_ieee80211_tag_wapi_param_set_akm_suite_count;
6526static int hf_ieee80211_tag_wapi_param_set_akm_suite_oui;
6527static int hf_ieee80211_tag_wapi_param_set_akm_suite_type;
6528
6529static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count;
6530static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui;
6531static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type;
6532
6533static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui;
6534static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type;
6535
6536static int hf_ieee80211_tag_wapi_param_set_capab;
6537static int hf_ieee80211_tag_wapi_param_set_capab_preauth;
6538static int hf_ieee80211_tag_wapi_param_set_capab_rsvd;
6539static int hf_ieee80211_tag_wapi_param_set_bkid_count;
6540static int hf_ieee80211_tag_wapi_param_set_bkid_list;
6541
6542/* IEEE Std 802.11v-2011 7.3.2.61 */
6543static int hf_ieee80211_tag_time_adv_timing_capab;
6544static int hf_ieee80211_tag_time_adv_time_value;
6545static int hf_ieee80211_tag_time_adv_time_value_year;
6546static int hf_ieee80211_tag_time_adv_time_value_month;
6547static int hf_ieee80211_tag_time_adv_time_value_day;
6548static int hf_ieee80211_tag_time_adv_time_value_hours;
6549static int hf_ieee80211_tag_time_adv_time_value_minutes;
6550static int hf_ieee80211_tag_time_adv_time_value_seconds;
6551static int hf_ieee80211_tag_time_adv_time_value_milliseconds;
6552static int hf_ieee80211_tag_time_adv_time_value_reserved;
6553static int hf_ieee80211_tag_time_adv_time_error;
6554static int hf_ieee80211_tag_time_adv_time_update_counter;
6555
6556/* IEEE Std 802.11-2012 8.4.2.81 */
6557static int hf_ieee80211_tag_bss_max_idle_period;
6558static int hf_ieee80211_tag_bss_max_idle_options;
6559static int hf_ieee80211_tag_bss_max_idle_options_protected;
6560static int hf_ieee80211_tag_bss_idle_options_reserved;
6561
6562/* IEEE Std 802.11-2012 8.4.2.82 */
6563static int hf_ieee80211_tag_tfs_request_id;
6564static int hf_ieee80211_tag_tfs_request_ac_delete_after_match;
6565static int hf_ieee80211_tag_tfs_request_ac_notify;
6566static int hf_ieee80211_tag_tfs_request_subelem_id;
6567static int hf_ieee80211_tag_tfs_request_subelem_len;
6568static int hf_ieee80211_tag_tfs_request_subelem;
6569
6570/* IEEE Std 802.11-2012 8.4.2.83 */
6571static int hf_ieee80211_tag_tfs_response_subelem_id;
6572static int hf_ieee80211_tag_tfs_response_subelem_len;
6573static int hf_ieee80211_tag_tfs_response_subelem;
6574static int hf_ieee80211_tag_tfs_response_status;
6575static int hf_ieee80211_tag_tfs_response_id;
6576
6577/* IEEE Std 802.11-2012 8.4.2.84 */
6578static int hf_ieee80211_tag_wnm_sleep_mode_action_type;
6579static int hf_ieee80211_tag_wnm_sleep_mode_response_status;
6580static int hf_ieee80211_tag_wnm_sleep_mode_interval;
6581
6582static int hf_ieee80211_wnm_sub_elt_id;
6583static int hf_ieee80211_wnm_sub_elt_len;
6584
6585/* IEEE Std 802.11v-2011 7.3.2.87 */
6586static int hf_ieee80211_tag_time_zone;
6587
6588/* IEEE Std 802.11u-2011 7.3.2.92 */
6589static int hf_ieee80211_tag_interworking_access_network_type;
6590static int hf_ieee80211_tag_interworking_internet;
6591static int hf_ieee80211_tag_interworking_asra;
6592static int hf_ieee80211_tag_interworking_esr;
6593static int hf_ieee80211_tag_interworking_uesa;
6594static int hf_ieee80211_tag_interworking_hessid;
6595
6596/* IEEE Std 802.11-2012, 8.4.2.97 */
6597static int hf_ieee80211_tag_qos_map_set_dscp_exc;
6598static int hf_ieee80211_tag_qos_map_set_dscp_exc_val;
6599static int hf_ieee80211_tag_qos_map_set_dscp_exc_up;
6600static int hf_ieee80211_tag_qos_map_set_range;
6601static int hf_ieee80211_tag_qos_map_set_low;
6602static int hf_ieee80211_tag_qos_map_set_high;
6603
6604/* IEEE Std 802.11u-2011 7.3.2.93 */
6605static int hf_ieee80211_tag_adv_proto_resp_len_limit;
6606static int hf_ieee80211_tag_adv_proto_pame_bi;
6607static int hf_ieee80211_tag_adv_proto_id;
6608static int hf_ieee80211_tag_adv_vs_len;
6609/* static int hf_ieee80211_tag_adv_proto_vs_info; */
6610
6611/* IEEE Std 802.11u-2011 7.3.2.96 */
6612static int hf_ieee80211_tag_roaming_consortium_num_anqp_oi;
6613static int hf_ieee80211_tag_roaming_consortium_oi1_len;
6614static int hf_ieee80211_tag_roaming_consortium_oi2_len;
6615static int hf_ieee80211_tag_roaming_consortium_oi1;
6616static int hf_ieee80211_tag_roaming_consortium_oi2;
6617static int hf_ieee80211_tag_roaming_consortium_oi3;
6618
6619/* 802.11n 7.3.2.48 */
6620static int hf_ieee80211_hta_cc;
6621static int hf_ieee80211_hta_cap1;
6622static int hf_ieee80211_hta_cap2;
6623static int hf_ieee80211_hta_ext_chan_offset;
6624static int hf_ieee80211_hta_rec_tx_width;
6625static int hf_ieee80211_hta_rifs_mode;
6626static int hf_ieee80211_hta_controlled_access;
6627static int hf_ieee80211_hta_service_interval;
6628static int hf_ieee80211_hta_operating_mode;
6629static int hf_ieee80211_hta_non_gf_devices;
6630static int hf_ieee80211_hta_basic_stbc_mcs;
6631static int hf_ieee80211_hta_dual_stbc_protection;
6632static int hf_ieee80211_hta_secondary_beacon;
6633static int hf_ieee80211_hta_lsig_txop_protection;
6634static int hf_ieee80211_hta_pco_active;
6635static int hf_ieee80211_hta_pco_phase;
6636
6637static int hf_ieee80211_antsel;
6638static int hf_ieee80211_antsel_vs;
6639static int hf_ieee80211_antsel_b0;
6640static int hf_ieee80211_antsel_b1;
6641static int hf_ieee80211_antsel_b2;
6642static int hf_ieee80211_antsel_b3;
6643static int hf_ieee80211_antsel_b4;
6644static int hf_ieee80211_antsel_b5;
6645static int hf_ieee80211_antsel_b6;
6646static int hf_ieee80211_antsel_b7;
6647
6648static int hf_ieee80211_rsn_version;
6649static int hf_ieee80211_rsn_gcs;
6650static int hf_ieee80211_rsn_gcs_oui;
6651static int hf_ieee80211_rsn_gcs_type;
6652static int hf_ieee80211_rsn_gcs_80211_type;
6653static int hf_ieee80211_rsn_pcs_count;
6654static int hf_ieee80211_rsn_pcs_list;
6655static int hf_ieee80211_rsn_pcs;
6656static int hf_ieee80211_rsn_pcs_oui;
6657static int hf_ieee80211_rsn_pcs_80211_type;
6658static int hf_ieee80211_rsn_pcs_type;
6659static int hf_ieee80211_rsn_akms_count;
6660static int hf_ieee80211_rsn_akms_list;
6661static int hf_ieee80211_rsn_akms;
6662static int hf_ieee80211_rsn_akms_oui;
6663static int hf_ieee80211_rsn_akms_80211_type;
6664static int hf_ieee80211_rsn_akms_type;
6665static int hf_ieee80211_rsn_cap;
6666static int hf_ieee80211_rsn_cap_preauth;
6667static int hf_ieee80211_rsn_cap_no_pairwise;
6668static int hf_ieee80211_rsn_cap_ptksa_replay_counter;
6669static int hf_ieee80211_rsn_cap_gtksa_replay_counter;
6670static int hf_ieee80211_rsn_cap_mfpr;
6671static int hf_ieee80211_rsn_cap_mfpc;
6672static int hf_ieee80211_rsn_cap_jmr;
6673static int hf_ieee80211_rsn_cap_peerkey;
6674static int hf_ieee80211_rsn_cap_spp_amsdu_cap;
6675static int hf_ieee80211_rsn_cap_spp_amsdu_req;
6676static int hf_ieee80211_rsn_cap_pbac;
6677static int hf_ieee80211_rsn_cap_extended_key_id_iaf;
6678static int hf_ieee80211_rsn_cap_ocvc;
6679static int hf_ieee80211_rsn_pmkid_count;
6680static int hf_ieee80211_rsn_pmkid_list;
6681static int hf_ieee80211_rsn_pmkid;
6682static int hf_ieee80211_rsn_gmcs;
6683static int hf_ieee80211_rsn_gmcs_oui;
6684static int hf_ieee80211_rsn_gmcs_type;
6685static int hf_ieee80211_rsn_gmcs_80211_type;
6686
6687static int hf_ieee80211_wfa_ie_type;
6688static int hf_ieee80211_wfa_ie_wpa_version;
6689static int hf_ieee80211_wfa_ie_wpa_mcs;
6690static int hf_ieee80211_wfa_ie_wpa_mcs_oui;
6691static int hf_ieee80211_wfa_ie_wpa_mcs_type;
6692static int hf_ieee80211_wfa_ie_wpa_mcs_wfa_type;
6693static int hf_ieee80211_wfa_ie_wpa_ucs_count;
6694static int hf_ieee80211_wfa_ie_wpa_ucs_list;
6695static int hf_ieee80211_wfa_ie_wpa_ucs;
6696static int hf_ieee80211_wfa_ie_wpa_ucs_oui;
6697static int hf_ieee80211_wfa_ie_wpa_ucs_wfa_type;
6698static int hf_ieee80211_wfa_ie_wpa_ucs_type;
6699static int hf_ieee80211_wfa_ie_wpa_akms_count;
6700static int hf_ieee80211_wfa_ie_wpa_akms_list;
6701static int hf_ieee80211_wfa_ie_wpa_akms;
6702static int hf_ieee80211_wfa_ie_wpa_akms_oui;
6703static int hf_ieee80211_wfa_ie_wpa_akms_wfa_type;
6704static int hf_ieee80211_wfa_ie_wpa_akms_type;
6705static int hf_ieee80211_wfa_ie_wme_subtype;
6706static int hf_ieee80211_wfa_ie_wme_version;
6707static int hf_ieee80211_wfa_ie_wme_qos_info;
6708static int hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length;
6709static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be;
6710static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk;
6711static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi;
6712static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo;
6713static int hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved;
6714static int hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd;
6715static int hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count;
6716static int hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved;
6717static int hf_ieee80211_wfa_ie_wme_reserved;
6718static int hf_ieee80211_wfa_ie_wme_ac_parameters;
6719static int hf_ieee80211_wfa_ie_wme_acp_aci_aifsn;
6720static int hf_ieee80211_wfa_ie_wme_acp_aci_be;
6721static int hf_ieee80211_wfa_ie_wme_acp_acm_be;
6722static int hf_ieee80211_wfa_ie_wme_acp_aifsn_be;
6723static int hf_ieee80211_wfa_ie_wme_acp_reserved_be;
6724static int hf_ieee80211_wfa_ie_wme_acp_aci_bk;
6725static int hf_ieee80211_wfa_ie_wme_acp_acm_bk;
6726static int hf_ieee80211_wfa_ie_wme_acp_aifsn_bk;
6727static int hf_ieee80211_wfa_ie_wme_acp_reserved_bk;
6728static int hf_ieee80211_wfa_ie_wme_acp_aci_vi;
6729static int hf_ieee80211_wfa_ie_wme_acp_acm_vi;
6730static int hf_ieee80211_wfa_ie_wme_acp_aifsn_vi;
6731static int hf_ieee80211_wfa_ie_wme_acp_reserved_vi;
6732static int hf_ieee80211_wfa_ie_wme_acp_aci_vo;
6733static int hf_ieee80211_wfa_ie_wme_acp_acm_vo;
6734static int hf_ieee80211_wfa_ie_wme_acp_aifsn_vo;
6735static int hf_ieee80211_wfa_ie_wme_acp_reserved_vo;
6736static int hf_ieee80211_wfa_ie_wme_acp_ecw;
6737static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_be;
6738static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_bk;
6739static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_vo;
6740static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_vi;
6741static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_be;
6742static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_bk;
6743static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_vo;
6744static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_vi;
6745static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_be;
6746static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_bk;
6747static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_vo;
6748static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_vi;
6749static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo;
6750static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid;
6751static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction;
6752static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb;
6753static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up;
6754static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved;
6755static int hf_ieee80211_wfa_ie_wme_tspec_nor_msdu;
6756static int hf_ieee80211_wfa_ie_wme_tspec_max_msdu;
6757static int hf_ieee80211_wfa_ie_wme_tspec_min_srv;
6758static int hf_ieee80211_wfa_ie_wme_tspec_max_srv;
6759static int hf_ieee80211_wfa_ie_wme_tspec_inact_int;
6760static int hf_ieee80211_wfa_ie_wme_tspec_susp_int;
6761static int hf_ieee80211_wfa_ie_wme_tspec_srv_start;
6762static int hf_ieee80211_wfa_ie_wme_tspec_min_data;
6763static int hf_ieee80211_wfa_ie_wme_tspec_mean_data;
6764static int hf_ieee80211_wfa_ie_wme_tspec_peak_data;
6765static int hf_ieee80211_wfa_ie_wme_tspec_burst_size;
6766static int hf_ieee80211_wfa_ie_wme_tspec_delay_bound;
6767static int hf_ieee80211_wfa_ie_wme_tspec_min_phy;
6768static int hf_ieee80211_wfa_ie_wme_tspec_surplus;
6769static int hf_ieee80211_wfa_ie_wme_tspec_medium;
6770static int hf_ieee80211_wfa_ie_nc_cost_level;
6771static int hf_ieee80211_wfa_ie_nc_reserved;
6772static int hf_ieee80211_wfa_ie_nc_cost_flags;
6773static int hf_ieee80211_wfa_ie_tethering_type;
6774static int hf_ieee80211_wfa_ie_tethering_mac_length;
6775static int hf_ieee80211_wfa_ie_tethering_mac;
6776static int hf_ieee80211_wfa_ie_owe_bssid;
6777static int hf_ieee80211_wfa_ie_owe_ssid_length;
6778static int hf_ieee80211_wfa_ie_owe_ssid;
6779static int hf_ieee80211_wfa_ie_owe_band_info;
6780static int hf_ieee80211_wfa_ie_owe_channel_info;
6781static int hf_ieee80211_wfa_ie_mbo_oce_attr;
6782static int hf_ieee80211_wfa_ie_mbo_oce_attr_id;
6783static int hf_ieee80211_wfa_ie_mbo_oce_attr_len;
6784static int hf_ieee80211_wfa_ie_mbo_ap_cap;
6785static int hf_ieee80211_wfa_ie_mbo_ap_cap_cell;
6786static int hf_ieee80211_wfa_ie_mbo_ap_cap_reserved;
6787static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class;
6788static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan;
6789static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref;
6790static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason;
6791static int hf_ieee80211_wfa_ie_mbo_cellular_cap;
6792static int hf_ieee80211_wfa_ie_mbo_assoc_disallow_reason;
6793static int hf_ieee80211_wfa_ie_mbo_cellular_pref;
6794static int hf_ieee80211_wfa_ie_mbo_transition_reason;
6795static int hf_ieee80211_wfa_ie_mbo_transition_rej_reason;
6796static int hf_ieee80211_wfa_ie_mbo_assoc_retry_delay;
6797static int hf_ieee80211_wfa_ie_oce_cap_ctrl;
6798static int hf_ieee80211_wfa_ie_oce_cap_release;
6799static int hf_ieee80211_wfa_ie_oce_cap_sta_cfon;
6800static int hf_ieee80211_wfa_ie_oce_cap_11b_only_ap;
6801static int hf_ieee80211_wfa_ie_oce_cap_hlp;
6802static int hf_ieee80211_wfa_ie_oce_cap_non_oce_ap;
6803static int hf_ieee80211_wfa_ie_oce_cap_reserved;
6804static int hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delta;
6805static int hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delay;
6806static int hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap;
6807static int hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_downlink;
6808static int hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_uplink;
6809static int hf_ieee80211_wfa_ie_oce_rnr_completeness_short_ssid;
6810static int hf_ieee80211_wfa_ie_oce_probe_suppr_bssid;
6811static int hf_ieee80211_wfa_ie_oce_probe_suppr_ssid;
6812static int hf_ieee80211_wfa_anqp_mbo_subtype;
6813static int hf_ieee80211_wfa_anqp_mbo_query;
6814static int hf_ieee80211_wfa_anqp_mbo_cellular_pref;
6815static int hf_ieee80211_wfa_ie_transition_disable_bitmap;
6816static int hf_ieee80211_wfa_ie_transition_disable_wpa3_personal;
6817static int hf_ieee80211_wfa_ie_transition_disable_sae_pk;
6818static int hf_ieee80211_wfa_ie_transition_disable_wpa3_enterprise;
6819static int hf_ieee80211_wfa_ie_transition_disable_enhanced_open;
6820static int hf_ieee80211_wfa_ie_transition_disable_reserved_b4thru7;
6821static int hf_ieee80211_wfa_ie_transition_disable_reserved;
6822
6823static int hf_ieee80211_aironet_ie_type;
6824static int hf_ieee80211_aironet_ie_dtpc;
6825static int hf_ieee80211_aironet_ie_dtpc_unknown;
6826static int hf_ieee80211_aironet_ie_version;
6827static int hf_ieee80211_aironet_ie_data;
6828static int hf_ieee80211_aironet_ie_qos_reserved;
6829static int hf_ieee80211_aironet_ie_qos_paramset;
6830static int hf_ieee80211_aironet_ie_qos_val;
6831static int hf_ieee80211_aironet_ie_clientmfp;
6832
6833static int hf_ieee80211_vs_sgdsn_tag;
6834static int hf_ieee80211_vs_sgdsn_type;
6835static int hf_ieee80211_vs_sgdsn_length;
6836static int hf_ieee80211_vs_sgdsn_version;
6837static int hf_ieee80211_vs_sgdsn_icaomfrcode;
6838static int hf_ieee80211_vs_sgdsn_manufacturer;
6839static int hf_ieee80211_vs_sgdsn_model;
6840static int hf_ieee80211_vs_sgdsn_serialnumber;
6841static int hf_ieee80211_vs_sgdsn_serialnumber_len;
6842static int hf_ieee80211_vs_sgdsn_gpscoord;
6843static int hf_ieee80211_vs_sgdsn_altitude;
6844static int hf_ieee80211_vs_sgdsn_speed;
6845static int hf_ieee80211_vs_sgdsn_heading;
6846
6847static int hf_ieee80211_vs_nintendo_type;
6848static int hf_ieee80211_vs_nintendo_length;
6849static int hf_ieee80211_vs_nintendo_servicelist;
6850static int hf_ieee80211_vs_nintendo_service;
6851static int hf_ieee80211_vs_nintendo_consoleid;
6852static int hf_ieee80211_vs_nintendo_unknown;
6853
6854static int hf_ieee80211_vs_aruba_subtype;
6855static int hf_ieee80211_vs_aruba_apname;
6856static int hf_ieee80211_vs_aruba_data;
6857static int hf_ieee80211_vs_aruba_gps_length;
6858static int hf_ieee80211_vs_aruba_gps_subversion;
6859static int hf_ieee80211_vs_aruba_gps_hop;
6860static int hf_ieee80211_vs_aruba_gps_latitude;
6861static int hf_ieee80211_vs_aruba_gps_longitude;
6862static int hf_ieee80211_vs_aruba_gps_major_axis;
6863static int hf_ieee80211_vs_aruba_gps_minor_axis;
6864static int hf_ieee80211_vs_aruba_gps_orientation;
6865static int hf_ieee80211_vs_aruba_gps_distance;
6866
6867static int hf_ieee80211_vs_routerboard_unknown;
6868static int hf_ieee80211_vs_routerboard_subitem;
6869static int hf_ieee80211_vs_routerboard_subtype;
6870static int hf_ieee80211_vs_routerboard_sublength;
6871static int hf_ieee80211_vs_routerboard_subdata;
6872static int hf_ieee80211_vs_routerboard_subtype1_prefix;
6873static int hf_ieee80211_vs_routerboard_subtype1_data;
6874
6875static int hf_ieee80211_vs_meru_subitem;
6876static int hf_ieee80211_vs_meru_subtype;
6877static int hf_ieee80211_vs_meru_sublength;
6878static int hf_ieee80211_vs_meru_subdata;
6879
6880static int hf_ieee80211_vs_extreme_subtype;
6881static int hf_ieee80211_vs_extreme_subdata;
6882static int hf_ieee80211_vs_extreme_unknown;
6883static int hf_ieee80211_vs_extreme_ap_length;
6884static int hf_ieee80211_vs_extreme_ap_name;
6885
6886static int hf_ieee80211_vs_aerohive_version;
6887static int hf_ieee80211_vs_aerohive_subtype;
6888static int hf_ieee80211_vs_aerohive_hostname_length;
6889static int hf_ieee80211_vs_aerohive_hostname;
6890static int hf_ieee80211_vs_aerohive_data;
6891
6892static int hf_ieee80211_vs_mist_ap_name;
6893static int hf_ieee80211_vs_mist_data;
6894
6895static int hf_ieee80211_vs_ruckus_ap_name;
6896static int hf_ieee80211_vs_ruckus_data;
6897
6898static int hf_ieee80211_vs_alcatel_ap_name;
6899static int hf_ieee80211_vs_alcatel_data;
6900
6901static int hf_ieee80211_vs_fortinet_subtype;
6902static int hf_ieee80211_vs_fortinet_system_type;
6903static int hf_ieee80211_vs_fortinet_system_length;
6904static int hf_ieee80211_vs_fortinet_system_apname;
6905static int hf_ieee80211_vs_fortinet_system_apmodel;
6906static int hf_ieee80211_vs_fortinet_system_apserial;
6907static int hf_ieee80211_vs_fortinet_data;
6908
6909static int hf_ieee80211_vs_arista_subtype;
6910static int hf_ieee80211_vs_arista_apname;
6911static int hf_ieee80211_vs_arista_data;
6912
6913static int hf_ieee80211_vs_wisun_type;
6914static int hf_ieee80211_vs_wisun_ptkid;
6915static int hf_ieee80211_vs_wisun_gtkl;
6916static int hf_ieee80211_vs_wisun_gtkl_gtk0;
6917static int hf_ieee80211_vs_wisun_gtkl_gtk1;
6918static int hf_ieee80211_vs_wisun_gtkl_gtk2;
6919static int hf_ieee80211_vs_wisun_gtkl_gtk3;
6920static int hf_ieee80211_vs_wisun_nr;
6921static int hf_ieee80211_vs_wisun_lgtkl;
6922static int hf_ieee80211_vs_wisun_lgtkl_lgtk0;
6923static int hf_ieee80211_vs_wisun_lgtkl_lgtk1;
6924static int hf_ieee80211_vs_wisun_lgtkl_lgtk2;
6925static int hf_ieee80211_vs_wisun_lgtk_key_id;
6926static int hf_ieee80211_vs_wisun_lgtk_lgtk;
6927static int hf_ieee80211_vs_wisun_data;
6928
6929static int hf_ieee80211_vs_apple_type;
6930static int hf_ieee80211_vs_apple_subtype;
6931static int hf_ieee80211_vs_apple_length;
6932static int hf_ieee80211_vs_apple_data;
6933
6934static int hf_ieee80211_vs_ubiquiti_type;
6935static int hf_ieee80211_vs_ubiquiti_ap_name;
6936static int hf_ieee80211_vs_ubiquiti_data;
6937
6938static int hf_ieee80211_rsn_ie_ptk_keyid;
6939
6940static int hf_ieee80211_rsn_ie_gtk_kde_data_type;
6941static int hf_ieee80211_rsn_ie_gtk_kde_key_id;
6942static int hf_ieee80211_rsn_ie_gtk_kde_tx;
6943static int hf_ieee80211_rsn_ie_gtk_kde_reserved1;
6944static int hf_ieee80211_rsn_ie_gtk_kde_reserved2;
6945static int hf_ieee80211_rsn_ie_gtk_kde_gtk;
6946
6947static int hf_ieee80211_rsn_ie_mac_address_kde_mac;
6948
6949static int hf_ieee80211_rsn_ie_pmkid;
6950
6951static int hf_ieee80211_rsn_ie_unknown;
6952
6953static int hf_ieee80211_rsn_ie_gtk_kde_nonce;
6954static int hf_ieee80211_rsn_ie_gtk_kde_lifetime;
6955static int hf_ieee80211_rsn_ie_error_kde_res;
6956static int hf_ieee80211_rsn_ie_error_kde_error_type;
6957static int hf_ieee80211_rsn_ie_igtk_kde_keyid;
6958static int hf_ieee80211_rsn_ie_igtk_kde_ipn;
6959static int hf_ieee80211_rsn_ie_igtk_kde_igtk;
6960static int hf_ieee80211_rsn_ie_oci_operating_class;
6961static int hf_ieee80211_rsn_ie_oci_primary_channel_number;
6962static int hf_ieee80211_rsn_ie_oci_frequency_segment_1;
6963static int hf_ieee80211_rsn_ie_bigtk_key_id;
6964static int hf_ieee80211_rsn_ie_bigtk_bipn;
6965static int hf_ieee80211_rsn_ie_bigtk_bigtk;
6966static int hf_ieee80211_rsn_ie_mlo_link_info;
6967static int hf_ieee80211_rsn_ie_mlo_linkid;
6968static int hf_ieee80211_rsn_ie_mlo_rnse_present;
6969static int hf_ieee80211_rsn_ie_mlo_rnsxe_present;
6970static int hf_ieee80211_rsn_ie_mlo_reserved;
6971static int hf_ieee80211_rsn_ie_mlo_mac_addr;
6972static int hf_ieee80211_rsn_ie_mlo_gtk_kde_key_id;
6973static int hf_ieee80211_rsn_ie_mlo_gtk_kde_tx;
6974static int hf_ieee80211_rsn_ie_mlo_gtk_kde_reserved;
6975static int hf_ieee80211_rsn_ie_mlo_gtk_kde_linkid;
6976static int hf_ieee80211_rsn_ie_mlo_gtk_kde_pn;
6977static int hf_ieee80211_rsn_ie_mlo_gtk_kde_gtk;
6978
6979static int hf_ieee80211_rsn_ie_mlo_igtk_kde_key_id;
6980static int hf_ieee80211_rsn_ie_mlo_igtk_kde_ipn;
6981static int hf_ieee80211_rsn_ie_mlo_igtk_kde_reserved;
6982static int hf_ieee80211_rsn_ie_mlo_igtk_kde_linkid;
6983static int hf_ieee80211_rsn_ie_mlo_igtk_kde_igtk;
6984
6985static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_key_id;
6986static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_ipn;
6987static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_reserved;
6988static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_linkid;
6989static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_bigtk;
6990
6991static int hf_ieee80211_marvell_ie_type;
6992static int hf_ieee80211_marvell_ie_mesh_subtype;
6993static int hf_ieee80211_marvell_ie_mesh_version;
6994static int hf_ieee80211_marvell_ie_mesh_active_proto_id;
6995static int hf_ieee80211_marvell_ie_mesh_active_metric_id;
6996static int hf_ieee80211_marvell_ie_mesh_cap;
6997static int hf_ieee80211_marvell_ie_data;
6998
6999static int hf_ieee80211_extreme_mesh_ie_type;
7000static int hf_ieee80211_extreme_mesh_ie_services;
7001static int hf_ieee80211_extreme_mesh_ie_hello_f_root;
7002static int hf_ieee80211_extreme_mesh_ie_hello_f_proxy;
7003static int hf_ieee80211_extreme_mesh_ie_hello_f_geo;
7004static int hf_ieee80211_extreme_mesh_ie_hello_f_path_pref;
7005static int hf_ieee80211_extreme_mesh_ie_hello_f_mobile;
7006static int hf_ieee80211_extreme_mesh_ie_htr;
7007static int hf_ieee80211_extreme_mesh_ie_mtr;
7008static int hf_ieee80211_extreme_mesh_ie_root;
7009static int hf_ieee80211_extreme_mesh_ie_nh;
7010static int hf_ieee80211_extreme_mesh_ie_mesh_id;
7011static int hf_ieee80211_extreme_mesh_ie_mp_id;
7012
7013static int hf_ieee80211_atheros_ie_type;
7014static int hf_ieee80211_atheros_ie_subtype;
7015static int hf_ieee80211_atheros_ie_version;
7016static int hf_ieee80211_atheros_ie_cap_f_turbop;
7017static int hf_ieee80211_atheros_ie_cap_f_comp;
7018static int hf_ieee80211_atheros_ie_cap_f_ff;
7019static int hf_ieee80211_atheros_ie_cap_f_xr;
7020static int hf_ieee80211_atheros_ie_cap_f_ar;
7021static int hf_ieee80211_atheros_ie_cap_f_burst;
7022static int hf_ieee80211_atheros_ie_cap_f_wme;
7023static int hf_ieee80211_atheros_ie_cap_f_boost;
7024static int hf_ieee80211_atheros_ie_advcap_cap;
7025static int hf_ieee80211_atheros_ie_advcap_defkey;
7026static int hf_ieee80211_atheros_ie_xr_info;
7027static int hf_ieee80211_atheros_ie_xr_base_bssid;
7028static int hf_ieee80211_atheros_ie_xr_xr_bssid;
7029static int hf_ieee80211_atheros_ie_xr_xr_beacon;
7030static int hf_ieee80211_atheros_ie_xr_base_cap;
7031static int hf_ieee80211_atheros_ie_xr_xr_cap;
7032static int hf_ieee80211_atheros_ie_data;
7033
7034/*QBSS - Version 1,2,802.11e*/
7035
7036static int hf_ieee80211_qbss2_cal;
7037static int hf_ieee80211_qbss2_gl;
7038static int hf_ieee80211_qbss_cu;
7039static int hf_ieee80211_qbss2_cu;
7040static int hf_ieee80211_qbss_scount;
7041static int hf_ieee80211_qbss2_scount;
7042static int hf_ieee80211_qbss_version;
7043static int hf_ieee80211_qbss_adc;
7044
7045static int hf_ieee80211_tsinfo;
7046static int hf_ieee80211_tsinfo_type;
7047static int hf_ieee80211_tsinfo_tsid;
7048static int hf_ieee80211_tsinfo_dir;
7049static int hf_ieee80211_tsinfo_access;
7050static int hf_ieee80211_tsinfo_agg;
7051static int hf_ieee80211_tsinfo_apsd;
7052static int hf_ieee80211_tsinfo_up;
7053static int hf_ieee80211_tsinfo_ack;
7054static int hf_ieee80211_tsinfo_sched;
7055static int hf_ieee80211_tsinfo_rsv;
7056
7057static int * const ieee80211_tsinfo_fields[] = {
7058 &hf_ieee80211_tsinfo_type,
7059 &hf_ieee80211_tsinfo_tsid,
7060 &hf_ieee80211_tsinfo_dir,
7061 &hf_ieee80211_tsinfo_access,
7062 &hf_ieee80211_tsinfo_agg,
7063 &hf_ieee80211_tsinfo_apsd,
7064 &hf_ieee80211_tsinfo_up,
7065 &hf_ieee80211_tsinfo_ack,
7066 &hf_ieee80211_tsinfo_sched,
7067 &hf_ieee80211_tsinfo_rsv,
7068 NULL((void*)0)
7069};
7070
7071static int hf_ieee80211_tspec_nor_msdu;
7072static int hf_ieee80211_tspec_max_msdu;
7073static int hf_ieee80211_tspec_min_srv;
7074static int hf_ieee80211_tspec_max_srv;
7075static int hf_ieee80211_tspec_inact_int;
7076static int hf_ieee80211_tspec_susp_int;
7077static int hf_ieee80211_tspec_srv_start;
7078static int hf_ieee80211_tspec_min_data;
7079static int hf_ieee80211_tspec_mean_data;
7080static int hf_ieee80211_tspec_peak_data;
7081static int hf_ieee80211_tspec_burst_size;
7082static int hf_ieee80211_tspec_delay_bound;
7083static int hf_ieee80211_tspec_min_phy;
7084static int hf_ieee80211_tspec_surplus;
7085static int hf_ieee80211_tspec_medium;
7086static int hf_ieee80211_tspec_dmg;
7087static int hf_ieee80211_ts_delay;
7088static int hf_ieee80211_tclas_process;
7089static int hf_ieee80211_tag_ext_supp_rates;
7090static int hf_ieee80211_sched_info;
7091static int hf_ieee80211_sched_info_agg;
7092static int hf_ieee80211_sched_info_tsid;
7093static int hf_ieee80211_sched_info_dir;
7094static int hf_ieee80211_sched_srv_start;
7095static int hf_ieee80211_sched_srv_int;
7096static int hf_ieee80211_sched_spec_int;
7097static int hf_ieee80211_tclas_up;
7098static int hf_ieee80211_tclas_class_type;
7099static int hf_ieee80211_tclas_class_mask;
7100static int hf_ieee80211_tclas_mask_reserved;
7101static int hf_ieee80211_tclas_class_mask0_src_addr;
7102static int hf_ieee80211_tclas_class_mask0_dst_addr;
7103static int hf_ieee80211_tclas_class_mask0_type;
7104static int hf_ieee80211_tclas_class_mask1_ver;
7105static int hf_ieee80211_tclas_class_mask1_src_ip;
7106static int hf_ieee80211_tclas_class_mask1_dst_ip;
7107static int hf_ieee80211_tclas_class_mask1_src_port;
7108static int hf_ieee80211_tclas_class_mask1_dst_port;
7109static int hf_ieee80211_tclas_class_mask1_ipv4_dscp;
7110static int hf_ieee80211_tclas_class_mask1_ipv4_proto;
7111static int hf_ieee80211_tclas_class_mask1_reserved;
7112static int hf_ieee80211_tclas_class_mask1_ipv6_flow;
7113static int hf_ieee80211_tclas_class_mask2_tci;
7114static int hf_ieee80211_tclas_src_mac_addr;
7115static int hf_ieee80211_tclas_dst_mac_addr;
7116static int hf_ieee80211_tclas_ether_type;
7117static int hf_ieee80211_tclas_version;
7118static int hf_ieee80211_tclas_ipv4_src;
7119static int hf_ieee80211_tclas_ipv4_dst;
7120static int hf_ieee80211_tclas_src_port;
7121static int hf_ieee80211_tclas_dst_port;
7122static int hf_ieee80211_tclas_dscp;
7123static int hf_ieee80211_tclas_protocol;
7124static int hf_ieee80211_tclas_ipv6_src;
7125static int hf_ieee80211_tclas_ipv6_dst;
7126static int hf_ieee80211_tclas_flow;
7127static int hf_ieee80211_tclas_tag_type;
7128static int hf_ieee80211_tclas_filter_offset;
7129static int hf_ieee80211_tclas_filter_value;
7130static int hf_ieee80211_tclas_filter_mask;
7131static int hf_ieee80211_tclas4_version;
7132static int hf_ieee80211_tclas_class_mask4_ver;
7133static int hf_ieee80211_tclas_class_mask4_4_src_ip;
7134static int hf_ieee80211_tclas_class_mask4_4_dst_ip;
7135static int hf_ieee80211_tclas_class_mask4_src_port;
7136static int hf_ieee80211_tclas_class_mask4_dst_port;
7137static int hf_ieee80211_tclas_class_mask4_dscp;
7138static int hf_ieee80211_tclas_class_mask4_ipv4_proto;
7139static int hf_ieee80211_tclas_class_mask4_reserved;
7140static int hf_ieee80211_tclas_class_mask4_6_src_ip;
7141static int hf_ieee80211_tclas_class_mask4_6_dst_ip;
7142static int hf_ieee80211_tclas_reserved_bytes;
7143static int hf_ieee80211_tclas_class_mask4_next_hdr;
7144static int hf_ieee80211_tclas_class_mask4_flow_label;
7145static int hf_ieee80211_tclas4_ipv4_src;
7146static int hf_ieee80211_tclas4_ipv4_dst;
7147static int hf_ieee80211_tclas4_src_port;
7148static int hf_ieee80211_tclas4_dst_port;
7149static int hf_ieee80211_tclas4_dscp;
7150static int hf_ieee80211_tclas4_protocol;
7151static int hf_ieee80211_tclas4_reserved;
7152static int hf_ieee80211_tclas4_ipv6_src;
7153static int hf_ieee80211_tclas4_ipv6_dst;
7154static int hf_ieee80211_tclas4_next_hdr;
7155static int hf_ieee80211_tclas4_flow;
7156static int hf_ieee80211_tclas_tclas_8021d_up_pcp;
7157static int hf_ieee80211_tclas_8021q_dei;
7158static int hf_ieee80211_tclas_8021q_vid;
7159
7160static int hf_ieee80211_tclas_class_mask5_up_prio;
7161static int hf_ieee80211_tclas_class_mask5_dei;
7162static int hf_ieee80211_tclas_class_mask5_vid;
7163static int hf_ieee80211_tclas_class_mask5_reserved;
7164
7165static int hf_ieee80211_tclas_class_mask6_a_above;
7166static int hf_ieee80211_tclas_class_mask6_frame_control_match_spec;
7167static int hf_ieee80211_tclas_class_mask6_duration_id_match_spec;
7168static int hf_ieee80211_tclas_class_mask6_address_1_match_spec;
7169static int hf_ieee80211_tclas_class_mask6_address_2_match_spec;
7170static int hf_ieee80211_tclas_class_mask6_address_3_match_spec;
7171static int hf_ieee80211_tclas_class_mask6_sequence_control_spec;
7172static int hf_ieee80211_tclas_class_mask6_address_4_match_spec;
7173static int hf_ieee80211_tclas_class_mask6_qos_control_spec;
7174static int hf_ieee80211_tclas_class_mask6_ht_control_spec;
7175static int hf_ieee80211_tclas_class_mask6_reserved;
7176static int hf_ieee80211_tclas6_frame_control_spec;
7177static int hf_ieee80211_tclas6_frame_control_mask;
7178static int hf_ieee80211_tclas6_duration_spec;
7179static int hf_ieee80211_tclas6_duration_mask;
7180static int hf_ieee80211_tclas6_address_1_spec;
7181static int hf_ieee80211_tclas6_address_1_mask;
7182static int hf_ieee80211_tclas6_address_2_spec;
7183static int hf_ieee80211_tclas6_address_2_mask;
7184static int hf_ieee80211_tclas6_address_3_spec;
7185static int hf_ieee80211_tclas6_address_3_mask;
7186static int hf_ieee80211_tclas6_sequence_control_spec;
7187static int hf_ieee80211_tclas6_sequence_control_mask;
7188static int hf_ieee80211_tclas6_address_4_spec;
7189static int hf_ieee80211_tclas6_address_4_mask;
7190static int hf_ieee80211_tclas6_qos_control_spec;
7191static int hf_ieee80211_tclas6_qos_control_mask;
7192static int hf_ieee80211_tclas6_ht_control_spec;
7193static int hf_ieee80211_tclas6_ht_control_mask;
7194
7195static int hf_ieee80211_tclas_class_mask7_frame_control_match_spec;
7196static int hf_ieee80211_tclas_class_mask7_address_1_sid_match_spec;
7197static int hf_ieee80211_tclas_class_mask7_address_2_match_spec;
7198static int hf_ieee80211_tclas_class_mask7_sequence_control_spec;
7199static int hf_ieee80211_tclas_class_mask7_address_3_match_spec;
7200static int hf_ieee80211_tclas_class_mask7_address_4_match_spec;
7201static int hf_ieee80211_tclas_class_mask7_reserved;
7202static int hf_ieee80211_tclas7_frame_control_spec;
7203static int hf_ieee80211_tclas7_frame_control_mask;
7204static int hf_ieee80211_tclas7_address_1_sid_spec;
7205static int hf_ieee80211_tclas7_address_1_sid_mask;
7206static int hf_ieee80211_tclas7_address_2_spec;
7207static int hf_ieee80211_tclas7_address_2_mask;
7208static int hf_ieee80211_tclas7_sequence_control_spec;
7209static int hf_ieee80211_tclas7_sequence_control_mask;
7210static int hf_ieee80211_tclas7_address_3_spec;
7211static int hf_ieee80211_tclas7_address_3_mask;
7212static int hf_ieee80211_tclas7_address_4_spec;
7213static int hf_ieee80211_tclas7_address_4_mask;
7214
7215static int hf_ieee80211_tclas_class_mask8_frame_control_match_spec;
7216static int hf_ieee80211_tclas_class_mask8_address_1_bssid_match_spec;
7217static int hf_ieee80211_tclas_class_mask8_address_2_sid_match_spec;
7218static int hf_ieee80211_tclas_class_mask8_sequence_control_spec;
7219static int hf_ieee80211_tclas_class_mask8_address_3_match_spec;
7220static int hf_ieee80211_tclas_class_mask8_address_4_match_spec;
7221static int hf_ieee80211_tclas_class_mask8_reserved;
7222static int hf_ieee80211_tclas8_frame_control_spec;
7223static int hf_ieee80211_tclas8_frame_control_mask;
7224static int hf_ieee80211_tclas8_address_1_bssid_spec;
7225static int hf_ieee80211_tclas8_address_1_bssid_mask;
7226static int hf_ieee80211_tclas8_address_2_sid_spec;
7227static int hf_ieee80211_tclas8_address_2_sid_mask;
7228static int hf_ieee80211_tclas8_sequence_control_spec;
7229static int hf_ieee80211_tclas8_sequence_control_mask;
7230static int hf_ieee80211_tclas8_address_3_spec;
7231static int hf_ieee80211_tclas8_address_3_mask;
7232static int hf_ieee80211_tclas8_address_4_spec;
7233static int hf_ieee80211_tclas8_address_4_mask;
7234
7235static int hf_ieee80211_tclas_class_mask9_frame_control_match_spec;
7236static int hf_ieee80211_tclas_class_mask9_address_1_match_spec;
7237static int hf_ieee80211_tclas_class_mask9_address_2_match_spec;
7238static int hf_ieee80211_tclas_class_mask9_sequence_control_spec;
7239static int hf_ieee80211_tclas_class_mask9_reserved;
7240static int hf_ieee80211_tclas9_frame_control_spec;
7241static int hf_ieee80211_tclas9_frame_control_mask;
7242static int hf_ieee80211_tclas9_address_1_spec;
7243static int hf_ieee80211_tclas9_address_1_mask;
7244static int hf_ieee80211_tclas9_address_2_spec;
7245static int hf_ieee80211_tclas9_address_2_mask;
7246static int hf_ieee80211_tclas9_sequence_control_spec;
7247static int hf_ieee80211_tclas9_sequence_control_mask;
7248
7249static int hf_ieee80211_tclas10_protocol_instance;
7250static int hf_ieee80211_tclas10_protocol_num_next_hdr;
7251
7252static int hf_ieee80211_aruba;
7253static int hf_ieee80211_aruba_hb_seq;
7254static int hf_ieee80211_aruba_mtu;
7255
7256static int hf_ieee80211_tag_vendor_oui_type;
7257static int hf_ieee80211_tag_vendor_data;
7258
7259static int hf_ieee80211_symbp_extreme_assoc_clients;
7260static int hf_ieee80211_symbp_extreme_load_kbps;
7261static int hf_ieee80211_symbp_extreme_load_pps;
7262static int hf_ieee80211_symbp_extreme_client_tx_power;
7263static int hf_ieee80211_symbp_extreme_timestamp;
7264
7265static int hf_ieee80211_tag_symbol_proprietary_oui;
7266static int hf_ieee80211_tag_symbol_proprietary_data;
7267
7268/* IEEE Std 802.11z-2010 7.3.2.62 */
7269static int hf_ieee80211_tag_link_id_bssid;
7270static int hf_ieee80211_tag_link_id_init_sta;
7271static int hf_ieee80211_tag_link_id_resp_sta;
7272
7273/* IEEE Std 802.11z-2010 7.3.2.63 */
7274static int hf_ieee80211_tag_wakeup_schedule_offset;
7275static int hf_ieee80211_tag_wakeup_schedule_interval;
7276static int hf_ieee80211_tag_wakeup_schedule_awake_window_slots;
7277static int hf_ieee80211_tag_wakeup_schedule_max_awake_dur;
7278static int hf_ieee80211_tag_wakeup_schedule_idle_count;
7279
7280/* IEEE Std 802.11z-2010 7.3.2.64 */
7281static int hf_ieee80211_tag_channel_switch_timing_switch_time;
7282static int hf_ieee80211_tag_channel_switch_timing_switch_timeout;
7283
7284/* IEEE Std 802.11z-2010 7.3.2.65 */
7285static int hf_ieee80211_tag_pti_control_tid;
7286static int hf_ieee80211_tag_pti_control_sequence_control;
7287
7288/* IEEE Std 802.11z-2010 7.3.2.66 */
7289static int hf_ieee80211_tag_pu_buffer_status_ac_bk;
7290static int hf_ieee80211_tag_pu_buffer_status_ac_be;
7291static int hf_ieee80211_tag_pu_buffer_status_ac_vi;
7292static int hf_ieee80211_tag_pu_buffer_status_ac_vo;
7293
7294/* IEEE Std 802.11r-2008 7.3.2.49 */
7295static int hf_ieee80211_tag_timeout_int_type;
7296static int hf_ieee80211_tag_timeout_int_value;
7297
7298/* Ethertype 89-0d */
7299static int hf_ieee80211_data_encap_payload_type;
7300
7301static int hf_ieee80211_anqp_wfa_subtype;
7302
7303static int hf_ieee80211_dpp_subtype;
7304
7305/* Hotspot 2.0 */
7306static int hf_ieee80211_hs20_indication_dgaf_disabled;
7307static int hf_ieee80211_hs20_indication_pps_mo_id_present;
7308static int hf_ieee80211_hs20_indication_anqp_domain_id_present;
7309static int hf_ieee80211_hs20_reserved;
7310static int hf_ieee80211_hs20_indication_version_number;
7311static int hf_ieee80211_hs20_indication_pps_mo_id;
7312static int hf_ieee80211_hs20_indication_anqp_domain_id;
7313
7314static int hf_ieee80211_hs20_anqp_subtype;
7315static int hf_ieee80211_hs20_anqp_reserved;
7316static int hf_ieee80211_hs20_anqp_payload;
7317static int hf_ieee80211_hs20_anqp_hs_query_list;
7318static int hf_ieee80211_hs20_anqp_hs_capability_list;
7319static int hf_ieee80211_hs20_anqp_ofn_length;
7320static int hf_ieee80211_hs20_anqp_ofn_language;
7321static int hf_ieee80211_hs20_anqp_ofn_name;
7322static int hf_ieee80211_hs20_anqp_wan_metrics_link_status;
7323static int hf_ieee80211_hs20_anqp_wan_metrics_symmetric_link;
7324static int hf_ieee80211_hs20_anqp_wan_metrics_at_capacity;
7325static int hf_ieee80211_hs20_anqp_wan_metrics_reserved;
7326static int hf_ieee80211_hs20_anqp_wan_metrics_downlink_speed;
7327static int hf_ieee80211_hs20_anqp_wan_metrics_uplink_speed;
7328static int hf_ieee80211_hs20_anqp_wan_metrics_downlink_load;
7329static int hf_ieee80211_hs20_anqp_wan_metrics_uplink_load;
7330static int hf_ieee80211_hs20_anqp_wan_metrics_lmd;
7331static int hf_ieee80211_hs20_anqp_cc_proto_ip_proto;
7332static int hf_ieee80211_hs20_anqp_cc_proto_port_num;
7333static int hf_ieee80211_hs20_anqp_cc_proto_status;
7334static int hf_ieee80211_hs20_anqp_nai_hrq_count;
7335static int hf_ieee80211_hs20_anqp_nai_hrq_encoding_type;
7336static int hf_ieee80211_hs20_anqp_nai_hrq_length;
7337static int hf_ieee80211_hs20_anqp_nai_hrq_realm_name;
7338static int hf_ieee80211_hs20_anqp_oper_class_indic;
7339static int hf_ieee80211_hs20_osu_friendly_names_len;
7340static int hf_ieee80211_hs20_osu_friendly_name_length;
7341static int hf_ieee80211_hs20_osu_friendly_name_language;
7342static int hf_ieee80211_hs20_osu_friendly_name_name;
7343static int hf_ieee80211_hs20_osu_server_uri_len;
7344static int hf_ieee80211_hs20_osu_server_uri;
7345static int hf_ieee80211_hs20_osu_method_list_len;
7346static int hf_ieee80211_hs20_osu_method_val;
7347static int hf_ieee80211_hs20_icons_avail_len;
7348static int hf_ieee80211_hs20_osu_providers_list_ssid_len;
7349static int hf_ieee80211_hs20_osu_providers_ssid;
7350static int hf_ieee80211_hs20_osu_providers_count;
7351static int hf_ieee80211_hs20_osu_prov_length;
7352static int hf_ieee80211_hs20_icon_request_filename;
7353static int hf_ieee80211_hs20_icon_binary_file_status;
7354static int hf_ieee80211_hs20_icon_type_length;
7355static int hf_ieee80211_hs20_icon_type;
7356static int hf_ieee80211_hs20_icon_binary_data_len;
7357static int hf_ieee80211_hs20_icon_binary_data;
7358static int hf_ieee80211_osu_icon_avail_width;
7359static int hf_ieee80211_osu_icon_avail_height;
7360static int hf_ieee80211_osu_icon_avail_lang_code;
7361static int hf_ieee80211_osu_icon_avail_icon_type_len;
7362static int hf_ieee80211_osu_icon_avail_icon_type;
7363static int hf_ieee80211_osu_icon_avail_filename_len;
7364static int hf_ieee80211_osu_icon_avail_filename;
7365static int hf_ieee80211_hs20_osu_nai_len;
7366static int hf_ieee80211_hs20_osu_nai;
7367static int hf_ieee80211_hs20_osu_service_desc_len;
7368static int hf_ieee80211_hs20_osu_service_desc_duple_len;
7369static int hf_ieee80211_hs20_osu_service_desc_lang;
7370static int hf_ieee80211_hs20_osu_service_desc;
7371static int hf_ieee80211_hs20_anqp_venue_url_length;
7372static int hf_ieee80211_hs20_anqp_venue_number;
7373static int hf_ieee80211_hs20_anqp_venue_url;
7374static int hf_ieee80211_hs20_anqp_advice_of_charge_length;
7375static int hf_ieee80211_hs20_anqp_advice_of_charge_type;
7376static int hf_ieee80211_hs20_anqp_aoc_nai_realm_encoding;
7377static int hf_ieee80211_hs20_anqp_aoc_nai_realm_len;
7378static int hf_ieee80211_hs20_anqp_aoc_nai_realm;
7379static int hf_ieee80211_hs20_anqp_aoc_plan_len;
7380static int hf_ieee80211_hs20_anqp_aoc_plan_lang;
7381static int hf_ieee80211_hs20_anqp_aoc_plan_curcy;
7382static int hf_ieee80211_hs20_anqp_aoc_plan_information;
7383
7384static int hf_ieee80211_hs20_subscription_remediation_url_len;
7385static int hf_ieee80211_hs20_subscription_remediation_server_url;
7386static int hf_ieee80211_hs20_subscription_remediation_server_method;
7387static int hf_ieee80211_hs20_deauth_reason_code;
7388static int hf_ieee80211_hs20_reauth_delay;
7389static int hf_ieee80211_hs20_deauth_reason_url_len;
7390static int hf_ieee80211_hs20_deauth_imminent_reason_url;
7391
7392/* IEEE Std 802.11ai : FILS Discovery */
7393static int hf_ieee80211_ff_fils_discovery_frame_control;
7394static int hf_ieee80211_ff_fils_discovery_frame_control_ssid_length;
7395static int hf_ieee80211_ff_fils_discovery_frame_control_capability;
7396static int hf_ieee80211_ff_fils_discovery_frame_control_short_ssid;
7397static int hf_ieee80211_ff_fils_discovery_frame_control_ap_csn;
7398static int hf_ieee80211_ff_fils_discovery_frame_control_ano;
7399static int hf_ieee80211_ff_fils_discovery_frame_control_channel_center_frequency;
7400static int hf_ieee80211_ff_fils_discovery_frame_control_primary_channel;
7401static int hf_ieee80211_ff_fils_discovery_frame_control_rsn_info;
7402static int hf_ieee80211_ff_fils_discovery_frame_control_length;
7403static int hf_ieee80211_ff_fils_discovery_frame_control_md;
7404static int hf_ieee80211_ff_fils_discovery_frame_control_reserved;
7405static int hf_ieee80211_ff_fils_discovery_ssid;
7406static int hf_ieee80211_ff_fils_discovery_capability;
7407static int hf_ieee80211_ff_fils_discovery_capability_ess;
7408static int hf_ieee80211_ff_fils_discovery_capability_privacy;
7409static int hf_ieee80211_ff_fils_discovery_capability_bss_operating_channel_width;
7410static int hf_ieee80211_ff_fils_discovery_capability_max_number_of_spatial_streams;
7411static int hf_ieee80211_ff_fils_discovery_capability_reserved;
7412static int hf_ieee80211_ff_fils_discovery_capability_multiple_bssid;
7413static int hf_ieee80211_ff_fils_discovery_capability_phy_index;
7414static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_dsss;
7415static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ofdm;
7416static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ht_vht_tvht;
7417static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_he;
7418static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate;
7419
7420static int hf_ieee80211_ff_fils_discovery_short_ssid;
7421static int hf_ieee80211_ff_fils_discovery_ap_csn;
7422static int hf_ieee80211_ff_fils_discovery_ano;
7423static int hf_ieee80211_ff_fils_discovery_ccfs1;
7424static int hf_ieee80211_ff_fils_discovery_operating_class;
7425static int hf_ieee80211_ff_fils_discovery_primary_channel;
7426static int hf_ieee80211_ff_fils_discovery_rsn_info;
7427static int hf_ieee80211_ff_fils_discovery_length;
7428static int hf_ieee80211_ff_fils_discovery_md;
7429
7430/* IEEE Std 802.11ad */
7431static int hf_ieee80211_block_ack_RBUFCAP;
7432static int hf_ieee80211_cf_response_offset;
7433static int hf_ieee80211_grant_ack_reserved;
7434static int hf_ieee80211_ff_dynamic_allocation;
7435static int hf_ieee80211_ff_TID;
7436static int hf_ieee80211_ff_alloc_type;
7437static int hf_ieee80211_ff_src_aid;
7438static int hf_ieee80211_ff_dest_aid;
7439static int hf_ieee80211_ff_alloc_duration;
7440static int hf_ieee80211_ff_b39;
7441static int hf_ieee80211_ff_ssw;
7442static int hf_ieee80211_ff_ssw_direction;
7443static int hf_ieee80211_ff_ssw_cdown;
7444static int hf_ieee80211_ff_ssw_sector_id;
7445static int hf_ieee80211_ff_ssw_dmg_ant_id;
7446static int hf_ieee80211_ff_ssw_rxss_len;
7447static int hf_ieee80211_ff_bf;
7448static int hf_ieee80211_ff_bf_train;
7449static int hf_ieee80211_ff_bf_is_init;
7450static int hf_ieee80211_ff_bf_is_resp;
7451static int hf_ieee80211_ff_bf_num_sectors;
7452static int hf_ieee80211_ff_bf_num_rx_dmg_ants;
7453static int hf_ieee80211_ff_bf_b12b15;
7454static int hf_ieee80211_ff_bf_rxss_len;
7455static int hf_ieee80211_ff_bf_rxss_rate;
7456static int hf_ieee80211_ff_bf_b10b15;
7457static int hf_ieee80211_addr_nav_da;
7458static int hf_ieee80211_addr_nav_sa;
7459static int hf_ieee80211_ff_sswf;
7460static int hf_ieee80211_ff_sswf_num_rx_dmg_ants;
7461static int hf_ieee80211_ff_sswf_poll_required;
7462static int hf_ieee80211_ff_sswf_total_sectors;
7463static int hf_ieee80211_ff_sswf_reserved1;
7464static int hf_ieee80211_ff_sswf_reserved2;
7465static int hf_ieee80211_ff_sswf_sector_select;
7466static int hf_ieee80211_ff_sswf_dmg_antenna_select;
7467static int hf_ieee80211_ff_sswf_snr_report;
7468static int hf_ieee80211_ff_brp;
7469static int hf_ieee80211_ff_brp_L_RX;
7470static int hf_ieee80211_ff_brp_TX_TRN_REQ;
7471static int hf_ieee80211_ff_brp_MID_REQ;
7472static int hf_ieee80211_ff_brp_BC_REQ;
7473static int hf_ieee80211_ff_brp_MID_GRANT;
7474static int hf_ieee80211_ff_brp_BC_GRANT;
7475static int hf_ieee80211_ff_brp_chan_FBCK_CAP;
7476static int hf_ieee80211_ff_brp_tx_sector;
7477static int hf_ieee80211_ff_brp_other_aid;
7478static int hf_ieee80211_ff_brp_tx_antenna;
7479static int hf_ieee80211_ff_brp_reserved;
7480static int hf_ieee80211_ff_blm;
7481static int hf_ieee80211_ff_blm_unit_index;
7482static int hf_ieee80211_ff_blm_maint_value;
7483static int hf_ieee80211_ff_blm_is_master;
7484static int hf_ieee80211_ff_bic;
7485static int hf_ieee80211_ff_bic_cc_present;
7486static int hf_ieee80211_ff_bic_discovery_mode;
7487static int hf_ieee80211_ff_bic_next_beacon;
7488static int hf_ieee80211_ff_bic_ati_present;
7489static int hf_ieee80211_ff_bic_abft_len;
7490static int hf_ieee80211_ff_bic_fss;
7491static int hf_ieee80211_ff_bic_is_resp;
7492static int hf_ieee80211_ff_bic_next_abft;
7493static int hf_ieee80211_ff_bic_frag_txss;
7494static int hf_ieee80211_ff_bic_txss_span;
7495static int hf_ieee80211_ff_bic_NBI_abft;
7496static int hf_ieee80211_ff_bic_abft_count;
7497static int hf_ieee80211_ff_bic_nabft;
7498static int hf_ieee80211_ff_bic_pcp;
7499static int hf_ieee80211_ff_bic_reserved;
7500static int * const ieee80211_ff_bic_fields[] = {
7501 &hf_ieee80211_ff_bic_cc_present,
7502 &hf_ieee80211_ff_bic_discovery_mode,
7503 &hf_ieee80211_ff_bic_next_beacon,
7504 &hf_ieee80211_ff_bic_ati_present,
7505 &hf_ieee80211_ff_bic_abft_len,
7506 &hf_ieee80211_ff_bic_fss,
7507 &hf_ieee80211_ff_bic_is_resp,
7508 &hf_ieee80211_ff_bic_next_abft,
7509 &hf_ieee80211_ff_bic_frag_txss,
7510 &hf_ieee80211_ff_bic_txss_span,
7511 &hf_ieee80211_ff_bic_NBI_abft,
7512 &hf_ieee80211_ff_bic_abft_count,
7513 &hf_ieee80211_ff_bic_nabft,
7514 &hf_ieee80211_ff_bic_pcp,
7515 &hf_ieee80211_ff_bic_reserved,
7516 NULL((void*)0)
7517};
7518static int hf_ieee80211_ff_dmg_params;
7519static int hf_ieee80211_ff_dmg_params_bss;
7520static int hf_ieee80211_ff_dmg_params_cbap_only;
7521static int hf_ieee80211_ff_dmg_params_cbap_src;
7522static int hf_ieee80211_ff_dmg_params_privacy;
7523static int hf_ieee80211_ff_dmg_params_policy;
7524static int hf_ieee80211_ff_dmg_params_spec_mgmt;
7525static int hf_ieee80211_ff_dmg_params_radio_measure;
7526static int hf_ieee80211_ff_cc;
7527static int hf_ieee80211_ff_cc_abft_resp_addr;
7528static int hf_ieee80211_ff_cc_sp_duration;
7529static int hf_ieee80211_ff_cc_cluster_id;
7530static int hf_ieee80211_ff_cc_role;
7531static int hf_ieee80211_ff_cc_max_mem;
7532static int hf_ieee80211_ff_dmg_action_code;
7533static int hf_ieee80211_ff_dmg_pwr_mgmt;
7534static int hf_ieee80211_ff_subject_address;
7535static int hf_ieee80211_ff_handover_reason;
7536static int hf_ieee80211_ff_handover_remaining_bi;
7537static int hf_ieee80211_ff_handover_result;
7538static int hf_ieee80211_ff_handover_reject_reason;
7539static int hf_ieee80211_ff_destination_reds_aid;
7540static int hf_ieee80211_ff_destination_aid;
7541static int hf_ieee80211_ff_relay_aid;
7542static int hf_ieee80211_ff_source_aid;
7543static int hf_ieee80211_ff_timing_offset;
7544static int hf_ieee80211_ff_sampling_frequency_offset;
7545static int hf_ieee80211_ff_relay_operation_type;
7546static int hf_ieee80211_ff_peer_sta_aid;
7547static int hf_ieee80211_ff_snr;
7548static int hf_ieee80211_ff_internal_angle;
7549static int hf_ieee80211_ff_recommend;
7550static int hf_ieee80211_ff_unprotected_dmg_action_code;
7551static int hf_ieee80211_ff_fst_action_code;
7552static int hf_ieee80211_ff_robust_av_streaming_action_code;
7553static int hf_ieee80211_ff_llt;
7554static int hf_ieee80211_ff_fsts_id;
7555static int hf_ieee80211_ff_mmpdu_len;
7556static int hf_ieee80211_ff_mmpdu_ctrl;
7557static int hf_ieee80211_ff_oct_mmpdu;
7558static int hf_ieee80211_ff_scs_scsid;
7559static int hf_ieee80211_ff_scs_status;
7560static int hf_ieee80211_ff_scs_response_count;
7561
7562#if 0
7563static int hf_ieee80211_ff_rcsi;
7564static int hf_ieee80211_ff_rcsi_aid;
7565#endif
7566static int hf_ieee80211_ff_band_id;
7567static int hf_ieee80211_tag_relay_support;
7568static int hf_ieee80211_tag_relay_use;
7569static int hf_ieee80211_tag_relay_permission;
7570static int hf_ieee80211_tag_AC_power;
7571static int hf_ieee80211_tag_relay_prefer;
7572static int hf_ieee80211_tag_duplex;
7573static int hf_ieee80211_tag_cooperation;
7574static int hf_ieee80211_tag_move;
7575static int hf_ieee80211_tag_size;
7576static int hf_ieee80211_tag_tbtt_offset;
7577static int hf_ieee80211_tag_bi_duration;
7578static int hf_ieee80211_tag_dmg_capa_sta_addr;
7579static int hf_ieee80211_tag_dmg_capa_aid;
7580static int hf_ieee80211_tag_reverse_direction;
7581static int hf_ieee80211_tag_hlts;
7582static int hf_ieee80211_tag_tpc;
7583static int hf_ieee80211_tag_spsh;
7584static int hf_ieee80211_tag_rx_antenna;
7585static int hf_ieee80211_tag_fast_link;
7586static int hf_ieee80211_tag_num_sectors;
7587static int hf_ieee80211_tag_rxss_length;
7588static int hf_ieee80211_tag_reciprocity;
7589static int hf_ieee80211_tag_max_ampdu_exp;
7590static int hf_ieee80211_tag_min_mpdu_spacing;
7591static int hf_ieee80211_tag_ba_flow_control;
7592static int hf_ieee80211_tag_max_sc_rx_mcs;
7593static int hf_ieee80211_tag_max_ofdm_rx_mcs;
7594static int hf_ieee80211_tag_max_sc_tx_mcs;
7595static int hf_ieee80211_tag_max_ofdm_tx_mcs;
7596static int hf_ieee80211_tag_low_power_supported;
7597static int hf_ieee80211_tag_code_rate;
7598static int hf_ieee80211_tag_dtp;
7599static int hf_ieee80211_tag_appdu_supp;
7600static int hf_ieee80211_tag_heartbeat;
7601static int hf_ieee80211_tag_other_aid;
7602static int hf_ieee80211_tag_pattern_recip;
7603static int hf_ieee80211_tag_heartbeat_elapsed;
7604static int hf_ieee80211_tag_grant_ack_supp;
7605static int hf_ieee80211_tag_RXSSTxRate_supp;
7606static int hf_ieee80211_tag_pcp_tddti;
7607static int hf_ieee80211_tag_pcp_PSA;
7608static int hf_ieee80211_tag_pcp_handover;
7609static int hf_ieee80211_tag_pcp_max_assoc;
7610static int hf_ieee80211_tag_pcp_power_src;
7611static int hf_ieee80211_tag_pcp_decenter;
7612static int hf_ieee80211_tag_pcp_forwarding;
7613static int hf_ieee80211_tag_pcp_center;
7614static int hf_ieee80211_tag_sta_beam_track;
7615static int hf_ieee80211_tag_ext_sc_mcs_max_tx;
7616static int hf_ieee80211_tag_ext_sc_mcs_tx_code_7_8;
7617static int hf_ieee80211_tag_ext_sc_mcs_max_rx;
7618static int hf_ieee80211_tag_ext_sc_mcs_rx_code_7_8;
7619static int hf_ieee80211_tag_max_basic_sf_amsdu;
7620static int hf_ieee80211_tag_max_short_sf_amsdu;
7621static int hf_ieee80211_tag_PSRSI;
7622static int hf_ieee80211_tag_min_BHI_duration;
7623static int hf_ieee80211_tag_brdct_sta_info_dur;
7624static int hf_ieee80211_tag_assoc_resp_confirm_time;
7625static int hf_ieee80211_tag_min_pp_duration;
7626static int hf_ieee80211_tag_SP_idle_timeout;
7627static int hf_ieee80211_tag_max_lost_beacons;
7628static int hf_ieee80211_tag_type;
7629static int hf_ieee80211_tag_tap1;
7630static int hf_ieee80211_tag_state1;
7631static int hf_ieee80211_tag_tap2;
7632static int hf_ieee80211_tag_state2;
7633static int hf_ieee80211_tag_allocation_id;
7634static int hf_ieee80211_tag_allocation_type;
7635static int hf_ieee80211_tag_pseudo_static;
7636static int hf_ieee80211_tag_truncatable;
7637static int hf_ieee80211_tag_extendable;
7638static int hf_ieee80211_tag_pcp_active;
7639static int hf_ieee80211_tag_lp_sc_used;
7640static int hf_ieee80211_tag_src_aid;
7641static int hf_ieee80211_tag_dest_aid;
7642static int hf_ieee80211_tag_alloc_start;
7643static int hf_ieee80211_tag_alloc_block_duration;
7644static int hf_ieee80211_tag_num_blocks;
7645static int hf_ieee80211_tag_alloc_block_period;
7646static int hf_ieee80211_tag_aid;
7647static int hf_ieee80211_tag_cbap;
7648static int hf_ieee80211_tag_pp_avail;
7649static int hf_ieee80211_tag_next_ati_start_time;
7650static int hf_ieee80211_tag_next_ati_duration;
7651static int hf_ieee80211_tag_old_bssid;
7652static int hf_ieee80211_tag_new_pcp_addr;
7653static int hf_ieee80211_tag_bssid;
7654static int hf_ieee80211_tag_duplex_relay;
7655static int hf_ieee80211_tag_cooperation_relay;
7656static int hf_ieee80211_tag_tx_mode;
7657static int hf_ieee80211_tag_link_change_interval;
7658static int hf_ieee80211_tag_data_sensing_time;
7659static int hf_ieee80211_tag_first_period;
7660static int hf_ieee80211_tag_second_period;
7661static int hf_ieee80211_tag_initiator;
7662static int hf_ieee80211_tag_tx_train_res;
7663static int hf_ieee80211_tag_rx_train_res;
7664static int hf_ieee80211_tag_tx_trn_ok;
7665static int hf_ieee80211_tag_txss_fbck_req;
7666static int hf_ieee80211_tag_bs_fbck;
7667static int hf_ieee80211_tag_bs_fbck_antenna_id;
7668static int hf_ieee80211_tag_snr_requested;
7669static int hf_ieee80211_tag_channel_measurement_requested;
7670static int hf_ieee80211_tag_number_of_taps_requested;
7671static int hf_ieee80211_tag_sector_id_order_req;
7672static int hf_ieee80211_tag_snr_present;
7673static int hf_ieee80211_tag_channel_measurement_present;
7674static int hf_ieee80211_tag_tap_delay_present;
7675static int hf_ieee80211_tag_number_of_taps_present;
7676static int hf_ieee80211_tag_number_of_measurement;
7677static int hf_ieee80211_tag_sector_id_order_present;
7678static int hf_ieee80211_tag_number_of_beams;
7679static int hf_ieee80211_tag_mid_extension;
7680static int hf_ieee80211_tag_capability_request;
7681static int hf_ieee80211_tag_beam_refine_reserved;
7682static int hf_ieee80211_tag_nextpcp_list;
7683static int hf_ieee80211_tag_nextpcp_token;
7684static int hf_ieee80211_tag_remaining_BI;
7685static int hf_ieee80211_tag_request_token;
7686static int hf_ieee80211_tag_bi_start_time;
7687static int hf_ieee80211_tag_sleep_cycle;
7688static int hf_ieee80211_tag_num_awake_bis;
7689static int hf_ieee80211_tag_tspec_allocation_id;
7690static int hf_ieee80211_tag_tspec_allocation_type;
7691static int hf_ieee80211_tag_tspec_allocation_format;
7692static int hf_ieee80211_tag_tspec_pseudo_static;
7693static int hf_ieee80211_tag_tspec_truncatable;
7694static int hf_ieee80211_tag_tspec_extendable;
7695static int hf_ieee80211_tag_tspec_lp_sc_used;
7696static int hf_ieee80211_tag_tspec_up;
7697static int hf_ieee80211_tag_tspec_dest_aid;
7698static int hf_ieee80211_tag_tspec_allocation_period;
7699static int hf_ieee80211_tag_tspec_min_allocation;
7700static int hf_ieee80211_tag_tspec_max_allocation;
7701static int hf_ieee80211_tag_tspec_min_duration;
7702static int hf_ieee80211_tag_tspec_num_of_constraints;
7703static int hf_ieee80211_tag_tspec_tsconst_start_time;
7704static int hf_ieee80211_tag_tspec_tsconst_duration;
7705static int hf_ieee80211_tag_tspec_tsconst_period;
7706static int hf_ieee80211_tag_tspec_tsconst_interferer_mac;
7707static int hf_ieee80211_tag_channel_measurement_feedback_relative_I;
7708static int hf_ieee80211_tag_channel_measurement_feedback_relative_Q;
7709static int hf_ieee80211_tag_channel_measurement_feedback_tap_delay;
7710static int hf_ieee80211_tag_channel_measurement_feedback_sector_id;
7711static int hf_ieee80211_tag_channel_measurement_feedback_antenna_id;
7712static int hf_ieee80211_tag_awake_window;
7713static int hf_ieee80211_tag_addba_ext_no_frag;
7714static int hf_ieee80211_tag_addba_ext_he_fragmentation_operation;
7715static int hf_ieee80211_tag_addba_ext_reserved;
7716static int hf_ieee80211_tag_addba_ext_buffer_size;
7717static int hf_ieee80211_tag_multi_band_ctrl_sta_role;
7718static int hf_ieee80211_tag_multi_band_ctrl_addr_present;
7719static int hf_ieee80211_tag_multi_band_ctrl_cipher_present;
7720static int hf_ieee80211_tag_multi_band_oper_class;
7721static int hf_ieee80211_tag_multi_band_channel_number;
7722static int hf_ieee80211_tag_multi_band_tsf_offset;
7723static int hf_ieee80211_tag_multi_band_conn_ap;
7724static int hf_ieee80211_tag_multi_band_conn_pcp;
7725static int hf_ieee80211_tag_multi_band_conn_dls;
7726static int hf_ieee80211_tag_multi_band_conn_tdls;
7727static int hf_ieee80211_tag_multi_band_conn_ibss;
7728static int hf_ieee80211_tag_multi_band_fst_timeout;
7729static int hf_ieee80211_tag_multi_band_sta_mac;
7730static int hf_ieee80211_tag_activity;
7731static int hf_ieee80211_tag_dmg_link_adapt_mcs;
7732static int hf_ieee80211_tag_dmg_link_adapt_link_margin;
7733static int hf_ieee80211_tag_ref_timestamp;
7734static int hf_ieee80211_tag_switching_stream_non_qos;
7735static int hf_ieee80211_tag_switching_stream_param_num;
7736static int hf_ieee80211_tag_switching_stream_old_tid;
7737static int hf_ieee80211_tag_switching_stream_old_direction;
7738static int hf_ieee80211_tag_switching_stream_new_tid;
7739static int hf_ieee80211_tag_switching_stream_new_direction;
7740static int hf_ieee80211_tag_switching_stream_new_valid_id;
7741static int hf_ieee80211_tag_switching_stream_llt_type;
7742
7743static int hf_ieee80211_mysterious_extra_stuff;
7744
7745static int hf_ieee80211_mscs_descriptor_type;
7746static int hf_ieee80211_mscs_user_prio_control_reserved;
7747static int hf_ieee80211_user_prio_bitmap;
7748static int hf_ieee80211_user_prio_bitmap_bit0;
7749static int hf_ieee80211_user_prio_bitmap_bit1;
7750static int hf_ieee80211_user_prio_bitmap_bit2;
7751static int hf_ieee80211_user_prio_bitmap_bit3;
7752static int hf_ieee80211_user_prio_bitmap_bit4;
7753static int hf_ieee80211_user_prio_bitmap_bit5;
7754static int hf_ieee80211_user_prio_bitmap_bit6;
7755static int hf_ieee80211_user_prio_bitmap_bit7;
7756static int hf_ieee80211_user_prio_limit;
7757static int hf_ieee80211_user_prio_reserved;
7758static int hf_ieee80211_stream_timeout_reserved;
7759static int hf_ieee80211_stream_timeout;
7760static int hf_ieee80211_mscs_subelement_id;
7761static int hf_ieee80211_mscs_subelement_len;
7762static int hf_ieee80211_mscs_subelement_data;
7763
7764static int hf_ieee80211_intra_access_prio;
7765static int hf_ieee80211_intra_access_prio_user_prio;
7766static int hf_ieee80211_intra_access_prio_alt_queue;
7767static int hf_ieee80211_intra_access_prio_drop_elig;
7768static int hf_ieee80211_intra_access_prio_reserved;
7769
7770static int hf_ieee80211_scs_descriptor_scsid;
7771static int hf_ieee80211_scs_descriptor_type;
7772
7773static int hf_ieee80211_esp_access_category;
7774static int hf_ieee80211_esp_reserved;
7775static int hf_ieee80211_esp_data_format;
7776static int hf_ieee80211_esp_ba_windows_size;
7777static int hf_ieee80211_esp_est_air_time_frac;
7778static int hf_ieee80211_esp_data_ppdu_duration_target;
7779static int hf_ieee80211_estimated_service_params;
7780
7781static int hf_ieee80211_fcg_new_channel_number;
7782static int hf_ieee80211_fcg_extra_info;
7783static int hf_ieee80211_sae_password_identifier;
7784
7785static int hf_ieee80211_sae_anti_clogging_token;
7786
7787static int hf_ieee80211_tag_fils_indication_info_nr_pk;
7788static int hf_ieee80211_tag_fils_indication_info_nr_realm;
7789static int hf_ieee80211_tag_fils_indication_info_ip_config;
7790static int hf_ieee80211_tag_fils_indication_info_cache_id_included;
7791static int hf_ieee80211_tag_fils_indication_info_hessid_included;
7792static int hf_ieee80211_tag_fils_indication_info_ska_without_pfs;
7793static int hf_ieee80211_tag_fils_indication_info_ska_with_pfs;
7794static int hf_ieee80211_tag_fils_indication_info_pka;
7795static int hf_ieee80211_tag_fils_indication_info_reserved;
7796static int hf_ieee80211_tag_fils_indication_cache_identifier;
7797static int hf_ieee80211_tag_fils_indication_hessid;
7798static int hf_ieee80211_tag_fils_indication_realm_list;
7799static int hf_ieee80211_tag_fils_indication_realm_identifier;
7800static int hf_ieee80211_tag_fils_indication_public_key_list;
7801static int hf_ieee80211_tag_fils_indication_public_key_type;
7802static int hf_ieee80211_tag_fils_indication_public_key_length;
7803static int hf_ieee80211_tag_fils_indication_public_key_indicator;
7804
7805static int hf_ieee80211_qos_mgmt_attribute_id;
7806static int hf_ieee80211_qos_mgmt_attribute_len;
7807static int hf_ieee80211_qos_mgmt_start_port_range;
7808static int hf_ieee80211_qos_mgmt_end_port_range;
7809static int hf_ieee80211_qos_mgmt_dscp_pol_id;
7810static int hf_ieee80211_qos_mgmt_dscp_pol_req_type;
7811static int hf_ieee80211_qos_mgmt_dscp_pol_dscp;
7812static int hf_ieee80211_qos_mgmt_domain_name;
7813static int hf_ieee80211_qos_mgmt_unknown_attr;
7814
7815static int hf_ieee80211_wfa_capa_tag_data;
7816static int hf_ieee80211_wfa_capa_tag_len;
7817static int hf_ieee80211_wfa_capa_tag_capabilities;
7818static int hf_ieee80211_wfa_capa_mgmt_dscp_policy;
7819static int hf_ieee80211_wfa_capa_mgmt_unsol_dscp_policy;
7820static int hf_ieee80211_wfa_capa_mgmt_scs_traffic_desc;
7821static int hf_ieee80211_wfa_capa_5g_wifi_qos_mapping;
7822static int hf_ieee80211_wfa_capa_data_plane_stat_report;
7823static int hf_ieee80211_wfa_capa_radio_counters_stat_support;
7824static int hf_ieee80211_wfa_capa_control_plane_stat_report;
7825static int hf_ieee80211_wfa_capa_unsolicited_report_support;
7826static int hf_ieee80211_wfa_capa_attr_id;
7827static int hf_ieee80211_wfa_capa_attr_len;
7828static int hf_ieee80211_wfa_capa_attr_field;
7829static int hf_ieee80211_wfa_capa_attr_supp_gene_length;
7830static int hf_ieee80211_wfa_capa_attr_supp_generations;
7831static int hf_ieee80211_wfa_capa_attr_supp_generations_b0;
7832static int hf_ieee80211_wfa_capa_attr_supp_generations_b1;
7833static int hf_ieee80211_wfa_capa_attr_supp_generations_b2;
7834static int hf_ieee80211_wfa_capa_attr_supp_generations_b3;
7835static int hf_ieee80211_wfa_capa_attr_supp_generations_reserved;
7836static int hf_ieee80211_wfa_capa_attr_cert_gene_length;
7837static int hf_ieee80211_wfa_capa_attr_cert_generations;
7838static int hf_ieee80211_wfa_capa_attr_cert_generations_b0;
7839static int hf_ieee80211_wfa_capa_attr_cert_generations_b1;
7840static int hf_ieee80211_wfa_capa_attr_cert_generations_b2;
7841static int hf_ieee80211_wfa_capa_attr_cert_generations_b3;
7842static int hf_ieee80211_wfa_capa_attr_cert_generations_reserved;
7843
7844static int hf_ieee80211_ext_tag;
7845static int hf_ieee80211_ext_tag_number;
7846static int hf_ieee80211_ext_tag_length;
7847static int hf_ieee80211_ext_tag_data;
7848
7849static int hf_ieee80211_fils_req_params_parameter_control_bitmap;
7850static int hf_ieee80211_fils_req_params_fils_criteria_present;
7851static int hf_ieee80211_fils_req_params_max_delay_limit_present;
7852static int hf_ieee80211_fils_req_params_minimum_data_rate_present;
7853static int hf_ieee80211_fils_req_params_rcpi_limit_present;
7854static int hf_ieee80211_fils_req_params_oui_response_criteria_present;
7855static int hf_ieee80211_fils_req_params_reserved;
7856static int hf_ieee80211_fils_req_params_max_channel_time;
7857static int hf_ieee80211_fils_req_params_fils_criteria;
7858static int hf_ieee80211_fils_req_params_fils_criteria_bss_delay;
7859static int hf_ieee80211_fils_req_params_fils_criteria_phy_support;
7860static int hf_ieee80211_fils_req_params_fils_criteria_reserved;
7861static int hf_ieee80211_fils_req_params_max_delay_limit;
7862static int hf_ieee80211_fils_req_params_minimum_data_rate;
7863static int hf_ieee80211_fils_req_params_rcpi_limit;
7864static int hf_ieee80211_fils_req_params_oui_response_criteria;
7865
7866static int hf_ieee80211_fils_session;
7867static int hf_ieee80211_fils_encrypted_data;
7868static int hf_ieee80211_fils_nonce;
7869
7870/* wfa 60g ie tree */
7871static int hf_ieee80211_wfa_60g_attr;
7872static int hf_ieee80211_wfa_60g_attr_id;
7873static int hf_ieee80211_wfa_60g_attr_len;
7874
7875static int hf_ieee80211_wfa_60g_attr_cap_sta_mac_addr;
7876static int hf_ieee80211_wfa_60g_attr_cap_recv_amsdu_frames;
7877static int hf_ieee80211_wfa_60g_attr_cap_reserved;
7878
7879/* ************************************************************************* */
7880/* 802.11AX fields */
7881/* ************************************************************************* */
7882static int hf_ieee80211_he_mac_capabilities;
7883static int hf_ieee80211_he_htc_he_support;
7884static int hf_ieee80211_he_twt_requester_support;
7885static int hf_ieee80211_he_twt_responder_support;
7886static int hf_ieee80211_he_dynamic_fragmentation_support;
7887static int hf_ieee80211_he_max_number_fragmented_msdus;
7888static int hf_ieee80211_he_min_fragment_size;
7889static int hf_ieee80211_he_trigger_frame_mac_padding_dur;
7890static int hf_ieee80211_he_multi_tid_aggregation_rx_support;
7891static int hf_ieee80211_he_he_link_adaptation_support;
7892static int hf_ieee80211_he_all_ack_support;
7893static int hf_ieee80211_he_trs_support;
7894static int hf_ieee80211_he_bsr_support;
7895static int hf_ieee80211_he_broadcast_twt_support;
7896static int hf_ieee80211_he_32_bit_ba_bitmap_support;
7897static int hf_ieee80211_he_mu_cascading_support;
7898static int hf_ieee80211_he_ack_enabled_aggregation_support;
7899static int hf_ieee80211_he_reserved_b24;
7900static int hf_ieee80211_he_om_control_support;
7901static int hf_ieee80211_he_ofdma_ra_support;
7902static int hf_ieee80211_he_max_a_mpdu_length_exponent_ext;
7903static int hf_ieee80211_he_a_msdu_fragmentation_support;
7904static int hf_ieee80211_he_flexible_twt_schedule_support;
7905static int hf_ieee80211_he_rx_control_frame_to_multibss;
7906static int hf_ieee80211_he_bsrp_bqrp_a_mpdu_aggregation;
7907static int hf_ieee80211_he_qtp_support;
7908static int hf_ieee80211_he_bqr_support;
7909static int hf_ieee80211_he_psr_responder;
7910static int hf_ieee80211_he_ndp_feedback_report_support;
7911static int hf_ieee80211_he_ops_support;
7912static int hf_ieee80211_he_a_msdu_in_a_mpdu_support;
7913static int hf_ieee80211_he_multi_tid_aggregation_tx_support;
7914static int hf_ieee80211_he_subchannel_selective_trans_support;
7915static int hf_ieee80211_he_2_996_tone_ru_support;
7916static int hf_ieee80211_he_om_control_ul_mu_data_disable_rx_support;
7917static int hf_ieee80211_he_dynamic_sm_power_save;
7918static int hf_ieee80211_he_punctured_sounding_support;
7919static int hf_ieee80211_he_ht_and_vht_trigger_frame_rx_support;
7920static int hf_ieee80211_he_reserved_bit_18;
7921static int hf_ieee80211_he_reserved_bit_19;
7922static int hf_ieee80211_he_reserved_bit_25;
7923static int hf_ieee80211_he_reserved_bit_29;
7924static int hf_ieee80211_he_reserved_bit_34;
7925static int hf_ieee80211_he_reserved_bits_5_7;
7926static int hf_ieee80211_he_reserved_bits_8_9;
7927static int hf_ieee80211_he_reserved_bits_15_16;
7928static int hf_ieee80211_he_phy_reserved_b0;
7929static int hf_ieee80211_he_phy_cap_reserved_b0;
7930static int hf_ieee80211_he_phy_chan_width_set;
7931static int hf_ieee80211_he_40mhz_channel_2_4ghz;
7932static int hf_ieee80211_he_40_and_80_mhz_5ghz;
7933static int hf_ieee80211_he_160_mhz_5ghz;
7934static int hf_ieee80211_he_160_80_plus_80_mhz_5ghz;
7935static int hf_ieee80211_he_242_tone_rus_in_2_4ghz;
7936static int hf_ieee80211_he_242_tone_rus_in_5ghz;
7937static int hf_ieee80211_he_5ghz_b0_reserved;
7938static int hf_ieee80211_he_5ghz_b4_reserved;
7939static int hf_ieee80211_he_24ghz_b1_reserved;
7940static int hf_ieee80211_he_24ghz_b2_reserved;
7941static int hf_ieee80211_he_24ghz_b3_reserved;
7942static int hf_ieee80211_he_24ghz_b5_reserved;
7943static int hf_ieee80211_he_chan_width_reserved;
7944static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_1_ss;
7945static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_2_ss;
7946static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_3_ss;
7947static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_4_ss;
7948static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_5_ss;
7949static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_6_ss;
7950static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_7_ss;
7951static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_8_ss;
7952static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_1_ss;
7953static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_2_ss;
7954static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_3_ss;
7955static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_4_ss;
7956static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_5_ss;
7957static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_6_ss;
7958static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_7_ss;
7959static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_8_ss;
7960static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_1_ss;
7961static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_2_ss;
7962static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_3_ss;
7963static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_4_ss;
7964static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_5_ss;
7965static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_6_ss;
7966static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_7_ss;
7967static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_8_ss;
7968static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_1_ss;
7969static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_2_ss;
7970static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_3_ss;
7971static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_4_ss;
7972static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_5_ss;
7973static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_6_ss;
7974static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_7_ss;
7975static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_8_ss;
7976static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_1_ss;
7977static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_2_ss;
7978static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_3_ss;
7979static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_4_ss;
7980static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_5_ss;
7981static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_6_ss;
7982static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_7_ss;
7983static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_8_ss;
7984static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_1_ss;
7985static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_2_ss;
7986static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_3_ss;
7987static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_4_ss;
7988static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_5_ss;
7989static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_6_ss;
7990static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_7_ss;
7991static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_8_ss;
7992static int hf_ieee80211_he_rx_he_mcs_map_lte_80;
7993static int hf_ieee80211_he_tx_he_mcs_map_lte_80;
7994static int hf_ieee80211_he_rx_he_mcs_map_160;
7995static int hf_ieee80211_he_tx_he_mcs_map_160;
7996static int hf_ieee80211_he_rx_he_mcs_map_80_80;
7997static int hf_ieee80211_he_tx_he_mcs_map_80_80;
7998static int hf_ieee80211_he_ppe_thresholds_nss;
7999static int hf_ieee80211_he_ppe_thresholds_ru_index_bitmask;
8000static int hf_ieee80211_he_ppe_ppet16;
8001static int hf_ieee80211_he_ppe_ppet8;
8002static int hf_ieee80211_he_phy_b8_to_b23;
8003static int hf_ieee80211_he_phy_cap_punctured_preamble_rx;
8004static int hf_ieee80211_he_phy_cap_device_class;
8005static int hf_ieee80211_he_phy_cap_ldpc_coding_in_payload;
8006static int hf_ieee80211_he_phy_cap_he_su_ppdu_1x_he_ltf_08us;
8007static int hf_ieee80211_he_phy_cap_midamble_tx_rx_max_nsts;
8008static int hf_ieee80211_he_phy_cap_ndp_with_4x_he_ltf_32us;
8009static int hf_ieee80211_he_phy_cap_stbc_tx_lt_80mhz;
8010static int hf_ieee80211_he_phy_cap_stbc_rx_lt_80mhz;
8011static int hf_ieee80211_he_phy_cap_doppler_tx;
8012static int hf_ieee80211_he_phy_cap_doppler_rx;
8013static int hf_ieee80211_he_phy_cap_full_bw_ul_mu_mimo;
8014static int hf_ieee80211_he_phy_cap_partial_bw_ul_mu_mimo;
8015static int hf_ieee80211_he_phy_b24_to_b39;
8016static int hf_ieee80211_he_phy_cap_dcm_max_constellation_tx;
8017static int hf_ieee80211_he_phy_cap_dcm_max_nss_tx;
8018static int hf_ieee80211_he_phy_cap_dcm_max_constellation_rx;
8019static int hf_ieee80211_he_phy_cap_dcm_max_nss_rx;
8020static int hf_ieee80211_he_phy_cap_rx_partial_bw_su_20mhz_he_mu_ppdu;
8021static int hf_ieee80211_he_phy_cap_su_beamformer;
8022static int hf_ieee80211_he_phy_cap_su_beamformee;
8023static int hf_ieee80211_he_phy_cap_mu_beamformer;
8024static int hf_ieee80211_he_phy_cap_beamformee_sts_lte_80mhz;
8025static int hf_ieee80211_he_phy_cap_beamformee_sts_gt_80mhz;
8026static int hf_ieee80211_he_phy_b40_to_b55;
8027static int hf_ieee80211_he_phy_cap_number_of_sounding_dims_lte_80;
8028static int hf_ieee80211_he_phy_cap_number_of_sounding_dims_gt_80;
8029static int hf_ieee80211_he_phy_cap_ng_eq_16_su_fb;
8030static int hf_ieee80211_he_phy_cap_ng_eq_16_mu_fb;
8031static int hf_ieee80211_he_phy_cap_codebook_size_eq_4_2_fb;
8032static int hf_ieee80211_he_phy_cap_codebook_size_eq_7_5_fb;
8033static int hf_ieee80211_he_phy_cap_triggered_su_beamforming_fb;
8034static int hf_ieee80211_he_phy_cap_triggered_mu_beamforming_fb;
8035static int hf_ieee80211_he_phy_cap_triggered_cqi_fb;
8036static int hf_ieee80211_he_phy_cap_partial_bw_extended_range;
8037static int hf_ieee80211_he_phy_cap_partial_bw_dl_mu_mimo;
8038static int hf_ieee80211_he_phy_cap_ppe_threshold_present;
8039static int hf_ieee80211_he_phy_b56_to_b71;
8040static int hf_ieee80211_he_phy_cap_psr_based_sr_support;
8041static int hf_ieee80211_he_phy_cap_power_boost_factor_ar_support;
8042static int hf_ieee80211_he_phy_cap_he_su_ppdu_etc_gi;
8043static int hf_ieee80211_he_phy_cap_max_nc;
8044static int hf_ieee80211_he_phy_cap_stbc_tx_gt_80_mhz;
8045static int hf_ieee80211_he_phy_cap_stbc_rx_gt_80_mhz;
8046static int hf_ieee80211_he_phy_cap_he_er_su_ppdu_4xxx_gi;
8047static int hf_ieee80211_he_phy_cap_20mhz_in_40mhz_24ghz_band;
8048static int hf_ieee80211_he_phy_cap_20mhz_in_160_80p80_ppdu;
8049static int hf_ieee80211_he_phy_cap_80mgz_in_160_80p80_ppdu;
8050static int hf_ieee80211_he_phy_cap_he_er_su_ppdu_1xxx_gi;
8051static int hf_ieee80211_he_phy_cap_midamble_tx_rx_2x_xxx_ltf;
8052static int hf_ieee80211_he_phy_b72_to_b87;
8053static int hf_ieee80211_he_phy_cap_dcm_max_ru;
8054static int hf_ieee80211_he_phy_cap_longer_than_16_he_sigb_ofdm_symbol_support;
8055static int hf_ieee80211_he_phy_cap_non_triggered_cqi_feedback;
8056static int hf_ieee80211_he_phy_cap_tx_1024_qam_242_tone_ru_support;
8057static int hf_ieee80211_he_phy_cap_rx_1024_qam_242_tone_ru_support;
8058static int hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_compressed_sigb;
8059static int hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_non_compressed_sigb;
8060static int hf_ieee80211_he_phy_cap_nominal_packet_padding;
8061static int hf_ieee80211_he_phy_cap_he_mu_ppdu_ru_rx_max;
8062static int hf_ieee80211_he_phy_cap_b81_b87_reserved;
8063static int hf_ieee80211_he_operation_parameter;
8064static int hf_ieee80211_he_operation_default_pe_duration;
8065static int hf_ieee80211_he_operation_twt_required;
8066static int hf_ieee80211_he_operation_txop_duration_rts_threshold;
8067static int hf_ieee80211_he_operation_vht_operation_information_present;
8068static int hf_ieee80211_he_operation_co_hosted_bss;
8069static int hf_ieee80211_he_operation_er_su_disable;
8070static int hf_ieee80211_he_operation_6ghz_operation_information_present;
8071static int hf_ieee80211_he_operation_reserved_b16_b23;
8072static int hf_ieee80211_he_bss_color_information;
8073static int hf_ieee80211_he_bss_color_info_bss_color;
8074static int hf_ieee80211_he_bss_color_partial_bss_color;
8075static int hf_ieee80211_he_bss_color_bss_color_disabled;
8076static int hf_ieee80211_he_operation_basic_mcs;
8077static int hf_ieee80211_he_oper_max_he_mcs_for_1_ss;
8078static int hf_ieee80211_he_oper_max_he_mcs_for_2_ss;
8079static int hf_ieee80211_he_oper_max_he_mcs_for_3_ss;
8080static int hf_ieee80211_he_oper_max_he_mcs_for_4_ss;
8081static int hf_ieee80211_he_oper_max_he_mcs_for_5_ss;
8082static int hf_ieee80211_he_oper_max_he_mcs_for_6_ss;
8083static int hf_ieee80211_he_oper_max_he_mcs_for_7_ss;
8084static int hf_ieee80211_he_oper_max_he_mcs_for_8_ss;
8085static int hf_ieee80211_he_operation_channel_width;
8086static int hf_ieee80211_he_operation_channel_center_freq_0;
8087static int hf_ieee80211_he_operation_channel_center_freq_1;
8088static int hf_ieee80211_he_operation_max_co_hosted_bssid_indicator;
8089static int hf_ieee80211_he_operation_6ghz_primary_channel;
8090static int hf_ieee80211_he_operation_6ghz_control;
8091static int hf_ieee80211_he_operation_6ghz_control_channel_width;
8092static int hf_ieee80211_he_operation_6ghz_control_duplicate_beacon;
8093static int hf_ieee80211_he_operation_6ghz_control_regulatory_info;
8094static int hf_ieee80211_he_operation_6ghz_control_reserved;
8095static int hf_ieee80211_he_operation_6ghz_channel_center_freq_0;
8096static int hf_ieee80211_he_operation_6ghz_channel_center_freq_1;
8097static int hf_ieee80211_he_operation_6ghz_minimum_rate;
8098static int hf_ieee80211_he_muac_aci_aifsn;
8099static int hf_ieee80211_he_muac_aifsn;
8100static int hf_ieee80211_he_muac_acm;
8101static int hf_ieee80211_he_muac_aci;
8102static int hf_ieee80211_he_muac_reserved;
8103static int hf_ieee80211_he_mu_edca_timer;
8104static int hf_ieee80211_he_muac_ecwmin_ecwmax;
8105static int hf_ieee80211_he_srp_disallowed;
8106static int hf_ieee80211_he_non_srg_obss_pd_sr_disallowed;
8107static int hf_ieee80211_he_non_srg_offset_present;
8108static int hf_ieee80211_he_srg_information_present;
8109static int hf_ieee80211_he_hesiga_spatial_reuse_value15_allowed;
8110static int hf_ieee80211_he_sr_control_reserved;
8111static int hf_ieee80211_he_spatial_reuse_sr_control;
8112static int hf_ieee80211_he_spatial_non_srg_obss_pd_max_offset;
8113static int hf_ieee80211_he_spatial_srg_obss_pd_min_offset;
8114static int hf_ieee80211_he_spatial_srg_obss_pd_max_offset;
8115static int hf_ieee80211_he_spatial_srg_bss_color_bitmap;
8116static int hf_ieee80211_he_spatial_srg_partial_bssid_bitmap;
8117static int hf_ieee80211_he_ess_report_planned_ess;
8118static int hf_ieee80211_he_ess_report_edge_of_ess;
8119static int hf_ieee80211_he_resource_request_buffer_thresh;
8120static int hf_ieee80211_he_bss_color_change_new_color_info;
8121static int hf_ieee80211_he_new_bss_color_info_color;
8122static int hf_ieee80211_he_new_bss_color_info_reserved;
8123static int hf_ieee80211_he_bss_color_change_switch_countdown;
8124static int hf_ieee80211_he_ess_report_info_field;
8125static int hf_ieee80211_he_ess_report_recommend_transition_thresh;
8126static int hf_ieee80211_he_ops_duration;
8127static int hf_ieee80211_he_uora_field;
8128static int hf_ieee80211_he_uora_eocwmin;
8129static int hf_ieee80211_he_uora_owcwmax;
8130static int hf_ieee80211_he_uora_reserved;
8131
8132static int hf_ieee80211_max_channel_switch_time;
8133
8134static int hf_ieee80211_oci_operating_class;
8135static int hf_ieee80211_oci_primary_channel_number;
8136static int hf_ieee80211_oci_frequency_segment_1;
8137static int hf_ieee80211_oci_oct_operating_class;
8138static int hf_ieee80211_oci_oct_primary_channel_number;
8139static int hf_ieee80211_oci_oct_frequency_segment_1;
8140
8141static int hf_ieee80211_multiple_bssid_configuration_bssid_count;
8142static int hf_ieee80211_multiple_bssid_configuration_full_set_rx_periodicity;
8143static int hf_ieee80211_known_bssid_bitmap;
8144static int hf_ieee80211_short_ssid;
8145
8146static int hf_ieee80211_non_inheritance_element_id_list_length;
8147static int hf_ieee80211_non_inheritance_element_id_list_element_id;
8148static int hf_ieee80211_non_inheritance_element_id_ext_list_length;
8149static int hf_ieee80211_non_inheritance_element_id_ext_list_element_id_ext;
8150
8151static int hf_ieee80211_rejected_groups_group;
8152
8153static int hf_ieee80211_twt_bcast_flow;
8154static int hf_ieee80211_twt_individual_flow;
8155static int hf_ieee80211_twt_individual_flow_id;
8156static int hf_ieee80211_twt_individual_reserved;
8157static int hf_ieee80211_twt_bcast_id;
8158static int hf_ieee80211_twt_neg_type;
8159static int hf_ieee80211_twt_neg_type2_reserved1;
8160static int hf_ieee80211_twt_neg_type2_reserved2;
8161static int hf_ieee80211_twt_bcast_teardown_all;
8162static int hf_ieee80211_twt_bcast_teardown_all_twt;
8163static int hf_ieee80211_twt_bcast_twt_id_reserved;
8164static int hf_ieee80211_twt_bcast_neg_type_reserved;
8165
8166static int hf_ieee80211_tag_twt_control_field;
8167static int hf_ieee80211_tag_twt_ndp_paging_indicator;
8168static int hf_ieee80211_tag_twt_responder_pm_mode;
8169static int hf_ieee80211_tag_twt_neg_type;
8170static int hf_ieee80211_tag_twt_info_frame_disabled;
8171static int hf_ieee80211_tag_twt_wake_duration_unit;
8172static int hf_ieee80211_tag_twt_link_id_bitmap_present;
8173static int hf_ieee80211_tag_twt_aligned_twt;
8174
8175static int hf_ieee80211_tag_twt_req_type_field;
8176static int hf_ieee80211_tag_twt_req_type_req;
8177static int hf_ieee80211_tag_twt_req_type_setup_cmd;
8178static int hf_ieee80211_tag_twt_req_type_trigger;
8179static int hf_ieee80211_tag_twt_req_type_implicit;
8180static int hf_ieee80211_tag_twt_req_type_flow_type;
8181static int hf_ieee80211_tag_twt_req_type_flow_id;
8182static int hf_ieee80211_tag_twt_req_type_wake_int_exp;
8183static int hf_ieee80211_tag_twt_req_type_prot;
8184static int hf_ieee80211_tag_twt_req_type_last_bcst_parm_set;
8185static int hf_ieee80211_tag_twt_req_type_bcst_twt_recom;
8186static int hf_ieee80211_tag_twt_req_type_aligned;
8187
8188static int hf_ieee80211_tag_twt_ndp_paging_field;
8189static int hf_ieee80211_tag_twt_ndp_paging_p_id;
8190static int hf_ieee80211_tag_twt_ndp_max_ndp_paging_period;
8191static int hf_ieee80211_tag_twt_ndp_partial_tsf_offset;
8192static int hf_ieee80211_tag_twt_ndp_action;
8193static int hf_ieee80211_tag_twt_ndp_min_sleep_duration;
8194static int hf_ieee80211_tag_twt_ndp_reserved;
8195static int hf_ieee80211_tag_twt_link_id_bitmap;
8196static int hf_ieee80211_tag_twt_aligned_twt_link_bitmap;
8197static int hf_ieee80211_tag_twt_broadcast_info;
8198static int hf_ieee80211_tag_twt_bcast_info_persistence;
8199static int hf_ieee80211_tag_twt_bcast_info_id;
8200static int hf_ieee80211_tag_twt_bcast_info_rtwt_traffic_present;
8201static int hf_ieee80211_tag_twt_bcast_info_rtwt_sche_info;
8202static int hf_ieee80211_tag_twt_traffic_info_control;
8203static int hf_ieee80211_tag_twt_traffic_info_dl_bitmap_valid;
8204static int hf_ieee80211_tag_twt_traffic_info_ul_bitmap_valid;
8205static int hf_ieee80211_tag_twt_traffic_info_reserved;
8206static int hf_ieee80211_tag_twt_traffic_info_rtwt_dl_bitmap;
8207static int hf_ieee80211_tag_twt_traffic_info_rtwt_ul_bitmap;
8208
8209static int hf_ieee80211_tag_twt_target_wake_time;
8210static int hf_ieee80211_tag_twt_target_wake_time_short;
8211static int hf_ieee80211_tag_twt_nom_min_twt_wake_dur;
8212static int hf_ieee80211_tag_twt_wake_interval_mantissa;
8213static int hf_ieee80211_tag_twt_channel;
8214
8215static int hf_ieee80211_tag_rsnx;
8216/* octet 1 */
8217static int hf_ieee80211_tag_rsnx_length;
8218static int hf_ieee80211_tag_rsnx_protected_twt_operations_support;
8219static int hf_ieee80211_tag_rsnx_sae_hash_to_element;
8220static int hf_ieee80211_tag_rsnx_sae_pk;
8221static int hf_ieee80211_tag_rsnx_protected_wur_frame_support;
8222/* octet 2 */
8223static int hf_ieee80211_tag_rsnx_secure_ltf_support;
8224static int hf_ieee80211_tag_rsnx_secure_rtt_supported;
8225static int hf_ieee80211_tag_rsnx_urnm_mfpr_x20;
8226static int hf_ieee80211_tag_rsnx_protected_announce_support;
8227static int hf_ieee80211_tag_rsnx_pbac;
8228static int hf_ieee80211_tag_rsnx_extended_s1g_action_protection;
8229static int hf_ieee80211_tag_rsnx_spp_amsdu_capable;
8230static int hf_ieee80211_tag_rsnx_urnm_mfpr;
8231static int hf_ieee80211_tag_rsnx_reserved;
8232
8233static int hf_ieee80211_wfa_rsn_selection;
8234static int hf_ieee80211_wfa_rsn_or_link_kde_link_id;
8235
8236static int hf_ieee80211_nonap_sta_regulatory_conn;
8237static int hf_ieee80211_nonap_sta_regu_conn_indoor_ap_valid;
8238static int hf_ieee80211_nonap_sta_regu_conn_indoor_ap;
8239static int hf_ieee80211_nonap_sta_regu_conn_sp_ap_valid;
8240static int hf_ieee80211_nonap_sta_regu_conn_sp_ap;
8241static int hf_ieee80211_nonap_sta_regu_conn_reserved;
8242
8243static int hf_ieee80211_tag_channel_usage_mode;
8244
8245static int hf_ieee80211_ff_count;
8246
8247static int hf_ieee80211_tag_dms_id;
8248static int hf_ieee80211_tag_dms_length;
8249static int hf_ieee80211_tag_dms_req_type;
8250static int hf_ieee80211_tag_dms_resp_type;
8251static int hf_ieee80211_tag_dms_last_seq_control;
8252
8253/* ************************************************************************* */
8254/* RFC 8110 fields */
8255/* ************************************************************************* */
8256static int hf_ieee80211_owe_dh_parameter_group;
8257static int hf_ieee80211_owe_dh_parameter_public_key;
8258
8259/* ************************************************************************* */
8260/* Protocol trees */
8261/* ************************************************************************* */
8262static int ett_80211;
8263static int ett_proto_flags;
8264static int ett_cap_tree;
8265static int ett_fc_tree;
8266static int ett_cntrl_wrapper_fc;
8267static int ett_cntrl_wrapper_payload;
8268static int ett_fragments;
8269static int ett_fragment;
8270static int ett_block_ack;
8271static int ett_block_ack_tid;
8272static int ett_block_ack_request_control;
8273static int ett_block_ack_bitmap;
8274static int ett_block_ack_request_multi_sta_aid_tid;
8275static int ett_multi_sta_block_ack;
8276static int ett_ath_cap_tree;
8277static int ett_extreme_mesh_services_tree;
8278static int ett_addr;
8279
8280static int ett_80211_mgt;
8281static int ett_fixed_parameters;
8282static int ett_tagged_parameters;
8283static int ett_tag_bmapctl_tree;
8284static int ett_s1g_pvb_tree;
8285static int ett_s1g_pvb_eb_tree;
8286static int ett_s1g_pvb_block_control_byte;
8287static int ett_s1g_pvb_block_bitmap_tree;
8288static int ett_s1g_pvb_subblock_tree;
8289static int ett_s1g_pvb_olb_tree;
8290static int ett_s1g_pvb_olb_subblock;
8291static int ett_s1g_pvb_ade_tree;
8292static int ett_s1g_pvb_ade_control;
8293static int ett_tag_country_fnm_tree;
8294static int ett_tag_country_rcc_tree;
8295static int ett_qos_parameters;
8296static int ett_qos_ps_buf_state;
8297static int ett_wep_parameters;
8298static int ett_msh_control;
8299static int ett_hwmp_targ_flags_tree;
8300static int ett_mesh_chswitch_flag_tree;
8301static int ett_mesh_config_cap_tree;
8302static int ett_mesh_formation_info_tree;
8303static int ett_bcn_timing_rctrl_tree;
8304static int ett_bcn_timing_info_tree;
8305static int ett_gann_flags_tree;
8306static int ett_pxu_proxy_info_tree;
8307static int ett_pxu_proxy_info_flags_tree;
8308
8309static int ett_rsn_gcs_tree;
8310static int ett_rsn_pcs_tree;
8311static int ett_rsn_sub_pcs_tree;
8312static int ett_rsn_akms_tree;
8313static int ett_rsn_sub_akms_tree;
8314static int ett_rsn_cap_tree;
8315static int ett_rsn_pmkid_tree;
8316static int ett_rsn_gmcs_tree;
8317
8318static int ett_kde_mlo_link_info;
8319
8320static int ett_wpa_mcs_tree;
8321static int ett_wpa_ucs_tree;
8322static int ett_wpa_sub_ucs_tree;
8323static int ett_wpa_akms_tree;
8324static int ett_wpa_sub_akms_tree;
8325static int ett_wme_ac;
8326static int ett_wme_aci_aifsn;
8327static int ett_wme_ecw;
8328static int ett_wme_qos_info;
8329
8330static int ett_update_edca_info;
8331
8332static int ett_ht_cap_tree;
8333static int ett_ampduparam_tree;
8334static int ett_mcsset_tree;
8335static int ett_mcsbit_tree;
8336static int ett_htex_cap_tree;
8337static int ett_txbf_tree;
8338static int ett_antsel_tree;
8339static int ett_hta_cap_tree;
8340static int ett_hta_cap1_tree;
8341static int ett_hta_cap2_tree;
8342
8343static int ett_s1g_ndp;
8344static int ett_s1g_ndp_ack;
8345static int ett_s1g_ndp_cts;
8346static int ett_s1g_ndp_cf_end;
8347static int ett_s1g_ndp_ps_poll;
8348static int ett_s1g_ndp_ps_poll_ack;
8349static int ett_s1g_ndp_block_ack;
8350static int ett_s1g_ndp_beamforming_report_poll;
8351static int ett_s1g_ndp_paging;
8352static int ett_s1g_ndp_probe;
8353static int ett_pv1_sid;
8354static int ett_pv1_sid_field;
8355static int ett_pv1_seq_control;
8356static int ett_ieee80211_s1g_capabilities_info;
8357static int ett_ieee80211_s1g_capabilities;
8358static int ett_s1g_cap_byte1;
8359static int ett_s1g_cap_byte2;
8360static int ett_s1g_cap_byte3;
8361static int ett_s1g_cap_byte4;
8362static int ett_s1g_cap_byte5;
8363static int ett_s1g_cap_byte6;
8364static int ett_s1g_cap_byte7;
8365static int ett_s1g_cap_byte8;
8366static int ett_s1g_cap_byte9;
8367static int ett_s1g_cap_byte10;
8368static int ett_ieee80211_s1g_sup_mcs_and_nss_set;
8369static int ett_s1g_mcs_and_mcs_set;
8370static int ett_s1g_operation_info;
8371static int ett_s1g_channel_width;
8372static int ett_s1g_subchannel_selective_transmission;
8373static int ett_s1g_raw_assignment;
8374static int ett_s1g_raw_assn_tree;
8375static int ett_s1g_raw_control;
8376static int ett_s1g_raw_slot_def;
8377static int ett_s1g_raw_group_subfield;
8378static int ett_s1g_raw_channel_indication;
8379static int ett_s1g_page_slice_control;
8380static int ett_s1g_aid_request_mode;
8381static int ett_s1g_aid_characteristic;
8382static int ett_s1g_sector_operation;
8383static int ett_tack_info;
8384static int ett_ieee80211_s1g_auth_control;
8385static int ett_s1g_relay_control;
8386static int ett_s1g_relay_function;
8387static int ett_ieee80211_s1g_addr_list;
8388static int ett_ieee80211_s1g_reach_addr;
8389static int ett_s1g_relay_discovery_control;
8390static int ett_ieee80211_s1g_aid_entry;
8391static int ett_s1g_probe_resp_subfield_0;
8392static int ett_s1g_header_comp_control;
8393static int ett_pv1_mgmt_action;
8394static int ett_pv1_mgmt_action_no_ack;
8395static int ett_pv1_cntl_stack;
8396static int ett_pv1_cntl_bat;
8397
8398static int ett_htc_tree;
8399static int ett_htc_he_a_control;
8400static int ett_mfb_subtree;
8401static int ett_lac_subtree;
8402static int ett_ieee80211_buffer_status_report;
8403static int ett_ieee80211_a_control_padding;
8404static int ett_ieee80211_a_control_ones;
8405static int ett_ieee80211_triggered_response_schedule;
8406static int ett_ieee80211_control_om;
8407static int ett_ieee80211_hla_control;
8408static int ett_ieee80211_control_uph;
8409static int ett_ieee80211_buffer_control_bqr;
8410static int ett_ieee80211_control_cci;
8411static int ett_ieee80211_control_eht_om;
8412static int ett_ieee80211_control_srs;
8413static int ett_ieee80211_control_aar;
8414
8415static int ett_vht_cap_tree;
8416static int ett_vht_mcsset_tree;
8417static int ett_vht_rx_mcsbit_tree;
8418static int ett_vht_tx_mcsbit_tree;
8419static int ett_vht_basic_mcsbit_tree;
8420static int ett_vht_op_tree;
8421static int ett_vht_tpe_info_tree;
8422static int ett_tpe_psd;
8423
8424static int ett_vht_ranging_annc;
8425static int ett_ndp_ranging_annc_sta_info;
8426
8427static int ett_ff_he_action;
8428static int ett_ff_protected_he_action;
8429static int ett_ff_protected_eht_action;
8430static int ett_ff_he_mimo_control;
8431static int ett_ff_he_mimo_beamforming_report_snr;
8432static int ett_ff_he_mimo_feedback_matrices;
8433
8434static int ett_ff_vhtmimo_cntrl;
8435static int ett_ff_vhtmimo_beamforming_report;
8436static int ett_ff_vhtmimo_beamforming_report_snr;
8437static int ett_ff_vhtmimo_beamforming_angle;
8438static int ett_ff_vhtmimo_beamforming_report_feedback_matrices;
8439static int ett_ff_vhtmu_exclusive_beamforming_report_matrices;
8440
8441static int ett_vht_grpidmgmt;
8442static int ett_vht_msa;
8443static int ett_vht_upa;
8444
8445static int ett_ht_operation_info_delimiter1_tree;
8446static int ett_ht_operation_info_delimiter2_tree;
8447static int ett_ht_operation_info_delimiter3_tree;
8448
8449static int ett_ff_ftm_param_delim1;
8450static int ett_ff_ftm_param_delim2;
8451static int ett_ff_ftm_param_delim3;
8452static int ett_ff_ftm_tod_err1;
8453static int ett_ff_ftm_toa_err1;
8454static int ett_tag_ranging;
8455static int ett_tag_ranging_ntb;
8456static int ett_tag_ranging_secure_he_ltf;
8457
8458static int ett_ranging_subelement_tree;
8459
8460static int ett_tag_direct_meas_results;
8461
8462static int ett_rsta_avail_header;
8463static int ett_rsta_avail_tree;
8464static int ett_rsta_avail_subfield;
8465
8466static int ett_pasn_parameters;
8467static int ett_pasn_comeback_tree;
8468
8469static int ett_pasn_auth_frame;
8470
8471/* 802.11be trees */
8472static int ett_eht_multi_link_control;
8473static int ett_eht_multi_link_common_info;
8474static int ett_eht_multi_link_common_info_link_id;
8475static int ett_eht_multi_link_common_info_medium_sync;
8476static int ett_eht_multi_link_common_info_eml_capa;
8477static int ett_eht_multi_link_common_info_mld_capa;
8478static int ett_eht_multi_link_common_info_ext_mld_capa;
8479static int ett_eht_multi_link_per_sta;
8480static int ett_eht_multi_link_subelt;
8481static int ett_eht_multi_link_sta_control;
8482static int ett_eht_multi_link_per_sta_info;
8483static int ett_eht_multi_link_sta_dtim;
8484static int ett_eht_multi_link_reconf_oper_param;
8485static int ett_eht_multi_link_reconfig_presence_indi;
8486static int ett_eht_multi_link_reconfig_operation_para_info;
8487static int ett_eht_operation_params;
8488static int ett_eht_operation_control;
8489static int ett_eht_mac_capa;
8490static int ett_eht_phy_capa;
8491static int ett_eht_phy_bits_0_15;
8492static int ett_eht_phy_bits_16_31;
8493static int ett_eht_phy_bits_32_39;
8494static int ett_eht_phy_bits_40_63;
8495static int ett_eht_phy_bits_64_71;
8496static int ett_eht_phy_mcs_nss;
8497static int ett_eht_phy_mcs_nss_set;
8498static int ett_eht_ttl_mapping;
8499static int ett_eht_ttl_mapping_link_mapping;
8500static int ett_eht_eht_multi_link_tc;
8501static int ett_eht_qos_characteristics;
8502static int ett_eht_aid_bmapctl_tree;
8503static int ett_eht_bw_indication_param;
8504static int ett_eht_eml_control;
8505static int ett_eht_eml_control_link_map;
8506static int ett_eht_eml_control_mcs_map_count;
8507static int ett_eht_emlsr_para_update;
8508static int ett_eht_mimo_ctrl;
8509static int ett_eht_beamforming_rpt_ru_index;
8510static int ett_eht_beamforming_feedback_tree;
8511static int ett_ff_eht_mimo_beamforming_report_snr;
8512static int ett_ff_eht_mimo_mu_exclusive_report;
8513static int ett_eht_mu_exclusive_beamforming_rpt_ru_index;
8514static int ett_eht_reconfig_status_list;
8515static int ett_eht_group_key_data;
8516
8517static int ett_tag_measure_request_mode_tree;
8518static int ett_tag_measure_request_type_tree;
8519static int ett_tag_measure_request_sub_element_tree;
8520static int ett_tag_measure_report_mode_tree;
8521static int ett_tag_measure_report_type_tree;
8522static int ett_tag_measure_report_basic_map_tree;
8523static int ett_tag_measure_report_rpi_tree;
8524static int ett_tag_measure_report_frame_tree;
8525static int ett_tag_measure_report_sub_element_tree;
8526static int ett_tag_measure_reported_frame_tree;
8527static int ett_tag_measure_reported_frame_frag_id_tree;
8528static int ett_tag_measure_reported_lci_z_tree;
8529static int ett_tag_measure_reported_lci_urp_tree;
8530static int ett_tag_bss_bitmask_tree;
8531static int ett_tag_dfs_map_tree;
8532static int ett_tag_dfs_map_flags_tree;
8533static int ett_tag_erp_info_tree;
8534static int ett_tag_ex_cap1;
8535static int ett_tag_ex_cap2;
8536static int ett_tag_ex_cap3;
8537static int ett_tag_ex_cap4;
8538static int ett_tag_ex_cap5;
8539static int ett_tag_ex_cap6;
8540static int ett_tag_ex_cap7;
8541static int ett_tag_ex_cap8;
8542static int ett_tag_ex_cap89;
8543static int ett_tag_ex_cap10;
8544static int ett_tag_ex_cap11;
8545static int ett_tag_ex_cap12;
8546static int ett_tag_ex_cap13;
8547static int ett_tag_ex_cap14;
8548
8549static int ett_tag_rm_cap1;
8550static int ett_tag_rm_cap2;
8551static int ett_tag_rm_cap3;
8552static int ett_tag_rm_cap4;
8553static int ett_tag_rm_cap5;
8554
8555static int ett_tag_rsnx_octet1;
8556static int ett_tag_rsnx_octet2;
8557
8558static int ett_tag_multiple_bssid_subelem_tree;
8559static int ett_tag_20_40_bc;
8560
8561static int ett_tag_intolerant_tree;
8562
8563static int ett_tag_tclas_mask_tree;
8564
8565static int ett_tag_supported_channels;
8566
8567static int ett_tag_neighbor_report_bssid_info_tree;
8568static int ett_tag_neighbor_report_bssid_info_capability_tree;
8569static int ett_tag_neighbor_report_subelement_tree;
8570static int ett_tag_neighbor_report_sub_tag_tree;
8571
8572static int ett_tag_wapi_param_set_akm_tree;
8573static int ett_tag_wapi_param_set_ucast_tree;
8574static int ett_tag_wapi_param_set_mcast_tree;
8575static int ett_tag_wapi_param_set_preauth_tree;
8576
8577static int ett_max_idle_period_options;
8578
8579static int ett_tag_time_adv_tree;
8580
8581static int ett_tag_he_6ghz_cap_inf_tree;
8582
8583static int ett_ff_ba_param_tree;
8584static int ett_ff_ba_ssc_tree;
8585static int ett_ff_delba_param_tree;
8586static int ett_ff_qos_info;
8587static int ett_ff_sm_pwr_save;
8588static int ett_ff_psmp_param_set;
8589static int ett_ff_mimo_cntrl;
8590static int ett_ff_ant_sel;
8591static int ett_mimo_report;
8592static int ett_ff_chan_switch_announce;
8593static int ett_ff_ht_info;
8594static int ett_ff_psmp_sta_info;
8595
8596static int ett_tpc;
8597
8598static int ett_msdu_aggregation_parent_tree;
8599static int ett_msdu_aggregation_subframe_tree;
8600
8601static int ett_80211_mgt_ie;
8602static int ett_tsinfo_tree;
8603static int ett_sched_tree;
8604
8605static int ett_fcs;
8606
8607static int ett_hs20_osu_providers_list;
8608static int ett_hs20_osu_provider_tree;
8609static int ett_hs20_friendly_names_list;
8610static int ett_hs20_friendly_name_tree;
8611static int ett_hs20_osu_provider_method_list;
8612static int ett_osu_icons_avail_list;
8613static int ett_hs20_osu_icon_tree;
8614static int ett_hs20_osu_service_desc_list;
8615static int ett_hs20_osu_service_desc_tree;
8616static int ett_hs20_venue_url;
8617static int ett_hs20_advice_of_charge;
8618static int ett_hs20_aoc_plan;
8619
8620static int ett_hs20_ofn_tree;
8621
8622static int ett_adv_proto;
8623static int ett_adv_proto_tuple;
8624static int ett_gas_query;
8625static int ett_gas_anqp;
8626static int ett_nai_realm;
8627static int ett_nai_realm_eap;
8628static int ett_tag_ric_data_desc_ie;
8629static int ett_anqp_vendor_capab;
8630
8631static int ett_osen_group_data_cipher_suite;
8632static int ett_osen_pairwise_cipher_suites;
8633static int ett_osen_pairwise_cipher_suite;
8634static int ett_osen_akm_cipher_suites;
8635static int ett_osen_akm_cipher_suite;
8636static int ett_osen_rsn_cap_tree;
8637static int ett_osen_pmkid_list;
8638static int ett_osen_pmkid_tree;
8639static int ett_osen_group_management_cipher_suite;
8640
8641static int ett_hs20_cc_proto_port_tuple;
8642
8643static int ett_tag_no_bssid_capability_dmg_bss_control_tree;
8644static int ett_ssid_list;
8645
8646static int ett_sgdsn;
8647static int ett_nintendo;
8648
8649static int ett_routerboard;
8650
8651static int ett_meru;
8652
8653static int ett_wisun_gtkl;
8654static int ett_wisun_lgtkl;
8655
8656static int ett_qos_map_set_exception;
8657static int ett_qos_map_set_range;
8658
8659static int ett_wnm_notif_subelt;
8660
8661static int ett_ieee80211_3gpp_plmn;
8662
8663static int ett_mbo_oce_attr;
8664static int ett_mbo_ap_cap;
8665static int ett_oce_cap;
8666static int ett_oce_metrics_cap;
8667
8668static int ett_tag_mobility_domain_ft_capab_tree;
8669
8670static int ett_tag_ft_mic_control_tree;
8671static int ett_tag_ft_subelem_tree;
8672
8673static int ett_qos_mgmt_pol_capa;
8674static int ett_qos_mgmt_attributes;
8675static int ett_qos_mgmt_dscp_policy_capabilities;
8676static int ett_qos_mgmt_dscp_policy;
8677static int ett_qos_mgmt_tclas;
8678static int ett_qos_mgmt_domain_name;
8679static int ett_qos_mgmt_unknown_attribute;
8680static int ett_dscp_policy_status_list;
8681static int ett_pol_rqst_cont_tree;
8682static int ett_pol_resp_cont_tree;
8683
8684static int ett_wfa_capa;
8685static int ett_wfa_capa_attributes;
8686static int ett_wfa_capa_supp_gene;
8687static int ett_wfa_capa_cert_gene;
8688
8689static expert_field ei_ieee80211_bad_length;
8690static expert_field ei_ieee80211_inv_val;
8691static expert_field ei_ieee80211_vht_tpe_pwr_info_count;
8692static expert_field ei_ieee80211_vht_tpe_pwr_info_unit;
8693static expert_field ei_ieee80211_ff_query_response_length;
8694static expert_field ei_ieee80211_ff_anqp_nai_realm_eap_len;
8695static expert_field ei_hs20_anqp_nai_hrq_length;
8696static expert_field ei_ieee80211_extra_data;
8697static expert_field ei_ieee80211_tag_data;
8698static expert_field ei_ieee80211_tdls_setup_confirm_malformed;
8699static expert_field ei_ieee80211_ff_anqp_nai_field_len;
8700static expert_field ei_ieee80211_rsn_pcs_count;
8701static expert_field ei_ieee80211_tag_measure_request_unknown;
8702static expert_field ei_ieee80211_tag_measure_request_beacon_unknown;
8703static expert_field ei_ieee80211_tag_measure_report_unknown;
8704static expert_field ei_ieee80211_tag_measure_report_beacon_unknown;
8705static expert_field ei_ieee80211_tag_measure_report_lci_unknown;
8706static expert_field ei_ieee80211_tag_number;
8707static expert_field ei_ieee80211_ff_anqp_info_length;
8708static expert_field ei_hs20_anqp_ofn_length;
8709static expert_field ei_ieee80211_tdls_setup_response_malformed;
8710static expert_field ei_ieee80211_ff_anqp_capability;
8711static expert_field ei_ieee80211_not_enough_room_for_anqp_header;
8712static expert_field ei_ieee80211_ff_query_request_length;
8713static expert_field ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype;
8714static expert_field ei_ieee80211_qos_info_bad_ftype;
8715static expert_field ei_ieee80211_qos_bad_aifsn;
8716static expert_field ei_ieee80211_pmkid_count_too_large;
8717static expert_field ei_ieee80211_ff_anqp_venue_length;
8718static expert_field ei_ieee80211_ff_anqp_roaming_consortium_oi_len;
8719static expert_field ei_ieee80211_tag_length;
8720static expert_field ei_ieee80211_missing_data;
8721static expert_field ei_ieee80211_rsn_pmkid_count;
8722static expert_field ei_ieee80211_fc_retry;
8723static expert_field ei_ieee80211_tag_wnm_sleep_mode_no_key_data;
8724static expert_field ei_ieee80211_dmg_subtype;
8725static expert_field ei_ieee80211_vht_action;
8726static expert_field ei_ieee80211_mesh_peering_unexpected;
8727static expert_field ei_ieee80211_fcs;
8728static expert_field ei_ieee80211_mismatched_akm_suite;
8729static expert_field ei_ieee80211_vs_routerboard_unexpected_len;
8730static expert_field ei_ieee80211_vs_sgdsn_serialnumber_invalid_len_val;
8731static expert_field ei_ieee80211_vs_sgdsn_serialnumber_unexpected_len_val;
8732static expert_field ei_ieee80211_twt_tear_down_bad_neg_type;
8733static expert_field ei_ieee80211_twt_setup_bad_command;
8734static expert_field ei_ieee80211_twt_bcast_info_no_term;
8735static expert_field ei_ieee80211_invalid_control_word;
8736static expert_field ei_ieee80211_invalid_control_id;
8737static expert_field ei_ieee80211_invalid_control_length;
8738static expert_field ei_ieee80211_wfa_60g_attr_len_invalid;
8739static expert_field ei_ieee80211_wfa_60g_unknown_attribute;
8740static expert_field ei_ieee80211_htc_in_dmg_packet;
8741static expert_field ei_ieee80211_eht_invalid_subelement;
8742static expert_field ei_ieee80211_eht_invalid_action;
8743static expert_field ei_ieee80211_eht_invalid_multi_link;
8744static expert_field ei_ieee80211_eht_invalid_nc_nr;
8745
8746
8747/* 802.11ad trees */
8748static int ett_dynamic_alloc_tree;
8749static int ett_ssw_tree;
8750static int ett_bf_tree;
8751static int ett_sswf_tree;
8752static int ett_brp_tree;
8753static int ett_blm_tree;
8754static int ett_bic_tree;
8755static int ett_dmg_params_tree;
8756static int ett_cc_tree;
8757static int ett_rcsi_tree;
8758static int ett_80211_ext;
8759static int ett_allocation_tree;
8760static int ett_sta_info;
8761
8762static int ett_ieee80211_esp;
8763
8764static int ett_ieee80211_wfa_60g_attr;
8765static int ett_ieee80211_wfa_transition_disable_tree;
8766
8767/* 802.11ah trees */
8768static int ett_s1g_sync_control_tree;
8769static int ett_s1g_sector_id_index;
8770static int ett_s1g_twt_information_control;
8771static int ett_twt_tear_down_tree;
8772static int ett_twt_control_field_tree;
8773static int ett_twt_req_type_tree;
8774static int ett_twt_ndp_paging_field_tree;
8775static int ett_twt_broadcast_info_tree;
8776static int ett_twt_traffic_info_tree;
8777static int ett_twt_traffic_info_control_tree;
8778
8779/* 802.11ax trees */
8780static int ett_he_mac_capabilities;
8781static int ett_he_phy_capabilities;
8782static int ett_he_phy_cap_first_byte;
8783static int ett_he_phy_cap_chan_width_set;
8784static int ett_he_phy_cap_b8_to_b23;
8785static int ett_he_phy_cap_b24_to_b39;
8786static int ett_he_phy_cap_b40_to_b55;
8787static int ett_he_phy_cap_b56_to_b71;
8788static int ett_he_phy_cap_b72_to_b87;
8789static int ett_he_mcs_and_nss_set;
8790static int ett_he_rx_tx_he_mcs_map_lte_80;
8791static int ett_he_rx_mcs_map_lte_80;
8792static int ett_he_tx_mcs_map_lte_80;
8793static int ett_he_rx_tx_he_mcs_map_160;
8794static int ett_he_rx_mcs_map_160;
8795static int ett_he_tx_mcs_map_160;
8796static int ett_he_rx_tx_he_mcs_map_80_80;
8797static int ett_he_rx_mcs_map_80_80;
8798static int ett_he_tx_mcs_map_80_80;
8799static int ett_he_ppe_threshold;
8800static int ett_he_ppe_nss;
8801static int ett_he_ppe_ru_alloc;
8802static int ett_he_uora_tree;
8803static int ett_he_aic_aifsn;
8804static int ett_he_spatial_reuse_control;
8805static int ett_he_bss_new_color_info;
8806static int ett_he_ess_report_info_field;
8807static int ett_he_operation_params;
8808static int ett_he_bss_color_information;
8809static int ett_he_oper_basic_mcs;
8810static int ett_he_operation_vht_op_info;
8811static int ett_mscs_user_prio;
8812static int ett_ieee80211_user_prio_bitmap;
8813static int ett_ieee80211_intra_access_prio;
8814static int ett_he_operation_6ghz;
8815static int ett_he_operation_6ghz_control;
8816static int ett_he_mu_edca_param;
8817static int ett_he_trigger_common_info;
8818static int ett_he_trigger_ranging;
8819static int ett_he_trigger_ranging_poll;
8820static int ett_he_trigger_packet_extension;
8821static int ett_he_trigger_base_common_info;
8822static int ett_he_trigger_bar_ctrl;
8823static int ett_he_trigger_bar_info;
8824static int ett_he_trigger_user_info;
8825static int ett_he_trigger_base_user_info;
8826static int ett_he_trigger_dep_basic_user_info;
8827static int ett_he_trigger_dep_nfrp_user_info;
8828static int ett_ndp_annc;
8829static int ett_ndp_vht_annc_sta_list;
8830static int ett_ndp_vht_annc_sta_info_tree;
8831static int ett_ndp_he_annc_sta_list;
8832static int ett_ndp_he_annc_sta_item;
8833static int ett_ndp_he_annc_sta_info;
8834static int ett_ndp_ranging_annc_sta_list;
8835static int ett_ndp_eht_annc_sta_list;
8836static int ett_ndp_eht_annc_sta_info;
8837static int ett_non_inheritance_element_id_list;
8838static int ett_non_inheritance_element_id_ext_list;
8839
8840/* 802.11ai trees */
8841static int ett_fils_indication_realm_list;
8842static int ett_fils_indication_public_key_list;
8843static int ett_ff_fils_discovery_frame_control;
8844static int ett_ff_fils_discovery_capability;
8845static int ett_neighbor_ap_info;
8846static int ett_tbtt_infos;
8847static int ett_rnr_bss_params_tree;
8848static int ett_rnr_mld_params_tree;
8849
8850static int ett_ff_fils_req_params;
8851static int ett_ff_fils_req_params_fils_criteria;
8852
8853static int ett_nonap_sta_regulatory_conn;
8854
8855static int ett_chan_usage;
8856
8857/* Generic address HF list for proto_tree_add_mac48_detail() */
8858static const mac_hf_list_t mac_addr = {
8859 &hf_ieee80211_addr,
8860 &hf_ieee80211_addr_resolved,
8861 &hf_ieee80211_addr_oui,
8862 &hf_ieee80211_addr_oui_resolved,
8863 &hf_ieee80211_addr_lg,
8864 &hf_ieee80211_addr_ig,
8865};
8866
8867/* Generic address HF list for proto_tree_add_mac48_detail() --
8868 * no LG/IG bits */
8869static const mac_hf_list_t mac_addr_hidden = {
8870 &hf_ieee80211_addr,
8871 &hf_ieee80211_addr_resolved,
8872 &hf_ieee80211_addr_oui,
8873 &hf_ieee80211_addr_oui_resolved,
8874 NULL((void*)0),
8875 NULL((void*)0),
8876};
8877
8878/* Destination address HF list for proto_tree_add_mac48_detail() */
8879static const mac_hf_list_t mac_da = {
8880 &hf_ieee80211_addr_da,
8881 &hf_ieee80211_addr_da_resolved,
8882 &hf_ieee80211_addr_da_oui,
8883 &hf_ieee80211_addr_da_oui_resolved,
8884 &hf_ieee80211_addr_da_lg,
8885 &hf_ieee80211_addr_da_ig,
8886};
8887
8888/* Source address HF list for proto_tree_add_mac48_detail() */
8889static const mac_hf_list_t mac_sa = {
8890 &hf_ieee80211_addr_sa,
8891 &hf_ieee80211_addr_sa_resolved,
8892 &hf_ieee80211_addr_sa_oui,
8893 &hf_ieee80211_addr_sa_oui_resolved,
8894 &hf_ieee80211_addr_sa_lg,
8895 &hf_ieee80211_addr_sa_ig,
8896};
8897
8898/* Receiver address HF list for proto_tree_add_mac48_detail() */
8899static const mac_hf_list_t mac_ra = {
8900 &hf_ieee80211_addr_ra,
8901 &hf_ieee80211_addr_ra_resolved,
8902 &hf_ieee80211_addr_ra_oui,
8903 &hf_ieee80211_addr_ra_oui_resolved,
8904 &hf_ieee80211_addr_ra_lg,
8905 &hf_ieee80211_addr_ra_ig,
8906};
8907
8908/* Transmitter address HF list for proto_tree_add_mac48_detail() */
8909static const mac_hf_list_t mac_ta = {
8910 &hf_ieee80211_addr_ta,
8911 &hf_ieee80211_addr_ta_resolved,
8912 &hf_ieee80211_addr_ta_oui,
8913 &hf_ieee80211_addr_ta_oui_resolved,
8914 &hf_ieee80211_addr_ta_lg,
8915 &hf_ieee80211_addr_ta_ig,
8916};
8917
8918/* BSSID address HF list for proto_tree_add_mac48_detail() */
8919static const mac_hf_list_t mac_bssid = {
8920 &hf_ieee80211_addr_bssid,
8921 &hf_ieee80211_addr_bssid_resolved,
8922 &hf_ieee80211_addr_bssid_oui,
8923 &hf_ieee80211_addr_bssid_oui_resolved,
8924 &hf_ieee80211_addr_bssid_lg,
8925 &hf_ieee80211_addr_bssid_ig,
8926};
8927
8928/* Station address HF list for proto_tree_add_mac48_detail() */
8929static const mac_hf_list_t mac_staa = {
8930 &hf_ieee80211_addr_staa,
8931 &hf_ieee80211_addr_staa_resolved,
8932 &hf_ieee80211_addr_staa_oui,
8933 &hf_ieee80211_addr_staa_oui_resolved,
8934 &hf_ieee80211_addr_staa_lg,
8935 &hf_ieee80211_addr_staa_ig,
8936};
8937
8938static const fragment_items frag_items = {
8939 &ett_fragment,
8940 &ett_fragments,
8941 &hf_ieee80211_fragments,
8942 &hf_ieee80211_fragment,
8943 &hf_ieee80211_fragment_overlap,
8944 &hf_ieee80211_fragment_overlap_conflict,
8945 &hf_ieee80211_fragment_multiple_tails,
8946 &hf_ieee80211_fragment_too_long_fragment,
8947 &hf_ieee80211_fragment_error,
8948 &hf_ieee80211_fragment_count,
8949 &hf_ieee80211_reassembled_in,
8950 &hf_ieee80211_reassembled_length,
8951 /* Reassembled data field */
8952 NULL((void*)0),
8953 "fragments"
8954};
8955
8956static const enum_val_t wlan_ignore_prot_options[] = {
8957 { "no", "No", WLAN_IGNORE_PROT_NO0 },
8958 { "without_iv", "Yes - without IV", WLAN_IGNORE_PROT_WO_IV1 },
8959 { "with_iv", "Yes - with IV", WLAN_IGNORE_PROT_W_IV2 },
8960 { NULL((void*)0), NULL((void*)0), 0 }
8961};
8962
8963static int wlan_address_type = -1;
8964static int wlan_bssid_address_type = -1;
8965static int wlan_ra_ta_address_type = -1;
8966static int wlan_aid_address_type = -1;
8967
8968static int beacon_padding; /* beacon padding bug */
8969
8970/*
8971 * Check if we have an S1G STA
8972 */
8973static bool_Bool
8974sta_is_s1g(packet_info *pinfo)
8975{
8976 void * data_p;
8977
8978 if (treat_as_s1g)
8979 return true1;
8980
8981 data_p = p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_S1G_KEY);
8982 return GPOINTER_TO_INT(data_p)((gint) (glong) (data_p));
8983}
8984
8985static heur_dissector_list_t heur_subdissector_list;
8986
8987static dissector_handle_t ieee80211_handle;
8988static dissector_handle_t wlan_withoutfcs_handle;
8989static dissector_handle_t llc_handle;
8990static dissector_handle_t epd_llc_handle;
8991static dissector_handle_t ipx_handle;
8992static dissector_handle_t eth_withoutfcs_handle;
8993
8994static capture_dissector_handle_t llc_cap_handle;
8995static capture_dissector_handle_t ipx_cap_handle;
8996
8997static dissector_table_t ethertype_subdissector_table;
8998static dissector_table_t tagged_field_table;
8999static dissector_table_t vendor_specific_action_table;
9000static dissector_table_t wifi_alliance_action_subtype_table;
9001static dissector_table_t vendor_specific_anqp_info_table;
9002static dissector_table_t wifi_alliance_anqp_info_table;
9003static dissector_table_t wifi_alliance_ie_table;
9004static dissector_table_t wifi_alliance_public_action_table;
9005
9006static int wlan_tap;
9007
9008static const value_string access_network_type_vals[] = {
9009 { 0, "Private network" },
9010 { 1, "Private network with guest access" },
9011 { 2, "Chargeable public network" },
9012 { 3, "Free public network" },
9013 { 4, "Personal device network" },
9014 { 5, "Emergency services only network" },
9015 { 14, "Test or experimental" },
9016 { 15, "Wildcard" },
9017 { 0, NULL((void*)0) }
9018};
9019
9020static const value_string adv_proto_id_vals[] = {
9021 { 0, "Access Network Query Protocol"},
9022 { 1, "MIH Information Service"},
9023 { 2, "MIH Command and Event Services Capability Discovery"},
9024 { 3, "Emergency Alert System (EAS)"},
9025 { 4, "Location-to-Service Translation Protocol"},
9026 {221, "Vendor Specific"},
9027 {0, NULL((void*)0)}
9028};
9029
9030static const value_string timeout_int_types[] = {
9031 {1, "Reassociation deadline interval (TUs)"},
9032 {2, "Key lifetime interval (seconds)"},
9033 {3, "Association Comeback time (TUs)"},
9034 {4, "Time to start (TUs)"},
9035 {0, NULL((void*)0)}
9036};
9037
9038static const value_string tdls_action_codes[] = {
9039 {TDLS_SETUP_REQUEST0, "TDLS Setup Request"},
9040 {TDLS_SETUP_RESPONSE1, "TDLS Setup Response"},
9041 {TDLS_SETUP_CONFIRM2, "TDLS Setup Confirm"},
9042 {TDLS_TEARDOWN3, "TDLS Teardown"},
9043 {TDLS_PEER_TRAFFIC_INDICATION4, "TDLS Peer Traffic Indication"},
9044 {TDLS_CHANNEL_SWITCH_REQUEST5, "TDLS Channel Switch Request"},
9045 {TDLS_CHANNEL_SWITCH_RESPONSE6, "TDLS Channel Switch Response"},
9046 {TDLS_PEER_PSM_REQUEST7, "TDLS Peer PSM Request"},
9047 {TDLS_PEER_PSM_RESPONSE8, "TDLS Peer PSM Response"},
9048 {TDLS_PEER_TRAFFIC_RESPONSE9, "TDLS Peer Traffic Response"},
9049 {TDLS_DISCOVERY_REQUEST10, "TDLS Discovery Request"},
9050 {0, NULL((void*)0)}
9051};
9052static 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) }
;
9053
9054static const value_string rm_action_codes[] = {
9055 {RM_ACTION_RADIO_MEASUREMENT_REQUEST0, "Radio Measurement Request"},
9056 {RM_ACTION_RADIO_MEASUREMENT_REPORT1, "Radio Measurement Report"},
9057 {RM_ACTION_LINK_MEASUREMENT_REQUEST2, "Link Measurement Request"},
9058 {RM_ACTION_LINK_MEASUREMENT_REPORT3, "Link Measurement Report"},
9059 {RM_ACTION_NEIGHBOR_REPORT_REQUEST4, "Neighbor Report Request"},
9060 {RM_ACTION_NEIGHBOR_REPORT_RESPONSE5, "Neighbor Report Response"},
9061 {0, NULL((void*)0)}
9062};
9063static 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) }
;
9064
9065static const val64_string number_of_taps_values[] = {
9066 {0x0, "1 tap"},
9067 {0x1, "5 taps"},
9068 {0x2, "15 taps"},
9069 {0x3, "63 taps"},
9070 {0, NULL((void*)0)}
9071};
9072
9073#define PSMP_STA_INFO_BROADCAST0 0
9074#define PSMP_STA_INFO_MULTICAST1 1
9075#define PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2 2
9076
9077#define PSMP_STA_INFO_FLAG_TYPE0x00000003 0x00000003
9078#define PSMP_STA_INFO_FLAG_DTT_START0x00001FFC 0x00001FFC
9079#define PSMP_STA_INFO_FLAG_DTT_DURATION0x001FE000 0x001FE000
9080
9081#define PSMP_STA_INFO_FLAG_STA_ID0x001FFFE0 0x001FFFE0
9082
9083#define PSMP_STA_INFO_FLAG_UTT_START0x0000FFE0 0x0000FFE0
9084#define PSMP_STA_INFO_FLAG_UTT_DURATION0x03FF0000 0x03FF0000
9085
9086#define PSMP_STA_INFO_FLAG_IA_RESERVED0xFC000000 0xFC000000
9087
9088static const value_string ff_psmp_sta_info_flags[] = {
9089 { PSMP_STA_INFO_BROADCAST0, "Broadcast"},
9090 { PSMP_STA_INFO_MULTICAST1, "Multicast"},
9091 { PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2, "Individually Addressed"},
9092 {0, NULL((void*)0)}
9093};
9094
9095static const char*
9096wlan_conv_get_filter_type(conv_item_t* conv, conv_filter_type_e filter)
9097{
9098 if ((filter == CONV_FT_SRC_ADDRESS) && (conv->src_address.type == wlan_address_type))
9099 return "wlan.sa";
9100
9101 if ((filter == CONV_FT_DST_ADDRESS) && (conv->dst_address.type == wlan_address_type))
9102 return "wlan.da";
9103
9104 if ((filter == CONV_FT_ANY_ADDRESS) && (conv->src_address.type == wlan_address_type))
9105 return "wlan.addr";
9106
9107 return CONV_FILTER_INVALID"INVALID";
9108}
9109
9110static ct_dissector_info_t wlan_ct_dissector_info = {&wlan_conv_get_filter_type};
9111
9112static tap_packet_status
9113wlan_conversation_packet(void *pct, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *vip, tap_flags_t flags)
9114{
9115 conv_hash_t *hash = (conv_hash_t*) pct;
9116 hash->flags = flags;
9117 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
9118 tap_packet_status status = TAP_PACKET_DONT_REDRAW;
9119
9120 if ((whdr->src.type != AT_NONE) && (whdr->dst.type != AT_NONE)) {
9121 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);
9122
9123 status = TAP_PACKET_REDRAW;
9124 }
9125
9126 return status;
9127}
9128
9129static const char*
9130wlan_endpoint_get_filter_type(endpoint_item_t* endpoint, conv_filter_type_e filter)
9131{
9132 if ((filter == CONV_FT_ANY_ADDRESS) && (endpoint->myaddress.type == wlan_address_type))
9133 return "wlan.addr";
9134
9135 return CONV_FILTER_INVALID"INVALID";
9136}
9137
9138static et_dissector_info_t wlan_endpoint_dissector_info = {&wlan_endpoint_get_filter_type};
9139
9140static tap_packet_status
9141wlan_endpoint_packet(void *pit, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *vip, tap_flags_t flags)
9142{
9143 conv_hash_t *hash = (conv_hash_t*) pit;
9144 hash->flags = flags;
9145 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
9146 tap_packet_status status = TAP_PACKET_DONT_REDRAW;
9147
9148 /* Take two "add" passes per packet, adding for each direction, ensures that all
9149 packets are counted properly (even if address is sending to itself)
9150 XXX - this could probably be done more efficiently inside endpoint_table */
9151 if (whdr->src.type != AT_NONE) {
9152 add_endpoint_table_data(hash, &whdr->src, 0, true1, 1, pinfo->fd->pkt_len, &wlan_endpoint_dissector_info, ENDPOINT_NONECONVERSATION_NONE);
9153 status = TAP_PACKET_REDRAW;
9154 }
9155
9156 if (whdr->dst.type != AT_NONE) {
9157 add_endpoint_table_data(hash, &whdr->dst, 0, false0, 1, pinfo->fd->pkt_len, &wlan_endpoint_dissector_info, ENDPOINT_NONECONVERSATION_NONE);
9158 status = TAP_PACKET_REDRAW;
9159 }
9160
9161 return status;
9162}
9163
9164static const char*
9165wlan_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src)
9166{
9167 if (is_src)
9168 return "wlan.sa";
9169
9170 return "wlan.da";
9171}
9172
9173static const char*
9174wlan_bssid_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src _U___attribute__((unused)))
9175{
9176 return "wlan.bssid";
9177}
9178
9179static const char*
9180wlan_ra_ta_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src)
9181{
9182 if (is_src)
9183 return "wlan.ta";
9184
9185 return "wlan.ra";
9186}
9187
9188static const char*
9189wlan_aid_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src _U___attribute__((unused)))
9190{
9191 return "wlan.fc.sid.association_id";
9192}
9193
9194static void
9195beacon_interval_base_custom(char *result, uint32_t beacon_interval)
9196{
9197 double temp_double;
9198
9199 temp_double = (double)beacon_interval;
9200 snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (temp_double * 1024 / 1000000));
9201}
9202
9203static void
9204allocation_duration_base_custom(char *result, uint32_t allocation_duration)
9205{
9206 double temp_double;
9207
9208 temp_double = (double)allocation_duration;
9209 snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (temp_double / 1000000));
9210}
9211
9212static void
9213extra_one_base_custom(char *result, uint32_t value)
9214{
9215 snprintf(result, ITEM_LABEL_LENGTH240, "%d", value+1);
9216}
9217
9218static void
9219extra_one_mul_two_base_custom(char *result, uint32_t value)
9220{
9221 snprintf(result, ITEM_LABEL_LENGTH240, "%d", (value+1)*2);
9222}
9223
9224static void
9225rcpi_and_power_level_custom(char *result, uint8_t value)
9226{
9227 /* 802.11-2016 section 9.4.2.38
9228 RCPI = |2 x (P + 110)| in steps of 0.5 dB */
9229
9230 if (value == 0)
9231 snprintf(result, ITEM_LABEL_LENGTH240, "%d (P < -109.5 dBm)", value);
9232 else if (value == 220)
9233 snprintf(result, ITEM_LABEL_LENGTH240, "%d (P >= 0 dBm)", value);
9234 else if (value < 220)
9235 snprintf(result, ITEM_LABEL_LENGTH240, "%d (P = %.1f dBm)", value, ((double)value) / 2 - 110);
9236 else if (value < 255)
9237 snprintf(result, ITEM_LABEL_LENGTH240, "%d (Reserved)", value);
9238 else
9239 snprintf(result, ITEM_LABEL_LENGTH240, "%d (Measurement not available)", value);
9240}
9241
9242static void
9243sts_custom(char *result, uint32_t value)
9244{
9245 snprintf(result, ITEM_LABEL_LENGTH240, "%d STS", value + 1);
9246}
9247
9248static void
9249rep_custom(char *result, uint32_t value)
9250{
9251 snprintf(result, ITEM_LABEL_LENGTH240, "%u repetition%s (%u)", value + 1, plurality(value + 1, "", "s")((value + 1) == 1 ? ("") : ("s")), value);
9252}
9253
9254static void
9255hundred_us_base_custom(char *result, uint32_t value)
9256{
9257 snprintf(result, ITEM_LABEL_LENGTH240, "%0.1f ms (%u)", ((double)value * 100 / 1000), value);
9258}
9259
9260static void
9261partial_tsf_custom(char *result, uint32_t value)
9262{
9263 uint32_t shifted = value << 10;
9264 snprintf(result, ITEM_LABEL_LENGTH240, "%u %s (%u)", shifted,
9265 unit_name_string_get_value(shifted, &units_microseconds), value);
9266}
9267
9268/*
9269 * We use this is displaying the ru allocation region.
9270 */
9271static uint8_t global_he_trigger_bw;
9272
9273static void
9274he_ru_allocation_base_custom(char *result, uint32_t ru_allocation)
9275{
9276 uint32_t tones = 0;
9277
9278 switch (global_he_trigger_bw) {
9279 case 0:
9280 if (ru_allocation <= 8) {
9281 tones = 26;
9282 break;
9283 }
9284 if (ru_allocation >= 37 && ru_allocation <= 40) {
9285 tones = 52;
9286 break;
9287 }
9288 if (ru_allocation >= 53 && ru_allocation <= 54) {
9289 tones = 106;
9290 break;
9291 }
9292 if (ru_allocation == 61) {
9293 tones = 242;
9294 break;
9295 }
9296 // error
9297 break;
9298 case 1:
9299 if (ru_allocation <= 17) {
9300 tones = 26;
9301 break;
9302 }
9303 if (ru_allocation >= 37 && ru_allocation <= 44) {
9304 tones = 52;
9305 break;
9306 }
9307 if (ru_allocation >= 53 && ru_allocation <= 56) {
9308 tones = 106;
9309 break;
9310 }
9311 if (ru_allocation >= 61 && ru_allocation <= 62) {
9312 tones = 242;
9313 break;
9314 }
9315 if (ru_allocation == 65) {
9316 tones = 484;
9317 break;
9318 }
9319 // error
9320 break;
9321 case 2:
9322 /* fall-through */
9323 case 3:
9324 if (ru_allocation <= 36) {
9325 tones = 26;
9326 break;
9327 }
9328 if (ru_allocation >= 37 && ru_allocation <= 52) {
9329 tones = 52;
9330 break;
9331 }
9332 if (ru_allocation >= 53 && ru_allocation <= 60) {
9333 tones = 106;
9334 break;
9335 }
9336 if (ru_allocation >= 61 && ru_allocation <= 64) {
9337 tones = 242;
9338 break;
9339 }
9340 if (ru_allocation >= 65 && ru_allocation <= 66) {
9341 tones = 484;
9342 break;
9343 }
9344 if (ru_allocation == 67) {
9345 tones = 996;
9346 break;
9347 }
9348 if (ru_allocation == 68 && global_he_trigger_bw == 3) {
9349 tones = 2*996;
9350 break;
9351 }
9352 break;
9353 default:
9354 break;
9355 }
9356
9357 if (tones)
9358 snprintf(result, ITEM_LABEL_LENGTH240, "%d (%d tones)", ru_allocation, tones);
9359 else
9360 snprintf(result, ITEM_LABEL_LENGTH240, "%d (bogus number of tones)", ru_allocation);
9361}
9362
9363static void
9364eht_ru_allocation_base_custom(char *result, uint32_t ru_allocation)
9365{
9366 char *ru_str;
9367
9368 /* TODO: check with PS160, B0 of RU allocation, BW */
9369 if (ru_allocation <= 36) {
9370 ru_str = "RU size: 26";
9371 } else if (ru_allocation >= 37 && ru_allocation <= 52) {
9372 ru_str = "RU size: 52";
9373 } else if (ru_allocation >= 53 && ru_allocation <= 60) {
9374 ru_str = "RU size: 106";
9375 } else if (ru_allocation >= 61 && ru_allocation <= 64) {
9376 ru_str = "RU size: 242";
9377 } else if (ru_allocation == 65 || ru_allocation == 66) {
9378 ru_str = "RU size: 484";
9379 } else if (ru_allocation == 67) {
9380 ru_str = "RU size: 996";
9381 } else if (ru_allocation == 68) {
9382 ru_str = "RU size: 2x996";
9383 } else if (ru_allocation == 69) {
9384 ru_str = "RU size: 4x996";
9385 } else if (ru_allocation >= 70 && ru_allocation <= 81) {
9386 ru_str = "MRU size: 52+26";
9387 } else if (ru_allocation >= 82 && ru_allocation <= 89) {
9388 ru_str = "MRU size: 106+26";
9389 } else if (ru_allocation >= 90 && ru_allocation <= 93) {
9390 ru_str = "MRU size: 484+242";
9391 } else if (ru_allocation >= 94 && ru_allocation <= 95) {
9392 ru_str = "MRU size: 996+484";
9393 } else if (ru_allocation >= 96 && ru_allocation <= 99) {
9394 ru_str = "MRU size: 996+484+242";
9395 } else if (ru_allocation >= 100 && ru_allocation <= 103) {
9396 ru_str = "MRU size: 2x996+484";
9397 } else if (ru_allocation == 104) {
9398 ru_str = "MRU size: 3x996";
9399 } else if (ru_allocation == 105 || ru_allocation == 106) {
9400 ru_str = "MRU size: 3x996+484";
9401 } else {
9402 ru_str = "Reserved";
9403 }
9404
9405 snprintf(result, ITEM_LABEL_LENGTH240, "%d (%s)", ru_allocation, ru_str);
9406}
9407
9408/*
9409 * We use this to display the ANSI/CTA-2063 Serial number length
9410 */
9411static void
9412vs_sgdsn_serialnumber_len_custom(char *result, uint32_t val)
9413{
9414 if (val >= 0x30 && val <= 0x39) {
9415 snprintf(result, ITEM_LABEL_LENGTH240, "%d byte(s)", val-0x30);
9416 } else if (val >= 0x41 && val <= 0x46) {
9417 snprintf(result, ITEM_LABEL_LENGTH240, "%d byte(s)", val-0x37);
9418 } else {
9419 snprintf(result, ITEM_LABEL_LENGTH240, "Invalid length: %u", val);
9420 }
9421}
9422
9423/* ************************************************************************* */
9424/* Mesh Control field helper functions
9425 *
9426 * Per IEEE 802.11s Draft 12.0 section 7.2.2.1:
9427 *
9428 * The frame body consists of either:
9429 * The MSDU (or a fragment thereof), the Mesh Control field (if and only if the
9430 * frame is transmitted by a mesh STA and the Mesh Control Present subfield of
9431 * the QoS Control field is 1)...
9432 *
9433 * 8.2.4.5.1 "QoS Control field structure", table 8-4, in 802.11-2012,
9434 * seems to indicate that the bit that means "Mesh Control Present" in
9435 * frames sent by mesh STAs in a mesh BSS is part of the TXOP Limit field,
9436 * the AP PS Buffer State field, the TXOP Duration Requested field, or the
9437 * Queue Size field in some data frames in non-mesh BSSes.
9438 *
9439 * We need a statefull sniffer for that. For now, use heuristics.
9440 *
9441 * Notably, only mesh data frames contain the Mesh Control field in the header.
9442 * Other frames that contain mesh control (i.e., multihop action frames) have
9443 * it deeper in the frame body where it can be definitively identified.
9444 * Further, mesh data frames always have to-ds and from-ds either 11 or 01. We
9445 * use these facts to make our heuristics more reliable.
9446 * ************************************************************************* */
9447static int
9448has_mesh_control(uint16_t fcf, uint16_t qos_ctl, uint8_t mesh_flags)
9449{
9450 /* assume mesh control present if the QOS field's Mesh Control Present bit is
9451 * set, all reserved bits in the mesh_flags field are zero, and the address
9452 * extension mode is not a reserved value.
9453 */
9454 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))) &&
9455 (QOS_MESH_CONTROL_PRESENT(qos_ctl)(((qos_ctl) & 0x0100) >> 8)) &&
9456 ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION0x3) == 0) &&
9457 ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3) != MESH_FLAGS_ADDRESS_EXTENSION0x3));
9458}
9459
9460/****************************************************************************** */
9461/*
9462 * locally originated mesh frames will have a mesh control field, but no QoS header
9463 * detect the presence of mesh control field by checking if mesh flags are legal
9464 * and confirming that the next header is an 802.2 LLC header
9465 *
9466 ****************************************************************************** */
9467static int
9468has_mesh_control_local(uint16_t fcf, uint8_t mesh_flags, uint16_t next_header)
9469{
9470 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))) &&
9471 ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION0x3) == 0) &&
9472 ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3) != MESH_FLAGS_ADDRESS_EXTENSION0x3)) &&
9473 next_header == 0xaaaa;
9474}
9475
9476static int
9477find_mesh_control_length(uint8_t mesh_flags)
9478{
9479 return 6 + 6*(mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3);
9480}
9481
9482static mimo_control_t
9483get_mimo_control(tvbuff_t *tvb, int offset)
9484{
9485 uint16_t mimo;
9486 mimo_control_t output;
9487
9488 mimo = tvb_get_letohs(tvb, offset);
9489
9490 output.nc = (mimo & 0x0003) + 1;
9491 output.nr = ((mimo & 0x000C) >> 2) + 1;
9492 output.chan_width = (mimo & 0x0010) >> 4;
9493 output.coefficient_size = 4; /* XXX - Is this a good default? */
9494
9495 switch ((mimo & 0x0060) >> 5)
9496 {
9497 case 0:
9498 output.grouping = 1;
9499 break;
9500
9501 case 1:
9502 output.grouping = 2;
9503 break;
9504
9505 case 2:
9506 output.grouping = 4;
9507 break;
9508
9509 default:
9510 output.grouping = 1;
9511 break;
9512 }
9513
9514 switch ((mimo & 0x0180) >> 7)
9515 {
9516 case 0:
9517 output.coefficient_size = 4;
9518 break;
9519
9520 case 1:
9521 output.coefficient_size = 5;
9522 break;
9523
9524 case 2:
9525 output.coefficient_size = 6;
9526 break;
9527
9528 case 3:
9529 output.coefficient_size = 8;
9530 break;
9531 }
9532
9533 output.codebook_info = (mimo & 0x0600) >> 9;
9534 output.remaining_matrix_segment = (mimo & 0x3800) >> 11;
9535
9536 return output;
9537}
9538
9539static int
9540get_mimo_na(uint8_t nr, uint8_t nc)
9541{
9542 if ((nr == 2) && (nc == 1)) {
9543 return 2;
9544 } else if ((nr == 2) && (nc == 2)) {
9545 return 2;
9546 } else if ((nr == 3) && (nc == 1)) {
9547 return 4;
9548 } else if ((nr == 3) && (nc == 2)) {
9549 return 6;
9550 } else if ((nr == 3) && (nc == 3)) {
9551 return 6;
9552 } else if ((nr == 4) && (nc == 1)) {
9553 return 6;
9554 } else if ((nr == 4) && (nc == 2)) {
9555 return 10;
9556 } else if ((nr == 4) && (nc == 3)) {
9557 return 12;
9558 } else if ((nr == 4) && (nc == 4)) {
9559 return 12;
9560 } else{
9561 return 0;
9562 }
9563}
9564
9565static int
9566get_mimo_ns(bool_Bool chan_width, uint8_t output_grouping)
9567{
9568 int ns = 0;
9569
9570 if (chan_width)
9571 {
9572 switch (output_grouping)
9573 {
9574 case 1:
9575 ns = 114;
9576 break;
9577
9578 case 2:
9579 ns = 58;
9580 break;
9581
9582 case 4:
9583 ns = 30;
9584 break;
9585
9586 default:
9587 ns = 0;
9588 }
9589 } else {
9590 switch (output_grouping)
9591 {
9592 case 1:
9593 ns = 56;
9594 break;
9595
9596 case 2:
9597 ns = 30;
9598 break;
9599
9600 case 4:
9601 ns = 16;
9602 break;
9603
9604 default:
9605 ns = 0;
9606 }
9607 }
9608
9609 return ns;
9610}
9611
9612static int
9613add_mimo_csi_matrices_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
9614{
9615 proto_tree *snr_tree;
9616 int csi_matrix_size, start_offset;
9617 int ns, i;
9618
9619 start_offset = offset;
9620 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
9621 ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
9622
9623 for (i = 1; i <= mimo_cntrl.nr; i++)
9624 {
9625 uint8_t snr;
9626
9627 snr = tvb_get_uint8(tvb, offset);
9628 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
9629 snr, "Channel %d - Signal to Noise Ratio: 0x%02X", i, snr);
9630 offset += 1;
9631 }
9632
9633 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
9634 csi_matrix_size = ns*(3+(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size));
9635 csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size)(((csi_matrix_size) + ((unsigned)(8U-1U))) & (~((unsigned
)(8U-1U))))
/ 8;
9636 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
9637 offset += csi_matrix_size;
9638 return offset - start_offset;
9639}
9640
9641static int
9642add_mimo_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
9643{
9644 proto_tree *snr_tree;
9645 int csi_matrix_size, start_offset;
9646 int ns, i;
9647
9648 start_offset = offset;
9649 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc, ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
9650
9651 for (i = 1; i <= mimo_cntrl.nc; i++)
9652 {
9653 uint8_t snr;
9654
9655 snr = tvb_get_uint8(tvb, offset);
9656 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
9657 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
9658 offset += 1;
9659 }
9660
9661 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
9662 csi_matrix_size = ns*(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size);
9663 csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size)(((csi_matrix_size) + ((unsigned)(8U-1U))) & (~((unsigned
)(8U-1U))))
/ 8;
9664 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_bf_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
9665 offset += csi_matrix_size;
9666 return offset - start_offset;
9667}
9668
9669static int
9670add_mimo_compressed_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
9671{
9672 proto_tree *snr_tree;
9673 int csi_matrix_size, start_offset;
9674 int ns, na, i;
9675
9676 start_offset = offset;
9677 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
9678 ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
9679
9680 for (i = 1; i <= mimo_cntrl.nc; i++)
9681 {
9682 int8_t snr;
9683 char edge_sign;
9684
9685 snr = tvb_get_int8(tvb, offset);
9686
9687 switch(snr) {
9688 case -128:
9689 edge_sign = '<';
9690 break;
9691 case 127:
9692 edge_sign = '>';
9693 break;
9694 default:
9695 edge_sign = ' ';
9696 break;
9697 }
9698 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
9699 snr, "Stream %d - Signal to Noise Ratio: %c%3.2fdB", i, edge_sign,snr/4.0+22.0);
9700 offset += 1;
9701 }
9702
9703 na = get_mimo_na(mimo_cntrl.nr, mimo_cntrl.nc);
9704 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
9705 csi_matrix_size = ns*(na*((mimo_cntrl.codebook_info+1)*2 + 2)/2);
9706 csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size)(((csi_matrix_size) + ((unsigned)(8U-1U))) & (~((unsigned
)(8U-1U))))
/ 8;
9707 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_cbf_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
9708 offset += csi_matrix_size;
9709 return offset - start_offset;
9710}
9711
9712static void
9713mesh_active_window_base_custom(char *result, uint32_t mesh_active_window)
9714{
9715 snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (mesh_active_window * 1024.0 / 1000000));
9716}
9717
9718/* ************************************************************************* */
9719/* This is the capture function used to update packet counts */
9720/* ************************************************************************* */
9721static bool_Bool
9722capture_ieee80211_common(const unsigned char * pd, int offset, int len,
9723 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)), bool_Bool datapad)
9724{
9725 uint16_t fcf, hdr_length;
9726
9727 if (!BYTES_ARE_IN_FRAME(offset, len, 2)((unsigned)(offset) + (unsigned)(2) > (unsigned)(offset) &&
(unsigned)(offset) + (unsigned)(2) <= (unsigned)(len))
)
9728 return false0;
9729
9730 fcf = pletohu16(&pd[offset]);
9731
9732 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))
9733 return false0;
9734
9735 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)))
) {
9736
9737 case DATA0x20:
9738 case DATA_CF_ACK0x21:
9739 case DATA_CF_POLL0x22:
9740 case DATA_CF_ACK_POLL0x23:
9741 case DATA_QOS_DATA0x28:
9742 case DATA_QOS_DATA_CF_ACK0x29:
9743 case DATA_QOS_DATA_CF_POLL0x2A:
9744 case DATA_QOS_DATA_CF_ACK_POLL0x2B:
9745 {
9746 /* These are data frames that actually contain *data*. */
9747 hdr_length = (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) ? DATA_LONG_HDR_LEN30 : DATA_SHORT_HDR_LEN24;
9748
9749 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)
) {
9750 /* QoS frame, so the header includes a QoS field */
9751 uint16_t qosoff; /* Offset of the 2-byte QoS field */
9752 uint8_t mesh_flags;
9753
9754 qosoff = hdr_length;
9755 hdr_length += 2; /* Include the QoS field in the header length */
9756
9757 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
9758 /* Frame has a 4-byte HT Control field */
9759 hdr_length += 4;
9760 }
9761
9762 if (datapad) {
9763 /*
9764 * Include the padding between the 802.11 header and the body,
9765 * as "helpfully" provided by some Atheros adapters.
9766 *
9767 * In the Atheros mesh capture sample we have, the padding
9768 * is before the mesh header, possibly because it doesn't
9769 * recognize the mesh header.
9770 */
9771 hdr_length = WS_ROUNDUP_4(hdr_length)(((hdr_length) + ((unsigned)(4U-1U))) & (~((unsigned)(4U-
1U))))
;
9772 }
9773
9774 /*
9775 * Does it look as if we have a mesh header?
9776 * Look at the Mesh Control subfield of the QoS field and at the
9777 * purported mesh flag fields.
9778 */
9779 if (!BYTES_ARE_IN_FRAME(offset, hdr_length, 1)((unsigned)(offset) + (unsigned)(1) > (unsigned)(offset) &&
(unsigned)(offset) + (unsigned)(1) <= (unsigned)(hdr_length
))
)
9780 return false0;
9781
9782 mesh_flags = pd[hdr_length];
9783 if (has_mesh_control(fcf, pletohu16(&pd[qosoff]), mesh_flags)) {
9784 /* Yes, add the length of that in as well. */
9785 hdr_length += find_mesh_control_length(mesh_flags);
9786 }
9787 }
9788 /* I guess some bridges take Netware Ethernet_802_3 frames,
9789 which are 802.3 frames (with a length field rather than
9790 a type field, but with no 802.2 header in the payload),
9791 and just stick the payload into an 802.11 frame. I've seen
9792 captures that show frames of that sort.
9793
9794 We also handle some odd form of encapsulation in which a
9795 complete Ethernet frame is encapsulated within an 802.11
9796 data frame, with no 802.2 header. This has been seen
9797 from some hardware.
9798
9799 On top of that, at least at some point it appeared that
9800 the OLPC XO sent out frames with two bytes of 0 between
9801 the "end" of the 802.11 header and the beginning of
9802 the payload.
9803
9804 So, if the packet doesn't start with 0xaa 0xaa:
9805
9806 we first use the same scheme that linux-wlan-ng does to detect
9807 those encapsulated Ethernet frames, namely looking to see whether
9808 the frame either starts with 6 octets that match the destination
9809 address from the 802.11 header or has 6 octets that match the
9810 source address from the 802.11 header following the first 6 octets,
9811 and, if so, treat it as an encapsulated Ethernet frame;
9812
9813 otherwise, we use the same scheme that we use in the Ethernet
9814 dissector to recognize Netware 802.3 frames, namely checking
9815 whether the packet starts with 0xff 0xff and, if so, treat it
9816 as an encapsulated IPX frame, and then check whether the
9817 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
9818 frame. */
9819 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))
)
9820 return false0;
9821
9822 if ((pd[offset+hdr_length] != 0xaa) && (pd[offset+hdr_length+1] != 0xaa)) {
9823#if 0
9824 /* XXX - this requires us to parse the header to find the source
9825 and destination addresses. */
9826 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))
) {
9827 /* We have two MAC addresses after the header. */
9828 if ((memcmp(&pd[offset+hdr_length+6], pinfo->dl_src.data, 6) == 0) ||
9829 (memcmp(&pd[offset+hdr_length+6], pinfo->dl_dst.data, 6) == 0)) {
9830 return capture_eth (pd, offset + hdr_length, len, cpinfo, pseudo_header);
9831 }
9832 }
9833#endif
9834 if ((pd[offset+hdr_length] == 0xff) && (pd[offset+hdr_length+1] == 0xff))
9835 return call_capture_dissector (ipx_cap_handle, pd, offset+hdr_length, len, cpinfo, pseudo_header);
9836 else if ((pd[offset+hdr_length] == 0x00) && (pd[offset+hdr_length+1] == 0x00))
9837 return call_capture_dissector (llc_cap_handle, pd, offset + hdr_length + 2, len, cpinfo, pseudo_header);
9838 }
9839 else {
9840 return call_capture_dissector (llc_cap_handle, pd, offset + hdr_length, len, cpinfo, pseudo_header);
9841 }
9842 break;
9843 }
9844 }
9845
9846 return false0;
9847}
9848
9849/*
9850 * Handle 802.11 with a variable-length link-layer header.
9851 */
9852static bool_Bool
9853capture_ieee80211(const unsigned char * pd, int offset, int len, capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)))
9854{
9855 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, false0);
9856}
9857
9858/*
9859 * Handle 802.11 with a variable-length link-layer header and data padding.
9860 */
9861static bool_Bool
9862capture_ieee80211_datapad(const unsigned char * pd, int offset, int len,
9863 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)))
9864{
9865 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, true1);
9866}
9867
9868
9869/* ************************************************************************* */
9870/* Add the subtree used to store the fixed parameters */
9871/* ************************************************************************* */
9872static proto_tree *
9873get_fixed_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size,
9874 bool_Bool no_append)
9875{
9876 proto_item *fixed_fields;
9877
9878 fixed_fields = proto_tree_add_item(tree, hf_ieee80211_fixed_parameters, tvb, start, size, ENC_NA0x00000000);
9879 if (!no_append)
9880 proto_item_append_text(fixed_fields, " (%d bytes)", size);
9881
9882 return proto_item_add_subtree(fixed_fields, ett_fixed_parameters);
9883}
9884
9885
9886/* ************************************************************************* */
9887/* Add the subtree used to store tagged parameters */
9888/* ************************************************************************* */
9889static proto_tree *
9890get_tagged_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size)
9891{
9892 proto_item *tagged_fields;
9893
9894 tagged_fields = proto_tree_add_item(tree, hf_ieee80211_tagged_parameters, tvb, start, -1, ENC_NA0x00000000);
9895 proto_item_append_text(tagged_fields, " (%d bytes)", size);
9896
9897 return proto_item_add_subtree(tagged_fields, ett_tagged_parameters);
9898}
9899
9900static void
9901add_ptk_analysis(tvbuff_t *tvb, proto_tree *tree, DOT11DECRYPT_KEY_ITEM *used_key)
9902{
9903 if (!used_key) {
9904 return;
9905 }
9906 const uint8_t *key = NULL((void*)0);
9907 proto_item *ti;
9908 char buf[SHORT_STR256];
9909 int len = Dot11DecryptGetKCK(used_key, &key);
9910 bytes_to_hexstr(buf, key, len);
9911 buf[2 * len] = '\0';
9912 ti = proto_tree_add_string(tree, hf_ieee80211_fc_analysis_kck, tvb, 0, 0, buf);
9913 proto_item_set_generated(ti);
9914
9915 len = Dot11DecryptGetKEK(used_key, &key);
9916 bytes_to_hexstr(buf, key, len);
9917 buf[2 * len] = '\0';
9918 ti = proto_tree_add_string(tree, hf_ieee80211_fc_analysis_kek, tvb, 0, 0, buf);
9919 proto_item_set_generated(ti);
9920}
9921
9922static int
9923dissect_vendor_action_marvell(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
9924{
9925 uint8_t octet;
9926 int offset = 0;
9927
9928 octet = tvb_get_uint8(tvb, offset);
9929 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_action_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9930 offset += 1;
9931 switch (octet)
9932 {
9933 case MRVL_ACTION_MESH_MANAGEMENT1:
9934 octet = tvb_get_uint8(tvb, offset);
9935 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9936 offset += 1;
9937 switch (octet)
9938 {
9939 case MRVL_MESH_MGMT_ACTION_RREQ0:
9940 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9941 offset += 1;
9942 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9943 offset += 1;
9944 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9945 offset += 1;
9946 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9947 offset += 1;
9948 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_rreqid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9949 offset += 4;
9950 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA0x00000000);
9951 offset += 6;
9952 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9953 offset += 4;
9954 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9955 offset += 4;
9956 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9957 offset += 4;
9958 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9959 offset += 1;
9960 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9961 offset += 1;
9962 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
9963 offset += 6;
9964 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9965 offset += 4;
9966 break;
9967 case MRVL_MESH_MGMT_ACTION_RREP1:
9968 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9969 offset += 1;
9970 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9971 offset += 1;
9972 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9973 offset += 1;
9974 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9975 offset += 1;
9976 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
9977 offset += 6;
9978 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9979 offset += 4;
9980 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9981 offset += 4;
9982 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9983 offset += 4;
9984 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA0x00000000);
9985 offset += 6;
9986 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9987 offset += 4;
9988 break;
9989 case MRVL_MESH_MGMT_ACTION_RERR2:
9990 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9991 offset += 1;
9992 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9993 offset += 1;
9994 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9995 offset += 1;
9996 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
9997 offset += 6;
9998 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9999 offset += 4;
10000 break;
10001 default:
10002 break;
10003 }
10004 break;
10005 default:
10006 break;
10007 }
10008
10009 return offset;
10010}
10011
10012static int
10013dissect_dscp_policy_query(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
10014 proto_tree *tree, int offset)
10015{
10016 int start_offset = offset;
10017
10018 while (tvb_captured_length_remaining(tvb, offset)) {
10019 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
10020 }
10021
10022 return offset - start_offset;
10023}
10024
10025static int * const rqst_control_fields[] = {
10026 &hf_ieee80211_oui_qos_mgmt_rq_ctrl_more,
10027 &hf_ieee80211_oui_qos_mgmt_rq_ctrl_reset,
10028 &hf_ieee80211_oui_qos_mgmt_rq_reserved,
10029 NULL((void*)0)
10030};
10031
10032static int
10033dissect_dscp_policy_request(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
10034 proto_tree *tree, int offset)
10035{
10036 int start_offset = offset;
10037
10038 proto_tree_add_bitmask(tree, tvb, offset,
10039 hf_ieee80211_oui_qos_mgmt_rqst_control,
10040 ett_pol_rqst_cont_tree, rqst_control_fields,
10041 ENC_NA0x00000000);
10042 offset += 1;
10043
10044 while (tvb_reported_length_remaining(tvb, offset)) {
10045 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
10046 }
10047
10048 return offset - start_offset;
10049}
10050
10051static int * const resp_control_fields[] = {
10052 &hf_ieee80211_oui_qos_mgmt_rsp_ctrl_more,
10053 &hf_ieee80211_oui_qos_mgmt_rsp_ctrl_reset,
10054 &hf_ieee80211_oui_qos_mgmt_rsp_reserved,
10055 NULL((void*)0)
10056};
10057
10058static int
10059dissect_dscp_policy_response(tvbuff_t *tvb, packet_info *pinfo,
10060 proto_tree *tree, int offset)
10061{
10062 int start_offset = offset;
10063 uint8_t count;
10064 wmem_strbuf_t *status_buf = wmem_strbuf_create(pinfo->pool)wmem_strbuf_new(pinfo->pool, "");
10065 int i;
10066
10067 proto_tree_add_bitmask(tree, tvb, offset,
10068 hf_ieee80211_oui_qos_mgmt_resp_control,
10069 ett_pol_resp_cont_tree, resp_control_fields,
10070 ENC_NA0x00000000);
10071 offset += 1;
10072
10073 count = tvb_get_uint8(tvb, offset);
10074 proto_tree_add_item(tree, hf_ieee80211_oui_qos_mgmt_count, tvb, offset,
10075 1, ENC_NA0x00000000);
10076 offset += 1;
10077
10078 for (i = 0; i < count; i++) {
10079 proto_tree *status_tree = NULL((void*)0);
10080 uint8_t scsid, status;
10081
10082 scsid = tvb_get_uint8(tvb, offset);
10083 status_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2,
10084 ett_dscp_policy_status_list,
10085 NULL((void*)0), "Status list item %d",
10086 i);
10087 proto_tree_add_item(status_tree, hf_ieee80211_dscp_policy_id, tvb,
10088 offset, 1, ENC_NA0x00000000);
10089 if (wmem_strbuf_get_len(status_buf) == 0) {
10090 wmem_strbuf_append_printf(status_buf, "%u:", scsid);
10091 } else {
10092 wmem_strbuf_append_printf(status_buf, " %u:", scsid);
10093 }
10094 offset += 1;
10095
10096 status = tvb_get_uint8(tvb, offset);
10097 proto_tree_add_item(status_tree, hf_ieee80211_dscp_policy_status, tvb,
10098 offset, 1, ENC_NA0x00000000);
10099 wmem_strbuf_append_printf(status_buf, "%u", status);
10100 offset += 1;
10101 }
10102 proto_tree_add_string(tree, hf_ieee80211_dscp_policy_scs_sts_list, tvb, 0, 1,
10103 wmem_strbuf_finalize(status_buf));
10104
10105 return offset - start_offset;
10106}
10107
10108static int
10109dissect_vendor_action_wfa_qos_mgmt(tvbuff_t *tvb, packet_info *pinfo,
10110 proto_tree *tree, void *data _U___attribute__((unused)))
10111{
10112 int offset = 0;
10113 uint8_t subtype = tvb_get_uint8(tvb, offset);
10114
10115 proto_tree_add_item(tree, hf_ieee80211_oui_qos_subtype, tvb, offset, 1,
10116 ENC_NA0x00000000);
10117 offset += 1;
10118
10119 proto_tree_add_item(tree, hf_ieee80211_oui_qos_mgmt_dialog_token, tvb, offset,
10120 1, ENC_NA0x00000000);
10121 offset += 1;
10122
10123 switch (subtype) {
10124 case 0:
10125 offset += dissect_dscp_policy_query(tvb, pinfo, tree, offset);
10126 break;
10127 case 1:
10128 offset += dissect_dscp_policy_request(tvb, pinfo, tree, offset);
10129 break;
10130 case 2:
10131 offset += dissect_dscp_policy_response(tvb, pinfo, tree, offset);
10132 break;
10133 }
10134
10135 return offset;
10136}
10137
10138static int
10139dissect_vendor_action_wifi_alliance(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
10140{
10141 uint8_t subtype;
10142 int offset = 0;
10143 int dissected;
10144 tvbuff_t *subtvb;
10145
10146 subtype = tvb_get_uint8(tvb, offset);
10147 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_action_type, tvb, offset,
10148 1, ENC_NA0x00000000);
10149 offset += 1;
10150
10151 subtvb = tvb_new_subset_remaining(tvb, offset);
10152 dissected = dissector_try_uint_with_data(wifi_alliance_action_subtype_table, subtype, subtvb, pinfo, tree, false0, NULL((void*)0));
10153 if (dissected <= 0)
10154 {
10155 call_data_dissector(subtvb, pinfo, tree);
10156 dissected = tvb_reported_length(subtvb);
10157 }
10158
10159 offset += dissected;
10160
10161 return offset;
10162}
10163
10164/*
10165 * This function is called from two different places. In one case it is called
10166 * without the tag and length. In other cases, it is called with those and
10167 * is asked to return the type and subtype. We know the difference because
10168 * type and subtype will be NULL in the first case.
10169 */
10170static unsigned
10171dissect_advertisement_protocol_common(packet_info *pinfo, proto_tree *tree,
10172 tvbuff_t *tvb, int offset, unsigned *type,
10173 unsigned *subtype)
10174{
10175 uint8_t tag_no = 0, tag_len, left;
10176 proto_item *item = NULL((void*)0), *adv_item;
10177 proto_tree *adv_tree, *adv_tuple_tree;
10178
10179 if (type)
10180 *type = 0xff; // Last reserved value
10181 if (subtype)
10182 *subtype = 0xff;
10183 tag_no = tvb_get_uint8(tvb, offset);
10184 if (type)
10185 item = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10186
10187 /*
10188 * If we have the tag and len, use the len in the tvb, otherwise ask
10189 * for the length of the tvb.
10190 */
10191 if (type)
10192 tag_len = tvb_get_uint8(tvb, offset + 1);
10193 else
10194 tag_len = tvb_reported_length_remaining(tvb, 0);
10195
10196 if (type && tag_no != TAG_ADVERTISEMENT_PROTOCOL108) {
10197 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_number,
10198 "Unexpected IE %d (expected Advertisement "
10199 "Protocol)", tag_no);
10200 return 2 + tag_len;
10201 }
10202 if (type)
10203 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
10204 if (tag_len < 2) {
10205 if (!type)
10206 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
10207 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
10208 "Advertisement Protocol: IE must be at least 2 "
10209 "octets long");
10210 return 2 + tag_len;
10211 }
10212
10213 left = tag_len;
10214 if (type) /* Skip past the header if there ... */
10215 offset += 2;
10216 adv_tree = proto_tree_add_subtree(tree, tvb, offset, left,
10217 ett_adv_proto, &adv_item, "Advertisement Protocol element");
10218
10219 while (left >= 2) {
10220 uint8_t id;
10221
10222 id = tvb_get_uint8(tvb, offset + 1);
10223 if (id == 0)
10224 proto_item_append_text(adv_item, ": ANQP");
10225 adv_tuple_tree = proto_tree_add_subtree_format(adv_tree, tvb, offset, 2, ett_adv_proto_tuple, &item,
10226 "Advertisement Protocol Tuple: %s",
10227 val_to_str(pinfo->pool, id, adv_proto_id_vals,
10228 "Unknown (%d)"));
10229
10230 proto_tree_add_item(adv_tuple_tree,
10231 hf_ieee80211_tag_adv_proto_resp_len_limit, tvb,
10232 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10233 proto_tree_add_item(adv_tuple_tree,
10234 hf_ieee80211_tag_adv_proto_pame_bi, tvb,
10235 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10236 offset += 1;
10237 left--;
10238 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_proto_id, tvb,
10239 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10240 offset += 1;
10241 left--;
10242
10243 if ((id == 0) && type)
10244 *type = ADV_PROTO_ID_ANQP0;
10245
10246 if (id == 221) {
10247 /* Vendor specific */
10248 uint8_t len = tvb_get_uint8(tvb, offset);
10249 unsigned oui;
10250 uint8_t wfa_subtype;
10251 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_vs_len, tvb, offset, 1, ENC_NA0x00000000);
10252 offset += 1;
10253 left -= 1;
10254 if (type)
10255 *type = ADV_PROTO_ID_VS221;
10256 if (len > left) {
10257 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
10258 "Vendor specific info length error");
10259 return 2 + tag_len;
10260 }
10261 proto_tree_add_item_ret_uint(adv_tuple_tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
10262 offset += 3;
10263 left -= 3;
10264 wfa_subtype = tvb_get_uint8(tvb, offset);
10265 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_anqp_wfa_subtype, tvb,
10266 offset, 1, ENC_NA0x00000000);
10267 offset += 1;
10268 left -= 1;
10269 if (oui == OUI_WFA0x506F9A) {
10270 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_dpp_subtype, tvb, offset, 1, ENC_NA0x00000000);
10271 if (subtype && wfa_subtype == WFA_SUBTYPE_DPP26) {
10272 *subtype = WFA_SUBTYPE_DPP26;
10273 *subtype |= (tvb_get_uint8(tvb, offset) << 8);
10274 }
10275 offset++;
10276 left--;
10277 }
10278 }
10279 }
10280
10281 if (left) {
10282 expert_add_info_format(pinfo, item, &ei_ieee80211_extra_data,
10283 "Unexpected extra data in the end");
10284 }
10285
10286 return 2 + tag_len;
10287}
10288
10289static int
10290dissect_advertisement_protocol(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
10291{
10292 return dissect_advertisement_protocol_common(pinfo, tree, tvb, 0, NULL((void*)0), NULL((void*)0));
10293}
10294
10295static void
10296dissect_anqp_query_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10297{
10298 while (offset + 2 <= end) {
10299 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_query_id,
10300 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10301 offset += 2;
10302 }
10303 if (offset != end) {
10304 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
10305 "Unexpected ANQP Query list format");
10306 }
10307}
10308
10309static void
10310dissect_hs20_anqp_hs_capability_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10311{
10312 while (offset < end) {
10313 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_hs_capability_list,
10314 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10315 offset++;
10316 }
10317}
10318
10319static void
10320dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10321{
10322 uint16_t id, len;
10323 proto_item *item;
10324 proto_tree *vtree;
10325 uint32_t oui;
10326 uint8_t subtype;
10327
10328 while (offset + 2 <= end) {
10329 id = tvb_get_letohs(tvb, offset);
10330 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_capability,
10331 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10332 offset += 2;
10333 if (id == ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797) {
10334 vtree = proto_item_add_subtree(item, ett_anqp_vendor_capab);
10335 len = tvb_get_letohs(tvb, offset);
10336 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vlen,
10337 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10338 offset += 2;
10339 if ((len < 3) || ((offset + len) > end)) {
10340 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_capability);
10341 return;
10342 }
10343 proto_tree_add_item_ret_uint(vtree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
10344 offset += 3;
10345 len -= 3;
10346
10347 switch (oui) {
10348 case OUI_WFA0x506F9A:
10349 if (len == 0)
10350 break;
10351 subtype = tvb_get_uint8(tvb, offset);
10352 proto_item_append_text(vtree, " - WFA - %s",
10353 val_to_str(pinfo->pool, subtype, wfa_anqp_subtype_vals,
10354 "Unknown (%u)"));
10355 proto_tree_add_item(vtree, hf_ieee80211_anqp_wfa_subtype,
10356 tvb, offset, 1, ENC_NA0x00000000);
10357 offset++;
10358 len--;
10359 switch (subtype) {
10360 case WFA_ANQP_SUBTYPE_HS2017:
10361 proto_tree_add_item(vtree, hf_ieee80211_hs20_anqp_subtype, tvb, offset, 1, ENC_NA0x00000000);
10362 proto_tree_add_item(vtree, hf_ieee80211_hs20_anqp_reserved, tvb, offset + 1, 1, ENC_NA0x00000000);
10363 offset += 2;
10364 len -= 2;
10365 dissect_hs20_anqp_hs_capability_list(vtree, tvb, offset, end);
10366 break;
10367 default:
10368 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
10369 tvb, offset, len, ENC_NA0x00000000);
10370 break;
10371 }
10372 break;
10373 default:
10374 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
10375 tvb, offset, len, ENC_NA0x00000000);
10376 break;
10377 }
10378
10379 offset += len;
10380 }
10381 }
10382 if (offset != end) {
10383 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
10384 "Unexpected ANQP Capability list format");
10385 }
10386}
10387
10388static const value_string venue_group_vals[] = {
10389 { 0, "Unspecified" },
10390 { 1, "Assembly" },
10391 { 2, "Business" },
10392 { 3, "Educational" },
10393 { 4, "Factory and Industrial" },
10394 { 5, "Institutional" },
10395 { 6, "Mercantile" },
10396 { 7, "Residential" },
10397 { 8, "Storage" },
10398 { 9, "Utility and Miscellaneous" },
10399 { 10, "Vehicular" },
10400 { 11, "Outdoor" },
10401 { 0, NULL((void*)0) }
10402};
10403static 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) }
;
10404
10405static void
10406dissect_venue_info(proto_tree *tree, tvbuff_t *tvb, int offset)
10407{
10408 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_group,
10409 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10410 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_type,
10411 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
10412}
10413
10414static void
10415dissect_venue_name_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10416{
10417 proto_item *item;
10418
10419 dissect_venue_info(tree, tvb, offset);
10420 offset += 2;
10421 while (offset + 4 <= end) {
10422 uint8_t vlen = tvb_get_uint8(tvb, offset);
10423 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_length,
10424 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10425 offset += 1;
10426 if ((vlen > (end - offset)) || (vlen < 3)) {
10427 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_venue_length);
10428 break;
10429 }
10430 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_language,
10431 tvb, offset, 3, ENC_ASCII0x00000000);
10432 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_name,
10433 tvb, offset + 3, vlen - 3, ENC_UTF_80x00000002);
10434 offset += vlen;
10435 }
10436}
10437
10438static const value_string nw_auth_type_vals[] = {
10439 { 0, "Acceptance of terms and conditions" },
10440 { 1, "On-line enrollment supported" },
10441 { 2, "http/https redirection" },
10442 { 3, "DNS redirection" },
10443 { 0, NULL((void*)0) }
10444};
10445
10446static void
10447dissect_network_auth_type(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10448{
10449 while (offset + 3 <= end) {
10450 uint16_t len;
10451 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_indicator,
10452 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10453 offset += 1;
10454 len = tvb_get_letohs(tvb, offset);
10455 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url_len,
10456 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10457 offset += 2;
10458 if (len)
10459 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url,
10460 tvb, offset, len, ENC_ASCII0x00000000);
10461 offset += len;
10462 }
10463}
10464
10465static void
10466dissect_anqp_network_auth_type_timestamp(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10467{
10468 while (offset + 2 <= end) {
10469 uint8_t len;
10470 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_indicator,
10471 tvb, offset, 1, ENC_NA0x00000000);
10472 len = tvb_get_uint8(tvb, offset + 1);
10473 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_url_len,
10474 tvb, offset, 1, ENC_NA0x00000000);
10475 offset += 2;
10476 if(len)
10477 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_url,
10478 tvb, offset, len, ENC_ASCII0x00000000);
10479 offset += len;
10480 /* Optional Time Value - Either 0 or 10 octets */
10481 /* Format: Octet 0-1: Year (0-65534)
10482 Octet 2: Month (0-12)
10483 Octet 3: Day of month (0-31)
10484 Octet 4: Hours (0-23)
10485 Octet 5: Minutes (0-59)
10486 Octet 6: Seconds (0-59)
10487 Octet 7-8: Milliseconds (0-999)
10488 Octet 9: Reserved */
10489 if ((offset + 10) < end) {
10490 /* Enough bytes to dissect a timestamp */
10491 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_year,
10492 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10493 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_mon,
10494 tvb, offset, 1, ENC_NA0x00000000);
10495 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_day,
10496 tvb, offset, 1, ENC_NA0x00000000);
10497 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_hr,
10498 tvb, offset, 1, ENC_NA0x00000000);
10499 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_min,
10500 tvb, offset, 1, ENC_NA0x00000000);
10501 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_sec,
10502 tvb, offset, 1, ENC_NA0x00000000);
10503 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_msec,
10504 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10505 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_rsvd,
10506 tvb, offset, 1, ENC_NA0x00000000);
10507 offset += 10;
10508 } else {
10509 /* Not enough bytes to dissect a timestamp */
10510 }
10511 }
10512}
10513
10514static void
10515add_manuf(proto_item *item, tvbuff_t *tvb, int offset)
10516{
10517 const char *manuf_name;
10518
10519 manuf_name = tvb_get_manuf_name_if_known(tvb, offset);
10520 if (manuf_name == NULL((void*)0))
10521 return;
10522 proto_item_append_text(item, " - %s", manuf_name);
10523}
10524
10525static void
10526dissect_roaming_consortium_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
10527 int end)
10528{
10529 proto_item *item;
10530 uint8_t len;
10531
10532 while (offset < end) {
10533 len = tvb_get_uint8(tvb, offset);
10534 item = proto_tree_add_item(tree,
10535 hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
10536 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10537 offset += 1;
10538 if ((len > (end - offset)) || (len < 3)) {
10539 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_roaming_consortium_oi_len);
10540 break;
10541 }
10542 item = proto_tree_add_item(tree,
10543 hf_ieee80211_ff_anqp_roaming_consortium_oi,
10544 tvb, offset, len, ENC_NA0x00000000);
10545 add_manuf(item, tvb, offset);
10546 offset += len;
10547 }
10548}
10549
10550static const value_string ip_addr_avail_ipv6_vals[] = {
10551 { 0, "Address type not available" },
10552 { 1, "Address type available" },
10553 { 2, "Availability of the address type not known" },
10554 { 0, NULL((void*)0) }
10555};
10556
10557static const value_string ip_addr_avail_ipv4_vals[] = {
10558 { 0, "Address type not available" },
10559 { 1, "Public IPv4 address available" },
10560 { 2, "Port-restricted IPv4 address available" },
10561 { 3, "Single NATed private IPv4 address available" },
10562 { 4, "Double NATed private IPv4 address available" },
10563 { 5, "Port-restricted IPv4 address and single NATed IPv4 address available" },
10564 { 6, "Port-restricted IPv4 address and double NATed IPv4 address available" },
10565 { 7, "Availability of the address type is not known" },
10566 { 0, NULL((void*)0) }
10567};
10568
10569static void
10570dissect_ip_addr_type_availability_info(proto_tree *tree, tvbuff_t *tvb,
10571 int offset)
10572{
10573 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
10574 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10575 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
10576 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10577}
10578
10579static const value_string nai_realm_encoding_vals[] = {
10580 { 0, "Formatted in accordance with RFC 4282" },
10581 { 1, "UTF-8 formatted that is not formatted in accordance with RFC 4282" },
10582 { 0, NULL((void*)0) }
10583};
10584
10585static const range_string oper_class_rvals[] = {
10586 { 0, 0, "Unknown" }, /* 0 should not be used */
10587 { 1, 65, "Reserved" },
10588 { 66, 66, "0.863 GHz, 1 MHz Spacing" },
10589 { 67, 67, "0.863 GHz, 2 MHz Spacing" },
10590 { 68, 68, "0.902 GHz, 1 MHz Spacing" },
10591 { 69, 69, "0.902 GHz, 2 MHz Spacing" },
10592 { 70, 70, "0.902 GHz, 4 MHz Spacing" },
10593 { 71, 71, "0.902 GHz, 8 MHz Spacing" },
10594 { 72, 72, "0.902 GHz, 16 MHz Spacing" },
10595 { 73, 73, "0.9165 GHz, 1 MHz Spacing" },
10596 { 74, 74, "0.9175 GHz, 1 MHz Spacing" },
10597 { 75, 75, "0.9175 GHz, 2 MHz Spacing" },
10598 { 76, 76, "0.9175 GHz, 4 Spacing" },
10599 { 77, 77, "0.9014 GHz, 1 MHz Spacing" },
10600 { 78, 80, "Reserved" },
10601 { 81, 81, "2.407 GHz, Channels 1-13, 25 MHz Spacing" },
10602 { 82, 82, "2.414 GHz, Channel 14, 25 MHz Spacing" },
10603 { 83, 83, "2.407 GHz, Channels 1-9, 40 MHz Spacing" },
10604 { 84, 84, "2.407 GHz, Channels 5-13, 40 MHz Spacing" },
10605 { 85, 93, "Reserved" },
10606 { 94, 94, "3.0 GHz, Channels 133 and 137, 20 MHz Spacing" },
10607 { 95, 95, "3.0 GHz, Channels 132, 134, 136, and 138, 10 MHz Spacing" },
10608 { 96, 96, "3.0025 GHz, Channels 131-138, 5 MHz Spacing" },
10609 { 97, 100, "Reserved" },
10610 { 101, 101, "4.85 GHz, Channels 21 and 25, 20 MHz Spacing" },
10611 { 102, 102, "4.89 GHz, Channels 11, 13, 15, 17, and 19, 10 MHz Spacing" },
10612 { 103, 103, "4.9375 GHz, Channels 1-10, 5 MHz Spacing" },
10613 { 104, 104, "4.0 GHz, Channels 184 and 192, 40 MHz Spacing" },
10614 { 105, 105, "4.0 GHz, Channels 188 and 196, 40 MHz Spacing" },
10615 { 106, 106, "4.0 GHz, Channels 191 and 195, 20 MHz Spacing" },
10616 { 107, 107, "4.0 GHz, Channels 189, 191, 193, 195, and 197, 10 MHz Spacing" },
10617 { 108, 108, "4.0025 GHz, Channels 188-197, 5 MHz Spacing" },
10618 { 109, 109, "4.0 GHz, Channels 184, 188, 192, and 196, 20 MHz Spacing" },
10619 { 110, 110, "4.0 GHz, Channels 183-189, 10 MHz Spacing" },
10620 { 111, 111, "4.0025 GHz, Channels 182-189, 5 MHz Spacing" },
10621 { 112, 114, "Reserved" },
10622 { 115, 115, "5.0 GHz, Channels 36, 40, 44, and 48, 20 MHz Spacing" },
10623 { 116, 116, "5.0 GHz, Channels 36 and 44, 40 MHz Spacing" },
10624 { 117, 117, "5.0 GHz, Channels 40 and 48, 40 MHz Spacing" },
10625 { 118, 118, "5.0 GHz, Channels 52, 56, 60, and 64, 20 MHz Spacing" },
10626 { 119, 119, "5.0 GHz, Channels 52 and 60, 40 MHz Spacing" },
10627 { 120, 120, "5.0 GHz, Channels 56 and 64, 40 MHz Spacing" },
10628 { 121, 121, "5.0 GHz, Channels 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, and 140, 20 MHz Spacing" },
10629 { 122, 122, "5.0 GHz, Channels 100, 108, 116, 124, and 132, 40 MHz Spacing" },
10630 { 123, 123, "5.0 GHz, Channels 104, 112, 120, 128, and 136, 40 MHz Spacing" },
10631 { 124, 124, "5.0 GHz, Channels 149, 153, 157, and 161, 20 MHz Spacing" },
10632 { 125, 125, "5.0 GHz, Channels 149, 153, 157, 161, 165, and 169, 20 MHz Spacing" },
10633 { 126, 126, "5.0 GHz, Channels 149 and 157, 40 MHz Spacing" },
10634 { 127, 127, "5.0 GHz, Channels 153 and 161, 40 MHz Spacing" },
10635 { 128, 128, "5.0 GHz, Channel center frequency index 42, 58, 106, 122, 138 and 155, 80 MHz Spacing" },
10636 { 129, 129, "5.0 GHz, Channel center frequency index 50 and 114, 160 MHz Spacing" },
10637 { 130, 130, "5.0 GHz, Channel center frequency index 42, 58, 106, 122, 138 and 155, 80 MHz Spacing, 80+" },
10638 { 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" },
10639 { 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" },
10640 { 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" },
10641 { 134, 134, "5.950 GHz, Channel center frequency index 15, 47, 79, 111, 143, 175, and 207, 160 MHz Spacing" },
10642 { 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+" },
10643 { 136, 136, "5.925 GHz, Channel center frequency index 2, 20 MHz Spacing" },
10644 { 137, 137, "5.925 GHz, Channel center frequency index 31, 63, 95, 127, 159, and 191, 320 MHz Spacing" },
10645 { 138, 179, "Reserved" },
10646 { 180, 180, "56.16 GHz, Channels 1, 2, 3, 4, 5, and 6, 2160 MHz Spacing" },
10647 { 181, 181, "56.16 GHz, Channels 2 and 3, 2160 MHz Spacing" },
10648 { 182, 182, "56.70 GHz, Channels 35, 36, 37, and 38, 1080 MHz Spacing" },
10649 { 183, 183, "42.66 GHz, Channels 1, 2, 3, 4, 5, 6, 7, and 8, 540 MHz Spacing" },
10650 { 184, 184, "47.52 GHz, Channels 9 and 10, 540 MHz Spacing" },
10651 { 185, 185, "42.93 GHz, Channels 11, 12, 13, and 14, 1080 MHz Spacing" },
10652 { 186, 186, "47.79 GHz, Channel 15, 1080 MHz Spacing" },
10653 { 187, 191, "Reserved" },
10654 { 192, 254, "Vendor-Specific" },
10655
10656 { 255, 255, "Reserved" },
10657 { 0, 0, NULL((void*)0) }
10658};
10659
10660static const value_string nai_realm_auth_param_id_vals[] = {
10661 { 1, "Expanded EAP Method" },
10662 { 2, "Non-EAP Inner Authentication Type" },
10663 { 3, "Inner Authentication EAP Method Type" },
10664 { 4, "Expanded Inner EAP Method" },
10665 { 5, "Credential Type" },
10666 { 6, "Tunneled EAP Method Credential Type" },
10667 { 221, "Vendor Specific" },
10668 { 0, NULL((void*)0) }
10669};
10670
10671static void
10672dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10673{
10674 uint16_t count, len;
10675 proto_item *item, *r_item;
10676 int f_end, eap_end;
10677 uint8_t nai_len, eap_count, eap_len, auth_param_count, auth_param_len;
10678 uint8_t auth_param_id;
10679 proto_tree *realm_tree, *eap_tree;
10680 const uint8_t *realm;
10681
10682 count = tvb_get_letohs(tvb, offset);
10683 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nai_realm_count,
10684 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10685 offset += 2;
10686 while (count > 0) {
10687 len = tvb_get_letohs(tvb, offset);
10688 realm_tree = proto_tree_add_subtree(tree, tvb, offset, 2 + len, ett_nai_realm, &r_item, "NAI Realm Data");
10689
10690 item = proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_field_len,
10691 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10692 offset += 2;
10693 if (offset + len > end) {
10694 expert_add_info_format(pinfo, item, &ei_ieee80211_ff_anqp_nai_field_len,
10695 "Invalid NAI Realm List");
10696 break;
10697 }
10698 f_end = offset + len;
10699 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_encoding,
10700 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10701 offset += 1;
10702 nai_len = tvb_get_uint8(tvb, offset);
10703 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_length,
10704 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10705 offset += 1;
10706 if (offset + nai_len > f_end) {
10707 expert_add_info_format(pinfo, r_item, &ei_ieee80211_ff_anqp_nai_field_len,
10708 "Invalid NAI Realm Data");
10709 break;
10710 }
10711 proto_tree_add_item_ret_string(realm_tree, hf_ieee80211_ff_anqp_nai_realm,
10712 tvb, offset, nai_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &realm);
10713 if (realm) {
10714 proto_item_append_text(r_item, " (%s)", realm);
10715 }
10716 offset += nai_len;
10717 eap_count = tvb_get_uint8(tvb, offset);
10718 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_eap_count,
10719 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10720 offset += 1;
10721
10722 while (eap_count > 0) {
10723 eap_len = tvb_get_uint8(tvb, offset);
10724 eap_end = offset + 1 + eap_len;
10725 eap_tree = proto_tree_add_subtree(realm_tree, tvb, offset, 1 + eap_len,
10726 ett_nai_realm_eap, NULL((void*)0), "EAP Method");
10727
10728 item = proto_tree_add_item(eap_tree,
10729 hf_ieee80211_ff_anqp_nai_realm_eap_len,
10730 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10731 offset += 1;
10732 if (offset + eap_len > f_end) {
10733 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_nai_realm_eap_len);
10734 break;
10735 }
10736
10737 proto_item_append_text(eap_tree, ": %s",
10738 val_to_str_ext(pinfo->pool, tvb_get_uint8(tvb, offset),
10739 &eap_type_vals_ext, "Unknown (%d)"));
10740 proto_tree_add_item(eap_tree, hf_ieee80211_ff_anqp_nai_realm_eap_method,
10741 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10742 offset += 1;
10743 auth_param_count = tvb_get_uint8(tvb, offset);
10744 proto_tree_add_item(eap_tree,
10745 hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
10746 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10747 offset += 1;
10748
10749 while (auth_param_count > 0) {
10750 auth_param_id = tvb_get_uint8(tvb, offset);
10751 proto_tree_add_item(eap_tree,
10752 hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
10753 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10754 offset += 1;
10755 auth_param_len = tvb_get_uint8(tvb, offset);
10756 proto_tree_add_item(eap_tree,
10757 hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
10758 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10759 offset += 1;
10760 item = proto_tree_add_item(
10761 eap_tree, hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
10762 tvb, offset, auth_param_len, ENC_NA0x00000000);
10763 if ((auth_param_id == 3) && (auth_param_len == 1)) {
10764 uint8_t inner_method = tvb_get_uint8(tvb, offset);
10765 const char *str;
10766 str = val_to_str_ext(pinfo->pool, inner_method, &eap_type_vals_ext, "Unknown (%d)");
10767
10768 proto_item_append_text(eap_tree, " / %s", str);
10769 proto_item_append_text(item, " - %s", str);
10770 }
10771 offset += auth_param_len;
10772
10773 auth_param_count--;
10774 }
10775
10776 offset = eap_end;
10777 eap_count--;
10778 }
10779
10780 offset = f_end;
10781 count--;
10782 }
10783}
10784
10785static void
10786dissect_3gpp_cellular_network_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
10787{
10788 uint8_t iei, num, plmn_idx = 0;
10789 proto_item *item;
10790
10791 /* See Annex A of 3GPP TS 24.234 v8.1.0 for description */
10792 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_gud, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10793 offset += 1;
10794 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_udhl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10795 offset += 1;
10796 iei = tvb_get_uint8(tvb, offset);
10797 item = proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_iei, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10798 if (iei == 0)
10799 proto_item_append_text(item, " (PLMN List)");
10800 else
10801 return;
10802 offset += 1;
10803 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_plmn_len, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10804 offset += 1;
10805 num = tvb_get_uint8(tvb, offset);
10806 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_num_plmns, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10807 offset += 1;
10808 while (num > 0) {
10809 proto_item *plmn_item = NULL((void*)0);
10810 proto_tree *plmn_tree = NULL((void*)0);
10811 unsigned plmn_val = 0;
10812
10813 if (tvb_reported_length_remaining(tvb, offset) < 3)
10814 break;
10815 plmn_val = tvb_get_letoh24(tvb, offset);
10816 plmn_item = proto_tree_add_uint_format(tree, hf_ieee80211_3gpp_gc_plmn,
10817 tvb, offset, 3, plmn_val, "PLMN %d (0x%x)",
10818 plmn_idx++, plmn_val);
10819 plmn_tree = proto_item_add_subtree(plmn_item, ett_ieee80211_3gpp_plmn);
10820 dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, plmn_tree, offset, E212_NONE, true1);
10821 num--;
10822 offset += 3;
10823 }
10824}
10825
10826static void
10827dissect_domain_name_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10828{
10829 uint8_t len;
10830
10831 while (offset < end) {
10832 len = tvb_get_uint8(tvb, offset);
10833 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name_len,
10834 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10835 offset += 1;
10836 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name,
10837 tvb, offset, len, ENC_ASCII0x00000000);
10838 offset += len;
10839 }
10840}
10841
10842static int
10843dissect_hs20_subscription_remediation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
10844 proto_tree *tree, void *data _U___attribute__((unused)))
10845{
10846 int offset = 0;
10847 uint8_t url_len = tvb_get_uint8(tvb, offset);
10848 proto_item *pi = NULL((void*)0);
10849
10850 proto_tree_add_item(tree, hf_ieee80211_hs20_subscription_remediation_url_len, tvb, offset,
10851 1, ENC_NA0x00000000);
10852 offset++;
10853 if (tvb_reported_length_remaining(tvb, offset) >= url_len) {
10854 pi = proto_tree_add_item(tree, hf_ieee80211_hs20_subscription_remediation_server_url,
10855 tvb, offset, url_len, ENC_ASCII0x00000000);
10856 offset += url_len;
10857 proto_item_set_url(pi);
10858 proto_tree_add_item(tree, hf_ieee80211_hs20_subscription_remediation_server_method,
10859 tvb, offset, 1, ENC_NA0x00000000);
10860 offset++;
10861 }
10862
10863 return offset;
10864}
10865
10866static int
10867dissect_hs20_deauthentication_imminent(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
10868 proto_tree *tree, void *data _U___attribute__((unused)))
10869{
10870 int offset = 0;
10871 uint8_t url_len = 0;
10872 proto_item *pi = NULL((void*)0);
10873
10874 proto_tree_add_item(tree, hf_ieee80211_hs20_deauth_reason_code, tvb, offset, 1, ENC_NA0x00000000);
10875 offset++;
10876
10877 proto_tree_add_item(tree, hf_ieee80211_hs20_reauth_delay, tvb, offset, 2,
10878 ENC_LITTLE_ENDIAN0x80000000);
10879 offset += 2;
10880
10881 url_len = tvb_get_uint8(tvb, offset);
10882 proto_tree_add_item(tree, hf_ieee80211_hs20_deauth_reason_url_len, tvb, offset, 1,
10883 ENC_NA0x00000000);
10884 offset++;
10885
10886 if (tvb_reported_length_remaining(tvb, offset) >= url_len) {
10887 pi = proto_tree_add_item(tree, hf_ieee80211_hs20_deauth_imminent_reason_url,
10888 tvb, offset, url_len, ENC_ASCII0x00000000);
10889 offset += url_len;
10890 proto_item_set_url(pi);
10891 }
10892 return offset;
10893}
10894
10895#define HS20_ANQP_HS_QUERY_LIST1 1
10896#define HS20_ANQP_HS_CAPABILITY_LIST2 2
10897#define HS20_ANQP_OPERATOR_FRIENDLY_NAME3 3
10898#define HS20_ANQP_WAN_METRICS4 4
10899#define HS20_ANQP_CONNECTION_CAPABILITY5 5
10900#define HS20_ANQP_NAI_HOME_REALM_QUERY6 6
10901#define HS20_ANQP_OPERATING_CLASS_INDICATION7 7
10902#define HS20_ANQP_OSU_PROVIDERS_LIST8 8
10903/* 9 is reserved */
10904#define HS20_ANQP_ICON_REQUEST10 10
10905#define HS20_ANQP_ICON_BINARY_FILE11 11
10906#define HS20_ANQP_OPERATOR_ICON_METADATA12 12
10907#define HS20_ANQP_ADVICE_OF_CHARGE13 13
10908
10909static const value_string hs20_anqp_subtype_vals[] = {
10910 { HS20_ANQP_HS_QUERY_LIST1, "HS Query list" },
10911 { HS20_ANQP_HS_CAPABILITY_LIST2, "HS Capability List" },
10912 { HS20_ANQP_OPERATOR_FRIENDLY_NAME3, "Operator Friendly Name" },
10913 { HS20_ANQP_WAN_METRICS4, "WAN Metrics" },
10914 { HS20_ANQP_CONNECTION_CAPABILITY5, "Connection Capability" },
10915 { HS20_ANQP_NAI_HOME_REALM_QUERY6, "NAI Home Realm Query" },
10916 { HS20_ANQP_OPERATING_CLASS_INDICATION7, "Operating Class Indication" },
10917 { HS20_ANQP_OSU_PROVIDERS_LIST8, "OSU Providers List" },
10918 { 9, "Reserved" },
10919 { HS20_ANQP_ICON_REQUEST10, "Icon Request" },
10920 { HS20_ANQP_ICON_BINARY_FILE11, "Icon Binary File" },
10921 { HS20_ANQP_OPERATOR_ICON_METADATA12, "Operator Icon Metadata" },
10922 { HS20_ANQP_ADVICE_OF_CHARGE13, "Advice of Charge" },
10923 { 0, NULL((void*)0) }
10924};
10925
10926static void
10927dissect_hs20_anqp_hs_query_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10928{
10929 while (offset < end) {
10930 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_hs_query_list,
10931 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10932 offset++;
10933 }
10934}
10935
10936static void
10937dissect_hs20_anqp_operator_friendly_name(proto_tree *tree, tvbuff_t *tvb,
10938 packet_info *pinfo, int offset,
10939 int end, int hf_array[],
10940 int ett_val)
10941{
10942 int ofn_index = 0;
10943
10944 while (offset + 4 <= end) {
10945 uint8_t vlen = tvb_get_uint8(tvb, offset);
10946 proto_tree *ofn_tree = NULL((void*)0);
10947 proto_item *item = NULL((void*)0), *pi = NULL((void*)0);
10948 int start_offset = offset;
10949
10950 ofn_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_val,
10951 &pi, "Friendly Name [%d]", ofn_index + 1);
10952
10953 item = proto_tree_add_item(ofn_tree, hf_array[0],
10954 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10955 offset++;
10956 if (vlen > end - offset || vlen < 3) {
10957 expert_add_info(pinfo, item, &ei_hs20_anqp_ofn_length);
10958 break;
10959 }
10960 proto_tree_add_item(ofn_tree, hf_array[1],
10961 tvb, offset, 3, ENC_ASCII0x00000000|ENC_NA0x00000000);
10962 proto_tree_add_item(ofn_tree, hf_array[2],
10963 tvb, offset + 3, vlen - 3, ENC_UTF_80x00000002);
10964 offset += vlen;
10965
10966 proto_item_set_len(pi, offset - start_offset);
10967 ofn_index++;
10968 }
10969}
10970
10971static const value_string hs20_wm_link_status_vals[] = {
10972 { 0, "Reserved" },
10973 { 1, "Link up" },
10974 { 2, "Link down" },
10975 { 3, "Link in test state" },
10976 { 0, NULL((void*)0) }
10977};
10978
10979static void
10980dissect_hs20_anqp_wan_metrics(proto_tree *tree, tvbuff_t *tvb, int offset, bool_Bool request)
10981{
10982 if (request)
10983 return;
10984
10985 if(tvb_reported_length_remaining(tvb, offset) < 13)
10986 return;
10987
10988 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_link_status,
10989 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10990 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_symmetric_link,
10991 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10992 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_at_capacity,
10993 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10994 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_reserved,
10995 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10996 offset++;
10997
10998 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_downlink_speed,
10999 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11000 offset += 4;
11001
11002 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_uplink_speed,
11003 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11004 offset += 4;
11005
11006 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_downlink_load,
11007 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11008 offset++;
11009
11010 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_uplink_load,
11011 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11012 offset++;
11013
11014 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_lmd,
11015 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11016}
11017
11018static const value_string hs20_cc_proto_vals[] = {
11019 { 1, "ICMP" },
11020 { 6, "TCP" },
11021 { 17, "UDP" },
11022 { 50, "ESP" },
11023 { 0, NULL((void*)0) }
11024};
11025
11026static const value_string hs20_cc_port_vals[] = {
11027 { 0, "[Supported]" }, /* Used to indicate ICMP, ESP for IPSec VPN, or IKEv2 for IPSec VPN */
11028 { 20, "FTP" },
11029 { 22, "SSH" },
11030 { 80, "HTTP" },
11031 { 443, "HTTPS" },
11032 { 500, "IKEv2 for IPSec VPN" },
11033 { 1723, "PPTP for IPSec VPN" },
11034 { 4500, "[Optional] IKEv2 for IPSec VPN" },
11035 { 5060, "VOIP" },
11036 { 0, NULL((void*)0) },
11037};
11038
11039static const value_string hs20_cc_status_vals[] = {
11040 { 0, "Closed" },
11041 { 1, "Open" },
11042 { 2, "Unknown" },
11043 { 0, NULL((void*)0) }
11044};
11045
11046static void
11047dissect_hs20_anqp_connection_capability(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb,
11048 int offset, int end)
11049{
11050 proto_tree *tuple;
11051 while (offset + 4 <= end) {
11052 uint8_t ip_proto, status;
11053 uint16_t port_num;
11054
11055 ip_proto = tvb_get_uint8(tvb, offset);
11056 port_num = tvb_get_letohs(tvb, offset + 1);
11057 status = tvb_get_uint8(tvb, offset + 3);
11058
11059 tuple = proto_tree_add_subtree_format(tree, tvb, offset, 4, ett_hs20_cc_proto_port_tuple, NULL((void*)0),
11060 "ProtoPort Tuple - ip_proto=%s port_num=%s status=%s",
11061 val_to_str(pinfo->pool, ip_proto, hs20_cc_proto_vals, "Unknown (%u)"),
11062 val_to_str(pinfo->pool, port_num, hs20_cc_port_vals, "Unknown (%u)"),
11063 val_to_str(pinfo->pool, status, hs20_cc_status_vals, "Reserved (%u)"));
11064 proto_tree_add_item(tuple, hf_ieee80211_hs20_anqp_cc_proto_ip_proto,
11065 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11066 offset++;
11067 proto_tree_add_item(tuple, hf_ieee80211_hs20_anqp_cc_proto_port_num,
11068 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11069 offset += 2;
11070 proto_tree_add_item(tuple, hf_ieee80211_hs20_anqp_cc_proto_status,
11071 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11072 offset++;
11073 }
11074}
11075
11076static void
11077dissect_hs20_anqp_nai_home_realm_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
11078 int offset, int end)
11079{
11080 uint8_t len;
11081 proto_item *item;
11082
11083 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_count,
11084 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11085 offset++;
11086
11087 while (offset + 2 <= end) {
11088 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_encoding_type,
11089 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11090 offset++;
11091 len = tvb_get_uint8(tvb, offset);
11092 item = proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_length,
11093 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11094 offset++;
11095 if (offset + len > end) {
11096 expert_add_info(pinfo, item, &ei_hs20_anqp_nai_hrq_length);
11097 break;
11098 }
11099 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_realm_name,
11100 tvb, offset, len, ENC_ASCII0x00000000);
11101 offset += len;
11102 }
11103}
11104
11105static void
11106dissect_hs20_anqp_oper_class_indic(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
11107{
11108 while (offset < end) {
11109 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_oper_class_indic,
11110 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11111 offset++;
11112 }
11113}
11114
11115static int
11116dissect_hs20_osu_friendly_names(proto_tree *tree, tvbuff_t *tvb,
11117 packet_info *pinfo, int offset, int end _U___attribute__((unused)))
11118{
11119 int osu_fn_hf_array[3] = {hf_ieee80211_hs20_osu_friendly_name_length,
11120 hf_ieee80211_hs20_osu_friendly_name_language,
11121 hf_ieee80211_hs20_osu_friendly_name_name };
11122 uint16_t osu_fn_count = tvb_get_letohs(tvb, offset);
11123 proto_tree *fn_tree = NULL((void*)0);
11124
11125 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_friendly_names_len, tvb, offset, 2,
11126 ENC_LITTLE_ENDIAN0x80000000);
11127 offset += 2;
11128
11129 fn_tree = proto_tree_add_subtree(tree, tvb, offset, osu_fn_count,
11130 ett_hs20_friendly_names_list, NULL((void*)0),
11131 "Friendly Names List");
11132
11133 dissect_hs20_anqp_operator_friendly_name(fn_tree, tvb, pinfo, offset,
11134 offset + osu_fn_count,
11135 osu_fn_hf_array, ett_hs20_friendly_name_tree);
11136
11137 return offset + osu_fn_count;
11138}
11139
11140static int
11141dissect_hs20_osu_icon_available(proto_tree *tree, tvbuff_t *tvb,
11142 packet_info *pinfo _U___attribute__((unused)), int offset, int end _U___attribute__((unused)), uint16_t icon_index)
11143{
11144 proto_tree *icon_avail = NULL((void*)0);
11145 proto_item *pi = NULL((void*)0);
11146 int start_offset = offset;
11147 uint8_t icon_type_len = 0, icon_filename_len = 0;
11148
11149 icon_avail = proto_tree_add_subtree_format(tree, tvb, offset, -1,
11150 ett_hs20_osu_icon_tree, &pi,
11151 "Icon Available %d", icon_index);
11152
11153 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_width, tvb, offset, 2,
11154 ENC_LITTLE_ENDIAN0x80000000);
11155 offset += 2;
11156
11157 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_height, tvb, offset, 2,
11158 ENC_LITTLE_ENDIAN0x80000000);
11159 offset += 2;
11160
11161 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_lang_code, tvb, offset, 3,
11162 ENC_ASCII0x00000000);
11163 offset += 3;
11164
11165 icon_type_len = tvb_get_uint8(tvb, offset);
11166 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_icon_type_len, tvb, offset,
11167 1, ENC_NA0x00000000);
11168 offset++;
11169
11170 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_icon_type, tvb, offset,
11171 icon_type_len, ENC_ASCII0x00000000);
11172 offset += icon_type_len;
11173
11174 icon_filename_len = tvb_get_uint8(tvb, offset);
11175 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_filename_len, tvb, offset,
11176 1, ENC_NA0x00000000);
11177 offset++;
11178
11179 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_filename, tvb, offset,
11180 icon_filename_len, ENC_ASCII0x00000000);
11181 offset += icon_filename_len;
11182
11183 proto_item_set_len(pi, offset - start_offset);
11184
11185 return offset;
11186}
11187
11188static const value_string osu_method_vals[] = {
11189 { 0, "OMA DM" },
11190 { 1, "SOAP XML SPP" },
11191 { 0, NULL((void*)0) },
11192};
11193
11194static int
11195dissect_hs20_osu_provider(proto_tree *tree, tvbuff_t *tvb,
11196 packet_info *pinfo, int offset, int end, uint8_t provider_index)
11197{
11198 proto_tree *prov_tree = NULL((void*)0);
11199 proto_item *osupi = NULL((void*)0), *uri_pi = NULL((void*)0);
11200 int start_offset = offset;
11201 uint8_t osu_server_uri_len = 0;
11202 uint8_t osu_method_list_len = 0;
11203 uint16_t icons_avail = 0, icons_index = 0;
11204 uint8_t osu_nai_len = 0;
11205 uint16_t osu_service_desc_len = 0;
11206
11207 prov_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
11208 ett_hs20_osu_provider_tree, &osupi,
11209 "OSU Provider %d", provider_index);
11210
11211 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_prov_length, tvb, offset, 2,
11212 ENC_LITTLE_ENDIAN0x80000000);
11213 offset += 2;
11214
11215 offset = dissect_hs20_osu_friendly_names(prov_tree, tvb, pinfo, offset, end);
11216
11217 proto_item_set_len(osupi, offset - start_offset);
11218
11219 osu_server_uri_len = tvb_get_uint8(tvb, offset);
11220 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_server_uri_len, tvb, offset, 1,
11221 ENC_NA0x00000000);
11222 offset++;
11223
11224 uri_pi = proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_server_uri, tvb, offset,
11225 osu_server_uri_len, ENC_ASCII0x00000000);
11226 offset += osu_server_uri_len;
11227 proto_item_set_url(uri_pi);
11228
11229 osu_method_list_len = tvb_get_uint8(tvb, offset);
11230 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_method_list_len, tvb, offset, 1,
11231 ENC_NA0x00000000);
11232 offset++;
11233
11234 if (osu_method_list_len > 0) {
11235 proto_tree *osu_method_list = NULL((void*)0);
11236 uint8_t osu_method_list_index = 0;
11237
11238 osu_method_list = proto_tree_add_subtree(prov_tree, tvb, offset,
11239 osu_method_list_len,
11240 ett_hs20_osu_provider_method_list,
11241 NULL((void*)0), "OSU Method List");
11242 while (osu_method_list_len > osu_method_list_index) {
11243 proto_item *pi = NULL((void*)0);
11244 uint8_t method = tvb_get_uint8(tvb, offset);
11245
11246 pi = proto_tree_add_item(osu_method_list, hf_ieee80211_hs20_osu_method_val, tvb,
11247 offset, 1, ENC_NA0x00000000);
11248 proto_item_append_text(pi, ": %s",
11249 val_to_str_const(method, osu_method_vals,
11250 "Reserved"));
11251 offset++;
11252 osu_method_list_index++;
11253 }
11254 }
11255
11256 icons_avail = tvb_get_letohs(tvb, offset);
11257 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_icons_avail_len, tvb, offset, 2,
11258 ENC_LITTLE_ENDIAN0x80000000);
11259 offset += 2;
11260
11261 if (icons_avail > 0) {
11262 proto_tree *icon_list = NULL((void*)0);
11263 proto_item *pi = NULL((void*)0);
11264
11265 start_offset = offset;
11266
11267 icon_list = proto_tree_add_subtree(prov_tree, tvb, offset, -1,
11268 ett_osu_icons_avail_list, &pi,
11269 "Icons Available");
11270
11271 while ((offset - start_offset) < icons_avail) {
11272 offset = dissect_hs20_osu_icon_available(icon_list, tvb, pinfo, offset,
11273 end, icons_index);
11274 icons_index++;
11275 }
11276
11277 proto_item_set_len(pi, offset - start_offset);
11278 }
11279
11280 osu_nai_len = tvb_get_uint8(tvb, offset);
11281 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_nai_len, tvb, offset, 1, ENC_NA0x00000000);
11282 offset++;
11283
11284 if (osu_nai_len > 0) {
11285 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_nai, tvb, offset,
11286 osu_nai_len, ENC_ASCII0x00000000);
11287 offset += osu_nai_len;
11288 }
11289
11290 osu_service_desc_len = tvb_get_letohs(tvb, offset);
11291 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_service_desc_len, tvb, offset, 2,
11292 ENC_LITTLE_ENDIAN0x80000000);
11293 offset += 2;
11294
11295 if (osu_service_desc_len > 0) {
11296 proto_tree *desc_tree = NULL((void*)0);
11297 proto_item *pi = NULL((void*)0);
11298 uint8_t service_desc_index = 0;
11299
11300 start_offset = offset;
11301 desc_tree = proto_tree_add_subtree(prov_tree, tvb, offset, -1,
11302 ett_hs20_osu_service_desc_list, &pi,
11303 "OSU Service Description List");
11304
11305 while ((offset - start_offset) < osu_service_desc_len) {
11306 proto_tree *desc_duple = NULL((void*)0);
11307 uint8_t serv_desc_len = tvb_get_uint8(tvb, offset);
11308
11309 desc_duple = proto_tree_add_subtree_format(desc_tree, tvb, offset,
11310 1 + serv_desc_len,
11311 ett_hs20_osu_service_desc_tree, NULL((void*)0),
11312 "OSU Service Description Duple %d",
11313 service_desc_index);
11314
11315 proto_tree_add_item(desc_duple, hf_ieee80211_hs20_osu_service_desc_duple_len, tvb,
11316 offset, 1, ENC_NA0x00000000);
11317 offset++;
11318
11319 proto_tree_add_item(desc_duple, hf_ieee80211_hs20_osu_service_desc_lang, tvb, offset,
11320 3, ENC_ASCII0x00000000);
11321 offset += 3;
11322
11323 proto_tree_add_item(desc_duple, hf_ieee80211_hs20_osu_service_desc, tvb, offset,
11324 serv_desc_len - 3, ENC_ASCII0x00000000);
11325 offset += serv_desc_len - 3;
11326
11327 service_desc_index++;
11328 }
11329
11330 proto_item_set_len(pi, offset - start_offset);
11331 }
11332
11333 return offset;
11334}
11335
11336static void
11337dissect_hs20_anqp_osu_providers_list(proto_tree *tree, tvbuff_t *tvb,
11338 packet_info *pinfo, int offset, int end)
11339{
11340 uint8_t ssid_len = tvb_get_uint8(tvb, offset);
11341 uint8_t osu_prov_count = 0, osu_prov_index = 0;
11342
11343 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_providers_list_ssid_len, tvb, offset, 1,
11344 ENC_NA0x00000000);
11345 offset++;
11346
11347 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_providers_ssid, tvb, offset, ssid_len,
11348 ENC_UTF_80x00000002);
11349 offset += ssid_len;
11350
11351 osu_prov_count = tvb_get_uint8(tvb, offset);
11352 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_providers_count, tvb, offset, 1,
11353 ENC_NA0x00000000);
11354 offset++;
11355
11356 if (osu_prov_count > 0) {
11357 int start_offset = offset;
11358 proto_item *pi = NULL((void*)0);
11359 proto_tree *osu_prov_list = NULL((void*)0);
11360
11361 osu_prov_list = proto_tree_add_subtree(tree, tvb, offset, -1,
11362 ett_hs20_osu_providers_list, &pi,
11363 "OSU Providers List");
11364 while (offset < end && osu_prov_count > osu_prov_index) {
11365 offset = dissect_hs20_osu_provider(osu_prov_list, tvb, pinfo, offset, end,
11366 osu_prov_index);
11367 osu_prov_index++;
11368 }
11369
11370 proto_item_set_len(pi, offset - start_offset);
11371 }
11372}
11373
11374static void
11375dissect_hs20_anqp_icon_request(proto_tree *tree, tvbuff_t *tvb, int offset,
11376 int end)
11377{
11378 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_request_filename, tvb, offset,
11379 end - offset, ENC_UTF_80x00000002);
11380}
11381
11382static const value_string hs20_icon_download_status_vals[] = {
11383 { 0, "Success" },
11384 { 1, "File not found" },
11385 { 2, "Unspecified file error" },
11386 { 0, NULL((void*)0) }
11387};
11388
11389static void
11390dissect_hs20_anqp_icon_binary_file(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, int offset,
11391 int end _U___attribute__((unused)))
11392{
11393 uint8_t icon_download_status = tvb_get_uint8(tvb, offset);
11394 proto_item *pi = NULL((void*)0);
11395 uint8_t icon_type_len = 0;
11396 uint16_t icon_binary_data_len = 0;
11397
11398 pi = proto_tree_add_item(tree, hf_ieee80211_hs20_icon_binary_file_status, tvb, offset, 1,
11399 ENC_NA0x00000000);
11400 offset++;
11401 proto_item_append_text(pi, ": %s",
11402 val_to_str(pinfo->pool, icon_download_status,
11403 hs20_icon_download_status_vals,
11404 "Reserved (%u)"));
11405
11406 icon_type_len = tvb_get_uint8(tvb, offset);
11407 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_type_length, tvb, offset, 1, ENC_NA0x00000000);
11408 offset++;
11409
11410 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_type, tvb, offset, icon_type_len,
11411 ENC_UTF_80x00000002);
11412 offset += icon_type_len;
11413
11414 icon_binary_data_len = tvb_get_letohs(tvb, offset);
11415 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_binary_data_len, tvb, offset, 2,
11416 ENC_BIG_ENDIAN0x00000000);
11417 offset += 2;
11418
11419 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_binary_data, tvb, offset,
11420 icon_binary_data_len, ENC_NA0x00000000);
11421}
11422
11423static void
11424dissect_hs20_anqp_operator_icon_metadata(proto_tree *tree, tvbuff_t *tvb,
11425 int offset, int end _U___attribute__((unused)))
11426{
11427 proto_item *pi = NULL((void*)0);
11428 int start_offset = offset;
11429 uint8_t icon_type_len = 0, icon_filename_len = 0;
11430
11431 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_width, tvb, offset, 2,
11432 ENC_LITTLE_ENDIAN0x80000000);
11433 offset += 2;
11434
11435 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_height, tvb, offset, 2,
11436 ENC_LITTLE_ENDIAN0x80000000);
11437 offset += 2;
11438
11439 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_lang_code, tvb, offset, 3,
11440 ENC_ASCII0x00000000);
11441 offset += 3;
11442
11443 icon_type_len = tvb_get_uint8(tvb, offset);
11444 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_icon_type_len, tvb, offset,
11445 1, ENC_NA0x00000000);
11446 offset++;
11447
11448 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_icon_type, tvb, offset,
11449 icon_type_len, ENC_ASCII0x00000000);
11450 offset += icon_type_len;
11451
11452 icon_filename_len = tvb_get_uint8(tvb, offset);
11453 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_filename_len, tvb, offset,
11454 1, ENC_NA0x00000000);
11455 offset++;
11456
11457 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_filename, tvb, offset,
11458 icon_filename_len, ENC_ASCII0x00000000);
11459 offset += icon_filename_len;
11460
11461 proto_item_set_len(pi, offset - start_offset);
11462}
11463
11464static void
11465dissect_anqp_venue_url(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
11466{
11467 uint16_t url_duple_index = 0;
11468
11469 while (offset < end) {
11470 proto_tree *venue_url = NULL((void*)0);
11471 proto_item *url_pi = NULL((void*)0);
11472 uint8_t url_duple_len = tvb_get_uint8(tvb, offset);
11473
11474 venue_url = proto_tree_add_subtree_format(tree, tvb, offset,
11475 url_duple_len + 1, ett_hs20_venue_url, NULL((void*)0),
11476 "Venue URL Duple %d", url_duple_index);
11477
11478 proto_tree_add_item(venue_url, hf_ieee80211_hs20_anqp_venue_url_length, tvb, offset,
11479 1, ENC_NA0x00000000);
11480 offset++;
11481
11482 proto_tree_add_item(venue_url, hf_ieee80211_hs20_anqp_venue_number, tvb, offset, 1,
11483 ENC_NA0x00000000);
11484 offset++;
11485
11486 url_pi = proto_tree_add_item(venue_url, hf_ieee80211_hs20_anqp_venue_url, tvb, offset,
11487 url_duple_len -1, ENC_ASCII0x00000000);
11488 proto_item_set_url(url_pi);
11489
11490 offset += (url_duple_len - 1);
11491
11492 url_duple_index++;
11493 }
11494}
11495
11496static const value_string advice_of_charge_type_vals[] = {
11497 { 0, "Time-based" },
11498 { 1, "Data-volume-based" },
11499 { 2, "Time-and-data-volume-based" },
11500 { 3, "Unlimited" },
11501 { 0, NULL((void*)0) }
11502};
11503
11504static void
11505dissect_hs20_anqp_advice_of_charge(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, int offset,
11506 int end _U___attribute__((unused)))
11507{
11508 uint16_t toc_index = 0;
11509
11510 while (offset < end) {
11511 uint16_t adv_charge_len = tvb_get_letohs(tvb, offset);
11512 proto_tree *aoc_tree = NULL((void*)0);
11513 proto_tree *plan_info_tree = NULL((void*)0);
11514 proto_item *pi = NULL((void*)0), *tpi = NULL((void*)0);
11515 int start_offset = offset;
11516 uint8_t aoc_type = 0, nai_realm_len = 0;
11517 uint8_t plan_index = 0;
11518 uint16_t plan_tot_len = 0;
11519 int plan_offset = 0;
11520
11521 aoc_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
11522 ett_hs20_advice_of_charge, &pi,
11523 "Advice of Charge Duple %d", toc_index);
11524 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_advice_of_charge_length, tvb,
11525 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11526 offset += 2;
11527
11528 aoc_type = tvb_get_uint8(tvb, offset);
11529 tpi = proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_advice_of_charge_type, tvb,
11530 offset, 1, ENC_NA0x00000000);
11531 offset++;
11532 proto_item_append_text(tpi, ": %s",
11533 val_to_str(pinfo->pool, aoc_type,
11534 advice_of_charge_type_vals,
11535 "Reserved (%u)"));
11536
11537 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_aoc_nai_realm_encoding, tvb,
11538 offset, 1, ENC_NA0x00000000);
11539 offset++;
11540
11541 nai_realm_len = tvb_get_uint8(tvb, offset);
11542 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_aoc_nai_realm_len, tvb, offset,
11543 1, ENC_NA0x00000000);
11544 offset++;
11545
11546 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_aoc_nai_realm, tvb, offset,
11547 nai_realm_len, ENC_UTF_80x00000002);
11548 offset += nai_realm_len;
11549
11550 plan_tot_len = adv_charge_len - 3 - nai_realm_len;
11551 plan_offset = offset;
11552
11553 while (offset < (plan_offset + plan_tot_len)) {
11554 uint16_t plan_len = tvb_get_letohs(tvb, offset);
11555
11556 plan_info_tree = proto_tree_add_subtree_format(aoc_tree, tvb, offset,
11557 plan_len + 2, ett_hs20_aoc_plan, NULL((void*)0),
11558 "Plan #%u", plan_index);
11559
11560 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_len, tvb,
11561 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11562 offset += 2;
11563
11564 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_lang, tvb,
11565 offset, 3, ENC_ASCII0x00000000);
11566 offset += 3;
11567
11568 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_curcy, tvb,
11569 offset, 3, ENC_ASCII0x00000000);
11570 offset += 3;
11571
11572 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_information,
11573 tvb, offset, plan_len - 6, ENC_UTF_80x00000002);
11574 offset += plan_len - 6;
11575
11576 plan_index++;
11577 }
11578
11579 proto_item_set_len(pi, offset - start_offset);
11580
11581 toc_index++;
11582 }
11583}
11584
11585static int
11586dissect_hs20_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
11587{
11588 uint8_t subtype;
11589 int ofn_hf_array[3] = {hf_ieee80211_hs20_anqp_ofn_length,
11590 hf_ieee80211_hs20_anqp_ofn_language,
11591 hf_ieee80211_hs20_anqp_ofn_name };
11592
11593 int end = tvb_reported_length(tvb);
11594 int offset = 0;
11595 anqp_info_dissector_data_t* anqp_data = (anqp_info_dissector_data_t*)data;
11596
11597 DISSECTOR_ASSERT(anqp_data)((void) ((anqp_data) ? (void)0 : (proto_report_dissector_bug(
"%s:%u: failed assertion \"%s\"", "epan/dissectors/packet-ieee80211.c"
, 11597, "anqp_data"))))
;
11598
11599 subtype = tvb_get_uint8(tvb, offset);
11600 proto_item_append_text(tree, " - HS 2.0 %s",
11601 val_to_str(pinfo->pool, subtype, hs20_anqp_subtype_vals,
11602 "Reserved (%u)"));
11603 if (anqp_data->idx == 0) {
11604 col_append_fstr(pinfo->cinfo, COL_INFO, " HS 2.0 %s",
11605 val_to_str(pinfo->pool, subtype, hs20_anqp_subtype_vals,
11606 "Reserved (%u)"));
11607 } else if (anqp_data->idx == 1) {
11608 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
11609 }
11610 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_subtype, tvb, offset, 1,
11611 ENC_LITTLE_ENDIAN0x80000000);
11612 offset++;
11613
11614 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_reserved, tvb, offset, 1,
11615 ENC_LITTLE_ENDIAN0x80000000);
11616 offset++;
11617
11618 switch (subtype) {
11619 case HS20_ANQP_HS_QUERY_LIST1:
11620 dissect_hs20_anqp_hs_query_list(tree, tvb, offset, end);
11621 break;
11622 case HS20_ANQP_HS_CAPABILITY_LIST2:
11623 dissect_hs20_anqp_hs_capability_list(tree, tvb, offset, end);
11624 break;
11625 case HS20_ANQP_OPERATOR_FRIENDLY_NAME3:
11626 dissect_hs20_anqp_operator_friendly_name(tree, tvb, pinfo, offset, end,
11627 ofn_hf_array, ett_hs20_ofn_tree);
11628 break;
11629 case HS20_ANQP_WAN_METRICS4:
11630 dissect_hs20_anqp_wan_metrics(tree, tvb, offset, anqp_data->request);
11631 break;
11632 case HS20_ANQP_CONNECTION_CAPABILITY5:
11633 dissect_hs20_anqp_connection_capability(tree, pinfo, tvb, offset, end);
11634 break;
11635 case HS20_ANQP_NAI_HOME_REALM_QUERY6:
11636 dissect_hs20_anqp_nai_home_realm_query(tree, tvb, pinfo, offset, end);
11637 break;
11638 case HS20_ANQP_OPERATING_CLASS_INDICATION7:
11639 dissect_hs20_anqp_oper_class_indic(tree, tvb, offset, end);
11640 break;
11641 case HS20_ANQP_OSU_PROVIDERS_LIST8:
11642 dissect_hs20_anqp_osu_providers_list(tree, tvb, pinfo, offset, end);
11643 break;
11644 case HS20_ANQP_ICON_REQUEST10:
11645 dissect_hs20_anqp_icon_request(tree, tvb, offset, end);
11646 break;
11647 case HS20_ANQP_ICON_BINARY_FILE11:
11648 dissect_hs20_anqp_icon_binary_file(tree, pinfo, tvb, offset, end);
11649 break;
11650 case HS20_ANQP_OPERATOR_ICON_METADATA12:
11651 dissect_hs20_anqp_operator_icon_metadata(tree, tvb, offset, end);
11652 break;
11653 case HS20_ANQP_ADVICE_OF_CHARGE13:
11654 dissect_hs20_anqp_advice_of_charge(tree, pinfo, tvb, offset, end);
11655 break;
11656 default:
11657 if (offset == end)
11658 break;
11659 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_payload, tvb, offset,
11660 end - offset, ENC_NA0x00000000);
11661 break;
11662 }
11663
11664 return tvb_captured_length(tvb);
11665}
11666
11667// MBO ANQP element subtypes
11668#define MBO_ANQP_QUERY_LIST1 1
11669#define MBO_ANQP_CELLULAR_DATA_PREFERENCE2 2
11670
11671static const value_string mbo_anqp_subtype_vals[] = {
11672 { MBO_ANQP_QUERY_LIST1, "MBO Query List" },
11673 { MBO_ANQP_CELLULAR_DATA_PREFERENCE2, "Cellular Data Connection Preference" },
11674 { 0, NULL((void*)0) }
11675};
11676
11677static int
11678dissect_mbo_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
11679{
11680 uint8_t subtype;
11681 int len = tvb_reported_length(tvb);
11682 int offset = 0;
11683
11684 if (len < 2) {
11685 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
11686 return offset;
11687 }
11688
11689 subtype = tvb_get_uint8(tvb, offset);
11690 proto_tree_add_item(tree, hf_ieee80211_wfa_anqp_mbo_subtype, tvb, offset, 1, ENC_NA0x00000000);
11691 offset++;
11692 len--;
11693
11694 switch (subtype) {
11695 case MBO_ANQP_QUERY_LIST1:
11696 while (len > 0) {
11697 proto_tree_add_item(tree, hf_ieee80211_wfa_anqp_mbo_query, tvb, offset, 1, ENC_NA0x00000000);
11698 offset++;
11699 len--;
11700 }
11701 break;
11702 case MBO_ANQP_CELLULAR_DATA_PREFERENCE2:
11703 proto_tree_add_item(tree, hf_ieee80211_wfa_anqp_mbo_cellular_pref, tvb, offset,
11704 1, ENC_NA0x00000000);
11705 offset++;
11706 len--;
11707 break;
11708 default:
11709 break;
11710 }
11711
11712 return offset;
11713}
11714
11715static int
11716dissect_vendor_wifi_alliance_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
11717{
11718 uint8_t subtype;
11719 int offset = 0;
11720 tvbuff_t *subtvb;
11721
11722 subtype = tvb_get_uint8(tvb, offset);
11723 proto_tree_add_item(tree, hf_ieee80211_anqp_wfa_subtype, tvb, offset, 1, ENC_NA0x00000000);
11724 offset += 1;
11725
11726 subtvb = tvb_new_subset_remaining(tvb, offset);
11727 if (!dissector_try_uint_with_data(wifi_alliance_anqp_info_table, subtype, subtvb, pinfo, tree, false0, data))
11728 call_data_dissector(subtvb, pinfo, tree);
11729
11730 return tvb_captured_length(tvb);
11731}
11732
11733
11734static int
11735dissect_neighbor_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data);
11736
11737static int
11738dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11739 bool_Bool request, int idx)
11740{
11741 uint16_t id, len;
11742 uint32_t oui;
11743 proto_item *item;
11744 tvbuff_t *vendor_tvb;
11745 anqp_info_dissector_data_t anqp_info;
11746
11747 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_id,
11748 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11749 id = tvb_get_letohs(tvb, offset);
11750 if (id != ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797) {
11751 if (idx == 0) {
11752 proto_item_append_text(tree, " - %s",
11753 val_to_str_ext(pinfo->pool, id, &anqp_info_id_vals_ext, "Unknown (%u)"));
11754 col_append_fstr(pinfo->cinfo, COL_INFO, " %s",
11755 val_to_str_ext(pinfo->pool, id, &anqp_info_id_vals_ext, "Unknown (%u)"));
11756 } else if (idx == 1) {
11757 proto_item_append_text(tree, ", ..");
11758 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
11759 }
11760 }
11761 tree = proto_item_add_subtree(item, ett_gas_anqp);
11762 offset += 2;
11763 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_length,
11764 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11765 len = tvb_get_letohs(tvb, offset);
11766 offset += 2;
11767 if (tvb_reported_length_remaining(tvb, offset) < len) {
11768 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_info_length);
11769 return 4 + len;
11770 }
11771 switch (id)
11772 {
11773 case ANQP_INFO_ANQP_QUERY_LIST256:
11774 dissect_anqp_query_list(tree, tvb, pinfo, offset, offset + len);
11775 break;
11776 case ANQP_INFO_ANQP_CAPAB_LIST257:
11777 dissect_anqp_capab_list(tree, tvb, pinfo, offset, offset + len);
11778 break;
11779 case ANQP_INFO_VENUE_NAME_INFO258:
11780 dissect_venue_name_info(tree, tvb, pinfo, offset, offset + len);
11781 break;
11782 case ANQP_INFO_NETWORK_AUTH_TYPE_INFO260:
11783 dissect_network_auth_type(tree, tvb, offset, offset + len);
11784 break;
11785 case ANQP_INFO_ROAMING_CONSORTIUM_LIST261:
11786 dissect_roaming_consortium_list(tree, tvb, pinfo, offset, offset + len);
11787 break;
11788 case ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262:
11789 dissect_ip_addr_type_availability_info(tree, tvb, offset);
11790 break;
11791 case ANQP_INFO_NAI_REALM_LIST263:
11792 dissect_nai_realm_list(tree, tvb, pinfo, offset, offset + len);
11793 break;
11794 case ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264:
11795 dissect_3gpp_cellular_network_info(tree, tvb, pinfo, offset);
11796 break;
11797 case ANQP_INFO_DOMAIN_NAME_LIST268:
11798 dissect_domain_name_list(tree, tvb, offset, offset + len);
11799 break;
11800 case ANQP_INFO_NEIGHBOR_REPORT272:
11801 {
11802 tvbuff_t *report_tvb;
11803 static const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52 };
11804
11805 report_tvb = tvb_new_subset_length(tvb, offset, len);
11806 int report_offset = 0;
11807 /* Cf. IEEE 802.11-2020 9.4.5.19 Neighbor Report ANQP-element with
11808 * IEEE 802.11-2016 9.4.5.19 and IEEE 802.11-2012 8.4.4.19.
11809 * The line "The Element ID and the Length fields of the Neighbor Report
11810 * element... are not included" was removed as it made it impossible
11811 * to include more than one Neighbor Element (using the overall ANQP
11812 * Info length could not distinguish between extra length due to a second
11813 * Neighbor Report and extra length due to optional subelements.)
11814 * The headerless version was apparently never deployed so use the new
11815 * specification (though we could test to see if the next octet is
11816 * TAG_NEIGHBOR_REPORT and dissect with the older method if not.)
11817 */
11818 while (tvb_reported_length_remaining(report_tvb, report_offset)) {
11819 report_offset += add_tagged_field(pinfo, tree, report_tvb, report_offset, 0,
11820 ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
11821 }
11822 }
11823 break;
11824 case ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797:
11825 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
11826 offset += 3;
11827 vendor_tvb = tvb_new_subset_length(tvb, offset, len - 3);
11828
11829 anqp_info.request = request;
11830 anqp_info.idx = idx;
11831 if (!dissector_try_uint_with_data(vendor_specific_anqp_info_table, oui, vendor_tvb, pinfo, tree, false0, &anqp_info))
11832 {
11833 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info, tvb, offset, len, ENC_NA0x00000000);
11834 }
11835 break;
11836 case ANQP_INFO_VENUE_URL277:
11837 dissect_anqp_venue_url(tree, tvb, offset, offset + len);
11838 break;
11839 case ANQP_INFO_ADVICE_OF_CHARGE278:
11840 dissect_hs20_anqp_advice_of_charge(tree, pinfo, tvb, offset, offset + len);
11841 break;
11842 case ANQP_INFO_NETWORK_AUTH_TYPE_TIMESTAMP280:
11843 dissect_anqp_network_auth_type_timestamp(tree, tvb, offset, offset + len);
11844 break;
11845 default:
11846 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
11847 tvb, offset, len, ENC_NA0x00000000);
11848 break;
11849 }
11850
11851 return 4 + len;
11852}
11853
11854static void
11855dissect_anqp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, bool_Bool request)
11856{
11857 int idx = 0;
11858
11859 proto_item_append_text(tree, ": ANQP ");
11860 proto_item_append_text(tree, request ? "Request" : "Response");
11861 if (tvb_reported_length_remaining(tvb, offset) < 4) {
11862 expert_add_info(pinfo, tree, &ei_ieee80211_not_enough_room_for_anqp_header);
11863 return;
11864 }
11865 col_append_fstr(pinfo->cinfo, COL_INFO, ", ANQP %s",
11866 request ? "Req" : "Resp");
11867 while (tvb_reported_length_remaining(tvb, offset) > 0) {
11868 offset += dissect_anqp_info(tree, tvb, pinfo, offset, request, idx);
11869 idx += 1;
11870 }
11871}
11872
11873static unsigned
11874dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11875 unsigned type, unsigned subtype)
11876{
11877 uint16_t req_len;
11878 int start = offset;
11879 proto_item *item;
11880 proto_tree *query;
11881
11882 /* Query Request Length (2 octets) */
11883 req_len = tvb_get_letohs(tvb, offset);
11884
11885 query = proto_tree_add_subtree(tree, tvb, offset, 2 + req_len, ett_gas_query, &item, "Query Request");
11886 if (tvb_reported_length_remaining(tvb, offset) < 2 + req_len) {
11887 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_request_length);
11888 return tvb_reported_length_remaining(tvb, offset);
11889 }
11890
11891 proto_tree_add_item(query, hf_ieee80211_ff_query_request_length,
11892 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11893 offset += 2;
11894 /*
11895 * Query Request (GAS query; formatted per protocol specified in the
11896 * Advertisement Protocol IE)
11897 */
11898 switch (type) {
11899 case ADV_PROTO_ID_ANQP0:
11900 dissect_anqp(query, tvb, pinfo, offset, true1);
11901 break;
11902 case ADV_PROTO_ID_VS221:
11903 if (subtype == ((DPP_CONFIGURATION_PROTOCOL0x01 << 8) | WFA_SUBTYPE_DPP26)) {
11904 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
11905 val_to_str(pinfo->pool, subtype >> 8, dpp_subtype_vals, "Unknown (%u)"));
11906 dissect_wifi_dpp_config_proto(pinfo, query, tvb, offset);
11907 }
11908 break;
11909 default:
11910 proto_tree_add_item(query, hf_ieee80211_ff_query_request,
11911 tvb, offset, req_len, ENC_NA0x00000000);
11912 }
11913 offset += req_len;
11914
11915 return offset - start;
11916}
11917
11918static unsigned
11919dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11920 unsigned type, unsigned subtype)
11921{
11922 uint16_t resp_len;
11923 int start = offset;
11924 proto_item *item;
11925 proto_tree *query;
11926
11927 /* Query Response Length (2 octets) */
11928 resp_len = tvb_get_letohs(tvb, offset);
11929
11930 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
11931 ett_gas_query, &item, "Query Response");
11932 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
11933 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
11934 return tvb_reported_length_remaining(tvb, offset);
11935 }
11936
11937 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
11938 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11939 offset += 2;
11940 /* Query Response (optional) */
11941 if (resp_len) {
11942 switch (type) {
11943 case ADV_PROTO_ID_ANQP0:
11944 dissect_anqp(query, tvb, pinfo, offset, false0);
11945 break;
11946 case ADV_PROTO_ID_VS221:
11947 if (subtype == ((DPP_CONFIGURATION_PROTOCOL0x01 << 8) | WFA_SUBTYPE_DPP26)) {
11948 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
11949 val_to_str(pinfo->pool, subtype >> 8, dpp_subtype_vals, "Unknown (%u)"));
11950 dissect_wifi_dpp_config_proto(pinfo, query, tvb, offset);
11951 }
11952 break;
11953 default:
11954 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
11955 tvb, offset, resp_len, ENC_NA0x00000000);
11956 }
11957 offset += resp_len;
11958 }
11959
11960 return offset - start;
11961}
11962
11963static reassembly_table gas_reassembly_table;
11964
11965static int ett_gas_resp_fragment;
11966static int ett_gas_resp_fragments;
11967
11968static int hf_ieee80211_gas_resp_fragments;
11969static int hf_ieee80211_gas_resp_fragment;
11970static int hf_ieee80211_gas_resp_fragment_overlap;
11971static int hf_ieee80211_gas_resp_fragment_overlap_conflict;
11972static int hf_ieee80211_gas_resp_fragment_multiple_tails;
11973static int hf_ieee80211_gas_resp_fragment_too_long_fragment;
11974static int hf_ieee80211_gas_resp_fragment_error;
11975static int hf_ieee80211_gas_resp_fragment_count;
11976static int hf_ieee80211_gas_resp_reassembled_in;
11977static int hf_ieee80211_gas_resp_reassembled_length;
11978
11979static const fragment_items gas_resp_frag_items = {
11980 &ett_gas_resp_fragment,
11981 &ett_gas_resp_fragments,
11982 &hf_ieee80211_gas_resp_fragments,
11983 &hf_ieee80211_gas_resp_fragment,
11984 &hf_ieee80211_gas_resp_fragment_overlap,
11985 &hf_ieee80211_gas_resp_fragment_overlap_conflict,
11986 &hf_ieee80211_gas_resp_fragment_multiple_tails,
11987 &hf_ieee80211_gas_resp_fragment_too_long_fragment,
11988 &hf_ieee80211_gas_resp_fragment_error,
11989 &hf_ieee80211_gas_resp_fragment_count,
11990 &hf_ieee80211_gas_resp_reassembled_in,
11991 &hf_ieee80211_gas_resp_reassembled_length,
11992 /* Reassembled data field */
11993 NULL((void*)0),
11994 "GAS Response fragments"
11995};
11996
11997static unsigned
11998dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11999 unsigned type, unsigned subtype _U___attribute__((unused)), uint8_t frag, bool_Bool more,
12000 uint8_t dialog_token)
12001{
12002 uint16_t resp_len;
12003 int start = offset;
12004 proto_item *item;
12005 proto_tree *query;
12006
12007 /* Query Response Length (2 octets) */
12008 resp_len = tvb_get_letohs(tvb, offset);
12009
12010 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
12011 ett_gas_query, &item, "Query Response");
12012 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
12013 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
12014 return tvb_reported_length_remaining(tvb, offset);
12015 }
12016
12017 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
12018 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12019 offset += 2;
12020 /* Query Response (optional) */
12021 if (resp_len) {
12022 if (type == ADV_PROTO_ID_ANQP0 && (frag == 0) && !more)
12023 dissect_anqp(query, tvb, pinfo, offset, false0);
12024 else {
12025 fragment_head *frag_msg;
12026 bool_Bool save_fragmented;
12027 tvbuff_t *new_tvb;
12028
12029 save_fragmented = pinfo->fragmented;
12030 pinfo->fragmented = true1;
12031 frag_msg = fragment_add_seq_check(&gas_reassembly_table, tvb, offset,
12032 pinfo, dialog_token, NULL((void*)0),
12033 frag, resp_len, more);
12034 new_tvb = process_reassembled_data(tvb, offset, pinfo,
12035 "Reassembled GAS Query Response",
12036 frag_msg, &gas_resp_frag_items,
12037 NULL((void*)0), tree);
12038 if (new_tvb) {
12039 switch (type) {
12040 case ADV_PROTO_ID_ANQP0:
12041 dissect_anqp(query, new_tvb, pinfo, 0, false0);
12042 break;
12043 case ADV_PROTO_ID_VS221:
12044 if (subtype == ((DPP_CONFIGURATION_PROTOCOL0x01 << 8) |
12045 WFA_SUBTYPE_DPP26)) {
12046 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
12047 val_to_str(pinfo->pool, subtype >> 8, dpp_subtype_vals,
12048 "Unknown (%u)"));
12049 dissect_wifi_dpp_config_proto(pinfo, query, new_tvb, 0);
12050 } else {
12051 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
12052 new_tvb, 0,
12053 tvb_reported_length_remaining(new_tvb, 0),
12054 ENC_NA0x00000000);
12055 }
12056 break;
12057 default:
12058 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
12059 new_tvb, 0,
12060 tvb_reported_length_remaining(new_tvb, 0),
12061 ENC_NA0x00000000);
12062 }
12063 }
12064
12065 /* The old tvb cannot be used anymore */
12066 ieee80211_tvb_invalid = true1;
12067
12068 pinfo->fragmented = save_fragmented;
12069 }
12070 offset += resp_len;
12071 }
12072
12073 return offset - start;
12074}
12075
12076/* ************************************************************************* */
12077/* Dissect and add fixed mgmt fields to protocol tree */
12078/* ************************************************************************* */
12079
12080static uint64_t last_timestamp;
12081
12082static unsigned
12083add_ff_timestamp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12084{
12085 last_timestamp = tvb_get_letoh64(tvb, offset);
12086 proto_tree_add_item(tree, hf_ieee80211_ff_timestamp, tvb, offset, 8,
12087 ENC_LITTLE_ENDIAN0x80000000);
12088 return 8;
12089}
12090
12091static unsigned
12092add_ff_beacon_interval(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
12093{
12094 proto_tree_add_item(tree, hf_ieee80211_ff_beacon_interval, tvb, offset, 2,
12095 ENC_LITTLE_ENDIAN0x80000000);
12096 col_append_fstr(pinfo->cinfo, COL_INFO, ", BI=%d",
12097 tvb_get_letohs(tvb, offset));
12098 return 2;
12099}
12100
12101static unsigned
12102add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset);
12103
12104static unsigned
12105add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12106{
12107 static int * const ieee80211_cap_info_fields[] = {
12108 &hf_ieee80211_ff_cf_ess,
12109 &hf_ieee80211_ff_cf_ibss,
12110 &hf_ieee80211_ff_cf_reserved1,
12111 &hf_ieee80211_ff_cf_reserved2,
12112 &hf_ieee80211_ff_cf_privacy,
12113 &hf_ieee80211_ff_cf_preamble,
12114 &hf_ieee80211_ff_cf_critical_update_flag,
12115 &hf_ieee80211_ff_cf_nontran_bss_critical_update_flag,
12116 &hf_ieee80211_ff_cf_spec_man,
12117 &hf_ieee80211_ff_cf_qos,
12118 &hf_ieee80211_ff_cf_short_slot_time,
12119 &hf_ieee80211_ff_cf_apsd,
12120 &hf_ieee80211_ff_cf_radio_measurement,
12121 &hf_ieee80211_ff_cf_epd,
12122 &hf_ieee80211_ff_cf_reserved5,
12123 &hf_ieee80211_ff_cf_reserved6,
12124 NULL((void*)0)
12125 };
12126
12127 /* The capability information includes DMG parameters whenever it is transmitted by
12128 a DMG STA/AP (802.11ad-2012, 8.4.1.4) */
12129
12130 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)))
;
12131
12132 if (isDMG) {
12133 proto_item *cap_item;
12134 proto_tree *cap_tree;
12135 cap_item = proto_tree_add_item(tree, hf_ieee80211_ff_capture, tvb, offset, 2,
12136 ENC_LITTLE_ENDIAN0x80000000);
12137 cap_tree = proto_item_add_subtree(cap_item, ett_cap_tree);
12138 add_ff_dmg_params(cap_tree, tvb, pinfo, offset);
12139 } else {
12140 /*
12141 * We can only interpret the ESS and IBSS fields to be an AP if the
12142 * frame is a BEACON or PROBE_RESPONSE
12143 */
12144 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)))
12145 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
12146 FRAME_TYPE_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
;
12147 if (((tvb_get_letohs(tvb, offset) & 0x0003) == 0x1 &&
12148 (l_frame_type == MGT_BEACON0x08 || l_frame_type == MGT_PROBE_RESP0x05)) ||
12149 l_frame_type == MGT_ASSOC_RESP0x01 || l_frame_type == MGT_REASSOC_RESP0x03) {
12150 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_AP_KEY, GINT_TO_POINTER(true)((gpointer) (glong) (1)));
12151 }
12152
12153 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
12154 hf_ieee80211_ff_capture,
12155 ett_cap_tree, ieee80211_cap_info_fields,
12156 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12157 }
12158 return 2;
12159}
12160
12161static unsigned
12162add_ff_auth_alg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12163{
12164 proto_tree_add_item(tree, hf_ieee80211_ff_auth_alg, tvb, offset, 2,
12165 ENC_LITTLE_ENDIAN0x80000000);
12166 return 2;
12167}
12168
12169static unsigned
12170add_ff_auth_trans_seq(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12171{
12172 proto_tree_add_item(tree, hf_ieee80211_ff_auth_seq, tvb, offset, 2,
12173 ENC_LITTLE_ENDIAN0x80000000);
12174 return 2;
12175}
12176
12177static unsigned
12178add_ff_current_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12179{
12180 proto_tree_add_item(tree, hf_ieee80211_ff_current_ap, tvb, offset, 6,
12181 ENC_NA0x00000000);
12182 return 6;
12183}
12184
12185static unsigned
12186add_ff_listen_ival(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12187{
12188 proto_tree_add_item(tree, hf_ieee80211_ff_listen_ival, tvb, offset, 2,
12189 ENC_LITTLE_ENDIAN0x80000000);
12190 return 2;
12191}
12192
12193static unsigned
12194add_ff_reason_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12195{
12196 proto_tree_add_item(tree, hf_ieee80211_ff_reason, tvb, offset, 2,
12197 ENC_LITTLE_ENDIAN0x80000000);
12198 return 2;
12199}
12200
12201static unsigned
12202add_ff_assoc_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12203{
12204 proto_tree_add_item(tree, hf_ieee80211_ff_assoc_id, tvb, offset, 2,
12205 ENC_LITTLE_ENDIAN0x80000000);
12206 return 2;
12207}
12208
12209static unsigned
12210add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12211{
12212 proto_tree_add_item(tree, hf_ieee80211_ff_status_code, tvb, offset, 2,
12213 ENC_LITTLE_ENDIAN0x80000000);
12214 return 2;
12215}
12216
12217static unsigned
12218add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12219{
12220 proto_tree_add_item(tree, hf_ieee80211_ff_category_code, tvb, offset, 1,
12221 ENC_LITTLE_ENDIAN0x80000000);
12222 return 1;
12223}
12224
12225static unsigned
12226add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12227{
12228 proto_tree_add_item(tree, hf_ieee80211_ff_action_code, tvb, offset, 1,
12229 ENC_LITTLE_ENDIAN0x80000000);
12230 return 1;
12231}
12232
12233static unsigned
12234add_ff_trigger(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12235{
12236 uint8_t trigger = tvb_get_uint8(tvb, offset);
12237 col_append_fstr(pinfo->cinfo, COL_INFO, ", Trigger=%d (%s)", trigger,
12238 val_to_str_const(trigger, ftm_trigger_vals, "Unknown"));
12239 proto_tree_add_item(tree, hf_ieee80211_ff_trigger, tvb, offset, 1,
12240 ENC_LITTLE_ENDIAN0x80000000);
12241 return 1;
12242}
12243
12244static unsigned
12245add_ff_ftm_tod(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12246{
12247 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_tod, tvb, offset, 6,
12248 ENC_LITTLE_ENDIAN0x80000000);
12249 return 6;
12250}
12251
12252static unsigned
12253add_ff_ftm_toa(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12254{
12255 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_toa, tvb, offset, 6,
12256 ENC_LITTLE_ENDIAN0x80000000);
12257 return 6;
12258}
12259
12260static unsigned
12261add_ff_ftm_tod_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12262{
12263 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_tod_err, tvb, offset, 2,
12264 ENC_LITTLE_ENDIAN0x80000000);
12265 return 2;
12266}
12267
12268static unsigned
12269add_ff_ftm_toa_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12270{
12271 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_toa_err, tvb, offset, 2,
12272 ENC_LITTLE_ENDIAN0x80000000);
12273 return 2;
12274}
12275
12276static unsigned
12277add_ff_ftm_tod_err1(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12278{
12279 static int * const fields[] = {
12280 &hf_ieee80211_ff_ftm_max_tod_error_exponent,
12281 &hf_ieee80211_ff_ftm_tod_err_reserved,
12282 &hf_ieee80211_ff_ftm_tod_not_continuous,
12283 NULL((void*)0)
12284 };
12285
12286 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ftm_tod_err1,
12287 ett_ff_ftm_tod_err1, fields,
12288 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12289 return 1;
12290}
12291
12292static unsigned
12293add_ff_ftm_toa_err1(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12294{
12295 static int * const fields[] = {
12296 &hf_ieee80211_ff_ftm_max_toa_error_exponent,
12297 &hf_ieee80211_ff_ftm_toa_err_reserved,
12298 &hf_ieee80211_ff_ftm_invalid_measurement,
12299 &hf_ieee80211_ff_ftm_toa_type,
12300 NULL((void*)0)
12301 };
12302
12303 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ftm_toa_err1,
12304 ett_ff_ftm_toa_err1, fields,
12305 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12306 return 1;
12307}
12308
12309static unsigned
12310add_ff_ftm_cfo_parameter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12311{
12312 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_cfo, tvb, offset, 2,
12313 ENC_LITTLE_ENDIAN0x80000000);
12314 return 2;
12315}
12316
12317static unsigned
12318add_ff_ftm_r2i_ndp_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12319{
12320 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_r2i_ndp_tx_power, tvb, offset, 1,
12321 ENC_LITTLE_ENDIAN0x80000000);
12322 return 1;
12323}
12324
12325static unsigned
12326add_ff_ftm_i2r_ndp_target_rssi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12327{
12328 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_i2r_ndp_target_rssi, tvb, offset, 1,
12329 ENC_LITTLE_ENDIAN0x80000000);
12330 return 1;
12331}
12332
12333static int
12334dissect_ftm_params(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
12335{
12336 int offset = 0;
12337 int len = 0;
12338 proto_tree *ftm_param_tree = tree;
12339 static int * const ieee80211_ftm_params_fields1[] = {
12340 &hf_ieee80211_ff_ftm_param_status_indication,
12341 &hf_ieee80211_ff_ftm_param_value,
12342 &hf_ieee80211_ff_ftm_param_reserved1,
12343 &hf_ieee80211_ff_ftm_param_burst_exponent,
12344 &hf_ieee80211_ff_ftm_param_burst_duration,
12345 NULL((void*)0)};
12346
12347 static int * const ieee80211_ftm_params_fields2[] = {
12348 &hf_ieee80211_ff_ftm_param_min_delta_ftm,
12349 &hf_ieee80211_ff_ftm_param_partial_tsf_timer,
12350 &hf_ieee80211_ff_ftm_param_partial_tsf_no_pref,
12351 &hf_ieee80211_ff_ftm_param_asap_capable,
12352 &hf_ieee80211_ff_ftm_param_asap,
12353 &hf_ieee80211_ff_ftm_param_ftm_per_burst,
12354 NULL((void*)0)};
12355
12356 static int * const ieee80211_ftm_params_fields3[] = {
12357 &hf_ieee80211_ff_ftm_param_reserved2,
12358 &hf_ieee80211_ff_ftm_param_format_and_bw,
12359 &hf_ieee80211_ff_ftm_param_burst_period,
12360 NULL((void*)0)};
12361
12362 len = tvb_captured_length(tvb);
12363 if (len != 9)
12364 return 0;
12365
12366 proto_tree_add_bitmask_with_flags(ftm_param_tree, tvb, offset, hf_ieee80211_ff_ftm_param_delim1,
12367 ett_ff_ftm_param_delim1, ieee80211_ftm_params_fields1,
12368 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12369 offset += 2;
12370 proto_tree_add_bitmask_with_flags(ftm_param_tree, tvb, offset, hf_ieee80211_ff_ftm_param_delim2,
12371 ett_ff_ftm_param_delim2, ieee80211_ftm_params_fields2,
12372 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12373 offset += 4;
12374 proto_tree_add_bitmask_with_flags(ftm_param_tree, tvb, offset, hf_ieee80211_ff_ftm_param_delim3,
12375 ett_ff_ftm_param_delim3, ieee80211_ftm_params_fields3,
12376 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12377 offset += 3;
12378
12379 return offset;
12380}
12381
12382static unsigned
12383add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12384{
12385 uint8_t value = tvb_get_uint8(tvb, offset);
12386 col_append_fstr(pinfo->cinfo, COL_INFO, ", Dialog Token=%d", value);
12387 proto_tree_add_item(tree, hf_ieee80211_ff_dialog_token, tvb, offset, 1,
12388 ENC_LITTLE_ENDIAN0x80000000);
12389 return 1;
12390}
12391
12392static unsigned
12393add_ff_followup_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12394{
12395 proto_tree_add_item(tree, hf_ieee80211_ff_followup_dialog_token, tvb, offset, 1,
12396 ENC_LITTLE_ENDIAN0x80000000);
12397 return 1;
12398}
12399
12400static unsigned
12401add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12402{
12403 proto_tree_add_item(tree, hf_ieee80211_ff_wme_action_code, tvb, offset, 1,
12404 ENC_LITTLE_ENDIAN0x80000000);
12405 return 1;
12406}
12407
12408static unsigned
12409add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12410{
12411 proto_tree_add_item(tree, hf_ieee80211_ff_wme_status_code, tvb, offset, 1,
12412 ENC_LITTLE_ENDIAN0x80000000);
12413 return 1;
12414}
12415
12416static unsigned
12417add_ff_qos_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12418{
12419 proto_tree_add_item(tree, hf_ieee80211_ff_qos_action_code, tvb, offset, 1,
12420 ENC_LITTLE_ENDIAN0x80000000);
12421 return 1;
12422}
12423
12424static unsigned
12425add_ff_block_ack_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12426{
12427 proto_tree_add_item(tree, hf_ieee80211_ff_ba_action, tvb, offset, 1,
12428 ENC_LITTLE_ENDIAN0x80000000);
12429 return 1;
12430}
12431
12432static unsigned
12433add_ff_block_ack_param(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12434{
12435 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_params,
12436 ett_ff_ba_param_tree,
12437 ieee80211_ff_block_ack_params_fields,
12438 ENC_LITTLE_ENDIAN0x80000000);
12439 return 2;
12440}
12441
12442static unsigned
12443add_ff_block_ack_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12444{
12445 proto_tree_add_item(tree, hf_ieee80211_ff_block_ack_timeout, tvb, offset, 2,
12446 ENC_LITTLE_ENDIAN0x80000000);
12447 return 2;
12448}
12449
12450static unsigned
12451add_ff_block_ack_ssc(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12452{
12453 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_ssc,
12454 ett_ff_ba_ssc_tree, ieee80211_ff_block_ack_ssc_fields,
12455 ENC_LITTLE_ENDIAN0x80000000);
12456 return 2;
12457}
12458
12459static unsigned
12460add_ff_qos_ts_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12461{
12462 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_tsinfo,
12463 ett_tsinfo_tree, ieee80211_tsinfo_fields,
12464 ENC_LITTLE_ENDIAN0x80000000);
12465 return 3;
12466}
12467
12468static unsigned
12469add_ff_mesh_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12470{
12471 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_action, tvb, offset, 1,
12472 ENC_LITTLE_ENDIAN0x80000000);
12473 return 1;
12474}
12475
12476static unsigned
12477add_ff_multihop_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12478{
12479 proto_tree_add_item(tree, hf_ieee80211_ff_multihop_action, tvb, offset, 1,
12480 ENC_LITTLE_ENDIAN0x80000000);
12481 return 1;
12482}
12483
12484static unsigned
12485add_ff_mesh_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12486{
12487 int start = offset;
12488 uint8_t flags;
12489
12490 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_flags, tvb, offset, 1,
12491 ENC_LITTLE_ENDIAN0x80000000);
12492 flags = tvb_get_uint8(tvb, offset);
12493 offset += 1;
12494 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_ttl, tvb, offset, 1,
12495 ENC_LITTLE_ENDIAN0x80000000);
12496 offset += 1;
12497 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_sequence, tvb, offset, 4,
12498 ENC_LITTLE_ENDIAN0x80000000);
12499 offset += 4;
12500
12501 switch (flags & 0x03) {
12502 case 1:
12503 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr4, tvb, offset, 6,
12504 ENC_NA0x00000000);
12505 offset += 6;
12506 break;
12507 case 2:
12508 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr5, tvb, offset, 6,
12509 ENC_NA0x00000000);
12510 offset += 6;
12511 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr6, tvb, offset, 6,
12512 ENC_NA0x00000000);
12513 offset += 6;
12514 break;
12515 case 3:
12516 proto_item_append_text(tree, " Unknown Address Extension Mode");
12517 break;
12518 default:
12519 /* no default action */
12520 break;
12521 }
12522
12523 return offset - start;
12524}
12525
12526static unsigned
12527add_ff_selfprot_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12528{
12529 proto_tree_add_item(tree, hf_ieee80211_ff_selfprot_action, tvb, offset, 1,
12530 ENC_LITTLE_ENDIAN0x80000000);
12531 return 1;
12532}
12533
12534static unsigned
12535add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12536{
12537 proto_tree_add_item(tree, hf_ieee80211_ff_dls_action_code, tvb, offset, 1,
12538 ENC_LITTLE_ENDIAN0x80000000);
12539 return 1;
12540}
12541
12542static unsigned
12543add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12544{
12545 proto_tree_add_item(tree, hf_ieee80211_ff_dst_mac_addr, tvb, offset, 6,
12546 ENC_NA0x00000000);
12547 return 6;
12548}
12549
12550static unsigned
12551add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12552{
12553 proto_tree_add_item(tree, hf_ieee80211_ff_src_mac_addr, tvb, offset, 6,
12554 ENC_NA0x00000000);
12555 return 6;
12556}
12557
12558static unsigned
12559add_ff_req_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12560{
12561 proto_tree_add_item(tree, hf_ieee80211_ff_req_ap_addr, tvb, offset, 6,
12562 ENC_NA0x00000000);
12563 return 6;
12564}
12565
12566static unsigned
12567add_ff_res_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12568{
12569 proto_tree_add_item(tree, hf_ieee80211_ff_res_ap_addr, tvb, offset, 6,
12570 ENC_NA0x00000000);
12571 return 6;
12572}
12573
12574static unsigned
12575add_ff_check_beacon(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12576{
12577 proto_tree_add_item(tree, hf_ieee80211_ff_check_beacon, tvb, offset, 1,
12578 ENC_NA0x00000000);
12579 return 1;
12580}
12581
12582static unsigned
12583add_ff_tod(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12584{
12585 proto_tree_add_item(tree, hf_ieee80211_ff_tod, tvb, offset, 4,
12586 ENC_LITTLE_ENDIAN0x80000000);
12587 return 4;
12588}
12589
12590static unsigned
12591add_ff_toa(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12592{
12593 proto_tree_add_item(tree, hf_ieee80211_ff_toa, tvb, offset, 4,
12594 ENC_LITTLE_ENDIAN0x80000000);
12595 return 4;
12596}
12597
12598static unsigned
12599add_ff_max_tod_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12600{
12601 proto_tree_add_item(tree, hf_ieee80211_ff_max_tod_err, tvb, offset, 1,
12602 ENC_NA0x00000000);
12603 return 1;
12604}
12605
12606static unsigned
12607add_ff_max_toa_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12608{
12609 proto_tree_add_item(tree, hf_ieee80211_ff_max_toa_err, tvb, offset, 1,
12610 ENC_NA0x00000000);
12611 return 1;
12612}
12613
12614static unsigned
12615add_ff_dls_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12616{
12617 proto_tree_add_item(tree, hf_ieee80211_ff_dls_timeout, tvb, offset, 2,
12618 ENC_LITTLE_ENDIAN0x80000000);
12619 return 2;
12620}
12621
12622static unsigned
12623add_ff_delba_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12624{
12625 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_delba_param,
12626 ett_ff_ba_param_tree, ieee80211_ff_delba_param_fields,
12627 ENC_LITTLE_ENDIAN0x80000000);
12628 return 2;
12629}
12630
12631static unsigned
12632add_ff_max_reg_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12633{
12634 proto_tree_add_item(tree, hf_ieee80211_ff_max_reg_pwr, tvb, offset, 2,
12635 ENC_LITTLE_ENDIAN0x80000000);
12636 return 2;
12637}
12638
12639static unsigned
12640add_ff_measurement_pilot_int(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12641{
12642 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
12643 1, ENC_NA0x00000000);
12644 return 1;
12645}
12646
12647static unsigned
12648add_ff_country_str(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12649{
12650 proto_tree_add_item(tree, hf_ieee80211_ff_country_str, tvb, offset, 2,
12651 ENC_ASCII0x00000000);
12652 offset += 2;
12653
12654 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
12655 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12656 return 3;
12657}
12658
12659static unsigned
12660add_ff_max_tx_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12661{
12662 proto_tree_add_item(tree, hf_ieee80211_ff_max_tx_pwr, tvb, offset, 1,
12663 ENC_LITTLE_ENDIAN0x80000000);
12664 return 1;
12665}
12666
12667static unsigned
12668add_ff_tx_pwr_used(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12669{
12670 proto_tree_add_item(tree, hf_ieee80211_ff_tx_pwr_used, tvb, offset, 1,
12671 ENC_LITTLE_ENDIAN0x80000000);
12672 return 1;
12673}
12674
12675static unsigned
12676add_ff_transceiver_noise_floor(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12677{
12678 proto_tree_add_item(tree, hf_ieee80211_ff_transceiver_noise_floor, tvb,
12679 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12680 return 1;
12681}
12682
12683static unsigned
12684add_ff_channel_width(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12685{
12686 proto_tree_add_item(tree, hf_ieee80211_ff_channel_width, tvb, offset, 1,
12687 ENC_LITTLE_ENDIAN0x80000000);
12688 return 1;
12689}
12690
12691/* QoS Info: 802.11-2012 8.4.1.17 */
12692static unsigned
12693add_ff_qos_info_ap(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12694{
12695 /* From AP so decode as AP: Figure 8-51-QoS Info field when sent by a AP */
12696 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
12697 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
12698 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12699 return 1;
12700}
12701
12702
12703/* QoS Info: 802.11-2012 8.4.1.17 */
12704static unsigned
12705add_ff_qos_info_sta(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12706{
12707 /* To AP so decode as STA: Figure 8-52-QoS Info field when set by a non-AP STA */
12708 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_sta,
12709 ett_ff_qos_info, ieee80211_ff_qos_info_sta_fields,
12710 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12711 return 1;
12712}
12713
12714static unsigned
12715add_ff_sm_pwr_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12716{
12717 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_sm_pwr_save,
12718 ett_ff_sm_pwr_save, ieee80211_ff_sw_pwr_save_fields,
12719 ENC_LITTLE_ENDIAN0x80000000);
12720 return 1;
12721}
12722
12723static unsigned
12724add_ff_pco_phase_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12725{
12726 proto_tree_add_item(tree, hf_ieee80211_ff_pco_phase_cntrl, tvb, offset, 1,
12727 ENC_LITTLE_ENDIAN0x80000000);
12728 return 1;
12729}
12730
12731static unsigned
12732add_ff_psmp_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12733{
12734 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_psmp_param_set,
12735 ett_ff_psmp_param_set,
12736 ieee80211_ff_psmp_param_set_fields,
12737 ENC_LITTLE_ENDIAN0x80000000);
12738 return 2;
12739}
12740
12741static unsigned
12742add_ff_mimo_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12743{
12744 proto_item *mimo_item;
12745 proto_tree *mimo_tree;
12746 static int * const ieee80211_mimo_fields[] = {
12747 &hf_ieee80211_ff_mimo_cntrl_nc_index,
12748 &hf_ieee80211_ff_mimo_cntrl_nr_index,
12749 &hf_ieee80211_ff_mimo_cntrl_channel_width,
12750 &hf_ieee80211_ff_mimo_cntrl_grouping,
12751 &hf_ieee80211_ff_mimo_cntrl_coefficient_size,
12752 &hf_ieee80211_ff_mimo_cntrl_codebook_info,
12753 &hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
12754 &hf_ieee80211_ff_mimo_cntrl_reserved,
12755 NULL((void*)0)
12756 };
12757
12758 mimo_item = proto_tree_add_item(tree, hf_ieee80211_ff_mimo_cntrl, tvb,
12759 offset, 6, ENC_NA0x00000000);
12760 mimo_tree = proto_item_add_subtree(mimo_item, ett_ff_mimo_cntrl);
12761
12762 proto_tree_add_bitmask_list(mimo_tree, tvb, offset, 2, ieee80211_mimo_fields, ENC_LITTLE_ENDIAN0x80000000);
12763 offset += 2;
12764 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
12765 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12766
12767 return 6;
12768}
12769
12770static unsigned
12771add_ff_ant_selection(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12772{
12773 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ant_selection,
12774 ett_ff_ant_sel, ieee80211_ff_ant_selection_fields,
12775 ENC_LITTLE_ENDIAN0x80000000);
12776 return 1;
12777}
12778
12779static unsigned
12780add_ff_extended_channel_switch_announcement(proto_tree *tree, tvbuff_t *tvb,
12781 packet_info *pinfo _U___attribute__((unused)), int offset)
12782{
12783 proto_tree_add_bitmask(tree, tvb, offset,
12784 hf_ieee80211_ff_ext_channel_switch_announcement,
12785 ett_ff_chan_switch_announce,
12786 ieee80211_ff_ext_channel_switch_announcement_fields,
12787 ENC_LITTLE_ENDIAN0x80000000);
12788 return 4;
12789}
12790
12791static unsigned
12792add_ff_ht_information(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12793{
12794 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ht_info,
12795 ett_ff_ht_info, ieee80211_ff_ht_info_fields,
12796 ENC_LITTLE_ENDIAN0x80000000);
12797 return 1;
12798}
12799static unsigned
12800add_ff_lmr_report(proto_tree *tree, tvbuff_t *tvb,
12801 packet_info *pinfo _U___attribute__((unused)), int offset)
12802{
12803 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
12804 offset += add_ff_ftm_tod(tree, tvb, pinfo, offset);
12805 offset += add_ff_ftm_toa(tree, tvb, pinfo, offset);
12806 offset += add_ff_ftm_tod_err1(tree, tvb, pinfo, offset);
12807 offset += add_ff_ftm_toa_err1(tree, tvb, pinfo, offset);
12808 offset += add_ff_ftm_cfo_parameter(tree, tvb, pinfo, offset);
12809 offset += add_ff_ftm_r2i_ndp_tx_power(tree, tvb, pinfo, offset);
12810 offset += add_ff_ftm_i2r_ndp_target_rssi(tree, tvb, pinfo, offset);
12811 /* Secure LTF parameters (optional) */
12812 /* AOA feedback (optional) */
12813 return offset;
12814}
12815
12816static unsigned
12817add_ff_ftm_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12818{
12819 return add_ff_trigger(tree, tvb, pinfo, offset);
12820}
12821
12822static unsigned
12823add_ff_ftm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12824{
12825 unsigned start = offset;
12826 uint8_t dialog_token = tvb_get_uint8(tvb, offset);
12827 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
12828 if (dialog_token == 0) {
12829 col_append_str(pinfo->cinfo, COL_INFO, " (Termination)");
12830 }
12831 offset += add_ff_followup_dialog_token(tree, tvb, pinfo, offset);
12832 offset += add_ff_ftm_tod(tree, tvb, pinfo, offset);
12833 offset += add_ff_ftm_toa(tree, tvb, pinfo, offset);
12834 offset += add_ff_ftm_tod_err(tree, tvb, pinfo, offset);
12835 offset += add_ff_ftm_toa_err(tree, tvb, pinfo, offset);
12836 return offset - start;
12837}
12838
12839static unsigned
12840add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12841{
12842 proto_tree_add_item(tree, hf_ieee80211_ff_ht_action, tvb, offset, 1,
12843 ENC_LITTLE_ENDIAN0x80000000);
12844 return 1;
12845}
12846
12847static unsigned
12848add_ff_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12849{
12850 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_action_code, tvb, offset, 1,
12851 ENC_LITTLE_ENDIAN0x80000000);
12852 return 1;
12853}
12854
12855static unsigned
12856add_ff_dmg_pwr_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12857{
12858 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_pwr_mgmt, tvb, offset, 1,
12859 ENC_LITTLE_ENDIAN0x80000000);
12860 return 1;
12861}
12862
12863static unsigned
12864add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12865{
12866 proto_item *psmp_item;
12867 proto_tree *psmp_tree;
12868
12869 psmp_item = proto_tree_add_item(tree, hf_ieee80211_ff_psmp_sta_info, tvb,
12870 offset, 8, ENC_LITTLE_ENDIAN0x80000000);
12871 psmp_tree = proto_item_add_subtree(psmp_item, ett_ff_psmp_sta_info);
12872
12873 proto_tree_add_item(psmp_item, hf_ieee80211_ff_psmp_sta_info_type, tvb,
12874 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12875
12876 switch (tvb_get_letohl(tvb, offset) & PSMP_STA_INFO_FLAG_TYPE0x00000003) {
12877 case PSMP_STA_INFO_BROADCAST0:
12878 proto_tree_add_item(psmp_tree,
12879 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
12880 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12881 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
12882 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12883 /* Missing 64 bit bitmask... */
12884 proto_tree_add_uint64(psmp_tree,
12885 hf_ieee80211_ff_psmp_sta_info_reserved_large,
12886 tvb, offset, 8,
12887 (tvb_get_letoh64(tvb, offset) &
12888 UINT64_C(0xFFFFFFFFFFE00000)0xFFFFFFFFFFE00000UL) >> 21);
12889 break;
12890 case PSMP_STA_INFO_MULTICAST1:
12891 proto_tree_add_item(psmp_tree,
12892 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
12893 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12894 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
12895 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12896 /* Missing 64 bit bitmask... */
12897 proto_tree_add_uint64(psmp_tree,
12898 hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
12899 tvb, offset, 6,
12900 (tvb_get_letoh64(tvb, offset) &
12901 UINT64_C(0xFFFFFFFFFFE00000)0xFFFFFFFFFFE00000UL) >> 21);
12902 break;
12903 case PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2:
12904 proto_tree_add_item(psmp_tree,
12905 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
12906 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12907 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
12908 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12909 offset += 2;
12910 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_sta_id, tvb,
12911 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12912 offset += 2;
12913
12914 proto_tree_add_item(psmp_tree,
12915 hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
12916 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12917 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_utt_duration,
12918 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12919 proto_tree_add_item(psmp_tree,
12920 hf_ieee80211_ff_psmp_sta_info_reserved_small, tvb,
12921 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12922 break;
12923 }
12924
12925 return 8;
12926}
12927
12928static unsigned
12929add_ff_schedule_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12930{
12931 static int * const ieee80211_schedule_info_fields1[] = {
12932 &hf_ieee80211_sched_info_agg,
12933 NULL((void*)0)
12934 };
12935 static int * const ieee80211_schedule_info_fields2[] = {
12936 &hf_ieee80211_sched_info_agg,
12937 &hf_ieee80211_sched_info_tsid,
12938 &hf_ieee80211_sched_info_dir,
12939 NULL((void*)0)
12940 };
12941
12942 if (tvb_get_letohs(tvb, offset) & 0x0001) {
12943 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_sched_info,
12944 ett_sched_tree, ieee80211_schedule_info_fields2,
12945 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12946 } else {
12947 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_sched_info,
12948 ett_sched_tree, ieee80211_schedule_info_fields1,
12949 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12950 }
12951
12952 return 2;
12953}
12954
12955static unsigned
12956add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12957{
12958 proto_tree_add_item(tree, hf_ieee80211_ff_public_action, tvb, offset, 1,
12959 ENC_LITTLE_ENDIAN0x80000000);
12960 return 1;
12961}
12962
12963static unsigned
12964add_ff_ppa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12965{
12966 proto_tree_add_item(tree, hf_ieee80211_ff_protected_public_action, tvb, offset, 1,
12967 ENC_LITTLE_ENDIAN0x80000000);
12968 return 1;
12969}
12970
12971static unsigned
12972add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12973{
12974 proto_tree_add_item(tree, hf_ieee80211_ff_ft_action_code, tvb, offset, 1,
12975 ENC_LITTLE_ENDIAN0x80000000);
12976 return 1;
12977}
12978
12979static unsigned
12980add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12981{
12982 proto_tree_add_item(tree, hf_ieee80211_ff_sta_address, tvb, offset, 6,
12983 ENC_NA0x00000000);
12984 return 6;
12985}
12986
12987static unsigned
12988add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12989{
12990 proto_tree_add_item(tree, hf_ieee80211_ff_target_ap_address, tvb, offset, 6,
12991 ENC_NA0x00000000);
12992 return 6;
12993}
12994
12995static unsigned
12996add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12997{
12998 proto_tree_add_item(tree, hf_ieee80211_ff_gas_comeback_delay, tvb, offset, 2,
12999 ENC_LITTLE_ENDIAN0x80000000);
13000 return 2;
13001}
13002
13003static unsigned
13004add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13005{
13006 proto_tree_add_item(tree, hf_ieee80211_ff_gas_fragment_id, tvb, offset, 1,
13007 ENC_LITTLE_ENDIAN0x80000000);
13008 proto_tree_add_item(tree, hf_ieee80211_ff_more_gas_fragments, tvb, offset, 1,
13009 ENC_LITTLE_ENDIAN0x80000000);
13010 return 1;
13011}
13012
13013static unsigned
13014add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13015{
13016 proto_tree_add_item(tree, hf_ieee80211_ff_sa_query_action_code, tvb, offset,
13017 1, ENC_LITTLE_ENDIAN0x80000000);
13018 return 1;
13019}
13020
13021static unsigned
13022add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13023{
13024 proto_tree_add_item(tree, hf_ieee80211_ff_transaction_id, tvb, offset, 2,
13025 ENC_LITTLE_ENDIAN0x80000000);
13026 return 2;
13027}
13028
13029static unsigned
13030add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13031{
13032 uint8_t code;
13033 code = tvb_get_uint8(tvb, offset);
13034 col_set_str(pinfo->cinfo, COL_INFO,
13035 val_to_str_ext_const(code, &tdls_action_codes_ext,
13036 "Unknown TDLS Action"));
13037 proto_tree_add_item(tree, hf_ieee80211_ff_tdls_action_code, tvb, offset, 1,
13038 ENC_LITTLE_ENDIAN0x80000000);
13039 return 1;
13040}
13041
13042static unsigned
13043add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13044{
13045 proto_tree_add_item(tree, hf_ieee80211_ff_target_channel, tvb, offset, 1,
13046 ENC_LITTLE_ENDIAN0x80000000);
13047 return 1;
13048}
13049
13050static unsigned
13051add_ff_operating_class(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13052{
13053 proto_tree_add_item(tree, hf_ieee80211_ff_operating_class, tvb, offset, 1,
13054 ENC_LITTLE_ENDIAN0x80000000);
13055 return 1;
13056}
13057
13058static unsigned
13059add_ff_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13060{
13061 proto_tree_add_item(tree, hf_ieee80211_ff_channel, tvb, offset, 1,
13062 ENC_LITTLE_ENDIAN0x80000000);
13063 return 1;
13064}
13065
13066static unsigned
13067add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13068{
13069 uint8_t code;
13070
13071 code = tvb_get_uint8(tvb, offset);
13072 col_set_str(pinfo->cinfo, COL_INFO,
13073 val_to_str_ext_const(code, &wnm_action_codes_ext, "Unknown WNM Action"));
13074 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13075 return 1;
13076}
13077
13078static unsigned
13079add_ff_unprotected_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13080{
13081 uint8_t code;
13082
13083 code = tvb_get_uint8(tvb, offset);
13084 col_set_str(pinfo->cinfo, COL_INFO,
13085 val_to_str_ext_const(code, &unprotected_wnm_action_codes_ext, "Unknown Unprotected WNM Action"));
13086 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13087 return 1;
13088}
13089
13090static unsigned
13091add_ff_unprotected_dmg_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_unprotected_dmg_action_code, tvb, offset, 1, ENC_NA0x00000000);
13094 return 1;
13095}
13096
13097static unsigned
13098add_ff_key_data_length(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13099{
13100 proto_tree_add_item(tree, hf_ieee80211_ff_key_data_length, tvb, offset, 2,
13101 ENC_LITTLE_ENDIAN0x80000000);
13102 return 2;
13103}
13104
13105static unsigned
13106add_ff_wnm_notification_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13107{
13108 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_type,
13109 tvb, offset, 1, ENC_NA0x00000000);
13110 return 1;
13111}
13112
13113/* Action frame: Radio Measurement actions */
13114static unsigned
13115add_ff_rm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13116{
13117 proto_tree_add_item(tree, hf_ieee80211_ff_rm_action_code, tvb, offset, 1, ENC_NA0x00000000);
13118 return 1;
13119}
13120
13121static unsigned
13122add_ff_rm_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13123{
13124 proto_tree_add_item(tree, hf_ieee80211_ff_rm_dialog_token, tvb, offset, 1, ENC_NA0x00000000);
13125 return 1;
13126}
13127
13128/* Radio Measurement Request frame, Action fields */
13129static unsigned
13130add_ff_rm_repetitions(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13131{
13132 /* Note: 65535 means repeated until cancelled or superseded */
13133 proto_tree_add_item(tree, hf_ieee80211_ff_rm_repetitions, tvb, offset, 2,
13134 ENC_BIG_ENDIAN0x00000000);
13135 return 2;
13136}
13137
13138/* Link Measurement Request frame, Action fields*/
13139static unsigned
13140add_ff_rm_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13141{
13142 /* In dBm, see 8.4.1.20 */
13143 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_power, tvb, offset, 1, ENC_NA0x00000000);
13144 return 1;
13145}
13146
13147static unsigned
13148add_ff_rm_max_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13149{
13150 /* In dBm, see 8.4.1.19 */
13151 proto_tree_add_item(tree, hf_ieee80211_ff_rm_max_tx_power, tvb, offset, 1, ENC_NA0x00000000);
13152 return 1;
13153}
13154
13155/* Link Measurement Report frame, Action fields */
13156static unsigned
13157add_ff_rm_tpc_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13158{
13159 proto_tree *tpc_tree;
13160 proto_item *tpc_item;
13161
13162 /* 8.4.2.19 TPC Report element */
13163 /* XXX - The TPC Report element is exactly the same as that dissected
13164 * by ieee80211_tag_tpc_report(), so some of these fixed fields duplicate
13165 * tagged fields.
13166 */
13167 tpc_item = proto_tree_add_item(tree, hf_ieee80211_ff_tpc, tvb, offset, 4, ENC_NA0x00000000);
13168 tpc_tree = proto_item_add_subtree(tpc_item, ett_tpc);
13169 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_element_id, tvb, offset, 1, ENC_NA0x00000000);
13170 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_length, tvb, offset + 1, 1, ENC_NA0x00000000);
13171 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_tx_power, tvb, offset + 2, 1, ENC_NA0x00000000);
13172 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_link_margin, tvb, offset + 3, 1, ENC_NA0x00000000);
13173 return 4;
13174}
13175
13176static unsigned
13177add_ff_rm_rx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13178{
13179 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
13180 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rx_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
13181 return 1;
13182}
13183
13184static unsigned
13185add_ff_rm_tx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13186{
13187 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
13188 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
13189 return 1;
13190}
13191
13192static unsigned
13193add_ff_rm_rcpi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13194{
13195 /* 8.4.2.40: RCPI as specified for certain PHYs */
13196 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rcpi, tvb, offset, 1, ENC_NA0x00000000);
13197 return 1;
13198}
13199
13200static unsigned
13201add_ff_rm_rsni(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13202{
13203 /* 8.4.2.43: RSNI in steps of 0.5 dB, calculated as:
13204 * RSNI = (10 * log10((RCPI_{power} - ANPI_{power}) / ANPI_{power}) + 20)*2 */
13205 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rsni, tvb, offset, 1, ENC_NA0x00000000);
13206 return 1;
13207}
13208
13209static unsigned
13210add_ff_bss_transition_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13211{
13212 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_status_code, tvb, offset, 1,
13213 ENC_LITTLE_ENDIAN0x80000000);
13214 return 1;
13215}
13216
13217static unsigned
13218add_ff_bss_termination_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13219{
13220 proto_tree_add_item(tree, hf_ieee80211_ff_bss_termination_delay, tvb, offset, 1,
13221 ENC_LITTLE_ENDIAN0x80000000);
13222 return 1;
13223}
13224
13225static unsigned
13226add_ff_fils_discovery(proto_tree *tree, tvbuff_t *tvb,
13227 packet_info *pinfo _U___attribute__((unused)), int offset)
13228{
13229
13230 uint16_t fc, ssid_length;
13231 static int * const ieee80211_ff_fils_discovery_frame_control[] = {
13232 &hf_ieee80211_ff_fils_discovery_frame_control_ssid_length,
13233 &hf_ieee80211_ff_fils_discovery_frame_control_capability,
13234 &hf_ieee80211_ff_fils_discovery_frame_control_short_ssid,
13235 &hf_ieee80211_ff_fils_discovery_frame_control_ap_csn,
13236 &hf_ieee80211_ff_fils_discovery_frame_control_ano,
13237 &hf_ieee80211_ff_fils_discovery_frame_control_channel_center_frequency,
13238 &hf_ieee80211_ff_fils_discovery_frame_control_primary_channel,
13239 &hf_ieee80211_ff_fils_discovery_frame_control_rsn_info,
13240 &hf_ieee80211_ff_fils_discovery_frame_control_length,
13241 &hf_ieee80211_ff_fils_discovery_frame_control_md,
13242 &hf_ieee80211_ff_fils_discovery_frame_control_reserved,
13243 NULL((void*)0)
13244 };
13245
13246 proto_tree_add_bitmask(tree, tvb, offset,
13247 hf_ieee80211_ff_fils_discovery_frame_control,
13248 ett_ff_fils_discovery_frame_control,
13249 ieee80211_ff_fils_discovery_frame_control,
13250 ENC_LITTLE_ENDIAN0x80000000);
13251 fc = tvb_get_letohs(tvb, offset);
13252 offset += 2;
13253
13254 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
13255
13256 offset += add_ff_beacon_interval(tree, tvb, pinfo, offset);
13257
13258 if(fc & PA_FILS_FC_SHORT_SSID0x0040) {
13259 /* Always 4 bytes for Short SSID */
13260 /* TODO add check of SSID Length */
13261 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_short_ssid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13262 offset += 4;
13263 } else {
13264 ssid_length = (fc & PA_FILS_FC_SSID_LENGTH0x001F) + 1;
13265 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ssid, tvb, offset, ssid_length, ENC_ASCII0x00000000);
13266 offset += ssid_length;
13267 }
13268
13269 if(fc & PA_FILS_FC_LENGTH0x1000){
13270 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_length, tvb, offset, 1, ENC_NA0x00000000);
13271 offset += 1;
13272 }
13273
13274 if(fc & PA_FILS_FC_CAPABILITY0x0020) {
13275 proto_tree *fdc_tree;
13276 proto_item *fdc_item;
13277 uint32_t fdc;
13278 fdc_item = proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_fils_discovery_capability, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &fdc);
13279 fdc_tree = proto_item_add_subtree(fdc_item, ett_ff_fils_discovery_capability);
13280 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_ess, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13281 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_privacy, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13282 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_bss_operating_channel_width, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13283 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_max_number_of_spatial_streams, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13284 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13285 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_multiple_bssid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13286 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_phy_index, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13287 switch((fdc & 0x1C00) >> 10){
13288 case 0:
13289 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_dsss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13290 break;
13291 case 1:
13292 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ofdm, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13293 break;
13294 case 2:
13295 case 3:
13296 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ht_vht_tvht, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13297 break;
13298 case 4:
13299 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_he, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13300 break;
13301 default:
13302 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13303 break;
13304 }
13305 offset += 2;
13306 }
13307
13308 if(fc & PA_FILS_FC_PC0x0400) {
13309 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_operating_class, tvb, offset, 1, ENC_NA0x00000000);
13310 offset += 1;
13311 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_primary_channel, tvb, offset, 1, ENC_NA0x00000000);
13312 offset += 1;
13313 }
13314
13315 if(fc & PA_FILS_FC_AP_CSN0x0080) {
13316 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ap_csn, tvb, offset, 1, ENC_NA0x00000000);
13317 offset += 1;
13318 }
13319
13320 if(fc & PA_FILS_FC_ANO0x0100) {
13321 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ano, tvb, offset, 1, ENC_NA0x00000000);
13322 offset += 1;
13323 }
13324
13325 if(fc & PA_FILS_FC_RSN_INFO0x0800) {
13326 /*TODO Dissect RSN info */
13327 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_rsn_info, tvb, offset, 5, ENC_NA0x00000000);
13328 offset += 5;
13329 }
13330
13331 if(fc & PA_FILS_FC_CCFS10x0200){
13332 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ccfs1, tvb, offset, 1, ENC_NA0x00000000);
13333 offset += 1;
13334 }
13335
13336 if(fc & PA_FILS_FC_MD0x2000) {
13337 /*TODO Dissect Mobility Domain */
13338 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_md, tvb, offset, 3, ENC_NA0x00000000);
13339 offset += 3;
13340 }
13341
13342 return offset;
13343}
13344
13345
13346static unsigned
13347add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13348{
13349 switch (tvb_get_uint8(tvb, offset + 1)) {
13350 case SM_ACTION_MEASUREMENT_REQUEST0:
13351 case SM_ACTION_MEASUREMENT_REPORT1:
13352 case SM_ACTION_TPC_REQUEST2:
13353 case SM_ACTION_TPC_REPORT3:
13354 add_ff_category_code(tree, tvb, pinfo, offset);
13355 add_ff_action_code(tree, tvb, pinfo, offset + 1);
13356 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
13357 return 3;
13358 case SM_ACTION_CHAN_SWITCH_ANNC4:
13359 case SM_ACTION_EXT_CHAN_SWITCH_ANNC5:
13360 add_ff_category_code(tree, tvb, pinfo, offset);
13361 add_ff_action_code(tree, tvb, pinfo, offset + 1);
13362 return 2;
13363 default:
13364 add_ff_category_code(tree, tvb, pinfo, offset);
13365 add_ff_action_code(tree, tvb, pinfo, offset + 1);
13366 return 2;
13367 }
13368}
13369
13370static unsigned
13371add_ff_action_qos(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13372{
13373 switch (tvb_get_uint8(tvb, offset + 1)) {
13374 case QOS_ACTION_ADDTS_REQUEST0:
13375 add_ff_category_code(tree, tvb, pinfo, offset);
13376 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13377 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
13378 return 3;
13379 case QOS_ACTION_ADDTS_RESPONSE1:
13380 add_ff_category_code(tree, tvb, pinfo, offset);
13381 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13382 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
13383 add_ff_status_code(tree, tvb, pinfo, offset + 3);
13384 return 5;
13385 case QOS_ACTION_DELTS2:
13386 add_ff_category_code(tree, tvb, pinfo, offset);
13387 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13388 add_ff_qos_ts_info(tree, tvb, pinfo, offset + 2);
13389 add_ff_reason_code(tree, tvb, pinfo, offset + 5);
13390 return 7;
13391 case QOS_ACTION_SCHEDULE3:
13392 add_ff_category_code(tree, tvb, pinfo, offset);
13393 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13394 return 2;
13395 case QOS_ACTION_MAP_CONFIGURE4:
13396 add_ff_category_code(tree, tvb, pinfo, offset);
13397 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13398 return 2;
13399 default:
13400 add_ff_category_code(tree, tvb, pinfo, offset);
13401 return 2;
13402 }
13403}
13404
13405static unsigned
13406add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13407{
13408 switch (tvb_get_uint8(tvb, offset + 1)) {
13409 case DLS_ACTION_REQUEST0:
13410 add_ff_category_code(tree, tvb, pinfo, offset);
13411 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
13412 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
13413 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
13414 add_ff_cap_info(tree, tvb, pinfo, offset + 14);
13415 add_ff_dls_timeout(tree, tvb, pinfo, offset + 16);
13416 return 18;
13417 case DLS_ACTION_RESPONSE1:
13418 add_ff_category_code(tree, tvb, pinfo, offset);
13419 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
13420 add_ff_status_code(tree, tvb, pinfo, offset + 2);
13421 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 4);
13422 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 10);
13423 if (!hf_ieee80211_ff_status_code) {
13424 add_ff_cap_info(tree, tvb, pinfo, offset + 16);
13425 }
13426 return 16;
13427 case DLS_ACTION_TEARDOWN2:
13428 add_ff_category_code(tree, tvb, pinfo, offset);
13429 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
13430 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
13431 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
13432 add_ff_reason_code(tree, tvb, pinfo, offset + 14);
13433 return 16;
13434 default:
13435 add_ff_category_code(tree, tvb, pinfo, offset);
13436 return 2;
13437 }
13438}
13439
13440static unsigned
13441add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13442{
13443 unsigned start = offset;
13444
13445 switch (tvb_get_uint8(tvb, offset + 1)) {
13446 case BA_ADD_BLOCK_ACK_REQUEST0:
13447 case BA_NDP_ADD_BLOCK_ACK_REQUEST128:
13448 case BA_BAT_ADD_BLOCK_ACK_REQUEST132:
13449 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13450 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
13451 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13452 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
13453 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
13454 offset += add_ff_block_ack_ssc(tree, tvb, pinfo, offset);
13455 break;
13456 case BA_ADD_BLOCK_ACK_RESPONSE1:
13457 case BA_NDP_ADD_BLOCK_ACK_RESPONSE129:
13458 case BA_BAT_ADD_BLOCK_ACK_RESPONSE133:
13459 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13460 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
13461 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13462 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13463 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
13464 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
13465 break;
13466 case BA_DELETE_BLOCK_ACK2:
13467 case BA_NDP_DELETE_BLOCK_ACK130:
13468 case BA_BAT_DELETE_BLOCK_ACK134:
13469 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13470 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
13471 offset += add_ff_delba_param_set(tree, tvb, pinfo, offset);
13472 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
13473 break;
13474 }
13475
13476 return offset - start; /* Size of fixed fields */
13477}
13478
13479unsigned
13480add_ff_action_public_fields(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, uint8_t code)
13481{
13482 uint32_t oui;
13483 unsigned type;
13484 unsigned subtype;
13485 uint8_t dialog_token;
13486 uint8_t frag;
13487 bool_Bool more;
13488 tvbuff_t *vendor_tvb;
13489 int dissected;
13490
13491 unsigned start = offset;
13492
13493 switch (code) {
13494 case PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4:
13495 offset += add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
13496 break;
13497 case PA_VENDOR_SPECIFIC9:
13498 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
13499 offset += 3;
13500 switch (oui) {
13501 case OUI_WFA0x506F9A:
13502 subtype = tvb_get_uint8(tvb, offset);
13503 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_subtype, tvb, offset, 1, ENC_NA0x00000000);
13504 offset += 1;
13505 vendor_tvb = tvb_new_subset_remaining(tvb, offset);
13506 dissected = dissector_try_uint_with_data(wifi_alliance_public_action_table, subtype, vendor_tvb, pinfo, tree, false0, NULL((void*)0));
13507 offset += dissected;
13508 break;
13509 default:
13510 /* Don't know how to handle this vendor */
13511 break;
13512 }
13513 break;
13514 case PA_GAS_INITIAL_REQUEST10:
13515 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13516 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
13517 &type, &subtype);
13518 offset += dissect_gas_initial_request(tree, tvb, pinfo, offset, type,
13519 subtype);
13520 break;
13521 case PA_GAS_INITIAL_RESPONSE11:
13522 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13523 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13524 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
13525 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
13526 &type, &subtype);
13527 offset += dissect_gas_initial_response(tree, tvb, pinfo, offset, type,
13528 subtype);
13529 break;
13530 case PA_GAS_COMEBACK_REQUEST12:
13531 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13532 break;
13533 case PA_GAS_COMEBACK_RESPONSE13:
13534 dialog_token = tvb_get_uint8(tvb, offset);
13535 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13536 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13537 frag = tvb_get_uint8(tvb, offset) & 0x7f;
13538 more = (tvb_get_uint8(tvb, offset) & 0x80) != 0;
13539 offset += add_ff_gas_fragment_id(tree, tvb, pinfo, offset);
13540 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
13541 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
13542 &type, &subtype);
13543 offset += dissect_gas_comeback_response(tree, tvb, pinfo, offset, type,
13544 subtype, frag, more, dialog_token);
13545 break;
13546 case PA_TDLS_DISCOVERY_RESPONSE14:
13547 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
13548 col_set_str(pinfo->cinfo, COL_INFO, "TDLS Discovery Response");
13549 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13550 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
13551 break;
13552 case PA_QAB_REQUEST16:
13553 case PA_QAB_RESPONSE17:
13554 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13555 offset += add_ff_req_ap_addr(tree, tvb, pinfo, offset);
13556 offset += add_ff_res_ap_addr(tree, tvb, pinfo, offset);
13557 break;
13558 case PA_FTM_REQUEST32:
13559 col_set_str(pinfo->cinfo, COL_INFO, "FTM Request");
13560 offset += add_ff_ftm_request(tree, tvb, pinfo, offset);
13561 break;
13562 case PA_FTM33:
13563 col_set_str(pinfo->cinfo, COL_INFO, "FTM");
13564 offset += add_ff_ftm(tree, tvb, pinfo, offset);
13565 break;
13566 case PA_FILS_DISCOVERY34:
13567 col_set_str(pinfo->cinfo, COL_INFO, "FILS Discovery");
13568 offset = add_ff_fils_discovery(tree, tvb, pinfo, offset);
13569 break;
13570 case PA_LOCATION_MEASUREMENT_REPORT47:
13571 col_set_str(pinfo->cinfo, COL_INFO, "Location Measurement Report");
13572 offset = add_ff_lmr_report(tree, tvb, pinfo, offset);
13573 break;
13574 }
13575
13576 return offset - start; /* Size of fixed fields */
13577}
13578
13579static unsigned
13580add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13581{
13582 uint8_t code;
13583 unsigned start = offset;
13584 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13585 code = tvb_get_uint8(tvb, offset);
13586 offset += add_ff_pa_action_code(tree, tvb, pinfo, offset);
13587 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
13588 return offset - start;
13589}
13590
13591static unsigned
13592add_ff_action_protected_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13593{
13594 uint8_t code;
13595 unsigned start = offset;
13596 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13597 code = tvb_get_uint8(tvb, offset);
13598 offset += add_ff_ppa_action_code(tree, tvb, pinfo, offset);
13599 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
13600 return offset - start;
13601}
13602
13603static unsigned
13604add_ff_action_radio_measurement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13605{
13606 unsigned start = offset;
13607 uint8_t code;
13608
13609 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13610 code = tvb_get_uint8(tvb, offset);
13611 offset += add_ff_rm_action_code(tree, tvb, pinfo, offset);
13612
13613 switch (code) {
13614 case RM_ACTION_RADIO_MEASUREMENT_REQUEST0:
13615 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13616 offset += add_ff_rm_repetitions(tree, tvb, pinfo, offset);
13617 /* Followed by Measurement Request Elements */
13618 break;
13619 case RM_ACTION_RADIO_MEASUREMENT_REPORT1:
13620 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13621 /* Followed by Measurement Report Elements */
13622 break;
13623 case RM_ACTION_LINK_MEASUREMENT_REQUEST2:
13624 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13625 offset += add_ff_rm_tx_power(tree, tvb, pinfo, offset);
13626 offset += add_ff_rm_max_tx_power(tree, tvb, pinfo, offset);
13627 /* Followed by Optional Subelements */
13628 break;
13629 case RM_ACTION_LINK_MEASUREMENT_REPORT3:
13630 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13631 offset += add_ff_rm_tpc_report(tree, tvb, pinfo, offset);
13632 offset += add_ff_rm_rx_antenna_id(tree, tvb, pinfo, offset);
13633 offset += add_ff_rm_tx_antenna_id(tree, tvb, pinfo, offset);
13634 offset += add_ff_rm_rcpi(tree, tvb, pinfo, offset);
13635 offset += add_ff_rm_rsni(tree, tvb, pinfo, offset);
13636 /* Followed by Optional Subelements */
13637 break;
13638 case RM_ACTION_NEIGHBOR_REPORT_REQUEST4:
13639 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13640 /* Followed by Optional Subelements */
13641 break;
13642 case RM_ACTION_NEIGHBOR_REPORT_RESPONSE5:
13643 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13644 /* Followed by Neighbor Report Elements */
13645 break;
13646 }
13647
13648 return offset - start; /* Size of fixed fields */
13649}
13650
13651static unsigned
13652add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13653{
13654 unsigned start = offset;
13655 uint8_t code;
13656
13657 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13658 code = tvb_get_uint8(tvb, offset);
13659 offset += add_ff_ft_action_code(tree, tvb, pinfo, offset);
13660
13661 switch (code) {
13662 case FT_ACTION_REQUEST1:
13663 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13664 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13665 /* Followed by FT Request frame body (IEs) */
13666 break;
13667 case FT_ACTION_RESPONSE2:
13668 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13669 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13670 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13671 /* Followed by FT Response frame body (IEs) */
13672 break;
13673 case FT_ACTION_CONFIRM3:
13674 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13675 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13676 /* Followed by FT Confirm frame body (IEs) */
13677 break;
13678 case FT_ACTION_ACK4:
13679 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13680 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13681 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13682 /* Followed by FT Ack frame body (IEs) */
13683 break;
13684 }
13685
13686 return offset - start; /* Size of fixed fields */
13687}
13688
13689static unsigned
13690add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13691{
13692 unsigned start = offset;
13693 uint8_t code;
13694
13695 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13696 code = tvb_get_uint8(tvb, offset);
13697 offset += add_ff_sa_query_action_code(tree, tvb, pinfo, offset);
13698
13699 switch (code) {
13700 case SA_QUERY_REQUEST0:
13701 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
13702 break;
13703 case SA_QUERY_RESPONSE1:
13704 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
13705 break;
13706 }
13707
13708 return offset - start; /* Size of fixed fields */
13709}
13710
13711static unsigned
13712add_ff_action_mesh(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13713{
13714 unsigned length;
13715
13716 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13717 offset += add_ff_mesh_action(tree, tvb, pinfo, offset);
13718 /* The only fixed fields are the category and mesh action. The rest are IEs.
13719 */
13720 length = 2;
13721 if (tvb_get_uint8(tvb, 1) == MESH_ACTION_TBTT_ADJ_RESPONSE10) {
13722 /* ..except for the TBTT Adjustment Response, which has a status code field
13723 */
13724 length += add_ff_status_code(tree, tvb, pinfo, offset);
13725 }
13726 return length;
13727}
13728
13729static unsigned
13730add_ff_action_multihop(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13731{
13732 unsigned start = offset;
13733
13734 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13735 offset += add_ff_multihop_action(tree, tvb, pinfo, offset);
13736 offset += add_ff_mesh_control(tree, tvb, pinfo, offset);
13737 return offset - start;
13738}
13739
13740static unsigned
13741add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
13742 association_sanity_check_t *association_sanity_check)
13743{
13744 unsigned start = offset;
13745 uint8_t self_protected_action = tvb_get_uint8(tvb, start + 1);
13746
13747 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13748 offset += add_ff_selfprot_action(tree, tvb, pinfo, offset);
13749
13750 switch (self_protected_action) {
13751 case SELFPROT_ACTION_MESH_PEERING_OPEN1:
13752 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
13753 if (association_sanity_check)
13754 association_sanity_check->ampe_frame = self_protected_action;
13755 break;
13756 case SELFPROT_ACTION_MESH_PEERING_CONFIRM2:
13757 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
13758 offset += add_ff_assoc_id(tree, tvb, pinfo, offset);
13759 if (association_sanity_check)
13760 association_sanity_check->ampe_frame = self_protected_action;
13761 break;
13762 case SELFPROT_ACTION_MESH_PEERING_CLOSE3:
13763 if (association_sanity_check)
13764 association_sanity_check->ampe_frame = self_protected_action;
13765 break;
13766 }
13767
13768 return offset - start;
13769}
13770
13771static unsigned
13772add_ff_vht_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13773{
13774 proto_tree_add_item(tree, hf_ieee80211_ff_vht_action, tvb, offset, 1,
13775 ENC_LITTLE_ENDIAN0x80000000);
13776 return 1;
13777}
13778
13779static unsigned
13780add_ff_s1g_timestamp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13781{
13782 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_timestamp, tvb, offset,
13783 4, ENC_LITTLE_ENDIAN0x80000000);
13784 return 4;
13785}
13786
13787static unsigned
13788add_ff_change_sequence(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13789{
13790 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_change_sequence, tvb, offset,
13791 1, ENC_NA0x00000000);
13792 return 1;
13793}
13794
13795static unsigned
13796add_ff_next_tbtt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13797{
13798 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_next_tbtt, tvb, offset,
13799 3, ENC_LITTLE_ENDIAN0x80000000);
13800 return 3;
13801}
13802
13803static unsigned
13804add_ff_compressed_ssid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13805{
13806 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_compressed_ssid, tvb, offset,
13807 4, ENC_LITTLE_ENDIAN0x80000000);
13808 return 4;
13809}
13810
13811/* This should not be S1G specific because 802.11-2016 defines it as well. */
13812static unsigned
13813add_ff_access_network_options(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13814{
13815 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_access_network_options, tvb,
13816 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13817 return 1;
13818}
13819
13820static unsigned
13821add_ff_s1g_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13822{
13823 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_action, tvb, offset, 1,
13824 ENC_LITTLE_ENDIAN0x80000000);
13825 return 1;
13826}
13827
13828static unsigned
13829add_ff_prot_s1g_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13830{
13831 proto_tree_add_item(tree, hf_ieee80211_ff_prot_s1g_action, tvb, offset, 1,
13832 ENC_LITTLE_ENDIAN0x80000000);
13833 return 1;
13834}
13835
13836static conversation_t *find_or_create_wlan_conversation(packet_info *pinfo)
13837{
13838 /* HACK to avoid collision with conversation in EAP dissector */
13839 pinfo->srcport = GPOINTER_TO_UINT(((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, ASSOC_COUNTER_KEY)))
13840 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)))
;
13841 pinfo->destport = pinfo->srcport;
13842 return find_or_create_conversation(pinfo);
13843}
13844
13845static ieee80211_conversation_data_t* get_or_create_conversation_data(conversation_t *conversation) {
13846 ieee80211_conversation_data_t *conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
13847 if (!conversation_data) {
13848 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)))
;
13849 conversation_add_proto_data(conversation, proto_wlan, conversation_data);
13850 memset(conversation_data, 0, sizeof(ieee80211_conversation_data_t));
13851 }
13852 return conversation_data;
13853}
13854
13855static unsigned get_group_element_len(unsigned group) {
13856 switch (group) {
13857 /* Diffie-Hellman groups */
13858 case 1:
13859 return 96;
13860 case 2:
13861 case 22:
13862 return 128;
13863 case 5:
13864 return 192;
13865 case 14:
13866 case 23:
13867 case 24:
13868 return 256;
13869 case 15:
13870 return 384;
13871 case 16:
13872 return 512;
13873 case 17:
13874 return 768;
13875 case 18:
13876 return 1024;
13877 /* ECC groups */
13878 case 19:
13879 case 28:
13880 return 64;
13881 case 20:
13882 case 29:
13883 return 96;
13884 case 21:
13885 return 132;
13886 case 25:
13887 return 48;
13888 case 26:
13889 return 56;
13890 case 30:
13891 return 128;
13892 default:
13893 return 0;
13894 }
13895}
13896
13897static unsigned get_scalar_len(unsigned group) {
13898 switch (group) {
13899 /* Diffie-Hellman groups */
13900 case 1:
13901 return 96;
13902 case 2:
13903 return 128;
13904 case 5:
13905 return 192;
13906 case 14:
13907 return 256;
13908 case 15:
13909 return 384;
13910 case 16:
13911 return 512;
13912 case 17:
13913 return 768;
13914 case 18:
13915 return 1024;
13916 case 22:
13917 return 20;
13918 case 23:
13919 return 28;
13920 case 24:
13921 return 32;
13922 /* ECC groups */
13923 case 19:
13924 case 28:
13925 return 32;
13926 case 20:
13927 case 29:
13928 return 48;
13929 case 21:
13930 return 66;
13931 case 25:
13932 return 24;
13933 case 26:
13934 return 28;
13935 case 30:
13936 return 64;
13937 default:
13938 return 0;
13939 }
13940}
13941
13942static unsigned
13943find_fixed_field_len(tvbuff_t *tvb, unsigned offset)
13944{
13945 unsigned start_offset = offset;
13946 unsigned len = tvb_reported_length(tvb);
13947
13948 if (offset >= len) {
13949 return 0;
13950 }
13951
13952 while (offset < len) {
13953 if (tvb_get_uint8(tvb, offset) == 0xFF) {
13954 /*
13955 * Check if we have a len followed by either ETAG_REJECTED_GROUPS
13956 * or ETAG_PASSWORD_IDENTIFIER or ETAG_ANTI_CLOGGING_TOKEN
13957 */
13958 /* The length of SAE Confirm or Scalar Fixed parameter >= 32 */
13959 if ((offset < len - 3) && (offset - start_offset >= 32)) {
13960 uint8_t etag_len = tvb_get_uint8(tvb, offset + 1);
13961 uint8_t check_byte = tvb_get_uint8(tvb, offset + 2);
13962 if (check_byte == ETAG_REJECTED_GROUPS92 ||
13963 check_byte == ETAG_PASSWORD_IDENTIFIER33 ||
13964 check_byte == ETAG_ANTI_CLOGGING_TOKEN93 ||
13965 check_byte == ETAG_MULTI_LINK107 ||
13966 check_byte == ETAG_AKM_SUITE_SELECTOR114) {
13967 /* Add length check to avoid false detection */
13968 if (offset + etag_len + 2 <= len) {
13969 break;
13970 }
13971 }
13972 }
13973 }
13974 offset++;
13975 }
13976
13977 return offset - start_offset;
13978}
13979
13980static const value_string ff_sae_message_type_vals[] = {
13981 {1, "Commit" },
13982 {2, "Confirm" },
13983 {0, NULL((void*)0) }
13984};
13985
13986/*
13987 * We have to deal with the issue that an anti-clogging token may be in this
13988 * thing.
13989 */
13990static unsigned
13991add_ff_auth_sae(proto_tree *tree, tvbuff_t *tvb,
13992 packet_info *pinfo _U___attribute__((unused)), unsigned offset)
13993{
13994 unsigned alg, seq, status_code, len;
13995 alg = tvb_get_letohs(tvb, 0);
13996
13997 if (alg != AUTH_ALG_SAE3)
13998 return offset;
13999
14000 seq = tvb_get_letohs(tvb, 2);
14001 status_code = tvb_get_letohs(tvb, 4);
14002
14003 proto_tree_add_uint(tree, hf_ieee80211_ff_sae_message_type, tvb, 2, 2, seq);
14004
14005 if (seq == 1)
14006 {
14007 uint16_t group;
14008 unsigned sc_len, elt_len;
14009 int is_ap = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool,((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
14010 pinfo, proto_wlan, IS_AP_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
;
14011
14012 /*
14013 * Order is: Status code,
14014 * Finite Cyclic Group,
14015 * Anti-Clogging Token in some cases
14016 * Send-Confirm in some cases
14017 * Scalar in some cases
14018 * FFE in some cases
14019 * Confirm in some cases
14020 * Challenge Text in some cases
14021 * RSNE in some cases.
14022 * MDE in some cases.
14023 * Fast BSS TRansition ... in some cases.
14024 */
14025
14026 /* 76: Authentication is rejected because an Anti-Clogging Token is required (cf ieee80211_status_code) */
14027 /* These are present if status code is 0, 76, 77 or 126 */
14028 if (status_code == 0 || status_code == 76 || status_code == 77 ||
14029 status_code == 126)
14030 {
14031 group = tvb_get_letohs(tvb, offset);
14032 proto_tree_add_item(tree, hf_ieee80211_ff_finite_cyclic_group, tvb,
14033 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14034 offset += 2;
14035
14036
14037 /*
14038 * Now, get the fixed field length remaining. It will be divided up into
14039 * Anti-Clogging token, Scalar, FFE and some IEs.
14040 */
14041 len = find_fixed_field_len(tvb, offset);
14042 sc_len = get_scalar_len(group);
14043 elt_len = get_group_element_len(group);
14044
14045 /*
14046 * The first conditional captures the case where we have an error and
14047 * an anti-clogging token with Scalar Field and FFE.
14048 * The second handles the case where we have an error with only an
14049 * anti-clogging token.
14050 * The third conditional below is a way to avoid keeping state about
14051 * what was in a previous response!
14052 */
14053 if (((status_code == 76 || status_code == 126) &&
14054 ((len > (sc_len + elt_len)))) ||
14055 ((status_code == 76) && (len > 0) && (len < (sc_len + elt_len))) ||
14056 ((status_code == 0) && (len > (sc_len + elt_len)))) {
14057 unsigned anti_clogging_len;
14058 /*
14059 * Handle the anti-clogging field. There is an anti-clogging token
14060 * before the other two.
14061 */
14062 if (len > (sc_len + elt_len))
14063 anti_clogging_len = len - (sc_len + elt_len);
14064 else
14065 anti_clogging_len = len;
14066
14067 proto_tree_add_item(tree, hf_ieee80211_ff_sae_anti_clogging_token, tvb,
14068 offset, anti_clogging_len, ENC_NA0x00000000);
14069 offset += anti_clogging_len;
14070 }
14071
14072 if (sc_len == 0) {
14073 /* assume no anti-clogging token */
14074 if (!(len % 3))
14075 {
14076 sc_len = len / 3;
14077 }
14078 else
14079 {
14080 sc_len = len / 2;
14081 }
14082 elt_len = len - sc_len;
14083 }
14084
14085 /* Only present if status = 0 or 126 */
14086 if (status_code == 0 || status_code == 126) {
14087 proto_tree_add_item(tree, hf_ieee80211_ff_scalar, tvb, offset,
14088 sc_len, ENC_NA0x00000000);
14089 offset += sc_len;
14090
14091 proto_tree_add_item(tree, hf_ieee80211_ff_finite_field_element, tvb,
14092 offset, elt_len, ENC_NA0x00000000);
14093 offset += elt_len;
14094
14095 /* Create conversation when AP accept SAE commit */
14096 if (is_ap) {
14097 conversation_t *conversation;
14098 ieee80211_conversation_data_t *conversation_data;
14099 if (!pinfo->fd->visited) {
14100 association_counter++;
14101 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
14102 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
14103 assoc_counter_in_auth = 1;
14104 }
14105 conversation = find_or_create_wlan_conversation(pinfo);
14106 conversation_data = get_or_create_conversation_data(conversation);
14107 conversation_data->sae_group = group;
14108 }
14109 }
14110 }
14111 }
14112 else if ((seq == 2) && (status_code == 0))
14113 {
14114 proto_tree_add_item(tree, hf_ieee80211_ff_send_confirm, tvb, 6, 2,
14115 ENC_LITTLE_ENDIAN0x80000000);
14116 offset += 2;
14117
14118 /* Check if there are additional elements */
14119 len = find_fixed_field_len(tvb, offset);
14120 proto_tree_add_item(tree, hf_ieee80211_ff_confirm, tvb, offset, len,
14121 ENC_NA0x00000000);
14122 offset += len;
14123 }
14124
14125 return offset;
14126}
14127
14128static unsigned
14129add_ff_auth_fils(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
14130 unsigned offset)
14131{
14132 unsigned alg, seq, status_code;
14133 alg = tvb_get_letohs(tvb, 0);
14134
14135 if ((alg != AUTH_ALG_FILS_SK_WITH_PFS5) && (alg != AUTH_ALG_FILS_PK6))
14136 return offset;
14137
14138 seq = tvb_get_letohs(tvb, 2);
14139 status_code = tvb_get_letohs(tvb, 4);
14140
14141 if ((seq == 1) || (seq == 2 && status_code == 0)) {
14142 unsigned group = tvb_get_letohs(tvb, 6);
14143 unsigned elt_len;
14144 proto_tree_add_item(tree, hf_ieee80211_ff_finite_cyclic_group, tvb, 6, 2,
14145 ENC_LITTLE_ENDIAN0x80000000);
14146 offset = 8;
14147 elt_len = get_group_element_len(group);
14148
14149 proto_tree_add_item(tree, hf_ieee80211_ff_finite_field_element, tvb, offset,
14150 elt_len, ENC_NA0x00000000);
14151
14152 offset += elt_len;
14153 }
14154
14155 /* What about the other FILS case? */
14156
14157 return offset;
14158}
14159
14160/*
14161 * We handle different elements depending on whether the sequence number is
14162 * 1, 2 or 3.
14163 */
14164typedef struct ieee80211_pasn_data {
14165 unsigned pasn_seq;
14166 unsigned pasn_status_code;
14167} ieee80211_pasn_data_t;
14168
14169static ieee80211_pasn_data_t*
14170create_pasn_data(packet_info *pinfo, unsigned seq, unsigned status)
14171{
14172 ieee80211_pasn_data_t *pasn_data = NULL((void*)0);
14173
14174 pasn_data = wmem_new(pinfo->pool, ieee80211_pasn_data_t)((ieee80211_pasn_data_t*)wmem_alloc((pinfo->pool), sizeof(
ieee80211_pasn_data_t)))
;
14175
14176 if(pasn_data) {
14177 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, PASN_DATA_KEY, pasn_data);
14178 pasn_data->pasn_seq = seq;
14179 pasn_data->pasn_status_code = status;
14180 }
14181
14182 return pasn_data;
14183}
14184
14185static unsigned
14186add_ff_auth_pasn(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
14187 unsigned offset)
14188{
14189 unsigned seq, status_code;
14190 ieee80211_pasn_data_t *pasn_data = NULL((void*)0);
14191
14192 seq = tvb_get_letohs(tvb, 2);
14193 status_code = tvb_get_letohs(tvb, 4);
14194
14195 pasn_data = create_pasn_data(pinfo, seq, status_code);
14196 if (!pasn_data) {
14197 /* Leave it undissected if we cannot get memory. */
14198 return offset + tvb_captured_length_remaining(tvb, offset);
14199 }
14200
14201 if (seq == 1) {
14202 /*
14203 * Contains RSN Info,
14204 * PASN field,
14205 * Wrapped Data may be present if the PASN element says so,
14206 * RSNXE may be present
14207 * Timeout Interval element may be present
14208 * Fragment element may be present if it was fragmented.
14209 */
14210 while (tvb_captured_length_remaining(tvb, offset)) {
14211 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
14212 }
14213 } else if (seq == 2) {
14214 /* This test might not be needed */
14215 if (status_code != 0) {
14216 offset += tvb_captured_length_remaining(tvb, offset);
14217 return offset;
14218 }
14219 /*
14220 * RSN element is present.
14221 * PASN element is present if status == 0.
14222 * Wrapped Data element present if the PASN element says so.
14223 * ...
14224 */
14225 while (tvb_captured_length_remaining(tvb, offset)) {
14226 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
14227 }
14228 } else if (seq == 3) {
14229 /*
14230 * Contains PASN element if status == 0
14231 * Contains Wrapped Data element if PASN element says so and status is 0.
14232 * Contains MC element
14233 * May contain fragment elements.
14234 */
14235 while (tvb_captured_length_remaining(tvb, offset)) {
14236 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
14237 }
14238 }
14239
14240 offset += tvb_captured_length_remaining(tvb, offset);
14241
14242 return offset;
14243}
14244
14245/*
14246 * Handle an Auth Frame. We need to be able to call this from several places.
14247 *
14248 * We should also handle the different auth types more correctly.
14249 */
14250static int
14251dissect_auth_frame(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb)
14252{
14253 int offset = 0;
14254 uint16_t auth_algorithm = tvb_get_letohs(tvb, offset);
14255
14256 add_ff_auth_alg(tree, tvb, pinfo, offset);
14257 offset += 2;
14258
14259 add_ff_auth_trans_seq(tree, tvb, pinfo, offset);
14260 offset += 2;
14261
14262 add_ff_status_code(tree, tvb, pinfo, offset);
14263 offset += 2;
14264
14265 switch (auth_algorithm) {
14266 case AUTH_ALG_SAE3:
14267 offset = add_ff_auth_sae(tree, tvb, pinfo, offset);
14268 break;
14269 case AUTH_ALG_FILS_PK6:
14270 case AUTH_ALG_FILS_SK_WITH_PFS5:
14271 offset = add_ff_auth_fils(tree, tvb, pinfo, offset);
14272 break;
14273 case AUTH_ALG_PASN7:
14274 offset = add_ff_auth_pasn(tree, tvb, pinfo, offset);
14275 break;
14276 }
14277
14278 return offset;
14279}
14280
14281/*
14282 * If it is PASN wrapped data, handle it correctly, else defer to fils
14283 * wrapped data.
14284 */
14285static void
14286dissect_wrapped_data(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb,
14287 int offset, uint8_t ext_tag_len _U___attribute__((unused)))
14288{
14289 ieee80211_pasn_data_t *pasn_data =
14290 (ieee80211_pasn_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_wlan,
14291 PASN_DATA_KEY);
14292
14293 if (pasn_data) {
14294 proto_tree *auth_tree = NULL((void*)0);
14295 proto_item *ai = NULL((void*)0);
14296 uint16_t frame_len = 0;
14297 tvbuff_t *new_tvb = NULL((void*)0);
14298
14299 switch (pasn_data->pasn_seq) {
14300 case 1:
14301 auth_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
14302 ett_pasn_auth_frame, &ai,
14303 "Authentication Frame");
14304 new_tvb = tvb_new_subset_remaining(tvb, offset);
14305 offset = dissect_auth_frame(auth_tree, pinfo, new_tvb);
14306 proto_item_set_len(ai, offset); /* This is correct */
14307 break;
14308
14309 case 2:
14310 /* This has two auth frames in it. */
14311 frame_len = tvb_get_letohs(tvb, offset);
14312 proto_tree_add_item(tree, hf_ieee80211_pasn_auth1_frame_len, tvb, offset,
14313 2, ENC_LITTLE_ENDIAN0x80000000);
14314 offset += 2;
14315 auth_tree = proto_tree_add_subtree(tree, tvb, offset, frame_len,
14316 ett_pasn_auth_frame, NULL((void*)0),
14317 "Authentication Frame 1");
14318 new_tvb = tvb_new_subset_length(tvb, offset, frame_len);
14319 offset += dissect_auth_frame(auth_tree, pinfo, new_tvb);
14320
14321 /* Second frame */
14322 frame_len = tvb_get_letohs(tvb, offset);
14323 proto_tree_add_item(tree, hf_ieee80211_pasn_auth2_frame_len, tvb, offset,
14324 2, ENC_LITTLE_ENDIAN0x80000000);
14325 offset += 2;
14326 auth_tree = proto_tree_add_subtree(tree, tvb, offset, frame_len,
14327 ett_pasn_auth_frame, NULL((void*)0),
14328 "Authentication Frame 2");
14329 new_tvb = tvb_new_subset_length(tvb, offset, frame_len);
14330 dissect_auth_frame(auth_tree, pinfo, new_tvb);
14331 break;
14332
14333 case 3:
14334 auth_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
14335 ett_pasn_auth_frame, &ai,
14336 "Authentication Frame");
14337 new_tvb = tvb_new_subset_remaining(tvb, offset);
14338 offset = dissect_auth_frame(auth_tree, pinfo, new_tvb);
14339 proto_item_set_len(ai, offset);
14340 break;
14341 }
14342 }
14343}
14344
14345#define FILS_REQ_PARAMS_FILS_CRITERIA0x01 0x01
14346#define FILS_REQ_PARAMS_MAX_DELAY_LIMIT0x02 0x02
14347#define FILS_REQ_PARAMS_MINIMUM_DATA_RATE0x04 0x04
14348#define FILS_REQ_PARAMS_RCPI_LIMIT0x08 0x08
14349#define FILS_REQ_PARAMS_OUI_RESPONSE_CRITERIA0x10 0x10
14350#define FILS_REQ_PARAMS_RESERVED0xE0 0xE0
14351
14352#define FILS_REQ_PARAMS_FILS_CRITERIA_BSS_DELAY0x07 0x07
14353#define FILS_REQ_PARAMS_FILS_CRITERIA_PHY_SUPPORT0x38 0x38
14354#define FILS_REQ_PARAMS_FILS_CRITERIA_RESERVED0xC0 0xC0
14355
14356static void
14357dissect_fils_req_params(proto_tree *tree, packet_info *pinfo _U___attribute__((unused)), tvbuff_t *tvb,
14358 int offset, uint8_t ext_tag_len _U___attribute__((unused)))
14359{
14360 uint8_t bitmap;
14361
14362 static int * const ieee80211_fils_req_params_paramter_control_bitmap[] = {
14363 &hf_ieee80211_fils_req_params_fils_criteria_present,
14364 &hf_ieee80211_fils_req_params_max_delay_limit_present,
14365 &hf_ieee80211_fils_req_params_minimum_data_rate_present,
14366 &hf_ieee80211_fils_req_params_rcpi_limit_present,
14367 &hf_ieee80211_fils_req_params_oui_response_criteria_present,
14368 &hf_ieee80211_fils_req_params_reserved,
14369 NULL((void*)0)
14370 };
14371
14372 static int * const ieee80211_fils_req_params_fils_criteria[] = {
14373 &hf_ieee80211_fils_req_params_fils_criteria_bss_delay,
14374 &hf_ieee80211_fils_req_params_fils_criteria_phy_support,
14375 &hf_ieee80211_fils_req_params_fils_criteria_reserved,
14376 NULL((void*)0)
14377 };
14378
14379 bitmap = tvb_get_uint8(tvb, offset);
14380 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_fils_req_params_parameter_control_bitmap,
14381 ett_ff_fils_req_params, ieee80211_fils_req_params_paramter_control_bitmap, ENC_LITTLE_ENDIAN0x80000000);
14382 offset += 1;
14383
14384 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_max_channel_time,
14385 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14386 offset +=1;
14387
14388 if(bitmap & FILS_REQ_PARAMS_FILS_CRITERIA0x01) {
14389 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_fils_req_params_fils_criteria,
14390 ett_ff_fils_req_params_fils_criteria, ieee80211_fils_req_params_fils_criteria, ENC_LITTLE_ENDIAN0x80000000);
14391 offset += 1;
14392 }
14393
14394 if(bitmap & FILS_REQ_PARAMS_MAX_DELAY_LIMIT0x02) {
14395 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_max_delay_limit,
14396 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14397 offset += 1;
14398 }
14399
14400 if(bitmap & FILS_REQ_PARAMS_MINIMUM_DATA_RATE0x04) {
14401 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_minimum_data_rate,
14402 tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
14403 offset += 3;
14404 }
14405
14406 if(bitmap & FILS_REQ_PARAMS_RCPI_LIMIT0x08) {
14407 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_rcpi_limit,
14408 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14409 offset += 1;
14410 }
14411
14412 if(bitmap & FILS_REQ_PARAMS_OUI_RESPONSE_CRITERIA0x10) {
14413 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_oui_response_criteria,
14414 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14415 //offset += 2;
14416 }
14417
14418}
14419
14420static unsigned
14421wnm_bss_trans_mgmt_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14422{
14423 int start = offset;
14424 int left;
14425 int tmp_sublen;
14426 const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52 };
14427
14428
14429 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14430
14431 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_query_reason, tvb, offset, 1,
14432 ENC_NA0x00000000);
14433 offset += 1;
14434
14435 left = tvb_reported_length_remaining(tvb, offset);
14436 if (left > 0) {
14437 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
14438 tvb, offset, left, ENC_NA0x00000000);
14439
14440 while (left > 0){
14441 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
14442 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
14443 break;
14444 }
14445 left -= (tmp_sublen + 2);
14446 offset += (tmp_sublen + 2);
14447 }
14448 }
14449
14450 return offset - start;
14451}
14452
14453
14454static unsigned
14455wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14456{
14457 int start = offset;
14458 uint8_t mode;
14459 int left = tvb_reported_length_remaining(tvb, offset);
14460 int tmp_sublen;
14461 const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52, TAG_VENDOR_SPECIFIC_IE221};
14462
14463 static int * const ieee80211_ff_request_flags[] = {
14464 &hf_ieee80211_ff_request_mode_pref_cand,
14465 &hf_ieee80211_ff_request_mode_abridged,
14466 &hf_ieee80211_ff_request_mode_disassoc_imminent,
14467 &hf_ieee80211_ff_request_mode_bss_term_included,
14468 &hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
14469 &hf_ieee80211_ff_request_mode_link_removal_imminent,
14470 &hf_ieee80211_ff_request_mode_reserved,
14471 NULL((void*)0)
14472 };
14473
14474 if (left < 5) {
14475 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
14476 return offset - start;
14477 }
14478
14479 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14480
14481 mode = tvb_get_uint8(tvb, offset);
14482 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_ff_request_flags, ENC_LITTLE_ENDIAN0x80000000);
14483 offset += 1;
14484
14485 proto_tree_add_item(tree, hf_ieee80211_ff_disassoc_timer, tvb, offset, 2,
14486 ENC_LITTLE_ENDIAN0x80000000);
14487 offset += 2;
14488
14489 proto_tree_add_item(tree, hf_ieee80211_ff_validity_interval, tvb, offset, 1,
14490 ENC_LITTLE_ENDIAN0x80000000);
14491 offset += 1;
14492 left -= 5;
14493
14494 if (mode & 0x08) {
14495 proto_item *item;
14496 proto_tree *sub_tree;
14497 uint8_t sub_id, sub_len;
14498
14499 // BSS termination Duration sub element is the same as the neighbor report sub element
14500 if (left < 12) {
14501 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
14502 return offset - start;
14503 }
14504
14505 sub_tree = proto_tree_add_subtree(tree, tvb, offset, 12, ett_tag_neighbor_report_subelement_tree,
14506 NULL((void*)0), "BSS Termination Duration");
14507
14508 sub_id = tvb_get_uint8(tvb, offset);
14509 item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_id,
14510 tvb, offset, 1, ENC_NA0x00000000);
14511 offset += 1;
14512 if (sub_id != NR_SUB_ID_BSS_TER_DUR4) {
14513 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
14514 "Incorrect BSS Termination Duration subelement ID");
14515 }
14516
14517 sub_len = tvb_get_uint8(tvb, offset);
14518 item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_length,
14519 tvb, offset, 1, ENC_NA0x00000000);
14520 offset += 1;
14521 if (sub_len != 10) {
14522 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
14523 "Incorrect BSS Termination Duration subelement length");
14524 }
14525
14526 proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf,
14527 tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
14528 offset += 8;
14529 proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_dur,
14530 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14531 offset += 2;
14532 left -= 12;
14533 }
14534
14535 if (mode & 0x10) {
14536 uint8_t url_len;
14537
14538 url_len = tvb_get_uint8(tvb, offset);
14539 if (left < url_len) {
14540 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
14541 return offset - start;
14542 }
14543
14544 proto_tree_add_item(tree, hf_ieee80211_ff_url_len, tvb, offset, 1,
14545 ENC_LITTLE_ENDIAN0x80000000);
14546 offset += 1;
14547 proto_tree_add_item(tree, hf_ieee80211_ff_url, tvb, offset, url_len,
14548 ENC_ASCII0x00000000);
14549 offset += url_len;
14550 left -= url_len + 1;
14551 }
14552
14553 if (left > 0) {
14554 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
14555 tvb, offset, left, ENC_NA0x00000000);
14556
14557 while (left > 0){
14558 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
14559 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
14560 break;
14561 }
14562 left -= (tmp_sublen + 2);
14563 offset += (tmp_sublen + 2);
14564 }
14565 }
14566
14567 return offset - start;
14568}
14569
14570
14571static unsigned
14572wnm_bss_trans_mgmt_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14573{
14574 int start = offset;
14575 uint8_t code;
14576 int left;
14577 int tmp_sublen;
14578 const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52, TAG_VENDOR_SPECIFIC_IE221 };
14579
14580 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14581 code = tvb_get_uint8(tvb, offset);
14582 offset += add_ff_bss_transition_status_code(tree, tvb, pinfo, offset);
14583 offset += add_ff_bss_termination_delay(tree, tvb, pinfo, offset);
14584 if (!code) {
14585 proto_tree_add_item(tree, hf_ieee80211_ff_target_bss,
14586 tvb, offset, 6, ENC_NA0x00000000);
14587 offset += 6;
14588 }
14589 left = tvb_reported_length_remaining(tvb, offset);
14590 if (left > 0) {
14591 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
14592 tvb, offset, left, ENC_NA0x00000000);
14593 while (left > 0){
14594 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
14595 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
14596 break;
14597 }
14598 left -= (tmp_sublen + 2);
14599 offset += (tmp_sublen + 2);
14600 }
14601 }
14602
14603 return offset - start;
14604}
14605
14606static unsigned
14607wnm_sleep_mode_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14608{
14609 int start = offset;
14610 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14611 return offset - start;
14612}
14613
14614static unsigned
14615wnm_sleep_mode_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14616{
14617 int start = offset;
14618 uint16_t key_data_len;
14619 int left;
14620
14621 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14622 key_data_len = tvb_get_letohs(tvb, offset);
14623 offset += add_ff_key_data_length(tree, tvb, pinfo, offset);
14624 left = tvb_reported_length_remaining(tvb, offset);
14625 if (left < key_data_len) {
14626 expert_add_info(pinfo, tree, &ei_ieee80211_tag_wnm_sleep_mode_no_key_data);
14627 return offset - start;
14628 }
14629 proto_tree_add_item(tree, hf_ieee80211_ff_key_data, tvb, offset,
14630 key_data_len, ENC_NA0x00000000);
14631 offset += key_data_len;
14632 return offset - start;
14633}
14634
14635static unsigned
14636wnm_tfs_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14637{
14638 int start = offset;
14639 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14640 return offset - start;
14641}
14642
14643static unsigned
14644wnm_tfs_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14645{
14646 int start = offset;
14647 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14648 return offset - start;
14649}
14650
14651#define AP_DESCRIPTOR0 0
14652#define FIRMWARE_VERSION_CURRENT1 1
14653#define FIRMWARE_VERSION_NEW2 2
14654
14655static unsigned
14656dissect_wnm_subelements(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
14657 int offset) {
14658 unsigned sub_elt_id = tvb_get_uint8(tvb, offset);
14659 unsigned sub_elt_len = tvb_get_uint8(tvb, offset + 1);
14660
14661 proto_tree_add_item(tree, hf_ieee80211_wnm_sub_elt_id, tvb, offset, 1, ENC_NA0x00000000);
14662 offset++;
14663
14664 proto_tree_add_item(tree, hf_ieee80211_wnm_sub_elt_len, tvb, offset, 1, ENC_NA0x00000000);
14665 offset++;
14666
14667 switch (sub_elt_id) {
14668 case AP_DESCRIPTOR0:
14669
14670 break;
14671
14672 case FIRMWARE_VERSION_CURRENT1:
14673
14674 break;
14675
14676 case FIRMWARE_VERSION_NEW2:
14677
14678 break;
14679 }
14680
14681 offset += sub_elt_len;
14682 return offset;
14683}
14684
14685static unsigned
14686wnm_channel_usage_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14687{
14688 int start = offset;
14689
14690 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14691
14692 return offset - start;
14693}
14694
14695static unsigned
14696wnm_channel_usage_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14697{
14698 int start = offset, i;
14699 uint8_t id, len;
14700 proto_tree *subtree;
14701
14702 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14703
14704 /* Parse multiple chan usage elements */
14705 id = tvb_get_uint8(tvb, offset);
14706 while (id == TAG_CHANNEL_USAGE97){
14707 len = tvb_get_uint8(tvb, offset + 1);
14708 subtree = proto_tree_add_subtree(tree, tvb, offset, len + 2,
14709 ett_chan_usage,
14710 NULL((void*)0), "Channel Usage");
14711 proto_tree_add_item(subtree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_NA0x00000000);
14712 offset += 1;
14713 proto_tree_add_item(subtree, hf_ieee80211_tag_length, tvb, offset, 1, ENC_NA0x00000000);
14714 offset += 1;
14715 proto_tree_add_item(subtree, hf_ieee80211_tag_channel_usage_mode, tvb, offset, 1, ENC_NA0x00000000);
14716 offset += 1;
14717 len -= 1;
14718
14719 for (i = 0; i < (len / 2); i++) {
14720 offset += add_ff_operating_class(subtree, tvb, pinfo, offset);
14721 offset += add_ff_channel(subtree, tvb, pinfo, offset);
14722 }
14723 id = tvb_get_uint8(tvb, offset);
14724 }
14725 offset += add_ff_country_str(tree, tvb, pinfo, offset);
14726
14727 return offset - start;
14728}
14729
14730static unsigned
14731wnm_notification_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14732{
14733 int start = offset;
14734 int len = 0;
14735 uint8_t wnm_type = 0;
14736 uint8_t wnm_sub_elt = 0;
14737
14738 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14739 wnm_type = tvb_get_uint8(tvb, offset);
14740 offset += add_ff_wnm_notification_type(tree, tvb, pinfo, offset);
14741 len = tvb_reported_length_remaining(tvb, offset);
14742
14743 if (wnm_type == 0) {
14744 int offset_end = offset + len;
14745 while (offset < offset_end) {
14746 int start_offset = offset;
14747 proto_tree *wnm_list = NULL((void*)0);
14748 proto_item *wnm_item = NULL((void*)0);
14749 wnm_list = proto_tree_add_subtree_format(tree, tvb, offset, -1,
14750 ett_wnm_notif_subelt,
14751 &wnm_item, "WNM Subelement %d", wnm_sub_elt);
14752 offset = dissect_wnm_subelements(wnm_list, tvb, pinfo, offset);
14753 proto_item_set_len(wnm_item, offset - start_offset);
14754 }
14755 }
14756 return offset - start;
14757}
14758
14759static unsigned
14760wnm_notification_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14761{
14762 int start = offset;
14763
14764 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14765 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_response_status,
14766 tvb, offset, 1, ENC_NA0x00000000);
14767 offset += 1;
14768
14769 return offset - start;
14770}
14771
14772static unsigned
14773add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14774{
14775 uint8_t code;
14776 unsigned start = offset;
14777
14778 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14779 code = tvb_get_uint8(tvb, offset);
14780 offset += add_ff_wnm_action_code(tree, tvb, pinfo, offset);
14781 switch (code) {
14782 case WNM_EVENT_REQ:
14783 case WNM_EVENT_REPORT:
14784 case WNM_DIAGNOSTIC_REQ:
14785 case WNM_DIAGNOSTIC_REPORT:
14786 case WNM_LOCATION_CFG_REQ:
14787 case WNM_LOCATION_CFG_RESP:
14788 case WNM_FMS_REQ:
14789 case WNM_FMS_RESP:
14790 case WNM_DMS_REQ:
14791 case WNM_DMS_RESP:
14792 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14793 break;
14794 case WNM_BSS_TRANS_MGMT_QUERY:
14795 offset += wnm_bss_trans_mgmt_query(tree, tvb, pinfo, offset);
14796 break;
14797 case WNM_BSS_TRANS_MGMT_REQ:
14798 offset += wnm_bss_trans_mgmt_req(tree, tvb, pinfo, offset);
14799 break;
14800 case WNM_BSS_TRANS_MGMT_RESP:
14801 offset += wnm_bss_trans_mgmt_resp(tree, tvb, pinfo, offset);
14802 break;
14803 case WNM_TFS_REQ:
14804 offset += wnm_tfs_req(tree, tvb, pinfo, offset);
14805 break;
14806 case WNM_TFS_RESP:
14807 offset += wnm_tfs_resp(tree, tvb, pinfo, offset);
14808 break;
14809 case WNM_SLEEP_MODE_REQ:
14810 offset += wnm_sleep_mode_req(tree, tvb, pinfo, offset);
14811 break;
14812 case WNM_SLEEP_MODE_RESP:
14813 offset += wnm_sleep_mode_resp(tree, tvb, pinfo, offset);
14814 break;
14815 case WNM_CHANNEL_USAGE_REQ:
14816 offset += wnm_channel_usage_req(tree, tvb, pinfo, offset);
14817 break;
14818 case WNM_CHANNEL_USAGE_RESP:
14819 offset += wnm_channel_usage_resp(tree, tvb, pinfo, offset);
14820 break;
14821 case WNM_NOTIFICATION_REQ:
14822 offset += wnm_notification_req(tree, tvb, pinfo, offset);
14823 break;
14824 case WNM_NOTIFICATION_RESP:
14825 offset += wnm_notification_resp(tree, tvb, pinfo, offset);
14826 break;
14827 }
14828
14829 return offset - start; /* Size of fixed fields */
14830}
14831
14832static unsigned
14833add_ff_action_unprotected_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14834{
14835 uint8_t code;
14836 unsigned start = offset;
14837
14838 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14839 code = tvb_get_uint8(tvb, offset);
14840 offset += add_ff_unprotected_wnm_action_code(tree, tvb, pinfo, offset);
14841
14842 switch (code) {
14843 case UNPROTECTED_WNM_TIM:
14844 offset += add_ff_check_beacon(tree, tvb, pinfo, offset);
14845 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
14846 offset += add_ff_tod(tree, tvb, pinfo, offset);
14847 offset += add_ff_toa(tree, tvb, pinfo, offset);
14848 offset += add_ff_max_tod_err(tree, tvb, pinfo, offset);
14849 offset += add_ff_max_toa_err(tree, tvb, pinfo, offset);
14850 break;
14851 case UNPROTECTED_WNM_TIMING_MEASUREMENT:
14852 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14853 offset += add_ff_followup_dialog_token(tree, tvb, pinfo, offset);
14854 break;
14855 }
14856
14857 return offset - start; /* Size of fixed fields */
14858}
14859
14860static unsigned
14861add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14862{
14863 uint8_t code;
14864 uint16_t status;
14865 unsigned start = offset;
14866
14867 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14868 code = tvb_get_uint8(tvb, offset);
14869
14870 /* Extract keys for dot11decrypt engine */
14871 try_scan_tdls_keys(tvb, pinfo, offset);
14872
14873 offset += add_ff_tdls_action_code(tree, tvb, pinfo, offset);
14874 switch (code) {
14875 case TDLS_SETUP_REQUEST0:
14876 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14877 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
14878 break;
14879 case TDLS_SETUP_RESPONSE1:
14880 status = tvb_get_letohs(tvb, offset);
14881 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14882 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14883 if (tvb_reported_length_remaining(tvb, offset) < 2) {
14884 if (status == 0) {
14885 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_response_malformed);
14886 }
14887 break;
14888 }
14889 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
14890 break;
14891 case TDLS_SETUP_CONFIRM2:
14892 status = tvb_get_letohs(tvb, offset);
14893 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14894 if (tvb_reported_length_remaining(tvb, offset) < 1) {
14895 if (status == 0) {
14896 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_confirm_malformed);
14897 }
14898 break;
14899 }
14900 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14901 break;
14902 case TDLS_TEARDOWN3:
14903 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
14904 break;
14905 case TDLS_PEER_TRAFFIC_INDICATION4:
14906 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14907 break;
14908 case TDLS_CHANNEL_SWITCH_REQUEST5:
14909 offset += add_ff_target_channel(tree, tvb, pinfo, offset);
14910 offset += add_ff_operating_class(tree, tvb, pinfo, offset);
14911 break;
14912 case TDLS_CHANNEL_SWITCH_RESPONSE6:
14913 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14914 break;
14915 case TDLS_PEER_PSM_REQUEST7:
14916 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14917 break;
14918 case TDLS_PEER_PSM_RESPONSE8:
14919 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14920 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14921 break;
14922 case TDLS_PEER_TRAFFIC_RESPONSE9:
14923 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14924 break;
14925 case TDLS_DISCOVERY_REQUEST10:
14926 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14927 break;
14928 }
14929
14930 return offset - start; /* Size of fixed fields */
14931}
14932
14933static unsigned
14934add_ff_action_mgmt_notification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14935{
14936 unsigned start = offset;
14937
14938 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14939 offset += add_ff_wme_action_code(tree, tvb, pinfo, offset);
14940 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14941 offset += add_ff_wme_status_code(tree, tvb, pinfo, offset);
14942
14943 return offset - start; /* Size of fixed fields */
14944}
14945
14946static unsigned
14947add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14948{
14949 unsigned start = offset;
14950 uint32_t oui;
14951 tvbuff_t *vendor_tvb;
14952 int dissected;
14953
14954 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14955 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
14956 offset += 3;
14957
14958 vendor_tvb = tvb_new_subset_remaining(tvb, offset);
14959 dissected = dissector_try_uint_with_data(vendor_specific_action_table, oui, vendor_tvb, pinfo, tree, false0, NULL((void*)0));
14960 if (dissected <= 0)
14961 {
14962 call_data_dissector(vendor_tvb, pinfo, tree);
14963 /* Skip the whole TVB because we don't know its format */
14964 dissected = tvb_reported_length_remaining(vendor_tvb, 0);
14965 }
14966
14967 offset += dissected;
14968
14969 return offset - start; /* Size of fixed fields */
14970}
14971
14972static unsigned
14973add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14974{
14975 unsigned start = offset;
14976 uint8_t n_sta, i;
14977 mimo_control_t mimo_cntrl;
14978
14979 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14980 offset += add_ff_ht_action_code(tree, tvb, pinfo, offset);
14981
14982 switch (tvb_get_uint8(tvb, offset - 1)) {
14983 case HT_ACTION_NOTIFY_CHAN_WIDTH0:
14984 offset += add_ff_channel_width(tree, tvb, pinfo, offset);
14985 break;
14986 case HT_ACTION_SM_PWR_SAVE1:
14987 offset += add_ff_sm_pwr_cntrl(tree, tvb, pinfo, offset);
14988 break;
14989 case HT_ACTION_PSMP_ACTION2:
14990 n_sta = tvb_get_uint8(tvb, offset);
14991 offset += add_ff_psmp_param_set(tree, tvb, pinfo, offset);
14992 for (i = 0; i < (n_sta & 0x0F); i++) {
14993 offset += add_ff_psmp_sta_info(tree, tvb, pinfo, offset);
14994 }
14995 break;
14996 case HT_ACTION_SET_PCO_PHASE3:
14997 offset += add_ff_pco_phase_cntrl(tree, tvb, pinfo, offset);
14998 break;
14999 case HT_ACTION_MIMO_CSI4:
15000 mimo_cntrl = get_mimo_control(tvb, offset);
15001 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
15002 offset += add_mimo_csi_matrices_report(tree, tvb, offset, mimo_cntrl);
15003 break;
15004 case HT_ACTION_MIMO_BEAMFORMING5:
15005 mimo_cntrl = get_mimo_control(tvb, offset);
15006 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
15007 offset += add_mimo_beamforming_feedback_report(tree, tvb, offset,
15008 mimo_cntrl);
15009 break;
15010 case HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6:
15011 mimo_cntrl = get_mimo_control(tvb, offset);
15012 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
15013 offset += add_mimo_compressed_beamforming_feedback_report(tree, tvb,
15014 offset,
15015 mimo_cntrl);
15016 break;
15017 case HT_ACTION_ANT_SEL_FEEDBACK7:
15018 offset += add_ff_ant_selection(tree, tvb, pinfo, offset);
15019 break;
15020 case HT_ACTION_HT_INFO_EXCHANGE8:
15021 offset += add_ff_ht_information(tree, tvb, pinfo, offset);
15022 break;
15023 }
15024
15025 return offset - start;
15026}
15027
15028static unsigned
15029add_ff_beacon_interval_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15030{
15031 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bic,
15032 ett_bic_tree, ieee80211_ff_bic_fields,
15033 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15034
15035 return 6;
15036}
15037
15038static unsigned
15039add_ff_beamforming_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset, bool_Bool isGrant)
15040{
15041 uint16_t bf_field = tvb_get_letohs(tvb, offset);
15042 bool_Bool isInit = (bf_field & 0x2) >> 1;
15043 bool_Bool isResp = (bf_field & 0x4) >> 2;
15044 static int * const ieee80211_ff_beamforming_ctrl[] = {
15045 &hf_ieee80211_ff_bf_train,
15046 &hf_ieee80211_ff_bf_is_init,
15047 &hf_ieee80211_ff_bf_is_resp,
15048 &hf_ieee80211_ff_bf_rxss_len,
15049 &hf_ieee80211_ff_bf_rxss_rate,
15050 &hf_ieee80211_ff_bf_b10b15,
15051 NULL((void*)0)
15052 };
15053
15054 static int * const ieee80211_ff_beamforming_ctrl_grant[] = {
15055 &hf_ieee80211_ff_bf_train,
15056 &hf_ieee80211_ff_bf_is_init,
15057 &hf_ieee80211_ff_bf_is_resp,
15058 &hf_ieee80211_ff_bf_num_sectors,
15059 &hf_ieee80211_ff_bf_num_rx_dmg_ants,
15060 &hf_ieee80211_ff_bf_b12b15,
15061 NULL((void*)0)
15062 };
15063
15064 if((isInit==true1) && (isResp==true1) && isGrant) {
15065 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bf,
15066 ett_bf_tree, ieee80211_ff_beamforming_ctrl_grant,
15067 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15068 } else {
15069 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bf,
15070 ett_bf_tree, ieee80211_ff_beamforming_ctrl,
15071 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15072 }
15073 return 2;
15074}
15075
15076static unsigned
15077add_ff_dynamic_allocation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15078{
15079 static int * const ieee80211_ff_dynamic_allocation[] = {
15080 &hf_ieee80211_ff_TID,
15081 &hf_ieee80211_ff_alloc_type,
15082 &hf_ieee80211_ff_src_aid,
15083 &hf_ieee80211_ff_dest_aid,
15084 &hf_ieee80211_ff_alloc_duration,
15085 &hf_ieee80211_ff_b39,
15086 NULL((void*)0)
15087 };
15088
15089 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_dynamic_allocation,
15090 ett_dynamic_alloc_tree, ieee80211_ff_dynamic_allocation,
15091 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15092
15093 return 5;
15094}
15095
15096static unsigned
15097add_ff_beamformed_link(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15098{
15099 static int * const ieee80211_ff_beamformed_link[] = {
15100 &hf_ieee80211_ff_blm_unit_index,
15101 &hf_ieee80211_ff_blm_maint_value,
15102 &hf_ieee80211_ff_blm_is_master,
15103 NULL((void*)0)
15104 };
15105
15106 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_blm,
15107 ett_blm_tree, ieee80211_ff_beamformed_link,
15108 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15109 return 1;
15110}
15111
15112static unsigned
15113add_ff_BRP_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15114{
15115 static int * const ieee80211_ff_BRP_request[] = {
15116 &hf_ieee80211_ff_brp_L_RX,
15117 &hf_ieee80211_ff_brp_TX_TRN_REQ,
15118 &hf_ieee80211_ff_brp_MID_REQ,
15119 &hf_ieee80211_ff_brp_BC_REQ,
15120 &hf_ieee80211_ff_brp_MID_GRANT,
15121 &hf_ieee80211_ff_brp_BC_GRANT,
15122 &hf_ieee80211_ff_brp_chan_FBCK_CAP,
15123 &hf_ieee80211_ff_brp_tx_sector,
15124 &hf_ieee80211_ff_brp_other_aid,
15125 &hf_ieee80211_ff_brp_tx_antenna,
15126 &hf_ieee80211_ff_brp_reserved,
15127 NULL((void*)0)
15128 };
15129
15130 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_brp,
15131 ett_brp_tree, ieee80211_ff_BRP_request,
15132 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15133 return 4;
15134}
15135
15136static unsigned
15137add_ff_sector_sweep_feedback_from_iss(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15138{
15139 static int * const ieee80211_ff_sector_sweep_feedback_from_iss[] = {
15140 &hf_ieee80211_ff_sswf_total_sectors,
15141 &hf_ieee80211_ff_sswf_num_rx_dmg_ants,
15142 &hf_ieee80211_ff_sswf_reserved1,
15143 &hf_ieee80211_ff_sswf_poll_required,
15144 &hf_ieee80211_ff_sswf_reserved2,
15145 NULL((void*)0)
15146 };
15147
15148 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_sswf,
15149 ett_sswf_tree, ieee80211_ff_sector_sweep_feedback_from_iss,
15150 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15151 return 3;
15152}
15153
15154static unsigned
15155add_ff_sector_sweep_feedback_to_iss(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15156{
15157 static int * const ieee80211_ff_sector_sweep_feedback_to_iss[] = {
15158 &hf_ieee80211_ff_sswf_sector_select,
15159 &hf_ieee80211_ff_sswf_dmg_antenna_select,
15160 &hf_ieee80211_ff_sswf_snr_report,
15161 &hf_ieee80211_ff_sswf_poll_required,
15162 &hf_ieee80211_ff_sswf_reserved2,
15163 NULL((void*)0)
15164 };
15165
15166 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_sswf,
15167 ett_sswf_tree, ieee80211_ff_sector_sweep_feedback_to_iss,
15168 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15169 return 3;
15170}
15171
15172static unsigned
15173add_ff_sector_sweep(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15174{
15175 static int * const ieee80211_ff_sector_sweep[] = {
15176 &hf_ieee80211_ff_ssw_direction,
15177 &hf_ieee80211_ff_ssw_cdown,
15178 &hf_ieee80211_ff_ssw_sector_id,
15179 &hf_ieee80211_ff_ssw_dmg_ant_id,
15180 &hf_ieee80211_ff_ssw_rxss_len,
15181 NULL((void*)0)
15182 };
15183
15184 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ssw,
15185 ett_ssw_tree, ieee80211_ff_sector_sweep,
15186 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15187 return 3;
15188}
15189
15190static unsigned
15191add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15192{
15193 static int * const ieee80211_ff_dmg_params[] = {
15194 &hf_ieee80211_ff_dmg_params_bss,
15195 &hf_ieee80211_ff_dmg_params_cbap_only,
15196 &hf_ieee80211_ff_dmg_params_cbap_src,
15197 &hf_ieee80211_ff_dmg_params_privacy,
15198 &hf_ieee80211_ff_dmg_params_policy,
15199 &hf_ieee80211_ff_dmg_params_spec_mgmt,
15200 &hf_ieee80211_ff_dmg_params_radio_measure,
15201 NULL((void*)0)
15202 };
15203
15204 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_dmg_params,
15205 ett_dmg_params_tree, ieee80211_ff_dmg_params,
15206 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15207 return 1;
15208}
15209
15210static unsigned
15211add_ff_cc_field(proto_tree *tree, tvbuff_t *tvb, int offset, bool_Bool dis)
15212{
15213 proto_item *cc_item = proto_tree_add_item(tree, hf_ieee80211_ff_cc, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
15214 proto_tree *cc_tree = proto_item_add_subtree(cc_item, ett_cc_tree);
15215 uint64_t cc_field;
15216 if(dis) {
15217 proto_tree_add_item(cc_tree, hf_ieee80211_ff_cc_abft_resp_addr, tvb, offset, 6, ENC_NA0x00000000);
15218 } else {
15219 cc_field = tvb_get_letoh64(tvb, offset);
15220 /*TODO : Add support of bitmask for FT_(U)INT64 */
15221 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_sp_duration, tvb, offset, 1, (uint32_t)(cc_field & 0xff));
15222 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));
15223 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_role, tvb, offset+7, 1, (uint32_t)((cc_field & UINT64_C(0x0300000000000000)0x0300000000000000UL) >> 56));
15224 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));
15225 }
15226 return 8;
15227}
15228
15229
15230static unsigned
15231add_ff_band_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15232{
15233 proto_tree_add_item(tree, hf_ieee80211_ff_band_id, tvb, offset, 1, ENC_NA0x00000000);
15234 return 1;
15235}
15236
15237static unsigned
15238add_ff_subject_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15239{
15240 proto_tree_add_item(tree, hf_ieee80211_ff_subject_address, tvb, offset, 6, ENC_NA0x00000000);
15241 return 6;
15242}
15243
15244static unsigned
15245add_ff_handover_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15246{
15247 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reason, tvb, offset, 1, ENC_NA0x00000000);
15248 return 1;
15249}
15250
15251static unsigned
15252add_ff_handover_remaining_bi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15253{
15254 proto_tree_add_item(tree, hf_ieee80211_ff_handover_remaining_bi, tvb, offset, 1, ENC_NA0x00000000);
15255 return 1;
15256}
15257
15258static unsigned
15259add_ff_handover_result(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15260{
15261 proto_tree_add_item(tree, hf_ieee80211_ff_handover_result, tvb, offset, 1, ENC_NA0x00000000);
15262 return 1;
15263}
15264
15265static unsigned
15266add_ff_handover_reject_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15267{
15268 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reject_reason, tvb, offset, 1, ENC_NA0x00000000);
15269 return 1;
15270}
15271
15272static unsigned
15273add_ff_destination_reds_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15274{
15275 proto_tree_add_item(tree, hf_ieee80211_ff_destination_reds_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15276 return 2;
15277}
15278
15279static unsigned
15280add_ff_destination_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15281{
15282 proto_tree_add_item(tree, hf_ieee80211_ff_destination_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15283 return 2;
15284}
15285
15286static unsigned
15287add_ff_relay_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15288{
15289 proto_tree_add_item(tree, hf_ieee80211_ff_relay_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15290 return 2;
15291}
15292
15293static unsigned
15294add_ff_source_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15295{
15296 proto_tree_add_item(tree, hf_ieee80211_ff_source_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15297 return 2;
15298}
15299
15300static unsigned
15301add_ff_timing_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15302{
15303 proto_tree_add_item(tree, hf_ieee80211_ff_timing_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15304 return 2;
15305}
15306
15307static unsigned
15308add_ff_sampling_frequency_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15309{
15310 proto_tree_add_item(tree, hf_ieee80211_ff_sampling_frequency_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15311 return 2;
15312}
15313
15314static unsigned
15315add_ff_relay_operation_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15316{
15317 proto_tree_add_item(tree, hf_ieee80211_ff_relay_operation_type, tvb, offset, 1, ENC_NA0x00000000);
15318 return 1;
15319}
15320
15321static unsigned
15322add_ff_fst_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15323{
15324 proto_tree_add_item(tree, hf_ieee80211_ff_fst_action_code, tvb, offset, 1, ENC_NA0x00000000);
15325 return 1;
15326}
15327
15328static unsigned
15329add_ff_robust_av_streaming_action_code(proto_tree *tree, tvbuff_t *tvb,
15330 packet_info *pinfo _U___attribute__((unused)), int offset)
15331{
15332 proto_tree_add_item(tree, hf_ieee80211_ff_robust_av_streaming_action_code,
15333 tvb, offset, 1, ENC_NA0x00000000);
15334 return 1;
15335}
15336
15337static unsigned
15338add_ff_llt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15339{
15340 proto_tree_add_item(tree, hf_ieee80211_ff_llt, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15341 return 4;
15342}
15343
15344static unsigned
15345add_ff_fsts_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15346{
15347 proto_tree_add_item(tree, hf_ieee80211_ff_fsts_id, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15348 return 4;
15349}
15350
15351static unsigned
15352add_ff_oct_mmpdu(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15353{
15354 unsigned start = offset;
15355 unsigned len = tvb_get_letohs(tvb, offset);
15356 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_len, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15357 offset += 2;
15358 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_ctrl, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15359 offset += 2;
15360 proto_tree_add_item(tree, hf_ieee80211_ff_oct_mmpdu, tvb, offset, len, ENC_NA0x00000000);
15361 offset += len;
15362 return offset - start;
15363}
15364
15365static int * const eht_eml_control_field_mode_headers[] = {
15366 &hf_ieee80211_eht_eml_control_emlsr_mode,
15367 &hf_ieee80211_eht_eml_control_emlmr_mode,
15368 &hf_ieee80211_eht_eml_control_emlsr_para_update_control,
15369 &hf_ieee80211_eht_eml_control_device_coexist_activities,
15370 &hf_ieee80211_eht_eml_control_reserved,
15371 NULL((void*)0)
15372};
15373
15374static int * const eht_emlsr_para_update_headers[] = {
15375 &hf_ieee80211_eht_emlsr_para_update_padding_delay,
15376 &hf_ieee80211_eht_emlsr_para_update_tran_delay,
15377 &hf_ieee80211_eht_emlsr_para_update_reserved,
15378 NULL((void*)0)
15379};
15380
15381static int * const eht_eml_control_mcs_map_count_headers[] = {
15382 &hf_ieee80211_eht_eml_control_mcs_map_count_bw,
15383 &hf_ieee80211_eht_eml_control_mcs_map_count_reserved,
15384 NULL((void*)0)
15385};
15386
15387static const value_string eht_eml_control_mcs_map_count_bw[] = {
15388 {0x00, "80 MHz"},
15389 {0x01, "160 MHz"},
15390 {0x02, "320 MHz"},
15391 {0, NULL((void*)0)}
15392};
15393
15394static int * const eht_le_80_mcs_map_hdrs[] = {
15395 &hf_ieee80211_eht_le_80_rx_max_nss_0_9,
15396 &hf_ieee80211_eht_le_80_tx_max_nss_0_9,
15397 &hf_ieee80211_eht_le_80_rx_max_nss_10_11,
15398 &hf_ieee80211_eht_le_80_tx_max_nss_10_11,
15399 &hf_ieee80211_eht_le_80_rx_max_nss_12_13,
15400 &hf_ieee80211_eht_le_80_tx_max_nss_12_13,
15401 NULL((void*)0)
15402};
15403
15404static int * const eht_160_mcs_map_hdrs[] = {
15405 &hf_ieee80211_eht_160_rx_max_nss_0_9,
15406 &hf_ieee80211_eht_160_tx_max_nss_0_9,
15407 &hf_ieee80211_eht_160_rx_max_nss_10_11,
15408 &hf_ieee80211_eht_160_tx_max_nss_10_11,
15409 &hf_ieee80211_eht_160_rx_max_nss_12_13,
15410 &hf_ieee80211_eht_160_tx_max_nss_12_13,
15411 NULL((void*)0)
15412};
15413
15414static int * const eht_320_mcs_map_hdrs[] = {
15415 &hf_ieee80211_eht_320_rx_max_nss_0_9,
15416 &hf_ieee80211_eht_320_tx_max_nss_0_9,
15417 &hf_ieee80211_eht_320_rx_max_nss_10_11,
15418 &hf_ieee80211_eht_320_tx_max_nss_10_11,
15419 &hf_ieee80211_eht_320_rx_max_nss_12_13,
15420 &hf_ieee80211_eht_320_tx_max_nss_12_13,
15421 NULL((void*)0)
15422};
15423
15424static unsigned
15425dissect_eht_eml_control_field(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15426{
15427 unsigned start = offset;
15428 unsigned len = tvb_captured_length_remaining(tvb, offset);
15429 uint8_t mode = tvb_get_uint8(tvb, offset);
15430 uint8_t mcs_map_count;
15431 proto_item *link_map_item;
15432 proto_tree *link_map_tree;
15433 uint16_t bmap, f;
15434
15435 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15436 hf_ieee80211_eht_eml_control_field,
15437 ett_eht_eml_control,
15438 eht_eml_control_field_mode_headers,
15439 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15440 offset += 1;
15441
15442 if (mode & 0x03) { /* EMLSR or EMLMR*/
15443 if (len < 3) {
15444 expert_add_info_format(pinfo, tree, &ei_ieee80211_eht_invalid_action, "EMLSR or EMLMR length %u is wrong", len);
15445 return len;
15446 }
15447 link_map_item = proto_tree_add_item(tree,
15448 hf_ieee80211_eht_eml_control_link_bitmap,
15449 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15450 link_map_tree = proto_item_add_subtree(link_map_item,
15451 ett_eht_eml_control_link_map);
15452 bmap = tvb_get_letohs(tvb, offset);
15453 for (f = 0; f < 16; f++) {
15454 if (bmap & (1 << f)) {
15455 proto_tree_add_uint_format_value(link_map_tree,
15456 hf_ieee80211_eht_eml_control_link_enable_id,
15457 tvb, offset + (f/8), 1, f, "%u", f);
15458 }
15459 }
15460 offset += 2;
15461 }
15462 if (mode & 0x02) { /* EMLMR */
15463 if (len < 7) {
15464 expert_add_info_format(pinfo, tree, &ei_ieee80211_eht_invalid_action, "EMLMR length %u is wrong", len);
15465 return len;
15466 }
15467 mcs_map_count = tvb_get_uint8(tvb, offset) & 0x03;
15468 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15469 hf_ieee80211_eht_eml_control_mcs_map_count,
15470 ett_eht_eml_control_mcs_map_count,
15471 eht_eml_control_mcs_map_count_headers, ENC_LITTLE_ENDIAN0x80000000,
15472 BMT_NO_APPEND0x01);
15473 offset++;
15474
15475 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15476 hf_ieee80211_eht_mcs_and_nss_le_80mhz,
15477 ett_eht_phy_mcs_nss_set,
15478 eht_le_80_mcs_map_hdrs,
15479 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15480 offset += 3;
15481 if (mcs_map_count >= 1) {
15482 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15483 hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
15484 ett_eht_phy_mcs_nss_set,
15485 eht_160_mcs_map_hdrs,
15486 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15487 offset += 3;
15488 }
15489 if (mcs_map_count >= 2) {
15490 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15491 hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
15492 ett_eht_phy_mcs_nss_set,
15493 eht_320_mcs_map_hdrs,
15494 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15495 offset += 3;
15496 }
15497 }
15498
15499 if (mode & 0x04) { /* EMLSR Parameter Update */
15500 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15501 hf_ieee80211_eht_emlsr_para_update, ett_eht_emlsr_para_update,
15502 eht_emlsr_para_update_headers, ENC_LITTLE_ENDIAN0x80000000,
15503 BMT_NO_APPEND0x01);
15504 offset++;
15505 }
15506
15507 return offset - start;
15508}
15509
15510static int
15511add_tag_relay_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15512{
15513 int tag_len = tvb_reported_length(tvb);
15514 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15515 int offset = 0;
15516 static int * const ieee80211_tag_relay_capabilities[] = {
15517 &hf_ieee80211_tag_relay_support,
15518 &hf_ieee80211_tag_relay_use,
15519 &hf_ieee80211_tag_relay_permission,
15520 &hf_ieee80211_tag_AC_power,
15521 &hf_ieee80211_tag_relay_prefer,
15522 &hf_ieee80211_tag_duplex,
15523 &hf_ieee80211_tag_cooperation,
15524 NULL((void*)0)
15525 };
15526
15527 if (tag_len < 2) {
15528 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length must be 2");
15529 return 1;
15530 }
15531
15532 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_relay_capabilities, ENC_NA0x00000000);
15533 return tvb_captured_length(tvb);
15534}
15535
15536#if 0
15537static unsigned
15538add_ff_relay_capable_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15539{
15540 proto_item *rcsi_item = proto_tree_add_item(tree, hf_ieee80211_ff_rcsi, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15541 proto_tree *rcsi_tree = proto_item_add_subtree(rcsi_item, ett_rcsi_tree);
15542 proto_tree_add_item(rcsi_tree, hf_ieee80211_ff_rcsi_aid, tvb, offset, 1, ENC_NA0x00000000);
15543 offset += 1;
15544 add_tag_relay_capabilities(pinfo, rcsi_item, 2, rcsi_tree, tvb, &offset);
15545 return 3;
15546}
15547#endif
15548
15549#define NEXT_TBTT_PRESENT0x01 0x01
15550#define COMPRESSED_SSID_PRESENT0x02 0x02
15551#define ANO_PRESENT0x04 0x04
15552
15553static void
15554dissect_ieee80211_extension(uint16_t fcf, tvbuff_t *tvb, packet_info *pinfo,
15555 proto_tree *tree, uint16_t flags)
15556{
15557 proto_item *ti;
15558 proto_tree *ext_tree;
15559 proto_tree *fixed_tree;
15560 proto_tree *tagged_tree;
15561
15562 int offset = 0;
15563 int tagged_parameter_tree_len;
15564
15565 ti = proto_tree_add_item(tree, proto_wlan_ext, tvb, offset, -1, ENC_NA0x00000000);
15566 ext_tree = proto_item_add_subtree(ti, ett_80211_ext);
15567
15568 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)))
)
15569 {
15570 case EXTENSION_DMG_BEACON0x30:
15571 {
15572 bool_Bool cc, dis;
15573 uint16_t bic_field;
15574 fixed_tree = get_fixed_parameter_tree(ext_tree, tvb, offset, 20, false0);
15575 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
15576 offset += add_ff_sector_sweep(fixed_tree, tvb, pinfo, offset);
15577 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
15578 bic_field = tvb_get_letohs(tvb, offset);
15579 cc = (bic_field & 0x1);
15580 dis = (bic_field & 0x2) >> 1;
15581 offset += add_ff_beacon_interval_ctrl(fixed_tree, tvb, pinfo, offset);
15582 offset += add_ff_dmg_params(fixed_tree, tvb, pinfo, offset);
15583 if(cc) {
15584 offset += add_ff_cc_field(fixed_tree, tvb, offset, dis);
15585 }
15586 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
15587
15588 /*
15589 * The tagged params are optional here. See Table 8.33a of the 2012
15590 * version of the standard.
15591 */
15592 if (tagged_parameter_tree_len) {
15593 tagged_tree = get_tagged_parameter_tree(ext_tree, tvb, offset, tagged_parameter_tree_len);
15594 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, EXTENSION_DMG_BEACON0x30, NULL((void*)0));
15595 }
15596 break;
15597 }
15598 case EXTENSION_S1G_BEACON0x31:
15599 {
15600 int params_size = 5;
15601
15602 if (flags & NEXT_TBTT_PRESENT0x01) params_size += 3;
15603 if (flags & COMPRESSED_SSID_PRESENT0x02) params_size += 4;
15604 if (flags & ANO_PRESENT0x04) params_size += 1;
15605
15606 fixed_tree = get_fixed_parameter_tree( ext_tree, tvb, offset, params_size, false0);
15607 offset += add_ff_s1g_timestamp(fixed_tree, tvb, pinfo, offset);
15608 offset += add_ff_change_sequence(fixed_tree, tvb, pinfo, offset);
15609 if (flags & NEXT_TBTT_PRESENT0x01)
15610 offset += add_ff_next_tbtt(fixed_tree, tvb, pinfo, offset);
15611 if (flags & COMPRESSED_SSID_PRESENT0x02)
15612 offset += add_ff_compressed_ssid(fixed_tree, tvb, pinfo, offset);
15613 if (flags & ANO_PRESENT0x04)
15614 offset += add_ff_access_network_options(fixed_tree, tvb, pinfo, offset);
15615
15616 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
15617
15618 if (tagged_parameter_tree_len) {
15619 tagged_tree = get_tagged_parameter_tree(ext_tree, tvb, offset, tagged_parameter_tree_len);
15620 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, EXTENSION_S1G_BEACON0x31, NULL((void*)0));
15621 }
15622 }
15623 }
15624}
15625
15626static unsigned
15627add_ff_action_unprotected_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
15628{
15629 uint8_t code;
15630 unsigned start = offset;
15631
15632 offset += add_ff_category_code(tree, tvb, pinfo, offset);
15633 code = tvb_get_uint8(tvb, offset);
15634 offset += add_ff_unprotected_dmg_action_code(tree, tvb, pinfo, offset);
15635 switch (code) {
15636 case UNPROTECTED_DMG_ANNOUNCE0:
15637 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
15638 offset += add_ff_beacon_interval(tree, tvb, pinfo, offset);
15639 break;
15640 case UNPROTECTED_DMG_BRP1:
15641 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
15642 offset += add_ff_BRP_request(tree, tvb, pinfo, offset);
15643 break;
15644 }
15645 return offset - start;
15646}
15647
15648/* There is no easy way to skip all these subcarrier indices that must not
15649 * be displayed when showing compressed beamforming feedback matrices
15650 * Table 8-53g IEEE Std 802.11ac-2013 amendment.
15651 *
15652 * The irregular use of case statements in this function is to improve
15653 * readability in what is otherwise a large function that does very little.
15654 */
15655static inline int
15656vht_compressed_skip_scidx(uint8_t nchan_width, uint8_t ng, int scidx)
15657{
15658 switch(nchan_width) {
15659 /* 20 MHz */
15660 case 0:
15661 /* No Grouping */
15662 if (ng == 0)
15663 switch (scidx) {
15664 /* Pilot subcarriers */
15665 case -21: case -7: case 7: case 21:
15666 /* DC subcarrier */
15667 case 0:
15668 scidx++;
15669 default:
15670 break;
15671 }
15672 break;
15673 /* 40 MHz */
15674 case 1:
15675 /* No Grouping */
15676 if (ng == 0)
15677 switch (scidx) {
15678 /* Pilot subcarriers */
15679 case -53: case -25: case -11: case 11: case 25: case 53:
15680 scidx++;
15681 break;
15682 /* DC subcarriers */
15683 case -1: case 0: case 1:
15684 scidx = 2;
15685 default:
15686 break;
15687 }
15688 break;
15689 /* 80 MHz */
15690 case 2:
15691 /* No Grouping */
15692 if (ng == 0)
15693 switch (scidx) {
15694 /* Pilot subcarriers */
15695 case -103: case -75: case -39: case -11: case 11: case 39: case 75: case 103:
15696 scidx++;
15697 break;
15698 /* DC subcarriers, skip -1, 0, 1 */
15699 case -1:
15700 scidx = 2;
15701 default:
15702 break;
15703 }
15704 break;
15705 /* 160 MHz / 80+80 Mhz
15706 * Skip values here assume 160 MHz, as vht_mimo_control does not let us differentiate
15707 * between 160 MHz & 80-80MHz */
15708 case 3:
15709 switch (ng) {
15710 /* No Grouping */
15711 case 0:
15712 /* DC subcarriers, skip -5 to 5*/
15713 if (scidx == -5) {
15714 scidx = 6;
15715 break;
15716 }
15717 switch (scidx) {
15718 /* Pilot subcarriers */
15719 case -231: case -203: case -167: case -139: case -117: case -89: case -53: case -25:
15720 case 25: case 53: case 89: case 117: case 139: case 167: case 203: case 231:
15721 scidx++;
15722 break;
15723 /* Other subcarriers, skip -129 to -127, 127 to 129 */
15724 case -129:
15725 scidx = -126;
15726 break;
15727 case 127:
15728 scidx = 130;
15729 break;
15730 default:
15731 break;
15732 }
15733 break;
15734 /* Grouping of 2 */
15735 case 1:
15736 switch (scidx) {
15737 /* DC subcarriers */
15738 case -128: case -4: case -2: case 0: case 2: case 4: case 128:
15739 scidx++;
15740 default:
15741 break;
15742 }
15743 break;
15744 /* Grouping of 4 */
15745 case 2:
15746 if (scidx == -2 || scidx == 2)
15747 scidx++;
15748 break;
15749 }
15750 break;
15751 default:
15752 break;
15753 }
15754
15755 return scidx;
15756}
15757
15758static inline int vht_exclusive_skip_scidx(uint8_t nchan_width, uint8_t ng, int scidx)
15759{
15760 switch (nchan_width) {
15761 /* 20 MHz */
15762 case 0:
15763 switch (ng) {
15764 /* No Grouping */
15765 case 0:
15766 if (scidx == -2 || scidx == 1)
15767 scidx++;
15768 else
15769 scidx = scidx + 2;
15770 break;
15771 case 1:
15772 switch (scidx) {
15773 case -4: case 1:
15774 scidx = scidx + 3;
15775 break;
15776 case -1:
15777 scidx = 1;
15778 break;
15779 default:
15780 scidx = scidx + 4;
15781 break;
15782 }
15783 break;
15784 default:
15785 switch (scidx) {
15786 case -4: case 1:
15787 scidx = scidx + 3;
15788 break;
15789 case -1:
15790 scidx = 1;
15791 break;
15792 default:
15793 scidx = scidx + 8;
15794 break;
15795 }
15796 break;
15797 }
15798 break;
15799 /* 40 MHz */
15800 case 1:
15801 /* 80 MHz */
15802 case 2:
15803 switch (ng) {
15804 /* No Grouping */
15805 case 0:
15806 if (scidx == -2)
15807 scidx = 2;
15808 else
15809 scidx = scidx + 2;
15810 break;
15811 case 1:
15812 scidx = scidx + 4;
15813 break;
15814 default:
15815 if (scidx == -2)
15816 scidx = 2;
15817 else
15818 scidx = scidx + 8;
15819 break;
15820 }
15821 break;
15822 /* 160 MHz / 80+80 Mhz */
15823 case 3:
15824 switch (ng) {
15825 /* No Grouping */
15826 case 0:
15827 switch (scidx) {
15828 /* DC subcarriers, skip -4 to 4*/
15829 case -6:
15830 scidx = 6;
15831 break;
15832 /* Other subcarriers, skip -128, 128 */
15833 case -130:
15834 scidx = -126;
15835 break;
15836 case 126:
15837 scidx = 130;
15838 break;
15839 default:
15840 scidx = scidx + 2;
15841 break;
15842 }
15843 break;
15844 case 1:
15845 switch (scidx) {
15846 /* DC subcarriers, skip -4 to 4*/
15847 case -6:
15848 scidx = 6;
15849 break;
15850 default:
15851 scidx = scidx + 4;
15852 break;
15853 }
15854 break;
15855 default:
15856 switch (scidx) {
15857 case -6:
15858 scidx = 6;
15859 break;
15860 case -130:
15861 scidx = -126;
15862 break;
15863 case 126:
15864 scidx = 130;
15865 break;
15866 default:
15867 scidx = scidx + 8;
15868 break;
15869 }
15870 break;
15871 }
15872 break;
15873 default:
15874 break;
15875 }
15876 return scidx;
15877}
15878
15879static int
15880dissect_he_feedback_matrix(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
15881 int offset, int bit_offset, int scidx,
15882 int nr, int nc,
15883 int phi_bits, int psi_bits,
15884 int hf);
15885
15886static unsigned
15887add_ff_vht_compressed_beamforming_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15888{
15889 uint32_t vht_mimo;
15890 uint8_t nc;
15891 uint8_t nr;
15892 uint8_t chan_width;
15893 uint8_t grouping;
15894 bool_Bool codebook_info;
15895 bool_Bool feedback_type;
15896 proto_item *vht_beam_item, *vht_excl_beam_item;
15897 proto_tree *vht_beam_tree, *subtree, *vht_excl_beam_tree;
15898 int i, len, pos, ns, scidx = 0;
15899 uint8_t phi, psi, carry;
15900 int j, ic, off_len = 0, sscidx = 0, xnsc;
15901 int bit_offset = 0;
15902 int start_offset = 0;
15903 /* Table 8-53g Subcarriers for which a Compressed Beamforming Feedback Matrix
15904 * subfield is sent back. IEEE Std 802.11ac-2013 amendment */
15905 static const int ns_arr[4][3] = { { 52, 30, 16 },
15906 { 108, 58, 30 },
15907 { 234, 122, 62 },
15908 { 468, 244, 124 }
15909 };
15910
15911 /* Table 8-53j, no of Subcarriers for which the Delta SNR subfield is sent back to the beamformer.
15912 * IEEE Std 802.11ac-2013 amendment */
15913 static const int delta_ns_arr[4][3] = { { 30, 16, 10 },
15914 { 58, 30, 16 },
15915 { 122, 62, 32 },
15916 { 244, 124, 64 }
15917 };
15918
15919 vht_mimo = tvb_get_letoh24(tvb, offset);
15920 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_vht_mimo_cntrl,
15921 ett_ff_vhtmimo_cntrl, hf_ieee80211_ff_vht_mimo_cntrl_fields, ENC_LITTLE_ENDIAN0x80000000);
15922 offset += 3;
15923
15924 /* Extract values for beamforming use */
15925 nc = (vht_mimo & 0x7) + 1;
15926 nr = ((vht_mimo & 0x38) >> 3) + 1;
15927 chan_width = (vht_mimo & 0xC0) >> 6;
15928 grouping = ((vht_mimo & 0x300) >> 8);
15929 codebook_info = (vht_mimo & 0x400) >> 10;
15930 feedback_type = (vht_mimo & 0x800) >> 11;
15931
15932 if (feedback_type) {
15933 if (codebook_info) {
15934 psi = 7; phi = 9;
15935 } else {
15936 psi = 5; phi = 7;
15937 }
15938 } else {
15939 if (codebook_info) {
15940 psi = 4; phi = 6;
15941 } else {
15942 psi = 2; phi = 4;
15943 }
15944 }
15945
15946 vht_beam_item = proto_tree_add_item(tree, hf_ieee80211_vht_compressed_beamforming_report, tvb,
15947 offset, -1, ENC_NA0x00000000);
15948 vht_beam_tree = proto_item_add_subtree(vht_beam_item, ett_ff_vhtmimo_beamforming_report);
15949
15950 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, nc,
15951 ett_ff_vhtmimo_beamforming_report_snr, NULL((void*)0), "Average Signal to Noise Ratio");
15952
15953 for (i = 1; i <= nc; i++)
15954 {
15955 int8_t snr;
15956 char edge_sign;
15957
15958 snr = tvb_get_int8(tvb, offset);
15959
15960 switch(snr) {
15961 case -128:
15962 edge_sign = '<';
15963 break;
15964 case 127:
15965 edge_sign = '>';
15966 break;
15967 default:
15968 edge_sign = ' ';
15969 break;
15970 }
15971
15972 proto_tree_add_int_format(subtree, hf_ieee80211_vht_compressed_beamforming_report_snr, tvb, offset, 1,
15973 snr, "Stream %d - Signal to Noise Ratio: %c%3.2fdB", i, edge_sign,snr/4.0+22.0);
15974
15975 offset += 1;
15976 }
15977
15978 /* Table 8-53c Subfields of the VHT MIMO Control field (802.11ac-2013)
15979 * reserves value 3 of the Grouping subfield. */
15980 if (grouping == 3) {
15981 expert_add_info_format(pinfo, vht_beam_item, &ei_ieee80211_inv_val,
15982 "Grouping subfield value 3 is reserved");
15983 return offset;
15984 }
15985
15986 start_offset = offset;
15987 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, -1,
15988 ett_ff_vhtmimo_beamforming_report_feedback_matrices,
15989 NULL((void*)0), "Feedback Matrices");
15990
15991 ns = ns_arr[chan_width][grouping];
15992 switch(chan_width) {
15993 case 0:
15994 scidx = -28;
15995 break;
15996 case 1:
15997 scidx = -58;
15998 break;
15999 case 2:
16000 scidx = -122;
16001 break;
16002 case 3:
16003 /* This is -122 for 80+80MHz Channel Width but vht_mimo_control does not allow us
16004 * to differentiate between 160MHz and 80+80Mhz */
16005 scidx = -250;
16006 break;
16007 }
16008
16009 bit_offset = offset * 8;
16010 for (i = 0; i < ns; i++) {
16011
16012 scidx = vht_compressed_skip_scidx(chan_width, grouping, scidx);
16013
16014 bit_offset = dissect_he_feedback_matrix(subtree, tvb, pinfo, offset,
16015 bit_offset, scidx++, nr, nc, phi, psi,
16016 hf_ieee80211_vht_compressed_beamform_scidx);
16017 offset = bit_offset / 8;
16018 }
16019
16020 proto_item_set_len(subtree, offset - start_offset);
16021
16022 if (feedback_type) {
16023 xnsc = delta_ns_arr[chan_width][grouping];
16024 if ((nc * xnsc *4) % 8)
16025 off_len = (nc * xnsc *4) / 8 + 1;
16026 else
16027 off_len = (nc * xnsc *4) / 8;
16028 switch(chan_width) {
16029 case 0:
16030 sscidx = -28;
16031 break;
16032 case 1:
16033 sscidx = -58;
16034 break;
16035 case 2:
16036 sscidx = -122;
16037 break;
16038 case 3:
16039 sscidx = -250;
16040 break;
16041 }
16042 vht_excl_beam_item = proto_tree_add_item(tree, hf_ieee80211_vht_mu_exclusive_beamforming_report, tvb, offset, off_len, ENC_NA0x00000000);
16043 vht_excl_beam_tree = proto_item_add_subtree(vht_excl_beam_item, ett_ff_vhtmu_exclusive_beamforming_report_matrices);
16044
16045 carry = 1;
16046 for (j = 1; j <= xnsc; j++) {
16047 for (ic = 1; ic <= nc; ic++) {
16048 if (carry % 2){
16049 pos = 0;
16050 len = 1;
16051 }
16052 else
16053 {
16054 pos = 1;
16055 len = 0;
16056 }
16057 proto_tree_add_none_format(vht_excl_beam_tree, hf_ieee80211_vht_mu_exclusive_beamforming_delta_snr, tvb,
16058 offset - pos, 1, "Delta SNR for space-time stream %d for subcarrier %d", ic, sscidx);
16059 offset += len;
16060 carry ++;
16061 }
16062 sscidx = vht_exclusive_skip_scidx(chan_width, grouping, sscidx);
16063 }
16064 }
16065
16066 return offset;
16067}
16068
16069static unsigned
16070add_ff_action_vht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16071{
16072 unsigned start = offset;
16073 uint8_t vht_action, field_val;
16074 uint64_t msa_value;
16075 uint64_t upa_value;
16076 int m, half, msa_index;
16077 proto_item *ti;
16078 proto_tree *ti_tree;
16079 proto_item *msa, *upa;
16080 proto_tree *msa_tree, *upa_tree;
16081
16082 offset += add_ff_category_code(tree, tvb, pinfo, offset);
16083
16084 vht_action = tvb_get_uint8(tvb, offset);
16085 offset += add_ff_vht_action(tree, tvb, pinfo, offset);
16086
16087 switch(vht_action){
16088 case VHT_ACT_VHT_COMPRESSED_BEAMFORMING0:{
16089 offset = add_ff_vht_compressed_beamforming_report(tree, tvb, pinfo, offset);
16090 offset += tvb_reported_length_remaining(tvb, offset);
16091 }
16092 break;
16093 case VHT_ACT_GROUP_ID_MANAGEMENT1:{
16094 ti = proto_tree_add_item(tree, hf_ieee80211_vht_group_id_management, tvb,
16095 offset, -1, ENC_NA0x00000000);
16096 ti_tree = proto_item_add_subtree(ti, ett_vht_grpidmgmt);
16097
16098 msa_value = tvb_get_letoh64(tvb, offset);
16099 msa = proto_tree_add_item(ti_tree, hf_ieee80211_vht_membership_status_array, tvb,
16100 offset, 8, ENC_NA0x00000000);
16101 msa_tree = proto_item_add_subtree(msa, ett_vht_msa);
16102 for (m = 0; m < 64; m++) {
16103 if (msa_value & (INT64_C(1)1L << m))
16104 proto_tree_add_uint_format(msa_tree, hf_ieee80211_vht_membership_status_field,
16105 tvb, offset + (m/8), 1, 1, "Membership Status in Group ID %d: 1", m);
16106 }
16107 offset += 8;
16108
16109 upa = proto_tree_add_item(ti_tree, hf_ieee80211_vht_user_position_array, tvb,
16110 offset, 16, ENC_NA0x00000000);
16111 upa_tree = proto_item_add_subtree(upa, ett_vht_upa);
16112
16113 for (half = 0, msa_index = 0; half < 2; half++) {
16114 upa_value = tvb_get_letoh64(tvb, offset);
16115 for (m = 0; m < 64; m += 2, msa_index++) {
16116 if (msa_value & (INT64_C(1)1L << msa_index)) {
16117 field_val = (uint8_t)((upa_value >> m) & 0x3);
16118 proto_tree_add_uint_format(upa_tree, hf_ieee80211_vht_user_position_field,
16119 tvb, offset + (m / 8), 1, field_val, "User Position in Group ID %d: %u", msa_index, field_val);
16120 }
16121 }
16122 offset += 8;
16123 }
16124
16125 offset += tvb_reported_length_remaining(tvb, offset);
16126 }
16127 break;
16128 case VHT_ACT_OPERATION_MODE_NOTIFICATION2:{
16129 ti = proto_tree_add_item(tree, hf_ieee80211_vht_operation_mode_notification, tvb,
16130 offset, -1, ENC_NA0x00000000);
16131 expert_add_info(pinfo, ti, &ei_ieee80211_vht_action);
16132 offset += tvb_reported_length_remaining(tvb, offset);
16133 }
16134 break;
16135 default:
16136 break;
16137 }
16138
16139
16140 return offset - start;
16141}
16142
16143static int * const s1g_sync_control_headers[] = {
16144 &hf_ieee80211_s1g_sync_control_uplink_sync_request,
16145 &hf_ieee80211_s1g_sync_control_time_slot_protection_request,
16146 &hf_ieee80211_s1g_sync_control_reserved,
16147 NULL((void*)0)
16148};
16149
16150static int
16151add_ff_sync_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
16152{
16153 int start = offset;
16154
16155 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16156 hf_ieee80211_s1g_sync_control,
16157 ett_s1g_sync_control_tree,
16158 s1g_sync_control_headers,
16159 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16160 offset += 1;
16161
16162 return offset - start;
16163}
16164
16165static int * const s1g_sector_id_index_headers[] = {
16166 &hf_ieee80211_s1g_sector_id_preferred_sector_id,
16167 &hf_ieee80211_s1g_sector_id_snr,
16168 &hf_ieee80211_s1g_sector_id_receive_sector_bitmap,
16169 NULL((void*)0)
16170};
16171
16172static void
16173s1g_sector_id_index_snr_custom(char *result, uint16_t snr)
16174{
16175 switch (snr) {
16176 case 0:
16177 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Less than or equal to -3dB");
16178 break;
16179 case 30:
16180 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Greater than or equal to 27dB");
16181 break;
16182 case 31:
16183 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "No Feedback");
16184 break;
16185 default:
16186 snprintf(result, ITEM_LABEL_LENGTH240, "%ddB", snr - 3);
16187 }
16188}
16189
16190static int
16191add_ff_sector_id_index(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
16192{
16193 int start = offset;
16194
16195 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16196 hf_ieee80211_s1g_sector_id_index,
16197 ett_s1g_sector_id_index,
16198 s1g_sector_id_index_headers,
16199 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16200 offset += 2;
16201
16202 return offset - start;
16203}
16204
16205static int * const s1g_twt_information_control_headers[] = {
16206 &hf_ieee80211_s1g_twt_flow_identifier,
16207 &hf_ieee80211_s1g_twt_response_required,
16208 &hf_ieee80211_s1g_twt_next_twt_request,
16209 &hf_ieee80211_s1g_twt_next_twt_subfield_size,
16210 &hf_ieee80211_s1g_twt_reserved,
16211 NULL((void*)0)
16212};
16213
16214static int
16215add_ff_twt_information(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
16216{
16217 int start = offset;
16218 uint8_t control = tvb_get_uint8(tvb, offset);
16219
16220 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16221 hf_ieee80211_s1g_twt_information_control,
16222 ett_s1g_twt_information_control,
16223 s1g_twt_information_control_headers,
16224 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16225 offset += 1;
16226
16227 if (control & 0x60) {
16228 int len_bits = ((control >> 5) & 0x03);
16229 int len = 0;
16230
16231 switch (len_bits) {
16232 case 0:
16233 len = 0; /* Should not happen! */
16234 break;
16235 case 1:
16236 len = 4;
16237 proto_tree_add_item(tree, hf_ieee80211_s1g_twt_next_twt_32, tvb, offset,
16238 len, ENC_LITTLE_ENDIAN0x80000000);
16239 break;
16240 case 2:
16241 len = 6;
16242 proto_tree_add_item(tree, hf_ieee80211_s1g_twt_next_twt_48, tvb, offset,
16243 len, ENC_LITTLE_ENDIAN0x80000000);
16244 break;
16245 case 3:
16246 len = 8;
16247 proto_tree_add_item(tree, hf_ieee80211_s1g_twt_next_twt_64, tvb, offset,
16248 len, ENC_LITTLE_ENDIAN0x80000000);
16249 break;
16250 }
16251
16252 offset += len;
16253 }
16254
16255 return offset - start;
16256}
16257
16258static unsigned
16259add_ff_s1g_twt_setup(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16260{
16261 const uint8_t ids[] = { TAG_TWT216 };
16262 unsigned start = offset;
16263
16264 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
16265
16266 return offset - start;
16267}
16268
16269static int * const ieee80211_twt_individual_flow[] = {
16270 &hf_ieee80211_twt_individual_flow_id,
16271 &hf_ieee80211_twt_individual_reserved,
16272 &hf_ieee80211_twt_neg_type,
16273 &hf_ieee80211_twt_bcast_teardown_all_twt,
16274 NULL((void*)0),
16275};
16276static int * const ieee80211_twt_bcast_flow[] = {
16277 &hf_ieee80211_twt_bcast_id,
16278 &hf_ieee80211_twt_neg_type,
16279 &hf_ieee80211_twt_bcast_teardown_all_twt,
16280 NULL((void*)0),
16281};
16282static int * const ieee80211_twt_neg_type2[] = {
16283 &hf_ieee80211_twt_neg_type2_reserved1,
16284 &hf_ieee80211_twt_neg_type,
16285 &hf_ieee80211_twt_neg_type2_reserved2,
16286 NULL((void*)0),
16287};
16288static int * const ieee80211_twt_teardown_all[] = {
16289 &hf_ieee80211_twt_bcast_twt_id_reserved,
16290 &hf_ieee80211_twt_bcast_neg_type_reserved,
16291 &hf_ieee80211_twt_bcast_teardown_all_twt,
16292 NULL((void*)0),
16293};
16294
16295static unsigned
16296add_ff_s1g_twt_teardown(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16297{
16298 uint8_t twt_flow_id = tvb_get_uint8(tvb, offset);
16299
16300 // Bit 7 is means Teardown All TWT, and the other fields are reserved
16301 if (twt_flow_id & 0x80) {
16302 proto_tree_add_bitmask(tree, tvb, offset,
16303 hf_ieee80211_twt_bcast_teardown_all,
16304 ett_twt_tear_down_tree,
16305 ieee80211_twt_teardown_all,
16306 ENC_NA0x00000000);
16307 return 1;
16308 }
16309
16310 // Bits 5 and 6 are the negotiation type - See ieee80211.ax/D3.0 9.6.25.9
16311 switch ((twt_flow_id & 0x60) >> 5) {
16312 case 2:
16313 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16314 hf_ieee80211_twt_bcast_flow,
16315 ett_twt_tear_down_tree, ieee80211_twt_neg_type2,
16316 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16317 break;
16318
16319 case 3:
16320 // According to 11ax, first 5 bits are the BCAST TWT flow ID
16321 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16322 hf_ieee80211_twt_bcast_flow,
16323 ett_twt_tear_down_tree, ieee80211_twt_bcast_flow,
16324 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16325 break;
16326 case 0:
16327 case 1:
16328 // According to 11ah / 11ax, first 3 bits are the UCAST TWT flow ID
16329 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16330 hf_ieee80211_twt_individual_flow,
16331 ett_twt_tear_down_tree, ieee80211_twt_individual_flow,
16332 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16333 break;
16334 default:
16335 proto_tree_add_expert(tree, pinfo, &ei_ieee80211_twt_tear_down_bad_neg_type,
16336 tvb, offset, tvb_reported_length_remaining(tvb, offset));
16337 }
16338
16339 // The TWT Flow ID size
16340 return 1;
16341}
16342
16343static unsigned
16344add_ff_action_s1g(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16345{
16346 unsigned start = offset;
16347 uint8_t s1g_action;
16348
16349 offset += add_ff_category_code(tree, tvb, pinfo, offset);
16350
16351 s1g_action = tvb_get_uint8(tvb, offset);
16352 offset += add_ff_s1g_action(tree, tvb, pinfo, offset);
16353
16354 switch(s1g_action) {
16355 case S1G_ACT_AID_SWITCH_REQUEST0:
16356 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16357 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16358 break;
16359 case S1G_ACT_AID_SWITCH_RESPONSE1:
16360 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16361 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16362 break;
16363 case S1G_ACT_SYNC_CONTROL2:
16364 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16365 offset += add_ff_sync_control(tree, tvb, pinfo, offset);
16366 break;
16367 case S1G_ACT_STA_INFO_ANNOUNCE3:
16368 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16369 break;
16370 case S1G_ACT_EDCA_PARAM_SET4:
16371 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16372 break;
16373 case S1G_ACT_EL_OPERATION5:
16374 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16375 break;
16376 case S1G_ACT_TWT_SETUP6:
16377 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16378 offset += add_ff_s1g_twt_setup(tree, tvb, pinfo, offset);
16379 break;
16380 case S1G_ACT_TWT_TEARDOWN7:
16381 offset += add_ff_s1g_twt_teardown(tree, tvb, pinfo, offset);
16382 break;
16383 case S1G_ACT_SECT_GROUP_ID_LIST8:
16384 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16385 break;
16386 case S1G_ACT_SECT_ID_FEEDBACK9:
16387 offset += add_ff_sector_id_index(tree, tvb, pinfo, offset);
16388 break;
16389 case S1G_ACT_TWT_INFORMATION11:
16390 offset += add_ff_twt_information(tree, tvb, pinfo, offset);
16391 break;
16392 default:
16393 break;
16394 }
16395
16396 return offset - start;
16397}
16398
16399static unsigned
16400add_ff_action_protected_s1g(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16401{
16402 unsigned start = offset;
16403 uint8_t s1g_action;
16404
16405 offset += add_ff_category_code(tree, tvb, pinfo, offset);
16406
16407 s1g_action = tvb_get_uint8(tvb, offset);
16408 offset += add_ff_prot_s1g_action(tree, tvb, pinfo, offset);
16409
16410 switch(s1g_action) {
16411 case PROT_S1G_ACT_REACH_ADDR_UPDATE0:
16412 case PROT_S1G_ACT_RELAY_ACTIVATE_REQ1:
16413 case PROT_S1G_ACT_RELAY_ACTIVATE_RESP2:
16414 case PROT_S1G_ACT_HEADER_COMPRESSION3:
16415 // TODO
16416 break;
16417 case PROT_S1G_ACT_TWT_SETUP4:
16418 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16419 offset += add_ff_s1g_twt_setup(tree, tvb, pinfo, offset);
16420 break;
16421 case PROT_S1G_ACT_TWT_TEARDOWN5:
16422 offset += add_ff_s1g_twt_teardown(tree, tvb, pinfo, offset);
16423 break;
16424 case PROT_S1G_ACT_TWT_INFORMATION6:
16425 offset += add_ff_twt_information(tree, tvb, pinfo, offset);
16426 break;
16427 case PROT_S1G_ACT_AID_SWITCH_REQUEST7:
16428 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16429 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16430 break;
16431 case PROT_S1G_ACT_AID_SWITCH_RESPONSE8:
16432 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16433 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16434 break;
16435 case PROT_S1G_ACT_SYNC_CONTROL9:
16436 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16437 offset += add_ff_sync_control(tree, tvb, pinfo, offset);
16438 break;
16439 case PROT_S1G_ACT_STA_INFO_ANNOUNCE10:
16440 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16441 break;
16442 case PROT_S1G_ACT_EDCA_PARAM_SET11:
16443 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16444 break;
16445 case PROT_S1G_ACT_EL_OPERATION12:
16446 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16447 break;
16448 case PROT_S1G_ACT_SECT_GROUP_ID_LIST13:
16449 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16450 break;
16451 case PROT_S1G_ACT_SECT_ID_FEEDBACK14:
16452 offset += add_ff_sector_id_index(tree, tvb, pinfo, offset);
16453 break;
16454 default:
16455 break;
16456 }
16457
16458 return offset - start;
16459}
16460
16461#define HE_COMPRESSED_BEAMFORMING_AND_CQI0 0
16462#define HE_QUIET_TIME_PERIOD1 1
16463
16464static const range_string he_action_rvals[] = {
16465 { HE_COMPRESSED_BEAMFORMING_AND_CQI0, HE_COMPRESSED_BEAMFORMING_AND_CQI0,
16466 "HE Compressed Beamforming And CQI" },
16467 { HE_QUIET_TIME_PERIOD1, HE_QUIET_TIME_PERIOD1,
16468 "Quiet Time Period" },
16469 { HE_QUIET_TIME_PERIOD1 + 1, 255, "Reserved" },
16470 { 0, 0, NULL((void*)0) }
16471};
16472
16473#define HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0 0
16474
16475static const range_string protected_he_action_rvals[] = {
16476 { HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0, HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0,
16477 "HE BSS Color Change Announcement" },
16478 { HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0 + 1, 255, "Reserved" },
16479 { 0, 0, NULL((void*)0) }
16480};
16481
16482#define EHT_TID_LINK_MAP_REQ0 0
16483#define EHT_TID_LINK_MAP_RESP1 1
16484#define EHT_TID_LINK_MAP_TEAR_DOWN2 2
16485#define EHT_EPCS_PRIO_ACCESS_REQ3 3
16486#define EHT_EPCS_PRIO_ACCESS_RESP4 4
16487#define EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5 5
16488#define EHT_EML_OP_MODE_NOTIFICATION6 6
16489#define EHT_LINK_RECOMMENDATION7 7
16490#define EHT_MULTI_LINK_OP_UPDATE_REQ8 8
16491#define EHT_MULTI_LINK_OP_UPDATE_RESP9 9
16492#define EHT_LINK_RECONFIG_NOTIFY10 10
16493#define EHT_LINK_RECONFIG_REQ11 11
16494#define EHT_LINK_RECONFIG_RESP12 12
16495
16496static const range_string protected_eht_action_rvals[] = {
16497 { EHT_TID_LINK_MAP_REQ0, EHT_TID_LINK_MAP_REQ0,
16498 "EHT TID-to-Link Mapping Request" },
16499 { EHT_TID_LINK_MAP_RESP1, EHT_TID_LINK_MAP_RESP1,
16500 "EHT TID-to-Link Mapping Response" },
16501 { EHT_TID_LINK_MAP_TEAR_DOWN2, EHT_TID_LINK_MAP_TEAR_DOWN2,
16502 "EHT TID-to-Link Mapping Teardown" },
16503 { EHT_EPCS_PRIO_ACCESS_REQ3, EHT_EPCS_PRIO_ACCESS_REQ3,
16504 "EHT EPCS Priority Access Request" },
16505 { EHT_EPCS_PRIO_ACCESS_RESP4, EHT_EPCS_PRIO_ACCESS_RESP4,
16506 "EHT EPCS Priority Access Response" },
16507 { EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5, EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5,
16508 "EHT EPCS Priority Access Teardown" },
16509 { EHT_EML_OP_MODE_NOTIFICATION6, EHT_EML_OP_MODE_NOTIFICATION6,
16510 "EHT EML Operating Mode Notification" },
16511 { EHT_LINK_RECOMMENDATION7, EHT_LINK_RECOMMENDATION7,
16512 "EHT Link Recommendation" },
16513 { EHT_MULTI_LINK_OP_UPDATE_REQ8, EHT_MULTI_LINK_OP_UPDATE_REQ8,
16514 "EHT Multi-Link Operation Update Request" },
16515 { EHT_MULTI_LINK_OP_UPDATE_RESP9, EHT_MULTI_LINK_OP_UPDATE_RESP9,
16516 "EHT Multi-Link Operation Update Response" },
16517 { EHT_LINK_RECONFIG_NOTIFY10, EHT_LINK_RECONFIG_NOTIFY10,
16518 "EHT Link Reconfiguration Notify" },
16519 { EHT_LINK_RECONFIG_REQ11, EHT_LINK_RECONFIG_REQ11,
16520 "EHT Link Reconfiguration Request" },
16521 { EHT_LINK_RECONFIG_RESP12, EHT_LINK_RECONFIG_RESP12,
16522 "EHT Link Reconfiguration Response" },
16523 { EHT_LINK_RECONFIG_RESP12 + 1, 255, "Reserved" },
16524 { 0, 0, NULL((void*)0) }
16525};
16526
16527/*
16528 * This currently only works for SU, 20MHz, 40MHz and 80MHz and grouping 4 and 16.
16529 */
16530struct scidx_start_end {
16531 int start;
16532 int end;
16533};
16534
16535#define N_SCIDX_20MHZ_NG49 9
16536static const struct scidx_start_end scidx_20MHz_Ng4[N_SCIDX_20MHZ_NG49] = {
16537 { -122, -96 },
16538 { -96, -68 },
16539 { -68, -40 },
16540 { -44, -16 },
16541 { -16, 16 },
16542 { 16, 44 },
16543 { 40, 68 },
16544 { 68, 96 },
16545 { 96, 122 }
16546};
16547
16548#define N_SCIDX_20MHZ_NG169 9
16549static const struct scidx_start_end scidx_20MHz_Ng16[9] = {
16550 { -122, -84 },
16551 { -96, -64 },
16552 { -80, -32 },
16553 { -52, -4 },
16554 { -20, 20 },
16555 { 4, 52 },
16556 { 32, 80 },
16557 { 64, 96 },
16558 { 84, 122 }
16559};
16560
16561#define N_SCIDX_40MHZ_NG418 18
16562static const struct scidx_start_end scidx_40MHz_Ng4[N_SCIDX_40MHZ_NG418] = {
16563 { -500 + 256, -472 + 256 },
16564 { -476 + 256, -448 + 256 },
16565 { -488 + 256, -420 + 256 },
16566 { -420 + 256, -392 + 256 },
16567 { -392 + 256, -364 + 256 },
16568 { -368 + 256, -340 + 256 },
16569 { -340 + 256, -312 + 256 },
16570 { -312 + 256, -284 + 256 },
16571 { -288 + 256, -260 + 256 },
16572 { 260 - 256, 288 - 256 },
16573 { 284 - 256, 312 - 256 },
16574 { 312 - 256, 340 - 256 },
16575 { 340 - 256, 368 - 256 },
16576 { 364 - 256, 392 - 256 },
16577 { 392 - 256, 420 - 256 },
16578 { 420 - 256, 448 - 256 },
16579 { 448 - 256, 476 - 256 },
16580 { 472 - 256, 500 - 256 }
16581};
16582
16583#define N_SCIDX_40MHZ_NG1618 18
16584static const struct scidx_start_end scidx_40MHz_Ng16[N_SCIDX_40MHZ_NG1618] = {
16585 { -500 + 256, -468 + 256 },
16586 { -484 + 256, -436 + 256 },
16587 { -452 + 256, -420 + 256 },
16588 { -420 + 256, -388 + 256 },
16589 { -404 + 256, -356 + 256 },
16590 { -372 + 256, -340 + 256 },
16591 { -340 + 256, -308 + 256 },
16592 { -324 + 256, -276 + 256 },
16593 { -292 + 256, -260 + 245 },
16594 { 260 - 256, 292 - 256 },
16595 { 276 - 256, 324 - 256 },
16596 { 308 - 256, 340 - 256 },
16597 { 340 - 256, 322 - 256 },
16598 { 356 - 256, 404 - 256 },
16599 { 388 - 256, 420 - 256 },
16600 { 420 - 256, 452 - 256 },
16601 { 436 - 256, 484 - 256 },
16602 { 468 - 256, 500 - 256 }
16603};
16604
16605#define N_SCIDX_80MHZ_NG437 37
16606static const struct scidx_start_end scidx_80MHz_Ng4[N_SCIDX_80MHZ_NG437] = {
16607 { -500, -472 },
16608 { -476, -448 },
16609 { -448, -420 },
16610 { -420, -392 },
16611 { -392, -364 },
16612 { -368, -340 },
16613 { -340, -312 },
16614 { -312, -284 },
16615 { -288, -260 },
16616 { -260, -232 },
16617 { -232, -204 },
16618 { -204, -176 },
16619 { -180, -152 },
16620 { -152, -124 },
16621 { -124, -96 },
16622 { -100, -72 },
16623 { -72, -44 },
16624 { -44, -16 },
16625 { -16, 16 },
16626 { 16, 44 },
16627 { 44, 72 },
16628 { 72, 100 },
16629 { 96, 124 },
16630 { 124, 152 },
16631 { 152, 180 },
16632 { 176, 204 },
16633 { 204, 232 },
16634 { 232, 260 },
16635 { 260, 288 },
16636 { 284, 312 },
16637 { 312, 340 },
16638 { 340, 368 },
16639 { 364, 392 },
16640 { 392, 420 },
16641 { 420, 448 },
16642 { 448, 476 },
16643 { 472, 500 }
16644};
16645
16646#define N_SCIDX_80MHZ_NG1637 37
16647static const struct scidx_start_end scidx_80MHz_Ng16[N_SCIDX_80MHZ_NG1637] = {
16648 { -500, -468 },
16649 { -484, -436 },
16650 { -452, -420 },
16651 { -420, -388 },
16652 { -404, -356 },
16653 { -372, -340 },
16654 { -340, -308 },
16655 { -324, -276 },
16656 { -292, -260 },
16657 { -260, -228 },
16658 { -244, -196 },
16659 { -212, -164 },
16660 { -180, -148 },
16661 { -164, -116 },
16662 { -132, -84 },
16663 { -100, -68 },
16664 { -84, -36 },
16665 { -52, -4 },
16666 { -20, 20 },
16667 { 4, 52 },
16668 { 36, 84 },
16669 { 68, 100 },
16670 { 84, 132 },
16671 { 116, 164 },
16672 { 148, 180 },
16673 { 164, 212 },
16674 { 196, 244 },
16675 { 228, 260 },
16676 { 260, 292 },
16677 { 276, 324 },
16678 { 308, 340 },
16679 { 340, 372 },
16680 { 356, 404 },
16681 { 388, 420 },
16682 { 420, 452 },
16683 { 436, 484 },
16684 { 468, 500 },
16685};
16686
16687#define SU_FEEDBACK(0) (0)
16688#define MU_FEEDBACK(1) (1)
16689#define CQI_FEEDBACK(2) (2)
16690#define RESERVED_FEEDBACK(3) (3)
16691
16692#define BW_20MHz(0) (0)
16693#define BW_40MHz(1) (1)
16694#define BW_80MHz(2) (2)
16695#define BW_160MHz(3) (3)
16696
16697#define SCIDX_END_SENTINAL(0x80000000) (0x80000000)
16698
16699static int
16700next_he_scidx(int scidx, int bw _U___attribute__((unused)), int grouping _U___attribute__((unused)), int feedback _U___attribute__((unused)),
16701 int ru_start_index, int ru_end_index)
16702{
16703 int incr = 4;
16704
16705 /*
16706 * We need to check the correct bw value to determine if we have hit
16707 * the end of the range of SCIDXes.
16708 */
16709 switch (bw) {
16710 case BW_20MHz(0):
16711 if (grouping == 0) {
16712 if (ru_end_index >= N_SCIDX_20MHZ_NG49 ||
16713 scidx == scidx_20MHz_Ng4[ru_end_index].end) /* we returned the max */
16714 return SCIDX_END_SENTINAL(0x80000000);
16715 } else {
16716 if (ru_end_index >= N_SCIDX_20MHZ_NG169 ||
16717 scidx == scidx_20MHz_Ng16[ru_end_index].end)
16718 return SCIDX_END_SENTINAL(0x80000000);
16719 }
16720 break;
16721 case BW_40MHz(1):
16722 if (grouping == 0) {
16723 if (ru_end_index >= N_SCIDX_40MHZ_NG418 ||
16724 scidx == scidx_40MHz_Ng4[ru_end_index].end)
16725 return SCIDX_END_SENTINAL(0x80000000);
16726 } else {
16727 if (ru_end_index >= N_SCIDX_40MHZ_NG1618 ||
16728 scidx == scidx_40MHz_Ng16[ru_end_index].end)
16729 return SCIDX_END_SENTINAL(0x80000000);
16730 }
16731 break;
16732 case BW_80MHz(2):
16733 if (grouping == 0) {
16734 if (ru_end_index >= N_SCIDX_80MHZ_NG437 ||
16735 scidx == scidx_80MHz_Ng4[ru_end_index].end)
16736 return SCIDX_END_SENTINAL(0x80000000);
16737 } else {
16738 if (ru_end_index >= N_SCIDX_80MHZ_NG1637 ||
16739 scidx == scidx_80MHz_Ng16[ru_end_index].end)
16740 return SCIDX_END_SENTINAL(0x80000000);
16741 }
16742 break;
16743 case BW_160MHz(3):
16744 return SCIDX_END_SENTINAL(0x80000000);
16745 }
16746
16747 /*
16748 * Check if this is the first time though and figure out the starting
16749 * SCIDX.
16750 */
16751 if (scidx == (int)SCIDX_END_SENTINAL(0x80000000))
16752 switch (bw) {
16753 case BW_20MHz(0):
16754 if (grouping == 0) {
16755 if (ru_start_index >= N_SCIDX_20MHZ_NG49)
16756 return SCIDX_END_SENTINAL(0x80000000);
16757 else
16758 return scidx_20MHz_Ng4[ru_start_index].start;
16759 } else {
16760 if (ru_start_index >= N_SCIDX_20MHZ_NG169)
16761 return SCIDX_END_SENTINAL(0x80000000);
16762 else
16763 return scidx_20MHz_Ng16[ru_start_index].start;
16764 }
16765 case BW_40MHz(1):
16766 if (grouping == 0) {
16767 if (ru_start_index >= N_SCIDX_40MHZ_NG418)
16768 return SCIDX_END_SENTINAL(0x80000000);
16769 else
16770 return scidx_40MHz_Ng4[ru_start_index].start;
16771 } else {
16772 if (ru_start_index >= N_SCIDX_40MHZ_NG1618)
16773 return SCIDX_END_SENTINAL(0x80000000);
16774 else
16775 return scidx_40MHz_Ng16[ru_start_index].start;
16776 }
16777 case BW_80MHz(2):
16778 if (grouping == 0) {
16779 if (ru_start_index >= N_SCIDX_80MHZ_NG437)
16780 return SCIDX_END_SENTINAL(0x80000000);
16781 else
16782 return scidx_80MHz_Ng4[ru_start_index].start;
16783 } else {
16784 if (ru_start_index >= N_SCIDX_80MHZ_NG1637)
16785 return SCIDX_END_SENTINAL(0x80000000);
16786 else
16787 return scidx_80MHz_Ng16[ru_start_index].start;
16788 }
16789 case BW_160MHz(3):
16790 return SCIDX_END_SENTINAL(0x80000000);
16791 }
16792
16793 /*
16794 * for BW_20MHz it is more complex, and the start and end sets have an
16795 * increment of 2, and around zero they go -4, -2, 2, 4 as well.
16796 */
16797 if (bw == BW_20MHz(0)) {
16798 if (grouping == 0) {
16799 if (scidx == -122)
16800 return -120;
16801 if (scidx == -4)
16802 return -2;
16803 if (scidx == 2)
16804 return 4;
16805 if (scidx == 120)
16806 return 122;
16807 } else {
16808 if (scidx == -122)
16809 return -116;
16810 if (scidx == -4)
16811 return -2;
16812 if (scidx == -2)
16813 return 2;
16814 if (scidx == 2)
16815 return 4;
16816 if (scidx == 116)
16817 return 122;
16818 }
16819 }
16820
16821 if (grouping == 1)
16822 incr = 16;
16823
16824 scidx += incr;
16825
16826 if (scidx == 0) /* Not sure if this is needed */
16827 scidx += incr;
16828
16829 return scidx;
16830}
16831
16832/*
16833 * This might have a problem if there are not enough bits in the TVB.
16834 * Will only handle a limited number of bits.
16835 */
16836static uint16_t
16837he_get_bits(tvbuff_t *tvb, int bit_offset, int bit_len)
16838{
16839 uint32_t bits;
16840 int byte_offset = bit_offset / 8;
16841 int bit_start = bit_offset % 8;
16842 int bit_mask = (1 << bit_len) - 1; /* Select that many bits */
16843 int remaining_length = tvb_reported_length_remaining(tvb, byte_offset);
16844
16845 if (remaining_length >= 3)
16846 bits = tvb_get_letoh24(tvb, byte_offset);
16847 else if (remaining_length == 2)
16848 bits = tvb_get_letohs(tvb, byte_offset);
16849 else
16850 bits = tvb_get_uint8(tvb, byte_offset);
16851
16852 bits = bits >> bit_start;
16853
16854 return bits & bit_mask;
16855}
16856
16857static int
16858dissect_he_feedback_matrix(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
16859 int offset, int bit_offset, int scidx,
16860 int nr, int nc, int phi_bits, int psi_bits,
16861 int hf)
16862{
16863 int ri, ci;
16864 int start_bit_offset = bit_offset;
16865 int start_offset = offset;
16866 wmem_strbuf_t *angles = wmem_strbuf_new(pinfo->pool, NULL((void*)0));
16867
16868 if (nc == nr) /* If they are the same, reduce Nc by one */
16869 nc -= 1;
16870
16871 wmem_strbuf_append_printf(angles, "%d", scidx);
16872 /* Reset to the start bit offset */
16873 bit_offset = start_bit_offset;
16874
16875 for (ci = 1; ci <= nc; ci++) {
16876 for (ri = ci; ri < nr; ri++) {
16877 int angle = he_get_bits(tvb, bit_offset, phi_bits);
16878 wmem_strbuf_append_printf(angles, ", φ%d%d:%d", ri, ci, angle);
16879 bit_offset += phi_bits;
16880 }
16881 for (ri = ci + 1; ri <= nr; ri++) {
16882 int angle = he_get_bits(tvb, bit_offset, psi_bits);
16883 wmem_strbuf_append_printf(angles, ", ψ%d%d:%d", ri, ci, angle);
16884 bit_offset += psi_bits;
16885 }
16886 }
16887
16888 /* Update this */
16889 proto_tree_add_string(tree, hf, tvb, offset,
16890 ((start_bit_offset + 7) / 8) - start_offset,
16891 wmem_strbuf_get_str(angles));
16892
16893 return bit_offset;
16894}
16895
16896static int * const he_mimo_control_headers[] = {
16897 &hf_ieee80211_he_mimo_control_nc_index,
16898 &hf_ieee80211_he_mimo_control_nr_index,
16899 &hf_ieee80211_he_mimo_control_bw,
16900 &hf_ieee80211_he_mimo_control_grouping,
16901 &hf_ieee80211_he_mimo_control_codebook_info,
16902 &hf_ieee80211_he_mimo_control_feedback_type,
16903 &hf_ieee80211_he_mimo_control_remaining_feedback_segs,
16904 &hf_ieee80211_he_mimo_control_first_feedback_seg,
16905 &hf_ieee80211_he_mimo_control_ru_start_index,
16906 &hf_ieee80211_he_mimo_control_ru_end_index,
16907 &hf_ieee80211_he_mimo_control_sounding_dialog_token_num,
16908 &hf_ieee80211_he_mimo_control_reserved,
16909 NULL((void*)0)
16910};
16911
16912/*
16913 * Handle compressed beamforming matrices and CQI
16914 */
16915static unsigned
16916dissect_compressed_beamforming_and_cqi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16917{
16918 int byte_count = 0;
16919 uint64_t mimo_cntl = tvb_get_letoh40(tvb, offset);
16920 int nc = 0, nr = 0, i;
16921 int bw, grouping, codebook, feedback, bit_offset, scidx;
16922 int phi_bits = 0, psi_bits = 0;
16923 proto_tree *snr_tree = NULL((void*)0), *feedback_tree = NULL((void*)0);
16924 int start_offset;
16925 int ru_start_index, ru_end_index;
16926
16927 nc = (int)((mimo_cntl & 0x07) + 1);
16928 nr = (int)(((mimo_cntl >> 3) & 0x07) + 1);
16929 bw = (int)((mimo_cntl >> 6) & 0x03);
16930 grouping = (int)((mimo_cntl >> 8) & 0x01);
16931 codebook = (int)((mimo_cntl >> 9) & 0x01);
16932 feedback = (int)((mimo_cntl >> 10) & 0x03);
16933 ru_start_index = (int)((mimo_cntl >> 16) & 0x7F);
16934 ru_end_index = (int)((mimo_cntl >> 23) & 0x7F);
16935
16936 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16937 hf_ieee80211_he_mimo_control_field, ett_ff_he_mimo_control,
16938 he_mimo_control_headers, ENC_LITTLE_ENDIAN0x80000000,
16939 BMT_NO_APPEND0x01);
16940 offset += 5;
16941
16942 snr_tree = proto_tree_add_subtree(tree, tvb, offset, nc,
16943 ett_ff_he_mimo_beamforming_report_snr, NULL((void*)0),
16944 "Average Signal to Noise Ratio");
16945
16946 for (i = 0; i < nc; i++) {
16947 int8_t snr = tvb_get_int8(tvb, offset);
16948
16949 proto_tree_add_int_format(snr_tree,
16950 hf_ieee80211_he_compressed_beamforming_report_snr, tvb, offset, 1,
16951 snr, "Stream %d: %s%0.2fdB (0x%02x)", i, (snr == 127 ? ">=" :
16952 (snr == -128 ? "<=" : "")),
16953 (float)((float)88 + snr)/4,
16954 (uint8_t)snr);
16955 offset++;
16956 }
16957
16958 /*
16959 * The rest of the data consists of the compressed beamforming matrices, one
16960 * for each SCIDX per group. Each matrix consists of phi and psi angles
16961 * encoded using the number of bits specified using the codebook field.
16962 *
16963 * The matrices contain a number entries related to Nr -1 & Nc except when
16964 * Nr == Nc, and then it is Nr -1 x Nc -1, with Nr - 1 phi angles, Nc - 1
16965 * psi angles, Nr - 2 phi angles, Nc - 2 psi angles ...
16966 */
16967 if (feedback == 0) { /* SU */
16968 if (codebook == 0) {
16969 psi_bits = 2; phi_bits = 4;
16970 } else {
16971 psi_bits = 4; phi_bits = 6;
16972 }
16973 } else if (feedback == 1) { /* MU */
16974 if (grouping == 1) {
16975 psi_bits = 9; phi_bits = 7;
16976 } else {
16977 if (codebook == 0) {
16978 psi_bits = 5; phi_bits = 7;
16979 } else {
16980 psi_bits = 7; phi_bits = 9;
16981 }
16982 }
16983 } /* DO something about CQI etc. */
16984
16985 feedback_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
16986 ett_ff_he_mimo_feedback_matrices, NULL((void*)0),
16987 "Feedback Matrices");
16988
16989 start_offset = offset;
16990 bit_offset = offset * 8;
16991 scidx = SCIDX_END_SENTINAL(0x80000000);
16992 while ((scidx = next_he_scidx(scidx, bw, grouping, feedback,
16993 ru_start_index, ru_end_index)) != (int)SCIDX_END_SENTINAL(0x80000000)) {
16994 int prev_bit_offset = bit_offset;
16995 bit_offset = dissect_he_feedback_matrix(feedback_tree, tvb, pinfo, offset,
16996 bit_offset, scidx, nr, nc, phi_bits, psi_bits,
16997 hf_ieee80211_he_compressed_beamform_scidx);
16998 if (bit_offset <= prev_bit_offset) {
16999 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
17000 break;
17001 }
17002
17003 offset = bit_offset / 8;
17004 }
17005
17006 offset = (bit_offset + 7) / 8;
17007 proto_item_set_len(feedback_tree, offset - start_offset);
17008
17009 /* Sometimes the FCS is in the buffer as well ... */
17010 byte_count = tvb_reported_length_remaining(tvb, offset);
17011 if (byte_count > 0)
17012 offset += byte_count; /* Should fix the real problem */
17013
17014 return offset;
17015}
17016
17017enum quiet_time_period_control {
17018 QTP_CONTROL_SETUP = 0,
17019 QTP_CONTROL_REQUEST = 1,
17020 QTP_CONTROL_RESPONSE = 2,
17021};
17022
17023static const range_string quiet_time_period_control_rvals[] = {
17024 { QTP_CONTROL_SETUP, QTP_CONTROL_SETUP, "Quiet Time Period Setup" },
17025 { QTP_CONTROL_REQUEST, QTP_CONTROL_REQUEST, "Quiet Time Period Request" },
17026 { QTP_CONTROL_RESPONSE, QTP_CONTROL_RESPONSE, "Quiet Time Period Response" },
17027 { QTP_CONTROL_RESPONSE +1 , 255, "Reserved" },
17028 { 0, 0, NULL((void*)0) }
17029};
17030
17031static void
17032dissect_bss_color_change(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17033proto_tree *tree, int offset, int len _U___attribute__((unused)));
17034
17035static unsigned
17036dissect_quiet_time_period(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17037proto_tree *tree, int offset, int len _U___attribute__((unused)))
17038{
17039 uint8_t control = tvb_get_uint8(tvb, offset);
17040
17041 proto_tree_add_item(tree, hf_ieee80211_he_qtp_control, tvb, offset, 1, ENC_NA0x00000000);
17042 offset += 1;
17043
17044 switch (control)
17045 {
17046 case QTP_CONTROL_SETUP:
17047 proto_tree_add_item(tree, hf_ieee80211_he_qtp_setup_quiet_period_duration, tvb, offset,
17048 1, ENC_NA0x00000000);
17049 offset += 1;
17050 proto_tree_add_item(tree, hf_ieee80211_he_qtp_setup_srv_specific_identif, tvb, offset,
17051 2, ENC_LITTLE_ENDIAN0x80000000);
17052 offset += 2;
17053 break;
17054
17055 case QTP_CONTROL_REQUEST:
17056 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_dialog_token, tvb, offset, 2,
17057 ENC_LITTLE_ENDIAN0x80000000);
17058 offset += 2;
17059 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_quiet_period_offset, tvb, offset,
17060 1, ENC_NA0x00000000);
17061 offset += 1;
17062 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_quiet_period_duration, tvb, offset,
17063 2, ENC_LITTLE_ENDIAN0x80000000);
17064 offset += 2;
17065 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_quiet_period_interval, tvb, offset,
17066 1, ENC_NA0x00000000);
17067 offset += 1;
17068 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_repetition_count, tvb, offset, 1,
17069 ENC_NA0x00000000);
17070 offset += 1;
17071 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_srv_specific_identif, tvb, offset,
17072 2, ENC_LITTLE_ENDIAN0x80000000);
17073 offset += 2;
17074 break;
17075
17076 case QTP_CONTROL_RESPONSE:
17077 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_dialog_token, tvb, offset, 2,
17078 ENC_LITTLE_ENDIAN0x80000000);
17079 offset += 2;
17080 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_status_code, tvb, offset, 1,
17081 ENC_NA0x00000000);
17082 offset += 1;
17083 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_quiet_period_offset, tvb, offset,
17084 1, ENC_NA0x00000000);
17085 offset += 1;
17086 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_quiet_period_duration, tvb, offset,
17087 2, ENC_LITTLE_ENDIAN0x80000000);
17088 offset += 2;
17089 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_quiet_period_interval, tvb, offset,
17090 1, ENC_NA0x00000000);
17091 offset += 1;
17092 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_repetition_count, tvb, offset,
17093 1, ENC_NA0x00000000);
17094 offset += 1;
17095 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_srv_specific_identif, tvb, offset,
17096 2, ENC_LITTLE_ENDIAN0x80000000);
17097 offset += 2;
17098 break;
17099
17100 default:
17101 /* Reserved */
17102 break;
17103 }
17104
17105 return offset;
17106}
17107
17108static unsigned
17109add_ff_action_he(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17110{
17111 unsigned start = offset;
17112 uint8_t he_action;
17113 uint8_t length;
17114 //uint8_t elem_id, elem_id_extension;
17115 proto_item *item;
17116 proto_tree *subtree;
17117 unsigned int len = tvb_reported_length_remaining(tvb, offset);
17118
17119 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17120
17121 he_action = tvb_get_uint8(tvb, offset);
17122
17123 item = proto_tree_add_item(tree, hf_ieee80211_ff_he_action, tvb, offset, 1, ENC_NA0x00000000);
17124 offset += 1;
17125
17126 subtree = proto_item_add_subtree(item, ett_ff_he_action);
17127
17128
17129 switch (he_action) {
17130 case HE_COMPRESSED_BEAMFORMING_AND_CQI0:
17131 proto_tree_add_uint_format(subtree, hf_ieee80211_he_beamforming_report_len,
17132 tvb, offset, 0, len, "Total length: %u", len);
17133 offset = dissect_compressed_beamforming_and_cqi(subtree, tvb, pinfo, offset);
17134 break;
17135
17136 case HE_QUIET_TIME_PERIOD1:
17137 //elem_id = tvb_get_uint8(tvb, offset);
17138 length = tvb_get_uint8(tvb, offset + 1);
17139 //elem_id_extension = tvb_get_uint8(tvb, offset + 2);
17140 /* Should check following condition?
17141 * elem_id == TAG_ELEMENT_ID_EXTENSION && elem_id_extension == ETAG_QUIET_TIME_PERIOD
17142 */
17143 offset = dissect_quiet_time_period(tvb, pinfo, subtree, offset + 3, length);
17144 break;
17145
17146 default:
17147 break;
17148 }
17149 return offset - start;
17150}
17151
17152static unsigned
17153add_ff_action_protected_he(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17154{
17155 unsigned start = offset;
17156 uint8_t protected_he_action;
17157 uint8_t length;
17158 //uint8_t elem_id, elem_id_extension;
17159 proto_item *item;
17160 proto_tree *subtree;
17161
17162 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17163
17164 protected_he_action = tvb_get_uint8(tvb, offset);
17165
17166 item = proto_tree_add_item(tree, hf_ieee80211_ff_protected_he_action, tvb, offset,
17167 1, ENC_NA0x00000000);
17168 offset += 1;
17169
17170 subtree = proto_item_add_subtree(item, ett_ff_protected_he_action);
17171
17172
17173 switch (protected_he_action) {
17174 case HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0:
17175 //elem_id = tvb_get_uint8(tvb, offset);
17176 length = tvb_get_uint8(tvb, offset + 1);
17177 //elem_id_extension = tvb_get_uint8(tvb, offset + 2);
17178 /* Should check following condition?
17179 * elem_id == TAG_ELEMENT_ID_EXTENSION && elem_id_extension == ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT
17180 */
17181 dissect_bss_color_change(tvb, pinfo, subtree, offset + 3, length);
17182 offset += 5;
17183 break;
17184
17185 default:
17186 break;
17187 }
17188
17189 return offset - start;
17190}
17191
17192static unsigned
17193add_ff_action_protected_ftm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17194{
17195 unsigned start = offset;
17196 uint8_t action;
17197
17198 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17199 action = tvb_get_uint8(tvb, offset);
17200 proto_tree_add_item(tree, hf_ieee80211_ff_protected_ftm_action, tvb, offset, 1, ENC_NA0x00000000);
17201 offset += 1;
17202
17203 col_set_str(pinfo->cinfo, COL_INFO, val_to_str_const(action, protected_ftm_action_vals, "Unknown"));
17204
17205 switch (action) {
17206 case 1:
17207 offset += add_ff_ftm_request(tree, tvb, pinfo, offset);
17208 break;
17209 case 2:
17210 offset += add_ff_ftm(tree, tvb, pinfo, offset);
17211 break;
17212 case 3:
17213 offset += add_ff_lmr_report(tree, tvb, pinfo, offset);
17214 break;
17215 default: /* reserved */
17216 break;
17217 }
17218
17219 return offset - start;
17220}
17221
17222static int * const eht_reconfig_link_id_hdrs[] = {
17223 &hf_ieee80211_eht_reconfig_link_id,
17224 &hf_ieee80211_eht_reconfig_link_id_reserved,
17225 NULL((void*)0)
17226};
17227
17228static unsigned
17229add_ff_count(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
17230{
17231 proto_tree_add_item(tree, hf_ieee80211_ff_count, tvb, offset, 1,
17232 ENC_LITTLE_ENDIAN0x80000000);
17233 return 1;
17234}
17235
17236static unsigned
17237add_ff_action_protected_eht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17238{
17239 unsigned start = offset;
17240 uint8_t protected_eht_action;
17241 proto_item *item;
17242 int len = 0, count, i, id;
17243 uint16_t status;
17244 bool_Bool invalid = false0;
17245 /* Default Extension Element is Multi-Link */
17246 uint8_t ext_ids[1] = {ETAG_MULTI_LINK107};
17247 proto_tree *sub_tree;
17248
17249 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17250
17251 protected_eht_action = tvb_get_uint8(tvb, offset);
17252
17253 item = proto_tree_add_item(tree, hf_ieee80211_ff_protected_eht_action, tvb,
17254 offset, 1, ENC_NA0x00000000);
17255 offset += 1;
17256
17257 switch (protected_eht_action) {
17258 case EHT_TID_LINK_MAP_REQ0:
17259 ext_ids[0] = ETAG_TID_TO_LINK_MAPPING109;
17260 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17261
17262 /*
17263 * Next contains one or two TID-To-Link mappings. We have to look into
17264 * the elements to verify them because we don't have the length of this
17265 * element and there might be other IEs after us.
17266 */
17267 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17268 len = tvb_get_uint8(tvb, offset + 1);
17269 } else {
17270 invalid = true1;
17271 }
17272 if (!invalid && (len >= 1) &&
17273 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17274 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17275 offset += len + 2;
17276 } else {
17277 invalid = true1;
17278 }
17279 if (invalid) {
17280 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17281 "Invalid TID_TO_LINK_MAPPING_REQUEST. "
17282 "There should be one or two Tid-To-Link IEs "
17283 "but none found");
17284 break;
17285 }
17286
17287 len = 0;
17288 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17289 len = tvb_get_uint8(tvb, offset + 1);
17290 }
17291 if ((len >= 1) &&
17292 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17293 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17294 offset += len + 2;
17295 }
17296 break;
17297 case EHT_TID_LINK_MAP_RESP1:
17298 ext_ids[0] = ETAG_TID_TO_LINK_MAPPING109;
17299 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17300
17301 status = tvb_get_ntohs(tvb, offset);
17302 offset += add_ff_status_code(tree, tvb, pinfo, offset);
17303 if (status == 134) {
17304 /* There should be one or two TID-To-Link mappings. */
17305 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17306 len = tvb_get_uint8(tvb, offset + 1);
17307 } else {
17308 invalid = true1;
17309 }
17310 if (!invalid && (len >= 1) &&
17311 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17312 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17313 offset += len + 2;
17314 } else {
17315 invalid = true1;
17316 }
17317 if (invalid) {
17318 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17319 "Invalid TID_TO_LINK_MAPPING_RESPONSE. "
17320 "There should be one or two Tid-To-Link IEs "
17321 "but none found");
17322 break;
17323 }
17324
17325 len = 0;
17326 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17327 len = tvb_get_uint8(tvb, offset + 1);
17328 }
17329 if ((len >= 1) &&
17330 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17331 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17332 offset += len + 2;
17333 }
17334 }
17335 break;
17336 case EHT_TID_LINK_MAP_TEAR_DOWN2:
17337 /* Seems to be nothing to do here */
17338 break;
17339 case EHT_EPCS_PRIO_ACCESS_REQ3:
17340 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17341 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17342 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17343 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));
17344 }
17345 break;
17346 case EHT_EPCS_PRIO_ACCESS_RESP4:
17347 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17348 offset += add_ff_status_code(tree, tvb, pinfo, offset);
17349 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17350 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17351 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));
17352 }
17353 break;
17354 case EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5:
17355 break;
17356 case EHT_EML_OP_MODE_NOTIFICATION6:
17357 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17358 offset += dissect_eht_eml_control_field(tree, tvb, pinfo, offset);
17359 break;
17360 case EHT_LINK_RECOMMENDATION7:
17361 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
17362 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17363 len = tvb_get_uint8(tvb, offset + 1);
17364 } else {
17365 invalid = true1;
17366 }
17367 ext_ids[0] = ETAG_AID_BITMAP134;
17368 if (!invalid && (len >= 1) &&
17369 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17370 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17371 offset += len + 2;
17372 } else {
17373 invalid = true1;
17374 }
17375 if (invalid) {
17376 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17377 "Invalid LINK_RECOMMENDATION. "
17378 "There should be AID_BITMAP element "
17379 "but none found");
17380 break;
17381 }
17382
17383 invalid = false0;
17384 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17385 len = tvb_get_uint8(tvb, offset + 1);
17386 } else {
17387 invalid = true1;
17388 }
17389 ext_ids[0] = ETAG_MULTI_LINK_TRAFFIC110;
17390 if (!invalid && (len >= 1) &&
17391 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17392 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17393 offset += len + 2;
17394 } else {
17395 invalid = true1;
17396 }
17397 if (invalid) {
17398 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17399 "Invalid LINK_RECOMMENDATION. "
17400 "There should be MULTI_LINK_TRAFFIC element "
17401 "but none found");
17402 break;
17403 }
17404 break;
17405 case EHT_MULTI_LINK_OP_UPDATE_REQ8:
17406 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17407 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17408 len = tvb_get_uint8(tvb, offset + 1);
17409 } else {
17410 invalid = true1;
17411 }
17412 if (!invalid && (len >= 1)) {
17413 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17414 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));
17415 } else {
17416 invalid = true1;
17417 }
17418 if (invalid) {
17419 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17420 "Invalid Multi-Link Operation Update Request. "
17421 "There should be Reconf Multi-Link element "
17422 "but none found");
17423 break;
17424 }
17425 break;
17426 case EHT_MULTI_LINK_OP_UPDATE_RESP9:
17427 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17428 offset += add_ff_status_code(tree, tvb, pinfo, offset);
17429 break;
17430 case EHT_LINK_RECONFIG_NOTIFY10:
17431 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17432 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17433 len = tvb_get_uint8(tvb, offset + 1);
17434 } else {
17435 invalid = TRUE(!(0));
17436 }
17437 if (!invalid && (len >= 1)) {
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 } else {
17441 invalid = TRUE(!(0));
17442 }
17443 if (invalid) {
17444 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17445 "Invalid Link Reconfiguration Notify. "
17446 "There should be Reconf Multi-Link element "
17447 "but none found");
17448 break;
17449 }
17450 break;
17451 case EHT_LINK_RECONFIG_REQ11:
17452 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17453 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17454 len = tvb_get_uint8(tvb, offset + 1);
17455 } else {
17456 invalid = TRUE(!(0));
17457 }
17458 if (!invalid && (len >= 1)) {
17459 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17460 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));
17461 } else {
17462 invalid = TRUE(!(0));
17463 }
17464 if (invalid) {
17465 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17466 "Invalid Link Reconfiguration Req. "
17467 "There should be Reconf Multi-Link element "
17468 "but none found");
17469 break;
17470 }
17471 ext_ids[0] = ETAG_OCI54;
17472 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17473 len = tvb_get_uint8(tvb, offset + 1);
17474 } else {
17475 /* OCI element field is optionally present */
17476 break;
17477 }
17478 if (!invalid && (len >= 1) &&
17479 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17480 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0)) > 0)) {
17481 offset += len + 2;
17482 } else {
17483 invalid = TRUE(!(0));
17484 }
17485 if (invalid) {
17486 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17487 "Invalid Link Reconfiguration Req. "
17488 "There should be OCI element but none found");
17489 break;
17490 }
17491 break;
17492 case EHT_LINK_RECONFIG_RESP12:
17493 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17494 count = tvb_get_uint8(tvb, offset);
17495 offset += add_ff_count(tree, tvb, pinfo, offset);
17496 if (count == 0)
17497 break;
17498
17499 sub_tree = proto_tree_add_subtree(tree, tvb, offset, count * 3,
17500 ett_eht_reconfig_status_list, NULL((void*)0),
17501 "Reconfiguration Status List");
17502 for (i = 0; i < count; i++) {
17503 proto_tree_add_bitmask(sub_tree, tvb, offset,
17504 hf_ieee80211_eht_reconfig_link_id_info,
17505 ett_eht_multi_link_common_info_link_id,
17506 eht_reconfig_link_id_hdrs, ENC_NA0x00000000);
17507 offset += 1;
17508 proto_tree_add_item(sub_tree, hf_ieee80211_eht_reconfig_status_code, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17509 offset += 2;
17510 }
17511
17512 if (tvb_captured_length_remaining(tvb, offset) <= 0)
17513 break;
17514
17515 /* Check next is Group Key Data */
17516 id = tvb_get_uint8(tvb, offset);
17517 if (id != 0xdd && id != 0xff) {
17518 sub_tree = proto_tree_add_subtree(tree, tvb, offset, id,
17519 ett_eht_group_key_data, NULL((void*)0),
17520 "Group Key Data");
17521 proto_tree_add_item(sub_tree, hf_ieee80211_eht_group_key_data_length, tvb, offset, 1, ENC_NA0x00000000);
17522 offset += 1;
17523 while (tvb_reported_length_remaining(tvb, offset)) {
17524 id = tvb_get_uint8(tvb, offset);
17525 /* Key Data should be MLO KDEs */
17526 if (id != 0xdd)
17527 break;
17528 offset += add_tagged_field(pinfo, sub_tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
17529 }
17530 }
17531 break;
17532 default:
17533 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17534 "Reserved Protected EHT Action %u",
17535 protected_eht_action);
17536
17537 break;
17538 }
17539
17540 return offset - start;
17541}
17542
17543/*
17544 * Structure for handling the EHT scidx info. Allows for a compact
17545 * representation.
17546 */
17547struct scidx_part {
17548 unsigned start_val; /* What we start at */
17549 bool_Bool use_ng; /* Should we use Ng or the inc next */
17550 unsigned inc; /* The increment when not using Ng */
17551 unsigned stop_val; /* When we should stop */
17552 bool_Bool last_ent; /* This is the last one in the list */
17553};
17554
17555struct scidx_ctx {
17556 uint8_t ru_index;
17557 const struct scidx_part *scidx_array;
17558 uint8_t ng;
17559 bool_Bool just_inited;
17560 unsigned last_val;
17561};
17562
17563static const struct scidx_part ru_242_tone_1_20MHz_ng4[] = {
17564 { -122, false0, 2, -120, false0 },
17565 { -120, true1, 0, -4, false0 },
17566 { -2, false0, 4, 2, false0 },
17567 { 4, true1, 0, 120, false0 },
17568 { 120, false0, 2, 122, true1 }
17569};
17570
17571static const struct scidx_part ru_242_tone_1_20MHz_ng16[] = {
17572 { -122, false0, 6, -116, false0 },
17573 { -116, true1, 0, -4, false0 },
17574 { -2, false0, 4, 2, false0 },
17575 { 4, true1, 0, 116, false0 },
17576 { 116, false0, 6, 122, true1 }
17577};
17578
17579/* Here, there is one per RU index */
17580/*Start, UseNg, Inc,End, last */
17581static const struct scidx_part ru_242_tone_40MHz[] = {
17582 { -244, true1, 0, -4, true1 },
17583 { 4, true1, 0, 244, true1 }
17584};
17585
17586static const struct scidx_part ru_242_tone_80MHz[] = {
17587 { -500, true1, 0, -260, true1 },
17588 { -252, true1, 0, -12, true1 },
17589 { 12, true1, 0, 252, true1 },
17590 { 260, true1, 0, 500, true1 }
17591};
17592
17593static const struct scidx_part ru_242_tone_160MHz[] = {
17594 { -1012, true1, 0, -772, true1 },
17595 { -764, true1, 0, -524, true1 },
17596 { -500, true1, 0, -260, true1 },
17597 { -252, true1, 0, -12, true1 },
17598 { 12, true1, 0, 252, true1 },
17599 { 260, true1, 0, 500, true1 },
17600 { 524, true1, 0, 764, true1 },
17601 { 772, true1, 0, 1012, true1 }
17602};
17603
17604static const struct scidx_part ru_242_tone_320MHz[] = {
17605 { -2036, true1, 0, -1796, true1 },
17606 { -1788, true1, 0, -1548, true1 },
17607 { -1524, true1, 0, -1284, true1 },
17608 { -1276, true1, 0, -1036, true1 },
17609 { -1012, true1, 0, -772, true1 },
17610 { -764, true1, 0, -524, true1 },
17611 { -500, true1, 0, -260, true1 },
17612 { -252, true1, 0, -12, true1 },
17613 { 12, true1, 0, 252, true1 },
17614 { 260, true1, 0, 500, true1 },
17615 { 524, true1, 0, 764, true1 },
17616 { 772, true1, 0, 1012, true1 },
17617 { 1036, true1, 0, 1276, true1 },
17618 { 1284, true1, 0, 1524, true1 },
17619 { 1548, true1, 0, 1788, true1 },
17620 { 1796, true1, 0, 2036, true1 }
17621};
17622
17623/* All these ru_96 tone sets for NG=4 go in pairs. */
17624static const struct scidx_part ru_996_tone_80MHz_ng4[] = {
17625 { -500, false0, 4, -4, false0 },
17626 { 4, false0, 4, 500, true1 }
17627};
17628
17629static const struct scidx_part ru_996_tone_80MHz_ng16[] = {
17630 { -500, true1, 0, -260, false0 },
17631 { -252, true1, 0, -12, false0 },
17632 { -4, false0, 8, 4, false0 },
17633 { 12, true1, 0, 252, false0 },
17634 { 260, true1, 0, 500, true1 }
17635};
17636
17637static const struct scidx_part ru_996_tone_160MHz_ng4[] = {
17638 { -1012, true1, 0, -516, false0 },
17639 { -508, true1, 0, -12, true1 },
17640
17641 { 12, true1, 0, 508, false0 },
17642 { 516, true1, 0, 1012, true1 }
17643};
17644
17645static const struct scidx_part ru_996_tone_160MHz_ng16[] = {
17646 { -1012, true1, 0, -772, false0 },
17647 { -764, true1, 0, -524, false0 },
17648 { -516, false0, 8, -508, false0 },
17649 { -500, true1, 0, -260, false0 },
17650 { -252, true1, 0, -12 , true1 },
17651
17652 { 12, true1, 0, 252, false0 },
17653 { 260, true1, 0, 500, false0 },
17654 { 508, false0, 8, 516, false0 },
17655 { 524, true1, 0, 764, false0 },
17656 { 772, true1, 0, 1012, true1 }
17657};
17658
17659static const struct scidx_part ru_996_tone_320MHz_ng4[] = {
17660 { -2036, true1, 0, -1540, false0 },
17661 { -1532, true1, 0, -1036, true1 },
17662
17663 { -1012, true1, 0, -516, false0 },
17664 { -508, true1, 0, -12, true1 },
17665
17666 { 12, true1, 0, 508, false0 },
17667 { 516, true1, 0, 1012, true1 },
17668
17669 { 1036, true1, 0, 1532, false0 },
17670 { 1540, true1, 0, 2036, true1 }
17671};
17672
17673static const struct scidx_part ru_996_tone_320MHz_ng16[] = {
17674 { -2036, true1, 0, -1796, false0 },
17675 { -1788, true1, 0, -1548, false0 },
17676 { -1540, false0, 8, -1532, false0 },
17677 { -1524, true1, 0, -1284, false0 },
17678 { -1276, true1, 0, -1036, true1 },
17679
17680 { -1012, true1, 0, -772, false0 },
17681 { -764, true1, 0, -524, false0 },
17682 { -516, false0, 8, -508, false0 },
17683 { -500, true1, 0, -260, false0 },
17684 { -252, true1, 0, -12, true1 },
17685
17686 { 12, true1, 0, 252, false0 },
17687 { 260, true1, 0, 500, false0 },
17688 { 508, false0, 8, 516, false0 },
17689 { 524, true1, 0, 764, false0 },
17690 { 772, true1, 0, 1012, true1 },
17691
17692 { 1036, true1, 0, 1276, false0 },
17693 { 1284, true1, 0, 1524, false0 },
17694 { 1532, false0, 8, 1540, false0 },
17695 { 1548, true1, 0, 1788, false0 },
17696 { 1796, true1, 0, 2036, true1 }
17697};
17698
17699
17700static void
17701init_eht_scidx(struct scidx_ctx *ctx, uint8_t ru_index,
17702 const struct scidx_part *scidx_array, uint8_t ng)
17703{
17704 ctx->ru_index = ru_index;
17705 ctx->scidx_array = scidx_array;
17706 ctx->ng = ng;
17707 ctx->just_inited = true1;
17708}
17709
17710/* What about the special 20MHz ones? */
17711/* Figure out the next SCIDX */
17712static bool_Bool
17713next_eht_scidx(struct scidx_ctx *ctx, unsigned *scidx)
17714{
17715 if (ctx->just_inited) {
17716 ctx->last_val = ctx->scidx_array->start_val;
17717 ctx->just_inited = false0;
17718 *scidx = ctx->last_val;
17719 return true1;
17720 }
17721
17722 /* Move to the next val ... but check if it is a short seg first */
17723 if (ctx->last_val == ctx->scidx_array->stop_val) {
17724 if (ctx->scidx_array->last_ent) {
17725 return false0;
17726 } else {
17727 /* Pretend like we just started again */
17728 /* Also, note that the arrays need to be set up correctly */
17729 ctx->scidx_array++;
17730 if (ctx->last_val == ctx->scidx_array->start_val) {
17731 if (ctx->scidx_array->use_ng) {
17732 ctx->last_val += ctx->ng;
17733 } else {
17734 ctx->last_val += ctx->scidx_array->inc;
17735 }
17736 } else {
17737 ctx->last_val = ctx->scidx_array->start_val;
17738 }
17739 *scidx = ctx->last_val;
17740 return true1;
17741 }
17742 }
17743
17744 /*
17745 * If the increment is not ng, then handle that.
17746 */
17747 if (ctx->scidx_array->use_ng) {
17748 ctx->last_val += ctx->ng;
17749 } else {
17750 ctx->last_val += ctx->scidx_array->inc;
17751 }
17752 *scidx = ctx->last_val;
17753
17754 return true1;
17755}
17756
17757static int
17758add_ff_eht_mu_exclusive_20MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17759 int offset, uint8_t nc_index,
17760 uint8_t grouping, uint16_t partial_bw_info _U___attribute__((unused)))
17761{
17762 int start_offset = offset;
17763 unsigned scidx;
17764 struct scidx_ctx scidx_ctx;
17765 uint8_t ng = grouping == 0 ? 4 : 16;
17766 proto_tree *ru_index_tree = NULL((void*)0);
17767 proto_item *ruii = NULL((void*)0);
17768 unsigned ss = 0, get_snr = 1;
17769 int8_t snr = 0, value;
17770
17771 if (ng == 4) {
17772 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng4[0], ng);
17773 } else {
17774 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng16[0], ng);
17775 }
17776
17777 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17778 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17779 &ruii,
17780 "RU Index %d for 20MHz, Partial BW "
17781 "not all one.", 1);
17782 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17783 for (ss = 1; ss <= nc_index; ss++) {
17784 if (get_snr) {
17785 snr = tvb_get_int8(tvb, offset);
17786 offset += 1;
17787 value = snr & 0x0f;
17788 get_snr = 0;
17789 } else {
17790 value = snr >> 4;
17791 get_snr = 1;
17792 }
17793 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17794 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17795 ss, scidx, value);
17796 }
17797 }
17798 proto_item_set_len(ruii, offset - start_offset);
17799 return offset - start_offset;
17800}
17801
17802static int
17803add_ff_eht_mu_exclusive_40MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17804 int offset, uint8_t nc_index,
17805 uint8_t grouping, uint16_t partial_bw_info)
17806{
17807 int start_offset = offset;
17808 int i = 0;
17809 struct scidx_ctx scidx_ctx;
17810 unsigned scidx;
17811 uint8_t ng = grouping == 0 ? 4 : 16;
17812 proto_tree *ru_index_tree = NULL((void*)0);
17813 proto_item *ruii = NULL((void*)0);
17814 unsigned ss = 0, get_snr = 1;
17815 int8_t snr = 0, value;
17816
17817 /* Add each of the RU index groups set */
17818 for (i = 1; i <= 2; i++) {
17819 int tree_offset = offset;
17820 if ((partial_bw_info & (1 << i)) == 0x0) {
17821 continue; /* Only dissect those with the bit set */
17822 }
17823
17824 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_40MHz[i - 1], ng);
17825 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17826 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17827 &ruii,
17828 "RU Index %d for 40MHz, Partial BW "
17829 "not all one.", i);
17830 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17831 for (ss = 1; ss <= nc_index; ss++) {
17832 if (get_snr) {
17833 snr = tvb_get_int8(tvb, offset);
17834 offset += 1;
17835 value = snr & 0x0f;
17836 get_snr = 0;
17837 } else {
17838 value = snr >> 4;
17839 get_snr = 1;
17840 }
17841 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17842 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17843 ss, scidx, value);
17844 }
17845 }
17846 proto_item_set_len(ruii, offset - tree_offset);
17847 }
17848
17849 return offset - start_offset;
17850}
17851
17852static int
17853add_ff_eht_mu_exclusive_80MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17854 int offset, uint8_t nc_index,
17855 uint8_t grouping, uint16_t partial_bw_info)
17856{
17857 int start_offset = offset;
17858 int i = 0;
17859 struct scidx_ctx scidx_ctx;
17860 unsigned scidx;
17861 uint8_t ng = grouping == 0 ? 4 : 16;
17862 proto_tree *ru_index_tree = NULL((void*)0);
17863 proto_item *ruii = NULL((void*)0);
17864 unsigned ss = 0, get_snr = 1;
17865 int8_t snr = 0, value;
17866
17867 if (partial_bw_info == 0x1E) { /* Uses 996-tone RU indices */
17868 if (ng == 4) {
17869 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng4[0], ng);
17870 } else {
17871 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng16[0], ng);
17872 }
17873 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17874 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17875 &ruii,
17876 "996-tone RU Index %d for 80MHz", 1);
17877 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17878 for (ss = 1; ss <= nc_index; ss++) {
17879 if (get_snr) {
17880 snr = tvb_get_int8(tvb, offset);
17881 offset += 1;
17882 value = snr & 0x0f;
17883 get_snr = 0;
17884 } else {
17885 value = snr >> 4;
17886 get_snr = 1;
17887 }
17888 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17889 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17890 ss, scidx, value);
17891 }
17892 }
17893 proto_item_set_len(ruii, offset - start_offset);
17894
17895 return offset - start_offset;
17896 }
17897
17898 /* Add each of the RU index groups */
17899 for (i = 1; i <= 4; i++) {
17900 int tree_offset = offset;
17901 if ((partial_bw_info & (1 << i)) == 0x0) {
17902 continue; /* Only dissect those with the bit set */
17903 }
17904
17905 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_80MHz[i - 1], ng);
17906 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17907 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17908 &ruii,
17909 "RU Index %d for 80MHz, Partial BW "
17910 "not all one.", i);
17911 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17912 for (ss = 1; ss <= nc_index; ss++) {
17913 if (get_snr) {
17914 snr = tvb_get_int8(tvb, offset);
17915 offset += 1;
17916 value = snr & 0x0f;
17917 get_snr = 0;
17918 } else {
17919 value = snr >> 4;
17920 get_snr = 1;
17921 }
17922 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17923 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17924 ss, scidx, value);
17925 }
17926 }
17927 proto_item_set_len(ruii, offset - tree_offset);
17928 }
17929
17930 return offset - start_offset;
17931}
17932
17933static int
17934add_ff_eht_mu_exclusive_160MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17935 int offset, uint8_t nc_index,
17936 uint8_t grouping, uint16_t partial_bw_info)
17937{
17938 int start_offset = offset;
17939 int tree_offset;
17940 int i = 0;
17941 struct scidx_ctx scidx_ctx;
17942 unsigned scidx;
17943 uint8_t ng = grouping == 0 ? 4 : 16;
17944 proto_tree *ru_index_tree = NULL((void*)0);
17945 proto_item *ruii = NULL((void*)0);
17946 unsigned ss = 0, get_snr = 1;
17947 int8_t snr = 0, value;
17948
17949 /* Is the first lot a 996-tone RU? */
17950 if ((partial_bw_info & 0x1E) == 0x1E) { /* Uses 996-tone RU indices */
17951 tree_offset = offset;
17952 if (ng == 4) {
17953 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[0], ng);
17954 } else {
17955 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[0], ng);
17956 }
17957 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17958 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17959 &ruii,
17960 "996-tone RU Index %d for 160MHz", 1);
17961 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17962 for (ss = 1; ss <= nc_index; ss++) {
17963 if (get_snr) {
17964 snr = tvb_get_int8(tvb, offset);
17965 offset += 1;
17966 value = snr & 0x0f;
17967 get_snr = 0;
17968 } else {
17969 value = snr >> 4;
17970 get_snr = 1;
17971 }
17972 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17973 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17974 ss, scidx, value);
17975 }
17976 }
17977 proto_item_set_len(ruii, offset - tree_offset);
17978 } else {
17979 /* Add each of the RU index groups for the lower 80MHz */
17980 for (i = 1; i <= 4; i++) {
17981 if ((partial_bw_info & (1 << i)) == 0x0) {
17982 continue; /* Only dissect those with the bit set */
17983 }
17984
17985 tree_offset = offset;
17986 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
17987 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17988 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17989 &ruii,
17990 "RU Index %d for 160MHz, Partial BW "
17991 "not all one, lower 80MHz.", i);
17992 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17993 for (ss = 1; ss <= nc_index; ss++) {
17994 if (get_snr) {
17995 snr = tvb_get_int8(tvb, offset);
17996 offset += 1;
17997 value = snr & 0x0f;
17998 get_snr = 0;
17999 } else {
18000 value = snr >> 4;
18001 get_snr = 1;
18002 }
18003 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18004 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18005 ss, scidx, value);
18006 }
18007 }
18008 proto_item_set_len(ruii, offset - tree_offset);
18009 }
18010 }
18011
18012 /* Is the second lot a 996-tone RU? */
18013 get_snr = 1;
18014 if ((partial_bw_info & 0x1E0) == 0x1E0) { /* Uses 996-tone RU indices */
18015 tree_offset = offset;
18016 if (ng == 4) {
18017 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[2], ng);
18018 } else {
18019 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[5], ng);
18020 }
18021 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18022 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18023 &ruii,
18024 "996-tone RU Index %d for 160MHz", 2);
18025 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18026 for (ss = 1; ss <= nc_index; ss++) {
18027 if (get_snr) {
18028 snr = tvb_get_int8(tvb, offset);
18029 offset += 1;
18030 value = snr & 0x0f;
18031 get_snr = 0;
18032 } else {
18033 value = snr >> 4;
18034 get_snr = 1;
18035 }
18036 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18037 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18038 ss, scidx, value);
18039 }
18040 }
18041 proto_item_set_len(ruii, offset - tree_offset);
18042 } else {
18043 /* Add each of the RU index groups for the lower 80MHz */
18044 for (i = 5; i <= 8; i++) {
18045 if ((partial_bw_info & (1 << i)) == 0x0) {
18046 continue; /* Only dissect those with the bit set */
18047 }
18048
18049 tree_offset = offset;
18050 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18051 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18052 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18053 &ruii,
18054 "RU Index %d for 160MHz, Partial BW "
18055 "not all one, upper 80MHz.", i);
18056 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18057 for (ss = 1; ss <= nc_index; ss++) {
18058 if (get_snr) {
18059 snr = tvb_get_int8(tvb, offset);
18060 offset += 1;
18061 value = snr & 0x0f;
18062 get_snr = 0;
18063 } else {
18064 value = snr >> 4;
18065 get_snr = 1;
18066 }
18067 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18068 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18069 ss, scidx, value);
18070 }
18071 }
18072 proto_item_set_len(ruii, offset - tree_offset);
18073 }
18074 }
18075
18076 return offset - start_offset;
18077}
18078
18079static int
18080add_ff_eht_mu_exclusive_320MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
18081 int offset, uint8_t nc_index,
18082 uint8_t grouping, uint16_t partial_bw_info)
18083{
18084 int start_offset = offset;
18085 int tree_offset = offset;
18086 int i = 0, j = 0, k = 0;
18087 struct scidx_ctx scidx_ctx;
18088 unsigned scidx;
18089 uint8_t ng = grouping == 0 ? 4 : 16;
18090 proto_tree *ru_index_tree = NULL((void*)0);
18091 proto_item *ruii = NULL((void*)0);
18092 unsigned ss = 0, get_snr = 1;
18093 int8_t snr = 0, value;
18094
18095 for ( i = 0; i < 4; i++) {
18096 if (((partial_bw_info >> (2*i+1)) & 0x03) == 0x03) { /* Uses 996-tone RU indices */
18097 if (ng == 4) {
18098 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng4[i * 2], ng);
18099 } else {
18100 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng16[i * 5], ng);
18101 }
18102 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18103 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18104 &ruii,
18105 "996-tone RU Index %d for 320MHz",
18106 i+1);
18107 tree_offset = offset;
18108 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18109 for (ss = 1; ss <= nc_index; ss++) {
18110 if (get_snr) {
18111 snr = tvb_get_int8(tvb, offset);
18112 offset += 1;
18113 value = snr & 0x0f;
18114 get_snr = 0;
18115 } else {
18116 value = snr >> 4;
18117 get_snr = 1;
18118 }
18119 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18120 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18121 ss, scidx, value);
18122 }
18123 }
18124 proto_item_set_len(ruii, offset - tree_offset);
18125 } else {
18126 for (j = 2*i; j <= 2*i+1; j++) {
18127 if ((partial_bw_info & (1 << (j+1))) == 0x0) {
18128 continue; /* Only dissect those with the bit set */
18129 }
18130 /* Each 484-tone RU contains two 242-tone RUs */
18131 for (k = 2*j;k <= 2*j+1;k++) {
18132 init_eht_scidx(&scidx_ctx, k+1, &ru_242_tone_320MHz[k], ng);
18133 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18134 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18135 &ruii,
18136 "RU Index %d for 320MHz, Partial BW "
18137 "not all one.", k+1);
18138 tree_offset = offset;
18139 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18140 for (ss = 1; ss <= nc_index; ss++) {
18141 if (get_snr) {
18142 snr = tvb_get_int8(tvb, offset);
18143 offset += 1;
18144 value = snr & 0x0f;
18145 get_snr = 0;
18146 } else {
18147 value = snr >> 4;
18148 get_snr = 1;
18149 }
18150 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18151 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18152 ss, scidx, value);
18153 }
18154 }
18155 proto_item_set_len(ruii, offset - tree_offset);
18156 }
18157 }
18158 }
18159 }
18160
18161 return offset - start_offset;
18162}
18163
18164static unsigned
18165add_ff_eht_mu_exclusive_beamforming_rpt(proto_tree *tree, tvbuff_t *tvb,
18166 packet_info *pinfo, int offset,
18167 uint64_t mimo_control)
18168{
18169 uint8_t nc_index = mimo_control & 0x0F;
18170 uint8_t bw = (mimo_control >> 8) & 0x07;
18171 uint8_t grouping = (mimo_control >> 11) & 0x01;
18172 uint16_t partial_bw_info = (mimo_control >> 21) & 0x01FF;
18173 proto_tree *exclusive_tree = NULL((void*)0);
18174 proto_item *fti = NULL((void*)0);
18175 unsigned start_offset = offset;
18176 unsigned tree_len = 0, byte_count = 0;
18177
18178 exclusive_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
18179 ett_ff_eht_mimo_mu_exclusive_report, &fti,
18180 "EHT MU Exclusive Beamforming Report");
18181
18182 switch (bw) {
18183 case 0: /* 20 MHz */
18184 tree_len = add_ff_eht_mu_exclusive_20MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18185 nc_index, grouping, partial_bw_info);
18186 proto_item_set_len(fti, tree_len);
18187 offset += tree_len;
18188 break;
18189 case 1: /* 40 MHz */
18190 tree_len = add_ff_eht_mu_exclusive_40MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18191 nc_index, grouping, partial_bw_info);
18192 proto_item_set_len(fti, tree_len);
18193 offset += tree_len;
18194 break;
18195 case 2: /* 80 MHz */
18196 tree_len = add_ff_eht_mu_exclusive_80MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18197 nc_index, grouping, partial_bw_info);
18198 proto_item_set_len(fti, tree_len);
18199 offset += tree_len;
18200 break;
18201 case 3: /* 160 MHz */
18202 tree_len = add_ff_eht_mu_exclusive_160MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18203 nc_index, grouping, partial_bw_info);
18204 proto_item_set_len(fti, tree_len);
18205 offset += tree_len;
18206 break;
18207 case 4: /* 320 MHz */
18208 tree_len = add_ff_eht_mu_exclusive_320MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18209 nc_index, grouping, partial_bw_info);
18210 proto_item_set_len(fti, tree_len);
18211 offset += tree_len;
18212 break;
18213 default:
18214 /* Add EI about invalid BW setting */
18215 break;
18216 }
18217
18218 byte_count = tvb_reported_length_remaining(tvb, offset);
18219 if (byte_count > 0)
18220 offset += byte_count; /* Should fix the real problem. */
18221
18222 return offset - start_offset;
18223}
18224
18225static int
18226add_ff_eht_su_20MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18227 int offset, uint8_t nc_index, uint8_t nr_index,
18228 uint8_t grouping, uint16_t partial_bw_info _U___attribute__((unused)),
18229 uint8_t phi_bits, uint8_t psi_bits)
18230{
18231 int start_offset = offset;
18232 unsigned scidx;
18233 struct scidx_ctx scidx_ctx;
18234 uint8_t ng = grouping == 0 ? 4 : 16;
18235 unsigned bit_offset = offset * 8;
18236 proto_tree *ru_index_tree = NULL((void*)0);
18237 proto_item *ruii = NULL((void*)0);
18238
18239 if (ng == 4) {
18240 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng4[0], ng);
18241 } else {
18242 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng16[0], ng);
18243 }
18244
18245 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18246 ett_eht_beamforming_rpt_ru_index,
18247 &ruii,
18248 "RU Index %d for 20MHz, Partial BW "
18249 "not all one.", 1);
18250 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18251 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18252 bit_offset, scidx, nr_index + 1,
18253 nc_index + 1, phi_bits, psi_bits,
18254 hf_ieee80211_eht_compressed_beamform_scidx);
18255 offset = bit_offset / 8;
18256 }
18257 proto_item_set_len(ruii, offset - start_offset);
18258
18259 return offset - start_offset;
18260}
18261
18262static int
18263add_ff_eht_su_40MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18264 int offset, uint8_t nc_index, uint8_t nr_index,
18265 uint8_t grouping, uint16_t partial_bw_info,
18266 uint8_t phi_bits, uint8_t psi_bits)
18267{
18268 int start_offset = offset;
18269 int i = 0;
18270 struct scidx_ctx scidx_ctx;
18271 unsigned scidx;
18272 uint8_t ng = grouping == 0 ? 4 : 16;
18273 unsigned bit_offset = offset * 8;
18274 proto_tree *ru_index_tree = NULL((void*)0);
18275 proto_item *ruii = NULL((void*)0);
18276
18277 /* Add each of the RU index groups set */
18278 for (i = 1; i <= 2; i++) {
18279 int tree_offset = offset;
18280 if ((partial_bw_info & (1 << i)) == 0x0) {
18281 continue; /* Only dissect those with the bit set */
18282 }
18283
18284 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_40MHz[i - 1], ng);
18285 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18286 ett_eht_beamforming_rpt_ru_index,
18287 &ruii,
18288 "RU Index %d for 40MHz, Partial BW "
18289 "not all one.", i);
18290 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18291 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18292 bit_offset, scidx, nr_index + 1,
18293 nc_index + 1, phi_bits, psi_bits,
18294 hf_ieee80211_eht_compressed_beamform_scidx);
18295 offset = bit_offset / 8;
18296 }
18297 proto_item_set_len(ruii, offset - tree_offset);
18298 }
18299
18300 return offset - start_offset;
18301}
18302
18303static int
18304add_ff_eht_su_80MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18305 int offset, uint8_t nc_index, uint8_t nr_index,
18306 uint8_t grouping, uint16_t partial_bw_info,
18307 uint8_t phi_bits, uint8_t psi_bits)
18308{
18309 int start_offset = offset;
18310 int i = 0;
18311 struct scidx_ctx scidx_ctx;
18312 unsigned scidx;
18313 uint8_t ng = grouping == 0 ? 4 : 16;
18314 unsigned bit_offset = offset * 8;
18315 proto_tree *ru_index_tree = NULL((void*)0);
18316 proto_item *ruii = NULL((void*)0);
18317
18318 if (partial_bw_info == 0x1E) { /* Uses 996-tone RU indices */
18319 if (ng == 4) {
18320 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng4[0], ng);
18321 } else {
18322 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng16[0], ng);
18323 }
18324 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18325 ett_eht_beamforming_rpt_ru_index,
18326 &ruii,
18327 "996-tone RU Index %d for 80MHz", 1);
18328 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18329 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18330 bit_offset, scidx, nr_index + 1,
18331 nc_index + 1, phi_bits, psi_bits,
18332 hf_ieee80211_eht_compressed_beamform_scidx);
18333 offset = bit_offset / 8;
18334 }
18335 proto_item_set_len(ruii, offset - start_offset);
18336
18337 return offset - start_offset;
18338 }
18339
18340 /* Add each of the RU index groups */
18341 for (i = 1; i <= 4; i++) {
18342 int tree_offset = offset;
18343 if ((partial_bw_info & (1 << i)) == 0x0) {
18344 continue; /* Only dissect those with the bit set */
18345 }
18346
18347 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_80MHz[i - 1], ng);
18348 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18349 ett_eht_beamforming_rpt_ru_index,
18350 &ruii,
18351 "RU Index %d for 80MHz, Partial BW "
18352 "not all one.", i);
18353 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18354 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18355 bit_offset, scidx, nr_index + 1,
18356 nc_index + 1, phi_bits, psi_bits,
18357 hf_ieee80211_eht_compressed_beamform_scidx);
18358 offset = bit_offset / 8;
18359 }
18360 proto_item_set_len(ruii, offset - tree_offset);
18361 }
18362
18363 return offset - start_offset;
18364}
18365
18366static int
18367add_ff_eht_su_160MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18368 int offset, uint8_t nc_index, uint8_t nr_index,
18369 uint8_t grouping, uint16_t partial_bw_info,
18370 uint8_t phi_bits, uint8_t psi_bits)
18371{
18372 int start_offset = offset;
18373 int tree_offset;
18374 int i = 0;
18375 struct scidx_ctx scidx_ctx;
18376 unsigned scidx;
18377 uint8_t ng = grouping == 0 ? 4 : 16;
18378 unsigned bit_offset = offset * 8;
18379 proto_tree *ru_index_tree = NULL((void*)0);
18380 proto_item *ruii = NULL((void*)0);
18381
18382 /* Is the first lot a 996-tone RU? */
18383 if ((partial_bw_info & 0x1E) == 0x1E) { /* Uses 996-tone RU indices */
18384 tree_offset = offset;
18385 if (ng == 4) {
18386 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[0], ng);
18387 } else {
18388 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[0], ng);
18389 }
18390 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18391 ett_eht_beamforming_rpt_ru_index,
18392 &ruii,
18393 "996-tone RU Index %d for 160MHz", 1);
18394 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18395 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18396 bit_offset, scidx, nr_index + 1,
18397 nc_index + 1, phi_bits, psi_bits,
18398 hf_ieee80211_eht_compressed_beamform_scidx);
18399 offset = bit_offset / 8;
18400 }
18401 proto_item_set_len(ruii, offset - tree_offset);
18402 } else {
18403 /* Add each of the RU index groups for the lower 80MHz */
18404 for (i = 1; i <= 4; i++) {
18405 if ((partial_bw_info & (1 << i)) == 0x0) {
18406 continue; /* Only dissect those with the bit set */
18407 }
18408
18409 tree_offset = offset;
18410 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18411 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18412 ett_eht_beamforming_rpt_ru_index,
18413 &ruii,
18414 "RU Index %d for 160MHz, Partial BW "
18415 "not all one, lower 80MHz.", i);
18416 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18417 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo,
18418 offset, bit_offset, scidx,
18419 nr_index + 1, nc_index + 1,
18420 phi_bits, psi_bits,
18421 hf_ieee80211_eht_compressed_beamform_scidx);
18422 offset = bit_offset / 8;
18423 }
18424 proto_item_set_len(ruii, offset - tree_offset);
18425 }
18426 }
18427
18428 /* Is the second lot a 996-tone RU? */
18429 if ((partial_bw_info & 0x1E0) == 0x1E0) { /* Uses 996-tone RU indices */
18430 tree_offset = offset;
18431 if (ng == 4) {
18432 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[2], ng);
18433 } else {
18434 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[5], ng);
18435 }
18436 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18437 ett_eht_beamforming_rpt_ru_index,
18438 &ruii,
18439 "996-tone RU Index %d for 160MHz", 2);
18440 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18441 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18442 bit_offset, scidx, nr_index + 1,
18443 nc_index + 1, phi_bits, psi_bits,
18444 hf_ieee80211_eht_compressed_beamform_scidx);
18445 offset = bit_offset / 8;
18446 }
18447 proto_item_set_len(ruii, offset - tree_offset);
18448 } else {
18449 /* Add each of the RU index groups for the lower 80MHz */
18450 for (i = 5; i <= 8; i++) {
18451 if ((partial_bw_info & (1 << i)) == 0x0) {
18452 continue; /* Only dissect those with the bit set */
18453 }
18454
18455 tree_offset = offset;
18456 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18457 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18458 ett_eht_beamforming_rpt_ru_index,
18459 &ruii,
18460 "RU Index %d for 160MHz, Partial BW "
18461 "not all one, upper 80MHz.", i);
18462 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18463 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo,
18464 offset, bit_offset, scidx,
18465 nr_index + 1, nc_index + 1,
18466 phi_bits, psi_bits,
18467 hf_ieee80211_eht_compressed_beamform_scidx);
18468 offset = bit_offset / 8;
18469 }
18470 proto_item_set_len(ruii, offset - tree_offset);
18471 }
18472 }
18473
18474 return offset - start_offset;
18475}
18476
18477static int
18478add_ff_eht_su_320MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18479 int offset, uint8_t nc_index, uint8_t nr_index,
18480 uint8_t grouping, uint16_t partial_bw_info,
18481 uint8_t phi_bits, uint8_t psi_bits)
18482{
18483 int start_offset = offset;
18484 int tree_offset = offset;
18485 int i = 0, j = 0, k = 0;
18486 struct scidx_ctx scidx_ctx;
18487 unsigned scidx;
18488 uint8_t ng = grouping == 0 ? 4 : 16;
18489 unsigned bit_offset = offset * 8;
18490 proto_tree *ru_index_tree = NULL((void*)0);
18491 proto_item *ruii = NULL((void*)0);
18492
18493 /* Resolution is 40 MHz */
18494 for (i = 0; i < 4; i++) {
18495 if (((partial_bw_info >> (2*i+1)) & 0x03) == 0x03) { /* Uses 996-tone RU indices */
18496 if (ng == 4) {
18497 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng4[i * 2], ng);
18498 } else {
18499 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng16[i * 5], ng);
18500 }
18501 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18502 ett_eht_beamforming_rpt_ru_index,
18503 &ruii,
18504 "996-tone RU Index %d for 320MHz",
18505 i+1);
18506 tree_offset = offset;
18507 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18508 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo,
18509 offset, bit_offset, scidx,
18510 nr_index + 1, nc_index + 1,
18511 phi_bits, psi_bits,
18512 hf_ieee80211_eht_compressed_beamform_scidx);
18513 offset = bit_offset / 8;
18514 }
18515 proto_item_set_len(ruii, offset - tree_offset);
18516 } else {
18517 for (j = 2*i; j <= 2*i+1; j++) {
18518 if ((partial_bw_info & (1 << (j+1))) == 0x0) {
18519 continue; /* Only dissect those with the bit set */
18520 }
18521 /* Each 484-tone RU contains two 242-tone RUs */
18522 for (k = 2*j;k <= 2*j+1;k++) {
18523 init_eht_scidx(&scidx_ctx, k+1, &ru_242_tone_320MHz[k], ng);
18524 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18525 ett_eht_beamforming_rpt_ru_index,
18526 &ruii,
18527 "RU Index %d for 320MHz, Partial BW "
18528 "not all one.", k+1);
18529 tree_offset = offset;
18530 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18531 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18532 bit_offset, scidx, nr_index + 1,
18533 nc_index + 1, phi_bits, psi_bits,
18534 hf_ieee80211_eht_compressed_beamform_scidx);
18535 offset = bit_offset / 8;
18536 }
18537 proto_item_set_len(ruii, offset - tree_offset);
18538 }
18539 }
18540 }
18541 }
18542
18543 return offset - start_offset;
18544}
18545
18546static unsigned
18547add_ff_eht_su_beamforming_rpt(proto_tree *tree, tvbuff_t *tvb,
18548 packet_info *pinfo, int offset,
18549 uint64_t mimo_control)
18550{
18551 uint8_t nc_index = mimo_control & 0x0F;
18552 uint8_t nr_index = (mimo_control >> 4) & 0x0F;
18553 uint8_t bw = (mimo_control >> 8) & 0x07;
18554 uint8_t grouping = (mimo_control >> 11) & 0x01;
18555 uint16_t partial_bw_info = (mimo_control >> 21) & 0x01FF;
18556 uint8_t codebook_info = (mimo_control >> 36) & 0x01;
18557 proto_tree *snr_tree = NULL((void*)0), *feedback_tree = NULL((void*)0);
18558 proto_item *fti = NULL((void*)0);
18559 uint8_t i = 0, phi_bits, psi_bits;
18560 unsigned start_offset = offset;
18561 unsigned tree_len = 0, byte_count = 0;
18562
18563 snr_tree = proto_tree_add_subtree(tree, tvb, offset, nc_index + 1,
18564 ett_ff_eht_mimo_beamforming_report_snr, NULL((void*)0),
18565 "Average Signal to Noise Ratio");
18566
18567 for (i = 0; i < nc_index + 1; i++) {
18568 int8_t snr = tvb_get_int8(tvb, offset);
18569
18570 proto_tree_add_int_format(snr_tree,
18571 hf_ieee80211_eht_compressed_beamforming_report_snr, tvb, offset, 1,
18572 snr, "Stream %d: %s%0.2fdB (0x%02x)", i,
18573 (snr == 127 ? ">=" : (snr == -128 ? "<=" : "")),
18574 (float)((float)88 + snr)/4, (uint8_t)snr);
18575 offset++;
18576 }
18577
18578 if (codebook_info == 0) {
18579 phi_bits = 4;
18580 psi_bits = 2;
18581 } else {
18582 phi_bits = 6;
18583 psi_bits = 4;
18584 }
18585
18586 feedback_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
18587 ett_eht_beamforming_feedback_tree,
18588 &fti, "Feedback Matrices");
18589 switch (bw) {
18590 case 0: /* 20 MHz */
18591 tree_len = add_ff_eht_su_20MHz_rpt(feedback_tree, tvb, pinfo, offset,
18592 nc_index, nr_index, grouping,
18593 partial_bw_info, phi_bits, psi_bits);
18594 proto_item_set_len(fti, tree_len);
18595 offset += tree_len;
18596 break;
18597 case 1: /* 40 MHz */
18598 tree_len = add_ff_eht_su_40MHz_rpt(feedback_tree, tvb, pinfo, offset,
18599 nc_index, nr_index, grouping,
18600 partial_bw_info, phi_bits, psi_bits);
18601 proto_item_set_len(fti, tree_len);
18602 offset += tree_len;
18603 break;
18604 case 2: /* 80 MHz */
18605 tree_len = add_ff_eht_su_80MHz_rpt(feedback_tree, tvb, pinfo, offset,
18606 nc_index, nr_index, grouping,
18607 partial_bw_info, phi_bits, psi_bits);
18608 proto_item_set_len(fti, tree_len);
18609 offset += tree_len;
18610 break;
18611 case 3: /* 160 MHz */
18612 tree_len = add_ff_eht_su_160MHz_rpt(feedback_tree, tvb, pinfo, offset,
18613 nc_index, nr_index, grouping,
18614 partial_bw_info, phi_bits, psi_bits);
18615 proto_item_set_len(fti, tree_len);
18616 offset += tree_len;
18617 break;
18618 case 4: /* 320 MHz */
18619 tree_len = add_ff_eht_su_320MHz_rpt(feedback_tree, tvb, pinfo, offset,
18620 nc_index, nr_index, grouping,
18621 partial_bw_info, phi_bits, psi_bits);
18622 proto_item_set_len(fti, tree_len);
18623 offset += tree_len;
18624 break;
18625 default:
18626 /* Add EI about invalid BW setting */
18627 break;
18628 }
18629
18630 byte_count = tvb_reported_length_remaining(tvb, offset);
18631 if (byte_count > 0)
18632 offset += byte_count; /* Should fix the real problem. */
18633
18634 return offset - start_offset;
18635}
18636
18637static const val64_string eht_mimo_bw_vals[] = {
18638 { 0, "20 MHz" },
18639 { 1, "40 MHz" },
18640 { 2, "80 MHz" },
18641 { 3, "160 MHz" },
18642 { 4, "320 MHz" },
18643 { 5, "Reserved" },
18644 { 6, "Reserved" },
18645 { 7, "Reserved" },
18646 { 0, NULL((void*)0) }
18647};
18648
18649static const val64_string eht_mimo_grouping_vals[] = {
18650 { 0, "Ng = 4" },
18651 { 1, "Ng = 16" },
18652 { 0, NULL((void*)0) }
18653};
18654
18655static const val64_string eht_feedback_type_vals[] = {
18656 { 0, "SU" },
18657 { 1, "MU" },
18658 { 2, "CQI" },
18659 { 3, "Reserved" },
18660 { 0, NULL((void*)0) }
18661};
18662
18663static int * const eht_mimo_ctrl_hdrs[] = {
18664 &hf_ieee80211_eht_mimo_ctrl_nc_index,
18665 &hf_ieee80211_eht_mimo_ctrl_nr_index,
18666 &hf_ieee80211_eht_mimo_ctrl_bw,
18667 &hf_ieee80211_eht_mimo_ctrl_grouping,
18668 &hf_ieee80211_eht_mimo_ctrl_feedback_type,
18669 &hf_ieee80211_eht_mimo_ctrl_reserved1,
18670 &hf_ieee80211_eht_mimo_ctrl_remaining_feedback_segments,
18671 &hf_ieee80211_eht_mimo_ctrl_first_feedback_segment,
18672 &hf_ieee80211_eht_mimo_ctrl_partial_bw_info,
18673 &hf_ieee80211_eht_mimo_ctrl_sounding_dialog_token_number,
18674 &hf_ieee80211_eht_mimo_ctrl_codebook_info,
18675 &hf_ieee80211_eht_mimo_ctrl_reserved2,
18676 NULL((void*)0)
18677};
18678
18679static unsigned
18680add_ff_eht_mimo_control_etc(proto_tree *tree _U___attribute__((unused)), tvbuff_t *tvb _U___attribute__((unused)),
18681 packet_info *pinfo _U___attribute__((unused)),
18682 int offset _U___attribute__((unused)))
18683{
18684 unsigned start = offset;
18685 uint64_t mimo_control = tvb_get_uint40(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
18686 uint8_t feedback_type = (mimo_control >> 12) & 0x03;
18687 uint8_t nc_index = mimo_control & 0x0F;
18688 uint8_t nr_index = (mimo_control >> 4) & 0x0F;
18689 proto_item *mci = NULL((void*)0);
18690
18691 mci = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
18692 hf_ieee80211_eht_mimo_ctrl_field,
18693 ett_eht_mimo_ctrl, eht_mimo_ctrl_hdrs,
18694 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
18695
18696 /*
18697 * Validate nc_index and nr_index and go no further if they exceed the
18698 * limits.
18699 *
18700 * 802.11be D3.0
18701 */
18702 if (nc_index > 7) {
18703 expert_add_info_format(pinfo, mci, &ei_ieee80211_eht_invalid_nc_nr,
18704 "Nc indices (%d) > 7 are reserved", nc_index);
18705 return offset;
18706 }
18707 if (nr_index == 0 || nr_index > 7) {
18708 expert_add_info_format(pinfo, mci, &ei_ieee80211_eht_invalid_nc_nr,
18709 "Nr indices (%d) 0 and > 7 are reserved", nr_index);
18710 return offset;
18711 }
18712 offset += 5;
18713
18714 switch (feedback_type) {
18715 case SU_FEEDBACK(0):
18716 offset += add_ff_eht_su_beamforming_rpt(tree, tvb, pinfo, offset,
18717 mimo_control);
18718 break;
18719 case MU_FEEDBACK(1):
18720 offset += add_ff_eht_su_beamforming_rpt(tree, tvb, pinfo, offset,
18721 mimo_control);
18722 offset += add_ff_eht_mu_exclusive_beamforming_rpt(tree, tvb, pinfo, offset,
18723 mimo_control);
18724 break;
18725 case CQI_FEEDBACK(2):
18726 /* TODO */
18727 break;
18728 default:
18729 break;
18730 }
18731
18732 return offset - start;
18733}
18734
18735static const range_string eht_action_rvals[] = {
18736 { 0, 0, "EHT Compressed Beamforming/CQI" },
18737 { 1, 255, "Reserved" },
18738 { 0, 0, NULL((void*)0) }
18739};
18740
18741static unsigned
18742add_ff_action_eht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18743 int offset)
18744{
18745 unsigned start = offset;
18746 uint8_t eht_action;
18747 proto_item *item = NULL((void*)0);
18748
18749 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18750
18751 eht_action = tvb_get_uint8(tvb, offset);
18752
18753 item = proto_tree_add_item(tree, hf_ieee80211_ff_eht_action, tvb, offset, 1,
18754 ENC_NA0x00000000);
18755 offset += 1;
18756
18757 switch (eht_action) {
18758 case 0:
18759 offset += add_ff_eht_mimo_control_etc(tree, tvb, pinfo, offset);
18760 break;
18761 default:
18762 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
18763 "Reserved EHT Action %u", eht_action);
18764 }
18765
18766 return offset - start;
18767}
18768
18769static unsigned
18770add_ff_action_fst(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
18771{
18772 uint8_t code;
18773 unsigned start = offset;
18774
18775 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18776 code = tvb_get_uint8(tvb, offset);
18777 offset += add_ff_fst_action_code(tree, tvb, pinfo, offset);
18778 switch (code) {
18779 case FST_SETUP_REQUEST0:
18780 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18781 offset += add_ff_llt(tree, tvb, pinfo, offset);
18782 break;
18783 case FST_SETUP_RESPONSE1:
18784 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18785 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18786 break;
18787 case FST_TEAR_DOWN2:
18788 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
18789 break;
18790 case FST_ACK_REQUEST3:
18791 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18792 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
18793 break;
18794 case FST_ACK_RESPONSE4:
18795 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18796 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
18797 break;
18798 case FST_ON_CHANNEL_TUNNEL_REQUEST5:
18799 offset += add_ff_oct_mmpdu(tree, tvb, pinfo, offset);
18800 break;
18801 }
18802 return offset - start;
18803}
18804
18805static int
18806add_ff_scs_descriptor_list(proto_tree *tree, tvbuff_t *tvb,
18807 packet_info *pinfo _U___attribute__((unused)), int offset)
18808{
18809 unsigned start = offset;
18810
18811 /*
18812 * This is could be a list, so it needs change.
18813 */
18814 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
18815 return offset - start;
18816}
18817
18818static int
18819add_ff_scs_response_count(proto_tree *tree, tvbuff_t *tvb,
18820 packet_info *pinfo _U___attribute__((unused)), int offset)
18821{
18822 proto_tree_add_item(tree, hf_ieee80211_ff_scs_response_count, tvb, offset, 1,
18823 ENC_NA0x00000000);
18824
18825 return 1;
18826}
18827
18828static int
18829add_ff_scs_status_list(proto_tree *tree, tvbuff_t *tvb,
18830 packet_info *pinfo _U___attribute__((unused)), int offset, uint8_t count)
18831{
18832 unsigned start = offset;
18833
18834 while (count > 0) {
18835 if (tvb_reported_length_remaining(tvb, offset) >= 3) {
18836 proto_tree_add_item(tree, hf_ieee80211_ff_scs_scsid, tvb, offset, 1,
18837 ENC_NA0x00000000);
18838 offset += 1;
18839
18840 proto_tree_add_item(tree, hf_ieee80211_ff_scs_status, tvb, offset, 2,
18841 ENC_LITTLE_ENDIAN0x80000000);
18842 offset += 2;
18843 }
18844 count--;
18845 }
18846
18847 return offset - start;
18848}
18849
18850static int
18851add_ff_mscs_descriptor_elt(proto_tree *tree, tvbuff_t *tvb,
18852 packet_info *pinfo _U___attribute__((unused)), int offset)
18853{
18854 unsigned start = offset;
18855
18856 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
18857 return offset - start;
18858}
18859
18860static unsigned
18861add_ff_action_robust_av_streaming(proto_tree *tree, tvbuff_t *tvb,
18862 packet_info *pinfo, int offset)
18863{
18864 uint8_t code, count;
18865 unsigned start = offset;
18866
18867 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18868 code = tvb_get_uint8(tvb, offset);
18869 offset += add_ff_robust_av_streaming_action_code(tree, tvb, pinfo, offset);
18870
18871 switch (code) {
18872 case ROBUST_AV_STREAMING_SCS_REQUEST0:
18873 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18874 offset += add_ff_scs_descriptor_list(tree, tvb, pinfo, offset);
18875 break;
18876 case ROBUST_AV_STREAMING_SCS_RESPONSE1:
18877 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18878 count = tvb_get_uint8(tvb, offset);
18879 offset += add_ff_scs_response_count(tree, tvb, pinfo, offset);
18880 offset += add_ff_scs_status_list(tree, tvb, pinfo, offset, count);
18881 break;
18882 case ROBUST_AV_STREAMING_MSCS_REQUEST4:
18883 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18884 offset += add_ff_mscs_descriptor_elt(tree, tvb, pinfo, offset);
18885 break;
18886 case ROBUST_AV_STREAMING_MSCS_RESPONSE5:
18887 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18888 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18889 /* If there is any more data it is probably an mscs descriptor */
18890 if (tvb_reported_length_remaining(tvb, offset) > 0)
18891 offset += add_ff_mscs_descriptor_elt(tree, tvb, pinfo, offset);
18892 break;
18893 }
18894 return offset - start;
18895}
18896
18897static unsigned
18898add_ff_action_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
18899{
18900 uint8_t code;
18901 unsigned start = offset;
18902 int left_offset;
18903
18904 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18905 code = tvb_get_uint8(tvb, offset);
18906 offset += add_ff_dmg_action_code(tree, tvb, pinfo, offset);
18907 switch (code) {
18908 case DMG_ACTION_PWR_SAVE_CONFIG_REQ0:
18909 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18910 offset += add_ff_dmg_pwr_mgmt(tree, tvb, pinfo, offset);
18911 break;
18912 case DMG_ACTION_PWR_SAVE_CONFIG_RES1:
18913 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18914 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18915 break;
18916 case DMG_ACTION_INFO_REQ2:
18917 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
18918 break;
18919 case DMG_ACTION_INFO_RES3:
18920 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
18921 break;
18922 case DMG_ACTION_HANDOVER_REQ4:
18923 offset += add_ff_handover_reason(tree, tvb, pinfo, offset);
18924 offset += add_ff_handover_remaining_bi(tree, tvb, pinfo, offset);
18925 break;
18926 case DMG_ACTION_HANDOVER_RES5:
18927 offset += add_ff_handover_result(tree, tvb, pinfo, offset);
18928 offset += add_ff_handover_reject_reason(tree, tvb, pinfo, offset);
18929 break;
18930 case DMG_ACTION_DTP_REQ6:
18931 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18932 break;
18933 case DMG_ACTION_DTP_RES7:
18934 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18935 break;
18936 case DMG_ACTION_RELAY_SEARCH_REQ8:
18937 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18938 offset += add_ff_destination_reds_aid(tree, tvb, pinfo, offset);
18939 break;
18940 case DMG_ACTION_RELAY_SEARCH_RES9:
18941 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18942 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18943 break;
18944 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10:
18945 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18946 break;
18947 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11:
18948 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18949 left_offset =
18950 tvb_reported_length_remaining(tvb, offset);
18951 while(left_offset > 0) {
18952 proto_tree_add_item(tree, hf_ieee80211_ff_peer_sta_aid, tvb, offset, 1, ENC_NA0x00000000);
18953 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset+1, 1, ENC_NA0x00000000);
18954 proto_tree_add_item(tree, hf_ieee80211_ff_internal_angle, tvb, offset+2, 1, ENC_NA0x00000000);
18955 proto_tree_add_item(tree, hf_ieee80211_ff_recommend, tvb, offset+2, 1, ENC_NA0x00000000);
18956 /* another reserved byte */
18957 offset += 4;
18958 left_offset -= 4;
18959 }
18960 break;
18961 case DMG_ACTION_RLS_REQ12:
18962 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18963 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
18964 offset += add_ff_relay_aid(tree, tvb, pinfo, offset);
18965 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
18966 break;
18967 case DMG_ACTION_RLS_RES13:
18968 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18969 break;
18970 case DMG_ACTION_RLS_ANNOUNCE14:
18971 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18972 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18973 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
18974 offset += add_ff_relay_aid(tree, tvb, pinfo, offset);
18975 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
18976 break;
18977 case DMG_ACTION_RLS_TEARDOWN15:
18978 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
18979 offset += add_ff_relay_aid(tree, tvb, pinfo, offset);
18980 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
18981 break;
18982 case DMG_ACTION_RELAY_ACK_REQ16:
18983 case DMG_ACTION_RELAY_ACK_RES17:
18984 break;
18985 case DMG_ACTION_TPA_REQ18:
18986 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18987 offset += add_ff_timing_offset(tree, tvb, pinfo, offset);
18988 offset += add_ff_sampling_frequency_offset(tree, tvb, pinfo, offset);
18989 break;
18990 case DMG_ACTION_TPA_RES19:
18991 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18992 break;
18993 case DMG_ACTION_TPA_REP20:
18994 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18995 break;
18996 case DMG_ACTION_ROC_REQ21:
18997 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18998 offset += add_ff_relay_operation_type(tree, tvb, pinfo, offset);
18999 break;
19000 case DMG_ACTION_ROC_RES22:
19001 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19002 offset += add_ff_status_code(tree, tvb, pinfo, offset);
19003 break;
19004 }
19005 return offset - start;
19006}
19007
19008unsigned
19009add_ff_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
19010 association_sanity_check_t *association_sanity_check)
19011{
19012 switch (tvb_get_uint8(tvb, offset) & 0x7f) {
19013 case CAT_SPECTRUM_MGMT0: /* 0 */
19014 return add_ff_action_spectrum_mgmt(tree, tvb, pinfo, offset);
19015 case CAT_QOS1: /* 1 */
19016 return add_ff_action_qos(tree, tvb, pinfo, offset);
19017 case CAT_DLS2: /* 2 */
19018 return add_ff_action_dls(tree, tvb, pinfo, offset);
19019 case CAT_BLOCK_ACK3: /* 3 */
19020 return add_ff_action_block_ack(tree, tvb, pinfo, offset);
19021 case CAT_PUBLIC4: /* 4 */
19022 return add_ff_action_public(tree, tvb, pinfo, offset);
19023 case CAT_RADIO_MEASUREMENT5: /* 5 */
19024 return add_ff_action_radio_measurement(tree, tvb, pinfo, offset);
19025 case CAT_FAST_BSS_TRANSITION6: /* 6 */
19026 return add_ff_action_fast_bss_transition(tree, tvb, pinfo, offset);
19027 case CAT_HT7: /* 7 */
19028 return add_ff_action_ht(tree, tvb, pinfo, offset);
19029 case CAT_SA_QUERY8: /* 8 */
19030 return add_ff_action_sa_query(tree, tvb, pinfo, offset);
19031 case CAT_PUBLIC_PROTECTED9: /* 9 */
19032 return add_ff_action_protected_public(tree, tvb, pinfo, offset);
19033 case CAT_WNM10: /* 10 */
19034 return add_ff_action_wnm(tree, tvb, pinfo, offset);
19035 case CAT_UNPROTECTED_WNM11: /* 11 */
19036 return add_ff_action_unprotected_wnm(tree, tvb, pinfo, offset);
19037 case CAT_TDLS12: /* 12 */
19038 return add_ff_action_tdls(tree, tvb, pinfo, offset);
19039 case CAT_MESH13: /* 13 */
19040 return add_ff_action_mesh(tree, tvb, pinfo, offset);
19041 case CAT_MULTIHOP14: /* 14 */
19042 return add_ff_action_multihop(tree, tvb, pinfo, offset);
19043 case CAT_SELF_PROTECTED15: /* 15 */
19044 return add_ff_action_self_protected(tree, tvb, pinfo, offset, association_sanity_check);
19045 case CAT_DMG16: /* 16 */
19046 return add_ff_action_dmg(tree, tvb, pinfo, offset);
19047 case CAT_MGMT_NOTIFICATION17: /* Management notification frame - 17 */
19048 return add_ff_action_mgmt_notification(tree, tvb, pinfo, offset);
19049 case CAT_FAST_SESSION_TRANSFER18: /* 18 */
19050 return add_ff_action_fst(tree, tvb, pinfo, offset);
19051 case CAT_ROBUST_AV_STREAMING19: /* 19 */
19052 return add_ff_action_robust_av_streaming(tree, tvb, pinfo, offset);
19053 case CAT_UNPROTECTED_DMG20: /* 20 */
19054 return add_ff_action_unprotected_dmg(tree, tvb, pinfo, offset);
19055 case CAT_VHT21: /* 21 */
19056 return add_ff_action_vht(tree, tvb, pinfo, offset);
19057 case CAT_S1G22: /* 22 */
19058 return add_ff_action_s1g(tree, tvb, pinfo, offset);
19059 case CAT_PROTECTED_S1G23: /* 23 */
19060 return add_ff_action_protected_s1g(tree, tvb, pinfo, offset);
19061 case CAT_HE30:
19062 return add_ff_action_he(tree, tvb, pinfo, offset);
19063 case CAT_PROTECTED_HE31:
19064 return add_ff_action_protected_he(tree, tvb, pinfo, offset);
19065 case CAT_PROTECTED_EHT37:
19066 return add_ff_action_protected_eht(tree, tvb, pinfo, offset);
19067 case CAT_PROTECTED_FTM34:
19068 return add_ff_action_protected_ftm(tree, tvb, pinfo, offset);
19069 case CAT_EHT36:
19070 return add_ff_action_eht(tree, tvb, pinfo, offset);
19071 case CAT_VENDOR_SPECIFIC_PROTECTED126: /* Same as below for now */
19072 case CAT_VENDOR_SPECIFIC127: /* Vendor Specific Protected Category - 127 */
19073 return add_ff_action_vendor_specific(tree, tvb, pinfo, offset);
19074 default:
19075 add_ff_category_code(tree, tvb, pinfo, offset);
19076 return 1;
19077 }
19078}
19079
19080static const value_string ieee80211_rsn_cipher_vals[] = {
19081 {0, "NONE"},
19082 {1, "WEP (40-bit)"},
19083 {2, "TKIP"},
19084 {3, "AES (OCB)"},
19085 {4, "AES (CCM)"},
19086 {5, "WEP (104-bit)"},
19087 {6, "BIP (128)"},
19088 {7, "Group addressed traffic not allowed"},
19089 {8, "GCMP (128)" },
19090 {9, "GCMP (256)" },
19091 {10, "CCMP (256)" },
19092 {11, "BIP (GMAC-128)" },
19093 {12, "BIP (GMAC-256)" },
19094 {13, "BIP (CMAC-256)" },
19095 {0, NULL((void*)0)}
19096};
19097
19098#define AKMS_NONE0x000FAC00 0x000FAC00
19099#define AKMS_WPA0x000FAC01 0x000FAC01
19100#define AKMS_PSK0x000FAC02 0x000FAC02
19101#define AKMS_FT_IEEE802_1X0x000FAC03 0x000FAC03
19102#define AKMS_FT_PSK0x000FAC04 0x000FAC04
19103#define AKMS_WPA_SHA2560x000FAC05 0x000FAC05
19104#define AKMS_PSK_SHA2560x000FAC06 0x000FAC06
19105#define AKMS_TDLS0x000FAC07 0x000FAC07
19106#define AKMS_SAE0x000FAC08 0x000FAC08
19107#define AKMS_FT_SAE0x000FAC09 0x000FAC09
19108#define AKMS_AP_PEER_KEY0x000FAC0A 0x000FAC0A
19109#define AKMS_WPA_SHA256_SUITEB0x000FAC0B 0x000FAC0B
19110#define AKMS_WPA_SHA384_SUITEB0x000FAC0C 0x000FAC0C
19111#define AKMS_FT_IEEE802_1X_SHA3840x000FAC0D 0x000FAC0D
19112#define AKMS_FILS_SHA2560x000FAC0E 0x000FAC0E
19113#define AKMS_FILS_SHA3840x000FAC0F 0x000FAC0F
19114#define AKMS_FT_FILS_SHA2560x000FAC10 0x000FAC10
19115#define AKMS_FT_FILS_SHA3840x000FAC11 0x000FAC11
19116#define AKMS_OWE0x000FAC12 0x000FAC12
19117#define AKMS_SAE_GROUP_DEPEND0x000FAC18 0x000FAC18
19118#define AKMS_FT_SAE_GROUP_DEPEND0x000FAC19 0x000FAC19
19119
19120static const value_string ieee80211_rsn_keymgmt_vals[] = {
19121 {0, "NONE"},
19122 {1, "WPA"},
19123 {2, "PSK"},
19124 {3, "FT over IEEE 802.1X"},
19125 {4, "FT using PSK"},
19126 {5, "WPA (SHA256)"},
19127 {6, "PSK (SHA256)"},
19128 {7, "TDLS / TPK Handshake (SHA256)"},
19129 {8, "SAE (SHA256)" },
19130 {9, "FT using SAE (SHA256)" },
19131 {10, "APPeerKey (SHA256)" },
19132 {11, "WPA (SHA256-SuiteB)" },
19133 {12, "WPA (SHA384-SuiteB)" },
19134 {13, "FT over IEEE 802.1X (SHA384)" },
19135 {14, "FILS (SHA256 and AES-SIV-256)" },
19136 {15, "FILS (SHA384 and AES-SIV-512)" },
19137 {16, "FT over FILS (SHA256 and AES-SIV-256)" },
19138 {17, "FT over FILS (SHA384 and AES-SIV-512)" },
19139 {18, "Opportunistic Wireless Encryption"},
19140 {19, "FT using PSK (SHA384)"},
19141 {20, "PSK (SHA384)"},
19142 {21, "PASN"},
19143 {24, "SAE (GROUP-DEPEND)"},
19144 {25, "FT using SAE (GROUP-DEPEND)"},
19145 {0, NULL((void*)0)}
19146};
19147
19148#define OUIBASELEN(64 + 20) (MAXNAMELEN64 + 20)
19149
19150static void
19151oui_base_custom(char *result, uint32_t oui)
19152{
19153 uint8_t p_oui[3];
19154 const char *manuf_name;
19155
19156 p_oui[0] = oui >> 16 & 0xFF;
19157 p_oui[1] = oui >> 8 & 0xFF;
19158 p_oui[2] = oui & 0xFF;
19159
19160 static_assert_Static_assert(OUIBASELEN(64 + 20) <= ITEM_LABEL_LENGTH240, "Buffer size mismatch!");
19161 /* Attempt an OUI lookup. */
19162 manuf_name = uint_get_manuf_name_if_known(oui);
19163 if (manuf_name == NULL((void*)0)) {
19164 /* Could not find an OUI. */
19165 snprintf(result, OUIBASELEN(64 + 20), "%02x:%02x:%02x", p_oui[0], p_oui[1], p_oui[2]);
19166 }
19167 else {
19168 char name[MAXNAMELEN64+2];
19169 snprintf(name, MAXNAMELEN64+1, "%.*s", MAXNAMELEN64, manuf_name);
19170 /* Found an address string. */
19171 snprintf(result, OUIBASELEN(64 + 20), "%02x:%02x:%02x (%s)", p_oui[0], p_oui[1], p_oui[2], name);
19172 }
19173}
19174
19175static void
19176rsn_gcs_base_custom(char *result, uint32_t gcs)
19177{
19178 char oui_result[OUIBASELEN(64 + 20)];
19179 char *tmp_str;
19180
19181 oui_result[0] = '\0';
19182 oui_base_custom(oui_result, gcs >> 8);
19183 tmp_str = val_to_str(NULL((void*)0), gcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
19184 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19185 wmem_free(NULL((void*)0), tmp_str);
19186}
19187
19188static void
19189rsn_pcs_base_custom(char *result, uint32_t pcs)
19190{
19191 char oui_result[OUIBASELEN(64 + 20)];
19192 char *tmp_str;
19193
19194 oui_result[0] = '\0';
19195 oui_base_custom(oui_result, pcs >> 8);
19196 tmp_str = val_to_str(NULL((void*)0), pcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
19197 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19198 wmem_free(NULL((void*)0), tmp_str);
19199
19200}
19201static void
19202rsn_akms_base_custom(char *result, uint32_t akms)
19203{
19204 char oui_result[OUIBASELEN(64 + 20)];
19205 char *tmp_str;
19206
19207 oui_result[0] = '\0';
19208 oui_base_custom(oui_result, akms >> 8);
19209 tmp_str = val_to_str(NULL((void*)0), akms & 0xFF, ieee80211_rsn_keymgmt_vals, "Unknown %d");
19210 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19211 wmem_free(NULL((void*)0), tmp_str);
19212}
19213
19214static char *
19215rsn_pcs_return(wmem_allocator_t *scope, uint32_t pcs)
19216{
19217 char *result;
19218
19219 result = (char *)wmem_alloc(scope, SHORT_STR256);
19220 result[0] = '\0';
19221 rsn_pcs_base_custom(result, pcs);
19222
19223 return result;
19224}
19225
19226static char *
19227rsn_akms_return(wmem_allocator_t *scope, uint32_t akms)
19228{
19229 char *result;
19230
19231 result = (char *)wmem_alloc(scope, SHORT_STR256);
19232 result[0] = '\0';
19233 rsn_akms_base_custom(result, akms);
19234
19235 return result;
19236}
19237
19238static void
19239rsn_gmcs_base_custom(char *result, uint32_t gmcs)
19240{
19241 char oui_result[OUIBASELEN(64 + 20)];
19242 char *tmp_str;
19243
19244 oui_result[0] = '\0';
19245 oui_base_custom(oui_result, gmcs >> 8);
19246 tmp_str = val_to_str(NULL((void*)0), gmcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
19247 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19248 wmem_free(NULL((void*)0), tmp_str);
19249}
19250
19251static void
19252rsni_base_custom(char *result, uint8_t rsni)
19253{
19254 double temp_double;
19255
19256 if (rsni < 255) {
19257 temp_double = (double)rsni - 20;
19258 snprintf(result, ITEM_LABEL_LENGTH240, "%.1f dB", (temp_double / 2));
19259 } else
19260 snprintf(result, ITEM_LABEL_LENGTH240, "%d (Measurement not available)", rsni);
19261}
19262
19263static void
19264vht_tpe_custom(char *result, uint8_t txpwr)
19265{
19266 int8_t txpwr_db;
19267
19268 txpwr_db = (int8_t)(txpwr);
19269 snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dBm", (txpwr_db/2.0));
19270}
19271
19272static void
19273tpe_psd_custom(char *result, uint8_t txpwr)
19274{
19275 int8_t txpwr_db;
19276
19277 txpwr_db = (int8_t)(txpwr);
19278 if (txpwr_db == -128) {
19279 snprintf(result, ITEM_LABEL_LENGTH240, "Channel cannot be used for transmission");
19280 } else if (txpwr_db == 127) {
19281 snprintf(result, ITEM_LABEL_LENGTH240, "No maximum PSD is specified for channel");
19282 } else {
19283 snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dBm/MHz", (txpwr_db/2.0));
19284 }
19285}
19286
19287static void
19288channel_number_custom(char *result, uint8_t channel_number)
19289{
19290 switch(channel_number){
19291 case 0:
19292 snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on all supported channels in the specified Operating Class)", channel_number);
19293 break;
19294 case 255:
19295 snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on all supported channels listed in the AP Channel Report)", channel_number);
19296 break;
19297 default :
19298 snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on that Channel Number)", channel_number);
19299 break;
19300 }
19301}
19302
19303/* WPA / WME */
19304static const value_string ieee802111_wfa_ie_type_vals[] = {
19305 { 1, "WPA Information Element" },
19306 { 2, "WMM/WME" },
19307 { 4, "WPS" },
19308 { 17, "Network Cost" },
19309 { 18, "Tethering" },
19310 { 0, NULL((void*)0) }
19311};
19312
19313static const value_string ieee80211_wfa_ie_wpa_cipher_vals[] = {
19314 { 0, "NONE" },
19315 { 1, "WEP (40-bit)" },
19316 { 2, "TKIP" },
19317 { 3, "AES (OCB)" },
19318 { 4, "AES (CCM)" },
19319 { 5, "WEP (104-bit)" },
19320 { 6, "BIP" },
19321 { 7, "Group addressed traffic not allowed" },
19322 { 0, NULL((void*)0) }
19323};
19324
19325static const value_string ieee80211_wfa_ie_wpa_keymgmt_vals[] = {
19326 { 0, "NONE" },
19327 { 1, "WPA" },
19328 { 2, "PSK" },
19329 { 3, "FT over IEEE 802.1X" },
19330 { 4, "FT using PSK" },
19331 { 5, "WPA (SHA256)" },
19332 { 6, "PSK (SHA256)" },
19333 { 7, "TDLS / TPK Handshake" },
19334 { 0, NULL((void*)0) }
19335};
19336
19337static const value_string ieee80211_wfa_ie_wme_acs_vals[] = {
19338 { 0, "Best Effort" },
19339 { 1, "Background" },
19340 { 2, "Video" },
19341 { 3, "Voice" },
19342 { 0, NULL((void*)0) }
19343};
19344
19345static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals[] = {
19346 { 0, "Uplink" },
19347 { 1, "Downlink" },
19348 { 2, "Direct link" },
19349 { 3, "Bidirectional link" },
19350 { 0, NULL((void*)0) }
19351};
19352
19353static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals[] = {
19354 { 0, "Legacy" },
19355 { 1, "U-APSD" },
19356 { 0, NULL((void*)0) }
19357};
19358
19359static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals[] = {
19360 { 0, "Best Effort" },
19361 { 1, "Background" },
19362 { 2, "Spare" },
19363 { 3, "Excellent Effort" },
19364 { 4, "Controlled Load" },
19365 { 5, "Video" },
19366 { 6, "Voice" },
19367 { 7, "Network Control" },
19368 { 0, NULL((void*)0) }
19369};
19370
19371/* Cost Level https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/24b04427-4ed6-4d12-a73d-c89ea72c7a94 */
19372static const value_string ieee80211_wfa_ie_nc_cost_level_vals[] = {
19373 { 0x0, "Unknown / The connection cost is unknown" },
19374 { 0x01, "Unrestricted / The connection is unlimited and has unrestricted usage constraints" },
19375 { 0x02, "Fixed / Usage counts toward a fixed allotment of data which the user has already paid for (or agreed to pay for)" },
19376 { 0x04, "Variable / The connection cost is on a per-byte basis" },
19377 {0, NULL((void*)0)}
19378};
19379
19380/* Cost Flags https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/b601a6a0-a4ff-4527-bf43-2eeee8c5796b */
19381static const value_string ieee80211_wfa_ie_nc_cost_flags_vals[] = {
19382 { 0x0, "Unknown / The usage is unknown or unrestricted" },
19383 { 0x01, "Over Data Limit / Usage has exceeded the data limit of the metered network; different network costs or conditions might apply" },
19384 { 0x02, "Congested / The network operator is experiencing or expecting heavy load" },
19385 { 0x04, "Roaming / The tethering connection is roaming outside the provider's home network or affiliates" },
19386 { 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" },
19387 {0, NULL((void*)0)}
19388};
19389
19390
19391static const value_string ieee80211_wfa_ie_tethering_type_vals[] = {
19392 { 0x2B, "Broadcasted" },
19393 {0, NULL((void*)0)}
19394};
19395
19396
19397static const value_string ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals[] = {
19398 { 0, "WMM AP may deliver all buffered frames (MSDUs and MMPDUs)" },
19399 { 1, "WMM AP may deliver a maximum of 2 buffered frames (MSDUs and MMPDUs) per USP" },
19400 { 2, "WMM AP may deliver a maximum of 4 buffered frames (MSDUs and MMPDUs) per USP" },
19401 { 3, "WMM AP may deliver a maximum of 6 buffered frames (MSDUs and MMPDUs) per USP" },
19402 { 0, NULL((void*)0)}
19403};
19404static const true_false_string ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs = {
19405 "WMM delivery and trigger enabled",
19406 "non-WMM PS"
19407};
19408
19409/* az: Ranging Parameters */
19410static const val64_string ieee80211_ranging_status_vals[] = {
19411 { 0, "Reserved" },
19412 { 1, "Successful; measurement exchanges are about to begin" },
19413 { 2, "Request incapable; do not send same request again; FTM session ends" },
19414 { 3, "Request failed; do not send new request for Value seconds; FTM session ends" },
19415 { 0, NULL((void*)0) }
19416};
19417
19418static const val64_string ieee80211_ranging_fmt_bw_vals[] = {
19419 { 0, "HE 20 MHz" },
19420 { 1, "HE 40 MHz" },
19421 { 2, "HE 80 MHz" },
19422 { 3, "HE 80+80 MHz" },
19423 { 4, "HE 160 MHz (two separate RF LOs)" },
19424 { 5, "HE 160 MHz (single RF LO)" },
19425 /* values 6-63 reserved */
19426 { 0, NULL((void*)0) }
19427};
19428
19429static const val64_string ieee80211_ranging_ltf_total_vals[] = {
19430 { 0, "4 LTFs" },
19431 { 1, "8 LTFs" },
19432 { 2, "16 LTFs" },
19433 { 3, "No max LTFs specified" },
19434 { 0, NULL((void*)0) }
19435};
19436
19437static void
19438wpa_mcs_base_custom(char *result, uint32_t mcs)
19439{
19440 char oui_result[OUIBASELEN(64 + 20)];
19441 char *tmp_str;
19442
19443 oui_result[0] = '\0';
19444 oui_base_custom(oui_result, mcs >> 8);
19445 tmp_str = val_to_str(NULL((void*)0), mcs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
19446 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19447 wmem_free(NULL((void*)0), tmp_str);
19448}
19449
19450static void
19451wpa_ucs_base_custom(char *result, uint32_t ucs)
19452{
19453 char oui_result[OUIBASELEN(64 + 20)];
19454 char *tmp_str;
19455
19456 oui_result[0] = '\0';
19457 oui_base_custom(oui_result, ucs >> 8);
19458 tmp_str = val_to_str(NULL((void*)0), ucs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
19459 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19460 wmem_free(NULL((void*)0), tmp_str);
19461}
19462static void
19463wpa_akms_base_custom(char *result, uint32_t akms)
19464{
19465 char oui_result[OUIBASELEN(64 + 20)];
19466 char *tmp_str;
19467
19468 oui_result[0] = '\0';
19469 oui_base_custom(oui_result, akms >> 8);
19470 tmp_str = val_to_str(NULL((void*)0), akms & 0xFF, ieee80211_wfa_ie_wpa_keymgmt_vals, "Unknown %d");
19471 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19472 wmem_free(NULL((void*)0), tmp_str);
19473}
19474
19475static char *
19476wpa_ucs_return(wmem_allocator_t *scope, uint32_t ucs)
19477{
19478 char *result;
19479
19480 result = (char *)wmem_alloc(scope, SHORT_STR256);
19481 result[0] = '\0';
19482 wpa_ucs_base_custom(result, ucs);
19483
19484 return result;
19485}
19486
19487static char *
19488wpa_akms_return(wmem_allocator_t *scope, uint32_t akms)
19489{
19490 char *result;
19491
19492 result = (char *)wmem_alloc(scope, SHORT_STR256);
19493 result[0] = '\0';
19494 wpa_akms_base_custom(result, akms);
19495
19496 return result;
19497}
19498
19499/* For each Field */
19500static const value_string ieee80211_wapi_suite_type[] = {
19501 {0, "Reserved"},
19502 {1, "WAI Certificate Authentication and Key Management"},
19503 {2, "WAI Preshared Key Authentication and Key Management"},
19504 {0, NULL((void*)0)},
19505};
19506/* For Summary Tag Information */
19507static const value_string ieee80211_wapi_suite_type_short[] = {
19508 {0, "Reserved"},
19509 {1, "WAI-CERT"},
19510 {2, "WAI-PSK"},
19511 {0, NULL((void*)0)},
19512};
19513
19514static const value_string ieee80211_wapi_cipher_type[] = {
19515 {0, "Reserved"},
19516 {1, "WPI-SMS4"},
19517 {0, NULL((void*)0)},
19518};
19519
19520static const value_string ieee802111_wfa_ie_wme_type[] = {
19521 { 0, "Information Element" },
19522 { 1, "Parameter Element" },
19523 { 2, "TSPEC Element" },
19524 { 0, NULL((void*)0)}
19525};
19526
19527static const value_string ft_subelem_id_vals[] = {
19528 {0, "Reserved"},
19529 {1, "PMK-R1 key holder identifier (R1KH-ID)"},
19530 {2, "GTK subelement"},
19531 {3, "PMK-R0 key holder identifier (R0KH-ID)"},
19532 {4, "IGTK"},
19533 {5, "Operating Channel Information (OCI)"},
19534 {6, "BIGTK"},
19535 {7, "WIGTK"},
19536 {8, "MLO GTK"},
19537 {9, "MLO IGTK"},
19538 {10, "MLO BIGTK"},
19539 {0, NULL((void*)0)}
19540};
19541
19542static int
19543dissect_wme_qos_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
19544{
19545 proto_item *wme_qos_info_item;
19546
19547 static int * const ieee80211_mgt_req[] = {
19548 &hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
19549 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
19550 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
19551 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
19552 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
19553 &hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
19554 NULL((void*)0)
19555 };
19556
19557 static int * const ieee80211_mgt_resp[] = {
19558 &hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
19559 &hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
19560 &hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
19561 NULL((void*)0)
19562 };
19563
19564 switch (ftype) {
19565 case MGT_ASSOC_REQ0x00:
19566 case MGT_PROBE_REQ0x04:
19567 case MGT_REASSOC_REQ0x02:
19568 {
19569 /* To AP so decode as per WMM standard Figure 7 QoS Info field when sent from WMM STA*/
19570 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_qos_info,
19571 ett_wme_qos_info, ieee80211_mgt_req,
19572 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19573 break;
19574 }
19575 case MGT_BEACON0x08:
19576 case MGT_PROBE_RESP0x05:
19577 case MGT_ASSOC_RESP0x01:
19578 case MGT_REASSOC_RESP0x03:
19579 case MGT_ACTION0x0D:
19580 {
19581 /* From AP so decode as per WMM standard Figure 6 QoS Info field when sent from WMM AP */
19582 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_qos_info,
19583 ett_wme_qos_info, ieee80211_mgt_resp,
19584 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19585 break;
19586 }
19587 default:
19588 wme_qos_info_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_qos_info, tvb, offset, 1, ENC_NA0x00000000);
19589 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);
19590 break;
19591 }
19592
19593 offset += 1;
19594 return offset;
19595}
19596
19597static int * const update_edca_info_headers[] = {
19598 &hf_ieee80211_s1g_update_edca_override,
19599 &hf_ieee80211_s1g_update_edca_ps_poll_aci,
19600 &hf_ieee80211_s1g_update_edca_raw_aci,
19601 &hf_ieee80211_s1g_update_edca_sta_type,
19602 &hf_ieee80211_s1g_update_edca_reserved,
19603 NULL((void*)0)
19604};
19605
19606static const value_string sta_field_type_vals[] = {
19607 { 0, "Valid for both sensor and non-sensor STAs" },
19608 { 1, "Valid for sensor STAs" },
19609 { 2, "Valid for non-sensor STAs" },
19610 { 3, "Reserved" },
19611 { 0, NULL((void*)0) }
19612};
19613
19614static int
19615decode_qos_parameter_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
19616{
19617 int i;
19618 bool_Bool is_s1g = sta_is_s1g(pinfo);
19619 /* WME QoS Info Field */
19620 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
19621 /* WME Reserved Field or EDCA Update */
19622 if (is_s1g) {
19623 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
19624 hf_ieee80211_s1g_update_edca_info,
19625 ett_update_edca_info, update_edca_info_headers,
19626 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19627
19628 } else {
19629 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_reserved, tvb, offset, 1, ENC_NA0x00000000);
19630 }
19631
19632 offset += 1;
19633 /* AC Parameters */
19634 for (i = 0; i < 4; i++)
19635 {
19636 proto_item *ac_item, *aci_aifsn_item, *ecw_item, *cw_item;
19637 proto_tree *ac_tree, *ecw_tree;
19638 uint8_t aci_aifsn, ecw, ecwmin, ecwmax;
19639 uint16_t cwmin, cwmax;
19640 static int * const ieee80211_wfa_ie_wme_be[] = {
19641 &hf_ieee80211_wfa_ie_wme_acp_aci_be,
19642 &hf_ieee80211_wfa_ie_wme_acp_acm_be,
19643 &hf_ieee80211_wfa_ie_wme_acp_aifsn_be,
19644 &hf_ieee80211_wfa_ie_wme_acp_reserved_be,
19645 NULL((void*)0)
19646 };
19647
19648 static int * const ieee80211_wfa_ie_wme_bk[] = {
19649 &hf_ieee80211_wfa_ie_wme_acp_aci_bk,
19650 &hf_ieee80211_wfa_ie_wme_acp_acm_bk,
19651 &hf_ieee80211_wfa_ie_wme_acp_aifsn_bk,
19652 &hf_ieee80211_wfa_ie_wme_acp_reserved_bk,
19653 NULL((void*)0)
19654 };
19655
19656 static int * const ieee80211_wfa_ie_wme_vi[] = {
19657 &hf_ieee80211_wfa_ie_wme_acp_aci_vi,
19658 &hf_ieee80211_wfa_ie_wme_acp_acm_vi,
19659 &hf_ieee80211_wfa_ie_wme_acp_aifsn_vi,
19660 &hf_ieee80211_wfa_ie_wme_acp_reserved_vi,
19661 NULL((void*)0)
19662 };
19663
19664 static int * const ieee80211_wfa_ie_wme_vo[] = {
19665 &hf_ieee80211_wfa_ie_wme_acp_aci_vo,
19666 &hf_ieee80211_wfa_ie_wme_acp_acm_vo,
19667 &hf_ieee80211_wfa_ie_wme_acp_aifsn_vo,
19668 &hf_ieee80211_wfa_ie_wme_acp_reserved_vo,
19669 NULL((void*)0)
19670 };
19671
19672 static int * const * ie_wme_hdrs[] = {
19673 ieee80211_wfa_ie_wme_be,
19674 ieee80211_wfa_ie_wme_bk,
19675 ieee80211_wfa_ie_wme_vi,
19676 ieee80211_wfa_ie_wme_vo
19677 };
19678
19679 static int * const ecw_max_hf[] = {
19680 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_be,
19681 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_bk,
19682 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_vi,
19683 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_vo
19684 };
19685
19686 static int * const ecw_min_hf[] = {
19687 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_be,
19688 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_bk,
19689 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_vi,
19690 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_vo
19691 };
19692
19693 static int * const txop_limit_hf[] = {
19694 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_be,
19695 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_bk,
19696 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_vi,
19697 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_vo
19698 };
19699
19700 ac_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_ac_parameters, tvb, offset, 4, ENC_NA0x00000000);
19701 ac_tree = proto_item_add_subtree(ac_item, ett_wme_ac);
19702
19703 /* ACI/AIFSN Field */
19704 aci_aifsn_item = proto_tree_add_bitmask_with_flags(ac_tree, tvb, offset, hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
19705 ett_wme_aci_aifsn, ie_wme_hdrs[i],
19706 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19707 aci_aifsn = tvb_get_uint8(tvb, offset);
19708 /* 802.11-2012, 8.4.2.31 EDCA Parameter Set element */
19709 if (aci_aifsn < 2) {
19710 expert_add_info_format(pinfo, aci_aifsn_item, &ei_ieee80211_qos_bad_aifsn,
19711 "The minimum value for the AIFSN subfield is 2 (found %u).", aci_aifsn);
19712 }
19713 proto_item_append_text(ac_item, " ACI %u (%s), ACM %s, AIFSN %u",
19714 (aci_aifsn & 0x60) >> 5, try_val_to_str((aci_aifsn & 0x60) >> 5, ieee80211_wfa_ie_wme_acs_vals),
19715 (aci_aifsn & 0x10) ? "yes" : "no", aci_aifsn & 0x0f);
19716 offset += 1;
19717
19718 /* ECWmin/ECWmax field */
19719 ecw_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_ecw, tvb, offset, 1, ENC_NA0x00000000);
19720 ecw_tree = proto_item_add_subtree(ecw_item, ett_wme_ecw);
19721 ecw = tvb_get_uint8(tvb, offset);
19722 ecwmin = ecw & 0x0f;
19723 ecwmax = (ecw & 0xf0) >> 4;
19724 cwmin= (1 << ecwmin) - 1;
19725 cwmax= (1 << ecwmax) - 1;
19726 cw_item = proto_tree_add_item(ecw_tree, *ecw_max_hf[i], tvb, offset, 1, ENC_NA0x00000000);
19727 proto_item_append_text(cw_item, " (CW Max: %u)", cwmax);
19728 cw_item = proto_tree_add_item(ecw_tree, *ecw_min_hf[i], tvb, offset, 1, ENC_NA0x00000000);
19729 proto_item_append_text(cw_item, " (CW Min: %u)", cwmin);
19730 proto_item_append_text(ac_item, ", ECWmin/max %u/%u (CWmin/max %u/%u)", ecwmin, ecwmax, cwmin, cwmax);
19731 offset += 1;
19732
19733 /* TXOP Limit */
19734 proto_tree_add_item(ac_tree, *txop_limit_hf[i], tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19735 proto_item_append_text(ac_item, ", TXOP %u", tvb_get_letohs(tvb, offset));
19736 offset += 2;
19737 }
19738
19739 return offset;
19740}
19741
19742static int
19743dissect_vendor_ie_wpawme(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, uint32_t tag_len, int ftype)
19744{
19745 uint8_t type;
19746
19747 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_type, tvb, offset, 1, ENC_NA0x00000000);
19748 type = tvb_get_uint8(tvb, offset);
19749 proto_item_append_text(tree, ": %s", val_to_str(pinfo->pool, type, ieee802111_wfa_ie_type_vals, "Unknown %d"));
19750 offset += 1;
19751
19752 switch (type) {
19753 case 1: /* Wi-Fi Protected Access (WPA) */
19754 {
19755 proto_item *wpa_mcs_item, *wpa_ucs_item, *wpa_akms_item;
19756 proto_item *wpa_sub_ucs_item, *wpa_sub_akms_item;
19757 proto_tree *wpa_mcs_tree, *wpa_ucs_tree, *wpa_akms_tree;
19758 proto_tree *wpa_sub_ucs_tree, *wpa_sub_akms_tree;
19759 uint16_t ucs_count, akms_count;
19760 unsigned ii;
19761
19762 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19763 offset += 2;
19764
19765 /* Multicast Cipher Suite */
19766 wpa_mcs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_mcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
19767 wpa_mcs_tree = proto_item_add_subtree(wpa_mcs_item, ett_wpa_mcs_tree);
19768 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19769
19770 /* Check if OUI is 00:50:F2 (WFA) */
19771 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
19772 {
19773 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_wfa_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
19774 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), GROUP_CIPHER_KEY);
19775 } else {
19776 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
19777 }
19778 offset += 4;
19779
19780 /* Unicast Cipher Suites */
19781 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19782 ucs_count = tvb_get_letohs(tvb, offset);
19783 offset += 2;
19784
19785 wpa_ucs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_list, tvb, offset, ucs_count * 4, ENC_NA0x00000000);
19786 wpa_ucs_tree = proto_item_add_subtree(wpa_ucs_item, ett_wpa_ucs_tree);
19787 for (ii = 0; ii < ucs_count; ii++)
19788 {
19789 wpa_sub_ucs_item = proto_tree_add_item(wpa_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
19790 wpa_sub_ucs_tree = proto_item_add_subtree(wpa_sub_ucs_item, ett_wpa_sub_ucs_tree);
19791 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19792
19793 /* Check if OUI is 00:50:F2 (WFA) */
19794 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
19795 {
19796 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19797 proto_item_append_text(wpa_ucs_item, " %s", wpa_ucs_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
19798 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), CIPHER_KEY);
19799 } else {
19800 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19801 }
19802 offset += 4;
19803 }
19804
19805 /* Authenticated Key Management Suites */
19806 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19807 akms_count = tvb_get_letohs(tvb, offset);
19808 offset += 2;
19809
19810 wpa_akms_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_list, tvb, offset, akms_count * 4, ENC_NA0x00000000);
19811 wpa_akms_tree = proto_item_add_subtree(wpa_akms_item, ett_wpa_akms_tree);
19812 for (ii = 0; ii < akms_count; ii++)
19813 {
19814 wpa_sub_akms_item = proto_tree_add_item(wpa_akms_tree, hf_ieee80211_wfa_ie_wpa_akms, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
19815 wpa_sub_akms_tree = proto_item_add_subtree(wpa_sub_akms_item, ett_wpa_sub_akms_tree);
19816 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19817
19818 /* Check if OUI is 00:50:F2 (WFA) */
19819 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
19820 {
19821 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19822 proto_item_append_text(wpa_akms_item, " %s", wpa_akms_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
19823 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), AKM_KEY);
19824 } else {
19825 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19826 }
19827 offset += 4;
19828 }
19829 break;
19830 }
19831 case 2: /* Wireless Multimedia Enhancements (WME) */
19832 {
19833 uint8_t subtype;
19834
19835 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_subtype, tvb, offset, 1, ENC_NA0x00000000);
19836 subtype = tvb_get_uint8(tvb, offset);
19837 proto_item_append_text(tree, ": %s", val_to_str(pinfo->pool, subtype, ieee802111_wfa_ie_wme_type, "Unknown %d"));
19838 offset += 1;
19839 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA0x00000000);
19840 offset += 1;
19841 switch (subtype) {
19842 case 0: /* WME Information Element */
19843 {
19844 /* WME QoS Info Field */
19845 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
19846 break;
19847 }
19848 case 1: /* WME Parameter Element */
19849 {
19850 offset = decode_qos_parameter_set(tree, tvb, pinfo, offset, ftype);
19851 break;
19852 }
19853 case 2: /* WME TSPEC Element */
19854 {
19855 static int * const ieee80211_wfa_ie_wme_tspec_tsinfo[] = {
19856 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
19857 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
19858 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
19859 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
19860 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
19861 NULL((void*)0)
19862 };
19863
19864 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
19865 ett_tsinfo_tree, ieee80211_wfa_ie_wme_tspec_tsinfo,
19866 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19867 offset += 3;
19868
19869 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19870 offset += 2;
19871
19872 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19873 offset += 2;
19874
19875 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19876 offset += 4;
19877
19878 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19879 offset += 4;
19880
19881 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19882 offset += 4;
19883
19884 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19885 offset += 4;
19886
19887 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19888 offset += 4;
19889
19890 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19891 offset += 4;
19892
19893 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19894 offset += 4;
19895
19896 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19897 offset += 4;
19898
19899 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19900 offset += 4;
19901
19902 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19903 offset += 4;
19904
19905 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19906 offset += 4;
19907
19908 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19909 offset += 2;
19910
19911 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19912 offset += 2;
19913
19914 break;
19915 }
19916 default:
19917 /* No default Action */
19918 break;
19919 } /* End switch (subtype) */
19920 break;
19921 }
19922 case 4: /* WPS: Wifi Protected Setup */
19923 {
19924 dissect_wps_tlvs(tree, tvb, offset, tag_len-1, pinfo, false0);
19925 }
19926 break;
19927 case 17: /* Network Cost: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/88f0cdf4-cdf2-4455-b849-4abf1e5c11ac */
19928 {
19929 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_cost_level, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
19930 offset += 1;
19931
19932 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
19933 offset += 1;
19934
19935 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_cost_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
19936 offset += 1;
19937
19938 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
19939 offset += 1;
19940 }
19941 break;
19942 case 18: /* Tethering: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/a097f5bb-6eca-44ad-9a02-20d46ad30d6d */
19943 {
19944 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_tethering_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19945 offset += 2;
19946
19947 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_tethering_mac_length, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19948 offset += 2;
19949
19950 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_tethering_mac, tvb, offset, 6, ENC_NA0x00000000);
19951 offset += 6;
19952
19953 }
19954 break;
19955 default:
19956 /* No default Action...*/
19957 break;
19958 } /* End switch (type) */
19959
19960 return offset;
19961}
19962
19963/*
19964 * Dissect a group data cipher suite which consists of an OUI and a one-byte
19965 * selector: IEEE802.11 2012 Figure 9-256.
19966 *
19967 * Accepts a two entry array of header fields so we can use this elsewhere.
19968 */
19969static int dissect_group_data_cipher_suite(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
19970 proto_tree *tree, int offset, int *hf_array, int ett_val, char *label)
19971{
19972 proto_tree *gdcs_tree = NULL((void*)0);
19973
19974 gdcs_tree = proto_tree_add_subtree(tree, tvb, offset, 4, ett_val, NULL((void*)0),
19975 label);
19976 proto_tree_add_item(gdcs_tree, hf_array[0], tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19977 offset += 3;
19978 proto_tree_add_item(gdcs_tree, hf_array[1], tvb, offset, 1, ENC_NA0x00000000);
19979 offset += 1;
19980
19981 return offset;
19982}
19983
19984static int
19985dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
19986 int offset, uint32_t tag_len, association_sanity_check_t *association_sanity_check);
19987
19988static int
19989dissect_wfa_rsn_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
19990{
19991 int tag_len = tvb_reported_length(tvb);
19992
19993 if (tag_len > 0)
19994 dissect_rsn_ie(pinfo, tree, tvb, 0, tag_len, NULL((void*)0));
19995
19996 return tag_len;
19997}
19998
19999static int
20000dissect_wfa_rsn_override_2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20001{
20002 int tag_len = tvb_reported_length(tvb);
20003
20004 if (tag_len > 0)
20005 dissect_rsn_ie(pinfo, tree, tvb, 0, tag_len, NULL((void*)0));
20006
20007 return tag_len;
20008}
20009
20010static int
20011dissect_rsnx_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int tag_len);
20012
20013static int
20014dissect_wfa_rsnx_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20015{
20016 int tag_len = tvb_reported_length(tvb);
20017
20018 if (tag_len > 0)
20019 dissect_rsnx_ie(tvb, pinfo, tree, tag_len);
20020
20021 return tag_len;
20022}
20023
20024static int
20025dissect_wfa_rsn_selection(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20026{
20027 int tag_len = tvb_reported_length(tvb);
20028
20029 proto_tree_add_item(tree, hf_ieee80211_wfa_rsn_selection, tvb, 0,
20030 1, ENC_NA0x00000000);
20031
20032 return tag_len;
20033}
20034
20035static int
20036dissect_wfa_rsn_override_link_kde(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20037{
20038 int tag_len = tvb_reported_length(tvb);
20039 int offset = 0;
20040
20041 proto_tree_add_item(tree, hf_ieee80211_wfa_rsn_or_link_kde_link_id, tvb, offset,
20042 1, ENC_NA0x00000000);
20043 offset++;
20044 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tree,
20045 tag_len - 1, -1, NULL((void*)0));
20046
20047 return tag_len;
20048}
20049
20050static const range_string qos_mgmt_attributes[] = {
20051 { 0, 0, "Reserved" },
20052 { 1, 1, "Port Range" },
20053 { 2, 2, "DSCP Policy" },
20054 { 3, 3, "TCLAS" },
20055 { 4, 4, "Domain Name" },
20056 { 5, 255, "Reserved" },
20057 { 0, 0, NULL((void*)0) }
20058};
20059
20060static int
20061ieee80211_frame_classifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
20062 proto_tree *tree, int offset, int tag_len);
20063
20064static int
20065dissect_qos_mgmt(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20066{
20067 int offset = 0;
20068 uint8_t attr_id;
20069 uint8_t attr_len;
20070 uint8_t attr_num = 0;
20071 proto_tree *sub_tree = NULL((void*)0);
20072
20073 while (tvb_captured_length_remaining(tvb, offset)) {
20074 attr_id = tvb_get_uint8(tvb, offset);
20075 attr_len = tvb_get_uint8(tvb, offset + 1);
20076 proto_tree *attr = NULL((void*)0);
20077
20078 attr = proto_tree_add_subtree_format(tree, tvb, offset, attr_len + 2,
20079 ett_qos_mgmt_attributes, NULL((void*)0),
20080 "QoS Management Attribute %d", attr_num++);
20081 proto_tree_add_item(attr, hf_ieee80211_qos_mgmt_attribute_id, tvb, offset,
20082 1, ENC_NA0x00000000);
20083 offset += 1;
20084
20085 proto_tree_add_item(attr, hf_ieee80211_qos_mgmt_attribute_len, tvb, offset,
20086 1, ENC_NA0x00000000);
20087 offset += 1;
20088
20089 switch (attr_id) {
20090 case 1:
20091 sub_tree = proto_tree_add_subtree(attr, tvb, offset, 1,
20092 ett_qos_mgmt_dscp_policy_capabilities, NULL((void*)0),
20093 "Port Range");
20094 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_start_port_range,
20095 tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
20096 offset += 2;
20097
20098 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_end_port_range, tvb,
20099 offset, 2, ENC_BIG_ENDIAN0x00000000);
20100 offset += 2;
20101 break;
20102 case 2:
20103 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20104 ett_qos_mgmt_dscp_policy, NULL((void*)0),
20105 "DSCP Policy");
20106
20107 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_dscp_pol_id, tvb,
20108 offset, 1, ENC_NA0x00000000);
20109 offset += 1;
20110
20111 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_dscp_pol_req_type,
20112 tvb, offset, 1, ENC_NA0x00000000);
20113 offset += 1;
20114
20115 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_dscp_pol_dscp, tvb,
20116 offset, 1, ENC_NA0x00000000);
20117 offset += 1;
20118 break;
20119 case 3:
20120 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20121 ett_qos_mgmt_tclas, NULL((void*)0),
20122 "TCLAS");
20123
20124 ieee80211_frame_classifier(tvb, pinfo, sub_tree, offset, attr_len);
20125 offset += attr_len;
20126 break;
20127 case 4:
20128 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20129 ett_qos_mgmt_domain_name, NULL((void*)0),
20130 "Domain Name");
20131 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_domain_name, tvb,
20132 offset, attr_len, ENC_ASCII0x00000000);
20133 offset += attr_len;
20134 break;
20135 default:
20136 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20137 ett_qos_mgmt_unknown_attribute, NULL((void*)0),
20138 "Unknown attribute");
20139 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_unknown_attr, tvb,
20140 offset, attr_len, ENC_NA0x00000000);
20141 offset += attr_len;
20142 break;
20143 }
20144 }
20145
20146 return offset;
20147}
20148
20149static int * const wfa_capa_fields[] = {
20150 &hf_ieee80211_wfa_capa_mgmt_dscp_policy,
20151 &hf_ieee80211_wfa_capa_mgmt_unsol_dscp_policy,
20152 &hf_ieee80211_wfa_capa_mgmt_scs_traffic_desc,
20153 &hf_ieee80211_wfa_capa_5g_wifi_qos_mapping,
20154 &hf_ieee80211_wfa_capa_data_plane_stat_report,
20155 &hf_ieee80211_wfa_capa_radio_counters_stat_support,
20156 &hf_ieee80211_wfa_capa_control_plane_stat_report,
20157 &hf_ieee80211_wfa_capa_unsolicited_report_support,
20158 NULL((void*)0)
20159};
20160
20161static int * const wfa_capa_supp_gene[] = {
20162 &hf_ieee80211_wfa_capa_attr_supp_generations_b0,
20163 &hf_ieee80211_wfa_capa_attr_supp_generations_b1,
20164 &hf_ieee80211_wfa_capa_attr_supp_generations_b2,
20165 &hf_ieee80211_wfa_capa_attr_supp_generations_b3,
20166 &hf_ieee80211_wfa_capa_attr_supp_generations_reserved,
20167 NULL((void*)0)
20168};
20169
20170static int * const wfa_capa_cert_gene[] = {
20171 &hf_ieee80211_wfa_capa_attr_cert_generations_b0,
20172 &hf_ieee80211_wfa_capa_attr_cert_generations_b1,
20173 &hf_ieee80211_wfa_capa_attr_cert_generations_b2,
20174 &hf_ieee80211_wfa_capa_attr_cert_generations_b3,
20175 &hf_ieee80211_wfa_capa_attr_cert_generations_reserved,
20176 NULL((void*)0)
20177};
20178
20179static const range_string wfa_capa_attr_id[] = {
20180 { 0, 0, "Reserved" },
20181 { 1, 1, "Generational Capabilities Indication attribute" },
20182 { 2, 220, "Reserved" },
20183 { 221, 221, "Vendor Specific attribute" },
20184 { 222, 225, "Reserved" },
20185 { 0, 0, NULL((void*)0) }
20186};
20187
20188static int
20189dissect_wfa_capa(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20190{
20191 uint32_t attr_id = 0, attr_len = 0;
20192 unsigned offset = 0, tag_len = tvb_captured_length_remaining(tvb, offset);
20193 proto_tree *attr_tree = NULL((void*)0);
20194 uint32_t capa_len = 0;
20195
20196 if (tag_len < 2) {
20197 proto_item *tag_data;
20198
20199 tag_data = proto_tree_add_item(tree, hf_ieee80211_wfa_capa_tag_data, tvb,
20200 offset, tag_len, ENC_NA0x00000000);
20201 expert_add_info_format(pinfo, tag_data, &ei_ieee80211_tag_length,
20202 "WFA Capabilities length %u too short, must be >= 2", tag_len);
20203
20204 return tag_len;
20205 }
20206
20207 /* There is at least two bytes, a length and the capabilities. */
20208 /* Capa length can be 0 */
20209 proto_tree_add_item_ret_uint(tree, hf_ieee80211_wfa_capa_tag_len, tvb, offset,
20210 1, ENC_NA0x00000000, &capa_len);
20211 offset += 1;
20212
20213 if (capa_len > 0) {
20214 proto_tree_add_bitmask(tree, tvb, offset,
20215 hf_ieee80211_wfa_capa_tag_capabilities,
20216 ett_wfa_capa, wfa_capa_fields,
20217 ENC_NA0x00000000);
20218 offset += capa_len;
20219 }
20220
20221 if (tag_len > offset)
20222 attr_tree = proto_tree_add_subtree(tree, tvb, offset, tag_len - offset,
20223 ett_wfa_capa_attributes, NULL((void*)0),
20224 "Attributes");
20225 /* Deal with the attributes */
20226 while (tag_len > offset) {
20227 proto_tree_add_item_ret_uint(attr_tree, hf_ieee80211_wfa_capa_attr_id, tvb,
20228 offset, 1, ENC_NA0x00000000, &attr_id);
20229 offset += 1;
20230
20231 proto_tree_add_item_ret_uint(attr_tree, hf_ieee80211_wfa_capa_attr_len, tvb,
20232 offset, 1, ENC_NA0x00000000, &attr_len);
20233 offset += 1;
20234
20235 if (attr_id == 1) {/* Generational Capa indication */
20236 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_capa_attr_supp_gene_length,
20237 tvb, offset, 1, ENC_NA0x00000000);
20238 offset += 1;
20239
20240 proto_tree_add_bitmask_with_flags(attr_tree, tvb, offset,
20241 hf_ieee80211_wfa_capa_attr_supp_generations,
20242 ett_wfa_capa_supp_gene, wfa_capa_supp_gene,
20243 ENC_NA0x00000000, BMT_NO_APPEND0x01);
20244 offset += 1;
20245
20246 if (attr_len > 2) {
20247 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_capa_attr_cert_gene_length,
20248 tvb, offset, 1, ENC_NA0x00000000);
20249 offset += 1;
20250
20251 proto_tree_add_bitmask_with_flags(attr_tree, tvb, offset,
20252 hf_ieee80211_wfa_capa_attr_cert_generations,
20253 ett_wfa_capa_cert_gene, wfa_capa_cert_gene,
20254 ENC_NA0x00000000, BMT_NO_APPEND0x01);
20255 offset += 1;
20256 }
20257 } else {
20258 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_capa_attr_field, tvb,
20259 offset, attr_len, ENC_NA0x00000000);
20260 offset += attr_len;
20261 }
20262 }
20263
20264 return offset;
20265}
20266
20267/*
20268 * Handle the HS 2.0 rev 2 OSU Server-only authenticated layer 2 Encryption
20269 * Network element. This is almost the same format as the RSNE so maybe some
20270 * common code can be used.
20271 */
20272static int
20273dissect_hs20_osen(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20274{
20275 int offset = 0;
20276 int hf_array[2] = { hf_ieee80211_group_data_cipher_suite_oui,
20277 hf_ieee80211_group_data_cipher_suite_type };
20278 proto_tree *pwc_list = NULL((void*)0);
20279 proto_item *pwcsi = NULL((void*)0);
20280 uint16_t pwc_count = 0, pwc_index = 0;
20281 uint16_t akms_count = 0, akms_index = 0;
20282 static int * const osen_rsn_cap[] = {
20283 &hf_ieee80211_osen_rsn_cap_preauth,
20284 &hf_ieee80211_osen_rsn_cap_no_pairwise,
20285 &hf_ieee80211_osen_rsn_cap_ptksa_replay_counter,
20286 &hf_ieee80211_osen_rsn_cap_gtksa_replay_counter,
20287 &hf_ieee80211_osen_rsn_cap_mfpr,
20288 &hf_ieee80211_osen_rsn_cap_mfpc,
20289 &hf_ieee80211_osen_rsn_cap_jmr,
20290 &hf_ieee80211_osen_rsn_cap_peerkey,
20291 &hf_ieee80211_osen_rsn_spp_a_msdu_capable,
20292 &hf_ieee80211_osen_rsn_spp_a_msdu_required,
20293 &hf_ieee80211_osen_rsn_pbac,
20294 &hf_ieee80211_osen_extended_key_id_iaf,
20295 &hf_ieee80211_osen_reserved,
20296 NULL((void*)0)
20297 };
20298 uint16_t pmkid_count = 0, pmkid_index = 0;
20299 int gmcs_array[2] = { hf_ieee80211_osen_group_management_cipher_suite_oui,
20300 hf_ieee80211_osen_group_management_cipher_suite_type };
20301
20302 offset = dissect_group_data_cipher_suite(tvb, pinfo, tree, offset, hf_array,
20303 ett_osen_group_data_cipher_suite,
20304 "OSEN Group Data Cipher Suite");
20305
20306 pwc_count = tvb_get_letohs(tvb, offset);
20307 proto_tree_add_item(tree, hf_ieee80211_osen_pcs_count, tvb, offset,
20308 2, ENC_LITTLE_ENDIAN0x80000000);
20309 offset += 2;
20310
20311 if (pwc_count > 0) {
20312 int start_offset = offset;
20313 pwc_list = proto_tree_add_subtree(tree, tvb, offset, -1,
20314 ett_osen_pairwise_cipher_suites, &pwcsi,
20315 "OSEN Pairwise Cipher Suite List");
20316
20317 while (pwc_count > 0) {
20318 if (tvb_reported_length_remaining(tvb, offset) >= 4) {
20319 int hf_array2[2] = { hf_ieee80211_osen_pairwise_cipher_suite_oui,
20320 hf_ieee80211_osen_pairwise_cipher_suite_type };
20321 char label[128];
20322
20323 snprintf(label, sizeof(label), "OSEN Pairwise Cipher Suite %d", pwc_index);
20324 offset = dissect_group_data_cipher_suite(tvb, pinfo, pwc_list,
20325 offset, hf_array2, ett_osen_pairwise_cipher_suite,
20326 label);
20327 pwc_index++;
20328 pwc_count--;
20329 } else {
20330 /* Insert the remaining? Expert Info? */
20331 offset += tvb_reported_length_remaining(tvb, offset);
20332 break;
20333 }
20334 }
20335
20336 proto_item_set_len(pwcsi, offset - start_offset);
20337 }
20338
20339 if (tvb_reported_length_remaining(tvb, offset) == 0) {
20340 return tvb_captured_length(tvb);
20341 }
20342
20343 /* Now handle the AKM Suites */
20344 akms_count = tvb_get_letohs(tvb, offset);
20345 proto_tree_add_item(tree, hf_ieee80211_osen_akm_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20346 offset += 2;
20347
20348 if (akms_count > 0) {
20349 int start_offset = offset;
20350 proto_tree *akm_list = NULL((void*)0);
20351 proto_item *akmcsi = NULL((void*)0);
20352
20353 akm_list = proto_tree_add_subtree(tree, tvb, offset, -1,
20354 ett_osen_akm_cipher_suites, &akmcsi,
20355 "OSEN AKM Cipher Suite List");
20356
20357 while (akms_count > 0) {
20358 if (tvb_reported_length_remaining(tvb, offset) >= 4) {
20359 int hf_array3[2] = { hf_ieee80211_osen_akm_cipher_suite_oui,
20360 hf_ieee80211_osen_akm_cipher_suite_type};
20361 char label[128];
20362
20363 snprintf(label, sizeof(label), "OSEN AKM Cipher Suite %d", akms_index);
20364 offset = dissect_group_data_cipher_suite(tvb, pinfo, akm_list,
20365 offset, hf_array3, ett_osen_akm_cipher_suite,
20366 label);
20367 akms_index++;
20368 akms_count--;
20369 } else {
20370 /* Expert info? */
20371 offset += tvb_reported_length_remaining(tvb, offset);
20372 break;
20373 }
20374 }
20375 proto_item_set_len(akmcsi, offset - start_offset);
20376 }
20377
20378 /* Any more? */
20379 if (tvb_reported_length_remaining(tvb, offset) == 0) {
20380 return tvb_captured_length(tvb);
20381 }
20382
20383 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_osen_rsn_cap_flags,
20384 ett_osen_rsn_cap_tree, osen_rsn_cap,
20385 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
20386 offset += 2;
20387
20388 /* Any more? */
20389 if (tvb_reported_length_remaining(tvb, offset) == 0) {
20390 return tvb_captured_length(tvb);
20391 }
20392
20393 pmkid_count = tvb_get_letohs(tvb, offset);
20394 proto_tree_add_item(tree, hf_ieee80211_osen_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20395 offset += 2;
20396
20397 if (pmkid_count > 0) {
20398 proto_tree *pmkid_list = NULL((void*)0);
20399
20400 pmkid_list = proto_tree_add_subtree(tree, tvb, offset, pmkid_count * 16,
20401 ett_osen_pmkid_list, NULL((void*)0),
20402 "OSEN PKMID List");
20403
20404 while (pmkid_count > 0) {
20405 proto_tree *pmkid_tree = NULL((void*)0);
20406
20407 pmkid_tree = proto_tree_add_subtree_format(pmkid_list, tvb,offset, 16,
20408 ett_osen_pmkid_tree, NULL((void*)0),
20409 "OSEN PKMID %d", pmkid_index);
20410 proto_tree_add_item(pmkid_tree, hf_ieee80211_osen_pmkid, tvb, offset, 16,
20411 ENC_NA0x00000000);
20412 offset += 16;
20413 pmkid_index++;
20414 pmkid_count--;
20415 }
20416 }
20417
20418 offset = dissect_group_data_cipher_suite(tvb, pinfo, tree, offset, gmcs_array,
20419 ett_osen_group_management_cipher_suite,
20420 "OSEN Group Management Cipher Suite");
20421
20422 return offset;
20423}
20424
20425static const value_string hs20_indication_version_number_vals[] = {
20426 { 0, "1.x" },
20427 { 1, "2.x" },
20428 { 2, "3.x" },
20429 { 0, NULL((void*)0) }
20430};
20431
20432static int
20433dissect_hs20_indication(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20434{
20435 static int * const ieee80211_hs20_indication[] = {
20436 &hf_ieee80211_hs20_indication_dgaf_disabled,
20437 &hf_ieee80211_hs20_indication_pps_mo_id_present,
20438 &hf_ieee80211_hs20_indication_anqp_domain_id_present,
20439 &hf_ieee80211_hs20_reserved,
20440 &hf_ieee80211_hs20_indication_version_number,
20441 NULL((void*)0)
20442 };
20443 int len = tvb_captured_length(tvb);
20444 int offset = 0;
20445 uint8_t indic = tvb_get_uint8(tvb, offset);
20446
20447 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_hs20_indication,
20448 ENC_NA0x00000000);
20449 offset++;
20450
20451 if (len >= 3 && (indic & 0x02)) { /* Contains a PPS MO ID field ... display it. */
20452 proto_tree_add_item(tree, hf_ieee80211_hs20_indication_pps_mo_id, tvb, offset,
20453 2, ENC_LITTLE_ENDIAN0x80000000);
20454 offset += 2;
20455 }
20456
20457 if ((len >= (offset + 2)) && (indic & 0x04)) {
20458 proto_tree_add_item(tree, hf_ieee80211_hs20_indication_anqp_domain_id, tvb, offset,
20459 2, ENC_LITTLE_ENDIAN0x80000000);
20460 offset += 2;
20461 }
20462
20463 return offset;
20464}
20465
20466enum ieee80211_wfa_60g_attr {
20467 /* 0 Reserved */
20468 WIFI_60G_ATTR_CAPABILITY = 1,
20469 /* 2 - 225 Reserved */
20470};
20471
20472static const value_string ieee80211_wfa_60g_attr_ids[] = {
20473 { WIFI_60G_ATTR_CAPABILITY, "60GHz Capability" },
20474 { 0, NULL((void*)0) }
20475};
20476
20477static int
20478dissect_wfa_60g_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
20479{
20480 int end = tvb_reported_length(tvb);
20481 int offset = 0;
20482 uint8_t id;
20483 uint16_t len;
20484 proto_tree *wf60g_tree;
20485 proto_item *attrs;
20486
20487 while (offset < end) {
20488 if (end - offset < 2) {
20489 expert_add_info_format(pinfo, tree, &ei_ieee80211_wfa_60g_attr_len_invalid, "Packet too short for Wi-Fi 60G attribute");
20490 break;
20491 }
20492
20493 id = tvb_get_uint8(tvb, offset);
20494 len = tvb_get_ntohs(tvb, offset + 1);
20495 attrs = proto_tree_add_item(tree, hf_ieee80211_wfa_60g_attr, tvb, offset, 0, ENC_NA0x00000000);
20496 proto_item_append_text(attrs, ": %s", val_to_str(pinfo->pool, id, ieee80211_wfa_60g_attr_ids,
20497 "Unknown attribute ID (%u)"));
20498 wf60g_tree = proto_item_add_subtree(attrs, ett_ieee80211_wfa_60g_attr);
20499 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20500 offset += 1;
20501 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20502 offset += 1;
20503
20504
20505 switch (id) {
20506 case WIFI_60G_ATTR_CAPABILITY:
20507 if (len - offset < 7) {
20508 expert_add_info_format(pinfo, tree, &ei_ieee80211_wfa_60g_attr_len_invalid, "Packet too short for 60G capability attribute");
20509 break;
20510 }
20511
20512 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_cap_sta_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
20513 offset += 6;
20514 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_cap_recv_amsdu_frames, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20515 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_cap_reserved, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20516 offset += 1;
20517 break;
20518 default:
20519 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_wfa_60g_unknown_attribute, tvb,
20520 offset, len+2, "Unknown attribute ID (%u)", id);
20521 }
20522
20523 offset += len;
20524 }
20525 return offset;
20526}
20527
20528static int
20529dissect_owe_transition_mode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20530{
20531 uint8_t ssid_len;
20532
20533 int len = tvb_captured_length(tvb);
20534 int offset = 0;
20535
20536 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_bssid, tvb, offset, 6, ENC_NA0x00000000);
20537 offset += 6;
20538 len -= 6;
20539
20540 ssid_len = tvb_get_uint8(tvb, offset);
20541
20542 proto_tree_add_uint(tree, hf_ieee80211_wfa_ie_owe_ssid_length, tvb, offset, 1, ssid_len);
20543 offset += 1;
20544 len -= 1;
20545
20546 if (len < ssid_len) {
20547 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20548 return offset;
20549 }
20550
20551 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_ssid, tvb, offset, ssid_len, ENC_ASCII0x00000000);
20552 offset += len;
20553 len -= len;
20554
20555 if (len >= 2) {
20556 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_band_info, tvb, offset, 1, ENC_NA0x00000000);
20557 offset += 1;
20558
20559 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_channel_info, tvb, offset, 1, ENC_NA0x00000000);
20560 offset += 1;
20561 }
20562
20563 return offset;
20564}
20565
20566static int
20567dissect_transition_disable_kde(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20568{
20569 int tag_len = tvb_captured_length(tvb);
20570 int offset = 0;
20571 static int * const ieee80211_wfa_transition_disable_flags[] = {
20572 &hf_ieee80211_wfa_ie_transition_disable_wpa3_personal,
20573 &hf_ieee80211_wfa_ie_transition_disable_sae_pk,
20574 &hf_ieee80211_wfa_ie_transition_disable_wpa3_enterprise,
20575 &hf_ieee80211_wfa_ie_transition_disable_enhanced_open,
20576 &hf_ieee80211_wfa_ie_transition_disable_reserved_b4thru7,
20577 NULL((void*)0)
20578 };
20579
20580 if (tag_len < 1) {
20581 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20582 return 0;
20583 }
20584
20585 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_transition_disable_bitmap,
20586 ett_ieee80211_wfa_transition_disable_tree,
20587 ieee80211_wfa_transition_disable_flags,
20588 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
20589 offset++;
20590
20591 if (offset < tag_len)
20592 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_transition_disable_reserved, tvb, offset, tag_len-offset, ENC_NA0x00000000);
20593 offset = tag_len;
20594
20595 return offset;
20596}
20597
20598static int
20599dissect_mbo_oce(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20600{
20601 int len = tvb_reported_length(tvb);
20602 int offset = 0;
20603
20604 while (len >= 2) {
20605 proto_item *attr_item;
20606 proto_tree *attr_tree;
20607 uint8_t attr_id = tvb_get_uint8(tvb, offset);
20608 uint8_t attr_len = tvb_get_uint8(tvb, offset + 1);
20609
20610 if (len < (attr_len + 2)) {
20611 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20612 return offset;
20613 }
20614
20615 attr_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_oce_attr, tvb, offset, attr_len + 2, ENC_NA0x00000000);
20616 attr_tree = proto_item_add_subtree(attr_item, ett_mbo_oce_attr);
20617 proto_item_append_text(attr_item, " (%s)", val_to_str_const(attr_id, wfa_mbo_oce_attr_id_vals, "Unknown"));
20618
20619 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_oce_attr_id, tvb, offset, 1, ENC_NA0x00000000);
20620 offset += 1;
20621 len -= 1;
20622
20623 proto_tree_add_uint(attr_tree, hf_ieee80211_wfa_ie_mbo_oce_attr_len, tvb, offset, 1, attr_len);
20624 offset += 1;
20625 len -= 1;
20626
20627 switch (attr_id) {
20628 case MBO_AP_CAPABILITY_INDICATION1:
20629 {
20630 proto_item *cap_item;
20631 proto_tree *cap_tree;
20632
20633 if (attr_len != 1) {
20634 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20635 return offset;
20636 }
20637 cap_item = proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_ap_cap, tvb, offset, 1, ENC_NA0x00000000);
20638 cap_tree = proto_item_add_subtree(cap_item, ett_mbo_ap_cap);
20639 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_mbo_ap_cap_cell, tvb, offset, 1, ENC_NA0x00000000);
20640 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_mbo_ap_cap_reserved, tvb, offset, 1, ENC_NA0x00000000);
20641 break;
20642 }
20643 case MBO_NON_PREF_CHANNEL_REPORT2:
20644 if (attr_len == 0)
20645 break;
20646
20647 if (attr_len < 3) {
20648 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20649 return offset;
20650 }
20651 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class, tvb, offset, 1, ENC_NA0x00000000);
20652 offset += 1;
20653 len -= 1;
20654 attr_len -= 1;
20655 while (attr_len > 2) {
20656 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan, tvb, offset, 1, ENC_NA0x00000000);
20657 offset += 1;
20658 len -= 1;
20659 attr_len -= 1;
20660 }
20661
20662 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref, tvb, offset, 1, ENC_NA0x00000000);
20663 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason, tvb, offset + 1, 1, ENC_NA0x00000000);
20664 break;
20665 case MBO_CELLULAR_DATA_CAPABILITIES3:
20666 if (attr_len != 1) {
20667 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20668 return offset;
20669 }
20670 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_cellular_cap, tvb, offset, 1, ENC_NA0x00000000);
20671 break;
20672 case MBO_ASSOCIATION_DISALLOWED4:
20673 if (attr_len != 1) {
20674 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20675 return offset;
20676 }
20677 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_assoc_disallow_reason, tvb, offset, 1, ENC_NA0x00000000);
20678 break;
20679 case MBO_CELLULAR_DATA_PREFERENCE5:
20680 if (attr_len != 1) {
20681 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20682 return offset;
20683 }
20684 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_cellular_pref, tvb, offset, 1, ENC_NA0x00000000);
20685 break;
20686 case MBO_TRANSITION_REASON6:
20687 if (attr_len != 1) {
20688 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20689 return offset;
20690 }
20691 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_transition_reason, tvb, offset, 1, ENC_NA0x00000000);
20692 break;
20693 case MBO_TRANSITION_REJECTION_REASON7:
20694 if (attr_len != 1) {
20695 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20696 return offset;
20697 }
20698 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_transition_rej_reason, tvb, offset, 1, ENC_NA0x00000000);
20699 break;
20700 case MBO_ASSOCIATION_RETRY_DELAY8:
20701 {
20702 if (attr_len != 2) {
20703 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20704 return offset;
20705 }
20706 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_assoc_retry_delay, tvb, offset,
20707 2, ENC_LITTLE_ENDIAN0x80000000);
20708 break;
20709 }
20710 case OCE_CAPABILITY_INDICATION101:
20711 {
20712 proto_item *cap_item;
20713 proto_tree *cap_tree;
20714
20715 if (attr_len != 1) {
20716 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20717 return offset;
20718 }
20719 cap_item = proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_cap_ctrl, tvb, offset, 1, ENC_NA0x00000000);
20720 cap_tree = proto_item_add_subtree(cap_item, ett_oce_cap);
20721 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_release, tvb, offset, 1, ENC_NA0x00000000);
20722 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_sta_cfon, tvb, offset, 1, ENC_NA0x00000000);
20723 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_11b_only_ap, tvb, offset, 1, ENC_NA0x00000000);
20724 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_hlp, tvb, offset, 1, ENC_NA0x00000000);
20725 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_non_oce_ap, tvb, offset, 1, ENC_NA0x00000000);
20726 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_reserved, tvb, offset, 1, ENC_NA0x00000000);
20727 break;
20728 }
20729 case OCE_RSSI_ASSOCIATION_REJECTION102:
20730 {
20731 if (attr_len != 2) {
20732 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20733 return offset;
20734 }
20735 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delta, tvb,
20736 offset, 1, ENC_NA0x00000000);
20737 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delay, tvb,
20738 offset + 1, 1, ENC_NA0x00000000);
20739 break;
20740 }
20741 case OCE_REDUCED_WAN_METRICS103:
20742 {
20743 proto_item *cap_item;
20744 proto_tree *cap_tree;
20745 uint8_t capacity;
20746
20747 if (attr_len != 1) {
20748 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20749 return offset;
20750 }
20751 cap_item = proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap,
20752 tvb, offset, 1, ENC_NA0x00000000);
20753 cap_tree = proto_item_add_subtree(cap_item, ett_oce_metrics_cap);
20754
20755 capacity = tvb_get_uint8(tvb, offset);
20756 cap_item = proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_downlink,
20757 tvb, offset, 1, ENC_NA0x00000000);
20758 proto_item_append_text(cap_item, " (%d kbit/s)", (1 << (capacity & 0xF)) * 100);
20759 cap_item = proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_uplink,
20760 tvb, offset, 1, ENC_NA0x00000000);
20761 capacity >>= 4;
20762 proto_item_append_text(cap_item, " (%d kbit/s)", (1 << (capacity & 0xF)) * 100);
20763 break;
20764 }
20765 case OCE_RNR_COMPLETENESS104:
20766 while (attr_len >= 4) {
20767 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_rnr_completeness_short_ssid,
20768 tvb, offset, 4, ENC_ASCII0x00000000);
20769 offset += 4;
20770 attr_len -= 4;
20771 len -= 4;
20772 }
20773 break;
20774 case OCE_PROBE_SUPPR_BSSID105:
20775 while (attr_len >= 6) {
20776 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_probe_suppr_bssid,
20777 tvb, offset, 6, ENC_NA0x00000000);
20778 offset += 6;
20779 attr_len -= 6;
20780 len -= 6;
20781 }
20782 break;
20783 case OCE_PROBE_SUPPR_SSID106:
20784 if (attr_len < 4) {
20785 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20786 return offset;
20787 }
20788 while (attr_len >= 4) {
20789 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_probe_suppr_ssid,
20790 tvb, offset, 4, ENC_ASCII0x00000000);
20791 offset += 4;
20792 attr_len -= 4;
20793 len -= 4;
20794 }
20795 break;
20796 default:
20797 break;
20798 }
20799
20800 offset += attr_len;
20801 len -= attr_len;
20802 }
20803
20804 if (len != 0) {
20805 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20806 }
20807
20808 return offset;
20809}
20810
20811static int
20812dissect_wfa_wnm_non_pref_chan(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20813{
20814 int len = tvb_reported_length(tvb);
20815 int offset = 0;
20816
20817 if (len == 0)
20818 return 0;
20819
20820 if (len < 3) {
20821 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20822 return 0;
20823 }
20824
20825 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class, tvb, offset, 1, ENC_NA0x00000000);
20826 offset ++;
20827 len --;
20828 while (len > 2) {
20829 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan, tvb, offset, 1, ENC_NA0x00000000);
20830 offset ++;
20831 len --;
20832 }
20833
20834 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref, tvb, offset, 1, ENC_NA0x00000000);
20835 offset ++;
20836 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason, tvb, offset, 1, ENC_NA0x00000000);
20837 offset ++;
20838 return offset;
20839}
20840
20841static int
20842dissect_wfa_wnm_cell_cap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20843{
20844 int len = tvb_reported_length(tvb);
20845
20846 if (len != 1) {
20847 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20848 return 0;
20849 }
20850
20851 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_cellular_cap, tvb, 0, 1, ENC_NA0x00000000);
20852 return len;
20853}
20854
20855static void
20856dissect_vendor_ie_wfa(packet_info *pinfo, proto_item *item, tvbuff_t *tag_tvb)
20857{
20858 int tag_len = tvb_reported_length(tag_tvb);
20859 int dissect;
20860 uint8_t subtype;
20861 int offset = 0;
20862 tvbuff_t *vendor_tvb;
20863
20864 if (tag_len < 4)
20865 return;
20866
20867 subtype = tvb_get_uint8(tag_tvb, 3);
20868 proto_item_append_text(item, ": %s", val_to_str_const(subtype, wfa_subtype_vals, "Unknown"));
20869 vendor_tvb = tvb_new_subset_length(tag_tvb, offset + 4, tag_len - 4);
20870 dissect = dissector_try_uint_with_data(wifi_alliance_ie_table, subtype, vendor_tvb, pinfo, item, false0, NULL((void*)0));
20871 if (dissect <= 0) {
20872 proto_tree_add_item(item, hf_ieee80211_tag_vendor_data, vendor_tvb, 0, tag_len - 4, ENC_NA0x00000000);
20873 }
20874}
20875
20876static const range_string kde_selectors_rvals[] = {
20877 { 0, 0, "Reserved" },
20878 { 1, 1, "GTK KDE" },
20879 { 2, 2, "Reserved" },
20880 { 3, 3, "MAC address KDE" },
20881 { 4, 4, "PMKID KDE" },
20882 { 5, 5, "Reserved" },
20883 { 6, 6, "Nonce KDE" },
20884 { 7, 7, "Lifetime KDE" },
20885 { 8, 8, "Error KDE" },
20886 { 9, 9, "IGTK KDE" },
20887 { 10, 10, "Key ID KDE" },
20888 { 11, 11, "Multi-band GTK KDE" },
20889 { 12, 12, "Multi-band Key ID KDE" },
20890 { 13, 13, "OCI KDE" },
20891 { 14, 14, "BIGTK KDE" },
20892 { 15, 15, "Reserved" },
20893 { 16, 16, "MLO GTK KDE" },
20894 { 17, 17, "MLO IGTK KDE" },
20895 { 18, 18, "MLO BIGTK KDE" },
20896 { 19, 19, "MLO LINK KDE" },
20897 { 20, 255, "Reserved" },
20898 { 0, 0, NULL((void*)0) }
20899};
20900
20901static const true_false_string tfs_rsn_gtk_kde_tx = {
20902 "Temporal key used for both transmission and reception",
20903 "Temporal key used only for reception"
20904};
20905
20906static int * const mlo_kde_link_hdrs[] = {
20907 &hf_ieee80211_rsn_ie_mlo_linkid,
20908 &hf_ieee80211_rsn_ie_mlo_rnse_present,
20909 &hf_ieee80211_rsn_ie_mlo_rnsxe_present,
20910 &hf_ieee80211_rsn_ie_mlo_reserved,
20911 NULL((void*)0)
20912};
20913
20914static void
20915dissect_rsn_ie_mlo_link(proto_item *item, proto_tree *tree, tvbuff_t *tvb,
20916 int offset, uint32_t tag_len _U___attribute__((unused)), packet_info *pinfo)
20917{
20918 uint8_t info = tvb_get_uint8(tvb, offset);
20919
20920 proto_tree_add_bitmask(tree, tvb, offset,
20921 hf_ieee80211_rsn_ie_mlo_link_info,
20922 ett_kde_mlo_link_info, mlo_kde_link_hdrs,
20923 ENC_NA0x00000000);
20924 offset += 1;
20925
20926 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_mac_addr, tvb, offset, 6,
20927 ENC_NA0x00000000);
20928 offset += 6;
20929 if ((info & 0x10) == 0x10) { /* Add the RSNE if present */
20930 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
20931 }
20932
20933 if ((info & 0x20) == 0x20) { /* Add the RSNXE if present */
20934 add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
20935 }
20936
20937 proto_item_append_text(item, ": MLO Link KDE");
20938}
20939
20940static void
20941dissect_vendor_ie_rsn(proto_item * item, proto_tree * tree, tvbuff_t * tvb,
20942 int offset, uint32_t tag_len, packet_info *pinfo)
20943{
20944 uint8_t data_type = tvb_get_uint8(tvb, offset);
20945 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_data_type, tvb,
20946 offset, 1, ENC_NA0x00000000);
20947 offset += 1;
20948
20949 switch(data_type) {
20950 case 1:
20951 {
20952 /* IEEE 802.11i / Key Data Encapsulation / Data Type=1 - GTK.
20953 * This is only used within EAPOL-Key frame Key Data. */
20954 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_key_id, tvb,
20955 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20956 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_tx, tvb, offset,
20957 1, ENC_LITTLE_ENDIAN0x80000000);
20958 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_reserved1, tvb,
20959 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20960 offset += 1;
20961 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_reserved2, tvb,
20962 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20963 offset += 1;
20964 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_gtk, tvb, offset,
20965 tag_len - 3, ENC_NA0x00000000);
20966 proto_item_append_text(item, ": RSN GTK");
20967 save_proto_data(tvb, pinfo, offset, tag_len - 3, GTK_KEY);
20968 save_proto_data_value(pinfo, tag_len - 3, GTK_LEN_KEY);
20969 break;
20970 }
20971 case 3: /* MAC Address KDE */
20972 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mac_address_kde_mac, tvb,
20973 offset, 6, ENC_NA0x00000000);
20974 proto_item_append_text(item, ": MAC Address KDE");
20975 break;
20976 case 4:
20977 {
20978 /* IEEE 802.11i / Key Data Encapsulation / Data Type=4 - PMKID.
20979 * This is only used within EAPOL-Key frame Key Data. */
20980 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_pmkid, tvb, offset, 16, ENC_NA0x00000000);
20981 proto_item_append_text(item, ": RSN PMKID");
20982 break;
20983 }
20984 case 6:
20985 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_nonce, tvb, offset,
20986 32, ENC_NA0x00000000);
20987 proto_item_append_text(item, ": NONCE KDE");
20988 break;
20989 case 7: /* Lifetime KDE */
20990 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_lifetime, tvb,
20991 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
20992 proto_item_append_text(item, ": Lifetime KDE");
20993 break;
20994 case 8: /* Error KDE */
20995 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_error_kde_res, tvb, offset,
20996 2, ENC_LITTLE_ENDIAN0x80000000);
20997 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_error_kde_error_type, tvb,
20998 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20999 proto_item_append_text(item, ": Error KDE");
21000 break;
21001 case 9: /* IGTK KDE */
21002 {
21003 /* IEEE 802.11i / Key Data Encapsulation / Data Type=9 - IGTK.
21004 * This is only used within EAPOL-Key frame Key Data. */
21005 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_igtk_kde_keyid, tvb,
21006 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21007 offset += 2;
21008 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_igtk_kde_ipn, tvb, offset,
21009 6, ENC_LITTLE_ENDIAN0x80000000);
21010 offset += 6;
21011 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_igtk_kde_igtk, tvb, offset,
21012 tag_len - 9, ENC_NA0x00000000);
21013 proto_item_append_text(item, ": RSN IGTK");
21014 break;
21015 }
21016 case 10:
21017 {
21018 /* IEEE 802.11 - 2016 / Key Data Encapsulation / Data Type=10 - KeyID
21019 * This is only used within EAPOL-Key frame Key Data when using Extended Key ID */
21020 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_ptk_keyid, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21021 proto_item_append_text(item, ": RSN PTK");
21022 break;
21023 }
21024 case 13: /* OCI KDE */
21025 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_oci_operating_class, tvb,
21026 offset, 1, ENC_NA0x00000000);
21027 offset += 1;
21028 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_oci_primary_channel_number,
21029 tvb, offset, 1, ENC_NA0x00000000);
21030 offset += 1;
21031 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_oci_frequency_segment_1,
21032 tvb, offset, 1, ENC_NA0x00000000);
21033 proto_item_append_text(item, ": OCI KDE");
21034 break;
21035 case 14: /* BIGTK KDE */
21036 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_bigtk_key_id, tvb, offset,
21037 2, ENC_LITTLE_ENDIAN0x80000000);
21038 offset += 2;
21039 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_bigtk_bipn, tvb, offset,
21040 6, ENC_LITTLE_ENDIAN0x80000000);
21041 offset += 6;
21042 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_bigtk_bigtk, tvb, offset,
21043 tag_len - 9, ENC_NA0x00000000);
21044 proto_item_append_text(item, ": BIGTK KDE");
21045 break;
21046 case 16: /* MLO GTK KDE */
21047 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_key_id, tvb,
21048 offset, 1, ENC_NA0x00000000);
21049 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_tx, tvb,
21050 offset, 1, ENC_NA0x00000000);
21051 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_reserved, tvb,
21052 offset, 1, ENC_NA0x00000000);
21053 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_linkid, tvb,
21054 offset, 1, ENC_NA0x00000000);
21055 offset += 1;
21056
21057 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_pn, tvb,
21058 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
21059 offset += 6;
21060
21061 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_gtk, tvb,
21062 offset, tag_len - 8, ENC_NA0x00000000);
21063
21064 proto_item_append_text(item, ": MLO GTK KDE");
21065 break;
21066 case 17: /* MLO IGTK KDE */
21067 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_key_id, tvb,
21068 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21069 offset += 2;
21070
21071 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_ipn, tvb,
21072 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
21073 offset += 6;
21074
21075 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_reserved, tvb,
21076 offset, 1, ENC_NA0x00000000);
21077 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_linkid, tvb,
21078 offset, 1, ENC_NA0x00000000);
21079 offset += 1;
21080
21081 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_igtk, tvb,
21082 offset, tag_len - 10, ENC_NA0x00000000);
21083
21084 proto_item_append_text(item, ": MLO IGTK KDE");
21085 break;
21086 case 18: /* MLO BIGTK KDE */
21087 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_key_id, tvb,
21088 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21089 offset += 2;
21090
21091 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_ipn, tvb,
21092 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
21093 offset += 6;
21094
21095 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_reserved, tvb,
21096 offset, 1, ENC_NA0x00000000);
21097 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_linkid, tvb,
21098 offset, 1, ENC_NA0x00000000);
21099 offset += 1;
21100
21101 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_bigtk, tvb,
21102 offset, tag_len - 10, ENC_NA0x00000000);
21103
21104 proto_item_append_text(item, ": MLO BIGTK KDE");
21105 break;
21106 case 19: /*
21107 * MLO Link KDE, contains Link info, MAC Addr and possibly
21108 * RSNE and RSNXE
21109 */
21110 dissect_rsn_ie_mlo_link(item, tree, tvb, offset, tag_len, pinfo);
21111 break;
21112 default:
21113 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_unknown, tvb, offset,
21114 tag_len - 1, ENC_NA0x00000000);
21115 proto_item_append_text(item, ": RSN UNKNOWN");
21116 break;
21117 }
21118}
21119
21120typedef enum {
21121 MARVELL_IE_MESH = 4
21122} marvell_ie_type_t;
21123
21124static void
21125dissect_vendor_ie_marvell(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21126 tvbuff_t *tvb, int offset, uint32_t tag_len)
21127{
21128 uint8_t type;
21129
21130 type = tvb_get_uint8(tvb, offset);
21131 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21132 offset += 1;
21133
21134 switch (type) {
21135 case MARVELL_IE_MESH:
21136 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_subtype, tvb,
21137 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
21138 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_version, tvb,
21139 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
21140 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_proto_id, tvb,
21141 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
21142 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_metric_id, tvb,
21143 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
21144 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_cap, tvb,
21145 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
21146 break;
21147
21148 default:
21149 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_data, tvb, offset,
21150 tag_len - 1, ENC_NA0x00000000);
21151 break;
21152 }
21153}
21154
21155typedef enum {
21156 ATHEROS_IE_ADVCAP = 1,
21157 ATHEROS_IE_XR = 3
21158} atheros_ie_type_t;
21159
21160typedef enum {
21161 ATHEROS_IE_ADVCAP_S = 1
21162} atheros_ie_advcap_subtype_t;
21163
21164typedef enum {
21165 ATHEROS_IE_XR_S = 1
21166} atheros_ie_xr_subtype_t;
21167
21168typedef enum {
21169 ATHEROS_IE_CAP_TURBOP = 0x01,
21170 ATHEROS_IE_CAP_COMP = 0x02,
21171 ATHEROS_IE_CAP_FF = 0x04,
21172 ATHEROS_IE_CAP_XR = 0x08,
21173 ATHEROS_IE_CAP_AR = 0x10,
21174 ATHEROS_IE_CAP_BURST = 0x20,
21175 ATHEROS_IE_CAP_WME = 0x40,
21176 ATHEROS_IE_CAP_BOOST = 0x80
21177} atheros_ie_cap_t;
21178
21179static const value_string atheros_ie_type_vals[] = {
21180 { ATHEROS_IE_ADVCAP, "Advanced Capability"},
21181 { ATHEROS_IE_XR, "eXtended Range"},
21182 { 0, NULL((void*)0) }
21183};
21184
21185static int * const ieee80211_atheros_ie_cap[] = {
21186 &hf_ieee80211_atheros_ie_cap_f_turbop,
21187 &hf_ieee80211_atheros_ie_cap_f_comp,
21188 &hf_ieee80211_atheros_ie_cap_f_ff,
21189 &hf_ieee80211_atheros_ie_cap_f_xr,
21190 &hf_ieee80211_atheros_ie_cap_f_ar,
21191 &hf_ieee80211_atheros_ie_cap_f_burst,
21192 &hf_ieee80211_atheros_ie_cap_f_wme,
21193 &hf_ieee80211_atheros_ie_cap_f_boost,
21194 NULL((void*)0)
21195};
21196
21197static int * const ieee80211_extreme_mesh_ie_hello[] = {
21198 &hf_ieee80211_extreme_mesh_ie_hello_f_root,
21199 &hf_ieee80211_extreme_mesh_ie_hello_f_proxy,
21200 &hf_ieee80211_extreme_mesh_ie_hello_f_geo,
21201 &hf_ieee80211_extreme_mesh_ie_hello_f_path_pref,
21202 &hf_ieee80211_extreme_mesh_ie_hello_f_mobile,
21203 NULL((void*)0)
21204};
21205
21206typedef enum {
21207 EXTREME_MESH_IE_SERVICES_ROOT = 0x01,
21208 EXTREME_MESH_IE_SERVICES_PROXY = 0x02,
21209 EXTREME_MESH_IE_SERVICES_GEO = 0x04,
21210 EXTREME_MESH_IE_SERVICES_PATH_PREF = 0x08,
21211 EXTREME_MESH_IE_SERVICES_MOBILE = 0x10,
21212} extreme_mesh_ie_services;
21213
21214/* Mesh Fields found in Management Frames KJG */
21215static const value_string extreme_mesh_ie_type_vals[] = {
21216 {1, "Hello"},
21217 {2, "Mesh ID"},
21218 {3, "MPID"},
21219 {0, NULL((void*)0)}
21220};
21221
21222static void
21223dissect_vendor_ie_extreme_mesh(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21224 tvbuff_t *tvb, int offset, unsigned tag_len,
21225 packet_info *pinfo, proto_item *ti_len)
21226{
21227 uint8_t type;
21228
21229 if (tag_len <= 3) {
21230 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 6", tag_len+3);
21231 /* Add length of OUI to tag_length */
21232 return;
21233 }
21234 type = tvb_get_uint8(tvb, offset);
21235 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21236 proto_item_append_text(item, ": %s", val_to_str_const(type, extreme_mesh_ie_type_vals, "Unknown"));
21237 offset += 1;
21238 tag_len -= 1;
21239
21240 switch (type) {
21241 case 1:
21242 {
21243 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_extreme_mesh_ie_services,
21244 ett_extreme_mesh_services_tree, ieee80211_extreme_mesh_ie_hello, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21245 offset += 1;
21246
21247 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_htr, tvb, offset, 1, ENC_NA0x00000000);
21248 offset += 1;
21249
21250 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_mtr, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21251 offset += 2;
21252
21253 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_root, tvb, offset, 6, ENC_NA0x00000000);
21254 offset += 6;
21255
21256 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_nh, tvb, offset, 6, ENC_NA0x00000000);
21257 }
21258 break;
21259 case 2:
21260 {
21261 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_mesh_id, tvb, offset, tag_len, ENC_ASCII0x00000000);
21262 }
21263 break;
21264 case 3:
21265 {
21266 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_mp_id, tvb, offset, 6, ENC_NA0x00000000);
21267 }
21268 break;
21269 default:
21270 break;
21271 }
21272}
21273
21274static void
21275dissect_vendor_ie_atheros(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21276 tvbuff_t *tvb, int offset, unsigned tag_len,
21277 packet_info *pinfo, proto_item *ti_len)
21278{
21279 uint8_t type;
21280 uint8_t subtype;
21281 uint8_t version;
21282
21283 if (tag_len <= 3) {
21284 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 */
21285 return;
21286 }
21287 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_type, tvb, offset, 1, ENC_NA0x00000000);
21288 type = tvb_get_uint8(tvb, offset);
21289 proto_item_append_text(item, ": %s", val_to_str_const(type, atheros_ie_type_vals, "Unknown"));
21290 offset += 1;
21291 tag_len -= 1;
21292
21293 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_subtype, tvb, offset, 1, ENC_NA0x00000000);
21294 subtype = tvb_get_uint8(tvb, offset);
21295 offset += 1;
21296 tag_len -= 1;
21297
21298 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_version, tvb, offset, 1, ENC_NA0x00000000);
21299 version = tvb_get_uint8(tvb, offset);
21300 offset += 1;
21301 tag_len -= 1;
21302
21303 if (version == 0)
21304 {
21305 switch (type) {
21306 case ATHEROS_IE_ADVCAP:
21307 {
21308 switch (subtype) {
21309 case ATHEROS_IE_ADVCAP_S:
21310 {
21311 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_advcap_cap,
21312 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
21313 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21314 offset += 1;
21315 tag_len -= 1;
21316
21317 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_defkey, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21318 offset += 2;
21319 tag_len -= 2;
21320 break;
21321 }
21322 default:
21323 /* No default Action */
21324 break;
21325 } /* End switch (subtype) */
21326 break;
21327 }
21328 case ATHEROS_IE_XR:
21329 {
21330 switch (subtype) {
21331 case ATHEROS_IE_XR_S:
21332 {
21333 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_info, tvb, offset, 1, ENC_NA0x00000000);
21334 offset += 1;
21335 tag_len -= 1;
21336
21337 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_bssid, tvb, offset, 6, ENC_NA0x00000000);
21338 offset += 6;
21339 tag_len -= 6;
21340
21341 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_bssid, tvb, offset, 6, ENC_NA0x00000000);
21342 offset += 6;
21343 tag_len -= 6;
21344
21345 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21346 offset += 2;
21347 tag_len -= 2;
21348
21349 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_xr_base_cap,
21350 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
21351 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21352 offset += 1;
21353 tag_len -= 1;
21354
21355 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_xr_xr_cap,
21356 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
21357 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21358 offset += 1;
21359 tag_len -= 1;
21360 break;
21361 }
21362 default:
21363 /* No default Action */
21364 break;
21365 } /* End switch (subtype) */
21366 break;
21367 default:
21368 /* No default Action */
21369 break;
21370 } /* End switch (type) */
21371
21372 }
21373 }
21374 if (tag_len > 0) {
21375 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_data, tvb, offset, tag_len, ENC_NA0x00000000);
21376 }
21377}
21378
21379typedef enum {
21380 AIRONET_IE_DTPC = 0,
21381 AIRONET_IE_UNKNOWN1 = 1,
21382 AIRONET_IE_VERSION = 3,
21383 AIRONET_IE_QOS,
21384 AIRONET_IE_UNKNOWN11 = 11,
21385 AIRONET_IE_QBSS_V2 = 14,
21386 AIRONET_IE_CLIENT_MFP = 20,
21387 AIRONET_IE_APNAME_V2 = 47
21388} aironet_ie_type_t;
21389
21390static const value_string aironet_ie_type_vals[] = {
21391 { AIRONET_IE_DTPC, "DTPC"},
21392 { AIRONET_IE_UNKNOWN1, "Unknown (1)"},
21393 { AIRONET_IE_VERSION, "CCX version"},
21394 { AIRONET_IE_QOS, "Qos"},
21395 { AIRONET_IE_UNKNOWN11, "Unknown (11)"},
21396 { AIRONET_IE_QBSS_V2, "QBSS V2 - CCA"},
21397 { AIRONET_IE_CLIENT_MFP, "Client MFP"},
21398 { AIRONET_IE_APNAME_V2, "AP NAME v2"},
21399 { 0, NULL((void*)0) }
21400};
21401
21402static const value_string aironet_mfp_vals[] = {
21403 { 0, "Disabled"},
21404 { 1, "Enabled"},
21405 { 0, NULL((void*)0) }
21406};
21407
21408static void
21409dissect_vendor_ie_aironet(proto_item *aironet_item, proto_tree *ietree,
21410 tvbuff_t *tvb, int offset, uint32_t tag_len,packet_info *pinfo)
21411{
21412 uint8_t type,length;
21413 int i;
21414 bool_Bool dont_change = false0; /* Don't change the IE item text to default */
21415 const uint8_t* apname;
21416
21417 type = tvb_get_uint8(tvb, offset);
21418 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21419 offset += 1;
21420
21421 switch (type) {
21422 case AIRONET_IE_DTPC:
21423 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_dtpc, tvb, offset, 1, ENC_NA0x00000000);
21424 proto_item_append_text(aironet_item, ": Aironet DTPC Powerlevel %ddBm", tvb_get_uint8(tvb, offset));
21425 offset += 1;
21426 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_dtpc_unknown, tvb, offset, 1, ENC_NA0x00000000);
21427 dont_change = true1;
21428 break;
21429 case AIRONET_IE_VERSION:
21430 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_version, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21431 proto_item_append_text(aironet_item, ": Aironet CCX version = %d", tvb_get_uint8(tvb, offset));
21432 dont_change = true1;
21433 break;
21434 case AIRONET_IE_QOS:
21435 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21436 offset += 1;
21437 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_paramset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21438 offset += 1;
21439
21440 /* XXX: just copied over from WME. Maybe "Best Effort" and "Background"
21441 * need to be swapped. Also, the "TXOP" may be TXOP - or not.
21442 */
21443 for (i = 0; i < 4; i++) {
21444 uint8_t byte1, byte2;
21445 uint16_t txop;
21446 byte1 = tvb_get_uint8(tvb, offset);
21447 byte2 = tvb_get_uint8(tvb, offset + 1);
21448 txop = tvb_get_letohs(tvb, offset + 2);
21449 proto_tree_add_bytes_format(ietree, hf_ieee80211_aironet_ie_qos_val, tvb, offset, 4, NULL((void*)0),
21450 "CCX QoS Parameters: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
21451 (byte1 & 0x60) >> 5, val_to_str(pinfo->pool, (byte1 & 0x60) >> 5, wme_acs, "(Unknown: %d)"),
21452 (byte1 & 0x10) ? "" : "not ", byte1 & 0x0f,
21453 byte2 & 0x0f, (byte2 & 0xf0) >> 4,
21454 txop);
21455 offset += 4;
21456 }
21457 break;
21458 case AIRONET_IE_QBSS_V2:
21459 /* Extract Values */
21460 proto_tree_add_item(ietree, hf_ieee80211_qbss2_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21461 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
21462 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cal, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
21463 proto_tree_add_item(ietree, hf_ieee80211_qbss2_gl, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN0x80000000);
21464 break;
21465 case AIRONET_IE_CLIENT_MFP:
21466 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_clientmfp, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21467 proto_item_append_text(aironet_item, ": Aironet Client MFP %s",
21468 val_to_str_const(1 & tvb_get_uint8(tvb, offset), aironet_mfp_vals, "Unknown"));
21469 dont_change = true1;
21470 break;
21471 case AIRONET_IE_APNAME_V2:
21472 /* Adds support for the new AP name v2 format;
21473this supports:
21474- 32 character long AP names (vs 16 in v1/ccx)
21475- is used on both WLC and Meraki
21476- does not require CCX to be enabled.
21477 */
21478 tag_len -= 1;
21479 length = tag_len;
21480
21481 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_cisco_ap_name_v2, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool,&apname);
21482 proto_item_append_text(ietree, ": AP name v2: %s", apname);
21483 // Set to true, so we don't append "Aironet type"
21484 dont_change = true1;
21485 break;
21486
21487 default:
21488 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_data, tvb, offset,
21489 tag_len - 1, ENC_NA0x00000000);
21490 break;
21491 }
21492 if (!dont_change) {
21493 proto_item_append_text(aironet_item, ": Aironet %s (%d)",
21494 val_to_str_const(type, aironet_ie_type_vals, "Unknown"), type);
21495 }
21496}
21497
21498/* info from lswifi https://github.com/joshschmelzle/lswifi/blob/v0.1.49/lswifi/elements.py#L1526 */
21499#define ARUBA_CAC1 1
21500#define ARUBA_MESH2 2
21501#define ARUBA_APNAME3 3
21502#define ARUBA_ARM4 4
21503#define ARUBA_SLB5 5
21504#define ARUBA_SJ_LOOP_PROTECT6 6
21505#define ARUBA_AUTO_MESH7 7
21506#define ARUBA_LCI8 8
21507#define ARUBA_GPS9 9
21508#define ARUBA_AP_HEALTH10 10
21509
21510static const value_string ieee80211_vs_aruba_subtype_vals[] = {
21511 { ARUBA_CAC1, "CAC"},
21512 { ARUBA_MESH2, "Mesh"},
21513 { ARUBA_APNAME3, "AP Name"},
21514 { ARUBA_ARM4, "ARM"},
21515 { ARUBA_SLB5, "SLB"},
21516 { ARUBA_SJ_LOOP_PROTECT6, "SJ Loop Protect"},
21517 { ARUBA_AUTO_MESH7, "Auto Mesh"},
21518 { ARUBA_LCI8, "LCI"},
21519 { ARUBA_GPS9, "GPS Ellipse"},
21520 { ARUBA_AP_HEALTH10, "AP Health"},
21521 { 0, NULL((void*)0) }
21522};
21523static void
21524dissect_vendor_ie_aruba(proto_item *item, proto_tree *ietree,
21525 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21526{
21527 uint8_t type;
21528 const uint8_t* name;
21529
21530 offset += 1; /* VS OUI Type */
21531 tag_len -= 1;
21532
21533 type = tvb_get_uint8(tvb, offset);
21534 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_subtype, tvb, offset, 1, ENC_NA0x00000000);
21535 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_aruba_subtype_vals, "Unknown"));
21536 offset += 1;
21537 tag_len -= 1;
21538
21539 switch (type) {
21540 case ARUBA_APNAME3:
21541 offset += 1;
21542 tag_len -= 1;
21543
21544 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_aruba_apname, tvb,
21545 offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &name);
21546 proto_item_append_text(item, " (%s)", name);
21547 break;
21548
21549 case ARUBA_GPS9:
21550 {
21551 double latitude, longitude, major_axis, minor_axis, orientation, distance;
21552 offset += 1;
21553 tag_len -= 1;
21554 if (tag_len < 1) {
21555 expert_add_info_format(pinfo, ietree, &ei_ieee80211_bad_length,
21556 "Malformed Aruba GPS data (insufficient data)");
21557 break;
21558 }
21559
21560 uint32_t gps_ie_length = tvb_get_uint8(tvb, offset);
21561 offset += 1;
21562 tag_len -= 1;
21563 gps_ie_length -= 1;
21564
21565 if (tag_len < gps_ie_length) {
21566 expert_add_info_format(pinfo, ietree, &ei_ieee80211_bad_length,
21567 "Truncated Aruba GPS data (IE needs %u bytes but got %u)",
21568 gps_ie_length, tag_len);
21569 break;
21570 }
21571
21572 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_gps_subversion, tvb,
21573 offset, 1, ENC_NA0x00000000);
21574 offset += 1;
21575 tag_len -= 1;
21576
21577 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_gps_hop, tvb,
21578 offset, 1, ENC_NA0x00000000);
21579 offset += 1;
21580 tag_len -= 1;
21581
21582 latitude = tvb_get_ntohieee_double(tvb, offset);
21583 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_latitude, tvb,
21584 offset, 8, latitude, "%.6f", latitude);
21585 offset += 8;
21586 tag_len -= 8;
21587
21588 longitude = tvb_get_ntohieee_double(tvb, offset);
21589 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_longitude, tvb,
21590 offset, 8, longitude, "%.6f", longitude);
21591 offset += 8;
21592 tag_len -= 8;
21593
21594 major_axis = tvb_get_ntohieee_double(tvb, offset);
21595 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_major_axis, tvb,
21596 offset, 8, major_axis, "%.6f", major_axis);
21597 offset += 8;
21598 tag_len -= 8;
21599
21600 minor_axis = tvb_get_ntohieee_double(tvb, offset);
21601 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_minor_axis, tvb,
21602 offset, 8, minor_axis, "%.6f", minor_axis);
21603 offset += 8;
21604 tag_len -= 8;
21605
21606 orientation = tvb_get_ntohieee_double(tvb, offset);
21607 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_orientation, tvb,
21608 offset, 8, orientation, "%.6f", orientation);
21609 offset += 8;
21610 tag_len -= 8;
21611
21612 distance = tvb_get_ntohieee_double(tvb, offset);
21613 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_distance, tvb,
21614 offset, 8, distance, "%.6f", distance);
21615 tag_len -= 8;
21616
21617 if (tag_len > 0) {
21618 expert_add_info_format(pinfo, ietree, &ei_ieee80211_bad_length,
21619 "Aruba GPS data contains additional %u bytes of unexpected data",
21620 tag_len);
21621 }
21622
21623 proto_item_append_text(item, " (coords: [%.6f, %.6f], ellipse: [%.2fm x %.2fm, %.2f°], distance: %.2fm)",
21624 latitude, longitude, major_axis, minor_axis, orientation, distance);
21625 }
21626 break;
21627
21628 default:
21629 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_data, tvb, offset,
21630 tag_len, ENC_NA0x00000000);
21631 if (tag_len > 0)
21632 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
21633 break;
21634 }
21635}
21636
21637static void
21638dissect_vendor_ie_routerboard(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21639 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21640{
21641 uint8_t type, length;
21642 proto_item *subitem;
21643 proto_tree *subtree;
21644
21645 offset += 1; /* VS OUI Type */
21646 tag_len -= 1;
21647 /* FIXME: Make sure we have at least 2 bytes left */
21648 proto_tree_add_item(ietree, hf_ieee80211_vs_routerboard_unknown, tvb, offset, 2, ENC_NA0x00000000);
21649
21650 offset += 2;
21651 tag_len -= 2;
21652
21653 while (tag_len >= 2) {
21654 type = tvb_get_uint8(tvb, offset);
21655 length = tvb_get_uint8(tvb, offset+1);
21656 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_routerboard_subitem, tvb, offset, length+2, ENC_NA0x00000000);
21657 subtree = proto_item_add_subtree(subitem, ett_routerboard);
21658 proto_item_set_text(subitem, "Sub IE (T/L: %d/%d)", type, length);
21659
21660 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subtype, tvb, offset, 1, ENC_NA0x00000000);
21661 offset += 1;
21662 tag_len -= 1;
21663
21664 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_sublength, tvb, offset, 1, ENC_NA0x00000000);
21665 offset += 1;
21666 tag_len -= 1;
21667
21668 if (tag_len < length)
21669 length = tag_len;
21670 if (length == 0) {
21671 expert_add_info(pinfo, subitem, &ei_ieee80211_vs_routerboard_unexpected_len);
21672 break;
21673 }
21674
21675 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subdata, tvb, offset, length, ENC_NA0x00000000);
21676
21677 if(type == 1){
21678 if(length == 30){
21679 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subtype1_prefix, tvb, offset, 10, ENC_NA0x00000000);
21680 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subtype1_data, tvb, offset + 10, length - 10, ENC_ASCII0x00000000);
21681 }else{
21682 expert_add_info(pinfo, subitem, &ei_ieee80211_vs_routerboard_unexpected_len);
21683 }
21684 }
21685
21686 offset += length;
21687 tag_len -= length;
21688 }
21689}
21690
21691#define AEROHIVE_HOSTNAME33 33
21692static const value_string ieee80211_vs_aerohive_type_vals[] = {
21693 { AEROHIVE_HOSTNAME33, "Host Name"},
21694 { 0, NULL((void*)0) }
21695};
21696static void
21697dissect_vendor_ie_aerohive(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21698 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21699{
21700 uint32_t type, length;
21701 const uint8_t* hostname;
21702 proto_item *ti_len;
21703
21704 /* VS OUI Type */
21705 type = tvb_get_uint8(tvb, offset);
21706 offset += 1;
21707 tag_len -= 1;
21708
21709 proto_tree_add_item(ietree, hf_ieee80211_vs_aerohive_version, tvb, offset, 1, ENC_NA0x00000000);
21710 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_aerohive_type_vals, "Unknown"));
21711 offset += 1;
21712 tag_len -= 1;
21713
21714 switch(type){
21715 case AEROHIVE_HOSTNAME33: /* Subtype (1 byte) + Host Name Length (1 byte) + Host Name */
21716
21717 proto_tree_add_item(ietree, hf_ieee80211_vs_aerohive_subtype, tvb, offset, 1, ENC_NA0x00000000);
21718 offset += 1;
21719 tag_len -= 1;
21720
21721 ti_len = proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_aerohive_hostname_length, tvb, offset, 1, ENC_NA0x00000000, &length);
21722 offset += 1;
21723 tag_len -= 1;
21724
21725 if (tag_len < length) {
21726 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < Host Name Length");
21727 length = tag_len;
21728 }
21729
21730 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_aerohive_hostname, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &hostname);
21731 proto_item_append_text(item, " (%s)", hostname);
21732
21733 break;
21734
21735 default:
21736 proto_tree_add_item(ietree, hf_ieee80211_vs_aerohive_data, tvb, offset, tag_len, ENC_NA0x00000000);
21737 break;
21738 }
21739}
21740
21741#define MIST_APNAME1 1
21742static const value_string ieee80211_vs_mist_type_vals[] = {
21743 { MIST_APNAME1, "AP Name"},
21744 { 0, NULL((void*)0) }
21745};
21746static void
21747dissect_vendor_ie_mist(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21748 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21749{
21750 uint32_t type, length;
21751 const uint8_t* apname;
21752
21753 /* VS OUI Type */
21754 type = tvb_get_uint8(tvb, offset);
21755 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_mist_type_vals, "Unknown"));
21756 offset += 1;
21757 tag_len -= 1;
21758
21759 switch(type){
21760 case MIST_APNAME1:
21761 length = tag_len;
21762 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_mist_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21763 proto_item_append_text(item, " (%s)", apname);
21764 break;
21765
21766 default:
21767 proto_tree_add_item(ietree, hf_ieee80211_vs_mist_data, tvb, offset, tag_len, ENC_NA0x00000000);
21768 break;
21769 }
21770}
21771
21772#define UBIQUITI_APNAME0x01 0x01
21773static const value_string ieee80211_vs_ubiquiti_type_vals[] = {
21774 { UBIQUITI_APNAME0x01, "AP Name"},
21775 { 0, NULL((void*)0) }
21776};
21777static void
21778dissect_vendor_ie_ubiquiti(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21779 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21780{
21781 uint32_t type, length;
21782 const uint8_t* apname;
21783
21784 /* VS OUI Type */
21785 type = tvb_get_uint8(tvb, offset);
21786 proto_tree_add_item(ietree, hf_ieee80211_vs_ubiquiti_type, tvb, offset, 1, ENC_NA0x00000000);
21787 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_ubiquiti_type_vals, "Unknown"));
21788 offset += 1;
21789 tag_len -= 1;
21790
21791 switch(type){
21792 case UBIQUITI_APNAME0x01:
21793 length = tag_len;
21794 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_ubiquiti_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21795 proto_item_append_text(item, " (%s)", apname);
21796 break;
21797
21798 default:
21799 proto_tree_add_item(ietree, hf_ieee80211_vs_ubiquiti_data, tvb, offset, tag_len, ENC_NA0x00000000);
21800 break;
21801 }
21802}
21803
21804#define RUCKUS_APNAME3 3
21805static const value_string ieee80211_vs_ruckus_type_vals[] = {
21806 { RUCKUS_APNAME3, "AP Name"},
21807 { 0, NULL((void*)0) }
21808};
21809static void
21810dissect_vendor_ie_ruckus(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21811 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21812{
21813 uint32_t type, length;
21814 const uint8_t* apname;
21815
21816 /* VS OUI Type */
21817 type = tvb_get_uint8(tvb, offset);
21818 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_ruckus_type_vals, "Unknown"));
21819 offset += 1;
21820 tag_len -= 1;
21821
21822 switch(type){
21823 case RUCKUS_APNAME3:
21824 length = tag_len;
21825 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_ruckus_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21826 proto_item_append_text(item, " (%s)", apname);
21827 break;
21828
21829 default:
21830 proto_tree_add_item(ietree, hf_ieee80211_vs_ruckus_data, tvb, offset, tag_len, ENC_NA0x00000000);
21831 break;
21832 }
21833}
21834
21835#define ALCATEL_APNAME1 1
21836static const value_string ieee80211_vs_alcatel_type_vals[] = {
21837 { ALCATEL_APNAME1, "AP Name"},
21838 { 0, NULL((void*)0) }
21839};
21840static void
21841dissect_vendor_ie_alcatel(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21842 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21843{
21844 uint32_t type, length;
21845 const uint8_t* apname;
21846
21847 /* VS OUI Type */
21848 type = tvb_get_uint8(tvb, offset);
21849 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_alcatel_type_vals, "Unknown"));
21850 offset += 1;
21851 tag_len -= 1;
21852
21853 switch(type){
21854 case ALCATEL_APNAME1:
21855 length = tag_len;
21856 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_alcatel_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21857 proto_item_append_text(item, " (%s)", apname);
21858 break;
21859
21860 default:
21861 proto_tree_add_item(ietree, hf_ieee80211_vs_alcatel_data, tvb, offset, tag_len, ENC_NA0x00000000);
21862 break;
21863 }
21864}
21865
21866enum vs_sgdsn_type {
21867 SGDSN_VERSION = 0x01,
21868 SGDSN_IDFR = 0x02,
21869 SGDSN_IDANSI = 0x03,
21870 SGDSN_LATITUDE = 0x04,
21871 SGDSN_LONGITUDE = 0x05,
21872 SGDSN_ALTITUDE_ABS = 0x06,
21873 SGDSN_ALTITUDE_REL = 0x07,
21874 SGDSN_LATITUDE_TAKEOFF = 0x08,
21875 SGDSN_LONGITUDE_TAKEOFF = 0x09,
21876 SGDSN_H_SPEED = 0x0a,
21877 SGDSN_HEADING = 0x0b,
21878};
21879
21880static const value_string ieee80211_vs_sgdsn_type_vals[] = {
21881 { SGDSN_VERSION, "Version"},
21882 { SGDSN_IDFR, "ID FR"},
21883 { SGDSN_IDANSI, "ID ANSI"},
21884 { SGDSN_LATITUDE, "Latitude"},
21885 { SGDSN_LONGITUDE, "Longitude"},
21886 { SGDSN_ALTITUDE_ABS, "Altitude AMSL"},
21887 { SGDSN_ALTITUDE_REL, "Altitude AGL"},
21888 { SGDSN_LATITUDE_TAKEOFF, "Latitude Takeoff"},
21889 { SGDSN_LONGITUDE_TAKEOFF, "Longitude Takeoff"},
21890 { SGDSN_H_SPEED, "Horizontal Speed"},
21891 { SGDSN_HEADING, "Heading"},
21892 { 0, NULL((void*)0) }
21893};
21894
21895static void
21896dissect_vendor_ie_sgdsn(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21897 tvbuff_t *tvb, int offset, uint32_t tag_len,
21898 packet_info *pinfo)
21899{
21900 // Technical specification defined in French law "NOR: ECOI1934044A"
21901 // https://www.legifrance.gouv.fr/eli/arrete/2019/12/27/ECOI1934044A/jo/texte
21902
21903 uint8_t type = tvb_get_uint8(tvb, offset);
21904 offset += 1;
21905 tag_len -= 1;
21906
21907 if (type == 1) {
21908
21909 while (tag_len > 2) {
21910
21911 uint8_t tlv_type = tvb_get_uint8(tvb, offset);
21912 uint8_t tlv_len = tvb_get_uint8(tvb, offset+1);
21913
21914 if (tag_len < tlv_len) {
21915 break;
21916 }
21917
21918 proto_item *item_tlv = proto_tree_add_item(ietree, hf_ieee80211_vs_sgdsn_tag, tvb, offset, tlv_len + 2, ENC_NA0x00000000);
21919 proto_item *tree = proto_item_add_subtree(item_tlv, ett_sgdsn);
21920
21921 proto_tree_add_item(tree, hf_ieee80211_vs_sgdsn_type, tvb, offset, 1, ENC_NA0x00000000);
21922 proto_tree_add_item(tree, hf_ieee80211_vs_sgdsn_length, tvb, offset + 1, 1, ENC_NA0x00000000);
21923
21924 offset += 2;
21925 tag_len -= 2;
21926
21927 proto_item_append_text(tree, ": %s", val_to_str_const(tlv_type, ieee80211_vs_sgdsn_type_vals, "Unknown"));
21928
21929 switch(tlv_type) {
21930 case SGDSN_VERSION:
21931 if (tlv_len == 1) {
21932 uint32_t value;
21933 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_version, tvb, offset, 1, ENC_NA0x00000000, &value);
21934 proto_item_append_text(tree, ": %d", value);
21935 } else {
21936 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 1");
21937 }
21938 break;
21939 case SGDSN_IDFR:
21940 if (tlv_len == 30) {
21941 const uint8_t* string1;
21942 const uint8_t* string2;
21943 const uint8_t* string3;
21944 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_manufacturer, tvb, offset, 3, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &string1);
21945 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_model, tvb, offset+3, 3, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &string2);
21946 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);
21947 proto_item_append_text(tree, ": %s %s %s", string1, string2, string3);
21948 } else {
21949 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 30");
21950 }
21951 break;
21952 case SGDSN_IDANSI:
21953 if (tlv_len >= 6 && tlv_len <= 20) {
21954 // ANSI/CTA-2063 Small UAS Serial Number.
21955 // Doc (free): https://shop.cta.tech/products/small-unmanned-aerial-systems-serial-numbers
21956 const uint8_t* icao_mfr_code;
21957 uint32_t sn_len;
21958 const uint8_t* serial_number;
21959 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_icaomfrcode, tvb, offset, 4, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &icao_mfr_code);
21960 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_serialnumber_len, tvb, offset+4, 1, ENC_NA0x00000000, &sn_len);
21961 if(sn_len < 0x30 || (sn_len > 0x39 && sn_len < 0x41) || sn_len > 0x46) {
21962 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'");
21963 } else if (sn_len != (uint32_t)tlv_len+(sn_len>0x39 ? 0x32 : 0x2A)) {
21964 // Check that sn_len equals tlv_len - 5 + ( 0x37 if sn_len is 'A' to 'F', 0x30 otherwise).
21965 // We suppressed the minus 5 in the check above to avoid a compilation warning
21966 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));
21967 }
21968 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);
21969 proto_item_append_text(tree, ": %s %s", icao_mfr_code, serial_number);
21970 } else {
21971 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be between 6 and 20");
21972 }
21973 break;
21974 case SGDSN_LATITUDE_TAKEOFF:
21975 case SGDSN_LATITUDE:
21976 case SGDSN_LONGITUDE_TAKEOFF:
21977 case SGDSN_LONGITUDE:
21978 if (tlv_len == 4) {
21979 int32_t value;
21980 proto_tree_add_item_ret_int(tree, hf_ieee80211_vs_sgdsn_gpscoord, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000, &value);
21981 proto_item_append_text(tree, ": %.5f", value / 100000.0);
21982 } else {
21983 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 4");
21984 }
21985 break;
21986 case SGDSN_ALTITUDE_ABS:
21987 case SGDSN_ALTITUDE_REL:
21988 if (tlv_len == 2) {
21989 int32_t value;
21990 proto_tree_add_item_ret_int(tree, hf_ieee80211_vs_sgdsn_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &value);
21991 proto_item_append_text(tree, ": %d m", value);
21992 } else {
21993 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 4");
21994 }
21995 break;
21996 case SGDSN_H_SPEED:
21997 if (tlv_len == 1) {
21998 uint32_t value;
21999 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_speed, tvb, offset, 1, ENC_NA0x00000000, &value);
22000 proto_item_append_text(tree, ": %d m/s", value);
22001 } else {
22002 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 1");
22003 }
22004 break;
22005 case SGDSN_HEADING:
22006 if (tlv_len == 2) {
22007 uint32_t value;
22008 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_heading, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &value);
22009 proto_item_append_text(tree, ": %d deg", value);
22010 } else {
22011 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 2");
22012 }
22013 break;
22014 default:
22015 expert_add_info_format(pinfo, tree, &ei_ieee80211_extra_data, "Unknown type");
22016 break;
22017 }
22018
22019 offset += tlv_len;
22020 tag_len -= tlv_len;
22021 }
22022
22023 if (tag_len) {
22024 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length, "Remaining bytes, TLV structure error");
22025 }
22026 }
22027}
22028
22029enum vs_nintendo_type {
22030 NINTENDO_SERVICES = 0x11,
22031 NINTENDO_CONSOLEID = 0xF0
22032};
22033
22034static const value_string ieee80211_vs_nintendo_type_vals[] = {
22035 { NINTENDO_SERVICES, "Services"},
22036 { NINTENDO_CONSOLEID, "ConsoleID"},
22037 { 0, NULL((void*)0) }
22038};
22039
22040static proto_tree*
22041dissect_vendor_ie_nintendo_tlv(const int hfindex, proto_tree *ietree,
22042 tvbuff_t *tvb, int offset, uint32_t sublen)
22043{
22044 proto_item *nintendo_item;
22045 proto_tree *nintendo_tree;
22046
22047 nintendo_item = proto_tree_add_item(ietree, hfindex, tvb, offset, sublen, ENC_NA0x00000000);
22048 nintendo_tree = proto_item_add_subtree(nintendo_item, ett_nintendo);
22049
22050 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_type, tvb, offset, 1, ENC_NA0x00000000);
22051 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_length, tvb, offset + 1, 1, ENC_NA0x00000000);
22052
22053 return nintendo_tree;
22054}
22055
22056static void
22057dissect_vendor_ie_nintendo(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
22058 tvbuff_t *tvb, int offset, uint32_t tag_len)
22059{
22060 proto_tree *nintendo_tree;
22061
22062 uint8_t subtype;
22063 uint8_t sublength;
22064 uint32_t length = tag_len;
22065
22066 /* Skip OUI type for now - the code is for type 1 (StreetPass) only */
22067 /* http://3dbrew.org/wiki/StreetPass */
22068 offset += 1;
22069 length -= 1;
22070
22071 while(length > 0 && length < 256) { /* otherwise we are < 0 but on unsigned */
22072 subtype = tvb_get_uint8(tvb, offset);
22073 sublength = tvb_get_uint8(tvb, offset + 1);
22074
22075 switch(subtype) {
22076 case NINTENDO_SERVICES:
22077 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_servicelist, ietree, tvb, offset, sublength + 2);
22078 offset += 2;
22079 length -= 2;
22080
22081 while (sublength > 4) {
22082
22083 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_service, tvb, offset, 5, ENC_NA0x00000000);
22084 offset += 5;
22085 length -= 5;
22086 sublength -= 5;
22087 }
22088 break;
22089 case NINTENDO_CONSOLEID:
22090 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_consoleid, ietree, tvb, offset, sublength + 2);
22091 offset += + 2;
22092 length -= + 2;
22093
22094 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_consoleid, tvb, offset, sublength, ENC_NA0x00000000);
22095 offset += sublength;
22096 length -= sublength;
22097 break;
22098 default:
22099 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_unknown, ietree, tvb, offset, sublength + 2);
22100 offset += + 2;
22101 length -= + 2;
22102
22103 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_unknown, tvb, offset, sublength, ENC_NA0x00000000);
22104 offset += sublength;
22105 length -= sublength;
22106 break;
22107 }
22108 }
22109}
22110
22111static void
22112dissect_vendor_ie_meru(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
22113 tvbuff_t *tvb, int offset, uint32_t tag_len,
22114 packet_info *pinfo)
22115{
22116 uint32_t type, length;
22117 proto_item *subitem, *ti_len;
22118 proto_tree *subtree;
22119
22120 while (tag_len >= 2) {
22121 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_meru_subitem, tvb, offset, 2, ENC_NA0x00000000);
22122 subtree = proto_item_add_subtree(subitem, ett_meru);
22123
22124 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_vs_meru_subtype, tvb, offset, 1, ENC_NA0x00000000, &type);
22125 offset += 1;
22126 tag_len -= 1;
22127
22128 ti_len = proto_tree_add_item_ret_uint(subtree, hf_ieee80211_vs_meru_sublength, tvb, offset, 1, ENC_NA0x00000000, &length);
22129 offset += 1;
22130 tag_len -= 1;
22131
22132 if (tag_len < length) {
22133 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < Sub Length");
22134 length = tag_len;
22135 }
22136
22137 proto_item_append_text(subitem, " (t=%d, l=%d)", type, length);
22138 proto_item_set_len(subitem, 2+length);
22139
22140 proto_tree_add_item(subtree, hf_ieee80211_vs_meru_subdata, tvb, offset, length, ENC_NA0x00000000);
22141 offset += length;
22142 tag_len -= length;
22143
22144 }
22145}
22146
22147static const value_string ieee80211_vs_extreme_subtype_vals[] = {
22148 { 1, "AP Name"},
22149 { 0, NULL((void*)0) }
22150};
22151
22152static void
22153dissect_vendor_ie_extreme(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
22154 tvbuff_t *tvb, int offset, uint32_t tag_len,
22155 packet_info *pinfo)
22156{
22157 uint32_t type, length;
22158 proto_item *ti_len;
22159
22160 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_subtype, tvb, offset, 1, ENC_NA0x00000000, &type);
22161 offset += 1;
22162 tag_len -= 1;
22163
22164 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_subdata, tvb, offset, tag_len, ENC_NA0x00000000);
22165
22166 switch(type){
22167 case 1: /* Unknown (7 bytes) + AP Name Length (1 byte) + AP Name */
22168
22169 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_unknown, tvb, offset, 7, ENC_NA0x00000000);
22170 offset += 7;
22171 tag_len -= 1;
22172
22173 ti_len = proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_ap_length, tvb, offset, 1, ENC_NA0x00000000, &length);
22174 offset += 1;
22175 tag_len -= 1;
22176
22177 if (tag_len < length) {
22178 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < AP Length");
22179 length = tag_len;
22180 }
22181
22182 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_ap_name, tvb, offset, length, ENC_ASCII0x00000000);
22183
22184 break;
22185 default:
22186 /* Expert info ? */
22187 break;
22188 }
22189}
22190
22191#define FORTINET_SYSTEM10 10
22192static const value_string ieee80211_vs_fortinet_subtype_vals[] = {
22193 { FORTINET_SYSTEM10, "SYSTEM"},
22194 { 0, NULL((void*)0) }
22195};
22196
22197#define FORTINET_SYSTEM_APNAME1 1
22198#define FORTINET_SYSTEM_APMODEL2 2
22199#define FORTINET_SYSTEM_APSERIAL3 3
22200static const value_string ieee80211_vs_fortinet_system_type_vals[] = {
22201 { FORTINET_SYSTEM_APNAME1, "AP NAME"},
22202 { FORTINET_SYSTEM_APMODEL2, "AP MODEL"},
22203 { FORTINET_SYSTEM_APSERIAL3, "AP SERIAL"},
22204 { 0, NULL((void*)0) }
22205};
22206
22207static void
22208dissect_vendor_ie_fortinet(proto_item *item, proto_tree *ietree,
22209 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22210{
22211 uint32_t type;
22212
22213
22214 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_subtype, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &type);
22215 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_fortinet_subtype_vals, "Unknown"));
22216 offset += 2;
22217 tag_len -= 2;
22218
22219 switch (type) {
22220 case FORTINET_SYSTEM10:
22221 while (tag_len > 2) {
22222 uint32_t system_type, system_length;
22223
22224 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_system_type, tvb, offset, 1, ENC_NA0x00000000, &system_type);
22225 proto_item_append_text(item, " - %s:", val_to_str_const(system_type, ieee80211_vs_fortinet_system_type_vals, "Unknown"));
22226 offset += 1;
22227 tag_len -= 1;
22228
22229 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_system_length, tvb, offset, 1, ENC_NA0x00000000, &system_length);
22230 offset += 1;
22231 tag_len -= 1;
22232
22233 switch (system_type) {
22234 case FORTINET_SYSTEM_APNAME1:{
22235 const uint8_t* name;
22236 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apname, tvb,
22237 offset, system_length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &name);
22238 proto_item_append_text(item, " %s", name);
22239 }
22240 break;
22241 case FORTINET_SYSTEM_APMODEL2:{
22242 const uint8_t* model;
22243 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apmodel, tvb,
22244 offset, system_length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &model);
22245 proto_item_append_text(item, " %s", model);
22246 }
22247 break;
22248 case FORTINET_SYSTEM_APSERIAL3:{
22249 const uint8_t* serial;
22250 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apserial, tvb,
22251 offset, system_length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &serial);
22252 proto_item_append_text(item, " %s", serial);
22253 }
22254 break;
22255 }
22256 offset += system_length;
22257 tag_len -= system_length;
22258 }
22259 break;
22260
22261 default:
22262 proto_tree_add_item(ietree, hf_ieee80211_vs_fortinet_data, tvb, offset,
22263 tag_len, ENC_NA0x00000000);
22264 if (tag_len > 0)
22265 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22266 break;
22267 }
22268}
22269
22270#define ARISTA_APNAME6 6
22271static const value_string ieee80211_vs_arista_subtype_vals[] = {
22272 { ARISTA_APNAME6, "AP Name"},
22273 { 0, NULL((void*)0) }
22274};
22275static void
22276dissect_vendor_ie_arista(proto_item *item, proto_tree *ietree,
22277 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22278{
22279 uint8_t type;
22280 const uint8_t* name;
22281
22282 offset += 1; /* VS OUI Type */
22283 tag_len -= 1;
22284
22285 type = tvb_get_uint8(tvb, offset);
22286 proto_tree_add_item(ietree, hf_ieee80211_vs_arista_subtype, tvb, offset, 1, ENC_NA0x00000000);
22287 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_arista_subtype_vals, "Unknown"));
22288 offset += 1;
22289 tag_len -= 1;
22290
22291 switch (type) {
22292 case ARISTA_APNAME6:
22293 offset += 1;
22294 tag_len -= 1;
22295
22296 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_arista_apname, tvb,
22297 offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &name);
22298 proto_item_append_text(item, " (%s)", name);
22299 break;
22300
22301 default:
22302 proto_tree_add_item(ietree, hf_ieee80211_vs_arista_data, tvb, offset,
22303 tag_len, ENC_NA0x00000000);
22304 if (tag_len > 0)
22305 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22306 break;
22307 }
22308}
22309
22310#define WISUN_PTKID1 1
22311#define WISUN_GTKL2 2
22312#define WISUN_NR3 3
22313#define WISUN_LGTKL4 4
22314#define WISUN_LGTK5 5
22315
22316static const value_string ieee80211_vs_wisun_type_vals[] = {
22317 { WISUN_PTKID1, "PTKID" },
22318 { WISUN_GTKL2, "GTKL" },
22319 { WISUN_NR3, "NR" },
22320 { WISUN_LGTKL4, "LGTKL" },
22321 { WISUN_LGTK5, "LGTK" },
22322 { 0, NULL((void*)0) }
22323};
22324
22325#define WISUN_GTKL_GTK00x01 0x01
22326#define WISUN_GTKL_GTK10x02 0x02
22327#define WISUN_GTKL_GTK20x04 0x04
22328#define WISUN_GTKL_GTK30x08 0x08
22329
22330#define WISUN_NR_BR0 0
22331#define WISUN_NR_ROUTER1 1
22332#define WISUN_NR_LFN2 2
22333
22334static const value_string ieee80211_vs_wisun_nr_vals[] = {
22335 { WISUN_NR_BR0, "Border Router" },
22336 { WISUN_NR_ROUTER1, "Router" },
22337 { WISUN_NR_LFN2, "LFN" },
22338 { 0, NULL((void*)0) }
22339};
22340
22341#define WISUN_LGTKL_LGTK00x01 0x01
22342#define WISUN_LGTKL_LGTK10x02 0x02
22343#define WISUN_LGTKL_LGTK20x04 0x04
22344
22345static void
22346dissect_vendor_ie_wisun(proto_item *item, proto_tree *ietree,
22347 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22348{
22349 uint32_t type;
22350
22351 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_wisun_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &type);
22352 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_wisun_type_vals, "Unknown"));
22353 offset += 1;
22354 tag_len -= 1;
22355
22356 switch(type) {
22357 case WISUN_PTKID1:
22358 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_ptkid, tvb, offset, 16, ENC_NA0x00000000);
22359 break;
22360 case WISUN_GTKL2: {
22361 static int * const wisun_gtkl[] = {
22362 &hf_ieee80211_vs_wisun_gtkl_gtk0,
22363 &hf_ieee80211_vs_wisun_gtkl_gtk1,
22364 &hf_ieee80211_vs_wisun_gtkl_gtk2,
22365 &hf_ieee80211_vs_wisun_gtkl_gtk3,
22366 NULL((void*)0),
22367 };
22368
22369 proto_tree_add_bitmask(ietree, tvb, offset, hf_ieee80211_vs_wisun_gtkl,
22370 ett_wisun_gtkl, wisun_gtkl, ENC_LITTLE_ENDIAN0x80000000);
22371 break;
22372 }
22373 case WISUN_NR3:
22374 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_nr, tvb,
22375 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
22376 break;
22377 case WISUN_LGTKL4: {
22378 static int * const wisun_lgtkl[] = {
22379 &hf_ieee80211_vs_wisun_lgtkl_lgtk0,
22380 &hf_ieee80211_vs_wisun_lgtkl_lgtk1,
22381 &hf_ieee80211_vs_wisun_lgtkl_lgtk2,
22382 NULL((void*)0),
22383 };
22384
22385 proto_tree_add_bitmask(ietree, tvb, offset, hf_ieee80211_vs_wisun_lgtkl,
22386 ett_wisun_lgtkl, wisun_lgtkl, ENC_LITTLE_ENDIAN0x80000000);
22387 break;
22388 }
22389 case WISUN_LGTK5:
22390 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_lgtk_key_id, tvb,
22391 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
22392 offset += 2;
22393 tag_len -= 2;
22394 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_lgtk_lgtk, tvb,
22395 offset, tag_len, ENC_NA0x00000000);
22396 break;
22397 default:
22398 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_data, tvb, offset, tag_len, ENC_NA0x00000000);
22399 if (tag_len > 0)
22400 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22401 break;
22402 }
22403}
22404
22405static const value_string ieee80211_vs_apple_subtype_vals[] = {
22406 { 0, NULL((void*)0) }
22407};
22408
22409static void
22410dissect_vendor_ie_apple(proto_item *item, proto_tree *ietree,
22411 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22412{
22413 uint32_t subtype, type, length;
22414
22415 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_apple_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &type);
22416 offset += 1;
22417 tag_len -= 1;
22418
22419 if(type == 6) { /* when type is 6, there is some subtype...*/
22420 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_apple_subtype, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &subtype);
22421 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_apple_subtype_vals, "Unknown"));
22422 offset += 2;
22423 tag_len -= 2;
22424
22425 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_apple_length, tvb, offset, 1, ENC_NA0x00000000, &length);
22426 offset += 1;
22427 tag_len -= 1;
22428
22429 switch (subtype) {
22430 default:
22431 proto_tree_add_item(ietree, hf_ieee80211_vs_apple_data, tvb, offset, tag_len, ENC_NA0x00000000);
22432 if (tag_len > 0)
22433 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22434 break;
22435 }
22436 } else{
22437 proto_tree_add_item(ietree, hf_ieee80211_vs_apple_data, tvb, offset, tag_len, ENC_NA0x00000000);
22438 if (tag_len > 0)
22439 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22440 }
22441
22442}
22443
22444/* 802.11-2012 8.4.2.37 QoS Capability element */
22445static int
22446dissect_qos_capability(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
22447{
22448 switch (ftype) {
22449 case MGT_ASSOC_REQ0x00:
22450 case MGT_PROBE_REQ0x04:
22451 case MGT_REASSOC_REQ0x02:
22452 {
22453 /* To AP so decode Qos Info as STA */
22454 offset += add_ff_qos_info_sta(tree, tvb, pinfo, offset);
22455 break;
22456 }
22457
22458 case MGT_BEACON0x08:
22459 case MGT_PROBE_RESP0x05:
22460 case MGT_ASSOC_RESP0x01:
22461 case MGT_REASSOC_RESP0x03:
22462 {
22463 /* From AP so decode QoS Info as AP */
22464 offset += add_ff_qos_info_ap(tree, tvb, pinfo, offset);
22465 break;
22466 }
22467
22468 default:
22469 expert_add_info_format(pinfo, proto_tree_get_parent(tree), &ei_ieee80211_qos_info_bad_ftype,
22470 "Could not deduce direction to decode correctly, ftype %u", ftype);
22471 break;
22472 }
22473
22474 return offset;
22475}
22476
22477static ieee80211_packet_data_t* get_or_create_packet_data(packet_info *pinfo) {
22478 ieee80211_packet_data_t *packet_data =
22479 (ieee80211_packet_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, PACKET_DATA_KEY);
22480 if (!packet_data) {
22481 packet_data = wmem_new(pinfo->pool, ieee80211_packet_data_t)((ieee80211_packet_data_t*)wmem_alloc((pinfo->pool), sizeof
(ieee80211_packet_data_t)))
;
22482 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, PACKET_DATA_KEY, packet_data);
22483 memset(packet_data, 0, sizeof(ieee80211_packet_data_t));
22484 }
22485 return packet_data;
22486}
22487
22488/* See ieee80211_rsn_keymgmt_vals */
22489static bool_Bool is_ft_akm_suite(uint32_t akm_suite)
22490{
22491 switch (akm_suite) {
22492 case AKMS_FT_IEEE802_1X0x000FAC03:
22493 case AKMS_FT_PSK0x000FAC04:
22494 case AKMS_FT_SAE0x000FAC09:
22495 case AKMS_FT_IEEE802_1X_SHA3840x000FAC0D:
22496 case AKMS_FT_FILS_SHA2560x000FAC10:
22497 case AKMS_FT_FILS_SHA3840x000FAC11:
22498 return true1;
22499 default:
22500 return false0;
22501 }
22502}
22503
22504static void
22505save_proto_data(tvbuff_t *tvb, packet_info *pinfo, int offset, size_t size, int key)
22506{
22507 uint8_t *data;
22508
22509 if (!enable_decryption) {
22510 return;
22511 }
22512 data = (uint8_t *)wmem_alloc(pinfo->pool, size);
22513 tvb_memcpy(tvb, data, offset, size);
22514 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, key, data);
22515}
22516
22517static void
22518save_proto_data_value(packet_info *pinfo, unsigned value, int key)
22519{
22520 if (!enable_decryption) {
22521 return;
22522 }
22523 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, key, GUINT_TO_POINTER(value)((gpointer) (gulong) (value)));
22524}
22525
22526static void
22527save_tag_for_dot11decrypt(tvbuff_t *tvb, packet_info *pinfo, int offset)
22528{
22529 uint8_t tag_no;
22530 uint8_t tag_len;
22531
22532 if (!enable_decryption) {
22533 return;
22534 }
22535 tag_no = tvb_get_uint8(tvb, offset);
22536 tag_len = tvb_get_uint8(tvb, offset + 1);
22537
22538 switch (tag_no) {
22539 case TAG_MOBILITY_DOMAIN54:
22540 save_proto_data(tvb, pinfo, offset, tag_len + 2, MDE_TAG_KEY);
22541 break;
22542 case TAG_FAST_BSS_TRANSITION55:
22543 save_proto_data(tvb, pinfo, offset, tag_len + 2, FTE_TAG_KEY);
22544 break;
22545 case TAG_RIC_DATA57:
22546 save_proto_data(tvb, pinfo, offset, tag_len + 2, RDE_TAG_KEY);
22547 break;
22548 case TAG_RSN_IE48:
22549 save_proto_data(tvb, pinfo, offset, tag_len + 2, RSNE_TAG_KEY);
22550 break;
22551 case TAG_RSNX244:
22552 save_proto_data(tvb, pinfo, offset, tag_len + 2, RSNXE_TAG_KEY);
22553 break;
22554 default:
22555 break;
22556 }
22557}
22558
22559static void
22560set_packet_data_last_akm_suite(ieee80211_packet_data_t *packet_data,
22561 uint32_t last_akm_suite)
22562{
22563 packet_data->last_akm_suite_set = true1;
22564 packet_data->last_akm_suite = last_akm_suite;
22565}
22566
22567static void
22568set_conversation_last_akm_suite(ieee80211_conversation_data_t *conv,
22569 uint32_t last_akm_suite)
22570{
22571 conv->last_akm_suite_set = true1;
22572 conv->last_akm_suite = last_akm_suite;
22573}
22574
22575/*
22576 * 7.3.2.25 RSNE information element. Common format with OSEN except the
22577 * version... should refactor
22578 */
22579static int
22580dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
22581 int offset, uint32_t tag_len, association_sanity_check_t *association_sanity_check)
22582{
22583 proto_item *rsn_gcs_item, *rsn_pcs_item, *rsn_akms_item, *rsn_pmkid_item, *rsn_gmcs_item;
22584 proto_item *rsn_sub_pcs_item, *rsn_sub_akms_item;
22585 proto_item *rsn_pcs_count, *rsn_akms_count, *rsn_pmkid_count;
22586 proto_tree *rsn_gcs_tree, *rsn_pcs_tree, *rsn_akms_tree, *rsn_pmkid_tree, *rsn_gmcs_tree;
22587 proto_tree *rsn_sub_pcs_tree, *rsn_sub_akms_tree;
22588 uint16_t pcs_count, akms_count, pmkid_count;
22589 unsigned ii;
22590 int tag_end = offset + tag_len;
22591 static int * const ieee80211_rsn_cap[] = {
22592 &hf_ieee80211_rsn_cap_preauth,
22593 &hf_ieee80211_rsn_cap_no_pairwise,
22594 &hf_ieee80211_rsn_cap_ptksa_replay_counter,
22595 &hf_ieee80211_rsn_cap_gtksa_replay_counter,
22596 &hf_ieee80211_rsn_cap_mfpr,
22597 &hf_ieee80211_rsn_cap_mfpc,
22598 &hf_ieee80211_rsn_cap_jmr,
22599 &hf_ieee80211_rsn_cap_peerkey,
22600 &hf_ieee80211_rsn_cap_spp_amsdu_cap,
22601 &hf_ieee80211_rsn_cap_spp_amsdu_req,
22602 &hf_ieee80211_rsn_cap_pbac,
22603 &hf_ieee80211_rsn_cap_extended_key_id_iaf,
22604 &hf_ieee80211_rsn_cap_ocvc,
22605 NULL((void*)0)
22606 };
22607
22608 proto_tree_add_item(tree, hf_ieee80211_rsn_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22609 offset += 2;
22610
22611 if (offset >= tag_end)
22612 return offset;
22613
22614 /* 7.3.2.25.1 Group Cipher suites */
22615 rsn_gcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22616 rsn_gcs_tree = proto_item_add_subtree(rsn_gcs_item, ett_rsn_gcs_tree);
22617 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22618
22619 /* Check if OUI is 00:0F:AC (ieee80211) */
22620 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22621 {
22622 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22623 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), GROUP_CIPHER_KEY);
22624 } else {
22625 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22626 }
22627 offset += 4;
22628
22629 if (offset >= tag_end)
22630 return offset;
22631
22632 /* 7.3.2.25.2 Pairwise Cipher suites */
22633 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22634 pcs_count = tvb_get_letohs(tvb, offset);
22635 offset += 2;
22636
22637 if (offset + (pcs_count * 4) > tag_end)
22638 {
22639 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
22640 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
22641 pcs_count = (tag_end - offset) / 4;
22642 }
22643
22644 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA0x00000000);
22645 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
22646 for (ii = 0; ii < pcs_count; ii++)
22647 {
22648 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22649 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
22650 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22651
22652 /* Check if OUI is 00:0F:AC (ieee80211) */
22653 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22654 {
22655 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22656 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
22657 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), CIPHER_KEY);
22658 } else {
22659 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22660 }
22661 offset += 4;
22662 }
22663
22664 if (offset >= tag_end)
22665 {
22666 return offset;
22667 }
22668
22669 /* 7.3.2.25.2 AKM suites */
22670 rsn_akms_count = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22671 akms_count = tvb_get_letohs(tvb, offset);
22672 offset += 2;
22673
22674 if (offset + (akms_count * 4) > tag_end)
22675 {
22676 expert_add_info_format(pinfo, rsn_akms_count, &ei_ieee80211_rsn_pmkid_count,
22677 "Auth Key Management (AKM) Suite Count too large, 4*%u > %d", akms_count, tag_end - offset);
22678 akms_count = (tag_end - offset) / 4;
22679 }
22680
22681 rsn_akms_item = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_list, tvb, offset, akms_count * 4, ENC_NA0x00000000);
22682 rsn_akms_tree = proto_item_add_subtree(rsn_akms_item, ett_rsn_akms_tree);
22683
22684 ieee80211_packet_data_t *packet_data = get_or_create_packet_data(pinfo);
22685
22686 for (ii = 0; ii < akms_count; ii++)
22687 {
22688 rsn_sub_akms_item = proto_tree_add_item(rsn_akms_tree, hf_ieee80211_rsn_akms, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22689 rsn_sub_akms_tree = proto_item_add_subtree(rsn_sub_akms_item, ett_rsn_sub_akms_tree);
22690 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22691
22692 /* Check if OUI is 00:0F:AC (ieee80211) */
22693 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22694 {
22695 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22696 proto_item_append_text(rsn_akms_item, " %s", rsn_akms_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
22697 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), AKM_KEY);
22698
22699 set_packet_data_last_akm_suite(packet_data, tvb_get_ntohl(tvb, offset));
22700 if (association_sanity_check) {
22701 uint32_t akm_suite = tvb_get_ntohl(tvb, offset);
22702 association_sanity_check->last_akm_suite = akm_suite;
22703
22704 if (is_ft_akm_suite(akm_suite)) {
22705 /* This is an FT AKM suite */
22706 association_sanity_check->has_ft_akm_suite = true1;
22707 if (association_sanity_check->rsn_first_ft_akm_suite == NULL((void*)0) && rsn_sub_akms_tree != NULL((void*)0)) {
22708 association_sanity_check->rsn_first_ft_akm_suite = rsn_sub_akms_tree->last_child;
22709 }
22710 } else {
22711 /* This is a non-FT AKM suite */
22712 association_sanity_check->has_non_ft_akm_suite = true1;
22713 if (association_sanity_check->rsn_first_non_ft_akm_suite == NULL((void*)0) && rsn_sub_akms_tree != NULL((void*)0)) {
22714 association_sanity_check->rsn_first_non_ft_akm_suite = rsn_sub_akms_tree->last_child;
22715 }
22716 }
22717 }
22718 } else {
22719 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22720 }
22721 offset += 4;
22722 }
22723
22724 /* 7.3.2.25.3 RSN capabilities */
22725 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_rsn_cap,
22726 ett_rsn_cap_tree, ieee80211_rsn_cap,
22727 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22728 offset += 2;
22729 if (offset >= tag_end)
22730 {
22731 return offset;
22732 }
22733 /* 7.3.2.25.4 PMKID */
22734 rsn_pmkid_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22735 pmkid_count = tvb_get_letohs(tvb, offset);
22736 offset += 2;
22737
22738 if (offset + (pmkid_count * 16) > tag_end)
22739 {
22740 expert_add_info_format(pinfo, rsn_pmkid_count, &ei_ieee80211_pmkid_count_too_large,
22741 "PMKID Count too large, 16*%u > %d", pmkid_count, tag_end - offset);
22742 pmkid_count = (tag_end - offset) / 16;
22743 }
22744
22745 rsn_pmkid_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_list, tvb, offset, pmkid_count * 16, ENC_NA0x00000000);
22746 rsn_pmkid_tree = proto_item_add_subtree(rsn_pmkid_item, ett_rsn_pmkid_tree);
22747 for (ii = 0; ii < pmkid_count; ii++)
22748 {
22749 proto_tree_add_item(rsn_pmkid_tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA0x00000000);
22750 offset += 16;
22751 }
22752
22753 if (offset >= tag_end)
22754 {
22755 return offset;
22756 }
22757 /* Group Management Cipher Suite (802.11w)*/
22758 rsn_gmcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gmcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22759 rsn_gmcs_tree = proto_item_add_subtree(rsn_gmcs_item, ett_rsn_gmcs_tree);
22760 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22761 /* Check if OUI is 00:0F:AC (ieee80211) */
22762 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22763 {
22764 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22765 } else {
22766 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22767 }
22768 offset += 4;
22769
22770 return offset;
22771}
22772
22773/* 7.3.2.27 Extended Capabilities information element (127) */
22774static int
22775dissect_extended_capabilities_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
22776{
22777 int tag_len = tvb_reported_length(tvb);
22778 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
22779 int offset = 0;
22780 proto_item *ti_ex_cap;
22781 static int * const ieee80211_tag_extended_capabilities_byte1[] = {
22782 &hf_ieee80211_tag_extended_capabilities_b0,
22783 &hf_ieee80211_tag_extended_capabilities_b1,
22784 &hf_ieee80211_tag_extended_capabilities_b2,
22785 &hf_ieee80211_tag_extended_capabilities_b3,
22786 &hf_ieee80211_tag_extended_capabilities_b4,
22787 &hf_ieee80211_tag_extended_capabilities_b5,
22788 &hf_ieee80211_tag_extended_capabilities_b6,
22789 &hf_ieee80211_tag_extended_capabilities_b7,
22790 NULL((void*)0)
22791 };
22792 static int * const ieee80211_tag_extended_capabilities_byte2[] = {
22793 &hf_ieee80211_tag_extended_capabilities_b8,
22794 &hf_ieee80211_tag_extended_capabilities_b9,
22795 &hf_ieee80211_tag_extended_capabilities_b10,
22796 &hf_ieee80211_tag_extended_capabilities_b11,
22797 &hf_ieee80211_tag_extended_capabilities_b12,
22798 &hf_ieee80211_tag_extended_capabilities_b13,
22799 &hf_ieee80211_tag_extended_capabilities_b14,
22800 &hf_ieee80211_tag_extended_capabilities_b15,
22801 NULL((void*)0)
22802 };
22803 static int * const ieee80211_tag_extended_capabilities_byte3[] = {
22804 &hf_ieee80211_tag_extended_capabilities_b16,
22805 &hf_ieee80211_tag_extended_capabilities_b17,
22806 &hf_ieee80211_tag_extended_capabilities_b18,
22807 &hf_ieee80211_tag_extended_capabilities_b19,
22808 &hf_ieee80211_tag_extended_capabilities_b20,
22809 &hf_ieee80211_tag_extended_capabilities_b21,
22810 &hf_ieee80211_tag_extended_capabilities_b22,
22811 &hf_ieee80211_tag_extended_capabilities_b23,
22812 NULL((void*)0)
22813 };
22814 static int * const ieee80211_tag_extended_capabilities_byte4[] = {
22815 &hf_ieee80211_tag_extended_capabilities_b24,
22816 &hf_ieee80211_tag_extended_capabilities_b25,
22817 &hf_ieee80211_tag_extended_capabilities_b26,
22818 &hf_ieee80211_tag_extended_capabilities_b27,
22819 &hf_ieee80211_tag_extended_capabilities_b28,
22820 &hf_ieee80211_tag_extended_capabilities_b29,
22821 &hf_ieee80211_tag_extended_capabilities_b30,
22822 &hf_ieee80211_tag_extended_capabilities_b31,
22823 NULL((void*)0)
22824 };
22825 static int * const ieee80211_tag_extended_capabilities_byte5[] = {
22826 &hf_ieee80211_tag_extended_capabilities_b32,
22827 &hf_ieee80211_tag_extended_capabilities_b33,
22828 &hf_ieee80211_tag_extended_capabilities_b34,
22829 &hf_ieee80211_tag_extended_capabilities_b35,
22830 &hf_ieee80211_tag_extended_capabilities_b36,
22831 &hf_ieee80211_tag_extended_capabilities_b37,
22832 &hf_ieee80211_tag_extended_capabilities_b38,
22833 &hf_ieee80211_tag_extended_capabilities_b39,
22834 NULL((void*)0)
22835 };
22836 static int * const ieee80211_tag_extended_capabilities_byte6[] = {
22837 &hf_ieee80211_tag_extended_capabilities_b40,
22838 &hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
22839 &hf_ieee80211_tag_extended_capabilities_b44,
22840 &hf_ieee80211_tag_extended_capabilities_b45,
22841 &hf_ieee80211_tag_extended_capabilities_b46,
22842 &hf_ieee80211_tag_extended_capabilities_b47,
22843 NULL((void*)0)
22844 };
22845 static int * const ieee80211_tag_extended_capabilities_byte7[] = {
22846 &hf_ieee80211_tag_extended_capabilities_b48,
22847 &hf_ieee80211_tag_extended_capabilities_b49,
22848 &hf_ieee80211_tag_extended_capabilities_b50,
22849 &hf_ieee80211_tag_extended_capabilities_b51,
22850 &hf_ieee80211_tag_extended_capabilities_b52,
22851 &hf_ieee80211_tag_extended_capabilities_b53,
22852 &hf_ieee80211_tag_extended_capabilities_b54,
22853 &hf_ieee80211_tag_extended_capabilities_b55,
22854 NULL((void*)0)
22855 };
22856
22857 static int * const ieee80211_tag_extended_capabilities_byte8[] = {
22858 &hf_ieee80211_tag_extended_capabilities_b56,
22859 &hf_ieee80211_tag_extended_capabilities_b57,
22860 &hf_ieee80211_tag_extended_capabilities_b58,
22861 &hf_ieee80211_tag_extended_capabilities_b59,
22862 &hf_ieee80211_tag_extended_capabilities_b60,
22863 &hf_ieee80211_tag_extended_capabilities_b61,
22864 &hf_ieee80211_tag_extended_capabilities_b62,
22865 &hf_ieee80211_tag_extended_capabilities_b63,
22866 NULL((void*)0)
22867 };
22868
22869 static int * const ieee80211_tag_extended_capabilities_bytes89[] = {
22870 &hf_ieee80211_tag_extended_capabilities_b56_2,
22871 &hf_ieee80211_tag_extended_capabilities_b57_2,
22872 &hf_ieee80211_tag_extended_capabilities_b58_2,
22873 &hf_ieee80211_tag_extended_capabilities_b59_2,
22874 &hf_ieee80211_tag_extended_capabilities_b60_2,
22875 &hf_ieee80211_tag_extended_capabilities_b61_2,
22876 &hf_ieee80211_tag_extended_capabilities_b62_2,
22877 &hf_ieee80211_tag_extended_capabilities_max_num_msdus,
22878 &hf_ieee80211_tag_extended_capabilities_b65_2,
22879 &hf_ieee80211_tag_extended_capabilities_b66_2,
22880 &hf_ieee80211_tag_extended_capabilities_b67_2,
22881 &hf_ieee80211_tag_extended_capabilities_b68_2,
22882 &hf_ieee80211_tag_extended_capabilities_b69_2,
22883 &hf_ieee80211_tag_extended_capabilities_b70_2,
22884 &hf_ieee80211_tag_extended_capabilities_b71_2,
22885 NULL((void*)0)
22886 };
22887
22888 static int * const ieee80211_tag_extended_capabilities_byte10[] = {
22889 &hf_ieee80211_tag_extended_capabilities_b72,
22890 &hf_ieee80211_tag_extended_capabilities_b73,
22891 &hf_ieee80211_tag_extended_capabilities_b74,
22892 &hf_ieee80211_tag_extended_capabilities_b75,
22893 &hf_ieee80211_tag_extended_capabilities_b76,
22894 &hf_ieee80211_tag_extended_capabilities_b77,
22895 &hf_ieee80211_tag_extended_capabilities_b78,
22896 &hf_ieee80211_tag_extended_capabilities_b79,
22897 NULL((void*)0)
22898 };
22899
22900 static int * const ieee80211_tag_extended_capabilities_byte11[] = {
22901 &hf_ieee80211_tag_extended_capabilities_b80,
22902 &hf_ieee80211_tag_extended_capabilities_b81,
22903 &hf_ieee80211_tag_extended_capabilities_b82,
22904 &hf_ieee80211_tag_extended_capabilities_b83,
22905 &hf_ieee80211_tag_extended_capabilities_b84,
22906 &hf_ieee80211_tag_extended_capabilities_b85,
22907 &hf_ieee80211_tag_extended_capabilities_b86,
22908 &hf_ieee80211_tag_extended_capabilities_b87,
22909 NULL((void*)0)
22910 };
22911
22912 static int * const ieee80211_tag_extended_capabilities_byte12[] = {
22913 &hf_ieee80211_tag_extended_capabilities_b88,
22914 &hf_ieee80211_tag_extended_capabilities_b89,
22915 &hf_ieee80211_tag_extended_capabilities_b90,
22916 &hf_ieee80211_tag_extended_capabilities_b91,
22917 &hf_ieee80211_tag_extended_capabilities_b92,
22918 &hf_ieee80211_tag_extended_capabilities_b93,
22919 &hf_ieee80211_tag_extended_capabilities_b94,
22920 &hf_ieee80211_tag_extended_capabilities_b95,
22921 NULL((void*)0)
22922 };
22923
22924 static int * const ieee80211_tag_extended_capabilities_byte13[] = {
22925 &hf_ieee80211_tag_extended_capabilities_b96,
22926 &hf_ieee80211_tag_extended_capabilities_b97,
22927 &hf_ieee80211_tag_extended_capabilities_b98,
22928 &hf_ieee80211_tag_extended_capabilities_b99,
22929 &hf_ieee80211_tag_extended_capabilities_b100,
22930 &hf_ieee80211_tag_extended_capabilities_b101,
22931 &hf_ieee80211_tag_extended_capabilities_b102,
22932 &hf_ieee80211_tag_extended_capabilities_b103,
22933 NULL((void*)0)
22934 };
22935
22936 static int * const ieee80211_tag_extended_capabilities_byte14[] = {
22937 &hf_ieee80211_tag_extended_capabilities_b104,
22938 &hf_ieee80211_tag_extended_capabilities_b105,
22939 &hf_ieee80211_tag_extended_capabilities_reserved2,
22940 NULL((void*)0)
22941 };
22942
22943 if (tag_len < 1)
22944 {
22945 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);
22946 return 1;
22947 }
22948 proto_item_append_text(field_data->item_tag, " (%u octet%s)", tag_len, plurality(tag_len, "", "s")((tag_len) == 1 ? ("") : ("s")));
22949
22950 /* Extended Capability octet 1 */
22951 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22952 ett_tag_ex_cap1, ieee80211_tag_extended_capabilities_byte1,
22953 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22954 proto_item_append_text(ti_ex_cap, " (octet 1)");
22955 offset += 1;
22956
22957 /* Extended Capability octet 2 */
22958 if (offset >= tag_len) {
22959 return offset;
22960 }
22961 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22962 ett_tag_ex_cap2, ieee80211_tag_extended_capabilities_byte2,
22963 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22964 proto_item_append_text(ti_ex_cap, " (octet 2)");
22965 offset += 1;
22966
22967 /* Extended Capability octet 3 */
22968 if (offset >= tag_len) {
22969 return offset;
22970 }
22971 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22972 ett_tag_ex_cap3, ieee80211_tag_extended_capabilities_byte3,
22973 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22974 proto_item_append_text(ti_ex_cap, " (octet 3)");
22975 offset += 1;
22976
22977 /* Extended Capability octet 4 */
22978 if (offset >= tag_len) {
22979 return offset;
22980 }
22981 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22982 ett_tag_ex_cap4, ieee80211_tag_extended_capabilities_byte4,
22983 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22984 proto_item_append_text(ti_ex_cap, " (octet 4)");
22985 offset += 1;
22986
22987 /* Extended Capability octet 5 */
22988 if (offset >= tag_len) {
22989 return offset;
22990 }
22991 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22992 ett_tag_ex_cap5, ieee80211_tag_extended_capabilities_byte5,
22993 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22994 proto_item_append_text(ti_ex_cap, " (octet 5)");
22995 offset += 1;
22996
22997 /* Extended Capability octet 6 */
22998 if (offset >= tag_len) {
22999 return offset;
23000 }
23001
23002 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23003 ett_tag_ex_cap6, ieee80211_tag_extended_capabilities_byte6,
23004 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23005 proto_item_append_text(ti_ex_cap, " (octet 6)");
23006 offset += 1;
23007
23008
23009 /* Extended Capability octet 7 */
23010 if (offset >= tag_len) {
23011 return offset;
23012 }
23013 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23014 ett_tag_ex_cap7, ieee80211_tag_extended_capabilities_byte7,
23015 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23016 proto_item_append_text(ti_ex_cap, " (octet 7)");
23017 offset += 1;
23018
23019 /* Extended Capability octet 8 & 9 since two bits cross the boundary */
23020 if (offset >= tag_len) {
23021 return offset;
23022 }
23023
23024 /* If only the first of the two bytes is present, do the best we can */
23025 if (offset == tag_len - 1) {
23026 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23027 ett_tag_ex_cap8, ieee80211_tag_extended_capabilities_byte8,
23028 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23029 proto_item_append_text(ti_ex_cap, " (octet 8)");
23030 offset += 1;
23031 } else { /* Both bytes are there */
23032 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities_2,
23033 ett_tag_ex_cap89, ieee80211_tag_extended_capabilities_bytes89,
23034 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23035 proto_item_append_text(ti_ex_cap, " (octets 8 & 9)");
23036 offset += 2;
23037 }
23038
23039 if (offset >= tag_len) {
23040 return offset;
23041 }
23042
23043 /* Extended Capability octet 10 */
23044 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23045 ett_tag_ex_cap10, ieee80211_tag_extended_capabilities_byte10,
23046 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23047 proto_item_append_text(ti_ex_cap, " (octet 10)");
23048 offset += 1;
23049
23050 if (offset >= tag_len) {
23051 return offset;
23052 }
23053
23054 /* Extended Capability octet 11 */
23055#if 0
23056 /* Added for SAE support */
23057 sae_byte = tvb_get_uint8(tvb, offset);
23058 /*
23059 * If one of the SAE bits is set, assume we will see Password identifiers
23060 */
23061 if (sae_byte & 0x6) {
23062 bool_Bool sae_val = true1;
23063 uint64_t *key = NULL((void*)0);
23064
23065 /* Must be for the source of the request */
23066 key = (uint64_t *)wmem_new(wmem_file_scope(), uint64_t)((uint64_t*)wmem_alloc((wmem_file_scope()), sizeof(uint64_t))
)
;
23067 *key = *(uint64_t *)pinfo->src.data;
23068 wmem_map_insert(sae_prop_hash, key, GINT_TO_POINTER(sae_val)((gpointer) (glong) (sae_val)));
23069 }
23070#endif
23071 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23072 ett_tag_ex_cap11, ieee80211_tag_extended_capabilities_byte11,
23073 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23074 proto_item_append_text(ti_ex_cap, " (octet 11)");
23075 offset += 1;
23076
23077 if (offset >= tag_len) {
23078 return offset;
23079 }
23080
23081 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
23082 hf_ieee80211_tag_extended_capabilities,
23083 ett_tag_ex_cap12,
23084 ieee80211_tag_extended_capabilities_byte12,
23085 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23086 proto_item_append_text(ti_ex_cap, " (octet 12)");
23087 offset += 1;
23088
23089 if (offset >= tag_len) {
23090 return offset;
23091 }
23092
23093 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
23094 hf_ieee80211_tag_extended_capabilities,
23095 ett_tag_ex_cap13,
23096 ieee80211_tag_extended_capabilities_byte13,
23097 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23098 proto_item_append_text(ti_ex_cap, " (octet 13)");
23099 offset += 1;
23100
23101 if (offset >= tag_len) {
23102 return offset;
23103 }
23104
23105 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
23106 hf_ieee80211_tag_extended_capabilities,
23107 ett_tag_ex_cap14,
23108 ieee80211_tag_extended_capabilities_byte14,
23109 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23110 proto_item_append_text(ti_ex_cap, " (octet 14)");
23111 offset += 1;
23112
23113 return offset;
23114}
23115
23116static int
23117dissect_vht_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset)
23118{
23119 proto_item *ti;
23120 proto_tree *mcs_tree;
23121 static int * const ieee80211_vht_mcsset_rx_max_mcs[] = {
23122 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
23123 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
23124 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
23125 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
23126 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
23127 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
23128 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
23129 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
23130 NULL((void*)0)
23131 };
23132 static int * const ieee80211_vht_mcsset_tx_max_mcs[] = {
23133 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
23134 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
23135 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
23136 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
23137 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
23138 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
23139 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
23140 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
23141 NULL((void*)0)
23142 };
23143
23144 /* 8 byte Supported MCS set */
23145 ti = proto_tree_add_item(tree, hf_ieee80211_vht_mcsset, tvb, offset, 8, ENC_NA0x00000000);
23146
23147 mcs_tree = proto_item_add_subtree(ti, ett_vht_mcsset_tree);
23148
23149 /* B0 - B15 */
23150 proto_tree_add_bitmask_with_flags(mcs_tree, tvb, offset, hf_ieee80211_vht_mcsset_rx_mcs_map,
23151 ett_vht_rx_mcsbit_tree, ieee80211_vht_mcsset_rx_max_mcs,
23152 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23153 offset += 2;
23154
23155 /* B16 - B28 13 bits*/
23156 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23157
23158 /* B29 - B31 2 Max NSTS, total*/
23159
23160 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_max_nsts_total, tvb, offset,
23161 2, ENC_LITTLE_ENDIAN0x80000000);
23162 offset += 2;
23163
23164 /* B32 - B47 */
23165 proto_tree_add_bitmask_with_flags(mcs_tree, tvb, offset, hf_ieee80211_vht_mcsset_tx_mcs_map,
23166 ett_vht_tx_mcsbit_tree, ieee80211_vht_mcsset_tx_max_mcs,
23167 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23168 offset += 2;
23169 /* B48 - B60 13 bits */
23170 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23171 /* B61 */
23172 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_extended_nss_bw_capable,
23173 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23174
23175 /* B62 - B63 2 reserved bits*/
23176 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_reserved, tvb, offset, 2,
23177 ENC_LITTLE_ENDIAN0x80000000);offset += 2;
23178
23179 return offset;
23180}
23181
23182static int
23183dissect_vht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23184{
23185 int tag_len = tvb_reported_length(tvb);
23186 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23187 int offset = 0;
23188 static int * const ieee80211_vht_caps[] = {
23189 &hf_ieee80211_vht_max_mpdu_length,
23190 &hf_ieee80211_vht_supported_chan_width_set,
23191 &hf_ieee80211_vht_rx_ldpc,
23192 &hf_ieee80211_vht_short_gi_for_80,
23193 &hf_ieee80211_vht_short_gi_for_160,
23194 &hf_ieee80211_vht_tx_stbc,
23195 /* End of first byte */
23196 &hf_ieee80211_vht_rx_stbc,
23197 &hf_ieee80211_vht_su_beamformer_cap,
23198 &hf_ieee80211_vht_su_beamformee_cap,
23199 &hf_ieee80211_vht_beamformer_antennas,
23200 /* End of second byte */
23201 &hf_ieee80211_vht_sounding_dimensions,
23202 &hf_ieee80211_vht_mu_beamformer_cap,
23203 &hf_ieee80211_vht_mu_beamformee_cap,
23204 &hf_ieee80211_vht_txop_ps,
23205 &hf_ieee80211_vht_var_htc_field,
23206 &hf_ieee80211_vht_max_ampdu,
23207 &hf_ieee80211_vht_link_adaptation_cap,
23208 &hf_ieee80211_vht_rx_pattern,
23209 &hf_ieee80211_vht_tx_pattern,
23210 &hf_ieee80211_vht_ext_nss_bw_support,
23211 NULL((void*)0)
23212 };
23213
23214 if (tag_len != 12) {
23215 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23216 "VHT Capabilities IE length %u wrong, must be = 12", tag_len);
23217 return 1;
23218 }
23219
23220 /* 4 byte VHT Capabilities Info*/
23221 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_cap,
23222 ett_vht_cap_tree, ieee80211_vht_caps,
23223 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23224 offset += 4;
23225
23226 /* 8 byte MCS set */
23227 offset = dissect_vht_mcs_set(tree, tvb, offset);
23228
23229 return offset;
23230}
23231
23232static int
23233dissect_vht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23234{
23235 int tag_len = tvb_reported_length(tvb);
23236 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23237 int offset = 0;
23238 proto_item *op_item;
23239 proto_tree *op_tree;
23240 static int * const ieee80211_vht_op_max_basic_mcs[] = {
23241 &hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
23242 &hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
23243 &hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
23244 &hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
23245 &hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
23246 &hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
23247 &hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
23248 &hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
23249 NULL((void*)0)
23250 };
23251
23252 if (tag_len != 5) {
23253 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23254 "VHT Operation IE length %u wrong, must be = 5", tag_len);
23255 return 1;
23256 }
23257
23258 /* 3 byte VHT Operation Info*/
23259 op_item = proto_tree_add_item(tree, hf_ieee80211_vht_op, tvb, offset, 3, ENC_NA0x00000000);
23260 op_tree = proto_item_add_subtree(op_item, ett_vht_op_tree);
23261 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23262 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center0, tvb, offset+1, 1, ENC_LITTLE_ENDIAN0x80000000);
23263 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center1, tvb, offset+2, 1, ENC_LITTLE_ENDIAN0x80000000);
23264
23265 offset += 3;
23266 /* VHT Basic MCS Set */
23267 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_op_basic_mcs_map,
23268 ett_vht_basic_mcsbit_tree, ieee80211_vht_op_max_basic_mcs,
23269 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23270 offset += 2;
23271
23272 return offset;
23273}
23274
23275static int
23276dissect_vht_tx_pwr_envelope(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23277{
23278 int tag_len = tvb_reported_length(tvb);
23279 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23280 int offset = 0;
23281 proto_item *tx_pwr_item, *ti, *unit_ti;
23282 proto_tree *tx_pwr_info_tree;
23283 uint8_t opt_ie_cnt=0;
23284 uint8_t i;
23285 unsigned mtpi;
23286
23287 if (tag_len < 2 || tag_len > 18) {
23288 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23289 "VHT TX PWR Envelope IE length %u wrong, must be >= 2 and <= 18", tag_len);
23290 return 1;
23291 }
23292
23293 mtpi = (tvb_get_uint8(tvb, offset) >> 3) & 0x7;
23294 tx_pwr_item = proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_info, tvb, offset, 1, ENC_NA0x00000000);
23295 tx_pwr_info_tree = proto_item_add_subtree(tx_pwr_item, ett_vht_tpe_info_tree);
23296
23297 ti = proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23298 unit_ti = proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_unit, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23299 proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_category, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23300
23301 opt_ie_cnt = tvb_get_uint8(tvb, offset) & 0x07;
23302
23303 offset += 1;
23304
23305 switch (mtpi) {
23306
23307 case 1:
23308 case 3:
23309 case 5:
23310 /* Is it a power spectral density? */
23311 /* Handle the zero case */
23312 if (opt_ie_cnt == 0) {
23313 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_any_bw_psd, tvb, offset,
23314 1, ENC_NA0x00000000);
23315 offset += 1;
23316 return offset;
23317 }
23318 switch (opt_ie_cnt) {
23319 case 0:
23320 opt_ie_cnt = 0;
23321 break;
23322 case 1:
23323 opt_ie_cnt = 1;
23324 break;
23325 case 2:
23326 opt_ie_cnt = 2;
23327 break;
23328 case 3:
23329 opt_ie_cnt = 4;
23330 break;
23331 case 4:
23332 opt_ie_cnt = 8;
23333 break;
23334 default:
23335 opt_ie_cnt = 1; /* Add an expert info here ... */
23336 break;
23337 }
23338 for (i = 0; i < opt_ie_cnt; i++) {
23339 proto_tree *psd_tree;
23340 psd_tree = proto_tree_add_subtree_format(tree, tvb, offset, 1,
23341 ett_tpe_psd, NULL((void*)0),
23342 "20 MHz Channel #%u", i);
23343 proto_tree_add_item(psd_tree, hf_ieee80211_vht_tpe_psd,
23344 tvb, offset, 1, ENC_NA0x00000000);
23345 offset += 1;
23346 }
23347 /* Extension Max Tx Power */
23348 if (offset < tag_len) {
23349 proto_tree *psd_tree;
23350 uint8_t j;
23351 uint8_t ext_cnt = tvb_get_uint8(tvb, offset) & 0x0f;
23352
23353 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_ext_count, tvb, offset, 1, ENC_NA0x00000000);
23354 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_ext_reserved, tvb, offset, 1, ENC_NA0x00000000);
23355 offset += 1;
23356 for (j = 0; j < ext_cnt; j++) {
23357 psd_tree = proto_tree_add_subtree_format(tree, tvb, offset, 1,
23358 ett_tpe_psd, NULL((void*)0),
23359 "20 MHz Channel #%u", i+j);
23360 proto_tree_add_item(psd_tree, hf_ieee80211_vht_tpe_psd,
23361 tvb, offset, 1, ENC_NA0x00000000);
23362 offset += 1;
23363 }
23364 }
23365 break;
23366
23367 case 0:
23368 case 2:
23369 case 4:
23370 /* Power Constraint info is mandatory only for 20MHz, others are optional*/
23371 /* Power is expressed in terms of 0.5dBm from -64 to 63 and is encoded
23372 * as 8-bit 2's complement */
23373 for (i = 0; i <= opt_ie_cnt; i++) {
23374 switch(i) {
23375 case 0:
23376 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_20, tvb, offset, 1, ENC_NA0x00000000);
23377 offset += 1;
23378 break;
23379 case 1:
23380 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_40, tvb, offset, 1, ENC_NA0x00000000);
23381 offset += 1;
23382 break;
23383 case 2:
23384 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_80, tvb, offset, 1, ENC_NA0x00000000);
23385 offset += 1;
23386 break;
23387 case 3:
23388 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_160, tvb, offset, 1, ENC_NA0x00000000);
23389 offset += 1;
23390 break;
23391 default:
23392 expert_add_info(pinfo, ti, &ei_ieee80211_vht_tpe_pwr_info_count);
23393 offset += 1;
23394 break;
23395 }
23396 }
23397 /* Extension Max Tx Power */
23398 if (offset < tag_len) {
23399 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_320, tvb, offset, 1, ENC_NA0x00000000);
23400 offset += 1;
23401 }
23402 break;
23403 default:
23404 /* Reserved in 802.11ax-2021. 802.11be? */
23405 expert_add_info(pinfo, unit_ti, &ei_ieee80211_vht_tpe_pwr_info_unit);
23406 }
23407
23408 return offset;
23409}
23410
23411static int
23412dissect_mobility_domain(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23413{
23414 int tag_len = tvb_reported_length(tvb);
23415 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23416 int offset = 0;
23417
23418 if (field_data->sanity_check != NULL((void*)0)) {
23419 field_data->sanity_check->association_has_mobility_domain_element = true1;
23420 }
23421
23422 if (tag_len < 3) {
23423 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23424 "MDIE content length must be at least 3 bytes");
23425 return 1;
23426 }
23427
23428 save_proto_data(tvb, pinfo, offset, 2, MDID_KEY);
23429 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_mdid,
23430 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23431 proto_tree_add_bitmask_with_flags(tree, tvb, offset + 2,
23432 hf_ieee80211_tag_mobility_domain_ft_capab,
23433 ett_tag_mobility_domain_ft_capab_tree,
23434 ieee80211_tag_mobility_domain_ft_capab_fields,
23435 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23436 return tvb_captured_length(tvb);
23437}
23438
23439static uint16_t get_mic_len_owe(uint16_t group) {
23440 switch(group) {
23441 // FFC, len(p) <= 2048
23442 case 1:
23443 case 2:
23444 case 5:
23445 case 14:
23446 case 22:
23447 case 23:
23448 case 24:
23449 // ECC, len(p) <= 256
23450 case 19:
23451 case 25:
23452 case 26:
23453 case 27:
23454 case 28:
23455 case 31:
23456 // HMAC-SHA-256
23457 return 16;
23458
23459 // FFC, 2048 < len(p) <= 3072
23460 case 15:
23461 // ECC, 256 < len(p) <= 384
23462 case 20:
23463 case 29:
23464 // HMAC-SHA-384
23465 return 24;
23466
23467 // FCC, 3072 < len(p)
23468 case 16:
23469 case 17:
23470 case 18:
23471 // ECC, 384 < len(p)
23472 case 21:
23473 case 30:
23474 case 32:
23475 // HMAC-SHA-512
23476 return 32;
23477
23478 default:
23479 return 16;
23480 }
23481}
23482
23483static uint16_t get_mic_len(uint32_t akm_suite) {
23484 switch(akm_suite) {
23485 case AKMS_WPA_SHA384_SUITEB0x000FAC0C:
23486 case AKMS_FT_IEEE802_1X_SHA3840x000FAC0D:
23487 case AKMS_FT_FILS_SHA3840x000FAC11:
23488 // HMAC-SHA-384
23489 return 24;
23490
23491 case AKMS_FILS_SHA2560x000FAC0E:
23492 case AKMS_FILS_SHA3840x000FAC0F:
23493 // AES-SIV-256 and AES-SIV-512
23494 return 0;
23495
23496 default:
23497 // HMAC-SHA-1-128, AES-128-CMAC, HMAC-SHA-256, AKMS_FT_FILS_SHA256
23498 return 16;
23499 }
23500}
23501
23502static conversation_t *find_wlan_conversation_pinfo(packet_info *pinfo)
23503{
23504 /* HACK to avoid collision with conversation in EAP dissector */
23505 pinfo->srcport = GPOINTER_TO_UINT(((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, ASSOC_COUNTER_KEY)))
23506 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)))
;
23507 pinfo->destport = pinfo->srcport;
23508 return find_conversation_pinfo(pinfo, 0);
23509}
23510
23511static bool_Bool determine_nonce_is_set(tvbuff_t *tvb) {
23512 int offset;
23513
23514 for (offset = 12; offset < 12 + 32; offset++)
23515 if (tvb_get_uint8(tvb, offset))
23516 return true1;
23517 return false0;
23518}
23519
23520static uint16_t determine_mic_len(packet_info *pinfo, bool_Bool assoc_frame,
23521 bool_Bool *defaulted) {
23522 uint16_t eapol_key_mic_len = 16; /* Default MIC length */
23523 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
23524 ieee80211_conversation_data_t *conversation_data = NULL((void*)0);
23525 ieee80211_packet_data_t *packet_data =
23526 (ieee80211_packet_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, PACKET_DATA_KEY);
23527 if (conversation) {
23528 conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
23529 }
23530
23531 if (wlan_key_mic_len_enable) {
23532 /* 1st - Use user overridden MIC length setting */
23533 eapol_key_mic_len = wlan_key_mic_len;
23534 }
23535 else if (!assoc_frame && conversation_data &&
23536 conversation_data->discovered_key_mic_len) {
23537 /*
23538 * 2nd - Use the discovered key mic len.
23539 * We will only set the discovered key mic len if it was defaulted
23540 * in an earlier call to determine_mic_len, so it should be tested second.
23541 */
23542 eapol_key_mic_len = conversation_data->discovered_key_mic_len;
23543 }
23544 else if (!assoc_frame && conversation_data &&
23545 conversation_data->last_akm_suite_set) {
23546 /* 3rd - Use AKMS negotiated during association to determine MIC length */
23547 if (conversation_data->last_akm_suite == AKMS_OWE0x000FAC12) {
23548 /* For OWE the length of MIC depends on the selected group */
23549 eapol_key_mic_len = get_mic_len_owe(conversation_data->owe_group);
23550 } else if (conversation_data->last_akm_suite == AKMS_SAE_GROUP_DEPEND0x000FAC18 ||
23551 conversation_data->last_akm_suite == AKMS_FT_SAE_GROUP_DEPEND0x000FAC19) {
23552 *defaulted = true1;
23553 }
23554 else {
23555 eapol_key_mic_len = get_mic_len(conversation_data->last_akm_suite);
23556 }
23557 }
23558 else if (packet_data && packet_data->last_akm_suite_set) {
23559 /* 3rd - Use AKMS from current packet to determine MIC length */
23560 if (packet_data->last_akm_suite == AKMS_OWE0x000FAC12) {
23561 /* For OWE the length of MIC depends on the selected group */
23562 eapol_key_mic_len = get_mic_len_owe(packet_data->owe_group);
23563 } else if (packet_data->last_akm_suite == AKMS_SAE_GROUP_DEPEND0x000FAC18 ||
23564 packet_data->last_akm_suite == AKMS_FT_SAE_GROUP_DEPEND0x000FAC19) {
23565 *defaulted = true1;
23566 }
23567 else {
23568 eapol_key_mic_len = get_mic_len(packet_data->last_akm_suite);
23569 }
23570 } else {
23571 /*
23572 * We used the default so say so.
23573 */
23574 *defaulted = true1;
23575 }
23576 return eapol_key_mic_len;
23577}
23578
23579static int
23580dissect_fast_bss_transition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23581{
23582 int tag_len = tvb_reported_length(tvb);
23583 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23584 bool_Bool assoc_frame = field_data->sanity_check != NULL((void*)0);
23585 int offset = 0;
23586 if (tag_len < 82) {
23587 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23588 "FTIE content length must be at least 82 bytes");
23589 return 1;
23590 }
23591
23592 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_ft_mic_control,
23593 ett_tag_ft_mic_control_tree,
23594 ieee80211_tag_ft_mic_control_fields,
23595 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23596 offset += 2;
23597
23598 bool_Bool defaulted_mic_len = false0;
23599 int mic_len = determine_mic_len(pinfo, assoc_frame, &defaulted_mic_len);
23600 save_proto_data(tvb, pinfo, offset, mic_len, FTE_MIC_KEY);
23601 save_proto_data_value(pinfo, mic_len, FTE_MIC_LEN_KEY);
23602 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic,
23603 tvb, offset, mic_len, ENC_NA0x00000000);
23604 offset += mic_len;
23605
23606 save_proto_data(tvb, pinfo, offset, 32, FTE_ANONCE_KEY);
23607 proto_tree_add_item(tree, hf_ieee80211_tag_ft_anonce,
23608 tvb, offset, 32, ENC_NA0x00000000);
23609 offset += 32;
23610
23611 save_proto_data(tvb, pinfo, offset, 32, FTE_SNONCE_KEY);
23612 proto_tree_add_item(tree, hf_ieee80211_tag_ft_snonce,
23613 tvb, offset, 32, ENC_NA0x00000000);
23614 offset += 32;
23615
23616 while (offset + 2 <= tag_len) {
23617 uint8_t id, len;
23618 int s_end;
23619 proto_item *ti;
23620 proto_tree *subtree;
23621 const char *subtree_name;
23622 proto_keydata_t *proto;
23623
23624 id = tvb_get_uint8(tvb, offset);
23625 len = tvb_get_uint8(tvb, offset + 1);
23626 subtree_name = val_to_str_const(id, ft_subelem_id_vals, "Unknown");
23627 subtree = proto_tree_add_subtree_format(tree, tvb, offset, len + 2,
23628 ett_tag_ft_subelem_tree, NULL((void*)0),
23629 "Subelement: %s", subtree_name);
23630
23631 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_id,
23632 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23633 offset += 1;
23634
23635 ti = proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_len,
23636 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23637 offset += 1;
23638
23639 if (offset + len > tag_len) {
23640 expert_add_info_format(pinfo, ti, &ei_ieee80211_tag_length,
23641 "FTIE subelement length is too large for the FTIE content length");
23642 return offset;
23643 }
23644
23645 s_end = offset + len;
23646 switch (id) {
23647 case 1:
23648 save_proto_data(tvb, pinfo, offset, len, FTE_R1KH_ID_KEY);
23649 save_proto_data_value(pinfo, len, FTE_R1KH_ID_LEN_KEY);
23650 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_r1kh_id,
23651 tvb, offset, len, ENC_NA0x00000000);
23652 break;
23653 case 2:
23654 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_info,
23655 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23656 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_id,
23657 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23658 offset += 2;
23659 if (offset > s_end)
23660 break;
23661 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset), GTK_SUBELEM_KEY_LEN_KEY);
23662 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_length,
23663 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23664 offset += 1;
23665 if (offset > s_end)
23666 break;
23667 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_rsc,
23668 tvb, offset, 8, ENC_NA0x00000000);
23669 offset += 8;
23670 if (offset > s_end)
23671 break;
23672 save_proto_data_value(pinfo, s_end - offset, GTK_LEN_KEY);
23673 save_proto_data(tvb, pinfo, offset, s_end - offset, GTK_KEY);
23674
23675 proto = (proto_keydata_t *)
23676 p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_GTK_KEY);
23677 if (proto) {
23678 unsigned keydata_len = proto->keydata_len;
23679 tvbuff_t *next_tvb = tvb_new_child_real_data(tvb, proto->keydata,
23680 keydata_len, keydata_len);
23681 add_new_data_source(pinfo, next_tvb, "Decrypted GTK");
23682 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key,
23683 next_tvb, 0, keydata_len, ENC_NA0x00000000);
23684 add_ptk_analysis(tvb, subtree, &proto->used_key);
23685 } else {
23686 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_encrypted,
23687 tvb, offset, s_end - offset, ENC_NA0x00000000);
23688 }
23689 break;
23690 case 3:
23691 save_proto_data(tvb, pinfo, offset, len, FTE_R0KH_ID_KEY);
23692 save_proto_data_value(pinfo, len, FTE_R0KH_ID_LEN_KEY);
23693 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_r0kh_id,
23694 tvb, offset, len, ENC_NA0x00000000);
23695 break;
23696 case 4:
23697 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_key_id,
23698 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23699 offset += 2;
23700 if (offset > s_end)
23701 break;
23702 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_ipn,
23703 tvb, offset, 6, ENC_NA0x00000000);
23704 offset += 6;
23705 if (offset > s_end)
23706 break;
23707 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_key_length,
23708 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23709 offset += 1;
23710 if (offset > s_end)
23711 break;
23712 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_key,
23713 tvb, offset, 24, ENC_NA0x00000000);
23714 break;
23715 case 5:
23716 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_op_class,
23717 tvb, offset, 1, ENC_NA0x00000000);
23718 offset += 1;
23719 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_prim_chan_num,
23720 tvb, offset, 1, ENC_NA0x00000000);
23721 offset += 1;
23722 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_freq_seg_1,
23723 tvb, offset, 1, ENC_NA0x00000000);
23724 offset += 1;
23725 if (offset >= s_end)
23726 break;
23727 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_oct_op_class,
23728 tvb, offset, 1, ENC_NA0x00000000);
23729 offset += 1;
23730 if (offset >= s_end)
23731 break;
23732 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_oct_prim_chan_num,
23733 tvb, offset, 1, ENC_NA0x00000000);
23734 offset += 1;
23735 if (offset >= s_end)
23736 break;
23737 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_oct_freq_seg_1,
23738 tvb, offset, 1, ENC_NA0x00000000);
23739 break;
23740 case 6:
23741 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_key_id,
23742 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23743 offset += 2;
23744 if (offset > s_end)
23745 break;
23746 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_bipn,
23747 tvb, offset, 6, ENC_NA0x00000000);
23748 offset += 6;
23749 if (offset > s_end)
23750 break;
23751 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_key_length,
23752 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23753 offset += 1;
23754 if (offset > s_end)
23755 break;
23756 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_key,
23757 tvb, offset, s_end - offset, ENC_NA0x00000000);
23758 break;
23759 case 8: /* MLO GTK */
23760 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key_info,
23761 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23762 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key_id,
23763 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23764 offset += 2;
23765 if (offset > s_end)
23766 break;
23767 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id_info,
23768 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23769 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id,
23770 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23771 offset += 1;
23772 if (offset > s_end)
23773 break;
23774 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key_length,
23775 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23776 offset += 1;
23777 if (offset > s_end)
23778 break;
23779 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_rsc,
23780 tvb, offset, 8, ENC_NA0x00000000);
23781 offset += 8;
23782 if (offset > s_end)
23783 break;
23784 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key,
23785 tvb, offset, s_end - offset, ENC_NA0x00000000);
23786 break;
23787 case 9: /* MLO IGTK */
23788 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_key_id,
23789 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23790 offset += 2;
23791 if (offset > s_end)
23792 break;
23793 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_ipn,
23794 tvb, offset, 6, ENC_NA0x00000000);
23795 offset += 6;
23796 if (offset > s_end)
23797 break;
23798 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id_info,
23799 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23800 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id,
23801 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23802 offset += 1;
23803 if (offset > s_end)
23804 break;
23805 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_key_length,
23806 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23807 offset += 1;
23808 if (offset > s_end)
23809 break;
23810 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_key,
23811 tvb, offset, s_end - offset, ENC_NA0x00000000);
23812 break;
23813 case 10: /* MLO BIGTK */
23814 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_id,
23815 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23816 offset += 2;
23817 if (offset > s_end)
23818 break;
23819 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_bipn,
23820 tvb, offset, 6, ENC_NA0x00000000);
23821 offset += 6;
23822 if (offset > s_end)
23823 break;
23824 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id_info,
23825 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23826 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id,
23827 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23828 offset += 1;
23829 if (offset > s_end)
23830 break;
23831 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_length,
23832 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23833 offset += 1;
23834 if (offset > s_end)
23835 break;
23836 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_key,
23837 tvb, offset, s_end - offset, ENC_NA0x00000000);
23838 break;
23839 default:
23840 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_data,
23841 tvb, offset, len, ENC_NA0x00000000);
23842 break;
23843 }
23844 offset = s_end;
23845 }
23846
23847 return tvb_captured_length(tvb);
23848}
23849
23850static int
23851dissect_mmie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23852{
23853 int tag_len = tvb_reported_length(tvb);
23854 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23855 int offset = 0;
23856 int mic_len = 8;
23857
23858 if (!(tag_len == 16 || tag_len == 24)) {
23859 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23860 "MMIE content length must be 16 or 24 bytes");
23861 return 1;
23862 }
23863
23864 if (tag_len == 24) {
23865 mic_len = 16;
23866 }
23867 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_keyid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23868 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_ipn, tvb, offset + 2, 6,
23869 ENC_LITTLE_ENDIAN0x80000000);
23870 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_mic, tvb, offset + 8, mic_len,
23871 ENC_NA0x00000000);
23872 return tvb_captured_length(tvb);
23873}
23874
23875static int
23876ieee80211_tag_dmg_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data);
23877
23878static int
23879dissect_no_bssid_capability(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data)
23880{
23881 int tag_len = tvb_reported_length(tvb);
23882 int offset = 0;
23883
23884 static int * const ieee80211_tag_no_bssid_capability_dmg_bss_control[] = {
23885 &hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_type,
23886 &hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_reserved,
23887 NULL((void*)0)
23888 };
23889
23890 add_ff_cap_info(tree, tvb, pinfo, offset);
23891 offset += 2;
23892 tag_len -= 2;
23893
23894 /* On nontransmitted BSSID, there is only DMG Capability Info */
23895 if (tag_len) {
23896 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_no_bssid_capability_dmg_bss_control,
23897 ett_tag_no_bssid_capability_dmg_bss_control_tree,
23898 ieee80211_tag_no_bssid_capability_dmg_bss_control,
23899 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23900 /* offset += 1; */
23901
23902 ieee80211_tag_dmg_capabilities(tvb, pinfo, tree, data);
23903 }
23904
23905 return tvb_captured_length(tvb);
23906}
23907
23908static int
23909dissect_ssid_list(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
23910{
23911 int tag_len = tvb_reported_length(tvb);
23912 int offset = 0;
23913 proto_tree *entry;
23914 bool_Bool first = true1;
23915
23916 while (offset + 1 <= tag_len) {
23917 uint8_t len = tvb_get_uint8(tvb, offset + 1);
23918 char *str;
23919
23920 if (offset + 2 + len > tag_len)
23921 break;
23922
23923 str = tvb_format_text(pinfo->pool, tvb, offset + 2, len);
23924 proto_item_append_text(tree, "%c %s", (first ? ':' : ','), str);
23925 first = false0;
23926 entry = proto_tree_add_subtree_format(tree, tvb, offset, 2 + len, ett_ssid_list, NULL((void*)0), "SSID: %s", str);
23927 proto_tree_add_item(entry, hf_ieee80211_tag_number, tvb, offset, 1,
23928 ENC_LITTLE_ENDIAN0x80000000);
23929 offset++;
23930 proto_tree_add_uint(entry, hf_ieee80211_tag_length, tvb, offset, 1, len);
23931 offset++;
23932 /* XXX: IEEE 802.11-2020 seems to say that these SSIDs are also affected
23933 * by the UTF-8 Encoding bit in the Extended Capabilities element
23934 * (though at least SSID List comes after Extended Capabilities).
23935 */
23936 proto_tree_add_item(entry, hf_ieee80211_tag_ssid, tvb, offset, len,
23937 ENC_NA0x00000000);
23938 offset += len;
23939 }
23940
23941 return tvb_captured_length(tvb);
23942}
23943
23944static int
23945dissect_multiple_bssid_index(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
23946{
23947 int tag_len = tvb_reported_length(tvb);
23948 int offset = 0;
23949
23950 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid_index_bssid_index, tvb, offset, 1, ENC_NA0x00000000);
23951 offset += 1;
23952 tag_len -= 1;
23953
23954 if (tag_len) {
23955 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid_index_dtim_period, tvb, offset, 1, ENC_NA0x00000000);
23956 offset += 1;
23957
23958 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid_index_dtim_count, tvb, offset, 1, ENC_NA0x00000000);
23959 offset += 1;
23960 }
23961
23962 return offset;
23963}
23964
23965static int
23966dissect_link_identifier(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23967{
23968 int tag_len = tvb_reported_length(tvb);
23969 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23970 int offset = 0;
23971
23972 if (tag_len < 18) {
23973 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23974 "Link Identifier content length must be at least "
23975 "18 bytes");
23976 return tvb_captured_length(tvb);
23977 }
23978
23979 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_bssid, tvb,
23980 offset, 6, ENC_NA0x00000000);
23981 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_init_sta, tvb,
23982 offset + 6, 6, ENC_NA0x00000000);
23983 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_resp_sta, tvb,
23984 offset + 12, 6, ENC_NA0x00000000);
23985 return tvb_captured_length(tvb);
23986}
23987
23988static int
23989dissect_wakeup_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23990{
23991 int tag_len = tvb_reported_length(tvb);
23992 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23993 int offset = 0;
23994
23995 if (tag_len < 18) {
23996 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23997 "Wakeup Schedule content length must be at least "
23998 "18 bytes");
23999 return tvb_captured_length(tvb);
24000 }
24001
24002 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_offset, tvb,
24003 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
24004 offset += 4;
24005
24006 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_interval, tvb,
24007 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
24008 offset += 4;
24009
24010 proto_tree_add_item(tree,
24011 hf_ieee80211_tag_wakeup_schedule_awake_window_slots, tvb,
24012 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
24013 offset += 4;
24014
24015 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
24016 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
24017 offset += 4;
24018
24019 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_idle_count, tvb,
24020 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24021 return tvb_captured_length(tvb);
24022}
24023
24024static int
24025dissect_channel_switch_timing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24026{
24027 int tag_len = tvb_reported_length(tvb);
24028 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24029 int offset = 0;
24030
24031 if (tag_len < 4) {
24032 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24033 "Channel Switch Timing content length must be at "
24034 "least 4 bytes");
24035 return tvb_captured_length(tvb);
24036 }
24037
24038 proto_tree_add_item(tree, hf_ieee80211_tag_channel_switch_timing_switch_time,
24039 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24040 offset += 2;
24041
24042 proto_tree_add_item(tree,
24043 hf_ieee80211_tag_channel_switch_timing_switch_timeout,
24044 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24045 return tvb_captured_length(tvb);
24046}
24047
24048static int
24049dissect_pti_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24050{
24051 int tag_len = tvb_reported_length(tvb);
24052 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24053 int offset = 0;
24054
24055 if (tag_len < 3) {
24056 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "PTI Control content length must be at least 3 bytes");
24057 return tvb_captured_length(tvb);
24058 }
24059
24060 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_tid, tvb,
24061 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24062 offset += 1;
24063
24064 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_sequence_control, tvb,
24065 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24066 return tvb_captured_length(tvb);
24067}
24068
24069static int
24070dissect_pu_buffer_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24071{
24072 int tag_len = tvb_reported_length(tvb);
24073 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24074 int offset = 0;
24075 static int * const ieee80211_pu_buffer_status[] = {
24076 &hf_ieee80211_tag_pu_buffer_status_ac_bk,
24077 &hf_ieee80211_tag_pu_buffer_status_ac_be,
24078 &hf_ieee80211_tag_pu_buffer_status_ac_vi,
24079 &hf_ieee80211_tag_pu_buffer_status_ac_vo,
24080 NULL((void*)0)
24081 };
24082
24083 if (tag_len < 1) {
24084 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");
24085 return tvb_captured_length(tvb);
24086 }
24087
24088 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_pu_buffer_status, ENC_LITTLE_ENDIAN0x80000000);
24089 return tvb_captured_length(tvb);
24090}
24091
24092static int
24093dissect_timeout_interval(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
24094{
24095 int tag_len = tvb_reported_length(tvb);
24096 int offset = 0;
24097 proto_item *pi;
24098
24099 pi = proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_type, tvb,
24100 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24101 if (tag_len < 5) {
24102 expert_add_info_format(pinfo, pi, &ei_ieee80211_tag_length,
24103 "Timeout Interval content length must be at least "
24104 "5 bytes");
24105 return 1;
24106 }
24107
24108 proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_value, tvb,
24109 offset + 1, 4, ENC_LITTLE_ENDIAN0x80000000);
24110 return tvb_captured_length(tvb);
24111}
24112
24113static int
24114dissect_ric_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24115{
24116 int tag_len = tvb_reported_length(tvb);
24117 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24118 int offset = 0;
24119 proto_tree *sub_tree;
24120 uint8_t desc_cnt = 0;
24121 uint32_t next_ie;
24122 int offset_r = 0;
24123 const uint8_t ids[] = { TAG_RIC_DESCRIPTOR75 };
24124
24125 if (tag_len != 4) {
24126 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24127 "RIC Data Length must be 4 bytes");
24128 return 0;
24129 }
24130
24131 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_id, tvb,
24132 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24133 offset += 1;
24134
24135 desc_cnt = tvb_get_uint8(tvb, offset);
24136 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_desc_cnt, tvb,
24137 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24138 offset += 1;
24139
24140 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_status_code, tvb,
24141 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24142 offset += 2;
24143
24144 /* Our Design is such that all the Resource request IE's part of the RIC
24145 * must be in the sub tree of RIC for better readability
24146 * Even omnipeek does the same way.
24147 */
24148 sub_tree = proto_item_add_subtree(tree, ett_tag_ric_data_desc_ie);
24149
24150 proto_item_append_text(field_data->item_tag, " :Resource Descriptor List");
24151 if (desc_cnt == 0) {
24152 proto_item_append_text(field_data->item_tag, " :0 (Weird?)");
24153 }
24154
24155 while ( desc_cnt != 0 ) {
24156
24157 next_ie = tvb_get_uint8(tvb, offset);
24158 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)"));
24159 /* Recursive call to avoid duplication of code*/
24160 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));
24161 if (offset_r == 0 )/* should never happen, returns a min of 2*/
24162 break;
24163 /* This will ensure that the IE after RIC is processed
24164 * only once. This gives us a good looking RIC IE :-)
24165 */
24166 tag_len += offset_r;
24167 desc_cnt--;
24168 }
24169
24170 return tvb_captured_length(tvb);
24171}
24172
24173/* Overlapping BSS Scan Parameters (74) */
24174static int
24175dissect_overlap_bss_scan_par(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24176{
24177 int offset = 0;
24178 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24179 int tag_len = tvb_reported_length(tvb);
24180
24181 if (tag_len != 14) {
24182 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24183 "OBSS Length must be 14 bytes");
24184 return 1;
24185 }
24186
24187 proto_tree_add_item(tree, hf_ieee80211_tag_obss_spd, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24188 offset += 2;
24189
24190 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sad, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24191 offset += 2;
24192
24193 proto_tree_add_item(tree, hf_ieee80211_tag_obss_cwtsi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24194 offset += 2;
24195
24196 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sptpc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24197 offset += 2;
24198
24199 proto_tree_add_item(tree, hf_ieee80211_tag_obss_satpc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24200 offset += 2;
24201
24202 proto_tree_add_item(tree, hf_ieee80211_tag_obss_wctdf, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24203 offset += 2;
24204
24205 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sat, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24206 offset += 2;
24207
24208 return offset;
24209}
24210
24211/* RIC Descriptor (75) */
24212static int
24213dissect_ric_descriptor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24214{
24215 int offset = 0;
24216 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24217 int tag_len = tvb_reported_length(tvb);
24218 uint8_t rsrc_type = 0;
24219
24220 if (tag_len < 1) {
24221 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24222 "RIC Data Length must be at least 1 byte");
24223 return 1;
24224 }
24225
24226 rsrc_type = tvb_get_uint8(tvb, offset);
24227 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_rsrc_type, tvb,
24228 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24229 offset += 1;
24230
24231 if (rsrc_type == 1) {
24232 /* Block ACK params
24233 * 802.11-2012: 8.4.2.53 RIC Descriptor element
24234 * Block Ack parameter set as defined in 8.4.1.14,
24235 * Block Ack timeout value as defined in 8.4.1.15, and
24236 * Block Ack starting sequence control as defined in 8.3.1.8
24237 */
24238 /* TODO: Still figuring out how to parse these ones,
24239 * need a sample capture with at least HEX Dump
24240 */
24241 proto_item_append_text(field_data->item_tag, " : Block ACK Params");
24242 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_var_params, tvb,
24243 offset, tag_len-1, ENC_NA0x00000000);
24244 offset += tag_len -1;
24245 }else {
24246 /* 0, 2-255 are reserved*/
24247 proto_item_append_text(field_data->item_tag, " :Reserved (type != 1)");
24248 }
24249
24250 return offset;
24251}
24252
24253static int
24254dissect_ext_bss_load(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24255{
24256 int offset = 0;
24257 proto_tree_add_item(tree, hf_ieee80211_ext_bss_mu_mimo_capable_sta_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24258 offset += 2;
24259 proto_tree_add_item(tree, hf_ieee80211_ext_bss_ss_underutilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24260 offset += 1;
24261 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_20mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24262 offset += 1;
24263 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_40mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24264 offset += 1;
24265 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_80mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24266 offset += 1;
24267
24268 return offset;
24269}
24270
24271static int
24272dissect_wide_bw_channel_switch(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24273{
24274 int offset = 0;
24275
24276 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24277 offset += 1;
24278 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment0, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24279 offset += 1;
24280 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment1, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24281 offset += 1;
24282
24283 return offset;
24284}
24285
24286static int
24287dissect_channel_switch_wrapper(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24288{
24289 int tag_len = tvb_reported_length(tvb);
24290 int offset = 0;
24291 int tmp_sublen;
24292 const uint8_t ids[] = { TAG_COUNTRY_INFO7, TAG_WIDE_BW_CHANNEL_SWITCH194,
24293 TAG_TX_PWR_ENVELOPE195 };
24294 const uint8_t ext_ids[] = {ETAG_BANDWIDTH_INDICATION135};
24295
24296 /*
24297 Decode three subelement in IE-196(Channel Switch Wrapper element):
24298 (1) New Country subelement
24299 (2) Wide Bandwidth Channel Switch subelement
24300 (3) New VHT Transmit Power Envelope subelement
24301 (4) Bandwidth Indication subelement
24302 */
24303 while (tag_len > 0){
24304 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
24305 if (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, ids,
24306 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) {
24307 break;
24308 }
24309 tag_len -= (tmp_sublen + 2);
24310 offset += (tmp_sublen + 2);
24311 }
24312 return offset;
24313}
24314
24315static int
24316dissect_operating_mode_notification(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24317{
24318 int offset = 0;
24319 static int * const ieee80211_operat_mode_field[] = {
24320 &hf_ieee80211_operat_mode_field_channel_width,
24321 &hf_ieee80211_operat_mode_field_160_80plus80_bw,
24322 &hf_ieee80211_operat_mode_field_no_ldpc,
24323 &hf_ieee80211_operat_mode_field_rxnss,
24324 &hf_ieee80211_operat_mode_field_rxnsstype,
24325 NULL((void*)0)
24326 };
24327
24328 /* Operating Mode field */
24329 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_operat_notification_mode,
24330 ett_mcsbit_tree, ieee80211_operat_mode_field,
24331 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24332 offset += 1;
24333 return offset;
24334}
24335
24336static const range_string tbtt_info_length[] = {
24337 { 0, 0, "Reserved" },
24338 { 1, 1, "Neighbor AP TBTT Offset subfield" },
24339 { 2, 2, "Neighbor AP TBTT Offset subfield and the BSS Parameters subfield" },
24340 { 3, 4, "Reserved" },
24341 { 5, 5, "Neighbor AP TBTT Offset subfield and the Short-SSID subfield" },
24342 { 6, 6, "Neighbor AP TBTT offset subfield, the Short SSID subfield and the BSS Parameters subfield" },
24343 { 7, 7, "Neighbor AP TBTT Offset subfield and the BSSID subfield" },
24344 { 8, 8, "Neighbor AP TBTT Offset subfield, the BSSID subfield and the BSS Parameters subfield" },
24345 { 9, 9, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the BSS Parameters subfield and the 20 MHz PSD subfield" },
24346 { 10, 10, "Reserved" },
24347 { 11, 11, "Neighbor AP TBTT Offset subfield, the BSSID subfield and the Short-SSID subfield" },
24348 { 12, 12, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the Short SSID subfield and the BSS Parameters subfield" },
24349 { 13, 13, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the Short SSID subfield, the BSS Parameters subfield and the 20 MHz PSD subfield" },
24350 { 14, 15, "Reserved" },
24351 { 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" },
24352 { 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"},
24353 { 0, 0, NULL((void*)0) }
24354};
24355
24356static int * const bss_params_headers[] = {
24357 &hf_ieee80211_rnr_oct_recommended,
24358 &hf_ieee80211_rnr_same_ssid,
24359 &hf_ieee80211_rnr_multiple_bssid,
24360 &hf_ieee80211_rnr_transmitted_bssid,
24361 &hf_ieee80211_rnr_ess_with_colocated_ap,
24362 &hf_ieee80211_rnr_unsolicited_probe_responses,
24363 &hf_ieee80211_rnr_same_colocated_ap,
24364 &hf_ieee80211_rnr_same_reserved,
24365 NULL((void*)0)
24366};
24367
24368static int * const mld_params_headers[] = {
24369 &hf_ieee80211_rnr_mld_id,
24370 &hf_ieee80211_rnr_mld_link_id,
24371 &hf_ieee80211_rnr_mld_bss_params_change_count,
24372 &hf_ieee80211_rnr_mld_all_updates_included,
24373 &hf_ieee80211_rnr_mld_disabled_link_indication,
24374 &hf_ieee80211_rnr_mld_reserved,
24375 NULL((void*)0)
24376};
24377
24378static int
24379dissect_neighbor_ap_info(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
24380 int offset)
24381{
24382 uint16_t tbtt_info_h;
24383 uint16_t tbtt_info_len;
24384 uint16_t tbtt_info_count;
24385 uint16_t len_remain = 0;
24386 int i = 0;
24387 bool_Bool display_tbtt_offset = false0;
24388 bool_Bool display_bssid_subfield = false0;
24389 bool_Bool display_short_bssid_subfield = false0;
24390 bool_Bool display_bss_parameters_subfield = false0;
24391 bool_Bool display_20mhz_psd_subfield = false0;
24392 bool_Bool display_mld_params_subfield = false0;
24393 bool_Bool display_reserved = false0;
24394
24395 proto_item *item;
24396 proto_tree *query;
24397
24398 tbtt_info_h = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
24399 tbtt_info_len = TBTT_INFO_LENGTH(tbtt_info_h)(((tbtt_info_h) & (0xff<<8)) >> 8);
24400 tbtt_info_count = TBTT_INFO_COUNT(tbtt_info_h)(((tbtt_info_h) & (0xf<<4)) >> 4);
24401 switch(tbtt_info_len) {
24402 case 0: case 3: case 4: case 10: case 14: case 15:
24403 /* Reserved cases */
24404 display_reserved = true1;
24405 len_remain = tbtt_info_len;
24406 break;
24407 case 1:
24408 display_tbtt_offset = true1;
24409 break;
24410 case 2:
24411 display_tbtt_offset = true1;
24412 display_bss_parameters_subfield = true1;
24413 break;
24414 case 5:
24415 display_tbtt_offset = true1;
24416 display_short_bssid_subfield = true1;
24417 break;
24418 case 6:
24419 display_tbtt_offset = true1;
24420 display_short_bssid_subfield = true1;
24421 display_bss_parameters_subfield = true1;
24422 break;
24423 case 7:
24424 display_tbtt_offset = true1;
24425 display_bssid_subfield = true1;
24426 break;
24427 case 8:
24428 display_tbtt_offset = true1;
24429 display_bssid_subfield = true1;
24430 display_bss_parameters_subfield = true1;
24431 break;
24432 case 9:
24433 display_tbtt_offset = true1;
24434 display_bssid_subfield = true1;
24435 display_bss_parameters_subfield = true1;
24436 display_20mhz_psd_subfield = true1;
24437 break;
24438 case 11:
24439 display_tbtt_offset = true1;
24440 display_bssid_subfield = true1;
24441 display_short_bssid_subfield = true1;
24442 break;
24443 case 12:
24444 display_tbtt_offset = true1;
24445 display_bssid_subfield = true1;
24446 display_short_bssid_subfield = true1;
24447 display_bss_parameters_subfield = true1;
24448 break;
24449 case 13:
24450 display_tbtt_offset = true1;
24451 display_bssid_subfield = true1;
24452 display_short_bssid_subfield = true1;
24453 display_bss_parameters_subfield = true1;
24454 display_20mhz_psd_subfield = true1;
24455 break;
24456 case 16: /* EHT stuff */
24457 display_tbtt_offset = true1;
24458 display_bssid_subfield = true1;
24459 display_short_bssid_subfield = true1;
24460 display_bss_parameters_subfield = true1;
24461 display_20mhz_psd_subfield = true1;
24462 display_mld_params_subfield = true1;
24463 break;
24464 default: /* 17- 255: Same as 16 but the remaining bytes are reserved. */
24465 display_tbtt_offset = true1;
24466 display_bssid_subfield = true1;
24467 display_short_bssid_subfield = true1;
24468 display_bss_parameters_subfield = true1;
24469 display_20mhz_psd_subfield = true1;
24470 display_mld_params_subfield = true1;
24471 display_reserved = true1;
24472 len_remain = tbtt_info_len - 16;
24473 break;
24474 }
24475
24476 proto_tree_add_item(tree, hf_ieee80211_tbtt_info, tvb, offset, 2,
24477 ENC_LITTLE_ENDIAN0x80000000);
24478 proto_tree_add_item(tree, hf_ieee80211_tbtt_filtered_nap, tvb, offset, 2,
24479 ENC_LITTLE_ENDIAN0x80000000);
24480 item = proto_tree_add_item(tree, hf_ieee80211_tbtt_info_count, tvb, offset, 2,
24481 ENC_LITTLE_ENDIAN0x80000000);
24482 proto_tree_add_item(tree, hf_ieee80211_tbtt_info_length, tvb, offset, 2,
24483 ENC_LITTLE_ENDIAN0x80000000);
24484 offset+=2;
24485
24486 proto_tree_add_item(tree, hf_ieee80211_tbtt_operating_class, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24487 offset+=1;
24488 proto_tree_add_item(tree, hf_ieee80211_tbtt_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24489 offset+=1;
24490
24491 for (i=0; i < tbtt_info_count + 1; i++) {
24492 query = proto_tree_add_subtree(tree, tvb, offset, tbtt_info_len,
24493 ett_tbtt_infos, &item, "TBTT Information");
24494
24495 if (display_tbtt_offset) {
24496 proto_tree_add_item(query, hf_ieee80211_tbtt_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24497 offset+=1;
24498 }
24499 if (display_bssid_subfield) {
24500 proto_tree_add_item(query, hf_ieee80211_tbtt_bssid, tvb, offset, 6, ENC_NA0x00000000);
24501 offset+=6;
24502 }
24503 if (display_short_bssid_subfield) {
24504 proto_tree_add_item(query, hf_ieee80211_tbtt_short_ssid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
24505 offset+=4;
24506 }
24507 if (display_bss_parameters_subfield) {
24508
24509 proto_tree_add_bitmask_with_flags(query, tvb, offset,
24510 hf_ieee80211_rnr_bss_params,
24511 ett_rnr_bss_params_tree,
24512 bss_params_headers,
24513 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24514 offset += 1;
24515 }
24516 if (display_20mhz_psd_subfield) {
24517 proto_tree_add_item(query, hf_ieee80211_rnr_20mhz_psd_subfield, tvb,
24518 offset, 1, ENC_NA0x00000000);
24519 offset += 1;
24520 }
24521 if (display_mld_params_subfield) {
24522
24523 proto_tree_add_bitmask_with_flags(query, tvb, offset,
24524 hf_ieee80211_rnr_mld_params,
24525 ett_rnr_mld_params_tree,
24526 mld_params_headers,
24527 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24528 offset += 3;
24529 }
24530 if (display_reserved) {
24531 proto_tree_add_item(query, hf_ieee80211_rnr_reserved_data, tvb, offset,
24532 len_remain, ENC_NA0x00000000);
24533 }
24534
24535 offset += len_remain;
24536 }
24537
24538 return offset;
24539}
24540
24541static int
24542dissect_reduced_neighbor_report(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24543{
24544 int offset = 0;
24545
24546 while (tvb_reported_length_remaining(tvb, offset)) {
24547 int start_offset;
24548 proto_tree *neighbor_ap_info = NULL((void*)0);
24549 proto_item *naii = NULL((void*)0);
24550
24551 start_offset = offset;
24552 neighbor_ap_info = proto_tree_add_subtree(tree, tvb, offset, -1,
24553 ett_neighbor_ap_info, &naii,
24554 "Neighbor AP Information");
24555 offset = dissect_neighbor_ap_info(tvb, pinfo, neighbor_ap_info, offset);
24556
24557 proto_item_set_len(naii, offset - start_offset);
24558 }
24559
24560 return tvb_reported_length(tvb);
24561}
24562
24563static const value_string s1g_supported_channel_width_vals[] = {
24564 { 0, "STA supports 1MHz and 2MHz operation" },
24565 { 1, "STA supports 1MHz, 2MHz and 4MHz operation" },
24566 { 2, "STA supports 1MHz, 2MHz, 4MHz and 8MHz operation" },
24567 { 3, "STA supports 1MHz, 2MHz, 4MHz, 8MHz and 16MHz operation" },
24568 { 0, NULL((void*)0) }
24569};
24570
24571static const value_string s1g_traveling_pilot_support_vals[] = {
24572 { 0, "Traveling Pilot Support not activated" },
24573 { 1, "Traveling Pilot Support activated for only one space-time stream" },
24574 { 2, "Reserved" },
24575 { 3, "Traveling Pilot Support activated for one and two space-time streams" },
24576 { 0, NULL((void*)0) }
24577};
24578
24579static const value_string s1g_max_mpdu_length_vals[] = {
24580 { 0, "3895" },
24581 { 1, "7991" },
24582 { 0, NULL((void*)0) }
24583};
24584
24585static const value_string s1g_min_mpdu_start_spacing_vals[] = {
24586 { 0, "No restriction" },
24587 { 1, "1/4 uS" },
24588 { 2, "1/2 uS" },
24589 { 3, "1 uS" },
24590 { 4, "2 uS" },
24591 { 5, "4 uS" },
24592 { 6, "8 uS" },
24593 { 7, "16 uS" },
24594 { 0, NULL((void*)0) }
24595};
24596
24597static const value_string s1g_sta_type_support_vals[] = {
24598 { 0, "AP-Only. Supports sensor and non-sensor STAs." },
24599 { 1, "AP supports only sensor STAs. STA is a sensor STA." },
24600 { 2, "AP supports only non-sensor STAs. STA is a non-sensor STA" },
24601 { 3, "Reserved" },
24602 { 0, NULL((void*)0) }
24603};
24604
24605static const value_string s1g_sectorized_beam_capable_vals[] = {
24606 { 0, "AP or non-AP: Not supported" },
24607 { 1, "AP: TXOP-based sectorization only. Non-AP: Both group and TXOP" },
24608 { 2, "AP: Group sectorization only. Non-AP: Reserved" },
24609 { 3, "AP: Both group and TXOP sectorization. Non-AP: Reserved" },
24610 { 0, NULL((void*)0) }
24611};
24612
24613static const value_string s1g_vht_link_adaptation_vals[] = {
24614 { 0, "STA does not provide VHT MFB" },
24615 { 1, "Reserved" },
24616 { 2, "STA can only provide unsolicited VHT MFB" },
24617 { 3, "STA can provide unsolicited and solicited VHT MFB" },
24618 { 0, NULL((void*)0) }
24619};
24620
24621#if 0
24622static const value_string s1g_mcs_map[] = {
24623 { 0, "Support for S1G-MCS 2 for n spatial streams" },
24624 { 1, "Support for S1G-MCS 7 for n spatial streamS" },
24625 { 2, "Support for S1G-MCS 9 for n spatial streams" },
24626 { 3, "n spatial streams not supported" },
24627 { 0, NULL((void*)0) }
24628};
24629#endif
24630
24631static int * const ieee80211_s1g_cap_byte1[] = {
24632 &hf_ieee80211_s1g_cap_s1g_long_support,
24633 &hf_ieee80211_s1g_cap_short_gi_for_1_mhz,
24634 &hf_ieee80211_s1g_cap_short_gi_for_2_mhz,
24635 &hf_ieee80211_s1g_cap_short_gi_for_4_mhz,
24636 &hf_ieee80211_s1g_cap_short_gi_for_8_mhz,
24637 &hf_ieee80211_s1g_cap_short_gi_for_16_mhz,
24638 &hf_ieee80211_s1g_cap_supported_channel_width,
24639 NULL((void*)0)
24640};
24641
24642static int * const ieee80211_s1g_cap_byte2[] = {
24643 &hf_ieee80211_s1g_cap_rx_ldpc,
24644 &hf_ieee80211_s1g_cap_tx_stbc,
24645 &hf_ieee80211_s1g_cap_rx_stbc,
24646 &hf_ieee80211_s1g_cap_su_beamformer_capable,
24647 &hf_ieee80211_s1g_cap_su_beamformee_capable,
24648 &hf_ieee80211_s1g_cap_beamformee_sts_capability, /* Needs global */
24649 NULL((void*)0)
24650};
24651
24652static int * const ieee80211_s1g_cap_byte3[] = {
24653 &hf_ieee80211_s1g_cap_number_sounding_dimensions,
24654 &hf_ieee80211_s1g_cap_mu_beamformer_capable,
24655 &hf_ieee80211_s1g_cap_mu_beamformee_capable,
24656 &hf_ieee80211_s1g_cap_htc_vht_capable,
24657 &hf_ieee80211_s1g_cap_travelling_pilot_support,
24658 NULL((void*)0)
24659};
24660
24661static int * const ieee80211_s1g_cap_byte4[] = {
24662 &hf_ieee80211_s1g_cap_rd_responder,
24663 &hf_ieee80211_s1g_cap_ht_delayed_block_ack,
24664 &hf_ieee80211_s1g_cap_maximum_mpdu_length,
24665 &hf_ieee80211_s1g_cap_maximum_a_mpdu_length_exp,
24666 &hf_ieee80211_s1g_cap_minimum_mpdu_start_spacing,
24667 NULL((void*)0)
24668};
24669
24670static int * const ieee80211_s1g_cap_byte5[] = {
24671 &hf_ieee80211_s1g_cap_uplink_sync_capable,
24672 &hf_ieee80211_s1g_cap_dynamic_aid,
24673 &hf_ieee80211_s1g_cap_bat_support,
24674 &hf_ieee80211_s1g_cap_tim_ade_support,
24675 &hf_ieee80211_s1g_cap_non_tim_support,
24676 &hf_ieee80211_s1g_cap_group_aid_support,
24677 &hf_ieee80211_s1g_cap_sta_type_support,
24678 NULL((void*)0)
24679};
24680
24681static int * const ieee80211_s1g_cap_byte6[] = {
24682 &hf_ieee80211_s1g_cap_centralized_authentication_control,
24683 &hf_ieee80211_s1g_cap_distributed_authentication_control,
24684 &hf_ieee80211_s1g_cap_a_msdu_support,
24685 &hf_ieee80211_s1g_cap_a_mpdu_support,
24686 &hf_ieee80211_s1g_cap_asymmetic_block_ack_support,
24687 &hf_ieee80211_s1g_cap_flow_control_support,
24688 &hf_ieee80211_s1g_cap_sectorized_beam_capable,
24689 NULL((void*)0)
24690};
24691
24692static int * const ieee80211_s1g_cap_byte7[] = {
24693 &hf_ieee80211_s1g_cap_obss_mitigation_support,
24694 &hf_ieee80211_s1g_cap_fragment_ba_support,
24695 &hf_ieee80211_s1g_cap_ndp_ps_poll_supported,
24696 &hf_ieee80211_s1g_cap_raw_operation_support,
24697 &hf_ieee80211_s1g_cap_page_slicing_support,
24698 &hf_ieee80211_s1g_cap_txop_sharing_implicit_ack_support,
24699 &hf_ieee80211_s1g_cap_vht_link_adaptation_capable,
24700 NULL((void*)0)
24701};
24702
24703static int * const ieee80211_s1g_cap_byte8[] = {
24704 &hf_ieee80211_s1g_cap_tack_support_as_ps_poll_response,
24705 &hf_ieee80211_s1g_cap_duplicate_1_mhz_support,
24706 &hf_ieee80211_s1g_cap_mcs_negotiation_support,
24707 &hf_ieee80211_s1g_cap_1_mhz_control_response_preamble_support,
24708 &hf_ieee80211_s1g_cap_ndp_beamforming_report_poll_support,
24709 &hf_ieee80211_s1g_cap_unsolicited_dynamic_aid,
24710 &hf_ieee80211_s1g_cap_sector_training_operation_supported,
24711 &hf_ieee80211_s1g_cap_temporary_ps_mode_switch,
24712 NULL((void*)0),
24713};
24714
24715static int * const ieee80211_s1g_cap_byte9[] = {
24716 &hf_ieee80211_s1g_cap_twt_grouping_support,
24717 &hf_ieee80211_s1g_cap_bdt_capable,
24718 &hf_ieee80211_s1g_cap_color,
24719 &hf_ieee80211_s1g_cap_twt_requester_support,
24720 &hf_ieee80211_s1g_cap_twt_responder_support,
24721 &hf_ieee80211_s1g_cap_pv1_frame_support,
24722 NULL((void*)0)
24723};
24724
24725static int * const ieee80211_s1g_cap_byte10[] = {
24726 &hf_ieee80211_s1g_cap_link_adaptation_per_normal_control_response_capable,
24727 &hf_ieee80211_s1g_cap_reserved,
24728 NULL((void*)0)
24729};
24730
24731static int * const ieee80211_s1g_mcs_and_nss_set[] = {
24732 &hf_ieee80211_s1g_rx_s1g_mcs_map,
24733 &hf_ieee80211_s1g_rx_highest_supported_long_gi_data_rate,
24734 &hf_ieee80211_s1g_tx_s1g_mcs_map,
24735 &hf_ieee80211_s1g_tx_highest_supported_long_gi_data_rate,
24736 &hf_ieee80211_s1g_rx_single_spatial_stream_map_for_1_mhz,
24737 &hf_ieee80211_s1g_tx_single_spatial_stream_map_for_1_mhz,
24738 &hf_ieee80211_s1g_mcs_and_nss_reserved,
24739 NULL((void*)0)
24740};
24741
24742static int
24743dissect_s1g_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24744{
24745 int offset = 0;
24746 proto_tree *s1g_cap_info = NULL((void*)0);
24747 proto_tree *s1g_caps = NULL((void*)0);
24748 proto_tree *sup_mcs_nss_set = NULL((void*)0);
24749
24750 s1g_cap_info = proto_tree_add_subtree(tree, tvb, offset, 15,
24751 ett_ieee80211_s1g_capabilities_info,
24752 NULL((void*)0), "S1G Capabilities Information");
24753
24754 s1g_caps = proto_tree_add_subtree(s1g_cap_info, tvb, offset, 10,
24755 ett_ieee80211_s1g_capabilities,
24756 NULL((void*)0), "S1G Capabilities");
24757
24758 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24759 hf_ieee80211_s1g_cap_byte1,
24760 ett_s1g_cap_byte1,
24761 ieee80211_s1g_cap_byte1,
24762 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24763 offset += 1;
24764
24765 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24766 hf_ieee80211_s1g_cap_byte2,
24767 ett_s1g_cap_byte2,
24768 ieee80211_s1g_cap_byte2,
24769 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24770 offset += 1;
24771
24772 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24773 hf_ieee80211_s1g_cap_byte3,
24774 ett_s1g_cap_byte3,
24775 ieee80211_s1g_cap_byte3,
24776 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24777 offset += 1;
24778
24779 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24780 hf_ieee80211_s1g_cap_byte4,
24781 ett_s1g_cap_byte4,
24782 ieee80211_s1g_cap_byte4,
24783 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24784 offset += 1;
24785
24786 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24787 hf_ieee80211_s1g_cap_byte5,
24788 ett_s1g_cap_byte5,
24789 ieee80211_s1g_cap_byte5,
24790 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24791 offset += 1;
24792
24793 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24794 hf_ieee80211_s1g_cap_byte6,
24795 ett_s1g_cap_byte6,
24796 ieee80211_s1g_cap_byte6,
24797 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24798 offset += 1;
24799
24800 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24801 hf_ieee80211_s1g_cap_byte7,
24802 ett_s1g_cap_byte7,
24803 ieee80211_s1g_cap_byte7,
24804 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24805 offset += 1;
24806
24807 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24808 hf_ieee80211_s1g_cap_byte8,
24809 ett_s1g_cap_byte8,
24810 ieee80211_s1g_cap_byte8,
24811 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24812 offset += 1;
24813
24814 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24815 hf_ieee80211_s1g_cap_byte9,
24816 ett_s1g_cap_byte9,
24817 ieee80211_s1g_cap_byte9,
24818 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24819 offset += 1;
24820
24821 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24822 hf_ieee80211_s1g_cap_byte10,
24823 ett_s1g_cap_byte10,
24824 ieee80211_s1g_cap_byte10,
24825 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24826 offset += 1;
24827
24828 sup_mcs_nss_set = proto_tree_add_subtree(s1g_cap_info, tvb, offset, 5,
24829 ett_ieee80211_s1g_sup_mcs_and_nss_set,
24830 NULL((void*)0), "Supported S1G-MCS and NSS Set");
24831
24832 proto_tree_add_bitmask_with_flags(sup_mcs_nss_set, tvb, offset,
24833 hf_ieee80211_s1g_mcs_and_nss_set,
24834 ett_s1g_mcs_and_mcs_set,
24835 ieee80211_s1g_mcs_and_nss_set,
24836 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24837 offset += 5;
24838
24839 return offset;
24840}
24841
24842static int * const s1g_subchannel_selective_transmission_headers0[] = {
24843 &hf_ieee80211_s1g_sst_sounding_option,
24844 &hf_ieee80211_s1g_channel_activity_bitmap,
24845 &hf_ieee80211_s1g_ul_activity,
24846 &hf_ieee80211_s1g_dl_activity,
24847 &hf_ieee80211_s1g_max_trans_width,
24848 &hf_ieee80211_s1g_activity_start_time,
24849 NULL((void*)0)
24850};
24851
24852static const value_string max_trans_width_vals[] = {
24853 { 0, "channel width unit" },
24854 { 1, "4MHz" },
24855 { 2, "8MHz" },
24856 { 3, "16MHz" },
24857 { 0, NULL((void*)0) }
24858};
24859
24860static int
24861dissect_subchannel_selective_transmission(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24862{
24863 int offset = 0;
24864 uint8_t control = tvb_get_uint8(tvb, offset);
24865
24866 /* Different if sounding option is 0 or 1 */
24867 if ((control & 0x01) == 0x00) {
24868 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
24869 hf_ieee80211_s1g_subchannel_selective_transmission,
24870 ett_s1g_subchannel_selective_transmission,
24871 s1g_subchannel_selective_transmission_headers0,
24872 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24873 offset += 4;
24874 } else {
24875 uint8_t control2 = tvb_get_uint8(tvb, offset + 1);
24876 proto_item *pi = NULL((void*)0);
24877 proto_tree *chan_tree = NULL((void*)0);
24878
24879 chan_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
24880 ett_s1g_subchannel_selective_transmission,
24881 &pi , "Channel Activity Schedule");
24882 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_sst_sounding_option1, tvb,
24883 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24884 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_channel_activity_bitmap1,
24885 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24886 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_sounding_start_time_present,
24887 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24888 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_channel_activity_reserved,
24889 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24890 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_max_trans_width1, tvb,
24891 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24892 offset += 2;
24893 /* sounding_start_time_present */
24894 if (control2 & 0x02) {
24895 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_sounding_start_time, tvb,
24896 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24897 offset += 2;
24898 proto_item_set_len(pi, 4);
24899 } else {
24900 proto_item_set_len(pi, 2);
24901 }
24902 }
24903
24904 return offset;
24905}
24906
24907static void
24908s1g_open_loop_link_margin_custom(char *result, uint8_t ollm_index)
24909{
24910 snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dB",
24911 (-128.0 + ollm_index * 0.5));
24912}
24913
24914static int
24915dissect_s1g_open_loop_link_margin_index(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24916{
24917 int offset = 0;
24918
24919 proto_tree_add_item(tree, hf_ieee80211_s1g_open_loop_link_margin, tvb,
24920 offset, 1, ENC_NA0x00000000);
24921 offset += 1;
24922
24923 return offset;
24924}
24925
24926#define RAW_START_TIME_INDICATION0x10 0x10
24927#define RAW_GROUP_INDICATION0x20 0x20
24928#define RAW_CHANNEL_INDICATION_PRESENCE0x40 0x40
24929#define RAW_PERIODIC_RAW_INDICATION0x80 0x80
24930
24931static const value_string s1g_raw_control_raw_type[] = {
24932 { 0, "Generic RAW" },
24933 { 1, "Sounding RAW" },
24934 { 2, "Simplex RAW" },
24935 { 3, "Triggering frame RAW" },
24936 { 0, NULL((void*)0) }
24937};
24938
24939static uint8_t global_s1g_raw_type;
24940
24941static void
24942s1g_raw_type_options_custom(char *result, uint8_t raw_type)
24943{
24944 switch (global_s1g_raw_type) {
24945 case 0x00:
24946 switch (raw_type) {
24947 case 0x00:
24948 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "None");
24949 break;
24950 case 0x01:
24951 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Paged STA");
24952 break;
24953 case 0x02:
24954 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "RA Frame");
24955 break;
24956 case 0x03:
24957 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Paged STA and RA Frame");
24958 break;
24959 }
24960 break;
24961 case 0x01:
24962 switch (raw_type) {
24963 case 0x00:
24964 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "SST sounding RAW");
24965 break;
24966 case 0x01:
24967 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "SST report RAW");
24968 break;
24969 case 0x02:
24970 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Sector sounding RAW");
24971 break;
24972 case 0x03:
24973 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Sector report RAW");
24974 break;
24975 }
24976 break;
24977 case 0x02:
24978 switch (raw_type) {
24979 case 0x00:
24980 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "AP PM RAW");
24981 break;
24982 case 0x01:
24983 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Non-TIM RAW");
24984 break;
24985 case 0x02:
24986 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Omni RAW");
24987 break;
24988 case 0x03:
24989 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Reserved");
24990 break;
24991 }
24992 break;
24993 case 0x03:
24994 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Reserved");
24995 break;
24996 }
24997}
24998
24999static void s1g_raw_slot_duration_custom(char *result, uint16_t slot_def)
25000{
25001 snprintf(result, ITEM_LABEL_LENGTH240, "%u (%u uS)", slot_def, (500 + slot_def * 120));
25002}
25003
25004static int * const s1g_raw_control_headers[] = {
25005 &hf_ieee80211_s1g_raw_type,
25006 &hf_ieee80211_s1g_raw_type_options,
25007 &hf_ieee80211_s1g_raw_start_time_indication,
25008 &hf_ieee80211_s1g_raw_raw_group_indication,
25009 &hf_ieee80211_s1g_raw_channel_indication_preference,
25010 &hf_ieee80211_s1g_raw_periodic_raw_indication,
25011 NULL((void*)0)
25012};
25013
25014static int * const s1g_slot_def_8_bit[] = {
25015 &hf_ieee80211_s1g_slot_def_format_indication,
25016 &hf_ieee80211_s1g_slot_def_cross_slot_boundary,
25017 &hf_ieee80211_s1g_slot_def_slot_duration_count8,
25018 &hf_ieee80211_s1g_slot_def_num_slots6,
25019 NULL((void*)0)
25020};
25021
25022static int * const s1g_slot_def_11_bit[] = {
25023 &hf_ieee80211_s1g_slot_def_format_indication,
25024 &hf_ieee80211_s1g_slot_def_cross_slot_boundary,
25025 &hf_ieee80211_s1g_slot_def_slot_duration_count11,
25026 &hf_ieee80211_s1g_slot_def_num_slots3,
25027 NULL((void*)0)
25028};
25029
25030static int * const s1g_raw_group_fields[] = {
25031 &hf_ieee80211_s1g_raw_group_page_index,
25032 &hf_ieee80211_s1g_raw_group_start_aid,
25033 &hf_ieee80211_s1g_raw_group_end_aid,
25034 NULL((void*)0)
25035};
25036
25037static int * const s1g_raw_channel_indication_fields[] = {
25038 &hf_ieee80211_s1g_raw_ci_channel_activity_bitmap,
25039 &hf_ieee80211_s1g_raw_ci_max_trans_width,
25040 &hf_ieee80211_s1g_raw_ci_ul_activity,
25041 &hf_ieee80211_s1g_raw_ci_dl_activity,
25042 &hf_ieee80211_s1g_raw_ci_reserved,
25043 NULL((void*)0)
25044};
25045
25046static int
25047dissect_rps(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25048{
25049 proto_tree *raw_assignment_tree;
25050 proto_tree *assn_tree;
25051 proto_item *rati;
25052 int offset = 0;
25053 int idx = 0;
25054 uint8_t rps_len = tvb_reported_length_remaining(tvb, offset);
25055
25056 raw_assignment_tree = proto_tree_add_subtree(tree, tvb, offset, rps_len,
25057 ett_s1g_raw_assignment, NULL((void*)0),
25058 "RAW assignments");
25059
25060 while (tvb_reported_length_remaining(tvb, offset) > 0) {
25061
25062 assn_tree = proto_tree_add_subtree_format(raw_assignment_tree, tvb, offset, -1,
25063 ett_s1g_raw_assn_tree, &rati,
25064 "Assignment %d", idx);
25065
25066 uint8_t raw_control = tvb_get_uint8(tvb, offset);
25067 uint8_t raw_slot_def = tvb_get_uint8(tvb, offset + 1);
25068
25069 global_s1g_raw_type = raw_control & 0x03;
25070
25071 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
25072 hf_ieee80211_s1g_raw_control,
25073 ett_s1g_raw_control,
25074 s1g_raw_control_headers,
25075 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25076 offset += 1;
25077
25078 if (((raw_slot_def & 0x01) == 0x00) || (global_s1g_raw_type == 0x01)) {
25079 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
25080 hf_ieee80211_s1g_raw_slot_def,
25081 ett_s1g_raw_slot_def,
25082 s1g_slot_def_8_bit,
25083 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25084 } else {
25085 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
25086 hf_ieee80211_s1g_raw_slot_def,
25087 ett_s1g_raw_slot_def,
25088 s1g_slot_def_11_bit,
25089 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25090 }
25091
25092 offset += 2;
25093
25094 if (raw_control & RAW_START_TIME_INDICATION0x10) {
25095 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_start_time, tvb, offset, 1,
25096 ENC_NA0x00000000);
25097 offset += 1;
25098 }
25099
25100 if (raw_control & RAW_GROUP_INDICATION0x20) {
25101 uint32_t raw_group = tvb_get_letoh24(tvb, offset);
25102
25103 if (raw_group == 0) {
25104 proto_item *it = NULL((void*)0);
25105
25106 it = proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_group_subfield, tvb,
25107 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25108 proto_item_append_text(it, ": All STAs allowed access within the RAW");
25109 } else {
25110 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
25111 hf_ieee80211_s1g_raw_group_subfield,
25112 ett_s1g_raw_group_subfield,
25113 s1g_raw_group_fields,
25114 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25115 }
25116 offset += 3;
25117 }
25118
25119 if (raw_control & RAW_CHANNEL_INDICATION_PRESENCE0x40) {
25120 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
25121 hf_ieee80211_s1g_raw_channel_indication,
25122 ett_s1g_raw_channel_indication,
25123 s1g_raw_channel_indication_fields,
25124 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25125 offset += 2;
25126 }
25127
25128 if (raw_control & RAW_PERIODIC_RAW_INDICATION0x80) {
25129 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_praw_periodicity, tvb,
25130 offset, 1, ENC_NA0x00000000);
25131 offset += 1;
25132 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_praw_validity, tvb,
25133 offset, 1, ENC_NA0x00000000);
25134 offset += 1;
25135 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_praw_start_offset, tvb,
25136 offset, 1, ENC_NA0x00000000);
25137 offset += 1;
25138 }
25139
25140 idx += 1;
25141 }
25142 return offset;
25143}
25144
25145static int * const s1g_page_slice_headers[] = {
25146 &hf_ieee80211_s1g_page_slice_page_index,
25147 &hf_ieee80211_s1g_page_slice_page_slice_length,
25148 &hf_ieee80211_s1g_page_slice_page_slice_count,
25149 &hf_ieee80211_s1g_page_slice_block_offset,
25150 &hf_ieee80211_s1g_page_slice_tim_offset,
25151 &hf_ieee80211_s1g_page_slice_reserved,
25152 NULL((void*)0)
25153};
25154
25155static int
25156dissect_page_slice(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25157{
25158 int offset = 0;
25159 int len = 0;
25160
25161 proto_tree_add_item(tree, hf_ieee80211_s1g_page_slice_page_period, tvb,
25162 offset, 1, ENC_NA0x00000000);
25163 offset += 1;
25164
25165 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25166 hf_ieee80211_s1g_page_slice_control,
25167 ett_s1g_page_slice_control,
25168 s1g_page_slice_headers,
25169 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25170
25171 offset += 3;
25172
25173 len = tvb_reported_length_remaining(tvb, offset);
25174 if (len > 0) {
25175 proto_tree_add_item(tree, hf_ieee80211_s1g_page_slice_page_bitmap, tvb,
25176 offset, len, ENC_NA0x00000000);
25177 offset += len;
25178 }
25179
25180 return offset;
25181}
25182
25183#define AID_REQUEST_INTERVAL_PRESENT0x01 0x01
25184#define PER_STA_ADDRESS_PRESENT0x02 0x02
25185#define SERVICE_CHARACTERISTIC_PRESENT0x04 0x04
25186#define GROUP_ADDRESS_PRESENT0x20 0x20
25187
25188static int * const s1g_aid_request_mode_headers[] = {
25189 &hf_ieee80211_s1g_aid_request_interval_present,
25190 &hf_ieee80211_s1g_aid_request_per_sta_address_present,
25191 &hf_ieee80211_s1g_aid_request_service_characteristic_present,
25192 &hf_ieee80211_s1g_aid_request_non_tim_mode_switch,
25193 &hf_ieee80211_s1g_aid_request_tim_mode_switch,
25194 &hf_ieee80211_s1g_aid_request_group_address_present,
25195 &hf_ieee80211_s1g_aid_request_reserved,
25196 NULL((void*)0)
25197};
25198
25199static int * const s1g_aid_request_characteristic_headers[] = {
25200 &hf_ieee80211_s1g_aid_request_characteristic_sensor,
25201 &hf_ieee80211_s1g_aid_request_characteristic_offload,
25202 &hf_ieee80211_s1g_aid_request_characteristic_official_service,
25203 &hf_ieee80211_s1g_aid_request_characteristic_reserved,
25204 NULL((void*)0)
25205};
25206
25207static int
25208dissect_aid_request(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25209{
25210 int offset = 0;
25211 uint8_t mode = tvb_get_uint8(tvb, offset);
25212
25213 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25214 hf_ieee80211_s1g_aid_request_mode,
25215 ett_s1g_aid_request_mode,
25216 s1g_aid_request_mode_headers,
25217 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25218 offset += 1;
25219
25220 if (mode & AID_REQUEST_INTERVAL_PRESENT0x01) {
25221 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_request_interval, tvb,
25222 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25223 offset += 2;
25224 }
25225
25226 if (mode & PER_STA_ADDRESS_PRESENT0x02) {
25227 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_req_peer_sta_addr, tvb,
25228 offset, 6, ENC_NA0x00000000);
25229 offset += 6;
25230 }
25231
25232 if (mode & SERVICE_CHARACTERISTIC_PRESENT0x04) {
25233 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25234 hf_ieee80211_s1g_aid_request_characteristic,
25235 ett_s1g_aid_characteristic,
25236 s1g_aid_request_characteristic_headers,
25237 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25238 offset += 1;
25239 }
25240
25241 if (mode & GROUP_ADDRESS_PRESENT0x20) {
25242 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_req_group_addr, tvb, offset,
25243 6, ENC_NA0x00000000);
25244 offset += 6;
25245 }
25246
25247 return offset;
25248}
25249
25250static int
25251dissect_aid_response(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25252{
25253 int offset = 0;
25254
25255 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_rsp_aid_group_aid, tvb,
25256 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25257 offset += 2;
25258
25259 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_rsp_aid_switch_count,
25260 tvb, offset, 1, ENC_NA0x00000000);
25261 offset += 1;
25262
25263 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_rsp_aid_response_interval,
25264 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25265 offset += 2;
25266
25267 return offset;
25268}
25269
25270static int * const s1g_sector_op_control_headers[] = {
25271 &hf_ieee80211_s1g_sector_op_sectorization_type,
25272 &hf_ieee80211_s1g_sector_op_period,
25273 &hf_ieee80211_s1g_sector_op_omni,
25274 NULL((void*)0)
25275};
25276
25277static int * const s1g_txop_sector_op_control_headers[] = {
25278 &hf_ieee80211_s1g_sector_op_sectorization_type_b16,
25279 &hf_ieee80211_s1g_sector_op_periodic_training_indicator,
25280 &hf_ieee80211_s1g_sector_op_training_period,
25281 &hf_ieee80211_s1g_sector_op_remaining_beacon_interval,
25282 &hf_ieee80211_s1g_sector_op_reserved_b16,
25283 NULL((void*)0)
25284};
25285
25286static const true_false_string sectorization_type_tfs = {
25287 "Reserved",
25288 "Group Sectorization Operation"
25289};
25290
25291static const true_false_string sectorization_omni_tfs = {
25292 "Omnidirectional",
25293 "Sectorized"
25294};
25295
25296static int
25297dissect_s1g_sector_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25298{
25299 int offset = 0;
25300 int len = 0;
25301 uint8_t control = tvb_get_uint8(tvb, offset);
25302
25303 if (control & 0x01) {
25304 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25305 hf_ieee80211_s1g_sector_op_control_16b,
25306 ett_s1g_sector_operation,
25307 s1g_txop_sector_op_control_headers,
25308 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25309
25310 offset += 2;
25311 } else {
25312 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25313 hf_ieee80211_s1g_sector_op_control,
25314 ett_s1g_sector_operation,
25315 s1g_sector_op_control_headers,
25316 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25317 offset += 1;
25318 }
25319
25320 /* Break this out more */
25321 len = tvb_reported_length_remaining(tvb, offset);
25322 proto_tree_add_item(tree, hf_ieee80211_s1g_sector_op_group_info, tvb,
25323 offset, len, ENC_NA0x00000000);
25324 offset += len;
25325
25326 return offset;
25327}
25328
25329static int
25330dissect_s1g_beacon_compatibility(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25331{
25332 int offset = 0;
25333
25334 proto_tree_add_item(tree, hf_ieee80211_s1g_beacon_compatibility_info, tvb,
25335 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25336 offset += 2;
25337
25338 proto_tree_add_item(tree, hf_ieee80211_s1g_beacon_interval, tvb, offset,
25339 2, ENC_LITTLE_ENDIAN0x80000000);
25340 offset += 2;
25341
25342 proto_tree_add_item(tree, hf_ieee80211_s1g_tsf_completion, tvb, offset,
25343 4, ENC_LITTLE_ENDIAN0x80000000);
25344 offset += 4;
25345
25346 return offset;
25347}
25348
25349static int
25350dissect_s1g_short_beacon_interval(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25351{
25352 int offset = 0;
25353
25354 proto_tree_add_item(tree, hf_ieee80211_s1g_short_beacon_interval, tvb,
25355 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25356 offset += 2;
25357
25358 return offset;
25359}
25360
25361static int
25362dissect_s1g_change_sequence(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25363{
25364 int offset = 0;
25365
25366 proto_tree_add_item(tree, hf_ieee80211_s1g_change_sequence, tvb, offset, 1,
25367 ENC_NA0x00000000);
25368 offset += 1;
25369
25370 return offset;
25371}
25372
25373static int
25374dissect_authentication_control(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25375{
25376 int offset = 0;
25377 uint16_t control_params = tvb_get_letohs(tvb, offset);
25378 proto_tree *auth_tree = NULL((void*)0);
25379
25380 if ((control_params & 0x0001) == 0) {
25381 auth_tree = proto_tree_add_subtree(tree, tvb, offset, 2,
25382 ett_ieee80211_s1g_auth_control,
25383 NULL((void*)0),
25384 "Centralized Authentication Control Parameters");
25385 } else {
25386 auth_tree = proto_tree_add_subtree(tree, tvb, offset, 3,
25387 ett_ieee80211_s1g_auth_control,
25388 NULL((void*)0),
25389 "Distributed Authentication Control Parameters");
25390 }
25391
25392 if ((control_params & 0x0001) == 0) { /* This is all there should be here */
25393 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_control,
25394 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25395 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_deferral,
25396 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25397 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_reserved,
25398 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25399
25400 if ((control_params & 0x0002) == 0) { /* Deferral or not */
25401 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_thresh,
25402 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25403 } else {
25404 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_thresh_tus,
25405 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25406 }
25407 offset += 2;
25408 } else {
25409 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_control,
25410 tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25411 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_slot_duration, tvb,
25412 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25413 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_max_trans_int, tvb,
25414 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25415 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_min_trans_int, tvb,
25416 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25417 offset += 3;
25418 }
25419 return offset;
25420}
25421
25422static int
25423dissect_tsf_timer_accuracy(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25424{
25425 int offset = 0;
25426
25427 proto_tree_add_item(tree, hf_ieee80211_s1g_tsf_timer_accuracy, tvb, offset,
25428 1, ENC_NA0x00000000);
25429 offset += 1;
25430
25431 return offset;
25432}
25433
25434static int * const relay_control_headers[] = {
25435 &hf_ieee80211_s1g_relay_hierarchy_identifier,
25436 &hf_ieee80211_s1g_relay_no_more_relay_flag,
25437 NULL((void*)0)
25438};
25439
25440static const range_string relay_hierarchy_rstrs[] = {
25441 { 0, 0, "Root AP" },
25442 { 1, 1, "S1G Relay AP" },
25443 { 2, 127, "Reserved" },
25444 { 0, 0, NULL((void*)0) }
25445};
25446
25447static const true_false_string no_more_relay_flag_tfs = {
25448 "AP does not accept any requests for relaying",
25449 "AP does accept requests for relaying"
25450};
25451
25452static int
25453dissect_s1g_relay(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25454{
25455 int offset = 0;
25456 uint8_t relay_control = tvb_get_uint8(tvb, offset);
25457
25458 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25459 hf_ieee80211_s1g_relay_control,
25460 ett_s1g_relay_control,
25461 relay_control_headers,
25462 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25463 offset += 1;
25464 if ((relay_control & 0x7F) == 1) {
25465 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_rootap_bssid,
25466 tvb, offset, 6, ENC_NA0x00000000);
25467 offset += 6;
25468 }
25469
25470 return offset;
25471}
25472
25473static const true_false_string relay_activation_mode_tfs = {
25474 "Relay Activation Request",
25475 "Relay Activation Response"
25476};
25477
25478static const true_false_string relay_direction_tfs = {
25479 "Sent by an AP",
25480 "Sent by a non-AP STA"
25481};
25482
25483static unsigned relay_function_field;
25484
25485static void
25486enable_relay_function_custom(char *result, uint8_t enable_relay_function)
25487{
25488 switch (relay_function_field & 0x03) {
25489 case 0x00: /* Relay Activation Mode == 0 && Direction == 0 */
25490 if (enable_relay_function)
25491 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA activates its relay function");
25492 else
25493 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA terminates its relay function");
25494 break;
25495 case 0x01: /* Relay Activation Mode == 1 && Direction == 0 */
25496 if (enable_relay_function)
25497 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA requests to activate relay function");
25498 else
25499 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA requests to terminate relay function");
25500 break;
25501 case 0x02: /* Relay Activation Mode == 0 && Direction == 1 */
25502 if (enable_relay_function)
25503 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA is allowed to operate as a relay");
25504 else
25505 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA must not operate as a relay");
25506 break;
25507 case 0x03: /* Relay Activation Mode == 1 && Direction == 1 */
25508 if (enable_relay_function)
25509 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Non-AP STA can operate as a relay");
25510 else
25511 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Non-AP STA must terminate relay function");
25512 break;
25513 }
25514}
25515
25516static int
25517dissect_s1g_relay_activation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25518{
25519 int offset = 0;
25520 proto_tree *relay_activ = NULL((void*)0);
25521
25522 relay_function_field = tvb_get_uint8(tvb, offset);
25523
25524 relay_activ = proto_tree_add_subtree_format(tree, tvb, offset, 1,
25525 ett_s1g_relay_function,
25526 NULL((void*)0), "Relay Activation: 0x%0x",
25527 relay_function_field);
25528
25529 proto_tree_add_item(relay_activ,
25530 hf_ieee80211_s1g_relay_function_activation_mode, tvb,
25531 offset, 1, ENC_NA0x00000000);
25532 proto_tree_add_item(relay_activ, hf_ieee80211_s1g_relay_function_direction,
25533 tvb, offset, 1, ENC_NA0x00000000);
25534 proto_tree_add_item(relay_activ,
25535 hf_ieee80211_s1g_relay_function_enable_relay_function,
25536 tvb, offset, 1, ENC_NA0x00000000);
25537 proto_tree_add_item(relay_activ,
25538 hf_ieee80211_s1g_relay_function_stas_present_indic,
25539 tvb, offset, 1, ENC_NA0x00000000);
25540 proto_tree_add_item(relay_activ, hf_ieee80211_s1g_relay_function_reserved,
25541 tvb, offset, 1, ENC_NA0x00000000);
25542 offset += 1;
25543
25544 if (relay_function_field & 0x04) {
25545 proto_tree_add_item(tree, hf_ieee80211_s1g_number_of_stas, tvb, offset,
25546 1, ENC_NA0x00000000);
25547 offset += 1;
25548 }
25549
25550 return offset;
25551}
25552
25553static const true_false_string reachable_address_add_remove_tfs = {
25554 "STA joining the relay",
25555 "STA leaving the relay"
25556};
25557
25558static int
25559dissect_reachable_address(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25560{
25561 int offset = 0;
25562 proto_tree *reach_list = NULL((void*)0);
25563 uint8_t addr_count = 0, addr_num = 0;
25564
25565 proto_tree_add_item(tree, hf_ieee80211_s1g_initiator_mac_address, tvb,
25566 offset, 6, ENC_NA0x00000000);
25567 offset += 6;
25568
25569 addr_count = tvb_get_uint8(tvb, offset);
25570 proto_tree_add_item(tree, hf_ieee80211_s1g_address_count, tvb, offset, 1,
25571 ENC_NA0x00000000);
25572 offset++;
25573
25574 reach_list = proto_tree_add_subtree(tree, tvb, offset, 7 * addr_count,
25575 ett_ieee80211_s1g_addr_list,
25576 NULL((void*)0), "Reachable Addresses");
25577 while (addr_count != 0) {
25578 proto_tree *reach_addr = NULL((void*)0);
25579
25580 reach_addr = proto_tree_add_subtree_format(reach_list, tvb, offset, 7,
25581 ett_ieee80211_s1g_reach_addr,
25582 NULL((void*)0), "Reachable Address %u", addr_num);
25583
25584 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_add_remove,
25585 tvb, offset, 1, ENC_NA0x00000000);
25586 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_relay_capable,
25587 tvb, offset, 1, ENC_NA0x00000000);
25588 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_reserved,
25589 tvb, offset, 1, ENC_NA0x00000000);
25590 offset += 1;
25591
25592 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_mac_address,
25593 tvb, offset, 6, ENC_NA0x00000000);
25594 offset += 6;
25595
25596 addr_num++;
25597 addr_count--;
25598 }
25599 return offset;
25600}
25601
25602static int * const relay_discovery_control_headers[] = {
25603 &hf_ieee80211_s1g_min_data_rate_included,
25604 &hf_ieee80211_s1g_mean_data_rate_included,
25605 &hf_ieee80211_s1g_max_data_rate_included,
25606 &hf_ieee80211_s1g_delay_and_min_phy_rate,
25607 &hf_ieee80211_s1g_information_not_available,
25608 &hf_ieee80211_s1g_relay_discovery_reserved,
25609 NULL((void*)0)
25610};
25611
25612static int
25613dissect_s1g_relay_discovery(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25614{
25615 int offset = 0;
25616 uint8_t relay_discovery_control = tvb_get_uint8(tvb, offset);
25617
25618 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25619 hf_ieee80211_s1g_relay_discovery_control,
25620 ett_s1g_relay_discovery_control,
25621 relay_discovery_control_headers,
25622 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25623 offset += 1;
25624
25625 if (relay_discovery_control & 0x01) {
25626 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_ul_min, tvb,
25627 offset, 1, ENC_NA0x00000000);
25628 offset += 1;
25629 }
25630
25631 if (relay_discovery_control & 0x02) {
25632 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_ul_mean, tvb,
25633 offset, 1, ENC_NA0x00000000);
25634 offset += 1;
25635 }
25636
25637 if (relay_discovery_control & 0x04) {
25638 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_ul_max, tvb,
25639 offset, 1, ENC_NA0x00000000);
25640 offset += 1;
25641 }
25642
25643 if (relay_discovery_control & 0x01) {
25644 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_dl_min, tvb,
25645 offset, 1, ENC_NA0x00000000);
25646 offset += 1;
25647 }
25648
25649 if (relay_discovery_control & 0x02) {
25650 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_dl_mean, tvb,
25651 offset, 1, ENC_NA0x00000000);
25652 offset += 1;
25653 }
25654
25655 if (relay_discovery_control & 0x04) {
25656 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_dl_max, tvb,
25657 offset, 1, ENC_NA0x00000000);
25658 offset += 1;
25659 }
25660
25661 if (relay_discovery_control & 0x08) {
25662
25663 }
25664
25665 return offset;
25666}
25667
25668static int
25669dissect_aid_announcement(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25670{
25671 int offset = 0;
25672 int entry_no = 0;
25673
25674 /*
25675 * There should be 8N bytes ...
25676 */
25677 while (tvb_reported_length_remaining(tvb, offset) >= 8) {
25678 proto_tree *aid_entry = NULL((void*)0);
25679
25680 aid_entry = proto_tree_add_subtree_format(tree, tvb, offset, 8,
25681 ett_ieee80211_s1g_aid_entry,
25682 NULL((void*)0), "AID Entry %d", entry_no++);
25683 proto_tree_add_item(aid_entry, hf_ieee80211_s1g_aid_entry_mac_addr,
25684 tvb, offset, 6, ENC_NA0x00000000);
25685 offset += 6;
25686
25687 proto_tree_add_item(aid_entry, hf_ieee80211_s1g_aid_entry_assoc_id,
25688 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25689 offset += 2;
25690 }
25691
25692 /* TODO: EI if bytes remaining. */
25693
25694 return offset;
25695}
25696
25697static int * const subfield_0[] = {
25698 &hf_ieee80211_pv1_probe_response_req_full_ssid,
25699 &hf_ieee80211_pv1_probe_response_req_next_tbtt,
25700 &hf_ieee80211_pv1_probe_response_req_access_network_option,
25701 &hf_ieee80211_pv1_probe_response_req_s1g_beacon_compatibility,
25702 &hf_ieee80211_pv1_probe_response_req_supported_rates,
25703 &hf_ieee80211_pv1_probe_response_req_s1g_capability,
25704 &hf_ieee80211_pv1_probe_response_req_s1g_operation,
25705 &hf_ieee80211_pv1_probe_response_req_rsn,
25706 NULL((void*)0)
25707};
25708
25709static int
25710dissect_pv1_probe_response_option(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25711{
25712 int offset = 0;
25713
25714 /*
25715 * TODO: Check that the number of bytes matches what the probe response
25716 * group bitmap says should be there.
25717 */
25718 if (tvb_reported_length_remaining(tvb, offset) == 1) {
25719 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25720 hf_ieee80211_s1g_probe_resp_subfield_0,
25721 ett_s1g_probe_resp_subfield_0,
25722 subfield_0,
25723 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25724 offset += 1;
25725 } else if (tvb_reported_length_remaining(tvb, offset) > 1) {
25726 uint8_t opt_bitmaps = tvb_get_uint8(tvb, offset);
25727
25728 proto_tree_add_item(tree, hf_ieee80211_s1g_probe_response_group_bitmap,
25729 tvb, offset, 1, ENC_NA0x00000000);
25730 offset += 1;
25731 if (opt_bitmaps & 0x01) { /* Default Bitmap */
25732 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25733 hf_ieee80211_s1g_probe_resp_subfield_0,
25734 ett_s1g_probe_resp_subfield_0,
25735 subfield_0,
25736 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25737 offset += 1;
25738 }
25739 }
25740
25741 return offset;
25742}
25743
25744static void
25745s1g_max_awake_duration_custom(char *result, uint16_t duration)
25746{
25747 if (duration == 0)
25748 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "No limit applies");
25749 else
25750 snprintf(result, ITEM_LABEL_LENGTH240, "%d uS", (int)duration * 40);
25751}
25752
25753static void
25754s1g_recovery_time_duration_custom(char *result, uint16_t duration)
25755{
25756 snprintf(result, ITEM_LABEL_LENGTH240, "%d uS", (int)duration * 40);
25757}
25758
25759static int
25760dissect_el_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25761{
25762 int offset = 0;
25763
25764 proto_tree_add_item(tree, hf_ieee80211_s1g_el_op_max_awake_duration, tvb,
25765 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25766 offset += 2;
25767
25768 proto_tree_add_item(tree, hf_ieee80211_s1g_el_op_recovery_time_duration, tvb,
25769 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25770 offset += 2;
25771
25772 return offset;
25773}
25774
25775static int
25776dissect_sectorized_group_id_list(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25777{
25778 int offset = 0;
25779 int len = tvb_reported_length_remaining(tvb, offset);
25780
25781 /* Break this out some more */
25782 proto_tree_add_item(tree, hf_ieee80211_s1g_sectorized_group_id_list, tvb,
25783 offset, len, ENC_NA0x00000000);
25784 offset += len;
25785
25786 return offset;
25787}
25788
25789static int * const channel_width_fields[] = {
25790 &hf_ieee80211_s1g_primary_channel_width,
25791 &hf_ieee80211_s1g_bss_operating_channel_width,
25792 &hf_ieee80211_s1g_primary_channel_location,
25793 &hf_ieee80211_s1g_reserved_b6,
25794 &hf_ieee80211_s1g_mcs10_use,
25795 NULL((void*)0)
25796};
25797
25798static const value_string one_mhz_primary_channel_vals[] = {
25799 { 0, "1 MHz BSS operating channel width" },
25800 { 1, "2 MHz BSS operating channel width" },
25801 { 3, "4 MHz BSS operating channel width" },
25802 { 7, "8 MHz BSS operating channel width" },
25803 { 15, "16 MHz BSS operating channel width" },
25804 { 0, NULL((void*)0) },
25805};
25806
25807static const value_string two_mhz_primary_channel_vals[] = {
25808 { 1, "2 MHz BSS operating channel width" },
25809 { 3, "4 MHz BSS operating channel width" },
25810 { 7, "8 MHz BSS operating channel width" },
25811 { 15, "16 MHz BSS operating channel width" },
25812 { 0, NULL((void*)0) },
25813};
25814
25815static const value_string primary_channel_width_vals[] = {
25816 { 0, "2MHz BSS Primary Channel Width" },
25817 { 1, "1MHz BSS Primary Channel Width" },
25818 { 0, NULL((void*)0) }
25819};
25820
25821static const value_string one_mhz_primary_channel_location_vals[] = {
25822 { 0, "Located on lower side of 2MHz primary channel" },
25823 { 1, "Located on upper side of 2MHz primary channel" },
25824 { 0, NULL((void*)0) }
25825};
25826
25827static const value_string mcs10_use_vals[] = {
25828 { 0, "Use of MCS10 possible" },
25829 { 1, "Use of MCS10 not recommended" },
25830 { 0, NULL((void*)0) }
25831};
25832
25833static int
25834dissect_s1g_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25835{
25836 int offset = 0;
25837 proto_tree *s1g_op_info = NULL((void*)0);
25838 proto_item *cw_item = NULL((void*)0);
25839 uint8_t chan_width = 0;
25840
25841 s1g_op_info = proto_tree_add_subtree(tree, tvb, offset, 4,
25842 ett_s1g_operation_info,
25843 NULL((void*)0), "S1G Operation Information");
25844
25845 chan_width = tvb_get_uint8(tvb, offset);
25846 cw_item = proto_tree_add_bitmask_with_flags(s1g_op_info, tvb, offset,
25847 hf_ieee80211_s1g_channel_width,
25848 ett_s1g_channel_width,
25849 channel_width_fields,
25850 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25851 if (chan_width & 0x01) {
25852 proto_item_append_text(cw_item, ": %s",
25853 val_to_str(pinfo->pool, (chan_width >> 1) & 0x0F,
25854 one_mhz_primary_channel_vals,
25855 "Invalid BSS Channel Width value"));
25856 } else {
25857 proto_item_append_text(cw_item, ": %s",
25858 val_to_str(pinfo->pool, (chan_width >> 1) & 0x0F,
25859 two_mhz_primary_channel_vals,
25860 "Invalid BSS Channel Width value"));
25861 }
25862 offset += 1;
25863
25864 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_operating_class, tvb,
25865 offset, 1, ENC_NA0x00000000);
25866 offset += 1;
25867
25868 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_primary_channel_number, tvb,
25869 offset, 1, ENC_NA0x00000000);
25870 offset += 1;
25871
25872 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_channel_center_frequency,
25873 tvb, offset, 1, ENC_NA0x00000000);
25874 offset += 1;
25875
25876 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_basic_mcs_and_nss_set,
25877 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25878 offset += 2;
25879
25880 return offset;
25881}
25882
25883#define HEADER_COMP_STORE_A30x02 0x02
25884#define HEADER_COMP_STORE_A40x04 0x04
25885#define HEADER_COMP_CCMP_UPDATE0x08 0x08
25886
25887static int * const header_compression_control_headers[] = {
25888 &hf_ieee80211_s1g_header_comp_req_resp,
25889 &hf_ieee80211_s1g_header_comp_store_a3,
25890 &hf_ieee80211_s1g_header_comp_store_a4,
25891 &hf_ieee80211_s1g_header_comp_ccmp_update_present,
25892 &hf_ieee80211_s1g_header_comp_pv1_data_type_3_supported,
25893 &hf_ieee80211_s1g_header_comp_reserved,
25894 NULL((void*)0)
25895};
25896
25897static int
25898dissect_header_compression(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25899{
25900 int offset = 0;
25901 uint8_t control = tvb_get_uint8(tvb, offset);
25902
25903 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25904 hf_ieee80211_s1g_header_comp_control,
25905 ett_s1g_header_comp_control,
25906 header_compression_control_headers,
25907 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25908 offset += 1;
25909
25910 if (control & HEADER_COMP_STORE_A30x02) {
25911 proto_tree_add_item(tree, hf_ieee80211_s1g_header_comp_a3, tvb,
25912 offset, 6, ENC_NA0x00000000);
25913 offset += 6;
25914 }
25915
25916 if (control & HEADER_COMP_STORE_A40x04) {
25917 proto_tree_add_item(tree, hf_ieee80211_s1g_header_comp_a4, tvb,
25918 offset, 6, ENC_NA0x00000000);
25919 offset += 6;
25920 }
25921
25922 /* TODO: Break this out */
25923 if (control & HEADER_COMP_CCMP_UPDATE0x08) {
25924 proto_tree_add_item(tree, hf_ieee80211_s1g_header_comp_ccmp_update, tvb,
25925 offset, 5, ENC_NA0x00000000);
25926 offset += 5;
25927 }
25928
25929 return offset;
25930}
25931
25932static const value_string sst_channel_unit_vals[] = {
25933 { 0, "Channel Width Unit is 2 MHz" },
25934 { 1, "Channel Width Unit is 1 MHz" },
25935 { 0, NULL((void*)0) }
25936};
25937
25938static int
25939dissect_sst_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_sst_enabled_channel_bitmap, tvb,
25944 offset, 1, ENC_NA0x00000000);
25945 offset += 1;
25946
25947 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_primary_channel_offset, tvb,
25948 offset, 1, ENC_NA0x00000000);
25949 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_channel_unit, tvb, offset,
25950 1, ENC_NA0x00000000);
25951 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_reserved, tvb, offset, 1,
25952 ENC_NA0x00000000);
25953 offset += 1;
25954
25955 return offset;
25956}
25957
25958static int
25959dissect_max_away_duration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25960{
25961 int offset = 0;
25962
25963 proto_tree_add_item(tree, hf_ieee80211_s1g_max_away_duration, tvb, offset,
25964 2, ENC_LITTLE_ENDIAN0x80000000);
25965 offset += 2;
25966
25967 return offset;
25968}
25969
25970static int
25971dissect_mcs_set(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, int offset, bool_Bool basic, bool_Bool vendorspecific)
25972{
25973 proto_item *ti;
25974 proto_tree *mcs_tree, *bit_tree;
25975 uint8_t rx_nss, tx_nss; /* 0-4 for HT and 0-8 for VHT*/
25976 uint32_t value_mcs_0_31, value_mcs_32_52, value_mcs_53_76;
25977 uint16_t tx_mcs_set;
25978 rx_nss = tx_nss = 8;
25979 /* 16 byte Supported MCS set */
25980 if (vendorspecific)
25981 {
25982 ti = proto_tree_add_item(tree, hf_ieee80211_mcsset_vs, tvb, offset, 16, ENC_NA0x00000000);
25983 } else
25984 {
25985 ti = proto_tree_add_item(tree, hf_ieee80211_mcsset, tvb, offset, 16, ENC_NA0x00000000);
25986 }
25987 proto_item_append_text(ti, ": %s", basic ? "Basic MCS Set" : "MCS Set");
25988 mcs_tree = proto_item_add_subtree(ti, ett_mcsset_tree);
25989
25990 /* Rx MCS Bitmask */
25991 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_rx_bitmask, tvb, offset, 10, ENC_NA0x00000000);
25992 bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
25993
25994 /* Bits 0 - 31 */
25995 value_mcs_0_31 = tvb_get_letohl(tvb, offset);
25996
25997 /* Handle all zeroes/ff's case..*/
25998 if (value_mcs_0_31 != 0x0)
25999 {
26000 if (!(value_mcs_0_31 & (0xffffff00))) {
26001 /*
26002 * At least one MCS from 0-7 is supported, but no MCS from 8-31 are
26003 * supported, so only 1 spatial stream is supported.
26004 */
26005 rx_nss = 0;
26006 } else if (!(value_mcs_0_31 & (0xffff0000))) {
26007 /*
26008 * At least one MCS from 8-15 is supported, but no MCS from 16-31 are
26009 * supported, so only 2 spatial streams are supported.
26010 */
26011 rx_nss = 1;
26012 } else if (!(value_mcs_0_31 & (0xff000000))) {
26013 /*
26014 * At least one MCS from 16-23 is supported, but no MCS from 24-31 are
26015 * supported, so only 3 spatial streams are supported.
26016 */
26017 rx_nss = 2;
26018 } else {
26019 /*
26020 * At least one MCS from 24-31 is supported, so 4 spatial streams
26021 * are supported.
26022 */
26023 rx_nss = 3;
26024 }
26025 }
26026
26027 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_0to7, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26028 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_8to15, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26029 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_16to23, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26030 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_24to31, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26031 offset += 4;
26032
26033 /* Should be we check UEQM Supported?*/
26034 /* Bits 32 - 52 */
26035 value_mcs_32_52 = tvb_get_letohl(tvb, offset);
26036 if (!(value_mcs_32_52 & (0x1ffffe))) {
26037 /*
26038 * MCS 33-52 aren't supported, so the number of spatial streams we get
26039 * from whichever MCSes from 0-31 that we support is the total number
26040 * of spatial streams we support.
26041 */
26042 ;
26043 } else if (!(value_mcs_32_52 & (0x1fff80))) {
26044 /*
26045 * At least one MCS from 33-38 is supported, but no MCS from 39-52 is
26046 * supported, so we have at least 2 spatial streams, but none of the
26047 * MCSs in that range give us any more.
26048 */
26049 rx_nss = MAX(1, rx_nss)(((1) > (rx_nss)) ? (1) : (rx_nss));
26050 } else {
26051 /*
26052 * At least one MCS from 39-52 is supported, so we have at least 3
26053 * spatial streams.
26054 */
26055 rx_nss = MAX(2, rx_nss)(((2) > (rx_nss)) ? (2) : (rx_nss));
26056 }
26057
26058 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_32, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26059 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_33to38, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26060 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_39to52, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26061 offset += 2;
26062
26063 /* Bits 53 - 76 */
26064 value_mcs_53_76 = tvb_get_letohl(tvb, offset);
26065 if ((value_mcs_53_76 & (0x1fffffe0))) {
26066 /*
26067 * At least one MCS from 53-76 is supported, so we have at least 4
26068 * spatial streams.
26069 */
26070 rx_nss = MAX(3, rx_nss)(((3) > (rx_nss)) ? (3) : (rx_nss));
26071 }
26072
26073 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_53to76, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26074 offset += 4;
26075
26076 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_highest_data_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26077 offset += 2;
26078
26079 /* Follow table 8-126 from 802.11-2012 */
26080 tx_mcs_set = tvb_get_letohs(tvb, offset);
26081
26082 if (!(tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
26083 {
26084 /* TX MCS Set is not defined
26085 * so there is no interpretation for Max Tx Spatial Streams
26086 */
26087 tx_nss = 4; /* Not Defined*/
26088 }
26089
26090 if ((tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
26091 {
26092 /* TX MCS Set is defined to be equal to Rx MCS Set
26093 * So, get the Max Spatial Streams from Rx
26094 * MCS set
26095 */
26096 tx_nss = rx_nss;
26097 }
26098 proto_item_append_text(ti, ": %s", val_to_str(pinfo->pool, rx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
26099
26100 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_mcs_set_defined, tvb, offset, 1,
26101 ENC_LITTLE_ENDIAN0x80000000);
26102 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal, tvb, offset, 1,
26103 ENC_LITTLE_ENDIAN0x80000000);
26104 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_max_spatial_streams, tvb, offset, 1,
26105 ENC_LITTLE_ENDIAN0x80000000);
26106 proto_item_append_text(ti, ", %s", val_to_str(pinfo->pool, tx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
26107 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_unequal_modulation, tvb, offset, 1,
26108 ENC_LITTLE_ENDIAN0x80000000);
26109 offset += 1;
26110
26111 offset += 3;
26112 return offset;
26113}
26114
26115/* 802.11n - HT Operation IE */
26116static int
26117dissect_ht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26118{
26119 int tag_len = tvb_reported_length(tvb);
26120 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26121 int offset = 0;
26122 static int * const ieee80211_ht_operation_info1_field[] = {
26123 &hf_ieee80211_ht_operation_info_secondary_channel_offset,
26124 &hf_ieee80211_ht_operation_info_sta_channel_width,
26125 &hf_ieee80211_ht_operation_info_rifs_mode,
26126 &hf_ieee80211_ht_operation_info_reserved_b4_b7,
26127 NULL((void*)0)
26128 };
26129
26130 static int * const ieee80211_ht_operation_info2_field[] = {
26131 &hf_ieee80211_ht_operation_info_protection,
26132 &hf_ieee80211_ht_operation_info_non_greenfield_sta_present,
26133 &hf_ieee80211_ht_operation_info_reserved_b11,
26134 &hf_ieee80211_ht_operation_info_obss_non_ht_stas_present,
26135 &hf_ieee80211_ht_operation_info_channel_center_freq_seg_2,
26136 &hf_ieee80211_ht_operation_info_reserved_b21_b23,
26137 NULL((void*)0)
26138 };
26139
26140 static int * const ieee80211_ht_operation_info3_field[] = {
26141 &hf_ieee80211_ht_operation_info_reserved_b24_b29,
26142 &hf_ieee80211_ht_operation_info_dual_beacon,
26143 &hf_ieee80211_ht_operation_info_dual_cts_protection,
26144 &hf_ieee80211_ht_operation_info_stbc_beacon,
26145 &hf_ieee80211_ht_operation_info_reserved_b33_b39,
26146 NULL((void*)0)
26147 };
26148
26149 if (tag_len < 22) {
26150 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26151 "HT Operation IE content length %u wrong, must be at least 22 bytes", tag_len);
26152 return 1;
26153 }
26154
26155 proto_tree_add_item(tree, hf_ieee80211_ht_operation_primary_channel, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26156 offset += 1;
26157
26158 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_operation_info_delimiter1,
26159 ett_ht_operation_info_delimiter1_tree, ieee80211_ht_operation_info1_field,
26160 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26161 offset += 1;
26162
26163
26164 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_operation_info_delimiter2,
26165 ett_ht_operation_info_delimiter2_tree, ieee80211_ht_operation_info2_field,
26166 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26167 offset += 2;
26168
26169 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_operation_info_delimiter3,
26170 ett_ht_operation_info_delimiter3_tree, ieee80211_ht_operation_info3_field,
26171 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26172 offset += 2;
26173
26174 /* Basic HT-MCS Set present in Beacon, Probe Response, Mesh Peering Open and Mesh Peering
26175 * Confirm frames. Otherwise reserved.
26176 */
26177 if ((field_data->ftype && (field_data->ftype == MGT_BEACON0x08 || field_data->ftype == MGT_PROBE_RESP0x05)) ||
26178 (field_data->sanity_check && field_data->sanity_check->ampe_frame &&
26179 (field_data->sanity_check->ampe_frame == SELFPROT_ACTION_MESH_PEERING_OPEN1 ||
26180 field_data->sanity_check->ampe_frame == SELFPROT_ACTION_MESH_PEERING_CONFIRM2))) {
26181 offset = dissect_mcs_set(tree, pinfo, tvb, offset, true1, false0);
26182 } else {
26183 proto_tree_add_item(tree, hf_ieee80211_ht_operation_mcsset_reserved,
26184 tvb, offset, 16, ENC_NA0x00000000);
26185 offset += 16;
26186 }
26187
26188 return offset;
26189}
26190
26191static int
26192dissect_wapi_param_set(tvbuff_t *tvb, packet_info *pinfo,
26193 proto_tree *tree, int offset, uint32_t tag_len, proto_item *ti_len,
26194 proto_item *ti, int ftype)
26195{
26196 /* Parse the WAPI Parameter Set IE Here*/
26197 proto_item *item;
26198 proto_tree *subtree;
26199 uint16_t loop_cnt, version, akm_cnt = 1, ucast_cnt = 1, bkid_cnt = 1;
26200 uint8_t akm_suite_type = 0, ucast_cipher_type = 0, mcast_cipher_type = 0;
26201 static int * const ieee80211_tag_wapi_param_set[] = {
26202 &hf_ieee80211_tag_wapi_param_set_capab_preauth,
26203 &hf_ieee80211_tag_wapi_param_set_capab_rsvd,
26204 NULL((void*)0)
26205 };
26206
26207 version = tvb_get_letohs(tvb, offset);
26208 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26209 offset += 2;
26210
26211 /*MIN: 2 + (2+4)+ (2+4) + 4 + 2 + 0 (BKID CNT and LIST) =20*/
26212 if (tag_len < 20) {
26213 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
26214 "tag_len is %d, it's neither WAPI not BSS-AC-Access-Delay", tag_len);
26215 return offset;
26216 }
26217
26218 if (version != 1) {
26219 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
26220 "Version of WAPI protocol is %d, must be = 1", version);
26221 return offset;
26222 }
26223
26224 /* AKM Suites: list can't be 0*/
26225 akm_cnt = tvb_get_letohs(tvb, offset);
26226 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_akm_suite_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26227 offset += 2;
26228 if (akm_cnt != 0) {
26229 proto_item_append_text(ti, " : AKM Suite List:");
26230 for (loop_cnt = 0; loop_cnt < akm_cnt; loop_cnt++) {
26231 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_akm_tree);
26232 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
26233 offset += 3;
26234 akm_suite_type = tvb_get_uint8(tvb, offset);
26235 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26236 offset += 1;
26237 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(pinfo->pool, akm_suite_type,
26238 ieee80211_wapi_suite_type_short, "Reserved: %d"));
26239 }
26240 proto_item_append_text(ti, " /");
26241 } else {
26242 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of AKM suites is 0, must be min 1");
26243 return offset;
26244
26245 }
26246 /* Unicast Cipher Suites: list can't be 0*/
26247 ucast_cnt = tvb_get_letohs(tvb, offset);
26248 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
26249 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26250 offset += 2;
26251 if (ucast_cnt != 0) {
26252 proto_item_append_text(ti, " Unicast Cipher List:");
26253 for (loop_cnt = 0; loop_cnt < ucast_cnt; loop_cnt++) {
26254 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_ucast_tree);
26255 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
26256 offset += 3;
26257 ucast_cipher_type = tvb_get_uint8(tvb, offset);
26258 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26259 offset += 1;
26260 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(pinfo->pool, ucast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
26261 }
26262 proto_item_append_text(ti, " /");
26263 } else {
26264 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of Unicast Cipher suites is 0, must be min 1");
26265 return offset;
26266
26267 }
26268
26269 /* Multicast Cipher Suites*/
26270 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
26271 offset += 3;
26272 mcast_cipher_type = tvb_get_uint8(tvb, offset);
26273 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26274 offset += 1;
26275 proto_item_append_text(ti, " Multicast Cipher: %s", val_to_str(pinfo->pool, mcast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
26276
26277 /* WAPI capability */
26278 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_wapi_param_set_capab,
26279 ett_tag_wapi_param_set_preauth_tree, ieee80211_tag_wapi_param_set,
26280 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26281 offset += 2;
26282
26283 /* BKID List: The list can be 0
26284 * Applicable only for assoc/re-assoc
26285 */
26286 if (ftype == MGT_ASSOC_REQ0x00 || ftype == MGT_REASSOC_REQ0x02 ) {
26287 bkid_cnt = tvb_get_letohs(tvb, offset);
26288 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26289 offset += 2;
26290 if (bkid_cnt != 0) {
26291 for (loop_cnt = 0; loop_cnt < bkid_cnt; loop_cnt++) {
26292 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_list, tvb, offset, 16, ENC_NA0x00000000);
26293 offset += 16;
26294 }
26295 }
26296 }
26297 return offset;
26298}
26299
26300static int * const ieee80211_bss_max_idle_options[] = {
26301 &hf_ieee80211_tag_bss_max_idle_options_protected,
26302 &hf_ieee80211_tag_bss_idle_options_reserved,
26303 NULL((void*)0)
26304};
26305
26306static int
26307dissect_bss_max_idle_period(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26308{
26309 int offset = 0;
26310
26311 proto_tree_add_item(tree, hf_ieee80211_tag_bss_max_idle_period,
26312 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26313 offset += 2;
26314
26315 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
26316 hf_ieee80211_tag_bss_max_idle_options,
26317 ett_max_idle_period_options,
26318 ieee80211_bss_max_idle_options,
26319 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26320 offset++;
26321
26322 return offset;
26323}
26324
26325enum tfs_request_subelem_id {
26326 TFS_REQ_SUBELEM_TFS = 1,
26327 TFS_REQ_SUBELEM_VENDOR_SPECIFIC = 221
26328};
26329
26330static const value_string tfs_request_subelem_ids[] = {
26331 { TFS_REQ_SUBELEM_TFS, "TFS subelement" },
26332 { TFS_REQ_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
26333 { 0, NULL((void*)0) }
26334};
26335
26336static int
26337dissect_tfs_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26338{
26339 int tag_len = tvb_reported_length(tvb);
26340 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26341 int offset = 0;
26342 const uint8_t ids[] = {
26343 1, /* TFS Subelement */
26344 TAG_VENDOR_SPECIFIC_IE221
26345 };
26346
26347 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_id,
26348 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26349 offset++;
26350 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_delete_after_match,
26351 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26352 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_notify,
26353 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26354 offset++;
26355 if (offset + 1 >= tag_len) {
26356 expert_add_info_format(pinfo, tree, &ei_ieee80211_missing_data,
26357 "No TFS Request subelements in TFS Request");
26358 return tvb_captured_length(tvb);
26359 }
26360
26361 while (offset + 1 < tag_len) {
26362 uint8_t id, len;
26363 int s_offset, s_end;
26364
26365 id = tvb_get_uint8(tvb, offset);
26366 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_id,
26367 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26368 offset++;
26369 len = tvb_get_uint8(tvb, offset);
26370 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_len,
26371 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26372 offset++;
26373 if (offset + len > tag_len) {
26374 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
26375 "Not enough data for TFS Request subelement");
26376 return tvb_captured_length(tvb);
26377 }
26378 switch (id) {
26379 case TFS_REQ_SUBELEM_TFS:
26380 s_offset = offset;
26381 s_end = offset + len;
26382 while (s_offset < s_end) {
26383 /* TODO 1 is interpreted as TAG_SUPP_RATES, fix this! */
26384 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));
26385 if (tlen==0)
26386 break;
26387 s_offset += tlen;
26388 }
26389 break;
26390 default:
26391 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem,
26392 tvb, offset, len, ENC_NA0x00000000);
26393 break;
26394 }
26395 offset += len;
26396 }
26397
26398 if (offset < tag_len) {
26399 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
26400 tvb, offset, tag_len - offset, "Extra data after TFS Subelements");
26401 }
26402
26403 return tvb_captured_length(tvb);
26404}
26405
26406enum tfs_response_subelem_id {
26407 TFS_RESP_SUBELEM_TFS_STATUS = 1,
26408 TFS_RESP_SUBELEM_TFS = 2,
26409 TFS_RESP_SUBELEM_VENDOR_SPECIFIC = 221
26410};
26411
26412static const value_string tfs_response_subelem_ids[] = {
26413 { TFS_RESP_SUBELEM_TFS_STATUS, "TFS Status subelement" },
26414 { TFS_RESP_SUBELEM_TFS, "TFS subelement" },
26415 { TFS_RESP_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
26416 { 0, NULL((void*)0) }
26417};
26418
26419static int
26420dissect_tfs_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26421{
26422 int tag_len = tvb_reported_length(tvb);
26423 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26424 int offset = 0;
26425 const uint8_t ids[] = {
26426 1, /* TFS Status subelement*/
26427 2, /* TFS subelement */
26428 TAG_VENDOR_SPECIFIC_IE221
26429 };
26430
26431 while (offset + 3 <= tag_len) {
26432 uint8_t id, len;
26433 int s_offset, s_end;
26434
26435 id = tvb_get_uint8(tvb, offset);
26436 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_id,
26437 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26438 offset++;
26439 len = tvb_get_uint8(tvb, offset);
26440 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_len,
26441 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26442 offset++;
26443 if (offset + len > tag_len) {
26444 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
26445 "Not enough data for TFS Request subelement");
26446 return tvb_captured_length(tvb);
26447 }
26448 switch (id) {
26449 case TFS_RESP_SUBELEM_TFS_STATUS:
26450 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_status,
26451 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26452 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_id,
26453 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
26454 break;
26455 case TFS_RESP_SUBELEM_TFS:
26456 s_offset = offset;
26457 s_end = offset + len;
26458 while (s_offset < s_end) {
26459 /* TODO Element IDs 1 and 2 are misinterpreted! */
26460 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));
26461 if (tlen==0)
26462 break;
26463 s_offset += tlen;
26464 }
26465 break;
26466 default:
26467 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem,
26468 tvb, offset, len, ENC_NA0x00000000);
26469 break;
26470 }
26471
26472 offset += len;
26473 }
26474
26475 if (offset < tag_len) {
26476 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
26477 tvb, offset, tag_len - offset, "Extra data after TFS Subelements");
26478 }
26479
26480 return tvb_captured_length(tvb);
26481}
26482
26483static const value_string wnm_sleep_mode_action_types[] = {
26484 { 0, "Enter WNM-Sleep Mode" },
26485 { 1, "Exit WNM-Sleep Mode" },
26486 { 0, NULL((void*)0) }
26487};
26488
26489static const value_string wnm_sleep_mode_response_status_vals[] = {
26490 { 0, "Enter/Exit WNM-Sleep Mode Accept" },
26491 { 1, "Exit WNM-Sleep Mode Accept, GTK/IGTK update required" },
26492 { 2, "Denied. The AP is unable to perform the requested action." },
26493 { 3, "Denied temporarily. The AP is unable to perform the requested action "
26494 "at the current time. The request can be submitted again at a later time."
26495 },
26496 { 4, "Denied. Due to the pending key expiration." },
26497 { 5, "Denied. The requested action was not granted due to other WNM services "
26498 "in use by the requesting STA." },
26499 { 0, NULL((void*)0) }
26500};
26501
26502static int
26503dissect_wnm_sleep_mode(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26504{
26505 int offset = 0;
26506 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_action_type,
26507 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26508 offset++;
26509 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_response_status,
26510 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26511 offset++;
26512 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_interval,
26513 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26514 offset += 2;
26515 return offset;
26516}
26517
26518static const value_string time_adv_timing_capab_vals[] = {
26519 { 0, "No standardized external time source" },
26520 { 1, "Timestamp offset based on UTC" },
26521 { 2, "UTC time at which the TSF timer is 0" },
26522 { 0, NULL((void*)0) }
26523};
26524
26525static int
26526dissect_time_adv(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26527{
26528 int offset = 0;
26529 uint8_t capab;
26530 proto_item *item;
26531 proto_tree *subtree;
26532 struct tm tm, *now;
26533 time_t t;
26534
26535 capab = tvb_get_uint8(tvb, offset);
26536 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_timing_capab,
26537 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26538 offset += 1;
26539
26540 switch (capab) {
26541 case 1:
26542 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
26543 tvb, offset, 10, ENC_NA0x00000000);
26544 offset += 10;
26545
26546 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
26547 tvb, offset, 5, ENC_NA0x00000000);
26548 offset += 5;
26549 break;
26550 case 2:
26551 item = proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
26552 tvb, offset, 10, ENC_NA0x00000000);
26553 subtree = proto_item_add_subtree(item, ett_tag_time_adv_tree);
26554 memset(&tm, 0, sizeof(tm));
26555 tm.tm_year = tvb_get_letohs(tvb, offset) - 1900;
26556 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_year,
26557 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26558 offset += 2;
26559 tm.tm_mon = tvb_get_uint8(tvb, offset) - 1;
26560 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_month,
26561 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26562 offset += 1;
26563 tm.tm_mday = tvb_get_uint8(tvb, offset);
26564 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_day,
26565 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26566 offset += 1;
26567 tm.tm_hour = tvb_get_uint8(tvb, offset);
26568 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_hours,
26569 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26570 offset += 1;
26571 tm.tm_min = tvb_get_uint8(tvb, offset);
26572 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_minutes,
26573 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26574 offset += 1;
26575 tm.tm_sec = tvb_get_uint8(tvb, offset);
26576 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_seconds,
26577 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26578 offset += 1;
26579 proto_tree_add_item(subtree,
26580 hf_ieee80211_tag_time_adv_time_value_milliseconds,
26581 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26582 offset += 2;
26583 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_reserved,
26584 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26585 offset += 1;
26586
26587 tm.tm_isdst = -1;
26588 t = mktime(&tm);
26589 if (t != -1) {
26590 t += (time_t)(last_timestamp / 1000000);
26591 now = localtime(&t);
26592 if (now)
26593 proto_item_append_text(item,
26594 ": current time=%u-%02u-%02u %02u:%02u:%02u",
26595 now->tm_year + 1900, now->tm_mon + 1,
26596 now->tm_mday, now->tm_hour, now->tm_min,
26597 now->tm_sec);
26598 }
26599
26600 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
26601 tvb, offset, 5, ENC_NA0x00000000);
26602 offset += 5;
26603
26604 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_update_counter,
26605 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26606 offset += 1;
26607 break;
26608 }
26609
26610 return offset;
26611}
26612
26613static int
26614dissect_time_zone(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26615{
26616 int tag_len = tvb_reported_length(tvb);
26617 int offset = 0;
26618
26619 proto_tree_add_item(tree, hf_ieee80211_tag_time_zone, tvb, offset, tag_len,
26620 ENC_ASCII0x00000000);
26621 return tvb_captured_length(tvb);
26622}
26623
26624static int
26625dissect_ap_channel_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26626{
26627 int tag_len = tvb_reported_length(tvb);
26628 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26629 int offset = 0;
26630
26631 if (tag_len < 1) {
26632 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26633 "AP Channel Report length %u wrong, must be > 1", tag_len);
26634 return tvb_captured_length(tvb);
26635 }
26636
26637 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_operating_class, tvb,
26638 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26639 proto_item_append_text(field_data->item_tag, ": Operating Class %u, Channel List :", tvb_get_uint8(tvb, offset));
26640 offset += 1;
26641
26642 while (offset < tag_len)
26643 {
26644 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_channel_list, tvb, offset, 1, ENC_NA0x00000000);
26645 proto_item_append_text(field_data->item_tag, " %u,", tvb_get_uint8(tvb, offset));
26646 offset += 1;
26647 }
26648 return tvb_captured_length(tvb);
26649}
26650
26651static int
26652dissect_secondary_channel_offset_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26653{
26654 int tag_len = tvb_reported_length(tvb);
26655 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26656 int offset = 0;
26657 if (tag_len != 1) {
26658 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26659 "Secondary Channel Offset length %u wrong, must be = 1", tag_len);
26660 return 1;
26661 }
26662
26663 proto_tree_add_item(tree, hf_ieee80211_tag_secondary_channel_offset, tvb,
26664 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26665 return tvb_captured_length(tvb);
26666}
26667
26668/* RCPI (53) */
26669static int
26670dissect_rcpi_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26671{
26672 int tag_len = tvb_reported_length(tvb);
26673 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26674 int offset = 0;
26675
26676 if (tag_len != 1)
26677 {
26678 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26679 "RCPI length %u wrong, must = 1", tag_len);
26680 return 1;
26681 }
26682
26683 proto_tree_add_item(tree, hf_ieee80211_tag_rcpi, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26684 offset += 1;
26685
26686 return offset;
26687}
26688
26689/* BSS Average Access Delay element (63) */
26690static int
26691dissect_bss_avg_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26692{
26693 int tag_len = tvb_reported_length(tvb);
26694 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26695 int offset = 0;
26696 if (tag_len != 1) {
26697 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26698 "BSS Average Access Delay length %u wrong, must be = 1", tag_len);
26699 return 1;
26700 }
26701
26702 proto_tree_add_item(tree, hf_ieee80211_tag_bss_ap_avg_access_delay, tvb,
26703 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26704 return tvb_captured_length(tvb);
26705}
26706
26707static int
26708dissect_antenna_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26709{
26710 int tag_len = tvb_reported_length(tvb);
26711 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26712 int offset = 0;
26713
26714 if (tag_len != 1) {
26715 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26716 "Antenna length %u wrong, must be = 1", tag_len);
26717 return 1;
26718 }
26719
26720 proto_tree_add_item(tree, hf_ieee80211_tag_antenna_id, tvb,
26721 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26722
26723 return tvb_captured_length(tvb);
26724}
26725
26726static int
26727dissect_rsni_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26728{
26729 int tag_len = tvb_reported_length(tvb);
26730 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26731 int offset = 0;
26732
26733 if (tag_len != 1) {
26734 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26735 "RSNI length %u wrong, must be = 1", tag_len);
26736 return 1;
26737 }
26738
26739 proto_tree_add_item(tree, hf_ieee80211_tag_rsni, tvb,
26740 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26741
26742 return tvb_captured_length(tvb);
26743}
26744
26745static int
26746dissect_measurement_pilot_trans_ie(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26747{
26748 int tag_len = tvb_reported_length(tvb);
26749 int offset = 0;
26750 const uint8_t ids[] = { TAG_VENDOR_SPECIFIC_IE221 };
26751
26752 /* The tag len can be 1 or more if there are sub-elements */
26753
26754 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
26755 1, ENC_NA0x00000000);
26756
26757 tag_len--;
26758 offset++;
26759
26760 /* Also handle the optional sub-elements */
26761
26762 if (tag_len > 0) {
26763 while (tag_len > 0) {
26764 uint8_t elt_len;
26765
26766 if (tvb_reported_length_remaining(tvb, offset) < 2) {
26767 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_bad_length,
26768 tvb, offset, tag_len - offset,
26769 "Remaining data does not include the tag length");
26770 break;
26771 }
26772 elt_len = tvb_get_uint8(tvb, offset + 1);
26773
26774 if(add_tagged_field(pinfo, tree, tvb, offset + 2, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
26775 /* TODO: Add an expert info here and skip the field. */
26776 break;
26777 }
26778
26779 tag_len -= elt_len + 2;
26780 offset += elt_len + 2;
26781 }
26782 }
26783
26784 return tvb_captured_length(tvb);
26785}
26786
26787static int
26788dissect_bss_available_admission_capacity_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26789{
26790 int tag_len = tvb_reported_length(tvb);
26791 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26792 int offset = 0;
26793 uint16_t bitmask;
26794 static int * const ieee80211_tag_bss_avb_adm_cap_bitmask[] = {
26795 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
26796 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
26797 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
26798 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
26799 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
26800 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
26801 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
26802 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
26803 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
26804 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
26805 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
26806 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
26807 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
26808 NULL((void*)0)
26809 };
26810
26811 if (tag_len < 2) {
26812 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26813 "BSS Available Admission Capacity length %u wrong, must > = 2", tag_len);
26814 return offset;
26815 }
26816
26817 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
26818 ett_tag_bss_bitmask_tree, ieee80211_tag_bss_avb_adm_cap_bitmask,
26819 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26820 bitmask = tvb_get_letohs(tvb, offset);
26821 offset += 2;
26822
26823 if(bitmask & BSS_BITMASK_UP00x0001)
26824 {
26825 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up0, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26826 offset += 2;
26827 }
26828 if(bitmask & BSS_BITMASK_UP10x0002)
26829 {
26830 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up1, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26831 offset += 2;
26832 }
26833 if(bitmask & BSS_BITMASK_UP20x0004)
26834 {
26835 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up2, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26836 offset += 2;
26837 }
26838 if(bitmask & BSS_BITMASK_UP30x0008)
26839 {
26840 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up3, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26841 offset += 2;
26842 }
26843 if(bitmask & BSS_BITMASK_UP40x0010)
26844 {
26845 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up4, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26846 offset += 2;
26847 }
26848 if(bitmask & BSS_BITMASK_UP50x0020)
26849 {
26850 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up5, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26851 offset += 2;
26852 }
26853 if(bitmask & BSS_BITMASK_UP60x0040)
26854 {
26855 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up6, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26856 offset += 2;
26857 }
26858 if(bitmask & BSS_BITMASK_UP70x0080)
26859 {
26860 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up7, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26861 offset += 2;
26862 }
26863 if(bitmask & BSS_BITMASK_AC00x0100)
26864 {
26865 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac0, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26866 offset += 2;
26867 }
26868 if(bitmask & BSS_BITMASK_AC10x0200)
26869 {
26870 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac1, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26871 offset += 2;
26872 }
26873 if(bitmask & BSS_BITMASK_AC20x0400)
26874 {
26875 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac2, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26876 offset += 2;
26877 }
26878 if(bitmask & BSS_BITMASK_AC30x0800)
26879 {
26880 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac3, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26881 offset += 2;
26882 }
26883 return offset;
26884}
26885
26886static int
26887dissect_bss_ac_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo,
26888 proto_tree *tree, int offset, uint32_t tag_len, proto_item *ti_len)
26889{
26890
26891 if (tag_len != 4) {
26892 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
26893 "BSS AC Access Delay length %u wrong, must = 4", tag_len);
26894 return offset;
26895 }
26896
26897 /* TODO: Display the scaled representation of the average
26898 medium access delay (a big (precalculated) value_string ?)
26899 See 8.4.2.46 BSS AC Access Delay element ... */
26900
26901 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_be, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26902 offset += 1;
26903 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_bk, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26904 offset += 1;
26905 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vi, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26906 offset += 1;
26907 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vo, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26908 offset += 1;
26909
26910 return offset;
26911}
26912
26913/* RM Enabled Capabilities (70) */
26914static int
26915dissect_rm_enabled_capabilities_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26916{
26917 int tag_len = tvb_reported_length(tvb);
26918 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26919 int offset = 0;
26920 proto_item *ti_ex_cap;
26921 static int * const ieee80211_tag_rm_enabled_capabilities_octet1[] = {
26922 &hf_ieee80211_tag_rm_enabled_capabilities_b0,
26923 &hf_ieee80211_tag_rm_enabled_capabilities_b1,
26924 &hf_ieee80211_tag_rm_enabled_capabilities_b2,
26925 &hf_ieee80211_tag_rm_enabled_capabilities_b3,
26926 &hf_ieee80211_tag_rm_enabled_capabilities_b4,
26927 &hf_ieee80211_tag_rm_enabled_capabilities_b5,
26928 &hf_ieee80211_tag_rm_enabled_capabilities_b6,
26929 &hf_ieee80211_tag_rm_enabled_capabilities_b7,
26930 NULL((void*)0)
26931 };
26932
26933 static int * const ieee80211_tag_rm_enabled_capabilities_octet2[] = {
26934 &hf_ieee80211_tag_rm_enabled_capabilities_b8,
26935 &hf_ieee80211_tag_rm_enabled_capabilities_b9,
26936 &hf_ieee80211_tag_rm_enabled_capabilities_b10,
26937 &hf_ieee80211_tag_rm_enabled_capabilities_b11,
26938 &hf_ieee80211_tag_rm_enabled_capabilities_b12,
26939 &hf_ieee80211_tag_rm_enabled_capabilities_b13,
26940 &hf_ieee80211_tag_rm_enabled_capabilities_b14,
26941 &hf_ieee80211_tag_rm_enabled_capabilities_b15,
26942 NULL((void*)0)
26943 };
26944
26945 static int * const ieee80211_tag_rm_enabled_capabilities_octet3[] = {
26946 &hf_ieee80211_tag_rm_enabled_capabilities_b16,
26947 &hf_ieee80211_tag_rm_enabled_capabilities_b17,
26948 &hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
26949 &hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
26950 NULL((void*)0)
26951 };
26952
26953 static int * const ieee80211_tag_rm_enabled_capabilities_octet4[] = {
26954 &hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
26955 &hf_ieee80211_tag_rm_enabled_capabilities_b27,
26956 &hf_ieee80211_tag_rm_enabled_capabilities_b28,
26957 &hf_ieee80211_tag_rm_enabled_capabilities_b29,
26958 &hf_ieee80211_tag_rm_enabled_capabilities_b30,
26959 &hf_ieee80211_tag_rm_enabled_capabilities_b31,
26960 NULL((void*)0)
26961 };
26962
26963 static int * const ieee80211_tag_rm_enabled_capabilities_octet5[] = {
26964 &hf_ieee80211_tag_rm_enabled_capabilities_b32,
26965 &hf_ieee80211_tag_rm_enabled_capabilities_b33,
26966 &hf_ieee80211_tag_rm_enabled_capabilities_b34,
26967 &hf_ieee80211_tag_rm_enabled_capabilities_b35,
26968 &hf_ieee80211_tag_rm_enabled_capabilities_o5,
26969 NULL((void*)0)
26970 };
26971
26972 if (tag_len != 5)
26973 {
26974 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "RM Enabled Capabilities length %u wrong, must = 5", tag_len);
26975 return 1;
26976 }
26977 proto_item_append_text(field_data->item_tag, " (%d octets)", tag_len);
26978
26979 /* RM Enabled Capability octet 1 */
26980 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26981 ett_tag_rm_cap1, ieee80211_tag_rm_enabled_capabilities_octet1,
26982 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26983 proto_item_append_text(ti_ex_cap, " (octet 1)");
26984 offset += 1;
26985
26986 /* RM Enabled Capability octet 2 */
26987 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26988 ett_tag_rm_cap2, ieee80211_tag_rm_enabled_capabilities_octet2,
26989 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26990 proto_item_append_text(ti_ex_cap, " (octet 2)");
26991 offset += 1;
26992
26993 /* RM Enabled Capability octet 3 */
26994 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26995 ett_tag_rm_cap3, ieee80211_tag_rm_enabled_capabilities_octet3,
26996 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26997 proto_item_append_text(ti_ex_cap, " (octet 3)");
26998 offset += 1;
26999
27000 /* RM Enabled Capability octet 4 */
27001 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
27002 ett_tag_rm_cap4, ieee80211_tag_rm_enabled_capabilities_octet4,
27003 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27004 proto_item_append_text(ti_ex_cap, " (octet 4)");
27005 offset += 1;
27006
27007 /* RM Enabled Capability octet 5 */
27008 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
27009 ett_tag_rm_cap5, ieee80211_tag_rm_enabled_capabilities_octet5,
27010 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27011 proto_item_append_text(ti_ex_cap, " (octet 5)");
27012 offset += 1;
27013
27014 return offset;
27015}
27016
27017/* Multiple BSSID (71) */
27018enum multiple_bssid_subelem_id {
27019 MULTIPLE_BSSID_SUBELEM_NO_BSSID_PROFILE = 0,
27020 MULTIPLE_BSSID_SUBELEM_VENDOR_SPECIFIC = 221
27021};
27022
27023static const value_string multiple_bssid_subelem_ids[] = {
27024 { MULTIPLE_BSSID_SUBELEM_NO_BSSID_PROFILE, "Nontransmitted BSSID Profile" },
27025 { MULTIPLE_BSSID_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific" },
27026 { 0, NULL((void*)0) }
27027};
27028
27029static int
27030dissect_multiple_bssid_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27031{
27032 unsigned tag_len = tvb_reported_length(tvb);
27033 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27034 unsigned offset = 0;
27035 uint8_t sub_tag_id, sub_tag_len;
27036 const char *sub_tag_name;
27037 proto_tree *sub_tag_tree;
27038 const uint8_t valid_ids[] = { TAG_VENDOR_SPECIFIC_IE221 };
27039 const uint8_t invalid_ids[] = { TAG_TIM5, TAG_DS_PARAMETER3, TAG_IBSS_PARAMETER6,
27040 TAG_COUNTRY_INFO7, TAG_CHANNEL_SWITCH_ANN37, TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60,
27041 TAG_WIDE_BW_CHANNEL_SWITCH194, TAG_TX_PWR_ENVELOPE195, TAG_SUPPORTED_OPERATING_CLASSES59, TAG_IBSS_DFS41,
27042 TAG_ERP_INFO42, TAG_ERP_INFO_OLD47, TAG_HT_CAPABILITY45, TAG_HT_OPERATION61, TAG_VHT_CAPABILITY191,
27043 TAG_VHT_OPERATION192, TAG_S1G_BEACON_COMPATIBILITY213, TAG_SHORT_BEACON_INTERVAL214,
27044 TAG_S1G_CAPABILITIES217, TAG_S1G_OPERATION232 };
27045 const uint8_t invalid_ext_ids[] = { ETAG_HE_CAPABILITIES35, ETAG_HE_OPERATION36,
27046 ETAG_HE_6GHZ_BAND_CAPABILITIES59, ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42, ETAG_SPATIAL_REUSE_PARAMETER_SET39 };
27047 uint32_t s_offset, s_end;
27048
27049 if (tag_len < 1)
27050 {
27051 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);
27052 return 1;
27053 }
27054
27055 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27056 offset++;
27057
27058 /* Optional sub-elements */
27059
27060 while (offset + 1 < tag_len) {
27061 sub_tag_id = tvb_get_uint8(tvb, offset);
27062 sub_tag_len = tvb_get_uint8(tvb, offset + 1);
27063 sub_tag_name = val_to_str_const(sub_tag_id, multiple_bssid_subelem_ids, "Unknown");
27064
27065 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);
27066
27067 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27068 offset += 1;
27069
27070 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_len, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27071 offset += 1;
27072
27073 if (offset + sub_tag_len > tag_len) {
27074 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Not enough data for subelement");
27075 break;
27076 }
27077
27078 switch (sub_tag_id)
27079 {
27080 case MULTIPLE_BSSID_SUBELEM_NO_BSSID_PROFILE:
27081 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_nontrans_profile, tvb, offset, sub_tag_len, ENC_NA0x00000000);
27082
27083 s_offset = offset;
27084 s_end = offset + sub_tag_len;
27085 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
27086 while (s_offset < s_end) {
27087 int tlen = add_tagged_field_with_validation(pinfo, sub_tag_tree, tvb, s_offset, 0,
27088 invalid_ids, G_N_ELEMENTS(invalid_ids)(sizeof (invalid_ids) / sizeof ((invalid_ids)[0])), true1,
27089 invalid_ext_ids, G_N_ELEMENTS(invalid_ext_ids)(sizeof (invalid_ext_ids) / sizeof ((invalid_ext_ids)[0])), true1, NULL((void*)0));
27090 if (tlen==0)
27091 break;
27092 s_offset += tlen;
27093 }
27094
27095 break;
27096
27097 case MULTIPLE_BSSID_SUBELEM_VENDOR_SPECIFIC:
27098 /*
27099 * add_tagged_field will insert expert info if there is a problem so
27100 * we ignore the return value.
27101 */
27102 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));
27103 break;
27104
27105 default:
27106 /* RESERVED */
27107 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_reserved, tvb, offset, sub_tag_len, ENC_NA0x00000000);
27108 break;
27109 }
27110
27111 offset += sub_tag_len;
27112
27113 }
27114
27115 if (offset < tag_len) {
27116 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
27117 tvb, offset, tag_len - offset, "Extra data after subelements");
27118 }
27119
27120 return tvb_captured_length(tvb);
27121}
27122
27123/* 20/40 BSS Coexistence (72) */
27124static int
27125dissect_20_40_bss_coexistence(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27126{
27127 int tag_len = tvb_reported_length(tvb);
27128 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27129 int offset = 0;
27130 static int * const ieee80211_20_40_bss_coexistence_fields[] = {
27131 &hf_ieee80211_tag_20_40_bc_information_request,
27132 &hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant,
27133 &hf_ieee80211_tag_20_40_bc_20_mhz_bss_width_request,
27134 &hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request,
27135 &hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant,
27136 &hf_ieee80211_tag_20_40_bc_reserved,
27137 NULL((void*)0)
27138 };
27139
27140 if (tag_len != 1)
27141 {
27142 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);
27143 return 1;
27144 }
27145
27146 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_20_40_bc,
27147 ett_tag_20_40_bc, ieee80211_20_40_bss_coexistence_fields,
27148 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27149
27150 offset += 1;
27151
27152 return offset;
27153}
27154
27155/* 20/40 BSS Intolerant Channel Report (73) */
27156static int
27157dissect_20_40_bss_intolerant(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27158{
27159 proto_item *intolerant_item;
27160 proto_tree *intolerant_tree;
27161 int tag_len = tvb_reported_length(tvb);
27162 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27163 int offset = 0;
27164 int channel_report_size = tag_len - 1; // minus regulator_class field
27165 int i;
27166
27167 if (tag_len < 2) {
27168 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
27169 "20/40 BSS Intolerant Channel Report length %u wrong, must > 1", tag_len);
27170 }
27171
27172 proto_tree_add_item(tree, hf_ieee80211_tag_intolerant_operating_class, tvb, offset, 1, ENC_NA0x00000000);
27173 offset += 1;
27174
27175 intolerant_item = proto_tree_add_item(tree, hf_ieee80211_tag_intolerant_channel_list, tvb, offset, channel_report_size, ENC_NA0x00000000);
27176 intolerant_tree = proto_item_add_subtree(intolerant_item, ett_tag_intolerant_tree);
27177 for (i = 0; i < channel_report_size; i++)
27178 {
27179 proto_tree_add_item(intolerant_tree, hf_ieee80211_tag_intolerant_channel, tvb, offset, 1, ENC_NA0x00000000);
27180 offset += 1;
27181 }
27182
27183 return offset;
27184}
27185
27186static int
27187dissect_ht_capability_ie_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
27188 uint32_t tag_len, proto_item *ti_len, bool_Bool vendorspecific)
27189{
27190 proto_item *cap_item, *ti;
27191 proto_tree *cap_tree;
27192 static int * const ieee80211_ht[] = {
27193 &hf_ieee80211_ht_ldpc_coding,
27194 &hf_ieee80211_ht_chan_width,
27195 &hf_ieee80211_ht_sm_pwsave,
27196 &hf_ieee80211_ht_green,
27197 &hf_ieee80211_ht_short20,
27198 &hf_ieee80211_ht_short40,
27199 &hf_ieee80211_ht_tx_stbc,
27200 &hf_ieee80211_ht_rx_stbc,
27201 &hf_ieee80211_ht_reserved_b10,
27202 &hf_ieee80211_ht_max_amsdu,
27203 &hf_ieee80211_ht_dss_cck_40,
27204 &hf_ieee80211_ht_reserved_b13,
27205 &hf_ieee80211_ht_40_mhz_intolerant,
27206 &hf_ieee80211_ht_reserved_b15,
27207 NULL((void*)0)
27208 };
27209
27210 static int * const ieee80211_htex[] = {
27211 &hf_ieee80211_htex_reserved_b0_b7,
27212 &hf_ieee80211_htex_mcs,
27213 &hf_ieee80211_htex_htc_support,
27214 &hf_ieee80211_htex_rd_responder,
27215 &hf_ieee80211_htex_reserved_b12_b15,
27216 NULL((void*)0)
27217 };
27218
27219 static int * const ieee80211_txbf[] = {
27220 &hf_ieee80211_txbf_cap,
27221 &hf_ieee80211_txbf_rcv_ssc,
27222 &hf_ieee80211_txbf_tx_ssc,
27223 &hf_ieee80211_txbf_rcv_ndp,
27224 &hf_ieee80211_txbf_tx_ndp,
27225 &hf_ieee80211_txbf_impl_txbf,
27226 &hf_ieee80211_txbf_calib,
27227 &hf_ieee80211_txbf_expl_csi,
27228 &hf_ieee80211_txbf_expl_uncomp_fm,
27229 &hf_ieee80211_txbf_expl_comp_fm,
27230 &hf_ieee80211_txbf_expl_bf_csi,
27231 &hf_ieee80211_txbf_expl_uncomp_fm_feed,
27232 &hf_ieee80211_txbf_expl_comp_fm_feed,
27233 &hf_ieee80211_txbf_min_group,
27234 &hf_ieee80211_txbf_csi_num_bf_ant,
27235 &hf_ieee80211_txbf_uncomp_sm_bf_ant,
27236 &hf_ieee80211_txbf_comp_sm_bf_ant,
27237 &hf_ieee80211_txbf_csi_max_rows_bf,
27238 &hf_ieee80211_txbf_chan_est,
27239 &hf_ieee80211_txbf_resrv,
27240 NULL((void*)0)
27241 };
27242
27243 static int * const ieee80211_antsel[] = {
27244 &hf_ieee80211_antsel_b0,
27245 &hf_ieee80211_antsel_b1,
27246 &hf_ieee80211_antsel_b2,
27247 &hf_ieee80211_antsel_b3,
27248 &hf_ieee80211_antsel_b4,
27249 &hf_ieee80211_antsel_b5,
27250 &hf_ieee80211_antsel_b6,
27251 &hf_ieee80211_antsel_b7,
27252 NULL((void*)0)
27253 };
27254
27255 if (tag_len != 26) {
27256 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
27257 "HT Capabilities IE length %u wrong, must be = 26", tag_len);
27258 return (offset > 0) ? offset : 1;
27259 }
27260
27261 if (wlan_ignore_draft_ht && vendorspecific)
27262 return (offset > 0) ? offset : 1;
27263
27264 /* 2 byte HT Capabilities Info*/
27265 if (vendorspecific)
27266 {
27267 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_vs_cap,
27268 ett_ht_cap_tree, ieee80211_ht,
27269 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27270 }
27271 else
27272 {
27273 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_cap,
27274 ett_ht_cap_tree, ieee80211_ht,
27275 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27276 }
27277 offset += 2;
27278
27279 /* 1 byte A-MPDU Parameters */
27280 if (vendorspecific)
27281 {
27282 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27283 } else
27284 {
27285 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27286 }
27287 cap_tree = proto_item_add_subtree(cap_item, ett_ampduparam_tree);
27288 ti = proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27289 proto_item_append_text(ti, " (%04.0f[Bytes])", pow(2, 13+(tvb_get_uint8(tvb, offset) & 0x3))-1);
27290 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu_start_spacing, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27291 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27292 offset += 1;
27293
27294 /* 16 byte MCS set */
27295 offset = dissect_mcs_set(tree, pinfo, tvb, offset, false0, vendorspecific);
27296
27297
27298 /* 2 byte HT Extended Capabilities */
27299 if (vendorspecific)
27300 {
27301 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_htex_vs_cap,
27302 ett_htex_cap_tree, ieee80211_htex,
27303 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27304 } else {
27305 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_htex_cap,
27306 ett_htex_cap_tree, ieee80211_htex,
27307 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27308 }
27309 offset += 2;
27310
27311
27312 /* 4 byte TxBF capabilities */
27313 if (vendorspecific)
27314 {
27315 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_txbf_vs,
27316 ett_txbf_tree, ieee80211_txbf,
27317 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27318 } else {
27319 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_txbf,
27320 ett_txbf_tree, ieee80211_txbf,
27321 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27322 }
27323 offset += 4;
27324
27325 /* 1 byte Antenna Selection (ASEL) capabilities */
27326 if (vendorspecific)
27327 {
27328 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_antsel_vs,
27329 ett_antsel_tree, ieee80211_antsel,
27330 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27331 }
27332 else
27333 {
27334 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_antsel,
27335 ett_antsel_tree, ieee80211_antsel,
27336 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27337 }
27338 offset += 1;
27339
27340 return offset;
27341}
27342
27343static int
27344dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27345{
27346 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27347
27348 return dissect_ht_capability_ie_common(tvb, pinfo, tree, 0, tvb_reported_length(tvb),
27349 field_data->item_tag_length, false0);
27350}
27351
27352static int
27353dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
27354 uint32_t tag_len, proto_item *ti_len)
27355{
27356 static int * const ieee80211_hta1[] = {
27357 &hf_ieee80211_hta_ext_chan_offset,
27358 &hf_ieee80211_hta_rec_tx_width,
27359 &hf_ieee80211_hta_rifs_mode,
27360 &hf_ieee80211_hta_controlled_access,
27361 &hf_ieee80211_hta_service_interval,
27362 NULL((void*)0)
27363 };
27364
27365 static int * const ieee80211_hta2[] = {
27366 &hf_ieee80211_hta_operating_mode,
27367 &hf_ieee80211_hta_non_gf_devices,
27368 NULL((void*)0)
27369 };
27370
27371 static int * const ieee80211_hta3[] = {
27372 &hf_ieee80211_hta_basic_stbc_mcs,
27373 &hf_ieee80211_hta_dual_stbc_protection,
27374 &hf_ieee80211_hta_secondary_beacon,
27375 &hf_ieee80211_hta_lsig_txop_protection,
27376 &hf_ieee80211_hta_pco_active,
27377 &hf_ieee80211_hta_pco_phase,
27378 NULL((void*)0)
27379 };
27380
27381 if (tag_len != 22) {
27382 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
27383 "Tag length %u wrong, must be = 22", tag_len);
27384 return offset;
27385 }
27386
27387 if (wlan_ignore_draft_ht)
27388 return offset;
27389
27390 /* 1 HT Control Channel */
27391 proto_tree_add_item(tree, hf_ieee80211_hta_cc, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27392 offset += 1;
27393
27394 /* 1 byte HT additional capabilities */
27395 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap1,
27396 ett_hta_cap_tree, ieee80211_hta1,
27397 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27398 offset += 1;
27399
27400 /* 2 byte HT additional capabilities */
27401 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap2,
27402 ett_hta_cap1_tree, ieee80211_hta2,
27403 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27404 offset += 2;
27405
27406 /* 2 byte HT additional capabilities */
27407 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap2,
27408 ett_hta_cap2_tree, ieee80211_hta3,
27409 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27410 offset += 2;
27411
27412 /* 16 byte Supported MCS set */
27413 offset = dissect_mcs_set(tree, pinfo, tvb, offset, false0, true1);
27414
27415 return offset;
27416}
27417
27418/* 802.11n-D1.10 and 802.11n-D2.0, 7.1.3.5a */
27419
27420/*
27421 * IEEE 802.11-2016 section 9.2.4.6 "HT Control field" says that B0 of
27422 * the field is 0 for HT and 1 for VHT, bits B1 through B29 are the
27423 * "HT Control Middle" subfield, the format of which differs between
27424 * HT and VHT, bit B30 is the "AC Constraint" subfield, and bit B31
27425 * is the "RDG/More PPDU" subfield.
27426 *
27427 * 802.11ax changes the meaning of the first two bits:
27428 *
27429 * B0 = 0 means High Throughput
27430 * B0 = 1, B1 = 0 means Very High Throughput
27431 * B0 = 1, B1 = 1 means High Efficiency
27432 *
27433 * taking a reserved bit from the VHT version of the "HT Control Middle"
27434 * field.
27435 */
27436#define A_CONTROL_TRS0 0
27437#define A_CONTROL_OM1 1
27438#define A_CONTROL_HLA2 2
27439#define A_CONTROL_BSR3 3
27440#define A_CONTROL_UPH4 4
27441#define A_CONTROL_BQR5 5
27442#define A_CONTROL_CCI6 6
27443#define A_CONTROL_EHT_OM7 7
27444#define A_CONTROL_SRS8 8
27445#define A_CONTROL_AAR9 9
27446#define A_CONTROL_ONES15 15
27447
27448static const value_string a_control_control_id_vals[] = {
27449 { A_CONTROL_TRS0, "Triggered response scheduling" },
27450 { A_CONTROL_OM1, "Operating mode" },
27451 { A_CONTROL_HLA2, "HE link adaptation" },
27452 { A_CONTROL_BSR3, "Buffer status report" },
27453 { A_CONTROL_UPH4, "UL power headroom" },
27454 { A_CONTROL_BQR5, "Bandwidth query report" },
27455 { A_CONTROL_CCI6, "Command Control Indication" },
27456 { A_CONTROL_EHT_OM7, "EHT operating mode" },
27457 { A_CONTROL_SRS8, "Single response scheduling" },
27458 { A_CONTROL_AAR9, "AP assistance request" },
27459 { A_CONTROL_ONES15, "Ones need expansion surely" },
27460 { 0, NULL((void*)0) }
27461};
27462
27463/*
27464 * Print the UL target RSSI field as per the spec.
27465 * 0->30 map to -90 to -30 dBm.
27466 * 31 maps to Max ransmit power
27467 */
27468static void
27469ul_target_rssi_base_custom(char *result, uint32_t target_rssi)
27470{
27471 if (target_rssi <= 30) {
27472 snprintf(result, ITEM_LABEL_LENGTH240, "%ddBm", -90 + (2 * target_rssi));
27473 } else if (target_rssi == 31) {
27474 snprintf(result, ITEM_LABEL_LENGTH240, "Max transmit power");
27475 }
27476}
27477
27478static void
27479dissect_a_control_padding(proto_tree *tree, tvbuff_t *tvb, int offset,
27480 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27481{
27482 proto_tree *trs_tree = NULL((void*)0);
27483 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27484 unsigned offset_in_bits = (offset << 3) + start_bit;
27485
27486 /*
27487 * We isolated the bits and moved them to the bottom ... so display them
27488 */
27489 trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27490 ett_ieee80211_a_control_padding,
27491 NULL((void*)0), "Padding: 0x%x(%u bits)", the_bits, 32 - start_bit);
27492
27493 proto_tree_add_bits_item(trs_tree, hf_ieee80211_he_a_control_padding, tvb, offset_in_bits,
27494 32 - start_bit, ENC_LITTLE_ENDIAN0x80000000);
27495}
27496
27497static void
27498dissect_a_control_ones(proto_tree *tree, tvbuff_t *tvb, int offset,
27499 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27500{
27501 proto_tree *trs_tree = NULL((void*)0);
27502 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27503
27504 /*
27505 * We isolated the bits and moved them to the bottom ... so display them
27506 */
27507 trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27508 ett_ieee80211_a_control_ones,
27509 NULL((void*)0), "ONES: 0x%0x", the_bits);
27510
27511 proto_tree_add_uint(trs_tree, hf_ieee80211_he_a_control_ones, tvb,
27512 offset, 4, the_bits);
27513}
27514
27515static void
27516dissect_a_control_trs(proto_tree *tree, tvbuff_t *tvb, int offset,
27517 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27518{
27519 proto_tree *trs_tree = NULL((void*)0);
27520 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27521
27522 /*
27523 * We isolated the bits and moved them to the bottom ... so display them
27524 */
27525 trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27526 ett_ieee80211_triggered_response_schedule,
27527 NULL((void*)0), "TRS Control: 0x%08x", the_bits);
27528
27529 proto_tree_add_uint(trs_tree, hf_ieee80211_he_trs_he_tb_ppdu_len, tvb,
27530 offset, 4, the_bits);
27531 proto_tree_add_uint(trs_tree, hf_ieee80211_he_trs_ru_allocation, tvb,
27532 offset, 4, the_bits);
27533 proto_tree_add_uint(trs_tree, hf_ieee80211_he_dl_tx_power, tvb,
27534 offset, 4, the_bits);
27535 proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_target_rssi, tvb,
27536 offset, 4, the_bits);
27537 proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_mcs, tvb,
27538 offset, 4, the_bits);
27539 proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_reserved, tvb,
27540 offset, 4, the_bits);
27541}
27542
27543static void
27544dissect_a_control_om(proto_tree *tree, tvbuff_t *tvb, int offset,
27545 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27546{
27547 proto_tree *om_tree = NULL((void*)0);
27548 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x00000FFF;
27549
27550 /*
27551 * We isolated the bits and moved them to the bottom ... so display them
27552 */
27553 om_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27554 ett_ieee80211_control_om,
27555 NULL((void*)0), "OM Control: 0x%04x", the_bits);
27556
27557 proto_tree_add_uint(om_tree, hf_ieee80211_he_om_rx_nss, tvb,
27558 offset, 4, the_bits);
27559 proto_tree_add_uint(om_tree, hf_ieee80211_he_om_channel_width, tvb,
27560 offset, 4, the_bits);
27561 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_ul_mu_disable, tvb,
27562 offset, 4, the_bits);
27563 proto_tree_add_uint(om_tree, hf_ieee80211_he_om_tx_nsts, tvb,
27564 offset, 4, the_bits);
27565 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_er_su_disable, tvb,
27566 offset, 4, the_bits);
27567 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_dl_mu_mimo_resound, tvb,
27568 offset, 4, the_bits);
27569 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_ul_mu_data_disable, tvb,
27570 offset, 4, the_bits);
27571}
27572
27573static const true_false_string he_hla_tx_bf_tfs = {
27574 "beamformed PPDU",
27575 "non-beamformed PPDU"
27576};
27577
27578static void
27579dissect_a_control_hla(proto_tree *tree, tvbuff_t *tvb, int offset,
27580 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27581{
27582 proto_tree *hla_tree = NULL((void*)0);
27583 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27584
27585 /*
27586 * We isolated the bits and moved them to the bottom ... so display them
27587 */
27588 hla_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27589 ett_ieee80211_hla_control,
27590 NULL((void*)0), "HLA Control: 0x%08x", the_bits);
27591
27592 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_unsolicited_mfb, tvb,
27593 offset, 4, the_bits);
27594 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_mrq, tvb,
27595 offset, 4, the_bits);
27596 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_nss, tvb,
27597 offset, 4, the_bits);
27598 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_he_mcs, tvb,
27599 offset, 4, the_bits);
27600 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_dcm, tvb,
27601 offset, 4, the_bits);
27602 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_ru, tvb,
27603 offset, 4, the_bits);
27604 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_bw, tvb,
27605 offset, 4, the_bits);
27606 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_msi_ppdu_type, tvb,
27607 offset, 4, the_bits);
27608 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_tx_bf, tvb,
27609 offset, 4, the_bits);
27610 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_reserved, tvb,
27611 offset, 4, the_bits);
27612}
27613
27614static void
27615dissect_a_control_bsr(proto_tree *tree, tvbuff_t *tvb, int offset,
27616 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27617{
27618 proto_tree *bsr_tree = NULL((void*)0);
27619 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27620
27621 /*
27622 * We isolated the bits and moved them to the bottom ... so display them
27623 */
27624 bsr_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27625 ett_ieee80211_buffer_status_report,
27626 NULL((void*)0), "Buffer Status Report: 0x%08x", the_bits);
27627
27628 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_aci_bitmap, tvb,
27629 offset, 4, the_bits);
27630 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_delta_tid, tvb,
27631 offset, 4, the_bits);
27632 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_aci_high, tvb,
27633 offset, 4, the_bits);
27634 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_scaling_factor, tvb,
27635 offset, 4, the_bits);
27636 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_queue_size_high, tvb,
27637 offset, 4, the_bits);
27638 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_queue_size_all, tvb,
27639 offset, 4, the_bits);
27640}
27641
27642static void
27643dissect_a_control_uph(proto_tree *tree, tvbuff_t *tvb, int offset,
27644 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27645{
27646 proto_tree *uph_tree = NULL((void*)0);
27647 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000000FF;
27648
27649 /*
27650 * We isolated the bits and moved them to the bottom ... so display them
27651 */
27652 uph_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27653 ett_ieee80211_control_uph,
27654 NULL((void*)0), "UPH Control: 0x%02x", the_bits);
27655
27656 proto_tree_add_uint(uph_tree, hf_ieee80211_he_uph_ul_power_headroom, tvb,
27657 offset, 4, the_bits);
27658 proto_tree_add_boolean(uph_tree, hf_ieee80211_he_uph_ul_min_transmit_power_flag,
27659 tvb, offset, 4, the_bits);
27660 proto_tree_add_uint(uph_tree, hf_ieee80211_he_uph_reserved,
27661 tvb, offset, 4, the_bits);
27662}
27663
27664static void
27665dissect_a_control_bqr(proto_tree *tree, tvbuff_t *tvb, int offset,
27666 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27667{
27668 proto_tree *bqr_tree = NULL((void*)0);
27669 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FF;
27670
27671 /*
27672 * We isolated the bits and moved them to the bottom ... so display them
27673 */
27674 bqr_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27675 ett_ieee80211_buffer_control_bqr,
27676 NULL((void*)0), "BQR Control: 0x%04x", the_bits);
27677
27678 proto_tree_add_uint(bqr_tree, hf_ieee80211_he_btc_avail_chan, tvb,
27679 offset, 4, the_bits);
27680 proto_tree_add_uint(bqr_tree, hf_ieee80211_he_btc_reserved, tvb,
27681 offset, 4, the_bits);
27682}
27683
27684static void
27685dissect_a_control_cci(proto_tree *tree, tvbuff_t *tvb, int offset,
27686 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27687{
27688 proto_tree *cci_tree = NULL((void*)0);
27689 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000000FF;
27690
27691 /*
27692 * We isolated the bits and moved them to the bottom ... so display them
27693 */
27694 cci_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27695 ett_ieee80211_control_cci,
27696 NULL((void*)0), "Command and status: 0x%02x", the_bits);
27697
27698 proto_tree_add_boolean(cci_tree, hf_ieee80211_he_cci_ac_constraint, tvb,
27699 offset, 4, the_bits);
27700 proto_tree_add_boolean(cci_tree, hf_ieee80211_he_cci_rdg_more_ppdu, tvb,
27701 offset, 4, the_bits);
27702 proto_tree_add_boolean(cci_tree, hf_ieee80211_he_cci_sr_ppdu_indic, tvb,
27703 offset, 4, the_bits);
27704 proto_tree_add_uint(cci_tree, hf_ieee80211_he_cci_reserved, tvb,
27705 offset, 4, the_bits);
27706}
27707
27708static void
27709dissect_a_control_eht_om(proto_tree *tree, tvbuff_t *tvb, int offset,
27710 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27711{
27712 proto_tree *eht_om_tree = NULL((void*)0);
27713 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x0000003F;
27714
27715 /*
27716 * We isolated the bits and moved them to the bottom ... so display them
27717 */
27718 eht_om_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27719 ett_ieee80211_control_eht_om,
27720 NULL((void*)0), "EHT operating mode: 0x%02x", the_bits);
27721 proto_tree_add_boolean(eht_om_tree, hf_ieee80211_he_eht_om_rx_nss_ext, tvb,
27722 offset, 4, the_bits);
27723 proto_tree_add_boolean(eht_om_tree, hf_ieee80211_he_eht_om_chan_w_ext, tvb,
27724 offset, 4, the_bits);
27725 proto_tree_add_boolean(eht_om_tree, hf_ieee80211_he_eht_om_tx_nsts_ext, tvb,
27726 offset, 4, the_bits);
27727 proto_tree_add_uint(eht_om_tree, hf_ieee80211_he_eht_om_reserved, tvb,
27728 offset, 4, the_bits);
27729
27730}
27731
27732static void
27733dissect_a_control_srs(proto_tree *tree, tvbuff_t *tvb, int offset,
27734 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27735{
27736 proto_tree *srs_tree = NULL((void*)0);
27737 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000003FF;
27738
27739 srs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27740 ett_ieee80211_control_srs,
27741 NULL((void*)0), "Simple response scheduling: 0x%02x",
27742 the_bits);
27743 proto_tree_add_uint(srs_tree, hf_ieee80211_he_srs_ppdu_resp_dur, tvb,
27744 offset, 4, the_bits);
27745 proto_tree_add_uint(srs_tree, hf_ieee80211_he_srs_reserved, tvb, offset, 4,
27746 the_bits);
27747}
27748
27749static void
27750dissect_a_control_aar(proto_tree *tree, tvbuff_t *tvb, int offset,
27751 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27752{
27753 proto_tree *aar_tree = NULL((void*)0);
27754 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000FFFFF;
27755
27756 aar_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27757 ett_ieee80211_control_aar,
27758 NULL((void*)0), "AP assistance request: 0x%02x",
27759 the_bits);
27760 proto_tree_add_uint(aar_tree, hf_ieee80211_he_aar_assisted_ap_bitmap, tvb,
27761 offset, 4, the_bits);
27762 proto_tree_add_uint(aar_tree, hf_ieee80211_he_aar_reserved, tvb, offset, 4,
27763 the_bits);
27764}
27765
27766static void
27767dissect_ht_control(packet_info* pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
27768{
27769 proto_item *ti;
27770 proto_tree *htc_tree, *lac_subtree, *mfb_subtree;
27771 uint32_t htc;
27772 bool_Bool is_s1g = sta_is_s1g(pinfo);
27773
27774 htc = tvb_get_letohl(tvb, offset);
27775
27776 ti = proto_tree_add_item(tree, hf_ieee80211_htc, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27777 htc_tree = proto_item_add_subtree(ti, ett_htc_tree);
27778
27779 /* Check the HT vs. VHT bit. */
27780 proto_tree_add_item(htc_tree, hf_ieee80211_htc_vht, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27781 if (htc & HTC_VHT0x00000001) {
27782 /* VHT or HE */
27783 proto_tree_add_item(htc_tree, hf_ieee80211_htc_he, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27784 if (htc & HTC_HE0x00000002) {
27785 /*
27786 * We have a 30-bit field, of which the first is a 4-bit Control ID which
27787 * determines how the rest is handled. There can be multiple fields.
27788 */
27789 proto_tree *a_control_tree = NULL((void*)0);
27790 proto_item *pi = NULL((void*)0);
27791 uint8_t start_bit_offset = 2;
27792
27793 a_control_tree = proto_tree_add_subtree_format(htc_tree, tvb, offset, 4,
27794 ett_htc_he_a_control, NULL((void*)0),
27795 "Aggregate Control: 0x%0x", htc >> 2);
27796 while (start_bit_offset < 32) {
27797 /* No enough space for Control ID */
27798 if (start_bit_offset >= 28) {
27799 dissect_a_control_padding(a_control_tree, tvb, offset, htc,
27800 start_bit_offset);
27801 break;
27802 }
27803 uint8_t control_id = (htc >> start_bit_offset) & 0x0F;
27804 start_bit_offset += 4;
27805 if (control_id != 0 || start_bit_offset == 6) {
27806 pi = proto_tree_add_uint(a_control_tree, hf_ieee80211_htc_he_ctrl_id,
27807 tvb, offset, 4, control_id);
27808 proto_item_append_text(pi, ": %s",
27809 val_to_str(pinfo->pool, control_id, a_control_control_id_vals,
27810 "Reserved (%u)"));
27811 }
27812 if (start_bit_offset > 31) {
27813 expert_add_info(pinfo, a_control_tree, &ei_ieee80211_invalid_control_word);
27814 break;
27815 }
27816 switch (control_id) {
27817 case A_CONTROL_TRS0:
27818 /*
27819 * Padding looks like TRS ... so distinguish. If there are not
27820 * enough bits left it must be padding
27821 */
27822 if (start_bit_offset == 6)
27823 dissect_a_control_trs(a_control_tree, tvb, offset, htc,
27824 start_bit_offset);
27825 else
27826 dissect_a_control_padding(a_control_tree, tvb, offset, htc,
27827 start_bit_offset - 4);
27828 start_bit_offset += 26;
27829 break;
27830 case A_CONTROL_OM1:
27831 dissect_a_control_om(a_control_tree, tvb, offset, htc,
27832 start_bit_offset);
27833 start_bit_offset += 12;
27834 break;
27835 case A_CONTROL_HLA2:
27836 dissect_a_control_hla(a_control_tree, tvb, offset, htc,
27837 start_bit_offset);
27838 start_bit_offset += 26;
27839 break;
27840 case A_CONTROL_BSR3:
27841 dissect_a_control_bsr(a_control_tree, tvb, offset, htc,
27842 start_bit_offset);
27843 start_bit_offset += 26;
27844 break;
27845 case A_CONTROL_UPH4:
27846 dissect_a_control_uph(a_control_tree, tvb, offset, htc,
27847 start_bit_offset);
27848 start_bit_offset += 8;
27849 break;
27850 case A_CONTROL_BQR5:
27851 dissect_a_control_bqr(a_control_tree, tvb, offset, htc,
27852 start_bit_offset);
27853 start_bit_offset += 10;
27854 break;
27855 case A_CONTROL_CCI6:
27856 dissect_a_control_cci(a_control_tree, tvb, offset, htc,
27857 start_bit_offset);
27858 start_bit_offset += 8;
27859 break;
27860 case A_CONTROL_EHT_OM7:
27861 dissect_a_control_eht_om(a_control_tree, tvb, offset, htc,
27862 start_bit_offset);
27863 start_bit_offset += 6;
27864 break;
27865 case A_CONTROL_SRS8:
27866 dissect_a_control_srs(a_control_tree, tvb, offset, htc,
27867 start_bit_offset);
27868 start_bit_offset += 10;
27869 break;
27870 case A_CONTROL_AAR9:
27871 dissect_a_control_aar(a_control_tree, tvb, offset, htc,
27872 start_bit_offset);
27873 start_bit_offset += 20;
27874 break;
27875 case A_CONTROL_ONES15:
27876 if (start_bit_offset == 6) {
27877 dissect_a_control_ones(a_control_tree, tvb, offset, htc,
27878 start_bit_offset);
27879 } else {
27880 expert_add_info(pinfo, a_control_tree, &ei_ieee80211_invalid_control_length);
27881 }
27882 start_bit_offset += 26;
27883 break;
27884 default:
27885 expert_add_info(pinfo, a_control_tree, &ei_ieee80211_invalid_control_id);
27886 start_bit_offset += 32; /* Abandon */
27887 break;
27888 }
27889 }
27890 } else {
27891 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mrq, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27892 if (!(htc & HTC_UNSOLICITED_MFB0x20000000)) {
27893 if (htc & HTC_MRQ0x00000004) {
27894 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27895 } else {
27896 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27897 }
27898 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfsi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27899 } else {
27900 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))((((((htc) >> 9) & 0x7FFF)) & 0x7F) == 0x7F)) {
27901 proto_tree_add_item(htc_tree, hf_ieee80211_htc_compressed_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27902 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ppdu_stbc_encoded, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27903 } else {
27904 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27905 }
27906 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_l, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27907 }
27908 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27909 mfb_subtree = proto_item_add_subtree(ti, ett_mfb_subtree);
27910 if (is_s1g) {
27911 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_s1g_num_sts, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27912 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_s1g_vht_mcs, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27913 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_s1g_bw, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27914 } else {
27915 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_num_sts, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27916 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_vht_mcs, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27917 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_bw, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27918 }
27919 /* This should be converted to dB by adding 22 */
27920 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_snr, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27921 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))((((((htc) >> 9) & 0x7FFF)) & 0x7F) == 0x7F)) {
27922 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_h, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27923 proto_tree_add_item(htc_tree, hf_ieee80211_htc_coding_type, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27924 proto_tree_add_item(htc_tree, hf_ieee80211_htc_fb_tx_type, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27925 } else {
27926 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved3, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27927 }
27928 proto_tree_add_item(htc_tree, hf_ieee80211_htc_unsolicited_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27929 }
27930 } else {
27931 /* Start: Link Adaptation Control */
27932 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_ht_lac, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27933 lac_subtree = proto_item_add_subtree(ti, ett_lac_subtree);
27934 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27935
27936 if (HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE)) {
27937 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27938 } else {
27939 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27940 if (HTC_LAC_MAI_MRQ(htc)(((((htc) >> 2) & 0xF)) & 0x1)) {
27941 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27942 } else {
27943 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27944 }
27945 }
27946
27947 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27948
27949 if (HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE)) {
27950 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27951 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27952 } else {
27953 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27954 }
27955 /* End: Link Adaptation Control */
27956
27957 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27958 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27959 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27960 proto_tree_add_item(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27961
27962 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27963 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27964 }
27965
27966 /*
27967 * These bits are part of the Aggregate Control field for 802.11ax
27968 */
27969 if (!(htc & HTC_HE0x00000002)) {
27970 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27971 proto_tree_add_item(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27972 }
27973
27974 /* offset += 2; */
27975}
27976
27977#define IEEE80211_COMMON_OPT_BROKEN_FC0x00000001 0x00000001
27978#define IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002 0x00000002
27979#define IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004 0x00000004
27980
27981static void
27982dissect_frame_control(proto_tree *tree, tvbuff_t *tvb, uint32_t option_flags,
27983 uint32_t offset, packet_info *pinfo, bool_Bool isDMG)
27984{
27985 uint16_t fcf, flags, frame_type_subtype;
27986 proto_tree *fc_tree, *flag_tree;
27987 proto_item *fc_item, *flag_item, *hidden_item, *ti;
27988 uint32_t swap_offset = 0;
27989 bool_Bool is_s1g = sta_is_s1g(pinfo);
27990 bool_Bool s1g_has_protected_htc_order;
27991
27992 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))
;
27993
27994 flags = FCF_FLAGS(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))
;
27995 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)))
;
27996
27997 /* Swap offset... */
27998 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001)
27999 {
28000 swap_offset += 1;
28001 }
28002
28003 proto_tree_add_uint(tree, hf_ieee80211_fc_frame_type_subtype, tvb, offset + swap_offset, 1, frame_type_subtype);
28004
28005 fc_item = proto_tree_add_item(tree, hf_ieee80211_fc_field, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
28006
28007 fc_tree = proto_item_add_subtree(fc_item, ett_fc_tree);
28008
28009 /* at this point, we can permanently fix the offset, so that it will be used to parse the fcf first 8 bits */
28010 offset += swap_offset;
28011
28012 proto_tree_add_item(fc_tree, hf_ieee80211_fc_proto_version, tvb, offset, 1, ENC_NA0x00000000);
28013 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_type, tvb, offset, 1, ENC_NA0x00000000);
28014 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_subtype, tvb, offset, 1, ENC_NA0x00000000);
28015 /* Changing control frame extension for extension frames */
28016 if(IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 1) {
28017 proto_tree_add_uint(fc_tree, hf_ieee80211_fc_frame_extension, tvb, offset, 1, FCF_FRAME_EXTENSION(fcf)(((fcf) & 0xF00) >> 8));
28018 }
28019
28020 /* Reswap offset...*/
28021 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001)
28022 {
28023 offset -= 1;
28024 proto_item_append_text(fc_item, "(Swapped)");
28025 } else {
28026 offset += 1;
28027 }
28028
28029 /*
28030 * S1G has a different format in the flags portion.
28031 */
28032 if (frame_type_subtype == EXTENSION_S1G_BEACON0x31) {
28033 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_next_tbtt_present, tvb,
28034 offset, 1, ENC_NA0x00000000);
28035 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_compressed_ssid_present,
28036 tvb, offset, 1, ENC_NA0x00000000);
28037 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_ano_present, tvb,
28038 offset, 1, ENC_NA0x00000000);
28039 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_bss_bw, tvb, offset, 1,
28040 ENC_NA0x00000000);
28041 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_security, tvb, offset, 1,
28042 ENC_NA0x00000000);
28043 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_ap_pm, tvb, offset, 1,
28044 ENC_NA0x00000000);
28045
28046 return;
28047 }
28048
28049 /* Flags */
28050 flag_item = proto_tree_add_item(fc_tree, hf_ieee80211_fc_flags, tvb, offset, 1, ENC_NA0x00000000);
28051 flag_tree = proto_item_add_subtree(flag_item, ett_proto_flags);
28052 if (is_s1g && FCF_FRAME_TYPE(fcf)(((fcf) & 0xC) >> 2) == CONTROL_FRAME0x01) {
28053 proto_tree_add_item(flag_tree, hf_ieee80211_fc_s1g_bw_indication, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28054 proto_tree_add_item(flag_tree, hf_ieee80211_fc_s1g_dynamic_indication, tvb, offset, 1, ENC_NA0x00000000);
28055 } else if(IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 0) {
28056 /* Changing control frame flags for extension frames */
28057 proto_tree_add_item(flag_tree, hf_ieee80211_fc_data_ds, tvb, offset, 1, ENC_NA0x00000000);
28058 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_to_ds, tvb, offset, 1, ENC_NA0x00000000);
28059 proto_item_set_hidden(hidden_item);
28060 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_from_ds, tvb, offset, 1, ENC_NA0x00000000);
28061 proto_item_set_hidden(hidden_item);
28062 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_frag, tvb, offset, 1, ENC_NA0x00000000);
28063 ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_retry, tvb, offset, 1, ENC_NA0x00000000);
28064 if( IS_RETRY(flags)((flags) & 0x08) )
28065 {
28066 expert_add_info(pinfo, ti, &ei_ieee80211_fc_retry);
28067 wlan_stats.fc_retry = 1;
28068 }
28069 }
28070 proto_tree_add_item(flag_tree, hf_ieee80211_fc_pwr_mgt, tvb, offset, 1, ENC_NA0x00000000);
28071 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_data, tvb, offset, 1, ENC_NA0x00000000);
28072 /* Changing control frame flags for extension frames */
28073 /* TODO: add support for S1G subtypes 3 and 10 fields: flow control, next TWT
28074 info present, more data, poll type */
28075 /* All S1G frames have the Protected Frame and +HTC/Order subfields except for
28076 Control frames with subtypes 3 and 10 */
28077 s1g_has_protected_htc_order = is_s1g && (FCF_FRAME_TYPE(fcf)(((fcf) & 0xC) >> 2) != CONTROL_FRAME0x01
28078 || (FCF_FRAME_SUBTYPE(fcf)(((fcf) & 0xF0) >> 4) != 3 && FCF_FRAME_SUBTYPE(fcf)(((fcf) & 0xF0) >> 4) != 10));
28079 if (s1g_has_protected_htc_order || (!is_s1g && IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 0)) {
28080 proto_tree_add_item(flag_tree, hf_ieee80211_fc_protected, tvb, offset, 1, ENC_NA0x00000000);
28081 }
28082 if (s1g_has_protected_htc_order || !is_s1g) {
28083 ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_order, tvb, offset, 1, ENC_NA0x00000000);
28084 if (option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) {
28085 if (DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
28086 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
28087 /*
28088 * IEEE 802.11-2016 section 9.2.4.1.10 "+HTC/Order subfield" says:
28089 *
28090 * The +HTC/Order subfield is 1 bit in length. It is used for two
28091 * purposes:
28092 *
28093 * -- It is set to 1 in a non-QoS Data frame transmitted by a
28094 * non-QoS STA to indicate that the frame contains an MSDU,
28095 * or fragment thereof, that is being transferred using the
28096 * StrictlyOrdered service class.
28097 *
28098 * -- It is set to 1 in a QoS Data or Management frame transmitted
28099 * with a value of HT_GF, HT_MF, or VHT for the FORMAT parameter
28100 * of the TXVECTOR to indicate that the frame contains an
28101 * HT Control field.
28102 *
28103 * Otherwise, the +HTC/Order subfield is set to 0.
28104 *
28105 * NOTE -- The +HTC/Order subfield is always set to 0 for frames
28106 * transmitted by a DMG STA.
28107 *
28108 * and 802.11ax drafts appear to say that the +HTC/Order flag, for
28109 * QoS frames, also indicates that there's an HT Control field.
28110 *
28111 * For DMG frames, we flag this as an error.
28112 *
28113 * XXX - as I read the above, this shouldn't be set except for
28114 * HT, VHT, or HE PHYs; however, some QoS frames appear to have
28115 * it set, and have an HT Control field, even though they don't
28116 * have HT/VHT/HE radiotap fields. That might be because the
28117 * code that provided the header didn't provide those radiotap
28118 * fields, or because there is no radiotap header, meaning that
28119 * they might still be HT/VHT/HE frames, so we don't report it
28120 * as an error.
28121 */
28122 if (isDMG) {
28123 /*
28124 * DMG, so flag this as having +HTC/Order set, as it's not supposed
28125 * to be set.
28126 */
28127 expert_add_info(pinfo, ti, &ei_ieee80211_htc_in_dmg_packet);
28128 }
28129 }
28130 }
28131 }
28132 }
28133}
28134
28135static void
28136dissect_durid(proto_tree *hdr_tree, tvbuff_t *tvb, uint16_t fts, int offset)
28137{
28138 uint16_t durid = tvb_get_letohs(tvb, offset);
28139
28140 if (durid < 0x8000) {
28141 proto_tree_add_uint_format_value(hdr_tree, hf_ieee80211_did_duration, tvb,
28142 offset, 2, durid, "%u microseconds", durid);
28143 } else if (((durid & 0xC000) == 0xC000) &&
28144 ((durid & 0x3FFF) > 0) && ((durid & 0x3FFF) <= 2007) &&
28145 (fts == CTRL_PS_POLL0x1A)) {
28146 proto_tree_add_item(hdr_tree, hf_ieee80211_assoc_id, tvb, offset, 2,
28147 ENC_LITTLE_ENDIAN0x80000000);
28148 } else if (durid == 0x8000) {
28149 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
28150 offset, 2, durid, "Duration/ID: %u", durid);
28151 } else {
28152 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
28153 offset, 2, durid, "Duration/ID: %u (reserved)", durid & 0x3FFF);
28154 }
28155}
28156
28157
28158static void
28159dissect_vendor_ie_ht(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
28160 unsigned offset, proto_item *item, proto_item *ti_len, int tag_len)
28161{
28162
28163 uint8_t type;
28164
28165 proto_tree_add_item(tree, hf_ieee80211_ht_pren_type, tvb, offset, 1, ENC_NA0x00000000);
28166 type = tvb_get_uint8(tvb, offset);
28167 offset += 1;
28168 tag_len -= 1;
28169
28170
28171 switch(type){
28172 case 51:
28173 dissect_ht_capability_ie_common(tvb, pinfo, tree, offset, tag_len, ti_len, true1);
28174 proto_item_append_text(item, ": HT Capabilities (802.11n D1.10)");
28175 break;
28176
28177 case 52:
28178 dissect_ht_info_ie_1_0(tvb, pinfo, tree, offset, tag_len, ti_len);
28179 proto_item_append_text(item, ": HT Additional Capabilities (802.11n D1.00)");
28180 break;
28181
28182 default:
28183 proto_tree_add_item(tree, hf_ieee80211_ht_pren_unknown, tvb, offset, tag_len, ENC_NA0x00000000);
28184 break;
28185 }
28186
28187}
28188
28189static int
28190dissect_interworking(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
28191{
28192 int tag_len = tvb_reported_length(tvb);
28193 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
28194 int offset = 0;
28195 static int * const ieee80211_tag_interworking[] = {
28196 &hf_ieee80211_tag_interworking_access_network_type,
28197 &hf_ieee80211_tag_interworking_internet,
28198 &hf_ieee80211_tag_interworking_asra,
28199 &hf_ieee80211_tag_interworking_esr,
28200 &hf_ieee80211_tag_interworking_uesa,
28201 NULL((void*)0)
28202 };
28203
28204 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_interworking, ENC_LITTLE_ENDIAN0x80000000);
28205 offset += 1;
28206
28207 if ((tag_len == (1 + 2)) || (tag_len == (1 + 2 + 6))) {
28208 dissect_venue_info(tree, tvb, offset);
28209 offset += 2;
28210 }
28211
28212 if ((tag_len == (1 + 6)) || (tag_len == (1 + 2 + 6))) {
28213 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_hessid,
28214 tvb, offset, 6, ENC_NA0x00000000);
28215 offset += 6;
28216 }
28217
28218 if ((tag_len != 1) && (tag_len != (1 + 2)) && (tag_len != (1 + 6)) && (tag_len != (1 + 2 + 6))) {
28219 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
28220 "Invalid Interworking element length");
28221 }
28222
28223 return offset;
28224}
28225
28226static int
28227dissect_qos_map_set(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
28228{
28229 int tag_len = tvb_reported_length(tvb);
28230 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
28231 int offset = 0;
28232 uint8_t left;
28233 uint8_t val, val2;
28234 int i;
28235 proto_item *dscp_item, *item;
28236 proto_tree *dscp_tree;
28237
28238 if (tag_len < 16 || tag_len & 1) {
28239 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_bad_length,
28240 "Truncated QoS Map Set element");
28241 return tvb_captured_length(tvb);
28242 }
28243
28244 left = tag_len - 16;
28245 while (left >= 2) {
28246 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_dscp_exc,
28247 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28248 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
28249
28250 item = proto_tree_add_item(dscp_tree,
28251 hf_ieee80211_tag_qos_map_set_dscp_exc_val,
28252 tvb, offset, 1, ENC_NA0x00000000);
28253 val = tvb_get_uint8(tvb, offset);
28254 if (val > 63 && val != 255) {
28255 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28256 "Invalid DSCP Value");
28257 }
28258 offset++;
28259
28260 item = proto_tree_add_item(dscp_tree,
28261 hf_ieee80211_tag_qos_map_set_dscp_exc_up,
28262 tvb, offset, 1, ENC_NA0x00000000);
28263 val2 = tvb_get_uint8(tvb, offset);
28264 if (val2 > 7) {
28265 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28266 "Invalid User Priority");
28267 }
28268 offset++;
28269
28270 proto_item_append_text(dscp_item, " (0x%02x: UP %u)", val, val2);
28271
28272 left -= 2;
28273 }
28274
28275 for (i = 0; i < 8; i++) {
28276 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_range,
28277 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28278 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
28279
28280 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_low,
28281 tvb, offset, 1, ENC_NA0x00000000);
28282 val = tvb_get_uint8(tvb, offset);
28283 if (val > 63 && val != 255) {
28284 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28285 "Invalid DSCP Value");
28286 }
28287 offset++;
28288
28289 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_high,
28290 tvb, offset, 1, ENC_NA0x00000000);
28291 val2 = tvb_get_uint8(tvb, offset);
28292 if ((val2 > 63 && val2 != 255) || val2 < val ||
28293 (val == 255 && val2 != 255) || (val != 255 && val2 == 255)) {
28294 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28295 "Invalid DSCP Value");
28296 }
28297 offset++;
28298
28299 if (val == 255 && val2 == 255) {
28300 proto_item_append_text(dscp_item, " (UP %u not in use)", i);
28301 } else {
28302 proto_item_append_text(dscp_item, " (0x%02x-0x%02x: UP %u)",
28303 val, val2, i);
28304 }
28305 }
28306
28307 return tvb_captured_length(tvb);
28308}
28309
28310static int
28311dissect_roaming_consortium(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
28312{
28313 int tag_len = tvb_reported_length(tvb);
28314 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
28315 int offset = 0;
28316 proto_item* item;
28317 uint8_t oi_lens, oi1_len, oi2_len;
28318
28319 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
28320 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28321 offset += 1;
28322
28323 oi_lens = tvb_get_uint8(tvb, offset);
28324 oi1_len = oi_lens & 0x0f;
28325 oi2_len = (oi_lens & 0xf0) >> 4;
28326 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1_len,
28327 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28328 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2_len,
28329 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28330 offset += 1;
28331
28332 if (offset + oi1_len > tag_len) {
28333 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
28334 "Truncated Roaming Consortium element");
28335 return tvb_captured_length(tvb);
28336 }
28337
28338 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1,
28339 tvb, offset, oi1_len, ENC_NA0x00000000);
28340 add_manuf(item, tvb, offset);
28341 offset += oi1_len;
28342
28343 if (offset + oi2_len > tag_len) {
28344 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
28345 "Truncated Roaming Consortium element");
28346 return tvb_captured_length(tvb);
28347 }
28348
28349 if (oi2_len > 0) {
28350 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2,
28351 tvb, offset, oi2_len, ENC_NA0x00000000);
28352 add_manuf(item, tvb, offset);
28353 offset += oi2_len;
28354 }
28355
28356 if (tag_len > offset) {
28357 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi3,
28358 tvb, offset, tag_len - offset, ENC_NA0x00000000);
28359 }
28360
28361 return tvb_captured_length(tvb);
28362}
28363
28364static void
28365dissect_extended_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
28366{
28367 if (len < 2) {
28368 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
28369 "Extended Request must be at least 2 octets long");
28370 return;
28371 }
28372
28373 proto_tree_add_item(tree, hf_ieee80211_tag_extended_request_id, tvb, offset, 1, ENC_NA0x00000000);
28374 offset += 1;
28375 len -= 1;
28376
28377 while (len--) {
28378 proto_tree_add_item(tree, hf_ieee80211_tag_extended_request_extension, tvb, offset, 1, ENC_NA0x00000000);
28379 offset += 1;
28380 }
28381}
28382
28383static void
28384dissect_he_6ghz_band_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
28385{
28386 if (len != 2) {
28387 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
28388 "HE 6 GHz Band Capabilities must be at 2 octets long");
28389 return;
28390 }
28391
28392 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_he_6ghz_cap_inf,
28393 ett_tag_he_6ghz_cap_inf_tree,
28394 ieee80211_tag_he_6ghz_cap_inf,
28395 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
28396}
28397
28398static void
28399dissect_secure_ltf_parameters(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
28400 proto_tree *tree, int offset, int len _U___attribute__((unused)))
28401{
28402 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_params_counter, tvb,
28403 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
28404 offset += 6;
28405
28406 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_generation_sac, tvb,
28407 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28408 offset += 2;
28409
28410 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_management_sac, tvb,
28411 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28412 offset += 2;
28413
28414 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_result_ltf_ofs, tvb,
28415 offset, 1, ENC_NA0x00000000);
28416}
28417
28418static void
28419dissect_ista_availability_window(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, int offset, int len)
28420{
28421 uint16_t count = tvb_get_letohs(tvb, offset) & 0x1FF;
28422 char avail_string[513];
28423 char pad_string[8];
28424 int i = 0, j;
28425 int avail_bits_offset;
28426 int8_t bits;
28427
28428 memset(avail_string, 0x0, sizeof(avail_string));
28429 memset(pad_string, 0x0, sizeof(pad_string));
28430
28431 /* These are at the same level as the avail bits */
28432 proto_tree_add_item(tree, hf_ieee80211_ftm_ista_availability_count,
28433 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28434 proto_tree_add_item(tree, hf_ieee80211_ftm_ista_availability_reserved,
28435 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28436 offset += 2;
28437
28438 avail_bits_offset = offset;
28439
28440 /* Now, extract count bits and set up the string 8-bits at a time */
28441 for (i = 1; i <= (count / 8); i++) {
28442 bits = tvb_get_uint8(tvb, offset);
28443
28444 for (j = 0; j < 8; j++) {
28445 avail_string[(i - 1) * 8 + j] = (bits & 0x01) ? '1' : '0';
28446 bits = bits >> 1;
28447 }
28448
28449 offset += 1;
28450 }
28451
28452 avail_string[i * 8] = 0;
28453
28454 if (count % 8) {
28455 /* Deal with the remaining bits */
28456 bits = tvb_get_uint8(tvb, offset);
28457
28458 for (j = (i - 1) * 8; j < count; j++) {
28459 avail_string[j] = (bits & 0x01) ? '1' : '0';
28460 bits = bits >> 1;
28461 }
28462
28463 avail_string[j] = 0;
28464
28465 /* Deal with the padding */
28466 for (j = 0; j < 8 - (count % 8); j++) {
28467 pad_string[j] = (bits & 0x01) ? '1' : '0';
28468 bits = bits >> 1;
28469 }
28470
28471 pad_string[j] = 0;
28472 }
28473
28474 proto_tree_add_string(tree, hf_ieee80211_ftm_ista_avail_bits, tvb,
28475 avail_bits_offset, (count + 7) / 8, avail_string);
28476
28477 if (((len - 2) * 8) != count) {
28478 proto_tree_add_string(tree, hf_ieee80211_ftm_ista_avail_pad, tvb,
28479 offset, 1, pad_string);
28480 }
28481}
28482
28483static int * const rsta_avail_info_header[] = {
28484 &hf_ieee80211_ftm_rsta_count,
28485 &hf_ieee80211_ftm_rsta_avail_window_bcast_fmt,
28486 NULL((void*)0)
28487};
28488
28489static int * const rsta_availability_subfield_hdr1[] = {
28490 &hf_ieee80211_ftm_rsta_partial_tsf_timer1,
28491 &hf_ieee80211_ftm_rsta_duration1,
28492 &hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved1,
28493 &hf_ieee80211_ftm_rsta_periodicity1,
28494 NULL((void*)0)
28495};
28496
28497static int * const rsta_availability_subfield_hdr2[] = {
28498 &hf_ieee80211_ftm_rsta_partial_tsf_timer,
28499 &hf_ieee80211_ftm_rsta_duration,
28500 &hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved,
28501 &hf_ieee80211_ftm_rsta_periodicity,
28502 &hf_ieee80211_ftm_rsta_format_and_bandwidth,
28503 &hf_ieee80211_ftm_rsta_reserved,
28504 NULL((void*)0)
28505};
28506
28507static void
28508dissect_rsta_availability_window(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
28509 proto_tree *tree, int offset, int len _U___attribute__((unused)))
28510{
28511 uint8_t count = tvb_get_uint8(tvb, offset) &0x7F;
28512 int i;
28513
28514 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ftm_rsta_header,
28515 ett_rsta_avail_header, rsta_avail_info_header, ENC_NA0x00000000);
28516
28517 offset += 1;
28518
28519 for (i = 0; i < count; i++) {
28520 proto_tree *subfield_tree = NULL((void*)0);
28521 bool_Bool has_passive_ranging_params =
28522 (tvb_get_letohl(tvb, offset) >> 23) & 1;
28523
28524 subfield_tree = proto_tree_add_subtree_format(tree, tvb, offset,
28525 has_passive_ranging_params ? 5 : 4,
28526 ett_rsta_avail_tree, NULL((void*)0),
28527 "Availability Window Information %d",
28528 i);
28529 if (has_passive_ranging_params) {
28530 proto_tree_add_bitmask(subfield_tree, tvb, offset,
28531 hf_ieee80211_ftm_rsta_avail_subfield_long,
28532 ett_rsta_avail_subfield,
28533 rsta_availability_subfield_hdr2,
28534 ENC_LITTLE_ENDIAN0x80000000);
28535 offset += 5;
28536 } else {
28537 proto_tree_add_bitmask(subfield_tree, tvb, offset,
28538 hf_ieee80211_ftm_rsta_avail_subfield_short,
28539 ett_rsta_avail_subfield,
28540 rsta_availability_subfield_hdr1,
28541 ENC_LITTLE_ENDIAN0x80000000);
28542 offset += 4;
28543 }
28544 }
28545}
28546
28547/*
28548 * "Comeback after subfield shall not be present (ie, zero octets) in PASN
28549 * authentication frames from a non-AP STA."
28550 *
28551 * Attempt to figure out if the Comeback After field is present.
28552 */
28553#define PASN_COMEBACK_INFO_PRESENT0x01 0x01
28554#define PASN_GROUP_KEY_PRESENT0x02 0x02
28555
28556static bool_Bool
28557has_comeback_after(uint8_t flags, tvbuff_t *tvb, int offset, int len _U___attribute__((unused)))
28558{
28559 int tvb_left = tvb_captured_length_remaining(tvb, offset);
28560 bool_Bool comeback_after = false0;
28561 //int cookie_len = 0;
28562 int fixed_len = 0;
28563
28564 if (flags & PASN_GROUP_KEY_PRESENT0x02) { /* Group and Key present */
28565 fixed_len += 2;
28566 }
28567
28568 /*
28569 * If there is a comeback field and the comeback_after is present ...
28570 */
28571 if (flags & 0x01) {
28572 /* Check if the comeback_after field is there? */
28573 if (tvb_get_letohs(tvb, offset) <= (tvb_left - fixed_len)) {
28574 comeback_after = true1;
28575 }
28576 }
28577
28578 return comeback_after;
28579}
28580
28581static int * const pasn_params_fields[] = {
28582 &hf_ieee80211_tag_pasn_params_comeback_info_present,
28583 &hf_ieee80211_tag_pasn_params_group_and_key_present,
28584 &hf_ieee80211_tag_pasn_parameters_reserved,
28585 NULL((void*)0)
28586};
28587
28588static const range_string wrapped_data_fmt_rvals[] = {
28589 { 0, 0, "No wrapped data" },
28590 { 1, 1, "Fast BSS Transition Wrapped Data" },
28591 { 2, 2, "FILS Shared Key authentication without PFS Wrapped Data" },
28592 { 3, 3, "SAE Wrapped Data" },
28593 { 4, 255, "Reserved" },
28594 { 0, 0, NULL((void*)0) }
28595};
28596
28597static void
28598dissect_pasn_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
28599{
28600 int public_key_len = 0;
28601 unsigned pasn_control = tvb_get_uint8(tvb, offset);
28602
28603 if (len < 2) {
28604 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
28605 "PASN Parameters must be at least 2 octets long");
28606 return;
28607 }
28608
28609 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
28610 hf_ieee80211_tag_pasn_parameters_control,
28611 ett_pasn_parameters, pasn_params_fields,
28612 ENC_LITTLE_ENDIAN0x80000000,
28613 BMT_NO_FALSE0x04 | BMT_NO_INT0x02);
28614 offset += 1;
28615
28616 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_parameters_wrapped_fmt,
28617 tvb, offset, 1, ENC_NA0x00000000);
28618 offset += 1;
28619
28620 /*
28621 * If the Comeback field is present, it might not have a Comeback After
28622 * field. Use the following heuristic function to check.
28623 */
28624 if (pasn_control & PASN_COMEBACK_INFO_PRESENT0x01) {
28625 proto_tree *comeback_tree = NULL((void*)0);
28626 proto_item *cbi = NULL((void*)0);
28627 uint8_t cookie_len;
28628
28629 comeback_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
28630 ett_pasn_comeback_tree, &cbi, "Comeback field");
28631
28632 if (has_comeback_after(pasn_control, tvb, offset, len)) {
28633 proto_tree_add_item(comeback_tree, hf_ieee80211_tag_pasn_comeback_after,
28634 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28635 offset += 2;
28636 }
28637
28638 cookie_len = tvb_get_uint8(tvb, offset);
28639
28640 proto_tree_add_item(comeback_tree, hf_ieee80211_tag_pasn_cookie_length,
28641 tvb, offset, 1, ENC_NA0x00000000);
28642 offset += 1;
28643
28644 if (cookie_len) {
28645 proto_tree_add_item(comeback_tree, hf_ieee80211_tag_pasn_cookie,
28646 tvb, offset, cookie_len, ENC_NA0x00000000);
28647 offset += cookie_len;
28648 }
28649 }
28650
28651 if (pasn_control & PASN_GROUP_KEY_PRESENT0x02) {
28652 public_key_len = tvb_get_uint8(tvb, offset + 2);
28653
28654 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_finite_cyclic_group_id, tvb,
28655 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28656 offset += 2;
28657
28658 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_ephemeral_public_key_len,
28659 tvb, offset, 1, ENC_NA0x00000000);
28660 offset += 1;
28661
28662 if (public_key_len) {
28663 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_ephemeral_public_key, tvb,
28664 offset, public_key_len, ENC_NA0x00000000);
28665 }
28666 }
28667}
28668
28669static int * const sta_control_hdrs[] = {
28670 &hf_ieee80211_eht_profile_link_id,
28671 &hf_ieee80211_eht_profile_complete_profile,
28672 &hf_ieee80211_eht_profile_mac_address_present,
28673 &hf_ieee80211_eht_profile_beacon_interval_present,
28674 &hf_ieee80211_eht_profile_tsf_offset_present,
28675 &hf_ieee80211_eht_profile_dtim_info_present,
28676 &hf_ieee80211_eht_profile_nstr_link_pair_present,
28677 &hf_ieee80211_eht_profile_nstr_bitmap_size,
28678 &hf_ieee80211_eht_profile_bss_params_change_count_present,
28679 &hf_ieee80211_eht_profile_reserved,
28680 NULL((void*)0)
28681};
28682
28683static int * const probe_sta_control_hdrs[] = {
28684 &hf_ieee80211_eht_profile_link_id,
28685 &hf_ieee80211_eht_profile_complete_profile,
28686 &hf_ieee80211_eht_profile_probe_reserved,
28687 NULL((void*)0)
28688};
28689
28690static const range_string eht_reconfig_op_type_rvals[] = {
28691 { 0, 0, "AP Removal" },
28692 { 1, 1, "Operation Parameter Update" },
28693 { 2, 2, "Add Link" },
28694 { 3, 3, "Delete Link" },
28695 { 4, 15, "Reserved" },
28696 { 0, 0, NULL((void*)0) }
28697};
28698
28699static int * const reconfig_sta_control_hdrs[] = {
28700 &hf_ieee80211_eht_profile_link_id,
28701 &hf_ieee80211_eht_profile_complete_profile,
28702 &hf_ieee80211_eht_profile_mac_address_present,
28703 &hf_ieee80211_eht_profile_removal_timer_present,
28704 &hf_ieee80211_eht_profile_reconfig_operation_type,
28705 &hf_ieee80211_eht_profile_operation_para_present,
28706 &hf_ieee80211_eht_profile_reconfig_nstr_bitmap_size,
28707 &hf_ieee80211_eht_profile_reconfig_nstr_bitmap_present,
28708 &hf_ieee80211_eht_profile_reconfig_reserved,
28709 NULL((void*)0)
28710};
28711
28712static int * const prio_access_sta_control_hdrs[] = {
28713 &hf_ieee80211_eht_profile_link_id,
28714 &hf_ieee80211_eht_profile_prio_acc_reserved,
28715 NULL((void*)0)
28716};
28717
28718static int * const reconfig_presence_indi_hdrs[] = {
28719 &hf_ieee80211_eht_sta_profile_presence_indi_max_mpdu_length_present,
28720 &hf_ieee80211_eht_sta_profile_presence_indi_max_amsdu_length_present,
28721 &hf_ieee80211_eht_sta_profile_presence_indi_reserved,
28722 NULL((void*)0)
28723};
28724
28725static int * const reconfig_operation_para_info_hdrs[] = {
28726 &hf_ieee80211_eht_sta_profile_operation_para_info_max_mpdu_length,
28727 &hf_ieee80211_eht_sta_profile_operation_para_info_amsdu_length,
28728 &hf_ieee80211_eht_sta_profile_operation_para_info_pad,
28729 NULL((void*)0)
28730};
28731
28732/* Presence Bitmap in ML Control */
28733/* Basic */
28734#define EHT_LINK_ID0x01 0x01
28735#define EHT_BSS_PARAMS0x02 0x02
28736#define EHT_MEDIUM_SYNC0x04 0x04
28737#define EHT_EML_CAPA0x08 0x08
28738#define EHT_MLD_CAPA0x10 0x10
28739#define EHT_MLD_ID0x20 0x20
28740#define EHT_EXT_MLD_CAPA0x40 0x40
28741/* Probe */
28742#define EHT_PML_MLD_ID0x01 0x01
28743#define EHT_PML_MLD_MAC0x02 0x02
28744/* Reconf */
28745#define EHT_RECONF_MLD_MAC0x01 0x01
28746#define EHT_RECONF_EML_CAPA0x02 0x02
28747#define EHT_RECONF_MLD_CAPA0x04 0x04
28748#define EHT_RECONF_EXT_MLD_CAPA0x08 0x08
28749
28750#define BASIC_MULTI_LINK0 0
28751#define PROBE_MULTI_LINK1 1
28752#define RECONFIGURATION_MULTI_LINK2 2
28753#define TDLS_MULTI_LINK3 3
28754#define PRIORITY_ACCESS_MULTI_LINK4 4
28755
28756/* Bits from the STA Control field */
28757/* Basic */
28758#define STA_CTRL_LINK_ID0x000F 0x000F
28759#define STA_CTRL_COMPLETE_PROFILE0x0010 0x0010
28760#define STA_CTRL_MAC_ADDR_PRESENT0x0020 0x0020
28761#define STA_CTRL_BEACON_INT_PRESENT0x0040 0x0040
28762#define STA_CTRL_TSF_OFFSET_PRESENT0x0080 0x0080
28763#define STA_CTRL_DTIM_INFO_PRESENT0x0100 0x0100
28764#define STA_CTRL_NSTR_LINK_PAIR_PRESENT0x0200 0x0200
28765#define STA_CTRL_NSTR_BITMAP_SIZE0x0400 0x0400
28766#define STA_CTRL_BSS_PARAMS_CHANGE_CNT_PRESENT0x0800 0x0800
28767#define STA_CTRL_RESERVED0xF000 0xF000
28768
28769/* Reconf */
28770#define AP_REMOVAL_TIMER_PRESENT0x0040 0x0040
28771#define OPERATION_PARAMS_PRESENT0x0800 0x0800
28772#define RECONF_NSTR_BITMAP_SIZE0x1000 0x1000
28773#define RECONF_NSTR_BITMAP_PRESENT0x2000 0x2000
28774
28775static int
28776dissect_multi_link_per_sta(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
28777 proto_tree *tree,
28778 uint8_t multi_link_type,
28779 int *found_link_id)
28780{
28781 proto_tree *subelt_tree = NULL((void*)0), *sta_info_tree = NULL((void*)0);
28782 int offset = 0;
28783 int len = tvb_captured_length_remaining(tvb, offset);
28784 uint16_t sta_control = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
28785 uint8_t sta_info_len = 0;
28786 int start_offset = offset;
28787 uint8_t link_id;
28788
28789 subelt_tree = proto_tree_add_subtree(tree, tvb, offset, len,
28790 ett_eht_multi_link_per_sta,
28791 NULL((void*)0), "Per-STA Profile");
28792
28793 switch (multi_link_type) {
28794 case BASIC_MULTI_LINK0:
28795 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
28796 *found_link_id = link_id;
28797 proto_item_append_text(subelt_tree, ", Link-ID = %d", link_id);
28798
28799 proto_tree_add_bitmask(subelt_tree, tvb, offset,
28800 hf_ieee80211_eht_profile_sta_control,
28801 ett_eht_multi_link_sta_control,
28802 sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
28803 offset += 2;
28804
28805 /* Check the length of STA Info is 0 */
28806 if (offset >= start_offset + len) {
28807 return len;
28808 }
28809
28810 sta_info_len = tvb_get_uint8(tvb, offset);
28811 sta_info_tree = proto_tree_add_subtree(subelt_tree, tvb, offset,
28812 sta_info_len,
28813 ett_eht_multi_link_per_sta_info,
28814 NULL((void*)0), "STA Info");
28815
28816 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_len,
28817 tvb, offset, 1, ENC_NA0x00000000);
28818 offset += 1;
28819
28820 if (sta_control & STA_CTRL_MAC_ADDR_PRESENT0x0020) {
28821 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_mac,
28822 tvb, offset, 6, ENC_NA0x00000000);
28823 offset += 6;
28824 }
28825
28826 if (sta_control & STA_CTRL_BEACON_INT_PRESENT0x0040) {
28827 proto_tree_add_item(sta_info_tree,
28828 hf_ieee80211_eht_sta_profile_info_beacon,
28829 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28830 offset += 2;
28831 }
28832
28833 if (sta_control & STA_CTRL_TSF_OFFSET_PRESENT0x0080) {
28834 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_tsf_offset,
28835 tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
28836 offset += 8;
28837 }
28838
28839 if (sta_control & STA_CTRL_DTIM_INFO_PRESENT0x0100) {
28840 proto_tree * dtim_tree;
28841
28842 dtim_tree = proto_tree_add_subtree(sta_info_tree, tvb, offset, 2,
28843 ett_eht_multi_link_sta_dtim, NULL((void*)0), "DTIM Info");
28844
28845 proto_tree_add_item(dtim_tree,
28846 hf_ieee80211_eht_sta_profile_info_dtim_count,
28847 tvb, offset, 1, ENC_NA0x00000000);
28848 offset += 1;
28849
28850 proto_tree_add_item(dtim_tree,
28851 hf_ieee80211_eht_sta_profile_info_dtim_period,
28852 tvb, offset, 1, ENC_NA0x00000000);
28853 offset += 1;
28854 }
28855
28856 if (sta_control & STA_CTRL_NSTR_LINK_PAIR_PRESENT0x0200) {
28857 int bitmap_size = (sta_control & STA_CTRL_NSTR_BITMAP_SIZE0x0400) ? 2 : 1;
28858
28859 proto_tree_add_item(sta_info_tree,
28860 hf_ieee80211_eht_sta_profile_info_bitmap,
28861 tvb, offset, bitmap_size, ENC_NA0x00000000);
28862 offset += bitmap_size;
28863 }
28864
28865 if (sta_control & STA_CTRL_BSS_PARAMS_CHANGE_CNT_PRESENT0x0800) {
28866 proto_tree_add_item(sta_info_tree,
28867 hf_ieee80211_eht_sta_profile_bss_params_change_count,
28868 tvb, offset, 1, ENC_NA0x00000000);
28869 offset += 1;
28870 }
28871 break;
28872 case PROBE_MULTI_LINK1:
28873 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
28874 *found_link_id = link_id;
28875
28876 proto_tree_add_bitmask(subelt_tree, tvb, offset,
28877 hf_ieee80211_eht_profile_sta_control,
28878 ett_eht_multi_link_sta_control,
28879 probe_sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
28880 offset += 2;
28881
28882 /*
28883 * Now there will be some elements if complete profile is 0
28884 *
28885 * There can be one Request element, one Extended Request Element or
28886 * one of both.
28887 */
28888 if ((sta_control & STA_CTRL_COMPLETE_PROFILE0x0010) == 0) {
28889 bool_Bool seen_request = false0, seen_ext_request = false0;
28890
28891 while (tvb_captured_length_remaining(tvb, offset) >= 2) {
28892 static const uint8_t ids[] = { TAG_TSPEC13 };
28893 uint8_t elt_type = 0;
28894
28895 if (tvb_captured_length_remaining(tvb, offset) < 2) {
28896 expert_add_info_format(pinfo, subelt_tree,
28897 &ei_ieee80211_eht_invalid_multi_link,
28898 "Invalid Probe Request Multi-Link element "
28899 "STA Control field, should contain a Request "
28900 "element or an Extended Request element or both "
28901 "but there are insufficient bytes");
28902
28903 return len;
28904 }
28905
28906 elt_type = tvb_get_uint8(tvb, offset);
28907
28908 if ((elt_type != TAG_REQUEST10 && elt_type != TAG_ELEMENT_ID_EXTENSION255) ||
28909 (elt_type == TAG_ELEMENT_ID_EXTENSION255 &&
28910 (tvb_get_uint8(tvb, offset + 1) < 3 ||
28911 tvb_get_uint8(tvb, offset + 2) != ETAG_EXTENDED_REQUEST10))) {
28912 /* Add an expert Info */
28913
28914 expert_add_info_format(pinfo, subelt_tree,
28915 &ei_ieee80211_eht_invalid_multi_link,
28916 "Invalid Probe Request Multi-Link element "
28917 "STA Control field, should contain a Request "
28918 "element or an Extended Request element or both "
28919 "but it contains other elements or there are "
28920 "insufficient bytes for an extended element");
28921 return len;
28922 }
28923
28924 if (elt_type == TAG_REQUEST10) {
28925 if (!seen_request) {
28926 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, ids,
28927 G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
28928 seen_request = true1;
28929 } else {
28930 expert_add_info_format(pinfo, subelt_tree,
28931 &ei_ieee80211_eht_invalid_multi_link,
28932 "Invalid Probe Request Multi-Link element "
28933 "STA Control field. May only contain one Request "
28934 "element");
28935
28936 return len;
28937 }
28938 } else { /* It can only be a ETAG_EXTENDED_REQUEST */
28939 if (!seen_ext_request) {
28940 uint8_t ext_tag_len = tvb_get_uint8(tvb, offset + 1);
28941
28942 offset += 3;
28943 dissect_extended_request(tvb, pinfo, tree, offset, ext_tag_len);
28944
28945 offset += ext_tag_len;
28946 seen_ext_request = true1;
28947 } else {
28948 expert_add_info_format(pinfo, subelt_tree,
28949 &ei_ieee80211_eht_invalid_multi_link,
28950 "Invalid Probe Request Multi-Link element "
28951 "STA Control field. May only contain one Extended "
28952 "Request element");
28953
28954 return len;
28955 }
28956 }
28957 }
28958 }
28959 break;
28960 case RECONFIGURATION_MULTI_LINK2:
28961 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
28962 *found_link_id = link_id;
28963
28964 proto_tree_add_bitmask(subelt_tree, tvb, offset,
28965 hf_ieee80211_eht_profile_sta_control,
28966 ett_eht_multi_link_sta_control,
28967 reconfig_sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
28968 offset += 2;
28969
28970 /* Check the length of STA Info is 0 */
28971 if (offset >= start_offset + len) {
28972 return len;
28973 }
28974
28975 sta_info_len = tvb_get_uint8(tvb, offset);
28976 sta_info_tree = proto_tree_add_subtree(subelt_tree, tvb, offset, sta_info_len,
28977 ett_eht_multi_link_per_sta_info,
28978 NULL((void*)0), "STA Info");
28979
28980 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_len,
28981 tvb, offset, 1, ENC_NA0x00000000);
28982 offset += 1;
28983
28984 if (sta_control & STA_CTRL_MAC_ADDR_PRESENT0x0020) {
28985 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_mac,
28986 tvb, offset, 6, ENC_NA0x00000000);
28987 offset += 6;
28988 }
28989
28990 if (sta_control & AP_REMOVAL_TIMER_PRESENT0x0040) {
28991 proto_tree_add_item(sta_info_tree,
28992 hf_ieee80211_eht_sta_profile_removal_timer,
28993 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28994 offset += 2;
28995 }
28996
28997 if (sta_control & OPERATION_PARAMS_PRESENT0x0800) {
28998 proto_tree * oper_tree;
28999
29000 oper_tree = proto_tree_add_subtree(sta_info_tree, tvb, offset, 3,
29001 ett_eht_multi_link_reconf_oper_param, NULL((void*)0), "Operation Parameters");
29002
29003 proto_tree_add_bitmask_with_flags(oper_tree, tvb, offset,
29004 hf_ieee80211_eht_sta_profile_presence_indi,
29005 ett_eht_multi_link_reconfig_presence_indi,
29006 reconfig_presence_indi_hdrs, ENC_LITTLE_ENDIAN0x80000000,
29007 BMT_NO_APPEND0x01);
29008 offset += 1;
29009
29010 proto_tree_add_bitmask_with_flags(oper_tree, tvb, offset,
29011 hf_ieee80211_eht_sta_profile_operation_para_info,
29012 ett_eht_multi_link_reconfig_operation_para_info,
29013 reconfig_operation_para_info_hdrs, ENC_LITTLE_ENDIAN0x80000000,
29014 BMT_NO_APPEND0x01);
29015 offset += 2;
29016 }
29017
29018 if (sta_control & RECONF_NSTR_BITMAP_PRESENT0x2000) {
29019 int bitmap_size = (sta_control & RECONF_NSTR_BITMAP_SIZE0x1000) ? 2 : 1;
29020
29021 proto_tree_add_item(sta_info_tree,
29022 hf_ieee80211_eht_sta_profile_info_bitmap,
29023 tvb, offset, bitmap_size, ENC_NA0x00000000);
29024 offset += bitmap_size;
29025 }
29026 break;
29027 case TDLS_MULTI_LINK3:
29028 expert_add_info_format(pinfo, subelt_tree,
29029 &ei_ieee80211_eht_invalid_multi_link,
29030 "Invalid TDLS Multi-Link element. There should not "
29031 "be any Link Info fields.");
29032
29033 break;
29034 case PRIORITY_ACCESS_MULTI_LINK4:
29035 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
29036 *found_link_id = link_id;
29037 proto_tree_add_bitmask(subelt_tree, tvb, offset,
29038 hf_ieee80211_eht_profile_sta_control,
29039 ett_eht_multi_link_sta_control,
29040 prio_access_sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29041 offset += 2;
29042
29043 /*
29044 * Could contain the EDCA Parameter Set elt or the MU EDCA Parameter Set
29045 * elt, or none.
29046 */
29047 if (tvb_captured_length_remaining(tvb, offset) > 2) {
29048
29049 }
29050 break;
29051 default:
29052 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 29052))
;
29053 break;
29054 }
29055
29056 // Sta Profile
29057 // Save HE capa settings
29058 {
29059 unsigned *p_channel_width_set =
29060 (unsigned *)p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan,
29061 HE_CHANNEL_WIDTH_KEY);
29062 unsigned channel_width_set = GPOINTER_TO_INT(p_channel_width_set)((gint) (glong) (p_channel_width_set));
29063 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)))
29064 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
29065 FRAME_TYPE_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
;
29066
29067 int end_offset = start_offset + len;
29068 if (offset < end_offset) {
29069 /* Check CSA, EX CSA or MAX CST elements to skip parsing cap info */
29070 uint8_t elem = tvb_get_uint8(tvb, offset);
29071 uint8_t elem_len = tvb_get_uint8(tvb, offset+1);
29072 uint8_t ext_elem = 0;
29073 if (elem == TAG_ELEMENT_ID_EXTENSION255) {
29074 ext_elem = tvb_get_uint8(tvb, offset+2);
29075 }
29076 if (multi_link_type == PRIORITY_ACCESS_MULTI_LINK4) {
29077 } else if ((elem == TAG_CHANNEL_SWITCH_ANN37 && elem_len == 3) ||
29078 (elem == TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60 && elem_len == 4) ||
29079 (ext_elem == ETAG_MAX_CHANNEL_SWITCH_TIME52 && elem_len == 4)) {
29080 } else {
29081 offset += add_ff_cap_info(subelt_tree, tvb, pinfo, offset);
29082 }
29083 /*
29084 * If it is an association or re-association response, deal with the
29085 * status code.
29086 */
29087 if ((ftype == MGT_ASSOC_RESP0x01 || ftype == MGT_REASSOC_RESP0x03) &&
29088 multi_link_type == BASIC_MULTI_LINK0) {
29089 offset += add_ff_status_code(subelt_tree, tvb, pinfo, offset);
29090 }
29091 }
29092 while (offset < end_offset) {
29093 int tag_len = tvb_get_uint8(tvb, offset+1);
29094 if (offset + 1 + tag_len >= end_offset) {
29095 /* Detect wrong format to avoid from corrupting default_context */
29096 expert_add_info_format(pinfo, subelt_tree, &ei_ieee80211_eht_invalid_subelement,
29097 "Per-STA Profile subelements had wrong element/length");
29098 *found_link_id = -1;
29099 return len;
29100 }
29101 offset += add_tagged_field(pinfo, subelt_tree, tvb, offset, ftype, NULL((void*)0), 0, NULL((void*)0));
29102 }
29103
29104 // Set he capa settings back
29105 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, HE_CHANNEL_WIDTH_KEY,
29106 GINT_TO_POINTER(channel_width_set | (1<<31))((gpointer) (glong) (channel_width_set | (1<<31))));
29107 }
29108 return len;
29109}
29110
29111static const value_string multi_link_type_vals[] = {
29112 { BASIC_MULTI_LINK0, "Basic" },
29113 { PROBE_MULTI_LINK1, "Probe Request" },
29114 { RECONFIGURATION_MULTI_LINK2, "Reconfiguration" },
29115 { TDLS_MULTI_LINK3, "TDLS" },
29116 { PRIORITY_ACCESS_MULTI_LINK4, "Priority Access" },
29117 { 5, "Reserved" },
29118 { 6, "Reserved" },
29119 { 7, "Reserved" },
29120 { 0, NULL((void*)0) }
29121};
29122
29123static const range_string multi_link_sub_elt_string[] = {
29124 { 0, 0, "Per-STA Profile" },
29125 { 1, 220, "Reserved" },
29126 { 221, 221, "Vendor Specific" },
29127 { 222, 255, "Reserved" },
29128 { 0, 0, NULL((void*)0) }
29129};
29130
29131static int * const eht_link_id_hdrs[] = {
29132 &hf_ieee80211_eht_common_info_link_id,
29133 &hf_ieee80211_eht_common_info_link_id_reserved,
29134 NULL((void*)0)
29135};
29136
29137static int * const eht_medium_sync_delay_hdrs[] = {
29138 &hf_ieee80211_eht_common_info_medium_sync_duration,
29139 &hf_ieee80211_eht_common_info_medium_sync_threshold,
29140 &hf_ieee80211_eht_common_info_medium_sync_max_txops,
29141 NULL((void*)0)
29142};
29143
29144static int * const eht_eml_capabilities_hdrs[] = {
29145 &hf_ieee80211_eht_common_info_eml_capa_emlsr_support,
29146 &hf_ieee80211_eht_common_info_eml_capa_emlsr_padding_delay,
29147 &hf_ieee80211_eht_common_info_eml_capa_emlsr_transition_delay,
29148 &hf_ieee80211_eht_common_info_eml_capa_emlmr_support,
29149 &hf_ieee80211_eht_common_info_eml_capa_emlmr_delay,
29150 &hf_ieee80211_eht_common_info_eml_capa_transition_timeout,
29151 &hf_ieee80211_eht_common_info_eml_capa_reserved,
29152 NULL((void*)0)
29153};
29154
29155static int * const eht_mld_capabilities_hdrs[] = {
29156 &hf_ieee80211_eht_common_info_mld_max_simul_links,
29157 &hf_ieee80211_eht_common_info_mld_srs_support,
29158 &hf_ieee80211_eht_common_info_mld_tid_to_link_map_neg,
29159 &hf_ieee80211_eht_common_info_mld_freq_sep_for_str,
29160 &hf_ieee80211_eht_common_info_mld_aar_support,
29161 &hf_ieee80211_eht_common_info_mld_link_reconf_op_support,
29162 &hf_ieee80211_eht_common_info_mld_aligned_twt_support,
29163 &hf_ieee80211_eht_common_info_mld_reserved,
29164 NULL((void*)0)
29165};
29166
29167static int * const eht_ext_mld_capabilities_hdrs[] = {
29168 &hf_ieee80211_eht_common_info_ext_mld_op_update_support,
29169 &hf_ieee80211_eht_common_info_ext_mld_max_simul_links,
29170 &hf_ieee80211_eht_common_info_ext_mld_nstr_status_support,
29171 &hf_ieee80211_eht_common_info_ext_mld_emlsr_enable_one_link_support,
29172 &hf_ieee80211_eht_common_info_ext_mld_btm_mld_recom_aps_support,
29173 &hf_ieee80211_eht_common_info_ext_mld_reserved,
29174 NULL((void*)0)
29175};
29176
29177/*
29178 * Build a TVB containing the sub-elt. Offset will point to the subelt id in
29179 * tvb, and the sub-elt might span several fragments. Subsequent fragments
29180 * will have an id of 254.
29181 */
29182static tvbuff_t *
29183get_subelt_tvb(tvbuff_t *tvb, packet_info *pinfo, int offset, int *overhead)
29184{
29185 uint8_t subelt_len = tvb_get_uint8(tvb, offset + 1);
29186 tvbuff_t *tmp_tvb;
29187 int ohead = 0;
29188
29189 if (subelt_len == 255 &&
29190 tvb_captured_length_remaining(tvb, offset) > 259 &&
29191 tvb_get_uint8(tvb, offset + 255 + 2) == 0xfe) {
29192 tvbuff_t *tvb_comp;
29193 uint8_t frag_len;
29194
29195 tvb_comp = tvb_new_composite();
29196
29197 do {
29198 offset += 1;
29199 frag_len = tvb_get_uint8(tvb, offset);
29200 offset += 1;
29201 tmp_tvb = tvb_new_subset_length(tvb, offset, frag_len);
29202 /* Insert this fragment ... */
29203 tvb_composite_append(tvb_comp, tmp_tvb);
29204 offset += frag_len;
29205 ohead += 2;
29206 } while (frag_len == 255 &&
29207 tvb_captured_length_remaining(tvb, offset) > 2 &&
29208 tvb_get_uint8(tvb, offset) == 0xfe);
29209
29210 tvb_composite_finalize(tvb_comp);
29211
29212 *overhead = ohead - 2;
29213 add_new_data_source(pinfo, tvb_comp, "Reassembled Subelt");
29214 return tvb_comp;
29215 } else {
29216 *overhead = 0;
29217 return tvb_new_subset_length(tvb, offset + 2, subelt_len);
29218 }
29219}
29220
29221static void
29222dissect_multi_link(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
29223 int offset, int len _U___attribute__((unused)))
29224{
29225 proto_item *control = NULL((void*)0), *type = NULL((void*)0);
29226 proto_tree *ctl_tree = NULL((void*)0), *common_tree = NULL((void*)0), *subelt_tree = NULL((void*)0);
29227 uint8_t common_info_len = 0;
29228 uint16_t multi_link_control = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
29229 uint8_t multi_link_type = multi_link_control & 0x0007;
29230 uint16_t present = multi_link_control >> 4;
29231 int elt = 0, hf_index;
29232 int local_link_ids[16];
29233 int is_ap;
29234
29235 control = proto_tree_add_item(tree, hf_ieee80211_eht_multi_link_control, tvb,
29236 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29237 ctl_tree = proto_item_add_subtree(control, ett_eht_multi_link_control);
29238
29239 type = proto_tree_add_item(ctl_tree, hf_ieee80211_eht_multi_link_control_type,
29240 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29241 proto_tree_add_item(ctl_tree, hf_ieee80211_eht_multi_link_control_reserved,
29242 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29243
29244 /* Handle the control elt here, separate items */
29245 if (multi_link_type == BASIC_MULTI_LINK0) {
29246 proto_item_append_text(control, " Basic");
29247 proto_tree_add_item(ctl_tree,
29248 hf_ieee80211_eht_multi_link_control_link_id_present,
29249 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29250 proto_tree_add_item(ctl_tree,
29251 hf_ieee80211_eht_multi_link_control_bss_parms_ch_count,
29252 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29253 proto_tree_add_item(ctl_tree,
29254 hf_ieee80211_eht_multi_link_control_medium_sync_delay,
29255 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29256 proto_tree_add_item(ctl_tree,
29257 hf_ieee80211_eht_multi_link_control_eml_capa,
29258 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29259 proto_tree_add_item(ctl_tree,
29260 hf_ieee80211_eht_multi_link_control_mld_capa,
29261 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29262 proto_tree_add_item(ctl_tree,
29263 hf_ieee80211_eht_multi_link_control_basic_mld_id_present,
29264 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29265 proto_tree_add_item(ctl_tree,
29266 hf_ieee80211_eht_multi_link_control_ext_mld_capa,
29267 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29268 proto_tree_add_item(ctl_tree,
29269 hf_ieee80211_eht_multi_link_control_bitmap_reserved,
29270 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29271 hf_index = hf_ieee80211_eht_multi_link_type_0_link_count;
29272 } else if (multi_link_type == PROBE_MULTI_LINK1) {
29273 proto_item_append_text(control, " Probe Request");
29274 proto_tree_add_item(ctl_tree,
29275 hf_ieee80211_eht_multi_link_control_probe_mld_id_present,
29276 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29277 proto_tree_add_item(ctl_tree,
29278 hf_ieee80211_eht_multi_link_control_probe_mld_mac_addr_present,
29279 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29280 proto_tree_add_item(ctl_tree,
29281 hf_ieee80211_eht_multi_link_control_probe_reserved,
29282 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29283 hf_index = hf_ieee80211_eht_multi_link_type_1_link_count;
29284 } else if (multi_link_type == RECONFIGURATION_MULTI_LINK2) {
29285 proto_item_append_text(control, " Reconfiguration");
29286 proto_tree_add_item(ctl_tree,
29287 hf_ieee80211_eht_multi_link_control_reconfig_mld_mac,
29288 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29289 proto_tree_add_item(ctl_tree,
29290 hf_ieee80211_eht_multi_link_control_reconfig_eml_capa,
29291 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29292 proto_tree_add_item(ctl_tree,
29293 hf_ieee80211_eht_multi_link_control_reconfig_mld_capa_oper,
29294 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29295 proto_tree_add_item(ctl_tree,
29296 hf_ieee80211_eht_multi_link_control_reconfig_ext_mld_capa_oper,
29297 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29298 proto_tree_add_item(ctl_tree,
29299 hf_ieee80211_eht_multi_link_control_reconfig_reserved,
29300 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29301 hf_index = hf_ieee80211_eht_multi_link_type_2_link_count;
29302 } else if (multi_link_type == TDLS_MULTI_LINK3) {
29303 proto_item_append_text(control, " TDLS");
29304 /* Presence bitmap is reserved */
29305 proto_tree_add_item(ctl_tree,
29306 hf_ieee80211_eht_multi_link_control_tdls_reserved, tvb,
29307 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29308 hf_index = hf_ieee80211_eht_multi_link_type_3_link_count;
29309 } else if (multi_link_type == PRIORITY_ACCESS_MULTI_LINK4) {
29310 proto_item_append_text(control, " Priority Access");
29311 proto_tree_add_item(ctl_tree,
29312 hf_ieee80211_eht_multi_link_control_prio_access_reserved,
29313 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29314 hf_index = hf_ieee80211_eht_multi_link_type_4_link_count;
29315 } else {
29316 expert_add_info_format(pinfo, type, &ei_ieee80211_eht_invalid_multi_link,
29317 "Invalid Multi-Link Control type, value is %u",
29318 multi_link_type);
29319 return;
29320 }
29321 offset += 2;
29322
29323 switch (multi_link_type) {
29324 case BASIC_MULTI_LINK0:
29325 /* Handle common info for basic element */
29326 common_info_len = tvb_get_uint8(tvb, offset);
29327 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29328 ett_eht_multi_link_common_info,
29329 NULL((void*)0), "Common Info");
29330 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29331 offset, 1, ENC_NA0x00000000);
29332 offset += 1;
29333
29334 is_ap = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool,((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
29335 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
29336 IS_AP_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
;
29337 if (assoc_counter_in_auth) {
29338 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
29339 if (conversation) {
29340 ieee80211_conversation_data_t *conversation_data =
29341 (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
29342 if (is_ap) {
29343 tvb_memcpy(tvb, conversation_data->ap_mld, offset, 6);
29344 conversation_data->mld_set = TRUE(!(0));
29345 } else {
29346 tvb_memcpy(tvb, conversation_data->sta_mld, offset, 6);
29347 conversation_data->mld_set = TRUE(!(0));
29348 }
29349 }
29350 }
29351
29352 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_mac,
29353 tvb, offset, 6, ENC_NA0x00000000);
29354 offset += 6;
29355
29356 if (present & EHT_LINK_ID0x01) {
29357 proto_tree_add_bitmask(common_tree, tvb, offset,
29358 hf_ieee80211_eht_common_field_link_id_field,
29359 ett_eht_multi_link_common_info_link_id,
29360 eht_link_id_hdrs, ENC_NA0x00000000);
29361 offset += 1;
29362 }
29363
29364 if (present & EHT_BSS_PARAMS0x02) {
29365 proto_tree_add_item(common_tree,
29366 hf_ieee80211_eht_common_field_bss_param_change_count,
29367 tvb, offset, 1, ENC_NA0x00000000);
29368 offset += 1;
29369 }
29370
29371 if (present & EHT_MEDIUM_SYNC0x04) {
29372 proto_tree_add_bitmask(common_tree, tvb, offset,
29373 hf_ieee80211_eht_common_field_medium_sync_field,
29374 ett_eht_multi_link_common_info_medium_sync,
29375 eht_medium_sync_delay_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29376 offset += 2;
29377 }
29378
29379 if (present & EHT_EML_CAPA0x08) {
29380 proto_tree_add_bitmask(common_tree, tvb, offset,
29381 hf_ieee80211_eht_common_field_eml_capabilities,
29382 ett_eht_multi_link_common_info_eml_capa,
29383 eht_eml_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29384 offset += 2;
29385 }
29386
29387 if (present & EHT_MLD_CAPA0x10) {
29388 proto_tree_add_bitmask(common_tree, tvb, offset,
29389 hf_ieee80211_eht_common_field_mld_capabilities,
29390 ett_eht_multi_link_common_info_mld_capa,
29391 eht_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29392 offset += 2;
29393 }
29394
29395 if (present & EHT_MLD_ID0x20) {
29396 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_id,
29397 tvb, offset, 1, ENC_NA0x00000000);
29398 offset += 1;
29399 }
29400
29401 if (present & EHT_EXT_MLD_CAPA0x40) {
29402 proto_tree_add_bitmask(common_tree, tvb, offset,
29403 hf_ieee80211_eht_common_field_ext_mld_capabilities,
29404 ett_eht_multi_link_common_info_ext_mld_capa,
29405 eht_ext_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29406 offset += 2;
29407 }
29408 break;
29409 case PROBE_MULTI_LINK1:
29410 /* Handle common info for probe request element */
29411 common_info_len = tvb_get_uint8(tvb, offset);
29412 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29413 ett_eht_multi_link_common_info,
29414 NULL((void*)0), "Common Info");
29415 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29416 offset, 1, ENC_NA0x00000000);
29417 offset += 1;
29418
29419 if (present & EHT_PML_MLD_ID0x01) {
29420 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_id,
29421 tvb, offset, 1, ENC_NA0x00000000);
29422 offset += 1;
29423 }
29424
29425 if (present & EHT_PML_MLD_MAC0x02) {
29426 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_mac,
29427 tvb, offset, 6, ENC_NA0x00000000);
29428 offset += 6;
29429 }
29430 break;
29431 case RECONFIGURATION_MULTI_LINK2:
29432 common_info_len = tvb_get_uint8(tvb, offset);
29433 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29434 ett_eht_multi_link_common_info,
29435 NULL((void*)0), "Common Info");
29436 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29437 offset, 1, ENC_NA0x00000000);
29438 offset += 1;
29439
29440 if (present & EHT_RECONF_MLD_MAC0x01) {
29441 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_mac,
29442 tvb, offset, 6, ENC_NA0x00000000);
29443 offset += 6;
29444 }
29445
29446 if (present & EHT_RECONF_EML_CAPA0x02) {
29447 proto_tree_add_bitmask(common_tree, tvb, offset,
29448 hf_ieee80211_eht_common_field_eml_capabilities,
29449 ett_eht_multi_link_common_info_eml_capa,
29450 eht_eml_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29451 offset += 2;
29452 }
29453
29454 if (present & EHT_RECONF_MLD_CAPA0x04) {
29455 proto_tree_add_bitmask(common_tree, tvb, offset,
29456 hf_ieee80211_eht_common_field_mld_capabilities,
29457 ett_eht_multi_link_common_info_mld_capa,
29458 eht_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29459 offset += 2;
29460 }
29461 if (present & EHT_RECONF_EXT_MLD_CAPA0x08) {
29462 proto_tree_add_bitmask(common_tree, tvb, offset,
29463 hf_ieee80211_eht_common_field_ext_mld_capabilities,
29464 ett_eht_multi_link_common_info_ext_mld_capa,
29465 eht_ext_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29466 offset += 2;
29467 }
29468 break;
29469 case TDLS_MULTI_LINK3:
29470 common_info_len = tvb_get_uint8(tvb, offset);
29471 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29472 ett_eht_multi_link_common_info,
29473 NULL((void*)0), "Common Info");
29474 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29475 offset, 1, ENC_NA0x00000000);
29476 offset += 1;
29477 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_ap_mld_mac,
29478 tvb, offset, 6, ENC_NA0x00000000);
29479 offset += 6;
29480 break;
29481 case PRIORITY_ACCESS_MULTI_LINK4:
29482 common_info_len = tvb_get_uint8(tvb, offset);
29483 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29484 ett_eht_multi_link_common_info,
29485 NULL((void*)0), "Common Info");
29486 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29487 offset, 1, ENC_NA0x00000000);
29488 offset += 1;
29489
29490 proto_tree_add_item(common_tree,
29491 hf_ieee80211_eht_common_field_ap_mld_mac, tvb,
29492 offset, 6, ENC_NA0x00000000);
29493 offset += 6;
29494 break;
29495 default:
29496 /* We should not reach here as we filtered out non-valid values above */
29497 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 29497))
;
29498 }
29499
29500 /* Handle the link info. It is 0 or more subelements */
29501 while (tvb_reported_length_remaining(tvb, offset)) {
29502 uint8_t tag, subelt_len;
29503 int link_id = -1;
29504
29505 if (tvb_reported_length_remaining(tvb, offset) < 2) {
29506 expert_add_info_format(pinfo, tree, &ei_ieee80211_eht_invalid_subelement,
29507 "Per-STA Profile subelements must contain at least 2 bytes");
29508 return;
29509 }
29510
29511 tag = tvb_get_uint8(tvb, offset);
29512 subelt_len = tvb_get_uint8(tvb, offset + 1);
29513
29514 tvbuff_t *new_tvb;
29515 int overhead = 0;
29516 int full_subelt_len;
29517
29518 switch (tag) {
29519 case 0:
29520 /*
29521 * We have to assemble the sub-elt if there is a continuations. And
29522 * it will have to be a composite TVB etc.
29523 */
29524 new_tvb = get_subelt_tvb(tvb, pinfo, offset, &overhead);
29525 full_subelt_len = tvb_captured_length_remaining(new_tvb, 0);
29526
29527 proto_tree_add_item(tree,
29528 hf_ieee80211_eht_multi_link_subelt_tag, tvb,
29529 offset, 1, ENC_NA0x00000000);
29530 offset += 1;
29531 if (full_subelt_len <= 255) {
29532 proto_tree_add_item(tree,
29533 hf_ieee80211_eht_multi_link_subelt_len, tvb,
29534 offset, 1, ENC_NA0x00000000);
29535 } else {
29536 proto_tree_add_uint(tree, hf_ieee80211_eht_multi_link_subelt_len, tvb,
29537 0, 0, full_subelt_len);
29538 }
29539 offset += 1;
29540
29541 subelt_tree = proto_tree_add_subtree_format(tree, new_tvb, 0,
29542 full_subelt_len,
29543 ett_eht_multi_link_subelt,
29544 NULL((void*)0), "Per-STA Profile %d", elt + 1);
29545 /*
29546 * There might be some per-STA elements that do not contain link IDs.
29547 */
29548
29549 /*
29550 * We use the sta profile num here. But we need to ensure it is not
29551 * seen as NULL and we send it in zero based. Will be incremented
29552 * before use.
29553 */
29554
29555 offset += dissect_multi_link_per_sta(new_tvb, pinfo, subelt_tree,
29556 multi_link_type, &link_id);
29557
29558 offset += overhead; /* Account for the overhead in the subelt */
29559 if (link_id != -1) {
29560 local_link_ids[elt] = link_id;
29561 }
29562 break;
29563 case 221:
29564 /* Add an expert info saying there are none so far? */
29565 offset += subelt_len + 2;
29566 break;
29567 default:
29568 offset += subelt_len + 2;
29569 break;
29570 }
29571 if (link_id != -1) {
29572 elt++;
29573 }
29574 }
29575 proto_tree_add_uint(tree, hf_index, tvb, 0, 0, elt);
29576
29577 if (elt) {
29578 wmem_strbuf_t *link_id_list = wmem_strbuf_new_sized(pinfo->pool, elt * 2);
29579 for (int i = 0; i < elt; i++) {
29580 if (local_link_ids[i] != -1) {
29581 wmem_strbuf_append_printf(link_id_list, (i == 0) ? "%d" : "_%d", local_link_ids[i]);
29582 }
29583 }
29584 proto_tree_add_string(tree, hf_ieee80211_eht_multi_link_link_id_list, tvb,
29585 0, 0, link_id_list->str);
29586 }
29587}
29588
29589static int * const eht_operation_hdrs[] = {
29590 &hf_ieee80211_eht_operation_info_present,
29591 &hf_ieee80211_eht_operation_subchannel_bitmap_present,
29592 &hf_ieee80211_eht_operation_default_pe_duration,
29593 &hf_ieee80211_eht_operation_group_addressed_bu_indication_limit,
29594 &hf_ieee80211_eht_operation_group_addressed_bu_indication_exp,
29595 &hf_ieee80211_eht_operation_mcs15_disable,
29596 &hf_ieee80211_eht_operation_reserved,
29597 NULL((void*)0)
29598};
29599
29600static int *const eht_op_control_hdrs[] = {
29601 &hf_ieee80211_eht_operation_control_chan_width,
29602 &hf_ieee80211_eht_operation_control_reserved,
29603 NULL((void*)0)
29604};
29605
29606static const value_string eht_operation_control_chan_wid_vals[] = {
29607 { 0, "20 MHz EHT BSS bandwidth" },
29608 { 1, "40 MHz EHT BSS bandwidth" },
29609 { 2, "80 MHz EHT BSS bandwidth" },
29610 { 3, "160 MHz EHT BSS bandwidth" },
29611 { 4, "320 MHz EHT BSS bandwidth" },
29612 { 5, "Reserved" },
29613 { 6, "Reserved" },
29614 { 7, "Reserved" },
29615 { 0, NULL((void*)0) },
29616};
29617
29618static void
29619dissect_eht_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
29620 int offset, int len _U___attribute__((unused)))
29621{
29622 uint8_t params = tvb_get_uint8(tvb, offset);
29623
29624 proto_tree_add_bitmask(tree, tvb, offset,
29625 hf_ieee80211_eht_operation_parameters,
29626 ett_eht_operation_params, eht_operation_hdrs,
29627 ENC_LITTLE_ENDIAN0x80000000);
29628 offset++;
29629
29630 if (len < 5) {
29631 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
29632 "This IE appears to conform to an earlier draft than D2.0 and lacks the Basic EHT MCS And MSS Set, len=%d", len);
29633 return;
29634
29635 } else {
29636 proto_tree_add_item(tree, hf_ieee80211_eht_basic_eht_mcs_nss_set, tvb,
29637 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29638
29639 offset += 4;
29640 }
29641
29642 if (params & 0x01) { /* EHT Operations Info present */
29643 proto_tree_add_bitmask(tree, tvb, offset,
29644 hf_ieee80211_eht_operation_control,
29645 ett_eht_operation_control,
29646 eht_op_control_hdrs,
29647 ENC_NA0x00000000);
29648 offset++;
29649
29650 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs0, tvb, offset, 1,
29651 ENC_NA0x00000000);
29652 offset++;
29653
29654 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs1, tvb, offset, 1,
29655 ENC_NA0x00000000);
29656 offset++;
29657 }
29658
29659 if (params & 0x02) { /* Disabled subchannel bitmap present */
29660 proto_tree_add_item(tree, hf_ieee80211_eht_operation_disabled_bitmap, tvb,
29661 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29662 }
29663}
29664
29665static const value_string eht_link_adaptation_vals[] = {
29666 { 0, "No feedback" },
29667 { 1, "Reserved" },
29668 { 2, "Unsolicited" },
29669 { 3, "Solicited and unsolicited" },
29670 { 0, NULL((void*)0) },
29671};
29672
29673static int * const eht_mac_capa_hdrs[] = {
29674 &hf_ieee80211_eht_mac_capa_epcs_prio_access_support,
29675 &hf_ieee80211_eht_mac_capa_eht_om_control_support,
29676 &hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_1_support,
29677 &hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_2_support,
29678 &hf_ieee80211_eht_mac_capa_restricted_twt_support,
29679 &hf_ieee80211_eht_mac_capa_scs_traffic_description_support,
29680 &hf_ieee80211_eht_mac_capa_maximum_mpdu_length,
29681 &hf_ieee80211_eht_mac_capa_maximum_ampdu_length_exp_ext,
29682 &hf_ieee80211_eht_mac_capa_eht_trs_support,
29683 &hf_ieee80211_eht_mac_capa_txop_return_support_txop_sha_mode,
29684 &hf_ieee80211_eht_mac_capa_two_bqrs_support,
29685 &hf_ieee80211_eht_mac_capa_eht_link_adaptation_support,
29686 &hf_ieee80211_eht_mac_capa_unsolicited_epcs_update,
29687 &hf_ieee80211_eht_mac_capa_reserved,
29688 NULL((void*)0)
29689};
29690
29691static int * const eht_phy_bits_0_15[] = {
29692 &hf_ieee80211_eht_phy_bits_0_15_reserved,
29693 &hf_ieee80211_eht_phy_bits_0_15_320_mhz_in_6ghz,
29694 &hf_ieee80211_eht_phy_bits_0_15_242_tone_ru_bw_wider_20mhz,
29695 &hf_ieee80211_eht_phy_bits_0_15_ndp_and_3_2_us_gi,
29696 &hf_ieee80211_eht_phy_bits_0_15_partial_bw_ul_mu_mimo,
29697 &hf_ieee80211_eht_phy_bits_0_15_su_beamformer,
29698 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee,
29699 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee_le_80mhz,
29700 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_160mhz,
29701 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_320mhz,
29702 NULL((void*)0)
29703};
29704
29705static int * const eht_phy_bits_16_31[] = {
29706 &hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_lt_80mhz,
29707 &hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_160mhz,
29708 &hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_320mhz,
29709 &hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_su_feedback,
29710 &hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_mu_feedback,
29711 &hf_ieee80211_eht_phy_bits_16_31_codebook_size_4_2_su_fbck,
29712 &hf_ieee80211_eht_phy_bits_16_31_codebook_size_7_5_mu_fbck,
29713 &hf_ieee80211_eht_phy_bits_16_31_triggered_su_beemform_fbck,
29714 &hf_ieee80211_eht_phy_bits_16_31_triggered_mu_beemform_p_bw_fbck,
29715 &hf_ieee80211_eht_phy_bits_16_31_triggered_cqi_feedback,
29716 NULL((void*)0)
29717};
29718
29719static int * const eht_phy_bits_32_39[] = {
29720 &hf_ieee80211_eht_phy_bits_32_39_partial_bw_dl_mu_mimo,
29721 &hf_ieee80211_eht_phy_bits_32_39_eht_psr_based_sr_support,
29722 &hf_ieee80211_eht_phy_bits_32_39_power_boost_factor_support,
29723 &hf_ieee80211_eht_phy_bits_32_39_eht_mu_ppdu_w_4x_eht_ltf_08_gi,
29724 &hf_ieee80211_eht_phy_bits_32_39_max_nc,
29725 NULL((void*)0)
29726};
29727
29728static int * const eht_phy_bits_40_63[] = {
29729 &hf_ieee80211_eht_phy_bits_40_63_non_triggered_cqi_fbck,
29730 &hf_ieee80211_eht_phy_bits_40_63_tx_1024_4096_qam_lt_242_ru_support,
29731 &hf_ieee80211_eht_phy_bits_40_63_rx_1024_4096_qam_lt_242_ru_support,
29732 &hf_ieee80211_eht_phy_bits_40_63_ppe_thresholds_present,
29733 &hf_ieee80211_eht_phy_bits_40_63_common_nominal_packet_padding,
29734 &hf_ieee80211_eht_phy_bits_40_63_max_num_supported_eht_ltfs,
29735 &hf_ieee80211_eht_phy_bits_40_63_support_of_mcx_15,
29736 &hf_ieee80211_eht_phy_bits_40_63_support_of_eht_dup_in_6_ghz,
29737 &hf_ieee80211_eht_phy_bits_40_63_support_20_mhz_sta_ndp_wide_bw,
29738 &hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_le_80_mhz,
29739 &hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_160_mhz,
29740 &hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_320_mhz,
29741 &hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_le_80_mhz,
29742 &hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_160_mhz,
29743 &hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_320_mhz,
29744 &hf_ieee80211_eht_phy_bits_40_63_tb_sounding_feedback_rate_limit,
29745 NULL((void*)0)
29746};
29747
29748static int * const eht_phy_bits_64_71[] = {
29749 &hf_ieee80211_eht_phy_bits_64_71_rx_1024_qam_wid_bw_dl_ofdma_sup,
29750 &hf_ieee80211_eht_phy_bits_64_71_rx_4096_qam_wid_bw_dl_ofdma_sup,
29751 &hf_ieee80211_eht_phy_bits_64_71_20m_limit_capa_support,
29752 &hf_ieee80211_eht_phy_bits_64_71_20m_mu_beam_feedback_dl_mu_mimo,
29753 &hf_ieee80211_eht_phy_bits_64_71_20m_mru_support,
29754 &hf_ieee80211_eht_phy_bits_64_71_reserved,
29755 NULL((void*)0)
29756};
29757
29758static int * const eht_mcs_20mhz_map_hdrs[] = {
29759 &hf_ieee80211_eht_rx_max_nss_20mhz_0_7,
29760 &hf_ieee80211_eht_tx_max_nss_20mhz_0_7,
29761 &hf_ieee80211_eht_rx_max_nss_20mhz_8_9,
29762 &hf_ieee80211_eht_tx_max_nss_20mhz_8_9,
29763 &hf_ieee80211_eht_rx_max_nss_20mhz_10_11,
29764 &hf_ieee80211_eht_tx_max_nss_20mhz_10_11,
29765 &hf_ieee80211_eht_rx_max_nss_20mhz_12_13,
29766 &hf_ieee80211_eht_tx_max_nss_20mhz_12_13,
29767 NULL((void*)0)
29768};
29769
29770static void
29771dissect_eht_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
29772 proto_tree *tree, int offset, int len _U___attribute__((unused)))
29773{
29774 proto_tree *eht_phy_capa = NULL((void*)0), *eht_mcs_nss = NULL((void*)0);
29775 bool_Bool ch_320mhz_in_6ghz = false0;
29776 bool_Bool ppe_thresholds_present = false0;
29777
29778 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_eht_mac_capabilities,
29779 ett_eht_mac_capa, eht_mac_capa_hdrs,
29780 ENC_LITTLE_ENDIAN0x80000000);
29781 offset += 2;
29782
29783 ch_320mhz_in_6ghz = tvb_get_uint8(tvb, offset) & 0x02;
29784
29785 eht_phy_capa = proto_tree_add_subtree(tree, tvb, offset, 9,
29786 ett_eht_phy_capa, NULL((void*)0),
29787 "EHT PHY Capabilities Information");
29788 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29789 hf_ieee80211_eht_phy_bits_0_15,
29790 ett_eht_phy_bits_0_15, eht_phy_bits_0_15,
29791 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29792 offset += 2;
29793
29794 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29795 hf_ieee80211_eht_phy_bits_16_31,
29796 ett_eht_phy_bits_16_31, eht_phy_bits_16_31,
29797 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29798 offset += 2;
29799
29800 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29801 hf_ieee80211_eht_phy_bits_32_39,
29802 ett_eht_phy_bits_32_39, eht_phy_bits_32_39,
29803 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29804 offset += 1;
29805
29806 ppe_thresholds_present = tvb_get_uint8(tvb, offset) & 0x08;
29807 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29808 hf_ieee80211_eht_phy_bits_40_63,
29809 ett_eht_phy_bits_40_63, eht_phy_bits_40_63,
29810 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29811 offset += 3;
29812
29813 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29814 hf_ieee80211_eht_phy_bits_64_71,
29815 ett_eht_phy_bits_64_71, eht_phy_bits_64_71,
29816 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29817 offset += 1;
29818
29819 /*
29820 * We need to figure out the channel width set and frequency for this but it
29821 * is only possible if we got the frequency info and the channel width set
29822 * was added to the pinfo. If we don't have that simply add the rest as
29823 * uninterpreted bytes.
29824 */
29825 eht_mcs_nss = proto_tree_add_subtree(tree, tvb, offset,
29826 tvb_captured_length_remaining(tvb, offset),
29827 ett_eht_phy_mcs_nss, NULL((void*)0),
29828 "Supported EHT-MCS and NSS Set");
29829
29830 if (pinfo->pseudo_header->ieee_802_11.has_frequency) {
29831 unsigned *p_channel_width_set =
29832 (unsigned *)p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan,
29833 HE_CHANNEL_WIDTH_KEY);
29834 unsigned channel_width_set = 0;
29835 /*
29836 * If we got it, we can handle the rest, otherwise not. Note,
29837 * we can determine if it was ever set by checking for non-zero because
29838 * we set at least one bit when saving it..
29839 */
29840 if (p_channel_width_set) {
29841 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)))
29842 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, IS_AP_KEY)))
29843 IS_AP_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, IS_AP_KEY)))
;
29844 channel_width_set = GPOINTER_TO_UINT(p_channel_width_set)((guint) (gulong) (p_channel_width_set));
29845
29846 /* Distinguish between the AP and the non-AP cases as the logis is easier
29847 * even if that means some duplicate code.
29848 */
29849 if (is_ap) {
29850 /* The EHT-MCS and NSS set for BW <= 80MHz Ap etc */
29851 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29852 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29853 "Insufficient bytes for EHT Capabilities. Need 3. "
29854 "Perhaps the EHT Capabilities field is malformed.");
29855 return;
29856 }
29857 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29858 hf_ieee80211_eht_mcs_and_nss_le_80mhz,
29859 ett_eht_phy_mcs_nss_set,
29860 eht_le_80_mcs_map_hdrs,
29861 ENC_LITTLE_ENDIAN0x80000000);
29862 offset += 3;
29863
29864 if (channel_width_set & 0x04) { /* B2 is set */
29865 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29866 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29867 "Insufficient bytes for EHT Capabilities. Need 3 for AP 160MHz. "
29868 "Perhaps the EHT Capabilities field is malformed.");
29869 return;
29870 }
29871 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29872 hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
29873 ett_eht_phy_mcs_nss_set,
29874 eht_160_mcs_map_hdrs,
29875 ENC_LITTLE_ENDIAN0x80000000);
29876 offset += 3;
29877 }
29878 if (ch_320mhz_in_6ghz &&
29879 IS_6_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 5955
)
) {
29880 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29881 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29882 "Insufficient bytes for EHT Capabilities. Need 3. "
29883 "Perhaps the EHT Capabilities field is malformed.");
29884 return;
29885 }
29886 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29887 hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
29888 ett_eht_phy_mcs_nss_set,
29889 eht_320_mcs_map_hdrs,
29890 ENC_LITTLE_ENDIAN0x80000000);
29891 offset += 3;
29892 }
29893 } else {
29894 /* Add the info for a 20MHz-Only Non-AP. But have to check both
29895 * frequency sets for some cases */
29896 if ((channel_width_set & 0x07) == 0) {
29897 if (tvb_captured_length_remaining(tvb, offset) < 4) {
29898 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29899 "Insufficient bytes for EHT Capabilities. Need 4. "
29900 "Perhaps the EHT Capabilities field is malformed.");
29901 return;
29902 }
29903 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29904 hf_ieee80211_eht_mcs_and_nss_non_ap,
29905 ett_eht_phy_mcs_nss_set,
29906 eht_mcs_20mhz_map_hdrs,
29907 ENC_LITTLE_ENDIAN0x80000000);
29908 offset += 4;
29909 }
29910 /* Now, the next set BW <= 80MHz except ...
29911 * If 2.4GHz and B0 is 1, or 5GHz or 6GHz and B1 */
29912 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)
&&
29913 channel_width_set & 0x01) ||
29914 (channel_width_set & 0x02)) {
29915 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29916 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29917 "Insufficient bytes for EHT Capabilities. Need 3 for le 80MHz. "
29918 "Perhaps the EHT Capabilities field is malformed.");
29919 return;
29920 }
29921 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29922 hf_ieee80211_eht_mcs_and_nss_le_80mhz,
29923 ett_eht_phy_mcs_nss_set,
29924 eht_le_80_mcs_map_hdrs,
29925 ENC_LITTLE_ENDIAN0x80000000);
29926 offset += 3;
29927
29928 }
29929 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)
&&
29930 channel_width_set & 0x04) { /* B2 is set */
29931 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29932 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29933 "Insufficient bytes for EHT Capabilities. Need 3 for 160MHz. "
29934 "Perhaps the EHT Capabilities field is malformed.");
29935 return;
29936 }
29937 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29938 hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
29939 ett_eht_phy_mcs_nss_set,
29940 eht_160_mcs_map_hdrs,
29941 ENC_LITTLE_ENDIAN0x80000000);
29942 offset += 3;
29943 }
29944 if (ch_320mhz_in_6ghz &&
29945 IS_6_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 5955
)
) {
29946 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29947 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29948 "Insufficient bytes for EHT Capabilities. Need 3 for 320MHz. "
29949 "Perhaps the EHT Capabilities field is malformed.");
29950 return;
29951 }
29952 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29953 hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
29954 ett_eht_phy_mcs_nss_set,
29955 eht_320_mcs_map_hdrs,
29956 ENC_LITTLE_ENDIAN0x80000000);
29957 offset += 3;
29958 }
29959 }
29960 } else {
29961 proto_tree_add_item(eht_mcs_nss, hf_ieee80211_eht_supported_mcs_nss_bytes,
29962 tvb, offset,
29963 tvb_captured_length_remaining(tvb, offset), ENC_NA0x00000000);
29964 offset += tvb_captured_length_remaining(tvb, offset);
29965 }
29966 }
29967
29968 /*
29969 * If the PPE thresholds are present, add them.
29970 */
29971 if (ppe_thresholds_present) {
29972 proto_tree_add_item(tree, hf_ieee80211_eht_ppe_thresholds, tvb, offset,
29973 tvb_captured_length_remaining(tvb, offset), ENC_NA0x00000000);
29974 }
29975}
29976
29977static const value_string tid_to_link_mapping_dirn_vals[] = {
29978 { 0, "Uplink" },
29979 { 1, "Downlink" },
29980 { 2, "Bidirectional link" },
29981 { 0, NULL((void*)0) }
29982};
29983
29984static const value_string ttl_link_mapping_size_vals[] = {
29985 { 0, "2 octets" },
29986 { 1, "1 octet" },
29987 { 0, NULL((void*)0) }
29988};
29989
29990static int * const eht_ttl_mapping_control_hdrs[] = {
29991 &hf_ieee80211_eht_ttl_mapping_direction,
29992 &hf_ieee80211_eht_ttl_default_link_mapping,
29993 &hf_ieee80211_eht_ttl_mapping_switch_time_pres,
29994 &hf_ieee80211_eht_ttl_expected_dura_pres,
29995 &hf_ieee80211_eht_ttl_link_mapping_size,
29996 &hf_ieee80211_eht_ttl_mapping_reserved,
29997 NULL((void*)0)
29998};
29999
30000static void
30001dissect_tid_to_link_mapping(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30002 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30003{
30004 proto_item *control = NULL((void*)0);
30005 uint8_t presence;
30006 uint8_t control_byte = tvb_get_uint8(tvb, offset);
30007 uint8_t map_size = 2;
30008 int hf_array[8] = {hf_ieee80211_eht_ttl_mapping_tid_0_link_mapping,
30009 hf_ieee80211_eht_ttl_mapping_tid_1_link_mapping,
30010 hf_ieee80211_eht_ttl_mapping_tid_2_link_mapping,
30011 hf_ieee80211_eht_ttl_mapping_tid_3_link_mapping,
30012 hf_ieee80211_eht_ttl_mapping_tid_4_link_mapping,
30013 hf_ieee80211_eht_ttl_mapping_tid_5_link_mapping,
30014 hf_ieee80211_eht_ttl_mapping_tid_6_link_mapping,
30015 hf_ieee80211_eht_ttl_mapping_tid_7_link_mapping};
30016 int hf_index = 0;
30017
30018 /*
30019 * If the Default Link Mapping bit is set, we only have 1 byte, otherwise 2
30020 */
30021 control = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
30022 hf_ieee80211_eht_ttl_mapping_control,
30023 ett_eht_ttl_mapping,
30024 eht_ttl_mapping_control_hdrs,
30025 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30026 offset += 1;
30027
30028 if (len == 1) {
30029 return;
30030 }
30031
30032 presence = tvb_get_uint8(tvb, offset);
30033
30034 proto_tree_add_item(control, hf_ieee80211_eht_ttl_mapping_presence, tvb,
30035 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30036 offset += 1;
30037
30038 if (control_byte & 0x08) {
30039 proto_tree_add_item(tree, hf_ieee80211_eht_ttl_mapping_switch_time, tvb,
30040 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30041 offset += 2;
30042 }
30043
30044 if (control_byte & 0x10) {
30045 proto_tree_add_item(tree, hf_ieee80211_eht_ttl_mapping_expected_duration, tvb,
30046 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
30047 offset += 3;
30048 }
30049
30050 if (control_byte & 0x20) {
30051 map_size = 1;
30052 }
30053 while (presence) {
30054 if (presence & 0x01) {
30055 proto_tree_add_item(tree, hf_array[hf_index], tvb,
30056 offset, map_size, ENC_LITTLE_ENDIAN0x80000000);
30057 offset += map_size;
30058 }
30059 hf_index++;
30060 presence = presence >> 1;
30061 }
30062}
30063
30064static int * const ml_traffic_control_hdrs[] = {
30065 &hf_ieee80211_eht_multi_link_tc_bitmap_size,
30066 &hf_ieee80211_eht_multi_link_tc_aid_offset,
30067 &hf_ieee80211_eht_multi_link_tc_reserved,
30068 NULL((void*)0)
30069};
30070
30071static void
30072dissect_multi_link_traffic(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30073 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30074{
30075 proto_tree_add_bitmask(tree, tvb, offset,
30076 hf_ieee80211_eht_multi_link_traffic_control,
30077 ett_eht_eht_multi_link_tc,
30078 ml_traffic_control_hdrs,
30079 ENC_LITTLE_ENDIAN0x80000000);
30080 offset += 2;
30081 len -= 2;
30082
30083 /* If there is nothing more, bail. */
30084 if (len <= 0)
30085 return;
30086
30087 /* Now, add the traffic indication list as a byte string for the moment */
30088 proto_tree_add_item(tree, hf_ieee80211_eht_multi_link_traffic_indication,
30089 tvb, offset, tvb_captured_length_remaining(tvb, offset),
30090 ENC_NA0x00000000);
30091}
30092
30093#define MAX_MSDU_SIZE_PRESENT0x0001 0x0001
30094#define SERVICE_START_TIME_PRESENT0x0002 0x0002
30095#define SERVICE_START_TIME_LID_PRESENT0x0004 0x0004
30096#define MEAN_DATA_RATE_PRESENT0x0008 0x0008
30097#define BURST_SIZE_PRESENT0x0010 0x0010
30098#define MSDU_LIFETIME_PRESENT0x0020 0x0020
30099#define MSDU_DELIVERY_INFO_PRESENT0x0040 0x0040
30100#define MEDIUM_TIME_PRESENT0x0080 0x0080
30101
30102static const value_string qos_chars_dirn_vals[] = {
30103 { 0, "Uplink" },
30104 { 1, "Downlink" },
30105 { 2, "Direct link" },
30106 { 3, "Reserved" },
30107 { 0, NULL((void*)0) }
30108};
30109
30110static void
30111dissect_qos_characteristics(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30112 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30113{
30114 proto_tree *control_tree = NULL((void*)0);
30115 uint16_t presence_bitmap = (tvb_get_letohl(tvb, offset) >> 9) & 0xFFFF;
30116
30117 control_tree = proto_tree_add_subtree(tree, tvb, offset, 4,
30118 ett_eht_qos_characteristics,
30119 NULL((void*)0), "Control Info");
30120
30121 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_dirn, tvb,
30122 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30123 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_tid, tvb,
30124 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30125 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_user_prio, tvb,
30126 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30127 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_bitmap, tvb,
30128 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30129 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_linkid, tvb,
30130 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30131 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_resrvd, tvb,
30132 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30133 offset += 4;
30134
30135 /* Now add the fields, including the optional ones. */
30136 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_min_svc_interval, tvb,
30137 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30138 offset += 4;
30139
30140 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_max_svc_interval, tvb,
30141 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30142 offset += 4;
30143
30144 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_min_data_rate, tvb,
30145 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
30146 offset += 3;
30147
30148 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_delay_bound, tvb,
30149 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
30150 offset += 3;
30151
30152 /* Now the optional ones */
30153 if (presence_bitmap & MAX_MSDU_SIZE_PRESENT0x0001) {
30154 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_max_msdu_size, tvb,
30155 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30156 offset += 2;
30157 }
30158
30159 if (presence_bitmap & SERVICE_START_TIME_PRESENT0x0002) {
30160 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_service_start_time,
30161 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30162 offset += 4;
30163 }
30164
30165 if (presence_bitmap & SERVICE_START_TIME_LID_PRESENT0x0004) {
30166 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_service_start_time_linkid,
30167 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30168 offset += 1;
30169 }
30170
30171 if (presence_bitmap & MEAN_DATA_RATE_PRESENT0x0008) {
30172 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_mean_data_rate, tvb,
30173 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
30174 offset += 3;
30175 }
30176
30177 if (presence_bitmap & BURST_SIZE_PRESENT0x0010) {
30178 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_burst_size, tvb,
30179 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30180 offset += 4;
30181 }
30182
30183 if (presence_bitmap & MSDU_LIFETIME_PRESENT0x0020) {
30184 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_msdu_lifetime, tvb,
30185 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30186 offset += 2;
30187 }
30188
30189 if (presence_bitmap & MSDU_DELIVERY_INFO_PRESENT0x0040) {
30190 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_msdu_delivery_ratio,
30191 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30192 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_msdu_count_exponent,
30193 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30194 offset += 1;
30195 }
30196
30197 if (presence_bitmap & MEDIUM_TIME_PRESENT0x0080) {
30198 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_medium_time, tvb,
30199 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30200 }
30201}
30202
30203static void
30204dissect_akm_suite_selector(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30205 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30206{
30207 proto_tree_add_item(tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
30208 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
30209 {
30210 proto_tree_add_item(tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
30211 } else {
30212 proto_tree_add_item(tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
30213 }
30214}
30215
30216static void
30217dissect_mlo_link_information(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30218 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30219{
30220 proto_tree_add_item(tree, hf_ieee80211_eht_link_id_bitmap, tvb, offset, 2,
30221 ENC_LITTLE_ENDIAN0x80000000);
30222}
30223
30224static int * const ieee80211_eht_aid_bmapctl[] = {
30225 &hf_ieee80211_eht_aid_bitmap_control_reserved,
30226 &hf_ieee80211_eht_aid_bitmap_control_offset,
30227 NULL((void*)0)
30228};
30229
30230static void
30231dissect_aid_bitmap(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30232 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30233{
30234 unsigned aid, pab_len, n1, i, j, byte;
30235
30236 pab_len = tvb_get_uint8(tvb, offset);
30237 proto_tree_add_item(tree, hf_ieee80211_eht_aid_bitmap_length, tvb, offset, 1,
30238 ENC_LITTLE_ENDIAN0x80000000);
30239 offset += 1;
30240
30241 n1 = tvb_get_uint8(tvb, offset) & 0xFE;
30242 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
30243 hf_ieee80211_eht_aid_bitmap_control,
30244 ett_eht_aid_bmapctl_tree,
30245 ieee80211_eht_aid_bmapctl,
30246 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30247 offset += 1;
30248
30249 proto_tree_add_item(tree, hf_ieee80211_eht_aid_bitmap_partial_aid_bitmap,
30250 tvb, offset, pab_len, ENC_NA0x00000000);
30251 for (i = 0; i < pab_len; i++) {
30252 byte = tvb_get_uint8(tvb, offset + i);
30253 for (j = 0; j < 8; j++) {
30254 if (byte & (1 << j)) {
30255 aid = 8*n1 + 8*i + j;
30256 proto_tree_add_uint(tree, hf_ieee80211_eht_aid_bitmap_aid, tvb,
30257 offset + i, 1, aid);
30258 }
30259 }
30260 }
30261}
30262
30263static int *const eht_bw_indi_param_hdrs[] = {
30264 &hf_ieee80211_eht_bw_indi_param_reserved,
30265 &hf_ieee80211_eht_bw_indi_param_disabled_subchan_bitmap,
30266 &hf_ieee80211_eht_bw_indi_param_reserved1,
30267 NULL((void*)0)
30268};
30269
30270static void
30271dissect_bandwidth_indication(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30272 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30273{
30274 uint8_t params;
30275
30276 params = tvb_get_uint8(tvb, offset);
30277 proto_tree_add_bitmask(tree, tvb, offset,
30278 hf_ieee80211_eht_bw_indi_param,
30279 ett_eht_bw_indication_param,
30280 eht_bw_indi_param_hdrs,
30281 ENC_NA0x00000000);
30282 offset++;
30283
30284 proto_tree_add_bitmask(tree, tvb, offset,
30285 hf_ieee80211_eht_operation_control,
30286 ett_eht_operation_control,
30287 eht_op_control_hdrs,
30288 ENC_NA0x00000000);
30289 offset++;
30290
30291 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs0, tvb, offset, 1,
30292 ENC_NA0x00000000);
30293 offset++;
30294
30295 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs1, tvb, offset, 1,
30296 ENC_NA0x00000000);
30297 offset++;
30298
30299 if (params & 0x02) { /* Disabled subchannel bitmap present */
30300 proto_item *item;
30301 int8_t i;
30302 char bitmap_binary[32];
30303 uint16_t bitmap = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
30304 item = proto_tree_add_item(tree, hf_ieee80211_eht_bw_indi_diabled_bitmap, tvb,
30305 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30306 memset(bitmap_binary, 0 ,sizeof(bitmap_binary));
30307 for (i = 15; i >= 0; i--) {
30308 if (bitmap & (1 << i))
30309 bitmap_binary[15-i] = '1';
30310 else
30311 bitmap_binary[15-i] = '0';
30312 }
30313 proto_item_append_text(item, " (%s)", bitmap_binary);
30314 }
30315}
30316
30317static int *const eht_nonap_sta_regu_conn_hdrs[] = {
30318 &hf_ieee80211_nonap_sta_regu_conn_indoor_ap_valid,
30319 &hf_ieee80211_nonap_sta_regu_conn_indoor_ap,
30320 &hf_ieee80211_nonap_sta_regu_conn_sp_ap_valid,
30321 &hf_ieee80211_nonap_sta_regu_conn_sp_ap,
30322 &hf_ieee80211_nonap_sta_regu_conn_reserved,
30323 NULL((void*)0)
30324};
30325
30326static void
30327dissect_nonap_sta_regulatory_connect(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30328 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30329{
30330 proto_tree_add_bitmask(tree, tvb, offset,
30331 hf_ieee80211_nonap_sta_regulatory_conn,
30332 ett_nonap_sta_regulatory_conn,
30333 eht_nonap_sta_regu_conn_hdrs,
30334 ENC_NA0x00000000);
30335}
30336
30337static void
30338add_min_max_time_between_measurements(proto_item *item, tvbuff_t *tvb, packet_info *pinfo, int offset, int sub_length)
30339{
30340 uint64_t ntb_specific, min, max;
30341
30342 if (sub_length < 6) {
30343 return;
30344 }
30345
30346 ntb_specific = tvb_get_int48(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
30347
30348 min = (ntb_specific >> 1) & GENMASK(22, 0)(((1U << ((22) - (0) + 1)) - 1) << (0));
30349 max = (ntb_specific >> 24) & GENMASK(19, 0)(((1U << ((19) - (0) + 1)) - 1) << (0));
30350
30351 /* convert to microseconds */
30352 min *= 100; /* min time is in units of 100 microseconds */
30353 max *= 10 * 1000; /* max time is in units of 10 milliseconds */
30354
30355 float minf = (float)(min / 1E6);
30356 float maxf = (float)(max / 1E6);
30357
30358 proto_item_append_text(item, " (Min=%.6gs, Max=%.6gs)", minf, maxf);
30359 col_append_fstr(pinfo->cinfo, COL_INFO, ", Min=%.6gs, Max=%.6gs", minf, maxf);
30360}
30361
30362static void
30363dissect_ntb_specific(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int sub_length)
30364{
30365 static int * const nontb_fields[] = {
30366 &hf_ieee80211_tag_ranging_ntb_reserved1,
30367 &hf_ieee80211_tag_ranging_ntb_min_time_msmts,
30368 &hf_ieee80211_tag_ranging_ntb_max_time_msmts,
30369 &hf_ieee80211_tag_ranging_ntb_r2i_tx_power,
30370 &hf_ieee80211_tag_ranging_ntb_i2r_tx_power,
30371 &hf_ieee80211_tag_ranging_ntb_reserved2,
30372 NULL((void*)0)};
30373 proto_tree *item;
30374
30375 item = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_ranging_ntb,
30376 ett_tag_ranging_ntb, nontb_fields,
30377 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30378 col_append_str(pinfo->cinfo, COL_INFO, ", NTB");
30379 add_min_max_time_between_measurements(item, tvb, pinfo, offset, sub_length);
30380}
30381
30382static const range_string ranging_subelt_types[] = {
30383 { 0, 0, "Non-TB specific" },
30384 { 1, 1, "TB-specific" },
30385 { 2, 2, "Secure HE-LTF" },
30386 { 3, 220, "Reserved" },
30387 { 221, 221, "Vendor Specific" },
30388 { 222, 255, "Reserved" },
30389 { 0, 0, NULL((void*)0) }
30390};
30391
30392static int
30393dissect_tb_specific(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
30394 int offset, int sub_length _U___attribute__((unused)))
30395{
30396
30397 /* Now add the extra 32-bits of items */
30398 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_aid_rsid, tvb,
30399 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30400 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_device_class, tvb,
30401 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30402 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_full_bw_ul_mu_mimo, tvb,
30403 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30404 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_trigger_frame_paddur,
30405 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30406 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_max_sess_exp, tvb,
30407 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30408 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_passive_tb_ranging, tvb,
30409 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30410 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_tb_specific_reserved,
30411 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30412 offset += 4;
30413
30414 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
30415
30416 return offset;
30417}
30418
30419static int * const ranging_subelement_secure_he_ltf_fields[] = {
30420 &hf_ieee80211_tag_ranging_secure_he_ltf_version,
30421 &hf_ieee80211_tag_ranging_secure_he_ltf_req,
30422 &hf_ieee80211_tag_ranging_secure_he_ltf_r2i_tx_window,
30423 &hf_ieee80211_tag_ranging_secure_he_ltf_i2r_tx_window,
30424 &hf_ieee80211_tag_ranging_secure_he_ltf_reserved,
30425 NULL((void*)0)};
30426
30427static void
30428dissect_ranging_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
30429{
30430 int tag_len = tvb_reported_length(tvb);
30431 unsigned subelt = 0;
30432 static int * const ranging_params_fields[] = {
30433 &hf_ieee80211_tag_ranging_status_indication,
30434 &hf_ieee80211_tag_ranging_value,
30435 &hf_ieee80211_tag_ranging_i2r_lmr_feedback,
30436 &hf_ieee80211_tag_ranging_secure_ltf_required,
30437 &hf_ieee80211_tag_ranging_secure_ltf_support,
30438 &hf_ieee80211_tag_ranging_ranging_priority,
30439 &hf_ieee80211_tag_ranging_r2i_toa_type,
30440 &hf_ieee80211_tag_ranging_i2r_toa_type,
30441 &hf_ieee80211_tag_ranging_r2i_aoa_requested,
30442 &hf_ieee80211_tag_ranging_i2r_aoa_requested,
30443 &hf_ieee80211_tag_ranging_format_and_bandwidth,
30444 &hf_ieee80211_tag_ranging_immediate_r2i_feedback,
30445 &hf_ieee80211_tag_ranging_immediate_i2r_feedback,
30446 &hf_ieee80211_tag_ranging_max_i2r_repetition,
30447 &hf_ieee80211_tag_ranging_max_r2i_repetition,
30448 &hf_ieee80211_tag_ranging_reserved1,
30449 &hf_ieee80211_tag_ranging_reserved2,
30450 &hf_ieee80211_tag_ranging_max_r2i_sts_le_80_mhz,
30451 &hf_ieee80211_tag_ranging_max_r2i_sts_gt_80_mhz,
30452 &hf_ieee80211_tag_ranging_max_r2i_ltf_total,
30453 &hf_ieee80211_tag_ranging_max_i2r_ltf_total,
30454 &hf_ieee80211_tag_ranging_max_i2r_sts_le_80_mhz,
30455 &hf_ieee80211_tag_ranging_max_i2r_sts_gt_80_mhz,
30456 &hf_ieee80211_tag_ranging_bss_color_info,
30457 NULL((void*)0)};
30458 static const value_string short_status[] = {
30459 { 0, "Reserved" },
30460 { 1, "Successful" },
30461 { 2, "Request incapable" },
30462 { 3, "Request failed" },
30463 { 0, NULL((void*)0) }
30464 };
30465
30466 if (len < 6) {
30467 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
30468 "Ranging Parameters must be at least 6 octets long");
30469 return;
30470 }
30471
30472 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_ranging_parameters,
30473 ett_tag_ranging, ranging_params_fields,
30474 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30475 uint8_t status = tvb_get_uint8(tvb, offset) & GENMASK(1, 0)(((1U << ((1) - (0) + 1)) - 1) << (0));
30476 if (status != 0) {
30477 col_append_fstr(pinfo->cinfo, COL_INFO, ", Status=%d (%s)", status,
30478 val_to_str_const(status, short_status, "Unknown"));
30479 }
30480
30481 offset += 7;
30482
30483 while (offset < len) {
30484 uint8_t sub_id, sub_length;
30485 proto_item *sub_elt_len, *rsti;
30486 proto_tree *sub_tree;
30487 unsigned start_offset = offset;
30488
30489 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
30490 ett_ranging_subelement_tree, &rsti,
30491 "Ranging Subelement %d", subelt);
30492
30493
30494 sub_id = tvb_get_uint8(tvb, offset);
30495 proto_item_append_text(sub_tree, ": %s",
30496 rval_to_str_const(sub_id, ranging_subelt_types, "Reserved"));
30497 proto_tree_add_item(sub_tree, hf_ieee80211_tag_ranging_subelt_tag, tvb,
30498 offset, 1, ENC_NA0x00000000);
30499 offset += 1;
30500
30501 sub_length = tvb_get_uint8(tvb, offset);
30502 sub_elt_len = proto_tree_add_item(sub_tree,
30503 hf_ieee80211_tag_ranging_subelt_len,
30504 tvb, offset, 1, ENC_NA0x00000000);
30505 offset += 1;
30506
30507 if (offset + sub_length > tag_len) {
30508 expert_add_info_format(pinfo, sub_elt_len, &ei_ieee80211_tag_length,
30509 "Subelement length (%u) exceeds remaining tag length (%u)",
30510 sub_length, tvb_captured_length_remaining(tvb, offset));
30511 proto_item_set_len(rsti, offset - start_offset);
30512 return;
30513 }
30514
30515 switch (sub_id) {
30516 case 0: /* non-TB specific */
30517 dissect_ntb_specific(tvb, pinfo, tree, offset, sub_length);
30518 break;
30519 case 1: /* Ranging SUB_TB_SPECIFIC */
30520 /* TODO: Specify the acceptable tagged elements */
30521 offset = dissect_tb_specific(tvb, pinfo, tree, offset, sub_length);
30522 break;
30523 case 2: /* Secure HE-LTF */
30524 proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset,
30525 hf_ieee80211_tag_ranging_secure_he_ltf,
30526 ett_tag_ranging_secure_he_ltf,
30527 ranging_subelement_secure_he_ltf_fields,
30528 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30529 break;
30530 default: /* skip unknown elements which may be defined in the future */
30531 break;
30532 }
30533
30534 offset += sub_length;
30535 subelt++;
30536 proto_item_set_len(rsti, offset - start_offset);
30537 }
30538}
30539
30540static int * const aoa_results_fields[] = {
30541 &hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth,
30542 &hf_ieee80211_tag_ftm_aoa_results_aoa_elevation,
30543 &hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth_accuracy,
30544 &hf_ieee80211_tag_ftm_aoa_results_aoa_elevation_accuracy,
30545 &hf_ieee80211_tag_ftm_aoa_results_best_awv_id,
30546 &hf_ieee80211_tag_ftm_aoa_results_aoa_reference,
30547 &hf_ieee80211_tag_ftm_aoa_results_reserved,
30548 NULL((void*)0)
30549};
30550
30551static const true_false_string aoa_reference_tfs = {
30552 "Earth coordinates",
30553 "STA-relative coordinated"
30554};
30555
30556static void
30557aoa_azimuth_custom(char *result, uint32_t aoa_azimuth)
30558{
30559 float az = aoa_azimuth * (360.0f / 2048.0f);
30560
30561 snprintf(result, ITEM_LABEL_LENGTH240, "%f7.3", az);
30562}
30563
30564static void
30565aoa_elevation_custom(char *result, uint32_t aoa_elevation)
30566{
30567 float el = (aoa_elevation - 512) * (180.0f / 1024.0f);
30568
30569 snprintf(result, ITEM_LABEL_LENGTH240, "%f7.3", el);
30570}
30571
30572static void
30573aoa_accuracy_custom(char *result, uint32_t aoa_accuracy)
30574{
30575 float ac = aoa_accuracy * (360.0f / 1024.0f);
30576
30577 if (aoa_accuracy == 127) {
30578 snprintf(result, ITEM_LABEL_LENGTH240, "No ability to estimate accuracy");
30579 } else if (aoa_accuracy == 126) {
30580 snprintf(result, ITEM_LABEL_LENGTH240, "No measurement");
30581 } else if (aoa_accuracy == 125) {
30582 snprintf(result, ITEM_LABEL_LENGTH240, "Larger than %7.3f", ac);
30583 } else {
30584 snprintf(result, ITEM_LABEL_LENGTH240, "%f7.3", ac);
30585 }
30586}
30587
30588static void
30589dissect_direction_measurement_results(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30590 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30591{
30592 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
30593 hf_ieee80211_tag_dirn_meas_results_aoa_results,
30594 ett_tag_direct_meas_results,
30595 aoa_results_fields,
30596 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30597}
30598
30599/* ************************************************************************* */
30600/* Dissect and add tagged (optional) fields to proto tree */
30601/* ************************************************************************* */
30602
30603static int
30604ieee80211_tag_ssid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30605{
30606 int tag_len = tvb_reported_length(tvb);
30607 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30608 int offset = 0;
30609 /* 7.3.2.1 SSID element (0) */
30610 char ssid[MAX_SSID_LEN32]; /* The SSID may consist of arbitrary bytes */
30611 int ssid_len;
30612
30613 if (beacon_padding != 0) /* padding bug */
30614 return offset;
30615
30616 if (tag_len > MAX_SSID_LEN32) {
30617 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30618 "SSID length (%u) greater than maximum (%u)",
30619 tag_len, MAX_SSID_LEN32);
30620 }
30621
30622 /*
30623 * XXX - the 802.11 specs aren't particularly clear on how the SSID
30624 * is to be interpreted.
30625 *
30626 * IEEE Std 802.11-1999, section 7.3.2.2 "Service Set Identity (SSID)
30627 * element" says just
30628 *
30629 * The length of the SSID information field is between 0 and 32
30630 * octets. A 0 length information field indicates the broadcast SSID.
30631 *
30632 * with no indication that those octets encode a string.
30633 *
30634 * IEEE Std 802.11-2012, section 8.4.2.2 "SSID element", says that *but*
30635 * says after it
30636 *
30637 * When the UTF-8 SSID subfield of the Extended Capabilities element
30638 * is equal to 1 in the frame that includes the SSID element, the
30639 * SSID is interpreted using UTF-8 encoding.
30640 *
30641 * NOTE -- This is true for Beacon and Probe Response frames when the
30642 * MLME-START.request primitive was issued with the SSIDEncoding
30643 * parameter equal to UTF-8.
30644 *
30645 * and the SSIDEncoding parameter can either be UNSPECIFIED or UTF-8.
30646 *
30647 * IEEE Std 802.11-2020, section 9.4.2.2 "SSID element" changes the
30648 * wording to:
30649 *
30650 * When the UTF-8 SSID subfield of the Extended Capabilities element is
30651 * equal to 1 in the frame that includes the SSID element, or the Extended
30652 * Capabilities of the source of the SSID information is known to include
30653 * the UTF-8 SSID capability based on a previously received Extended
30654 * Capabilities element, the SSID is a sequence of UTF-8 encoded code
30655 * points. Otherwise, the character encoding of the octets in this SSID
30656 * element is unspecified.
30657 *
30658 * NOTE—If the SSID is a sequence of UTF-8 encoded code points, a
30659 * terminating null might or might not be present.
30660 *
30661 * So I *guess* that means that, if the UTF-8 SSID subfield isn't
30662 * equal to 1, the SSID is, in theory, just a bunch of octets, but
30663 * in practice, *probably* UTF-8 as that's the typical convention,
30664 * and, if it is equal to 1, it's a possibly null-terminated UTF-8
30665 * string. (Of course, a host can put anything there it wants to,
30666 * so we shouldn't just assume that it's *valid* ASCII or *valid* UTF-8.)
30667 *
30668 * So we really should extract it as an array of ssid_len bytes,
30669 * pass those bytes to Dot11DecryptSetLastSSID(), and:
30670 *
30671 * If the UTF-8 SSID subfield isn't set to 1, put the SSID in
30672 * a FT_BYTES as BASE_SHOW_UTF_8_PRINTABLE;
30673 *
30674 * If the UTF-8 SSID subfield is set to 1, put it in as an
30675 * ENC_UTF_8 string;
30676 *
30677 * XXX: Note that the Extended Capabilities tagged parameter is specified
30678 * to come *after* the SSID parameter (and "Fields and elements appear
30679 * in the specified, relative order" per 9.3.3.1 of IEEE 802.11 2020),
30680 * isn't sent with Response frames, and isn't guaranteed to appear with
30681 * Request frames (if none of the bits would be set, then it isn't
30682 * mandatory). We could store the bit if it appears in the conversation
30683 * data, which would handle Response frames and subsequent passes, but
30684 * for the first pass we don't know the value of the subfield until later.
30685 * We could store the proto_item with the ssid and add the string version
30686 * later, or add the string always as a hidden item and make it visible
30687 * later, or something else.
30688 *
30689 * Addendum: 802.11 2012 points out that a Zero-length SSID means
30690 * the Wildcard SSID. Make it so. From 8.4.2.2 of 802.11 2012:
30691 *
30692 * "The length of the SSID field is between 0 and 32 octets. A SSID
30693 * field of length 0 is used within Probe Request management frames to
30694 * indicate the wildcard SSID. The wildcard SSID is also used in
30695 * Beacon and Probe Response frames transmitted by mesh STAs."
30696 *
30697 * Also, we have to return a non-zero value here to prevent an ugly
30698 * undissected field warning. Since this code is only called from
30699 * one place and is used in call to dissector_try_uint_with_data, it is
30700 * OK to do so.
30701 */
30702 ssid_len = tvb_get_raw_bytes_as_string(tvb_new_subset_length(tvb, offset, tag_len), offset, ssid, MAX_SSID_LEN32);
30703 if (ssid_len == (int)tag_len) {
30704 Dot11DecryptSetLastSSID(&dot11decrypt_ctx, (char *) ssid, ssid_len);
30705 }
30706 char *s;
30707 /* XXX: 802.11-2020 9.4.2.2 notes that it might or might not include
30708 * a terminating null when the UTF-8 SSID bit is set; if we handle
30709 * that properly and add it as a ENC_UTF_8 FT_STRING, that will work,
30710 * but the FT_BYTES BASE_SHOW_*_PRINTABLE doesn't handle an optional
30711 * terminating null. (Maybe it should?) */
30712 proto_tree_add_item_ret_display_string(tree, hf_ieee80211_tag_ssid, tvb,
30713 offset, tag_len, ENC_NA0x00000000, pinfo->pool, &s);
30714
30715 if (ssid_len > 0) {
30716 proto_item_append_text(field_data->item_tag, ": %s", s);
30717 col_append_fstr(pinfo->cinfo, COL_INFO, ", SSID=%s", s);
30718
30719 /* Wlan Stats */
30720 memcpy(wlan_stats.ssid, ssid, MIN(ssid_len, MAX_SSID_LEN)(((ssid_len) < (32)) ? (ssid_len) : (32)));
30721 wlan_stats.ssid_len = ssid_len;
30722 } else {
30723 proto_item_append_text(field_data->item_tag, ": Wildcard SSID");
30724
30725 col_append_str(pinfo->cinfo, COL_INFO, ", SSID=Wildcard (Broadcast)");
30726 offset += 1; // Make sure we return non-zero
30727 }
30728
30729 beacon_padding += 1; /* padding bug */
30730
30731 return offset + tag_len;
30732}
30733
30734static void
30735dissect_he_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
30736 int offset, int len);
30737
30738static void
30739dissect_he_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
30740 int offset, int len _U___attribute__((unused)));
30741
30742static const value_string phy_type_vals[] = {
30743 { 2, "DSSS 2.4 GHz" },
30744 { 4, "OFDM" },
30745 { 5, "HRDSSS" },
30746 { 6, "ERP" },
30747 { 7, "HT" },
30748 { 8, "DMG" },
30749 { 9, "VHT" },
30750 { 10, "TVHT" },
30751 { 11, "S1G" },
30752 { 12, "CDMG" },
30753 { 13, "CMMG" },
30754 { 14, "HE" },
30755 { 15, "EDMG" },
30756 { 17, "NGV" },
30757 { 18, "EHT" },
30758 { 0, NULL((void*)0) }
30759};
30760
30761static int
30762dissect_neighbor_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30763{
30764 int tag_len = tvb_reported_length(tvb);
30765 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30766 int offset = 0;
30767 uint8_t sub_tag_id;
30768 uint32_t sub_tag_len;
30769 const char *sub_tag_name;
30770 proto_item *parent_item;
30771 proto_tree *bssid_info_subtree, *bssid_info_cap_subtree, *sub_tag_tree;
30772 tvbuff_t *sub_tag_tvb = NULL((void*)0);
30773
30774 if (tag_len < 13) {
30775 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30776 "Neighbor Report length %u wrong, must be > 13", tag_len);
30777 return tvb_captured_length(tvb);
30778 }
30779
30780 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid, tvb, offset, 6, ENC_NA0x00000000);
30781 offset += 6;
30782
30783 /*** Begin: BSSID Information ***/
30784
30785 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid_info, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30786 bssid_info_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_tree);
30787
30788 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reachability, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30789 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_security, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30790 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_key_scope, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30791 parent_item = proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30792 bssid_info_cap_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_capability_tree);
30793 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30794 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30795 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30796 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30797 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b4, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30798 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b5, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30799 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30800 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30801 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30802 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_ftm, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30803 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_efficiency, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30804 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_er_bss, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30805 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_colocated_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30806 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_unsolicited_probe_responses_active, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30807 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_ess_with_colocated_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30808 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);
30809 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_colocated_6ghz_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30810 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_eht, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30811 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_dmg_positioning, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30812 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30813 offset += 4;
30814
30815 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_ope_class, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30816 offset += 1;
30817
30818 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30819 offset += 1;
30820
30821 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_phy_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30822 offset += 1;
30823
30824 /* The Optional Subelements field format contains zero or more subelements */
30825 if (tag_len == 13){ /* tag_len == 13 => no Subelements */
30826 return tvb_captured_length(tvb);
30827 }
30828
30829 while (offset < tag_len)
30830 {
30831 sub_tag_id = tvb_get_uint8(tvb, offset);
30832 sub_tag_len = tvb_get_uint8(tvb, offset + 1);
30833 sub_tag_name = val_to_str_const(sub_tag_id, ieee80211_neighbor_report_subelement_id_vals, "Unknown");
30834
30835 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);
30836
30837 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30838 offset += 1;
30839
30840 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30841 offset += 1;
30842
30843 sub_tag_tvb = tvb_new_subset_length(tvb, offset, sub_tag_len);
30844
30845 switch (sub_tag_id) {
30846 case NR_SUB_ID_TSF_INFO1:
30847 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_tsf_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30848 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_beacon_interval, tvb, offset + 2, 2, ENC_LITTLE_ENDIAN0x80000000);
30849 break;
30850 case NR_SUB_ID_MEASUREMENT_PILOT_INFO66:
30851 dissect_measurement_pilot_trans_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
30852 break;
30853 case NR_SUB_ID_CON_COU_STR2:
30854 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_country_code, tvb, offset, 2, ENC_ASCII0x00000000);
30855 break;
30856 case NR_SUB_ID_BSS_TRN_CAN_PREF3:
30857 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref, tvb, offset, 1, ENC_NA0x00000000);
30858 break;
30859 case NR_SUB_ID_BSS_TER_DUR4:
30860 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
30861 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_dur, tvb, offset + 8, 2, ENC_LITTLE_ENDIAN0x80000000);
30862 break;
30863 case NR_SUB_ID_HT_CAPABILITIES45:
30864 dissect_ht_capability_ie_common(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len, field_data->item_tag_length, false0);
30865 break;
30866 case NR_SUB_ID_HT_OPERATION61:
30867 dissect_ht_operation_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
30868 break;
30869 case NR_SUB_ID_SEC_CHANNEL_OFFSET62:
30870 dissect_secondary_channel_offset_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
30871 break;
30872 case NR_SUB_ID_HT_MULTIPLE_BSSID71:
30873 dissect_multiple_bssid_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
30874 break;
30875 case NR_SUB_ID_HE_CAPABILITIES193:
30876 dissect_he_capabilities(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30877 break;
30878 case NR_SUB_ID_HE_OPERATION194:
30879 dissect_he_operation(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30880 break;
30881 case NR_SUB_ID_EHT_CAPABILITIES199:
30882 dissect_eht_capabilities(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30883 break;
30884 case NR_SUB_ID_EHT_OPERATION200:
30885 dissect_eht_operation(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30886 break;
30887 case NR_SUB_ID_BASIC_MULTI_LINK201:
30888 dissect_multi_link(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30889 break;
30890 case NR_SUB_ID_VENDOR_SPECIFIC221:
30891 default:
30892 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_data, tvb, offset, sub_tag_len, ENC_NA0x00000000);
30893 break;
30894 }
30895
30896 offset += sub_tag_len;
30897 }
30898
30899 return offset;
30900}
30901
30902static int
30903ieee80211_tag_supp_rates(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30904{
30905 int tag_len = tvb_reported_length(tvb);
30906 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30907 int offset = 0;
30908 /* 7.3.2.2 Supported Rates element (1) */
30909 if (tag_len < 1) {
30910 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30911 "Tag length %u too short, must be greater than 0",
30912 tag_len);
30913 return offset;
30914 }
30915
30916 while (offset < tag_len) {
30917 proto_tree_add_item(tree, hf_ieee80211_tag_supp_rates, tvb, offset, 1,
30918 ENC_LITTLE_ENDIAN0x80000000);
30919 proto_item_append_text(field_data->item_tag, " %s,",
30920 val_to_str_ext_const(tvb_get_uint8(tvb, offset),
30921 &ieee80211_supported_rates_vals_ext,
30922 "Unknown Rate"));
30923 offset += 1;
30924 }
30925
30926 proto_item_append_text(field_data->item_tag, " [Mbit/sec]");
30927
30928 return offset;
30929}
30930
30931static int
30932ieee80211_tag_fh_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30933{
30934 int tag_len = tvb_reported_length(tvb);
30935 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30936 int offset = 0;
30937 /* 7.3.2.3 FH Parameter Set element (2) */
30938 if (tag_len < 5) {
30939 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30940 "Tag length %u too short, must be >= 5", tag_len);
30941 return 1;
30942 }
30943
30944 proto_tree_add_item(tree, hf_ieee80211_tag_fh_dwell_time,
30945 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30946 offset += 2;
30947
30948 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_set,
30949 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30950 offset += 1;
30951
30952 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_pattern,
30953 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30954 offset += 1;
30955
30956 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_index,
30957 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30958 offset += 1;
30959
30960 return offset;
30961}
30962
30963static int
30964ieee80211_tag_ds_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30965{
30966 int tag_len = tvb_reported_length(tvb);
30967 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30968 int offset = 0;
30969 /* 7.3.2.4 DS Parameter Set element (3) */
30970 if (tag_len != 1) {
30971 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30972 "Tag length %u wrong, must be = 1", tag_len);
30973 return 1;
30974 }
30975
30976 proto_tree_add_item(tree, hf_ieee80211_tag_ds_param_channel,
30977 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30978
30979 proto_item_append_text(field_data->item_tag, ": Current Channel: %u",
30980 tvb_get_uint8(tvb, offset));
30981
30982 wlan_stats.channel = tvb_get_uint8(tvb, offset);
30983 offset += 1;
30984
30985 return offset;
30986}
30987
30988static int
30989ieee80211_tag_cf_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30990{
30991 int tag_len = tvb_reported_length(tvb);
30992 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30993 int offset = 0;
30994 /* 7.3.2.5 CF Parameter Set element (4) */
30995 if (tag_len != 6) {
30996 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30997 "Tag length %u wrong, must be = 6", tag_len);
30998 return offset;
30999 }
31000
31001 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_count,
31002 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31003 proto_item_append_text(field_data->item_tag, ": CFP count %u", tvb_get_uint8(tvb, offset));
31004 offset += 1;
31005
31006 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_period,
31007 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31008 proto_item_append_text(field_data->item_tag, ": CFP Period %u", tvb_get_uint8(tvb, offset));
31009 offset += 1;
31010
31011 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_max_duration,
31012 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31013 proto_item_append_text(field_data->item_tag, ": CFP Max Duration %u",
31014 tvb_get_letohs(tvb, offset));
31015 offset += 2;
31016
31017 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_dur_remaining,
31018 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31019 proto_item_append_text(field_data->item_tag, ": CFP Dur Remaining %u",
31020 tvb_get_letohs(tvb, offset));
31021 offset += 1;
31022
31023 return offset;
31024}
31025
31026static int
31027dissect_pvb_encoded_block_bitmap(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
31028 proto_tree *tree, int offset,
31029 bool_Bool inverse_bm _U___attribute__((unused)),
31030 uint8_t block_offset _U___attribute__((unused)),
31031 uint8_t page_index _U___attribute__((unused)))
31032{
31033 uint8_t block_bitmap = tvb_get_uint8(tvb, offset);
31034 proto_tree *bb_tree;
31035 proto_item *bbi;
31036 proto_item *bb;
31037 int start_offset = offset;
31038 uint8_t subblock = 0;
31039
31040 /*
31041 * Walk the block bitmap to figure out how many subblocks there are an
31042 * handle each of them.
31043 */
31044 bb_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
31045 ett_s1g_pvb_block_bitmap_tree, &bbi,
31046 "Block Bitmap");
31047
31048 bb = proto_tree_add_item(bb_tree, hf_ieee80211_s1g_block_bitmap, tvb, offset,
31049 1, ENC_NA0x00000000);
31050 offset += 1;
31051
31052 while (block_bitmap) {
31053 bool_Bool subblock_present = block_bitmap & 0x01;
31054 proto_tree *sb_tree;
31055 uint8_t bit_pos = 0;
31056
31057 if (subblock_present) {
31058 uint8_t subblock_val = tvb_get_uint8(tvb, offset);
31059
31060 sb_tree = proto_tree_add_subtree_format(bb_tree, tvb, offset, 1,
31061 ett_s1g_pvb_subblock_tree, NULL((void*)0),
31062 "Subblock %u", subblock);
31063 while (subblock_val) {
31064
31065 if (subblock_val & 0x01) {
31066 proto_item_append_text(bb, ", Subblock %d present", bit_pos);
31067 uint16_t aid13 = (page_index << 11) | (block_offset << 6) |
31068 (subblock << 3) | bit_pos;
31069 proto_tree_add_uint_bits_format_value(sb_tree,
31070 hf_ieee80211_s1g_block_bitmap_sta_aid13,
31071 tvb, offset * 8 + (7 - bit_pos), 1, 1,
31072 ENC_BIG_ENDIAN0x00000000, " 0x%0x", aid13);
31073 }
31074
31075 bit_pos += 1;
31076 subblock_val = subblock_val >> 1;
31077 }
31078
31079 offset += 1;
31080 }
31081
31082 block_bitmap = block_bitmap >> 1;
31083 subblock += 1;
31084 }
31085
31086 proto_item_set_len(bbi, offset - start_offset);
31087 return offset;
31088}
31089
31090static int
31091dissect_pvb_encoded_single_aid(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
31092 proto_tree *tree, int offset,
31093 bool_Bool inverse_bm _U___attribute__((unused)),
31094 uint8_t block_offset,
31095 uint8_t page_index)
31096{
31097 uint8_t single_aid = tvb_get_uint8(tvb, offset);
31098 uint16_t aid13 = (page_index << 11) | (block_offset << 6) |
31099 (single_aid & 0x3F);
31100
31101 proto_tree_add_uint_format(tree, hf_ieee80211_s1g_block_bitmap_single_aid,
31102 tvb, offset, 1, single_aid,
31103 "Single AID13: 0x%0x", aid13);
31104 offset += 1;
31105
31106 return offset;
31107}
31108
31109static int
31110dissect_pvb_encoded_olb(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
31111 proto_tree *tree, int offset,
31112 bool_Bool inverse_bm _U___attribute__((unused)),
31113 uint8_t block_offset _U___attribute__((unused)),
31114 uint8_t page_index _U___attribute__((unused)))
31115{
31116 uint8_t length = tvb_get_uint8(tvb, offset);
31117 proto_tree *olb_tree;
31118 int k;
31119
31120 olb_tree = proto_tree_add_subtree(tree, tvb, offset, length + 1,
31121 ett_s1g_pvb_olb_tree, NULL((void*)0),
31122 "OLB Mode");
31123
31124 proto_tree_add_item(olb_tree, hf_ieee80211_s1g_block_bitmap_olb_length,
31125 tvb, offset, 1, ENC_NA0x00000000);
31126 offset += 1;
31127
31128 for (k = 0; k < length; k++) {
31129 uint8_t subblock_val = tvb_get_uint8(tvb, offset);
31130 proto_tree *sb_tree;
31131 uint8_t bit_pos = 0;
31132
31133 sb_tree = proto_tree_add_subtree_format(olb_tree, tvb, offset, 1,
31134 ett_s1g_pvb_olb_subblock, NULL((void*)0),
31135 "Subblock %u", k);
31136 while (subblock_val) {
31137
31138 if (subblock_val & 0x01) {
31139 uint16_t aid13 = (page_index << 11) | (block_offset << 6) |
31140 (k << 3) | bit_pos;
31141 proto_tree_add_uint_bits_format_value(sb_tree,
31142 hf_ieee80211_s1g_block_bitmap_sta_aid13,
31143 tvb, offset * 8 + (7 - bit_pos), 1, 1,
31144 ENC_BIG_ENDIAN0x00000000, " 0x%0x", aid13);
31145 }
31146
31147 bit_pos += 1;
31148 subblock_val = subblock_val >> 1;
31149 }
31150
31151 offset += 1;
31152 }
31153
31154 offset += length;
31155
31156 return offset;
31157}
31158
31159static int
31160dissect_pvb_encoded_ade(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
31161 proto_tree *tree, int offset,
31162 bool_Bool inverse_bm _U___attribute__((unused)),
31163 uint8_t block_offset _U___attribute__((unused)),
31164 uint8_t page_index _U___attribute__((unused)))
31165{
31166 uint8_t ade_control = tvb_get_uint8(tvb, offset);
31167 uint8_t ewl = (ade_control & 0x03) + 1;
31168 uint8_t ade_bytes = ade_control >> 3;
31169 proto_tree *ade_tree;
31170 proto_item *cntl_item;
31171 proto_tree *cntl_tree;
31172
31173 ade_tree = proto_tree_add_subtree(tree, tvb, offset, ade_bytes + 1,
31174 ett_s1g_pvb_ade_tree, NULL((void*)0),
31175 "ADE Mode");
31176
31177 cntl_item = proto_tree_add_item(ade_tree, hf_ieee80211_s1g_block_bitmap_ade,
31178 tvb, offset, 1, ENC_NA0x00000000);
31179
31180 cntl_tree = proto_item_add_subtree(cntl_item, ett_s1g_pvb_ade_control);
31181
31182 proto_tree_add_uint_bits_format_value(cntl_tree,
31183 hf_ieee80211_s1g_block_bitmap_ewl,
31184 tvb, offset *8, 3, ewl,
31185 ENC_BIG_ENDIAN0x00000000, "EWL: %u", ewl);
31186 proto_tree_add_uint_bits_format_value(cntl_tree,
31187 hf_ieee80211_s1g_block_bitmap_len,
31188 tvb, offset * 8 + 3, 5, ade_bytes,
31189 ENC_BIG_ENDIAN0x00000000, "Length: %u", ade_bytes);
31190 offset += 1;
31191
31192 /* TODO: Add each subblock */
31193 proto_tree_add_item(ade_tree, hf_ieee80211_s1g_block_bitmap_ade_bytes, tvb,
31194 offset, ade_bytes, ENC_NA0x00000000);
31195
31196 offset += ade_bytes;
31197
31198 return offset;
31199}
31200
31201static int * const s1g_pvb_encoded_block_control[] = {
31202 &hf_ieee80211_s1g_pvb_encoding_mode,
31203 &hf_ieee80211_s1g_pvb_inverse_bitmap,
31204 &hf_ieee80211_s1g_pvb_block_offset,
31205 NULL((void*)0)
31206};
31207
31208#define PVB_BLOCK_BITMAP0x0 0x0
31209#define PVB_SINGLE_AID0x1 0x1
31210#define PVB_OLB0x2 0x2
31211#define PVB_ADE0x3 0x3
31212
31213static const value_string s1g_block_control_encoding_mode_vals[] = {
31214 { 0, "Block Bitmap" },
31215 { 1, "Single AID" },
31216 { 2, "OLB" },
31217 { 3, "ADE" },
31218 { 0, NULL((void*)0) }
31219};
31220
31221static int
31222dissect_pvb_encoded_block(tvbuff_t *tvb, packet_info *pinfo,
31223 proto_tree *tree, int offset, int idx,
31224 uint8_t page_index)
31225{
31226 uint8_t block_control = tvb_get_uint8(tvb, offset);
31227 uint8_t enc_mode = block_control & 0x03;
31228 uint8_t inverse_bm = (enc_mode >> 2) & 0x01;
31229 uint8_t block_offset = block_control >> 3;
31230 proto_tree *eb_tree;
31231 proto_item *ebti;
31232
31233 eb_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
31234 ett_s1g_pvb_eb_tree, &ebti,
31235 "Encoded Block %d", idx);
31236
31237 proto_tree_add_bitmask_with_flags(eb_tree, tvb, offset,
31238 hf_ieee80211_s1g_pvb_block_control_byte,
31239 ett_s1g_pvb_block_control_byte,
31240 s1g_pvb_encoded_block_control,
31241 ENC_NA0x00000000, BMT_NO_APPEND0x01);
31242 offset += 1;
31243
31244 /*
31245 * If there are no bytes, add an EI and get out of here
31246 */
31247 switch (enc_mode) {
31248 case PVB_BLOCK_BITMAP0x0:
31249 offset = dissect_pvb_encoded_block_bitmap(tvb, pinfo, eb_tree, offset,
31250 inverse_bm, block_offset,
31251 page_index);
31252 break;
31253 case PVB_SINGLE_AID0x1:
31254 offset = dissect_pvb_encoded_single_aid(tvb, pinfo, eb_tree, offset,
31255 inverse_bm, block_offset,
31256 page_index);
31257 break;
31258 case PVB_OLB0x2:
31259 offset = dissect_pvb_encoded_olb(tvb, pinfo, eb_tree, offset,
31260 inverse_bm, block_offset, page_index);
31261 break;
31262 case PVB_ADE0x3:
31263 offset = dissect_pvb_encoded_ade(tvb, pinfo, eb_tree, offset, inverse_bm,
31264 block_offset, page_index);
31265 break;
31266 }
31267
31268 return offset;
31269}
31270
31271static int
31272dissect_partial_virtual_bitmap(tvbuff_t *tvb, packet_info *pinfo,
31273 proto_tree *tree, int offset, int pvb_len,
31274 uint8_t page_index)
31275{
31276 proto_tree *pvb_tree;
31277 int idx = 0;
31278
31279 pvb_tree = proto_tree_add_subtree(tree, tvb, offset, pvb_len,
31280 ett_s1g_pvb_tree, NULL((void*)0),
31281 "Partial Virtual Bitmap");
31282
31283 while (tvb_reported_length_remaining(tvb, offset) > 0) {
31284 offset = dissect_pvb_encoded_block(tvb, pinfo, pvb_tree, offset, idx,
31285 page_index);
31286 idx++;
31287 }
31288
31289 return offset;
31290}
31291
31292static int
31293ieee80211_tag_tim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31294{
31295 int tag_len = tvb_reported_length(tvb);
31296 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31297 int offset = 0;
31298 unsigned aid, pvb_len, n1, i, j, byte;
31299 bool_Bool is_s1g = sta_is_s1g(pinfo);
31300 static int * const ieee80211_tim_bmapctl[] = {
31301 &hf_ieee80211_tim_bmapctl_mcast,
31302 &hf_ieee80211_tim_bmapctl_offset,
31303 NULL((void*)0)
31304 };
31305 static int * const ieee80211_s1g_bmapctl[] = {
31306 &hf_ieee80211_s1g_tim_bmapctl_traffic_indicator,
31307 &hf_ieee80211_s1g_tim_page_slice_number,
31308 &hf_ieee80211_s1g_tim_page_index,
31309 NULL((void*)0)
31310 };
31311
31312 /*
31313 * 802.11-2012: 8.4.2.7 TIM element (5), however, if this is an S1G frame
31314 * then it is different. S1G TIM elements can be 2, 3, or longer bytes.
31315 */
31316 if (is_s1g) {
31317 if (tag_len < 2) {
31318 expert_add_info_format(pinfo, field_data->item_tag_length,
31319 &ei_ieee80211_tag_length,
31320 "Tag length %u too short for S1G frame, must be >= 3",
31321 tag_len);
31322 return tag_len;
31323 }
31324 } else {
31325 if (tag_len < 4) {
31326 expert_add_info_format(pinfo, field_data->item_tag_length,
31327 &ei_ieee80211_tag_length,
31328 "Tag length %u too short for Non-S1G frame, must be >= 4",
31329 tag_len);
31330 return tag_len;
31331 }
31332 }
31333
31334 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_count,
31335 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31336 proto_item_append_text(field_data->item_tag, ": DTIM %u of",
31337 tvb_get_uint8(tvb, offset));
31338 offset += 1;
31339
31340 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_period,
31341 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31342 proto_item_append_text(field_data->item_tag, " %u bitmap",
31343 tvb_get_uint8(tvb, offset));
31344 offset += 1;
31345
31346 if (offset >= tag_len)
31347 return offset;
31348
31349 if (is_s1g) {
31350 unsigned bitmap_len = 0;
31351
31352 if (tag_len >= 3) {
31353 uint8_t page_index = tvb_get_uint8(tvb, offset) >> 6;
31354
31355 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
31356 hf_ieee80211_s1g_tim_bmapctrl,
31357 ett_tag_bmapctl_tree,
31358 ieee80211_s1g_bmapctl,
31359 ENC_NA0x00000000, BMT_NO_APPEND0x01);
31360 offset += 1;
31361 bitmap_len = tvb_reported_length_remaining(tvb, offset);
31362 if (bitmap_len > 0) {
31363 offset = dissect_partial_virtual_bitmap(tvb, pinfo, tree, offset,
31364 bitmap_len, page_index);
31365 }
31366 }
31367 } else {
31368 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
31369 hf_ieee80211_tim_bmapctl,
31370 ett_tag_bmapctl_tree,
31371 ieee80211_tim_bmapctl,
31372 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
31373 pvb_len = tag_len - 3;
31374 n1 = tvb_get_uint8(tvb, offset) & 0xFE;
31375 offset += 1;
31376 proto_tree_add_item(tree, hf_ieee80211_tim_partial_virtual_bitmap,
31377 tvb, offset, pvb_len, ENC_NA0x00000000);
31378 /* FIXME: Handles dot11MgmtOptionMultiBSSIDActivated = false only */
31379 for (i = 0; i < pvb_len; i++) {
31380 byte = tvb_get_uint8(tvb, offset + i);
31381 for (j = 0; j < 8; j++) {
31382 if (byte & (1 << j)) {
31383 aid = 8*n1 + 8*i + j;
31384 proto_tree_add_uint(tree, hf_ieee80211_tim_aid, tvb, offset + i,
31385 1, aid);
31386 }
31387 }
31388 }
31389 offset += pvb_len;
31390 }
31391
31392 return offset;
31393}
31394
31395static int
31396ieee80211_tag_ibss_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31397{
31398 int tag_len = tvb_reported_length(tvb);
31399 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31400 int offset = 0;
31401 /* 7.3.2.7 IBSS Parameter Set element (6) */
31402
31403 if (tag_len != 2) {
31404 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31405 "Tag length %u wrong, must be = 2", tag_len);
31406 return 1;
31407 }
31408
31409 proto_tree_add_item(tree, hf_ieee80211_tag_ibss_atim_window,
31410 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31411 proto_item_append_text(field_data->item_tag, ": ATIM window 0x%x",
31412 tvb_get_letohs(tvb, offset));
31413 offset += 2;
31414
31415 return offset;
31416}
31417
31418/* IEEE 802.11-2020, C.3 MIB detail, dot11CountryString */
31419static const value_string environment_vals[] = {
31420 { 0x1, "Operating classes in the United States" }, /* Table E-1 */
31421 { 0x2, "Operating classes in Europe" }, /* Table E-2 */
31422 { 0x3, "Operating classes in Japan" }, /* Table E-3 */
31423 { 0x4, "Global operating classes" }, /* Table E-4 */
31424 { 0x5, "S1G operating classes" }, /* Table E-5 */
31425 { 0x6, "Operating classes in China" }, /* Table E-6 */
31426 { ' ', "All" }, /* All environments for this band */
31427 { 'I', "Indoor" },
31428 { 'O', "Outdoor" },
31429 { 'X', "Non Country Entity" },
31430 { 0, NULL((void*)0) }
31431};
31432
31433static int
31434ieee80211_tag_country_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31435{
31436 int tag_len = tvb_reported_length(tvb);
31437 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31438 int offset = 0;
31439 /* 7.3.2.9 Country information element (7) */
31440 proto_tree *sub_tree;
31441 proto_item *sub_item;
31442 const uint8_t* country_code;
31443
31444 if (tag_len < 6) {
31445 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31446 "Tag length %u too short, must be >= 6", tag_len);
31447 return 1;
31448 }
31449
31450 /* FIXME: If environment is 'X', the only allowed CC is "XX" */
31451 proto_tree_add_item_ret_string(tree, hf_ieee80211_tag_country_info_code,
31452 tvb, offset, 2, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &country_code);
31453 proto_item_append_text(field_data->item_tag, ": Country Code %s", country_code);
31454 offset += 2;
31455
31456 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
31457 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31458 proto_item_append_text(field_data->item_tag, ", Environment %s",
31459 val_to_str(pinfo->pool, tvb_get_uint8(tvb, offset),
31460 environment_vals, "0x%02x"));
31461 offset += 1;
31462
31463 while (offset < tag_len) {
31464 /* Padding ? */
31465 if ((tag_len - offset) < 3) {
31466 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_pad,
31467 tvb, offset, 1, ENC_NA0x00000000);
31468 offset += 1;
31469 continue;
31470 }
31471 if (tvb_get_uint8(tvb, offset) <= 200) { /* 802.11d */
31472 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_fnm,
31473 tvb, offset, 3, ENC_NA0x00000000);
31474 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_fnm_tree);
31475
31476 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_fcn,
31477 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31478 proto_item_append_text(sub_item, ": First Channel Number: %u",
31479 tvb_get_uint8(tvb, offset));
31480 offset += 1;
31481 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_nc,
31482 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31483 proto_item_append_text(sub_item, ", Number of Channels: %u",
31484 tvb_get_uint8(tvb, offset));
31485 offset += 1;
31486 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_mtpl,
31487 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31488 proto_item_append_text(sub_item,
31489 ", Maximum Transmit Power Level: %d dBm",
31490 tvb_get_uint8(tvb, offset));
31491 offset += 1;
31492 } else { /* 802.11j */
31493 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_rrc,
31494 tvb, offset, 3, ENC_NA0x00000000);
31495 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_rcc_tree);
31496
31497 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oei,
31498 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31499 proto_item_append_text(sub_item,
31500 ": Operating Extension Identifier: %u",
31501 tvb_get_uint8(tvb, offset));
31502 offset += 1;
31503 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oc,
31504 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31505 proto_item_append_text(sub_item, ", Operating Class: %u",
31506 tvb_get_uint8(tvb, offset));
31507 offset += 1;
31508 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_cc,
31509 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31510 proto_item_append_text(sub_item, ", Coverage Class: %u",
31511 tvb_get_uint8(tvb, offset));
31512 offset += 1;
31513 }
31514 }
31515
31516 return offset;
31517}
31518
31519static int
31520ieee80211_tag_fh_hopping_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31521{
31522 int tag_len = tvb_reported_length(tvb);
31523 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31524 int offset = 0;
31525
31526 /* 7.3.2.10 Hopping Pattern Parameters information element (8) */
31527 if (tag_len < 2) {
31528 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31529 "Tag length %u too short, must be >= 2", tag_len);
31530 return 1;
31531 }
31532
31533 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
31534 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31535 proto_item_append_text(field_data->item_tag, ": Prime Radix: %u", tvb_get_uint8(tvb, offset));
31536 offset += 1;
31537
31538 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
31539 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31540 proto_item_append_text(field_data->item_tag, ", Number of Channels: %u",
31541 tvb_get_uint8(tvb, offset));
31542 offset += 1;
31543
31544 return offset;
31545}
31546
31547static int
31548ieee80211_tag_fh_hopping_table(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31549{
31550 int tag_len = tvb_reported_length(tvb);
31551 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31552 int offset = 0;
31553
31554 /* 7.3.2.11 Hopping Pattern Table information element (9) */
31555 if (tag_len < 4) {
31556 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31557 "Tag length %u too short, must be >= 4", tag_len);
31558 return 1;
31559 }
31560
31561 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_flag,
31562 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31563 offset += 1;
31564
31565 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_number_of_sets,
31566 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31567 offset += 1;
31568
31569 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_modulus,
31570 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31571 offset += 1;
31572
31573 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_offset,
31574 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31575 offset += 1;
31576
31577 while (offset < tag_len) {
31578 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_random_table,
31579 tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
31580 offset += 2;
31581 }
31582
31583 return offset;
31584}
31585
31586int
31587add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype,
31588 const uint8_t *valid_element_ids, unsigned valid_element_ids_count,
31589 association_sanity_check_t *association_sanity_check)
31590{
31591 return add_tagged_field_with_validation(pinfo, tree, tvb, offset, ftype, valid_element_ids,
31592 valid_element_ids_count, false0, NULL((void*)0), 0, false0, association_sanity_check);
31593}
31594
31595/*
31596 * Build a composite TVB from the current TVB and the next ones that are
31597 * fragment elements.
31598 *
31599 * We also add the fragments to the tree. And add an expert info if there are
31600 * problems.
31601 *
31602 * When called we know we have two fragments, at least.
31603 */
31604static tvbuff_t *
31605build_defrag_tvb(packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)), tvbuff_t *tvb,
31606 int offset, uint32_t *tag_len, uint32_t *tag_overhead)
31607{
31608 tvbuff_t *new_tvb = tvb_new_composite();
31609 tvbuff_t *tmp_tvb = NULL((void*)0);
31610 uint32_t new_len = 0, overhead = 0;
31611 uint8_t frag_len = 0;
31612
31613 /*
31614 * We come in here pointing to the first fragment and on each iteration
31615 * We are pointing to the next fragment
31616 */
31617 do {
31618 offset += 1;
31619 frag_len = tvb_get_uint8(tvb, offset);
31620 offset += 1;
31621 tmp_tvb = tvb_new_subset_length(tvb, offset, frag_len);
31622 /* Insert this fragment ... */
31623 tvb_composite_append(new_tvb, tmp_tvb);
31624 new_len += frag_len;
31625 offset += frag_len;
31626 overhead += 2;
31627 } while (frag_len == 255 &&
31628 tvb_captured_length_remaining(tvb, offset) > 2 &&
31629 tvb_get_uint8(tvb, offset) == TAG_FRAGMENT242);
31630
31631 *tag_len = new_len;
31632 *tag_overhead = overhead;
31633 tvb_composite_finalize(new_tvb);
31634
31635 return new_tvb;
31636}
31637
31638int
31639add_tagged_field_with_validation(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype,
31640 const uint8_t *element_ids, unsigned element_ids_count, bool_Bool element_ids_assume_invalid,
31641 const uint8_t *ext_element_ids, unsigned ext_element_ids_count, bool_Bool ext_element_ids_assume_invalid,
31642 association_sanity_check_t *association_sanity_check)
31643{
31644 tvbuff_t *tag_tvb;
31645 uint32_t tag_no, tag_len, tag_overhead;
31646 uint32_t ext_tag_no = 0;
31647 proto_tree *orig_tree = tree;
31648 proto_item *ti = NULL((void*)0);
31649 proto_item *ti_len, *ti_tag;
31650 bool_Bool isDMG;
31651
31652 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)))
;
31653
31654 tag_no = tvb_get_uint8(tvb, offset);
31655 tag_len = tvb_get_uint8(tvb, offset + 1);
31656 save_tag_for_dot11decrypt(tvb, pinfo, offset);
31657
31658 /*
31659 * If we have element fragmentation, construct a composite TVB with the
31660 * fragments. Rules are:
31661 * 1. Must be in the one MMPDU (so cannot exceed the TVB we are given.)
31662 * 2. If the next element is a fragment, this one must have a length of 255.
31663 * 3. We don't care about extensions here.
31664 * 4. The fragment element has an id of 254.
31665 */
31666 if (tag_len == 255 &&
31667 tvb_captured_length_remaining(tvb, offset) > (255 + 2) &&
31668 tvb_get_uint8(tvb, offset + 255 + 2) == TAG_FRAGMENT242) {
31669 tag_tvb = build_defrag_tvb(pinfo, tree, tvb, offset, &tag_len,
31670 &tag_overhead);
31671 add_new_data_source(pinfo, tag_tvb, "Reassembled IE");
31672 } else {
31673 tag_tvb = tvb_new_subset_length(tvb, offset+2, tag_len);
31674 tag_overhead = 2;
31675 }
31676
31677 if (tree) {
31678 if (tag_no == TAG_ELEMENT_ID_EXTENSION255) {
31679 ext_tag_no = tvb_get_uint8(tvb, offset + 2);
31680 ti = proto_tree_add_item(orig_tree, hf_ieee80211_ext_tag, tvb, offset + 2, tag_len + tag_overhead - 2, ENC_NA0x00000000);
31681 proto_item_append_text(ti, ": %s", val_to_str_ext(pinfo->pool, ext_tag_no, &tag_num_vals_eid_ext_ext, "Unknown (%d)"));
31682 } else {
31683 ti = proto_tree_add_item(orig_tree, hf_ieee80211_tag, tvb, offset, 2 + tag_len + tag_overhead - 2, ENC_NA0x00000000);
31684 proto_item_append_text(ti, ": %s", val_to_str_ext(pinfo->pool, tag_no, &tag_num_vals_ext, "Unknown (%d)"));
31685 }
31686
31687 tree = proto_item_add_subtree(ti, ett_80211_mgt_ie);
31688
31689 }
31690
31691 if (tag_no == TAG_ELEMENT_ID_EXTENSION255) {
31692 ti_len = proto_tree_add_uint(tree, hf_ieee80211_ext_tag_length, tvb, offset + 1, 1, tag_len - 1);
31693 ti_tag = proto_tree_add_item(tree, hf_ieee80211_ext_tag_number, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
31694 proto_item_append_text(ti_len, " (Tag len: %u)", tag_len);
31695 } else {
31696 ti_tag = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31697 ti_len = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
31698 }
31699 if (tag_len > (unsigned)tvb_reported_length_remaining(tvb, offset)) {
31700 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
31701 "Tag Length is longer than remaining payload");
31702 }
31703
31704 /* If the list enumerates valid element IDs, require the Element ID to be
31705 * present in that list, otherwise, if the list enumerates invalid element IDs,
31706 * check the Element ID is not in the list. If either check fails, stop decoding
31707 * the value to prevent possible infinite recursions due to unexpected elements. */
31708 if (element_ids_count) {
31709 bool_Bool current_tag_no = false0;
31710 unsigned i;
31711
31712 for (i = 0; i < element_ids_count; i++) {
31713 current_tag_no = element_ids[i] == tag_no;
31714 if (current_tag_no)
31715 break;
31716 }
31717
31718 if ((!current_tag_no && !element_ids_assume_invalid && !(ext_tag_no && ext_element_ids_count)) ||
31719 (current_tag_no && element_ids_assume_invalid)) {
31720 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_number,
31721 "Unexpected Element ID %d", tag_no);
31722 return tag_len + 1 + 1;
31723 }
31724 }
31725
31726 /* Same as above, but for Extended Element IDs */
31727 if (ext_tag_no && ext_element_ids_count) {
31728 bool_Bool current_ext_tag_no = false0;
31729 unsigned i;
31730
31731 for (i = 0; i < ext_element_ids_count; i++) {
31732 current_ext_tag_no = ext_element_ids[i] == ext_tag_no;
31733 if (current_ext_tag_no)
31734 break;
31735 }
31736
31737 if ((!current_ext_tag_no && !ext_element_ids_assume_invalid) ||
31738 (current_ext_tag_no && ext_element_ids_assume_invalid)) {
31739 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_number,
31740 "Unexpected Extended Element ID %d", ext_tag_no);
31741 return tag_len + tag_overhead;
31742 }
31743 }
31744
31745 ieee80211_tagged_field_data_t field_data = {
31746 .ftype = ftype,
31747 .sanity_check = association_sanity_check,
31748 .isDMG = isDMG,
31749 .item_tag = ti,
31750 .item_tag_length = ti_len
31751 };
31752 if (!dissector_try_uint_with_data(tagged_field_table, tag_no, tag_tvb, pinfo, tree, false0, &field_data))
31753 {
31754 proto_tree_add_item(tree, hf_ieee80211_tag_data, tvb, offset + 2, tag_len, ENC_NA0x00000000);
31755 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_data,
31756 "Dissector for 802.11 IE Tag"
31757 " (%s) code not implemented, Contact"
31758 " Wireshark developers if you want this supported", val_to_str_ext(pinfo->pool, tag_no,
31759 &tag_num_vals_ext, "(%d)"));
31760 proto_item_append_text(ti, ": Undecoded");
31761 }
31762
31763 return tag_len + tag_overhead;
31764}
31765
31766/* 7.3.2.12 Request information element (10) */
31767static int
31768ieee80211_tag_request(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
31769{
31770 int tag_len = tvb_reported_length(tvb);
31771 int offset = 0;
31772
31773 while (offset < tag_len)
31774 {
31775 proto_tree_add_item(tree, hf_ieee80211_tag_request, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31776 offset += 1;
31777 }
31778 return ((tag_len > 0) ? tag_len : 1);
31779}
31780
31781/* 7.3.2.28 BSS Load element (11) */
31782/* 8.4.2.30 in 802.11-2012 */
31783static int
31784ieee80211_tag_qbss_load(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31785{
31786 int tag_len = tvb_reported_length(tvb);
31787 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31788 int offset = 0;
31789
31790 if ((tag_len < 4) || (tag_len > 5))
31791 {
31792 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);
31793 return tvb_captured_length(tvb);
31794 }
31795
31796 if (tag_len == 4)
31797 {
31798 /* QBSS Version 1 */
31799 proto_item_append_text(field_data->item_tag, " Cisco QBSS Version 1 - non CCA");
31800
31801 /* Extract Values */
31802 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset, tag_len, 1);
31803 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31804 proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
31805 proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
31806 }
31807 else if (tag_len == 5)
31808 {
31809 proto_item *base_item;
31810
31811 /* QBSS Version 2 */
31812 proto_item_append_text(field_data->item_tag, " 802.11e CCA Version");
31813
31814 /* Extract Values */
31815 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset, tag_len, 2);
31816 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31817 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
31818 proto_item_append_text(base_item, " (%d%%)", 100*tvb_get_uint8(tvb, offset + 2)/255);
31819 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 3, 2, ENC_LITTLE_ENDIAN0x80000000);
31820 proto_item_append_text(base_item, " (%d us/s)", tvb_get_letohs(tvb, offset + 3)*32);
31821 }
31822
31823 return tvb_captured_length(tvb);
31824}
31825
31826/* 8.4.2.31 in 802-11-2012 */
31827static int
31828ieee80211_tag_edca_param_set(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31829{
31830 int tag_len = tvb_reported_length(tvb);
31831 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31832 int offset = 0;
31833
31834 if ((tag_len != 18))
31835 {
31836 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 18", tag_len);
31837 return tvb_captured_length(tvb);
31838 }
31839
31840 decode_qos_parameter_set(tree, tvb, pinfo, offset, field_data->ftype);
31841
31842 return tvb_captured_length(tvb);
31843}
31844
31845/* TSPEC element (13) */
31846static int
31847ieee80211_tag_tspec(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31848{
31849 int tag_len = tvb_reported_length(tvb);
31850 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31851 int offset = 0;
31852
31853 if (field_data->isDMG == false0 && tag_len != 55)
31854 {
31855 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 55", tag_len);
31856 return tvb_captured_length(tvb);
31857 }
31858 if (field_data->isDMG == true1 && tag_len != 57)
31859 {
31860 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 57", tag_len);
31861 return tvb_captured_length(tvb);
31862 }
31863
31864 add_ff_qos_ts_info(tree, tvb, pinfo, offset);
31865 offset += 3;
31866
31867 proto_tree_add_item(tree, hf_ieee80211_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31868 offset += 2;
31869
31870 proto_tree_add_item(tree, hf_ieee80211_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31871 offset += 2;
31872
31873 proto_tree_add_item(tree, hf_ieee80211_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31874 offset += 4;
31875
31876 proto_tree_add_item(tree, hf_ieee80211_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31877 offset += 4;
31878
31879 proto_tree_add_item(tree, hf_ieee80211_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31880 offset += 4;
31881
31882 proto_tree_add_item(tree, hf_ieee80211_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31883 offset += 4;
31884
31885 proto_tree_add_item(tree, hf_ieee80211_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31886 offset += 4;
31887
31888 proto_tree_add_item(tree, hf_ieee80211_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31889 offset += 4;
31890
31891 proto_tree_add_item(tree, hf_ieee80211_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31892 offset += 4;
31893
31894 proto_tree_add_item(tree, hf_ieee80211_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31895 offset += 4;
31896
31897 proto_tree_add_item(tree, hf_ieee80211_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31898 offset += 4;
31899
31900 proto_tree_add_item(tree, hf_ieee80211_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31901 offset += 4;
31902
31903 proto_tree_add_item(tree, hf_ieee80211_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31904 offset += 4;
31905
31906 proto_tree_add_item(tree, hf_ieee80211_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31907 offset += 2;
31908
31909 proto_tree_add_item(tree, hf_ieee80211_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31910 offset += 2;
31911
31912 if(field_data->isDMG == true1) {
31913 proto_tree_add_item(tree, hf_ieee80211_tspec_dmg, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31914 /*offset +=2;*/
31915 }
31916
31917 return tvb_captured_length(tvb);
31918}
31919
31920/* 7.3.2.31 TCLAS element (14) */
31921static const range_string user_prio_rvals[] = {
31922 { 0, 7, "The User Priority value of an MSDU" },
31923 { 8, 8, "The AC value of an MPDU is AC-VO" },
31924 { 9, 9, "The AC value of an MPDU is AC-VI" },
31925 { 10, 10, "The AC value of an MPDU is AC-BE" },
31926 { 11, 11, "The AC value of an MPDU is AC-BK" },
31927 { 0, 0, NULL((void*)0) }
31928};
31929
31930static int * const ieee80211_tclas_class_mask0[] = {
31931 &hf_ieee80211_tclas_class_mask0_src_addr,
31932 &hf_ieee80211_tclas_class_mask0_dst_addr,
31933 &hf_ieee80211_tclas_class_mask0_type,
31934 NULL((void*)0)
31935};
31936
31937static int * const ieee80211_tclas_class_mask1[] = {
31938 &hf_ieee80211_tclas_class_mask1_ver,
31939 &hf_ieee80211_tclas_class_mask1_src_ip,
31940 &hf_ieee80211_tclas_class_mask1_dst_ip,
31941 &hf_ieee80211_tclas_class_mask1_src_port,
31942 &hf_ieee80211_tclas_class_mask1_dst_port,
31943 &hf_ieee80211_tclas_class_mask1_ipv6_flow,
31944 NULL((void*)0)
31945};
31946
31947static int * const ieee80211_tclas_class_mask1_4[] = {
31948 &hf_ieee80211_tclas_class_mask1_ver,
31949 &hf_ieee80211_tclas_class_mask1_src_ip,
31950 &hf_ieee80211_tclas_class_mask1_dst_ip,
31951 &hf_ieee80211_tclas_class_mask1_src_port,
31952 &hf_ieee80211_tclas_class_mask1_dst_port,
31953 &hf_ieee80211_tclas_class_mask1_ipv4_dscp,
31954 &hf_ieee80211_tclas_class_mask1_ipv4_proto,
31955 &hf_ieee80211_tclas_class_mask1_reserved,
31956 NULL((void*)0)
31957};
31958
31959static int * const ieee80211_tclas_class_mask2[] = {
31960 &hf_ieee80211_tclas_class_mask2_tci,
31961 NULL((void*)0)
31962};
31963
31964static int * const ieee80211_tclas_class_mask4_4[] = {
31965 &hf_ieee80211_tclas_class_mask4_ver,
31966 &hf_ieee80211_tclas_class_mask4_4_src_ip,
31967 &hf_ieee80211_tclas_class_mask4_4_dst_ip,
31968 &hf_ieee80211_tclas_class_mask4_src_port,
31969 &hf_ieee80211_tclas_class_mask4_dst_port,
31970 &hf_ieee80211_tclas_class_mask4_dscp,
31971 &hf_ieee80211_tclas_class_mask4_ipv4_proto,
31972 &hf_ieee80211_tclas_class_mask4_reserved,
31973 NULL((void*)0)
31974};
31975
31976static int * const ieee80211_tclas_class_mask4_6[] = {
31977 &hf_ieee80211_tclas_class_mask4_ver,
31978 &hf_ieee80211_tclas_class_mask4_6_src_ip,
31979 &hf_ieee80211_tclas_class_mask4_6_dst_ip,
31980 &hf_ieee80211_tclas_class_mask4_src_port,
31981 &hf_ieee80211_tclas_class_mask4_dst_port,
31982 &hf_ieee80211_tclas_class_mask4_dscp,
31983 &hf_ieee80211_tclas_class_mask4_next_hdr,
31984 &hf_ieee80211_tclas_class_mask4_flow_label,
31985 NULL((void*)0)
31986};
31987
31988static int * const ieee80211_tclas_class_mask5[] = {
31989 &hf_ieee80211_tclas_class_mask5_up_prio,
31990 &hf_ieee80211_tclas_class_mask5_dei,
31991 &hf_ieee80211_tclas_class_mask5_vid,
31992 &hf_ieee80211_tclas_class_mask5_reserved,
31993 NULL((void*)0)
31994};
31995
31996/*
31997 * Two control bits in the next few. Lower bit specifies if the classifier
31998 * uses the field (the match value is present, upper bit specifies is a
31999 * mask is present.
32000 */
32001static const value_string frame_control_mask_vals[] = {
32002 { 0x0 , "Frame Control is not included in the Classifier" },
32003 { 0x1 , "Frame Control is included in the Classifier. A Match Spec is not included" },
32004 { 0x2 , "Invalid Frame Control Classifier Mask Control value" },
32005 { 0x3 , "Frame Control is included in the Classifier. A Match Spec is included" },
32006 { 0, NULL((void*)0) }
32007};
32008
32009static const value_string duration_id_mask_vals[] = {
32010 { 0x0 , "Duration/ID is not included in the Classifier" },
32011 { 0x1 , "Duration/ID is included in the Classifier. A Match Spec is not included" },
32012 { 0x2 , "Invalid Duration/ID Classifier Mask Control value" },
32013 { 0x3 , "Duration/ID is included in the Classifier. A Match Spec is included" },
32014 { 0, NULL((void*)0) }
32015};
32016
32017static const value_string address_1_mask_vals[] = {
32018 { 0x0 , "Address 1 is not included in the Classifier" },
32019 { 0x1 , "Address 1 is included in the Classifier. A Match Spec is not included" },
32020 { 0x2 , "Invalid Address 1 Classifier Mask Control value" },
32021 { 0x3 , "Address 1 is included in the Classifier. A Match Spec is included" },
32022 { 0, NULL((void*)0) }
32023};
32024
32025static const value_string address_2_mask_vals[] = {
32026 { 0x0 , "Address 2 is not included in the Classifier" },
32027 { 0x1 , "Address 2 is included in the Classifier. A Match Spec is not included" },
32028 { 0x2 , "Invalid Address 2 Classifier Mask Control value" },
32029 { 0x3 , "Address 2 is included in the Classifier. A Match Spec is included" },
32030 { 0, NULL((void*)0) }
32031};
32032
32033static const value_string address_3_mask_vals[] = {
32034 { 0x0 , "Address 3 is not included in the Classifier" },
32035 { 0x1 , "Address 3 is included in the Classifier. A Match Spec is not included" },
32036 { 0x2 , "Invalid Address 3 Classifier Mask Control value" },
32037 { 0x3 , "Address 3 is included in the Classifier. A Match Spec is included" },
32038 { 0, NULL((void*)0) }
32039};
32040
32041static const value_string sequence_control_mask_vals[] = {
32042 { 0x0 , "Sequence Control is not included in the Classifier" },
32043 { 0x1 , "Sequence Control is included in the Classifier. A Match Spec is not included" },
32044 { 0x2 , "Invalid Sequence Control Classifier Mask Control value" },
32045 { 0x3 , "Sequence Control is included in the Classifier. A Match Spec is included" },
32046 { 0, NULL((void*)0) }
32047};
32048
32049static const value_string address_4_mask_vals[] = {
32050 { 0x0 , "Address 4 is not included in the Classifier" },
32051 { 0x1 , "Address 4 is included in the Classifier. A Match Spec is not included" },
32052 { 0x2 , "Invalid Address 4 Classifier Mask Control value" },
32053 { 0x3 , "Address 4 is included in the Classifier. A Match Spec is included" },
32054 { 0, NULL((void*)0) }
32055};
32056
32057static const value_string qos_control_mask_vals[] = {
32058 { 0x0 , "QoS Control is not included in the Classifier" },
32059 { 0x1 , "QoS Control is included in the Classifier. A Match Spec is not included" },
32060 { 0x2 , "Invalid QoS Control Classifier Mask Control value" },
32061 { 0x3 , "QoS Control is included in the Classifier. A Match Spec is included" },
32062 { 0, NULL((void*)0) }
32063};
32064
32065static const value_string ht_control_mask_vals[] = {
32066 { 0x0 , "HT Control is not included in the Classifier" },
32067 { 0x1 , "HT Control is included in the Classifier. A Match Spec is not included" },
32068 { 0x2 , "Invalid HT Control Classifier Mask Control value" },
32069 { 0x3 , "HT Control is included in the Classifier. A Match Spec is included" },
32070 { 0, NULL((void*)0) }
32071};
32072
32073static const value_string address_1_sid_mask_vals[] = {
32074 { 0x0 , "Address 1 (SID) is not included in the Classifier" },
32075 { 0x1 , "Address 1 (SID) is included in the Classifier. A Match Spec is not included" },
32076 { 0x2 , "Invalid Address 1 (SID) Classifier Mask Control value" },
32077 { 0x3 , "Address 1 (SID) is included in the Classifier. A match spec is included" },
32078 { 0, NULL((void*)0) }
32079};
32080
32081static const value_string address_1_bssid_mask_vals[] = {
32082 { 0x0 , "Address 1 (BSSID) is not included in the Classifier" },
32083 { 0x1 , "Address 1 (BSSID) is included in the Classifier. A Match Spec is not included" },
32084 { 0x2 , "Invalid Address 1 (SID) Classifier Mask Control value" },
32085 { 0x3 , "Address 1 (BSSID) is included in the Classifier. A match spec is included" },
32086 { 0, NULL((void*)0) }
32087};
32088
32089static int * const ieee80211_tclas_class_mask6[] = {
32090 &hf_ieee80211_tclas_class_mask6_frame_control_match_spec,
32091 &hf_ieee80211_tclas_class_mask6_duration_id_match_spec,
32092 &hf_ieee80211_tclas_class_mask6_address_1_match_spec,
32093 &hf_ieee80211_tclas_class_mask6_address_2_match_spec,
32094 &hf_ieee80211_tclas_class_mask6_address_3_match_spec,
32095 &hf_ieee80211_tclas_class_mask6_sequence_control_spec,
32096 &hf_ieee80211_tclas_class_mask6_address_4_match_spec,
32097 &hf_ieee80211_tclas_class_mask6_qos_control_spec,
32098 &hf_ieee80211_tclas_class_mask6_ht_control_spec,
32099 &hf_ieee80211_tclas_class_mask6_reserved,
32100 NULL((void*)0)
32101};
32102
32103static int * const ieee80211_tclas_class_mask7[] = {
32104 &hf_ieee80211_tclas_class_mask7_frame_control_match_spec,
32105 &hf_ieee80211_tclas_class_mask7_address_1_sid_match_spec,
32106 &hf_ieee80211_tclas_class_mask7_address_2_match_spec,
32107 &hf_ieee80211_tclas_class_mask7_sequence_control_spec,
32108 &hf_ieee80211_tclas_class_mask7_address_3_match_spec,
32109 &hf_ieee80211_tclas_class_mask7_address_4_match_spec,
32110 &hf_ieee80211_tclas_class_mask7_reserved,
32111 NULL((void*)0)
32112};
32113
32114static int * const ieee80211_tclas_class_mask8[] = {
32115 &hf_ieee80211_tclas_class_mask8_frame_control_match_spec,
32116 &hf_ieee80211_tclas_class_mask8_address_1_bssid_match_spec,
32117 &hf_ieee80211_tclas_class_mask8_address_2_sid_match_spec,
32118 &hf_ieee80211_tclas_class_mask8_sequence_control_spec,
32119 &hf_ieee80211_tclas_class_mask8_address_3_match_spec,
32120 &hf_ieee80211_tclas_class_mask8_address_4_match_spec,
32121 &hf_ieee80211_tclas_class_mask8_reserved,
32122 NULL((void*)0)
32123};
32124
32125/* TODO: the masks for these items are clearly wrong! */
32126static int * const ieee80211_tclas_class_mask9[] = {
32127 &hf_ieee80211_tclas_class_mask9_frame_control_match_spec,
32128 &hf_ieee80211_tclas_class_mask9_address_1_match_spec,
32129 &hf_ieee80211_tclas_class_mask9_address_2_match_spec,
32130 &hf_ieee80211_tclas_class_mask9_sequence_control_spec,
32131 &hf_ieee80211_tclas_class_mask9_reserved,
32132 NULL((void*)0)
32133};
32134
32135static int
32136ieee80211_frame_classifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
32137 proto_tree *tree, int offset, int tag_len)
32138{
32139 uint8_t type;
32140 uint8_t version;
32141 uint8_t filter_field_len;
32142 uint32_t class_mask;
32143
32144 type = tvb_get_uint8(tvb, offset);
32145 proto_tree_add_item(tree, hf_ieee80211_tclas_class_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32146 offset += 1;
32147
32148 switch (type)
32149 {
32150 case 0:
32151 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32152 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask0,
32153 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32154 offset++;
32155
32156 proto_tree_add_item(tree, hf_ieee80211_tclas_src_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
32157 offset += 6;
32158
32159 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
32160 offset += 6;
32161
32162 proto_tree_add_item(tree, hf_ieee80211_tclas_ether_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32163 /*offset += 2;*/
32164 break;
32165
32166 case 1:
32167 version = tvb_get_uint8(tvb, offset+1);
32168 if (version == 4) {
32169 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32170 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask1_4,
32171 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32172 } else {
32173 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32174 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask1,
32175 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32176 }
32177 offset += 1;
32178
32179 proto_tree_add_item(tree, hf_ieee80211_tclas_version, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32180 offset += 1;
32181 if (version == 4)
32182 {
32183 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32184 offset += 4;
32185 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32186 offset += 4;
32187 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32188 offset += 2;
32189 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32190 offset += 2;
32191 proto_tree_add_item(tree, hf_ieee80211_tclas_dscp, tvb, offset, 1, ENC_NA0x00000000);
32192 offset += 1;
32193 proto_tree_add_item(tree, hf_ieee80211_tclas_protocol, tvb, offset, 1, ENC_NA0x00000000);
32194 /*offset += 1;*/
32195 }
32196 else if (version == 6)
32197 {
32198 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_src, tvb, offset, 16, ENC_NA0x00000000);
32199 offset += 16;
32200 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_dst, tvb, offset, 16, ENC_NA0x00000000);
32201 offset += 16;
32202 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32203 offset += 2;
32204 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32205 offset += 2;
32206 proto_tree_add_item(tree, hf_ieee80211_tclas_flow, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
32207 /*offset += 3;*/
32208 }
32209 break;
32210
32211 case 2:
32212 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32213 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask2,
32214 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32215 offset++;
32216
32217 proto_tree_add_item(tree, hf_ieee80211_tclas_tag_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32218 /*offset += 2;*/
32219 break;
32220
32221 case 3:
32222 proto_tree_add_item(tree, hf_ieee80211_tclas_mask_reserved, tvb, offset,
32223 1, ENC_NA0x00000000);
32224 offset += 1;
32225
32226 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_offset, tvb, offset,
32227 2, ENC_LITTLE_ENDIAN0x80000000);
32228 offset += 2;
32229
32230 filter_field_len = (tag_len - 4) / 2;
32231
32232 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_value, tvb, offset,
32233 filter_field_len, ENC_NA0x00000000);
32234 offset += filter_field_len;
32235
32236 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_mask, tvb, offset,
32237 filter_field_len, ENC_NA0x00000000);
32238 /*offset += filter_field_len;*/
32239 break;
32240
32241 case 4:
32242 version = tvb_get_uint8(tvb, offset+1);
32243 if (version == 4) {
32244 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32245 hf_ieee80211_tclas_class_mask,
32246 ett_tag_tclas_mask_tree,
32247 ieee80211_tclas_class_mask4_4,
32248 ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
32249 } else if (version == 6) {
32250 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32251 hf_ieee80211_tclas_class_mask,
32252 ett_tag_tclas_mask_tree,
32253 ieee80211_tclas_class_mask4_6,
32254 ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
32255 } else {
32256 proto_tree_add_item(tree, hf_ieee80211_tclas_class_mask, tvb, offset, 1,
32257 ENC_NA0x00000000);
32258 offset += 1;
32259
32260 proto_tree_add_item(tree, hf_ieee80211_tclas_reserved_bytes, tvb, offset,
32261 tag_len - offset + 1, ENC_NA0x00000000);
32262 break;
32263 }
32264
32265 offset += 1;
32266
32267 proto_tree_add_item(tree, hf_ieee80211_tclas4_version, tvb, offset, 1, ENC_NA0x00000000);
32268 offset += 1;
32269
32270 if (version == 4)
32271 {
32272 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32273 offset += 4;
32274 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32275 offset += 4;
32276 proto_tree_add_item(tree, hf_ieee80211_tclas4_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32277 offset += 2;
32278 proto_tree_add_item(tree, hf_ieee80211_tclas4_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32279 offset += 2;
32280 proto_tree_add_item(tree, hf_ieee80211_tclas4_dscp, tvb, offset, 1, ENC_NA0x00000000);
32281 offset += 1;
32282 proto_tree_add_item(tree, hf_ieee80211_tclas4_protocol, tvb, offset, 1, ENC_NA0x00000000);
32283 offset += 1;
32284 proto_tree_add_item(tree, hf_ieee80211_tclas4_reserved, tvb, offset, 1, ENC_NA0x00000000);
32285 /*offset += 1;*/
32286 }
32287 else if (version == 6)
32288 {
32289 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv6_src, tvb, offset, 16, ENC_NA0x00000000);
32290 offset += 16;
32291 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv6_dst, tvb, offset, 16, ENC_NA0x00000000);
32292 offset += 16;
32293 proto_tree_add_item(tree, hf_ieee80211_tclas4_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32294 offset += 2;
32295 proto_tree_add_item(tree, hf_ieee80211_tclas4_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32296 offset += 2;
32297 proto_tree_add_item(tree, hf_ieee80211_tclas4_dscp, tvb, offset, 1, ENC_NA0x00000000);
32298 offset += 1;
32299 proto_tree_add_item(tree, hf_ieee80211_tclas4_next_hdr, tvb, offset, 1, ENC_NA0x00000000);
32300 proto_tree_add_item(tree, hf_ieee80211_tclas4_flow, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
32301 /*offset += 3;*/
32302 }
32303 break;
32304
32305 case 5:
32306 /* Note, BIG Endian where more than one byte. */
32307 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32308 hf_ieee80211_tclas_class_mask,
32309 ett_tag_tclas_mask_tree,
32310 ieee80211_tclas_class_mask5,
32311 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32312 offset++;
32313
32314 proto_tree_add_item(tree, hf_ieee80211_tclas_tclas_8021d_up_pcp, tvb,
32315 offset, 1, ENC_NA0x00000000);
32316 offset += 1;
32317
32318 proto_tree_add_item(tree, hf_ieee80211_tclas_8021q_dei, tvb, offset, 1,
32319 ENC_NA0x00000000);
32320 offset += 1;
32321
32322 proto_tree_add_item(tree, hf_ieee80211_tclas_8021q_vid, tvb, offset, 2,
32323 ENC_BIG_ENDIAN0x00000000);
32324 break;
32325
32326 case 6:
32327 class_mask = tvb_get_letoh24(tvb, offset);
32328 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32329 hf_ieee80211_tclas_class_mask6_a_above,
32330 ett_tag_tclas_mask_tree,
32331 ieee80211_tclas_class_mask6,
32332 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32333 offset += 3;
32334
32335 /* Is the Frame Control info there? */
32336 if (class_mask & 0x01) {
32337 proto_tree_add_item(tree, hf_ieee80211_tclas6_frame_control_spec, tvb,
32338 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32339 offset += 2;
32340
32341 if (class_mask & 0x02) {
32342 proto_tree_add_item(tree, hf_ieee80211_tclas6_frame_control_mask, tvb,
32343 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32344 offset += 2;
32345 }
32346 }
32347 class_mask = class_mask >> 2; /* Get the next two bits */
32348
32349 /* Is the Duration info there? */
32350 if (class_mask & 0x01) {
32351 proto_tree_add_item(tree, hf_ieee80211_tclas6_duration_spec, tvb,
32352 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32353 offset += 2;
32354
32355 if (class_mask & 0x02) {
32356 proto_tree_add_item(tree, hf_ieee80211_tclas6_duration_mask, tvb,
32357 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32358 offset += 2;
32359 }
32360 }
32361 class_mask = class_mask >> 2; /* Get the next two bits */
32362
32363 /* Is the Address 1 info there? */
32364 if (class_mask & 0x01) {
32365 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_1_spec, tvb,
32366 offset, 6, ENC_NA0x00000000);
32367 offset += 6;
32368
32369 if (class_mask & 0x02) {
32370 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_1_mask, tvb,
32371 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32372 offset += 6;
32373 }
32374 }
32375 class_mask = class_mask >> 2; /* Get the next two bits */
32376
32377 /* Is the Address 2 info there? */
32378 if (class_mask & 0x01) {
32379 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_2_spec, tvb,
32380 offset, 6, ENC_NA0x00000000);
32381 offset += 6;
32382
32383 if (class_mask & 0x02) {
32384 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_2_mask, tvb,
32385 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32386 offset += 6;
32387 }
32388 }
32389 class_mask = class_mask >> 2; /* Get the next two bits */
32390
32391 /* Is the Address 3 info there? */
32392 if (class_mask & 0x01) {
32393 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_3_spec, tvb,
32394 offset, 6, ENC_NA0x00000000);
32395 offset += 6;
32396
32397 if (class_mask & 0x02) {
32398 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_3_mask, tvb,
32399 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32400 offset += 6;
32401 }
32402 }
32403 class_mask = class_mask >> 2; /* Get the next two bits */
32404
32405 /* Is the Sequence Control info there? */
32406 if (class_mask & 0x01) {
32407 proto_tree_add_item(tree, hf_ieee80211_tclas6_sequence_control_spec, tvb,
32408 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32409 offset += 2;
32410
32411 if (class_mask & 0x02) {
32412 proto_tree_add_item(tree, hf_ieee80211_tclas6_sequence_control_mask,
32413 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32414 offset += 2;
32415 }
32416 }
32417 class_mask = class_mask >> 2; /* Get the next two bits */
32418
32419 /* Is the Address 4 info there? */
32420 if (class_mask & 0x01) {
32421 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_4_spec, tvb,
32422 offset, 6, ENC_NA0x00000000);
32423 offset += 6;
32424
32425 if (class_mask & 0x02) {
32426 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_4_mask, tvb,
32427 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32428 offset += 6;
32429 }
32430 }
32431 class_mask = class_mask >> 2; /* Get the next two bits */
32432
32433 /* Is the QoS Control info there? */
32434 if (class_mask & 0x01) {
32435 proto_tree_add_item(tree, hf_ieee80211_tclas6_qos_control_spec, tvb,
32436 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32437 offset += 2;
32438
32439 if (class_mask & 0x02) {
32440 proto_tree_add_item(tree, hf_ieee80211_tclas6_qos_control_mask, tvb,
32441 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32442 offset += 2;
32443 }
32444 }
32445 class_mask = class_mask >> 2; /* Get the next two bits */
32446
32447 /* Is the HT Control info there? */
32448 if (class_mask & 0x01) {
32449 proto_tree_add_item(tree, hf_ieee80211_tclas6_ht_control_spec, tvb,
32450 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32451 offset += 4;
32452
32453 if (class_mask & 0x02) {
32454 proto_tree_add_item(tree, hf_ieee80211_tclas6_ht_control_mask, tvb,
32455 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32456 }
32457 }
32458 /* class_mask = class_mask >> 2; Get the next two bits */
32459
32460 break;
32461
32462 case 7:
32463 class_mask = tvb_get_letohs(tvb, offset);
32464 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32465 hf_ieee80211_tclas_class_mask6_a_above,
32466 ett_tag_tclas_mask_tree,
32467 ieee80211_tclas_class_mask7,
32468 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32469 offset += 3;
32470
32471 /* Is the Frame Control info there */
32472 if (class_mask & 0x01) {
32473 proto_tree_add_item(tree, hf_ieee80211_tclas7_frame_control_spec, tvb,
32474 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32475 offset += 2;
32476 if (class_mask & 0x02) {
32477 proto_tree_add_item(tree, hf_ieee80211_tclas7_frame_control_mask, tvb,
32478 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32479 offset += 2;
32480 }
32481 }
32482 class_mask = class_mask >> 2; /* Get the next two bits */
32483
32484 /* Is the Address 1 (SID) info there */
32485 if (class_mask & 0x01) {
32486 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_1_sid_spec, tvb,
32487 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32488 offset += 2;
32489 if (class_mask & 0x02) {
32490 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_1_sid_mask, tvb,
32491 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32492 offset += 2;
32493 }
32494 }
32495 class_mask = class_mask >> 2; /* Get the next two bits */
32496
32497 /* Is the Address 2 info there */
32498 if (class_mask & 0x01) {
32499 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_2_spec, tvb,
32500 offset, 6, ENC_NA0x00000000);
32501 offset += 6;
32502 if (class_mask & 0x02) {
32503 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_2_mask, tvb,
32504 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32505 offset += 6;
32506 }
32507 }
32508 class_mask = class_mask >> 2; /* Get the next two bits */
32509
32510 /* Is the Sequence Control info there */
32511 if (class_mask & 0x01) {
32512 proto_tree_add_item(tree, hf_ieee80211_tclas7_sequence_control_spec, tvb,
32513 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32514 offset += 2;
32515 if (class_mask & 0x02) {
32516 proto_tree_add_item(tree, hf_ieee80211_tclas7_sequence_control_mask,
32517 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32518 offset += 2;
32519 }
32520 }
32521 class_mask = class_mask >> 2; /* Get the next two bits */
32522
32523 /* Is the Address 3 info there */
32524 if (class_mask & 0x01) {
32525 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_3_spec, tvb,
32526 offset, 6, ENC_NA0x00000000);
32527 offset += 6;
32528 if (class_mask & 0x02) {
32529 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_3_mask, tvb,
32530 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32531 offset += 6;
32532 }
32533 }
32534 class_mask = class_mask >> 2; /* Get the next two bits */
32535
32536 /* Is the Address 4 info there */
32537 if (class_mask & 0x01) {
32538 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_4_spec, tvb,
32539 offset, 6, ENC_NA0x00000000);
32540 offset += 6;
32541 if (class_mask & 0x02) {
32542 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_4_mask, tvb,
32543 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32544 }
32545 }
32546 /*class_mask = class_mask >> 2; Get the next two bits */
32547
32548 break;
32549
32550 case 8:
32551 class_mask = tvb_get_letohs(tvb, offset);
32552 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32553 hf_ieee80211_tclas_class_mask6_a_above,
32554 ett_tag_tclas_mask_tree,
32555 ieee80211_tclas_class_mask8,
32556 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32557 offset += 3;
32558
32559 /* Is the Frame Control info there */
32560 if (class_mask & 0x01) {
32561 proto_tree_add_item(tree, hf_ieee80211_tclas8_frame_control_spec, tvb,
32562 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32563 offset += 2;
32564 if (class_mask & 0x02) {
32565 proto_tree_add_item(tree, hf_ieee80211_tclas8_frame_control_mask, tvb,
32566 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32567 offset += 2;
32568 }
32569 }
32570 class_mask = class_mask >> 2; /* Get the next two bits */
32571
32572 /* Is the Address 1 (BSSID) info there */
32573 if (class_mask & 0x01) {
32574 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_1_bssid_spec, tvb,
32575 offset, 6, ENC_NA0x00000000);
32576 offset += 6;
32577 if (class_mask & 0x02) {
32578 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_1_bssid_mask, tvb,
32579 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32580 offset += 6;
32581 }
32582 }
32583 class_mask = class_mask >> 2; /* Get the next two bits */
32584
32585 /* Is the Address 2 (SID) info there */
32586 if (class_mask & 0x01) {
32587 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_2_sid_spec, tvb,
32588 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32589 offset += 2;
32590 if (class_mask & 0x02) {
32591 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_2_sid_mask, tvb,
32592 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32593 offset += 2;
32594 }
32595 }
32596 class_mask = class_mask >> 2; /* Get the next two bits */
32597
32598 /* Is the Sequence Control info there */
32599 if (class_mask & 0x01) {
32600 proto_tree_add_item(tree, hf_ieee80211_tclas8_sequence_control_spec, tvb,
32601 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32602 offset += 2;
32603 if (class_mask & 0x02) {
32604 proto_tree_add_item(tree, hf_ieee80211_tclas8_sequence_control_mask,
32605 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32606 offset += 2;
32607 }
32608 }
32609 class_mask = class_mask >> 2; /* Get the next two bits */
32610
32611 /* Is the Address 3 info there */
32612 if (class_mask & 0x01) {
32613 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_3_spec, tvb,
32614 offset, 6, ENC_NA0x00000000);
32615 offset += 6;
32616 if (class_mask & 0x02) {
32617 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_3_mask, tvb,
32618 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32619 offset += 6;
32620 }
32621 }
32622 class_mask = class_mask >> 2; /* Get the next two bits */
32623
32624 /* Is the Address 4 info there */
32625 if (class_mask & 0x01) {
32626 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_4_spec, tvb,
32627 offset, 6, ENC_NA0x00000000);
32628 offset += 6;
32629 if (class_mask & 0x02) {
32630 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_4_mask, tvb,
32631 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32632 }
32633 }
32634 /* class_mask = class_mask >> 2; Get the next two bits */
32635
32636 break;
32637
32638 case 9:
32639 class_mask = tvb_get_letohs(tvb, offset);
32640 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32641 hf_ieee80211_tclas_class_mask6_a_above,
32642 ett_tag_tclas_mask_tree,
32643 ieee80211_tclas_class_mask9,
32644 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32645 offset += 3;
32646
32647 /* Is the Frame Control info there */
32648 if (class_mask & 0x01) {
32649 proto_tree_add_item(tree, hf_ieee80211_tclas9_frame_control_spec, tvb,
32650 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32651 offset += 2;
32652 if (class_mask & 0x02) {
32653 proto_tree_add_item(tree, hf_ieee80211_tclas9_frame_control_mask, tvb,
32654 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32655 offset += 2;
32656 }
32657 }
32658 class_mask = class_mask >> 2; /* Get the next two bits */
32659
32660 /* Is the Address 1 info there */
32661 if (class_mask & 0x01) {
32662 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_1_spec, tvb,
32663 offset, 6, ENC_NA0x00000000);
32664 offset += 6;
32665 if (class_mask & 0x02) {
32666 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_1_mask, tvb,
32667 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32668 offset += 6;
32669 }
32670 }
32671 class_mask = class_mask >> 2; /* Get the next two bits */
32672
32673 /* Is the Address 2 info there */
32674 if (class_mask & 0x01) {
32675 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_2_spec, tvb,
32676 offset, 6, ENC_NA0x00000000);
32677 offset += 6;
32678 if (class_mask & 0x02) {
32679 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_2_mask, tvb,
32680 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32681 offset += 6;
32682 }
32683 }
32684 class_mask = class_mask >> 2; /* Get the next two bits */
32685
32686 /* Is the Sequence Control info there */
32687 if (class_mask & 0x01) {
32688 proto_tree_add_item(tree, hf_ieee80211_tclas9_sequence_control_spec, tvb,
32689 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32690 offset += 2;
32691 if (class_mask & 0x02) {
32692 proto_tree_add_item(tree, hf_ieee80211_tclas9_sequence_control_mask,
32693 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32694 }
32695 }
32696 /* class_mask = class_mask >> 2; Get the next two bits */
32697
32698 break;
32699
32700 case 0x0A:
32701 proto_tree_add_item(tree, hf_ieee80211_tclas10_protocol_instance, tvb,
32702 offset, 1, ENC_NA0x00000000);
32703 offset += 1;
32704
32705 proto_tree_add_item(tree, hf_ieee80211_tclas10_protocol_num_next_hdr, tvb,
32706 offset, 1, ENC_NA0x00000000);
32707 offset += 1;
32708
32709 filter_field_len = (tag_len - 4) / 2;
32710
32711 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_value, tvb, offset,
32712 filter_field_len, ENC_NA0x00000000);
32713 offset += filter_field_len;
32714
32715 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_mask, tvb, offset,
32716 filter_field_len, ENC_NA0x00000000);
32717 /*offset += filter_field_len;*/
32718 break;
32719
32720 default:
32721 break;
32722 }
32723
32724 return tvb_captured_length(tvb);
32725}
32726
32727static int
32728ieee80211_tag_tclas(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32729{
32730 int tag_len = tvb_reported_length(tvb);
32731 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32732 int offset = 0;
32733
32734 if (tag_len < 5)
32735 {
32736 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 5", tag_len);
32737 return 1;
32738 }
32739
32740 proto_tree_add_item(tree, hf_ieee80211_tclas_up, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32741 offset += 1;
32742
32743 return ieee80211_frame_classifier(tvb, pinfo, tree, offset, tag_len);
32744}
32745
32746/* 7.3.2.34 Schedule element (15) */
32747static int
32748ieee80211_tag_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32749{
32750 int tag_len = tvb_reported_length(tvb);
32751 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32752 int offset = 0;
32753 if (tag_len != 14)
32754 {
32755 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 14", tag_len);
32756 return 1;
32757 }
32758
32759 add_ff_schedule_info(tree, tvb, pinfo, offset);
32760 offset += 2;
32761
32762 proto_tree_add_item(tree, hf_ieee80211_sched_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32763 offset += 4;
32764
32765 proto_tree_add_item(tree, hf_ieee80211_sched_srv_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32766 offset += 4;
32767
32768 proto_tree_add_item(tree, hf_ieee80211_sched_spec_int, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32769 return tvb_captured_length(tvb);
32770}
32771
32772/* 7.3.2.8 Challenge Text element (16) */
32773static int
32774ieee80211_tag_challenge_text(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
32775{
32776 int tag_len = tvb_reported_length(tvb);
32777 int offset = 0;
32778
32779 proto_tree_add_item(tree, hf_ieee80211_tag_challenge_text, tvb, offset, tag_len, ENC_NA0x00000000);
32780
32781 return ((tag_len > 0) ? tag_len : 1);
32782}
32783
32784/* 7.3.2.15 Power Constraint element (32) */
32785static int
32786ieee80211_tag_power_constraint(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32787{
32788 int tag_len = tvb_reported_length(tvb);
32789 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32790 int offset = 0;
32791 if (tag_len != 1)
32792 {
32793 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
32794 return 1;
32795 }
32796
32797 proto_tree_add_item(tree, hf_ieee80211_tag_power_constraint_local, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32798 proto_item_append_text(field_data->item_tag, ": %d", tvb_get_uint8(tvb, offset));
32799 return tvb_captured_length(tvb);
32800}
32801
32802/* 7.3.2.16 Power Capability element (33) */
32803static int
32804ieee80211_tag_power_capability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32805{
32806 int tag_len = tvb_reported_length(tvb);
32807 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32808 int offset = 0;
32809 if (tag_len != 2)
32810 {
32811 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
32812 return 1;
32813 }
32814
32815 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_min, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32816 proto_item_append_text(field_data->item_tag, " Min: %d", tvb_get_int8(tvb, offset));
32817 offset += 1;
32818
32819 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_max, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32820 proto_item_append_text(field_data->item_tag, ", Max: %d", tvb_get_int8(tvb, offset));
32821 return tvb_captured_length(tvb);
32822}
32823
32824/* 7.3.2.18 TPC Request element (34) */
32825static int
32826ieee80211_tag_tpc_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U___attribute__((unused)), void* data)
32827{
32828 int tag_len = tvb_reported_length(tvb);
32829 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32830 if (tag_len != 0)
32831 {
32832 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 0", tag_len);
32833 return 1; /* Even with no data, we can't return 0 */
32834 }
32835
32836 return 1; /* Even with no data, we can't return 0 */
32837}
32838
32839/* TPC Report element (35)
32840 * 7.3.2.18 (Std 802.11-2007), 8.4.2.19 (Std 802.11-2012),
32841 * 9.4.2.17 (Std 802.11-2016), 9.4.2.16 (Std 802.11-2020)
32842 */
32843static int
32844ieee80211_tag_tpc_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32845{
32846 int tag_len = tvb_reported_length(tvb);
32847 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32848 int offset = 0;
32849
32850 if (tag_len != 2)
32851 {
32852 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
32853 return 1;
32854 }
32855
32856 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_trsmt_pow, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32857 proto_item_append_text(field_data->item_tag, " Transmit Power: %d dBm", tvb_get_uint8(tvb, offset));
32858 offset += 1;
32859
32860 /*
32861 * "The Link Margin field is reserved when a TPC Report element is
32862 * included in a Beacon frame or Probe Response frame." - 2012 and later
32863 */
32864
32865 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)))
32866 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
32867 FRAME_TYPE_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
;
32868
32869 if (ftype == MGT_BEACON0x08 || ftype == MGT_PROBE_RESP0x05) {
32870 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_reserved, tvb, offset, 1, ENC_NA0x00000000);
32871 } else {
32872 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_link_mrg, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32873
32874 proto_item_append_text(field_data->item_tag, ", Link Margin: %d dBm", tvb_get_uint8(tvb, offset));
32875 }
32876 return tvb_captured_length(tvb);
32877}
32878
32879/* 7.3.2.19 Supported Channels element (36) */
32880static int
32881ieee80211_tag_supported_channels(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32882{
32883 int tag_len = tvb_reported_length(tvb);
32884 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32885 int offset = 0;
32886
32887 proto_item *chan_item;
32888 proto_tree *chan_tree;
32889 unsigned i = 1;
32890
32891 if (tag_len % 2 == 1) {
32892 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u must be even", tag_len);
32893 return tvb_captured_length(tvb);
32894 }
32895
32896 while (offset < tag_len)
32897 {
32898 chan_item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_channels, tvb, offset, 2, ENC_NA0x00000000);
32899 proto_item_append_text(chan_item, " #%d", i);
32900 i += 1;
32901
32902 chan_tree = proto_item_add_subtree(chan_item , ett_tag_supported_channels);
32903
32904 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_first, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32905 proto_item_append_text(chan_item, " First: %d", tvb_get_uint8(tvb, offset));
32906 offset += 1;
32907
32908 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_range, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32909 proto_item_append_text(chan_item, ", Range: %d ", tvb_get_uint8(tvb, offset));
32910 offset += 1;
32911
32912 }
32913 return tvb_captured_length(tvb);
32914}
32915
32916/* 7.3.2.20 Channel Switch Announcement element (37) */
32917static int
32918ieee80211_tag_switch_ann(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32919{
32920 int tag_len = tvb_reported_length(tvb);
32921 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32922 int offset = 0;
32923 if (tag_len != 3)
32924 {
32925 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 3", tag_len);
32926 return 1;
32927 }
32928
32929 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32930 proto_item_append_text(field_data->item_tag, " Mode: %d", tvb_get_uint8(tvb, offset));
32931 offset += 1;
32932
32933 proto_tree_add_item(tree, hf_ieee80211_csa_new_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32934 proto_item_append_text(field_data->item_tag, ", Number: %d ", tvb_get_uint8(tvb, offset));
32935 offset += 1;
32936
32937 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32938 proto_item_append_text(field_data->item_tag, ", Count: %d ", tvb_get_uint8(tvb, offset));
32939 return tvb_captured_length(tvb);
32940}
32941
32942/* 7.3.2.21 Measurement Request element (38) with update from 802.11k-2008 */
32943static int
32944ieee80211_tag_measure_req(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 uint8_t request_type;
32950 proto_item *parent_item;
32951 proto_tree *sub_tree;
32952 static int * const ieee80211_tag_measure_request_mode[] = {
32953 &hf_ieee80211_tag_measure_request_mode_parallel,
32954 &hf_ieee80211_tag_measure_request_mode_enable,
32955 &hf_ieee80211_tag_measure_request_mode_request,
32956 &hf_ieee80211_tag_measure_request_mode_report,
32957 &hf_ieee80211_tag_measure_request_mode_duration_mandatory,
32958 &hf_ieee80211_tag_measure_request_mode_reserved,
32959 NULL((void*)0)
32960 };
32961
32962 if (tag_len < 3)
32963 {
32964 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
32965 return tvb_captured_length(tvb);
32966 }
32967 proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_token, tvb, offset, 1, ENC_NA0x00000000);
32968 offset += 1;
32969
32970 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_request_mode,
32971 ett_tag_measure_request_mode_tree, ieee80211_tag_measure_request_mode,
32972 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32973 offset += 1;
32974
32975 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_type, tvb, offset, 1, ENC_NA0x00000000);
32976 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_type_tree);
32977 request_type = tvb_get_uint8(tvb, offset);
32978 offset += 1;
32979
32980 switch (request_type) {
32981 case 0: /* Basic Request */
32982 case 1: /* Clear channel assessment (CCA) request */
32983 case 2: /* Receive power indication (RPI) histogram request */
32984 {
32985 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
32986 offset += 1;
32987
32988 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
32989 offset += 8;
32990
32991 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32992 offset += 2;
32993 break;
32994 }
32995 case 3: /* Channel Load Request */
32996 {
32997 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
32998 offset += 1;
32999
33000 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33001 offset += 1;
33002
33003 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33004 offset += 2;
33005
33006 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33007 offset += 2;
33008
33009 while (offset < tag_len)
33010 {
33011 uint8_t sub_id;
33012 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_id, tvb, offset, 1, ENC_NA0x00000000);
33013 sub_id = tvb_get_uint8(tvb, offset);
33014 offset += 1;
33015
33016 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA0x00000000);
33017 offset += 1;
33018
33019 switch (sub_id) {
33020 case MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1: /* Channel Load Reporting Information (1) */
33021 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition, tvb, offset, 1, ENC_NA0x00000000);
33022 offset += 1;
33023 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref, tvb, offset, 1, ENC_NA0x00000000);
33024 offset += 1;
33025 break;
33026 default:
33027 /* no default action */
33028 break;
33029 }
33030 }
33031 break;
33032 }
33033 case 4: /* Noise Histogram Request */
33034 {
33035 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33036 offset += 1;
33037
33038 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33039 offset += 1;
33040
33041 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33042 offset += 2;
33043
33044 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33045 offset += 2;
33046
33047 while (offset < tag_len)
33048 {
33049 uint8_t sub_id;
33050 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_id, tvb, offset, 1, ENC_NA0x00000000);
33051 sub_id = tvb_get_uint8(tvb, offset);
33052 offset += 1;
33053
33054 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA0x00000000);
33055 offset += 1;
33056
33057 switch (sub_id) {
33058 case MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1: /* Noise Histogram Reporting Information (1) */
33059 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition, tvb, offset, 1, ENC_NA0x00000000);
33060 offset += 1;
33061 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref, tvb, offset, 1, ENC_NA0x00000000);
33062 offset += 1;
33063 break;
33064 default:
33065 /* no default action */
33066 break;
33067 }
33068 }
33069 break;
33070 }
33071 case 5: /* Beacon Request */
33072 {
33073 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33074 offset += 1;
33075
33076 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33077 offset += 1;
33078
33079 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33080 offset += 2;
33081
33082 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33083 offset += 2;
33084
33085 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_measurement_mode, tvb, offset, 1, ENC_NA0x00000000);
33086 offset += 1;
33087
33088 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_bssid, tvb, offset, 6, ENC_NA0x00000000);
33089 offset += 6;
33090
33091 while (offset < tag_len)
33092 {
33093 uint8_t sub_id, sub_length, sub_tag_end;
33094 proto_item *sub_elem_item, *sub_elem_len_item;
33095 proto_tree *sub_elem_tree;
33096
33097 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_id, tvb, offset, 1, ENC_NA0x00000000);
33098 sub_id = tvb_get_uint8(tvb, offset);
33099 offset += 1;
33100
33101 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_request_sub_element_tree);
33102
33103 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_subelement_length,
33104 tvb, offset, 1, ENC_NA0x00000000);
33105 sub_length = tvb_get_uint8(tvb, offset);
33106 offset += 1;
33107 sub_tag_end = offset + sub_length;
33108
33109 if (sub_tag_end > tag_len)
33110 {
33111 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33112 return tvb_captured_length(tvb);
33113 }
33114
33115 switch (sub_id) {
33116 case MEASURE_REQ_BEACON_SUB_SSID0: /* SSID (0) */
33117 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_ssid, tvb, offset, sub_length, ENC_ASCII0x00000000);
33118 offset += sub_length;
33119 break;
33120 case MEASURE_REQ_BEACON_SUB_BRI1: /* Beacon Reporting Information (1) */
33121 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33122 offset += 1;
33123 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33124 offset += 1;
33125 break;
33126 case MEASURE_REQ_BEACON_SUB_RD2: /* Reporting Detail (2) */
33127 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33128 offset += 1;
33129 break;
33130 case MEASURE_REQ_BEACON_SUB_REQUEST10: /* Request (10) */
33131 {
33132 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
33133 offset += ieee80211_tag_request(sub_tvb, pinfo, sub_elem_tree, NULL((void*)0));
33134 break;
33135 }
33136 case MEASURE_REQ_BEACON_SUB_REQUEST_EXT11: /* Extended Request (11) */
33137 dissect_extended_request(tvb, pinfo, sub_elem_tree, offset, sub_length);
33138 offset += sub_length;
33139 break;
33140 case MEASURE_REQ_BEACON_SUB_APCP51: /* AP Channel Report (51) */
33141 {
33142 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
33143 ieee80211_tagged_field_data_t sub_data = {
33144 .ftype = 0,
33145 .sanity_check = NULL((void*)0),
33146 .isDMG = false0,
33147 .item_tag_length = sub_elem_len_item,
33148 .item_tag = sub_elem_item};
33149 offset += dissect_ap_channel_report(sub_tvb, pinfo, sub_elem_tree, &sub_data);
33150 break;
33151 }
33152 case MEASURE_REQ_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163:
33153 {
33154 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
33155 offset += dissect_wide_bw_channel_switch(sub_tvb, pinfo, sub_elem_tree, NULL((void*)0));
33156 break;
33157 }
33158 case MEASURE_REQ_BEACON_SUB_LAST_REPORT_REQ164:
33159 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_last_report_indication_request,
33160 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33161 offset += 1;
33162 break;
33163 default:
33164 /* no default action */
33165 break;
33166 }
33167 if (offset < sub_tag_end)
33168 {
33169 proto_item *tix;
33170 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_unknown, tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33171 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_beacon_unknown);
33172 offset = sub_tag_end;
33173 }
33174 }
33175
33176 break;
33177 }
33178 case 6: /* Frame Request */
33179 {
33180 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33181 offset += 1;
33182
33183 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33184 offset += 1;
33185
33186 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33187 offset += 2;
33188
33189 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33190 offset += 2;
33191
33192 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_frame_request_type, tvb, offset, 1, ENC_NA0x00000000);
33193 offset += 1;
33194
33195 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mac_address, tvb, offset, 6, ENC_NA0x00000000);
33196 offset += 6;
33197
33198 /* TODO Add Optional Subelements */
33199 break;
33200 }
33201 case 7: /* BSTA Statistics Request */
33202 {
33203 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_peer_mac_address, tvb, offset, 6, ENC_NA0x00000000);
33204 offset += 6;
33205
33206 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33207 offset += 2;
33208
33209 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33210 offset += 2;
33211
33212 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_group_id, tvb, offset, 1, ENC_NA0x00000000);
33213 offset += 1;
33214
33215 /* TODO Add Optional Subelements */
33216 break;
33217 }
33218 case 8: /* Location Configuration Indication (LCI) Request */
33219 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_subject, tvb, offset, 1, ENC_NA0x00000000);
33220 offset += 1;
33221
33222 /* TODO Add Optional Subelements */
33223 break;
33224 case 9: /* Transmit Stream Measurement Request */
33225 /* TODO */
33226 case 10: /* Multicast Diagnostics Request */
33227 /* TODO */
33228 case 11: /* Location Civic Request */
33229 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_subject, tvb, offset, 1, ENC_NA0x00000000);
33230 offset += 1;
33231
33232 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_civic_location_type, tvb, offset, 1, ENC_NA0x00000000);
33233 offset += 1;
33234
33235 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_service_interval_units, tvb, offset, 1, ENC_NA0x00000000);
33236 offset += 1;
33237
33238 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_service_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33239 offset += 2;
33240 /* TODO Add Optional Subelements */
33241 break;
33242 case 12: /* Location Identifier Request */
33243 /* TODO */
33244 case 13: /* Directional Channel Quality Request */
33245 /* TODO */
33246 case 14: /* Directional Measurement Request */
33247 /* TODO */
33248 case 15: /* Directional Statistics Request */
33249 /* TODO */
33250 case 16: /* Fine Timing Measurement Range Request */
33251 /* TODO */
33252 case 255: /* Measurement Pause Request */
33253 /* TODO */
33254 default: /* unknown */
33255 break;
33256 }
33257 if (offset < tag_len)
33258 {
33259 proto_item *tix;
33260 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_unknown, tvb, offset, tag_len - offset, ENC_NA0x00000000);
33261 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_unknown);
33262 }
33263
33264 return tvb_captured_length(tvb);
33265}
33266
33267/* 7.3.2.22 Measurement Report element (39) with update from 802.11k-2008 */
33268static int
33269ieee80211_tag_measure_rep(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33270{
33271 int tag_len = tvb_reported_length(tvb);
33272 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33273 int offset = 0;
33274 proto_item *parent_item;
33275 proto_tree *sub_tree;
33276 uint8_t report_type;
33277 static int * const ieee80211_tag_measure_report_mode[] = {
33278 &hf_ieee80211_tag_measure_report_mode_late,
33279 &hf_ieee80211_tag_measure_report_mode_incapable,
33280 &hf_ieee80211_tag_measure_report_mode_refused,
33281 &hf_ieee80211_tag_measure_report_mode_reserved,
33282 NULL((void*)0)
33283 };
33284 static int * const ieee80211_tag_measure_map_field[] = {
33285 &hf_ieee80211_tag_measure_map_field_bss,
33286 &hf_ieee80211_tag_measure_map_field_ofdm,
33287 &hf_ieee80211_tag_measure_map_field_unident_signal,
33288 &hf_ieee80211_tag_measure_map_field_radar,
33289 &hf_ieee80211_tag_measure_map_field_unmeasured,
33290 &hf_ieee80211_tag_measure_map_field_reserved,
33291 NULL((void*)0)
33292 };
33293 static int * const ieee80211_tag_measure_report_frame_info[] = {
33294 &hf_ieee80211_tag_measure_report_frame_info_phy_type,
33295 &hf_ieee80211_tag_measure_report_frame_info_frame_type,
33296 NULL((void*)0)
33297 };
33298
33299 if (tag_len < 3)
33300 {
33301 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
33302 return tvb_captured_length(tvb);
33303 }
33304 proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_measurement_token, tvb, offset, 1, ENC_NA0x00000000);
33305 offset += 1;
33306
33307 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_report_mode,
33308 ett_tag_measure_report_mode_tree, ieee80211_tag_measure_report_mode,
33309 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33310 offset += 1;
33311
33312 report_type = tvb_get_uint8(tvb, offset);
33313 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33314 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_type_tree);
33315 offset += 1;
33316
33317 if (tag_len == 3)
33318 return tvb_captured_length(tvb);
33319
33320 switch (report_type) {
33321 case 0: /* Basic Report */
33322 {
33323 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33324 offset += 1;
33325
33326 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33327 offset += 8;
33328
33329 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33330 offset += 2;
33331
33332 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_basic_map_field,
33333 ett_tag_measure_report_basic_map_tree, ieee80211_tag_measure_map_field,
33334 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33335 break;
33336 }
33337 case 1: /* Clear channel assessment (CCA) report */
33338 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33339 offset += 1;
33340
33341 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33342 offset += 8;
33343
33344 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33345 offset += 2;
33346
33347 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_cca_busy_fraction, tvb, offset, 1, ENC_NA0x00000000);
33348 offset += 1;
33349 break;
33350 case 2: /* Receive power indication (RPI) histogram report */
33351 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33352 offset += 1;
33353
33354 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33355 offset += 8;
33356
33357 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33358 offset += 2;
33359
33360 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report, tvb, offset, 8, ENC_NA0x00000000);
33361 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_rpi_tree);
33362
33363 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_0, tvb, offset, 1, ENC_NA0x00000000);
33364 offset += 1;
33365
33366 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_1, tvb, offset, 1, ENC_NA0x00000000);
33367 offset += 1;
33368
33369 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_2, tvb, offset, 1, ENC_NA0x00000000);
33370 offset += 1;
33371
33372 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_3, tvb, offset, 1, ENC_NA0x00000000);
33373 offset += 1;
33374
33375 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_4, tvb, offset, 1, ENC_NA0x00000000);
33376 offset += 1;
33377
33378 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_5, tvb, offset, 1, ENC_NA0x00000000);
33379 offset += 1;
33380
33381 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_6, tvb, offset, 1, ENC_NA0x00000000);
33382 offset += 1;
33383
33384 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_7, tvb, offset, 1, ENC_NA0x00000000);
33385 offset += 1;
33386 break;
33387 case 3: /* Channel Load Report */
33388 {
33389 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33390 offset += 1;
33391
33392 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33393 offset += 1;
33394
33395 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33396 offset += 8;
33397
33398 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33399 offset += 2;
33400
33401 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_load, tvb, offset, 1, ENC_NA0x00000000);
33402 offset += 1;
33403
33404 /* TODO Add Optional Subelements */
33405 break;
33406 }
33407 case 4: /* Noise Histogram Report */
33408 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33409 offset += 1;
33410
33411 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33412 offset += 1;
33413
33414 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33415 offset += 8;
33416
33417 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33418 offset += 2;
33419
33420 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA0x00000000);
33421 offset += 1;
33422
33423 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_anpi, tvb, offset, 1, ENC_NA0x00000000);
33424 offset += 1;
33425
33426 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_0, tvb, offset, 1, ENC_NA0x00000000);
33427 offset += 1;
33428
33429 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_1, tvb, offset, 1, ENC_NA0x00000000);
33430 offset += 1;
33431
33432 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_2, tvb, offset, 1, ENC_NA0x00000000);
33433 offset += 1;
33434
33435 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_3, tvb, offset, 1, ENC_NA0x00000000);
33436 offset += 1;
33437
33438 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_4, tvb, offset, 1, ENC_NA0x00000000);
33439 offset += 1;
33440
33441 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_5, tvb, offset, 1, ENC_NA0x00000000);
33442 offset += 1;
33443
33444 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_6, tvb, offset, 1, ENC_NA0x00000000);
33445 offset += 1;
33446
33447 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_7, tvb, offset, 1, ENC_NA0x00000000);
33448 offset += 1;
33449
33450 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_8, tvb, offset, 1, ENC_NA0x00000000);
33451 offset += 1;
33452
33453 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_9, tvb, offset, 1, ENC_NA0x00000000);
33454 offset += 1;
33455
33456 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_10, tvb, offset, 1, ENC_NA0x00000000);
33457 offset += 1;
33458
33459 /* TODO Add Optional Subelements */
33460 break;
33461 case 5: /* Beacon Report */
33462 {
33463 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33464 offset += 1;
33465
33466 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33467 offset += 1;
33468
33469 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33470 offset += 8;
33471
33472 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33473 offset += 2;
33474
33475 proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset, hf_ieee80211_tag_measure_report_frame_info,
33476 ett_tag_measure_report_frame_tree, ieee80211_tag_measure_report_frame_info,
33477 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33478 offset += 1;
33479
33480 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rcpi, tvb, offset, 1, ENC_NA0x00000000);
33481 offset += 1;
33482
33483 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rsni, tvb, offset, 1, ENC_NA0x00000000);
33484 offset += 1;
33485
33486 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_bssid, tvb, offset, 6, ENC_NA0x00000000);
33487 offset += 6;
33488
33489 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA0x00000000);
33490 offset += 1;
33491
33492 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
33493 offset += 4;
33494
33495 while (offset < tag_len)
33496 {
33497 uint8_t sub_id, sub_length, sub_tag_end;
33498 proto_item *sub_elem_item, *sub_elem_len_item;
33499 proto_tree *sub_elem_tree;
33500
33501 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_beacon_sub_id,
33502 tvb, offset, 1, ENC_NA0x00000000);
33503 sub_id = tvb_get_uint8(tvb, offset);
33504 offset += 1;
33505
33506 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_report_sub_element_tree);
33507
33508 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_subelement_length,
33509 tvb, offset, 1, ENC_NA0x00000000);
33510 sub_length = tvb_get_uint8(tvb, offset);
33511 offset += 1;
33512 sub_tag_end = offset + sub_length;
33513
33514 if (sub_tag_end > tag_len)
33515 {
33516 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33517 return tvb_captured_length(tvb);
33518 }
33519
33520 switch (sub_id) {
33521 case MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY1: /* Reported Frame Body (1) */
33522 {
33523 proto_tree *rep_tree;
33524 bool_Bool fixed_fields = true1;
33525
33526 rep_tree = proto_tree_add_subtree(sub_elem_tree, tvb, offset, sub_length,
33527 ett_tag_measure_reported_frame_tree, NULL((void*)0), "Reported Frame Body");
33528
33529 /* If reported frame body fragment ID sub element is present and this is not
33530 the first fragment then there are no fixed size fields */
33531 if (((tag_len - sub_tag_end) >= 4) &&
33532 (tvb_get_uint8(tvb, sub_tag_end) == MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2) &&
33533 ((tvb_get_uint8(tvb, sub_tag_end + 3) & 0x7f) > 0))
33534 fixed_fields = false0;
33535
33536 if (fixed_fields) {
33537 add_ff_timestamp(rep_tree, tvb, pinfo, offset);
33538 offset += 8;
33539 add_ff_beacon_interval(rep_tree, tvb, pinfo, offset);
33540 offset += 2;
33541 add_ff_cap_info(rep_tree, tvb, pinfo, offset);
33542 offset += 2;
33543 sub_length -= 12;
33544 }
33545
33546 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, rep_tree, sub_length, MGT_PROBE_RESP0x05, NULL((void*)0));
33547 offset += sub_length;
33548 break;
33549 }
33550 case MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2:
33551 {
33552 static int * const ieee80211_tag_measure_reported_frame_frag_id[] = {
33553 &hf_ieee80211_tag_measure_reported_frame_frag_rep_id,
33554 &hf_ieee80211_tag_measure_reported_frame_frag_number,
33555 &hf_ieee80211_tag_measure_reported_frame_frag_more,
33556 NULL((void*)0)
33557 };
33558 proto_tree_add_bitmask_with_flags(sub_elem_tree, tvb, offset,
33559 hf_ieee80211_tag_measure_reported_frame_frag_id,
33560 ett_tag_measure_reported_frame_frag_id_tree,
33561 ieee80211_tag_measure_reported_frame_frag_id,
33562 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33563 offset += 2;
33564 break;
33565 }
33566 case MEASURE_REP_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163:
33567 {
33568 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
33569 offset += dissect_wide_bw_channel_switch(sub_tvb, pinfo, sub_elem_tree, NULL((void*)0));
33570 break;
33571 }
33572 case MEASURE_REP_BEACON_SUB_LAST_REPORT_INDICATION164:
33573 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_beacon_sub_last_report_indication,
33574 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33575 offset += 1;
33576 break;
33577 default:
33578 /* no default action */
33579 break;
33580 }
33581
33582 if (offset < sub_tag_end)
33583 {
33584 proto_item *tix;
33585 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_beacon_unknown,
33586 tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33587 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_beacon_unknown);
33588 offset = sub_tag_end;
33589 }
33590 }
33591 break;
33592 }
33593 case 6: /* Frame Report */
33594 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33595 offset += 1;
33596
33597 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33598 offset += 1;
33599
33600 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33601 offset += 8;
33602
33603 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33604 offset += 2;
33605
33606 /* TODO Add Optional Subelements */
33607 break;
33608 case 7: /* BSTA Statistics Report */
33609 /* TODO */
33610 case 8: /* Location Configuration Information Report element */
33611 //proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
33612 //offset += 4;
33613
33614 while (offset < tag_len)
33615 {
33616 uint8_t sub_id, sub_length, sub_tag_end;
33617 proto_item *sub_elem_item, *sub_elem_len_item;
33618 proto_tree *sub_elem_tree;
33619
33620 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_lci_sub_id,
33621 tvb, offset, 1, ENC_NA0x00000000);
33622 sub_id = tvb_get_uint8(tvb, offset);
33623 offset += 1;
33624
33625 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_report_sub_element_tree);
33626
33627 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_subelement_length,
33628 tvb, offset, 1, ENC_NA0x00000000);
33629 sub_length = tvb_get_uint8(tvb, offset);
33630 offset += 1;
33631 sub_tag_end = offset + sub_length;
33632
33633 if (sub_tag_end > tag_len)
33634 {
33635 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33636 return tvb_captured_length(tvb);
33637 }
33638
33639 switch (sub_id) {
33640 case MEASURE_REP_LCI_SUB_REPORTED_LCI0: /* Location Configuration Information (0) */
33641 {
33642 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_lci,
33643 tvb, offset, 16, ENC_NA0x00000000);
33644 offset += 16;
33645 break;
33646 }
33647 case MEASURE_REP_LCI_SUB_REPORTED_Z4: /* Z (4) */
33648 {
33649 static int * const ieee80211_tag_measure_reported_lci_z_sta_floor_info[] = {
33650 &hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_expected_to_move,
33651 &hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_sta_floor_number,
33652 NULL((void*)0)
33653 };
33654 proto_tree_add_bitmask_with_flags(sub_elem_tree, tvb, offset,
33655 hf_ieee80211_tag_measure_report_lci_z_sta_floor_info,
33656 ett_tag_measure_reported_lci_z_tree,
33657 ieee80211_tag_measure_reported_lci_z_sta_floor_info,
33658 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33659 offset += 2;
33660
33661 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor,
33662 tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
33663 offset += 3;
33664
33665 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor_uncertainty,
33666 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33667 offset += 1;
33668 break;
33669 }
33670 case MEASURE_REP_LCI_SUB_REPORTED_URP6: /* Usage Rules/Policy (6) */
33671 {
33672 static int * const ieee80211_tag_measure_reported_lci_urp[] = {
33673 &hf_ieee80211_tag_measure_report_lci_urp_retransmission_allowed,
33674 &hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative_present,
33675 &hf_ieee80211_tag_measure_report_lci_urp_sta_location_policy,
33676 &hf_ieee80211_tag_measure_report_lci_urp_reserved,
33677 NULL((void*)0)
33678 };
33679 proto_tree_add_bitmask_with_flags(sub_elem_tree, tvb, offset,
33680 hf_ieee80211_tag_measure_report_lci_urp,
33681 ett_tag_measure_reported_lci_urp_tree,
33682 ieee80211_tag_measure_reported_lci_urp,
33683 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33684 offset += 1;
33685
33686 /* Retention Expires Relative (optional) */
33687 if ((sub_tag_end - 1) == 2 ) {
33688 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative,
33689 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33690 offset += 1;
33691 }
33692 break;
33693 }
33694 default:
33695 /* no default action */
33696 break;
33697 }
33698
33699 if (offset < sub_tag_end)
33700 {
33701 proto_item *tix;
33702 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_unknown,
33703 tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33704 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_lci_unknown);
33705 offset = sub_tag_end;
33706 }
33707 }
33708 break;
33709 case 9: /* Transmit Stream Measurement Report */
33710 /* TODO */
33711 case 10: /* Multicast Diagnostics Report */
33712 /* TODO */
33713 case 11: /* Location Civic Report */
33714 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_civic_location_type, tvb, offset, 1, ENC_NA0x00000000);
33715 offset += 1;
33716
33717 while (offset < tag_len)
33718 {
33719 uint8_t sub_id, sub_length, sub_tag_end;
33720 proto_item *sub_elem_item, *sub_elem_len_item;
33721 proto_tree *sub_elem_tree;
33722
33723 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_civic_sub_id,
33724 tvb, offset, 1, ENC_NA0x00000000);
33725 sub_id = tvb_get_uint8(tvb, offset);
33726 offset += 1;
33727
33728 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_report_sub_element_tree);
33729
33730 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_subelement_length,
33731 tvb, offset, 1, ENC_NA0x00000000);
33732 sub_length = tvb_get_uint8(tvb, offset);
33733 offset += 1;
33734 sub_tag_end = offset + sub_length;
33735
33736 if (sub_tag_end > tag_len)
33737 {
33738 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33739 return tvb_captured_length(tvb);
33740 }
33741
33742 switch (sub_id) {
33743 case MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_CIVIC0: /* Location Civic (0) */
33744 {
33745 uint32_t length;
33746 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic_country,
33747 tvb, offset, 2, ENC_ASCII0x00000000);
33748 offset += 2;
33749
33750 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic_type,
33751 tvb, offset, 1, ENC_NA0x00000000);
33752 offset += 1;
33753
33754 proto_tree_add_item_ret_uint(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic_length,
33755 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &length);
33756 offset += 1;
33757
33758 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic,
33759 tvb, offset, length, ENC_ASCII0x00000000);
33760 offset += length;
33761 break;
33762 }
33763 default:
33764 /* no default action */
33765 break;
33766 }
33767
33768 if (offset < sub_tag_end)
33769 {
33770 proto_item *tix;
33771 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_unknown,
33772 tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33773 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_lci_unknown);
33774 offset = sub_tag_end;
33775 }
33776 }
33777 break;
33778 case 12: /* Location Identifier Report */
33779 /* TODO */
33780 case 13: /* Directional Channel Quality Report */
33781 /* TODO */
33782 case 14: /* Directional Measurement Report */
33783 /* TODO */
33784 case 15: /* Directional Statistics Report */
33785 /* TODO */
33786 case 16: /* Fine Timing Measurement range Report */
33787 /* TODO */
33788 default: /* unknown */
33789 break;
33790 }
33791 if (offset < tag_len)
33792 {
33793 proto_item *tix;
33794 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_unknown, tvb, offset, tag_len - offset, ENC_NA0x00000000);
33795 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_unknown);
33796 }
33797 return tvb_captured_length(tvb);
33798}
33799
33800/* 7.3.2.23 Quiet element (40) */
33801static int
33802ieee80211_tag_quiet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33803{
33804 int tag_len = tvb_reported_length(tvb);
33805 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33806 int offset = 0;
33807 if (tag_len != 6)
33808 {
33809 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
33810 return tvb_captured_length(tvb);
33811 }
33812
33813 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_count, tvb, offset, 1, ENC_NA0x00000000);
33814 proto_item_append_text(field_data->item_tag, " Count: %d", tvb_get_uint8(tvb, offset));
33815 offset += 1;
33816
33817 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_period, tvb, offset, 1, ENC_NA0x00000000);
33818 proto_item_append_text(field_data->item_tag, " Period: %d", tvb_get_uint8(tvb, offset));
33819 offset += 1;
33820
33821 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33822 proto_item_append_text(field_data->item_tag, " Duration: %d", tvb_get_letohs(tvb, offset));
33823 offset += 2;
33824
33825 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33826 proto_item_append_text(field_data->item_tag, " Offset: %d", tvb_get_letohs(tvb, offset));
33827
33828 return tvb_captured_length(tvb);
33829}
33830
33831/* 7.3.2.24 IBSS DFS element (41) */
33832static int
33833ieee80211_tag_ibss_dfs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33834{
33835 int tag_len = tvb_reported_length(tvb);
33836 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33837 int offset = 0;
33838 proto_item *ti_sup_map;
33839 proto_tree *sub_map_tree;
33840 if (tag_len < 7)
33841 {
33842 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 7", tag_len);
33843 return tvb_captured_length(tvb);
33844 }
33845
33846 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_owner, tvb, offset, 6, ENC_NA0x00000000);
33847 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));
33848 offset += 6;
33849
33850 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_recovery_interval, tvb, offset, 1, ENC_NA0x00000000);
33851 offset += 1;
33852
33853 while (offset < tag_len)
33854 {
33855 ti_sup_map = proto_tree_add_item(tree, hf_ieee80211_tag_dfs_channel_map, tvb, offset, 2, ENC_NA0x00000000);
33856 sub_map_tree = proto_item_add_subtree(ti_sup_map, ett_tag_dfs_map_tree);
33857 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33858 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_map, tvb, offset, 1, ENC_NA0x00000000);
33859 offset += 2;
33860 }
33861 return tvb_captured_length(tvb);
33862}
33863
33864/* 7.3.2.13 ERP Information element (42) */
33865static int
33866ieee80211_tag_erp_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33867{
33868 int tag_len = tvb_reported_length(tvb);
33869 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33870 int offset = 0;
33871 static int * const ieee80211_tag_erp_info_flags[] = {
33872 &hf_ieee80211_tag_erp_info_erp_present,
33873 &hf_ieee80211_tag_erp_info_use_protection,
33874 &hf_ieee80211_tag_erp_info_barker_preamble_mode,
33875 &hf_ieee80211_tag_erp_info_reserved,
33876 NULL((void*)0)
33877 };
33878
33879 if (tag_len != 1)
33880 {
33881 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
33882 return tvb_captured_length(tvb);
33883 }
33884
33885 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_erp_info,
33886 ett_tag_erp_info_tree, ieee80211_tag_erp_info_flags,
33887 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33888
33889 return tvb_captured_length(tvb);
33890}
33891
33892/* 7.3.2.32 TS Delay element (43) */
33893static int
33894ieee80211_tag_ts_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33895{
33896 int tag_len = tvb_reported_length(tvb);
33897 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33898 int offset = 0;
33899 if (tag_len != 4)
33900 {
33901 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
33902 return tvb_captured_length(tvb);
33903 }
33904
33905 proto_tree_add_item(tree, hf_ieee80211_ts_delay, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
33906 proto_item_append_text(field_data->item_tag, " : %d", tvb_get_ntohl(tvb, offset));
33907 return tvb_captured_length(tvb);
33908}
33909
33910/* 7.3.2.33 TCLAS Processing element (44) */
33911static int
33912ieee80211_tag_tclas_process(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33913{
33914 int tag_len = tvb_reported_length(tvb);
33915 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33916 int offset = 0;
33917 if (tag_len != 1)
33918 {
33919 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
33920 return tvb_captured_length(tvb);
33921 }
33922
33923 proto_tree_add_item(tree, hf_ieee80211_tclas_process, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33924 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"));
33925 return tvb_captured_length(tvb);
33926}
33927
33928/* 802.11-2012 8.4.2.37 QoS Capability element (46) */
33929static int
33930ieee80211_tag_qos_capability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33931{
33932 int tag_len = tvb_reported_length(tvb);
33933 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33934 int offset = 0;
33935 if (tag_len != 1)
33936 {
33937 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
33938 return tvb_captured_length(tvb);
33939 }
33940 dissect_qos_capability(tree, tvb, pinfo, offset, field_data->ftype);
33941 return tvb_captured_length(tvb);
33942}
33943
33944static int
33945ieee80211_tag_rsn_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33946{
33947 int tag_len = tvb_reported_length(tvb);
33948 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33949 int offset = 0;
33950 if (tag_len < 2)
33951 {
33952 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
33953 return tvb_captured_length(tvb);
33954 }
33955
33956 dissect_rsn_ie(pinfo, tree, tvb, offset, tag_len, field_data->sanity_check);
33957 return tvb_captured_length(tvb);
33958}
33959
33960/* 7.3.2.14 Extended Supported Rates element (50) */
33961static int
33962ieee80211_tag_ext_supp_rates(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33963{
33964 int tag_len = tvb_reported_length(tvb);
33965 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33966 int offset = 0;
33967 if (tag_len < 1)
33968 {
33969 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);
33970 return tvb_captured_length(tvb);
33971 }
33972
33973 while (offset < tag_len)
33974 {
33975 proto_tree_add_item(tree, hf_ieee80211_tag_ext_supp_rates, tvb, offset, 1, ENC_NA0x00000000);
33976 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"));
33977 offset += 1;
33978 }
33979 proto_item_append_text(field_data->item_tag, " [Mbit/sec]");
33980 return tvb_captured_length(tvb);
33981}
33982
33983static int
33984ieee80211_tag_cisco_ccx1_ckip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33985{
33986 int tag_len = tvb_reported_length(tvb);
33987 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33988 int offset = 0;
33989 /* From WCS manual:
33990 * If Aironet IE support is enabled, the access point sends an Aironet
33991 * IE 0x85 (which contains the access point name, load, number of
33992 * associated clients, and so on) in the beacon and probe responses of
33993 * this WLAN, and the controller sends Aironet IEs 0x85 and 0x95
33994 * (which contains the management IP address of the controller and
33995 * the IP address of the access point) in the reassociation response
33996 * if it receives Aironet IE 0x85 in the reassociation request.
33997 */
33998
33999 if (tag_len < 26)
34000 {
34001 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u too short, must be >= 26", tag_len);
34002 return tvb_captured_length(tvb);
34003 }
34004 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown, tvb, offset, 10, ENC_NA0x00000000);
34005 offset += 10;
34006
34007 /* The Name of the sending device starts at offset 10 and is up to
34008 15 or 16 bytes in length, \0 padded */
34009 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_name, tvb, offset, 16, ENC_ASCII0x00000000);
34010 offset += 16;
34011
34012 /* Total number off associated clients and repeater access points */
34013 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_clients, tvb, offset, 1, ENC_NA0x00000000);
34014 offset += 1;
34015 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown2, tvb, offset, 3, ENC_NA0x00000000);
34016 return tvb_captured_length(tvb);
34017}
34018
34019static int
34020ieee80211_tag_vendor_specific_ie(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 uint32_t tag_vs_len = tag_len;
34026 uint32_t oui;
34027
34028 if (tag_len < 3)
34029 {
34030 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
34031 return tvb_captured_length(tvb);
34032 }
34033
34034 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
34035 proto_item_append_text(field_data->item_tag, ": %s", uint_get_manuf_name_if_known(oui));
34036
34037 offset += 3;
34038 tag_vs_len -= 3;
34039
34040 if (tag_len > 0) {
34041 proto_tree_add_item(field_data->item_tag, hf_ieee80211_tag_vendor_oui_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
34042 }
34043
34044 switch (oui) {
34045 /* 802.11 specific vendor ids */
34046 case OUI_WPAWME0x0050F2:
34047 dissect_vendor_ie_wpawme(tree, tvb, pinfo, offset, tag_vs_len, field_data->ftype);
34048 break;
34049 case OUI_RSN0x000FAC:
34050 dissect_vendor_ie_rsn(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34051 break;
34052 case OUI_PRE11N0x00904C:
34053 dissect_vendor_ie_ht(tvb, pinfo, tree, offset, field_data->item_tag, field_data->item_tag_length, tag_vs_len);
34054 break;
34055 case OUI_WFA0x506F9A:
34056 dissect_vendor_ie_wfa(pinfo, field_data->item_tag, tvb);
34057 break;
34058
34059 /* Normal IEEE vendor ids (from oui.h) */
34060 case OUI_CISCOWL0x004096: /* Cisco Wireless (Aironet) */
34061 dissect_vendor_ie_aironet(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34062 break;
34063 case OUI_MARVELL0x005043:
34064 dissect_vendor_ie_marvell(field_data->item_tag, tree, tvb, offset, tag_vs_len);
34065 break;
34066 case OUI_ATHEROS0x00037F:
34067 dissect_vendor_ie_atheros(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo, field_data->item_tag_length);
34068 break;
34069 case OUI_EXTREME_MESH0x000512:
34070 dissect_vendor_ie_extreme_mesh(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo, field_data->item_tag_length);
34071 break;
34072 case OUI_ARUBA0x000B86:
34073 dissect_vendor_ie_aruba(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34074 break;
34075 case OUI_NINTENDO0x001F32:
34076 dissect_vendor_ie_nintendo(field_data->item_tag, tree, tvb, offset, tag_vs_len);
34077 break;
34078 case OUI_ROUTERBOARD0x000C42:
34079 dissect_vendor_ie_routerboard(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34080 break;
34081 case OUI_MERU0x000CE6:
34082 dissect_vendor_ie_meru(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34083 break;
34084 case OUI_ZEBRA_EXTREME0x00A0F8:
34085 dissect_vendor_ie_extreme(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34086 break;
34087 case OUI_AEROHIVE0x001977:
34088 dissect_vendor_ie_aerohive(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34089 break;
34090 case OUI_MIST0x5C5B35:
34091 dissect_vendor_ie_mist(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34092 break;
34093 case OUI_UBIQUITI0x00156D:
34094 dissect_vendor_ie_ubiquiti(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34095 break;
34096 case OUI_RUCKUS0x001392:
34097 dissect_vendor_ie_ruckus(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34098 break;
34099 case OUI_ALCATEL_LUCENT0xDC0856:
34100 dissect_vendor_ie_alcatel(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34101 break;
34102 case OUI_SGDSN0x6A5C35:
34103 dissect_vendor_ie_sgdsn(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34104 break;
34105 case OUI_FORTINET0x00090F:
34106 dissect_vendor_ie_fortinet(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34107 break;
34108 case OUI_MOJO_ARISTA0x001174:
34109 dissect_vendor_ie_arista(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34110 break;
34111 case OUI_WISUN0x0C5A9E:
34112 dissect_vendor_ie_wisun(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34113 break;
34114 case OUI_APPLE0x0017f2:
34115 dissect_vendor_ie_apple(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34116 break;
34117 default:
34118 proto_tree_add_item(tree, hf_ieee80211_tag_vendor_data, tvb, offset + 1, tag_vs_len - 1, ENC_NA0x00000000);
34119 break;
34120 }
34121
34122 return tvb_captured_length(tvb);
34123}
34124
34125static void
34126dissect_symbol_proprietary_ie_extreme(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
34127 tvbuff_t *tvb, int offset, uint32_t tag_len _U___attribute__((unused)),
34128 packet_info *pinfo _U___attribute__((unused)))
34129{
34130 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_assoc_clients, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
34131 offset += 2;
34132
34133 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_load_kbps, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
34134 offset += 2;
34135
34136 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_load_pps, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
34137 offset += 2;
34138
34139 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_client_tx_power, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
34140 offset += 2;
34141
34142 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_timestamp, tvb, offset, 4, ENC_TIME_SECS0x00000012|ENC_LITTLE_ENDIAN0x80000000);
34143}
34144
34145static int
34146ieee80211_tag_symbol_proprietary_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
34147{
34148 int tag_len = tvb_reported_length(tvb);
34149 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
34150 int offset = 0;
34151 uint32_t tag_vs_len = tag_len;
34152 uint32_t oui;
34153
34154 if (tag_len < 3)
34155 {
34156 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
34157 return tvb_captured_length(tvb);
34158 }
34159
34160 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_symbol_proprietary_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
34161 proto_item_append_text(field_data->item_tag, ": %s", uint_get_manuf_name_if_known(oui));
34162
34163 offset += 3;
34164 tag_vs_len -= 3;
34165
34166 switch (oui) {
34167 /* 802.11 specific vendor ids */
34168 case OUI_ZEBRA_EXTREME0x00A0F8:
34169 dissect_symbol_proprietary_ie_extreme(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34170 break;
34171 default:
34172 proto_tree_add_item(tree, hf_ieee80211_tag_symbol_proprietary_data, tvb, offset, tag_vs_len, ENC_NA0x00000000);
34173 break;
34174 }
34175
34176 return tvb_captured_length(tvb);
34177}
34178
34179#define HE_HTC_HE_SUPPORT0x00000001 0x00000001
34180#define HE_DYNAMIC_FRAGMENTATION_SUPPORT0x00000018 0x00000018
34181#define HE_ALL_ACK_SUPPORT0x00000200 0x00000200
34182#define HE_UMRS_SUPPORT0x00000400 0x00000400
34183#define HE_BSR_SUPPORT0x00000800 0x00000800
34184
34185static const val64_string he_dynamic_fragmentation_support_vals[] = {
34186 { 0, "No support for dynamic fragmentation" },
34187 { 1, "Level 1 dynamic fragmentation support" },
34188 { 2, "Level 2 dynamic fragmentation support" },
34189 { 3, "Level 3 dynamic fragmentation support" },
34190 { 0, NULL((void*)0) }
34191};
34192
34193static const val64_string he_minimum_fragmentation_size_vals[] = {
34194 { 0, "No restriction on minimum payload size" },
34195 { 1, "Minimum payload size of 128 bytes" },
34196 { 2, "Minimum payload size of 256 bytes" },
34197 { 3, "Minimum payload size of 512 bytes" },
34198 { 0, NULL((void*)0) }
34199};
34200
34201static const val64_string he_trigger_mac_padding_dur_vals[] = {
34202 { 0, "0" },
34203 { 1, "8 uS" },
34204 { 2, "16 uS" },
34205 { 3, "Reserved" },
34206 { 0, NULL((void*)0) }
34207};
34208
34209static void
34210max_frag_msdus_base_custom(char *result, uint32_t max_frag_msdus_value)
34211{
34212 if (max_frag_msdus_value == 7)
34213 snprintf(result, ITEM_LABEL_LENGTH240, "No restriction");
34214 else
34215 snprintf(result, ITEM_LABEL_LENGTH240, "%u", 1 << max_frag_msdus_value);
34216}
34217
34218static const val64_string he_link_adaptation_support_vals[] = {
34219 { 0, "No feedback if the STA does not provide HE MFB" },
34220 { 1, "Reserved" },
34221 { 2, "Unsolicited if the STA can receive and provide only unsolicited HE MFB" },
34222 { 3, "Both" },
34223 { 0, NULL((void*)0) }
34224};
34225
34226static const val64_string he_mimo_cntrl_nc_index_vals[] = {
34227 {0x00, "1 Column"},
34228 {0x01, "2 Columns"},
34229 {0x02, "3 Columns"},
34230 {0x03, "4 Columns"},
34231 {0x04, "5 Columns"},
34232 {0x05, "6 Columns"},
34233 {0x06, "7 Columns"},
34234 {0x07, "8 Columns"},
34235 {0, NULL((void*)0)}
34236};
34237
34238static const val64_string he_mimo_cntrl_nr_index_vals[] = {
34239 {0x00, "1 Row"},
34240 {0x01, "2 Rows"},
34241 {0x02, "3 Rows"},
34242 {0x03, "4 Rows"},
34243 {0x04, "5 Rows"},
34244 {0x05, "6 Rows"},
34245 {0x06, "7 Rows"},
34246 {0x07, "8 Rows"},
34247 {0, NULL((void*)0)}
34248};
34249
34250static const val64_string he_mimo_cntrl_grouping_flags[] = {
34251 { 0x00, "Carrier Groups of 4" },
34252 { 0x01, "Carrier Groups of 16" },
34253 { 0, NULL((void*)0) }
34254};
34255
34256static const val64_string he_mimo_cntrl_feedback_vals[] = {
34257 { 0x00, "SU" },
34258 { 0x01, "MU" },
34259 { 0x02, "CQI feedback" },
34260 { 0x03, "Reserved" },
34261 { 0, NULL((void*)0) }
34262};
34263
34264static int * const he_phy_first_byte_headers[] = {
34265 &hf_ieee80211_he_phy_cap_reserved_b0,
34266 NULL((void*)0),
34267};
34268
34269static int * const he_phy_b8_to_b23_headers[] = {
34270 &hf_ieee80211_he_phy_cap_punctured_preamble_rx,
34271 &hf_ieee80211_he_phy_cap_device_class,
34272 &hf_ieee80211_he_phy_cap_ldpc_coding_in_payload,
34273 &hf_ieee80211_he_phy_cap_he_su_ppdu_1x_he_ltf_08us,
34274 &hf_ieee80211_he_phy_cap_midamble_tx_rx_max_nsts,
34275 &hf_ieee80211_he_phy_cap_ndp_with_4x_he_ltf_32us,
34276 &hf_ieee80211_he_phy_cap_stbc_tx_lt_80mhz,
34277 &hf_ieee80211_he_phy_cap_stbc_rx_lt_80mhz,
34278 &hf_ieee80211_he_phy_cap_doppler_tx,
34279 &hf_ieee80211_he_phy_cap_doppler_rx,
34280 &hf_ieee80211_he_phy_cap_full_bw_ul_mu_mimo,
34281 &hf_ieee80211_he_phy_cap_partial_bw_ul_mu_mimo,
34282 NULL((void*)0)
34283};
34284
34285static int * const he_phy_b24_to_b39_headers[] = {
34286 &hf_ieee80211_he_phy_cap_dcm_max_constellation_tx,
34287 &hf_ieee80211_he_phy_cap_dcm_max_nss_tx,
34288 &hf_ieee80211_he_phy_cap_dcm_max_constellation_rx,
34289 &hf_ieee80211_he_phy_cap_dcm_max_nss_rx,
34290 &hf_ieee80211_he_phy_cap_rx_partial_bw_su_20mhz_he_mu_ppdu,
34291 &hf_ieee80211_he_phy_cap_su_beamformer,
34292 &hf_ieee80211_he_phy_cap_su_beamformee,
34293 &hf_ieee80211_he_phy_cap_mu_beamformer,
34294 &hf_ieee80211_he_phy_cap_beamformee_sts_lte_80mhz,
34295 &hf_ieee80211_he_phy_cap_beamformee_sts_gt_80mhz,
34296 NULL((void*)0)
34297};
34298
34299static int * const he_phy_b40_to_b55_headers[] = {
34300 &hf_ieee80211_he_phy_cap_number_of_sounding_dims_lte_80,
34301 &hf_ieee80211_he_phy_cap_number_of_sounding_dims_gt_80,
34302 &hf_ieee80211_he_phy_cap_ng_eq_16_su_fb,
34303 &hf_ieee80211_he_phy_cap_ng_eq_16_mu_fb,
34304 &hf_ieee80211_he_phy_cap_codebook_size_eq_4_2_fb,
34305 &hf_ieee80211_he_phy_cap_codebook_size_eq_7_5_fb,
34306 &hf_ieee80211_he_phy_cap_triggered_su_beamforming_fb,
34307 &hf_ieee80211_he_phy_cap_triggered_mu_beamforming_fb,
34308 &hf_ieee80211_he_phy_cap_triggered_cqi_fb,
34309 &hf_ieee80211_he_phy_cap_partial_bw_extended_range,
34310 &hf_ieee80211_he_phy_cap_partial_bw_dl_mu_mimo,
34311 &hf_ieee80211_he_phy_cap_ppe_threshold_present,
34312 NULL((void*)0)
34313};
34314
34315static int * const he_phy_b56_to_b71_headers[] = {
34316 &hf_ieee80211_he_phy_cap_psr_based_sr_support,
34317 &hf_ieee80211_he_phy_cap_power_boost_factor_ar_support,
34318 &hf_ieee80211_he_phy_cap_he_su_ppdu_etc_gi,
34319 &hf_ieee80211_he_phy_cap_max_nc,
34320 &hf_ieee80211_he_phy_cap_stbc_tx_gt_80_mhz,
34321 &hf_ieee80211_he_phy_cap_stbc_rx_gt_80_mhz,
34322 &hf_ieee80211_he_phy_cap_he_er_su_ppdu_4xxx_gi,
34323 &hf_ieee80211_he_phy_cap_20mhz_in_40mhz_24ghz_band,
34324 &hf_ieee80211_he_phy_cap_20mhz_in_160_80p80_ppdu,
34325 &hf_ieee80211_he_phy_cap_80mgz_in_160_80p80_ppdu,
34326 &hf_ieee80211_he_phy_cap_he_er_su_ppdu_1xxx_gi,
34327 &hf_ieee80211_he_phy_cap_midamble_tx_rx_2x_xxx_ltf,
34328 &hf_ieee80211_he_phy_cap_dcm_max_ru,
34329 NULL((void*)0)
34330};
34331
34332static int * const he_phy_b72_to_b87_headers[] = {
34333 &hf_ieee80211_he_phy_cap_longer_than_16_he_sigb_ofdm_symbol_support,
34334 &hf_ieee80211_he_phy_cap_non_triggered_cqi_feedback,
34335 &hf_ieee80211_he_phy_cap_tx_1024_qam_242_tone_ru_support,
34336 &hf_ieee80211_he_phy_cap_rx_1024_qam_242_tone_ru_support,
34337 &hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_compressed_sigb,
34338 &hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_non_compressed_sigb,
34339 &hf_ieee80211_he_phy_cap_nominal_packet_padding,
34340 &hf_ieee80211_he_phy_cap_he_mu_ppdu_ru_rx_max,
34341 &hf_ieee80211_he_phy_cap_b81_b87_reserved,
34342 NULL((void*)0)
34343};
34344
34345static int * const he_mcs_map_80_rx_headers [] = {
34346 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_1_ss,
34347 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_2_ss,
34348 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_3_ss,
34349 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_4_ss,
34350 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_5_ss,
34351 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_6_ss,
34352 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_7_ss,
34353 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_8_ss,
34354 NULL((void*)0)
34355};
34356
34357static int * const he_mcs_map_80_tx_headers [] = {
34358 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_1_ss,
34359 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_2_ss,
34360 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_3_ss,
34361 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_4_ss,
34362 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_5_ss,
34363 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_6_ss,
34364 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_7_ss,
34365 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_8_ss,
34366 NULL((void*)0)
34367};
34368
34369static int * const he_mcs_map_80p80_rx_headers [] = {
34370 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_1_ss,
34371 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_2_ss,
34372 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_3_ss,
34373 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_4_ss,
34374 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_5_ss,
34375 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_6_ss,
34376 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_7_ss,
34377 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_8_ss,
34378 NULL((void*)0)
34379};
34380
34381static int * const he_mcs_map_80p80_tx_headers [] = {
34382 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_1_ss,
34383 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_2_ss,
34384 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_3_ss,
34385 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_4_ss,
34386 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_5_ss,
34387 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_6_ss,
34388 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_7_ss,
34389 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_8_ss,
34390 NULL((void*)0)
34391};
34392
34393static int * const he_mcs_map_160_rx_headers [] = {
34394 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_1_ss,
34395 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_2_ss,
34396 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_3_ss,
34397 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_4_ss,
34398 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_5_ss,
34399 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_6_ss,
34400 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_7_ss,
34401 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_8_ss,
34402 NULL((void*)0)
34403};
34404
34405static int * const he_mcs_map_160_tx_headers [] = {
34406 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_1_ss,
34407 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_2_ss,
34408 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_3_ss,
34409 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_4_ss,
34410 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_5_ss,
34411 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_6_ss,
34412 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_7_ss,
34413 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_8_ss,
34414 NULL((void*)0)
34415};
34416
34417static const value_string ru_alloc_vals[] = {
34418 { 0, "242" },
34419 { 1, "484" },
34420 { 2, "996" },
34421 { 3, "2x996" },
34422 { 0, NULL((void*)0) }
34423};
34424
34425static const value_string constellation_vals[] = {
34426 { 0, "BPSK" },
34427 { 1, "QPSK" },
34428 { 2, "16-QAM" },
34429 { 3, "64-QAM" },
34430 { 4, "256-QAM" },
34431 { 5, "1024-QAM" },
34432 { 6, "Reserved" },
34433 { 7, "None" },
34434 { 0, NULL((void*)0) }
34435};
34436
34437#define HE_CHANNEL_WIDTH_SET_B20x04 0x04
34438#define HE_CHANNEL_WIDTH_SET_B30x08 0x08
34439
34440static void
34441dissect_he_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34442 int offset, int len)
34443{
34444 int *he_mac_headers[] = {
34445 &hf_ieee80211_he_htc_he_support, /* 0 */
34446 &hf_ieee80211_he_twt_requester_support, /* 1 */
34447 &hf_ieee80211_he_twt_responder_support, /* 2 */
34448 &hf_ieee80211_he_dynamic_fragmentation_support, /* 3 */
34449 &hf_ieee80211_he_max_number_fragmented_msdus, /* 4 */
34450 &hf_ieee80211_he_min_fragment_size, /* 5 */
34451 &hf_ieee80211_he_trigger_frame_mac_padding_dur, /* 6 */
34452 &hf_ieee80211_he_multi_tid_aggregation_rx_support, /* 7 */
34453 &hf_ieee80211_he_he_link_adaptation_support, /* 8 */
34454 &hf_ieee80211_he_all_ack_support, /* 9 */
34455 &hf_ieee80211_he_trs_support, /* 10 */
34456 &hf_ieee80211_he_bsr_support, /* 11 */
34457 &hf_ieee80211_he_broadcast_twt_support, /* 12 */
34458 &hf_ieee80211_he_32_bit_ba_bitmap_support, /* 13 */
34459 &hf_ieee80211_he_mu_cascading_support, /* 14 */
34460 &hf_ieee80211_he_ack_enabled_aggregation_support, /* 15 */
34461 &hf_ieee80211_he_reserved_b24, /* 16 */
34462 &hf_ieee80211_he_om_control_support, /* 17 */
34463 &hf_ieee80211_he_ofdma_ra_support, /* 18 */
34464 &hf_ieee80211_he_max_a_mpdu_length_exponent_ext, /* 19 */
34465 &hf_ieee80211_he_a_msdu_fragmentation_support, /* 20 */
34466 &hf_ieee80211_he_flexible_twt_schedule_support, /* 21 */
34467 &hf_ieee80211_he_rx_control_frame_to_multibss, /* 22 */
34468 &hf_ieee80211_he_bsrp_bqrp_a_mpdu_aggregation, /* 23 */
34469 &hf_ieee80211_he_qtp_support, /* 24 */
34470 &hf_ieee80211_he_bqr_support, /* 25 */
34471 &hf_ieee80211_he_psr_responder, /* 26 */
34472 &hf_ieee80211_he_ndp_feedback_report_support, /* 27 */
34473 &hf_ieee80211_he_ops_support, /* 28 */
34474 &hf_ieee80211_he_a_msdu_in_a_mpdu_support, /* 29 */
34475 &hf_ieee80211_he_multi_tid_aggregation_tx_support, /* 30 */
34476 &hf_ieee80211_he_subchannel_selective_trans_support, /* 31 */
34477 &hf_ieee80211_he_2_996_tone_ru_support, /* 32 */
34478 &hf_ieee80211_he_om_control_ul_mu_data_disable_rx_support, /* 33 */
34479 &hf_ieee80211_he_dynamic_sm_power_save, /* 34 */
34480 &hf_ieee80211_he_punctured_sounding_support, /* 35 */
34481 &hf_ieee80211_he_ht_and_vht_trigger_frame_rx_support, /* 36 */
34482 NULL((void*)0)
34483 };
34484 int * he_phy_channel_width_set_headers[] = {
34485 &hf_ieee80211_he_40mhz_channel_2_4ghz,
34486 &hf_ieee80211_he_40_and_80_mhz_5ghz,
34487 &hf_ieee80211_he_160_mhz_5ghz,
34488 &hf_ieee80211_he_160_80_plus_80_mhz_5ghz,
34489 &hf_ieee80211_he_242_tone_rus_in_2_4ghz,
34490 &hf_ieee80211_he_242_tone_rus_in_5ghz,
34491 &hf_ieee80211_he_chan_width_reserved,
34492 NULL((void*)0)
34493 };
34494
34495 uint64_t he_mac_caps = tvb_get_letoh40(tvb, offset);
34496 uint8_t phy_channel_width_set = 0;
34497 proto_tree *phy_cap_tree = NULL((void*)0);
34498 unsigned he_mcs_and_nss_len = 4;
34499 proto_tree *sup_he_mcs_and_nss_tree = NULL((void*)0);
34500 proto_tree *rx_tx_he_mcs_map_80 = NULL((void*)0);
34501 proto_tree *rx_tx_he_mcs_map_160 = NULL((void*)0);
34502 proto_tree *rx_tx_he_mcs_map_80_80 = NULL((void*)0);
34503
34504 /* Is this 2.4GHz or 5GHz? */
34505 if (pinfo->pseudo_header->ieee_802_11.has_frequency) {
34506 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)
) {
34507 he_phy_channel_width_set_headers[1] = &hf_ieee80211_he_24ghz_b1_reserved;
34508 he_phy_channel_width_set_headers[2] = &hf_ieee80211_he_24ghz_b2_reserved;
34509 he_phy_channel_width_set_headers[3] = &hf_ieee80211_he_24ghz_b3_reserved;
34510 he_phy_channel_width_set_headers[5] = &hf_ieee80211_he_24ghz_b5_reserved;
34511 } else {
34512 he_phy_channel_width_set_headers[0] = &hf_ieee80211_he_5ghz_b0_reserved;
34513 he_phy_channel_width_set_headers[4] = &hf_ieee80211_he_5ghz_b4_reserved;
34514 }
34515 }
34516
34517 /* Change some header fields depending on HE_HTC_HE_SUPPORT and FRAGMENTATION */
34518 if (!(he_mac_caps & HE_HTC_HE_SUPPORT0x00000001)) {
34519 he_mac_headers[8] = &hf_ieee80211_he_reserved_bits_15_16;
34520 he_mac_headers[10] = &hf_ieee80211_he_reserved_bit_18;
34521 he_mac_headers[11] = &hf_ieee80211_he_reserved_bit_19;
34522 he_mac_headers[17] = &hf_ieee80211_he_reserved_bit_25;
34523 he_mac_headers[25] = &hf_ieee80211_he_reserved_bit_34;
34524 }
34525 if (!(he_mac_caps & HE_DYNAMIC_FRAGMENTATION_SUPPORT0x00000018)) {
34526 he_mac_headers[4] = &hf_ieee80211_he_reserved_bits_5_7;
34527 he_mac_headers[5] = &hf_ieee80211_he_reserved_bits_8_9;
34528 he_mac_headers[20] = &hf_ieee80211_he_reserved_bit_29;
34529 }
34530
34531 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_he_mac_capabilities,
34532 ett_he_mac_capabilities, he_mac_headers,
34533 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34534 offset += 6;
34535
34536 /* Get and isolate the phy channel width set */
34537 phy_channel_width_set = tvb_get_uint8(tvb, offset) >> 1;
34538 /* Save this info so we can refer to it later. It might need to be global */
34539 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, HE_CHANNEL_WIDTH_KEY,
34540 GINT_TO_POINTER(phy_channel_width_set | (1<<31))((gpointer) (glong) (phy_channel_width_set | (1<<31))));
34541
34542 phy_cap_tree = proto_tree_add_subtree(tree, tvb, offset, 11, ett_he_phy_capabilities,
34543 NULL((void*)0),
34544 "HE PHY Capabilities Information");
34545
34546 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34547 hf_ieee80211_he_phy_reserved_b0, ett_he_phy_cap_first_byte,
34548 he_phy_first_byte_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
34549 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34550 hf_ieee80211_he_phy_chan_width_set, ett_he_phy_cap_chan_width_set,
34551 he_phy_channel_width_set_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
34552 offset++;
34553 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34554 hf_ieee80211_he_phy_b8_to_b23, ett_he_phy_cap_b8_to_b23,
34555 he_phy_b8_to_b23_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34556 offset += 2;
34557 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34558 hf_ieee80211_he_phy_b24_to_b39, ett_he_phy_cap_b24_to_b39,
34559 he_phy_b24_to_b39_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34560 offset += 2;
34561 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34562 hf_ieee80211_he_phy_b40_to_b55, ett_he_phy_cap_b40_to_b55,
34563 he_phy_b40_to_b55_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34564 offset += 2;
34565 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34566 hf_ieee80211_he_phy_b56_to_b71, ett_he_phy_cap_b56_to_b71,
34567 he_phy_b56_to_b71_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34568 offset += 2;
34569 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34570 hf_ieee80211_he_phy_b72_to_b87, ett_he_phy_cap_b72_to_b87,
34571 he_phy_b72_to_b87_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34572 offset += 2;
34573
34574 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34575 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34576 "Insufficient bytes for Phy Capabilities "
34577 "Rx and Tx Maps 80MHz!");
34578 return;
34579 }
34580
34581 /* Need the length first */
34582 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B20x04)
34583 he_mcs_and_nss_len += 4;
34584
34585 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B30x08)
34586 he_mcs_and_nss_len += 4;
34587
34588 sup_he_mcs_and_nss_tree = proto_tree_add_subtree(tree, tvb, offset,
34589 he_mcs_and_nss_len, ett_he_mcs_and_nss_set, NULL((void*)0),
34590 "Supported HE-MCS and NSS Set");
34591 rx_tx_he_mcs_map_80 = proto_tree_add_subtree(sup_he_mcs_and_nss_tree, tvb,
34592 offset, 4, ett_he_rx_tx_he_mcs_map_lte_80, NULL((void*)0),
34593 "Rx and Tx MCS Maps <= 80 MHz");
34594 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80, tvb, offset,
34595 hf_ieee80211_he_rx_he_mcs_map_lte_80,
34596 ett_he_rx_mcs_map_lte_80, he_mcs_map_80_rx_headers,
34597 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34598 offset += 2;
34599
34600 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34601 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34602 "Insufficient bytes for Phy Capabilities "
34603 "Tx Maps 80MHz!");
34604 return;
34605 }
34606
34607 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80, tvb, offset,
34608 hf_ieee80211_he_tx_he_mcs_map_lte_80,
34609 ett_he_tx_mcs_map_lte_80, he_mcs_map_80_tx_headers,
34610 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34611 offset += 2;
34612
34613 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B20x04) {
34614 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34615 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34616 "Insufficient bytes for Phy Capabilities "
34617 "Rx and Tx MCS Maps 160MHz!");
34618 return;
34619 }
34620 rx_tx_he_mcs_map_160 = proto_tree_add_subtree(sup_he_mcs_and_nss_tree,
34621 tvb, offset, 4, ett_he_rx_tx_he_mcs_map_160, NULL((void*)0),
34622 "Rx and Tx MCS Maps 160 MHz");
34623 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_160, tvb, offset,
34624 hf_ieee80211_he_rx_he_mcs_map_160,
34625 ett_he_rx_mcs_map_160, he_mcs_map_160_rx_headers,
34626 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34627 offset += 2;
34628
34629 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34630 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34631 "Insufficient bytes for Phy Capabilities "
34632 "Tx MCS Maps 160MHz!");
34633 return;
34634 }
34635
34636 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_160, tvb, offset,
34637 hf_ieee80211_he_tx_he_mcs_map_160,
34638 ett_he_tx_mcs_map_160, he_mcs_map_160_tx_headers,
34639 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34640 offset += 2;
34641 }
34642
34643 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B30x08) {
34644 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34645 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34646 "Insufficient bytes for Phy Capabilities "
34647 "Rx and Tx MCS Maps 80+80 MHz!");
34648 return;
34649 }
34650
34651 rx_tx_he_mcs_map_80_80 = proto_tree_add_subtree(sup_he_mcs_and_nss_tree,
34652 tvb, offset, 4, ett_he_rx_tx_he_mcs_map_80_80, NULL((void*)0),
34653 "Rx and Tx MCS Maps 80+80 MHz");
34654 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80_80, tvb, offset,
34655 hf_ieee80211_he_rx_he_mcs_map_80_80,
34656 ett_he_rx_mcs_map_80_80, he_mcs_map_80p80_rx_headers,
34657 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34658 offset += 2;
34659 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80_80, tvb, offset,
34660 hf_ieee80211_he_tx_he_mcs_map_80_80,
34661 ett_he_tx_mcs_map_80_80, he_mcs_map_80p80_tx_headers,
34662 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34663 offset += 2;
34664 }
34665
34666 if (offset < len) {
34667 uint8_t ppe_thresholds_field = tvb_get_uint8(tvb, offset);
34668 uint8_t nss_count = ppe_thresholds_field & 0x07, nss_index = 0;
34669 uint8_t ru_index_bitmask = (ppe_thresholds_field >> 3) & 0x0F;
34670 proto_tree *ppe_tree = NULL((void*)0);
34671 int i = 0;
34672 int bit_offset = 7; /* How many bits we are into the bytes */
34673
34674 ppe_tree = proto_tree_add_subtree(tree, tvb, offset, len - offset + 1,
34675 ett_he_ppe_threshold, NULL((void*)0),
34676 "PPE Thresholds");
34677 proto_tree_add_item(ppe_tree, hf_ieee80211_he_ppe_thresholds_nss, tvb, offset,
34678 1, ENC_NA0x00000000);
34679 proto_tree_add_item(ppe_tree, hf_ieee80211_he_ppe_thresholds_ru_index_bitmask, tvb,
34680 offset, 1, ENC_NA0x00000000);
34681
34682 /*
34683 * Now, for each of the nss values, add a sub-tree with its thresholds.
34684 * The actual count is one more than the number in the first three bits.
34685 */
34686 while (nss_index < nss_count + 1) {
34687 int start_offset = 0;
34688 proto_tree *nss_tree = NULL((void*)0);
34689 proto_item *nssti = NULL((void*)0);
34690 uint8_t l_ru_bitmask = ru_index_bitmask;
34691
34692 nss_tree = proto_tree_add_subtree_format(ppe_tree, tvb, offset, -1,
34693 ett_he_ppe_nss, &nssti, "NSS %d", nss_index);
34694 start_offset = offset;
34695
34696 for (i = 0; i < 4; i++) {
34697 if (l_ru_bitmask & 0x01) {
34698 int bits_avail = 8 - bit_offset, bits_needed = 6 - bits_avail;
34699 uint8_t the_bits = 0;
34700 int ru_start_offset = offset;
34701 proto_tree *ru_alloc_tree = NULL((void*)0);
34702 proto_item *rualti = NULL((void*)0);
34703
34704 ru_alloc_tree = proto_tree_add_subtree_format(nss_tree, tvb, offset,
34705 -1, ett_he_ppe_ru_alloc, &rualti,
34706 "RU allocation: %s",
34707 val_to_str_const(i, ru_alloc_vals, "Unk"));
34708
34709 /*
34710 * Assemble the bits we require ... we need 6, or 2x3
34711 */
34712 if (bits_avail >= 6) { /* We can use the current byte */
34713 the_bits = (tvb_get_uint8(tvb, offset) >> bit_offset) & 0x3F;
34714 } else { /* We need two adjacent bytes */
34715 the_bits = (tvb_get_uint8(tvb, offset) >> bit_offset);
34716 offset++;
34717 the_bits = the_bits |
34718 ((tvb_get_uint8(tvb, offset) &
34719 ((1 << bits_needed) - 1)) << bits_avail);
34720 }
34721 /*
34722 * Now we have two three bit fields, use them.
34723 */
34724 proto_tree_add_uint(ru_alloc_tree, hf_ieee80211_he_ppe_ppet16, tvb, ru_start_offset,
34725 offset - ru_start_offset + 1, the_bits & 0x07);
34726 proto_tree_add_uint(ru_alloc_tree, hf_ieee80211_he_ppe_ppet8, tvb, ru_start_offset,
34727 offset - ru_start_offset + 1, the_bits >> 3);
34728
34729 bit_offset = (bit_offset + 6) % 8;
34730 proto_item_set_len(rualti, offset - ru_start_offset + 1);
34731 }
34732 l_ru_bitmask = l_ru_bitmask >> 1;
34733 }
34734
34735
34736 proto_item_set_len(nssti, offset - start_offset);
34737 nss_index++;
34738 }
34739 }
34740
34741 /* Add an Expert Info about extra bytes ... */
34742
34743}
34744
34745static int * const he_operation_headers[] = {
34746 &hf_ieee80211_he_operation_default_pe_duration,
34747 &hf_ieee80211_he_operation_twt_required,
34748 &hf_ieee80211_he_operation_txop_duration_rts_threshold,
34749 &hf_ieee80211_he_operation_vht_operation_information_present,
34750 &hf_ieee80211_he_operation_co_hosted_bss,
34751 &hf_ieee80211_he_operation_er_su_disable,
34752 &hf_ieee80211_he_operation_6ghz_operation_information_present,
34753 &hf_ieee80211_he_operation_reserved_b16_b23,
34754 NULL((void*)0)
34755};
34756
34757static int * const he_bss_color_info_headers[] = {
34758 &hf_ieee80211_he_bss_color_info_bss_color,
34759 &hf_ieee80211_he_bss_color_partial_bss_color,
34760 &hf_ieee80211_he_bss_color_bss_color_disabled,
34761 NULL((void*)0)
34762};
34763
34764static int * const he_operation_6ghz_control[] = {
34765 &hf_ieee80211_he_operation_6ghz_control_channel_width,
34766 &hf_ieee80211_he_operation_6ghz_control_duplicate_beacon,
34767 &hf_ieee80211_he_operation_6ghz_control_regulatory_info,
34768 &hf_ieee80211_he_operation_6ghz_control_reserved,
34769 NULL((void*)0)
34770};
34771
34772static const value_string he_mcs_map_vals[] = {
34773 { 0, "Support for HE-MCS 0-7" },
34774 { 1, "Support for HE-MCS 0-9" },
34775 { 2, "Support for HE-MCS 0-11" },
34776 { 3, "Not supported for HE PPDUs" },
34777 { 0, NULL((void*)0) }
34778};
34779
34780static int * const he_basic_he_mcs_header[] = {
34781 &hf_ieee80211_he_oper_max_he_mcs_for_1_ss,
34782 &hf_ieee80211_he_oper_max_he_mcs_for_2_ss,
34783 &hf_ieee80211_he_oper_max_he_mcs_for_3_ss,
34784 &hf_ieee80211_he_oper_max_he_mcs_for_4_ss,
34785 &hf_ieee80211_he_oper_max_he_mcs_for_5_ss,
34786 &hf_ieee80211_he_oper_max_he_mcs_for_6_ss,
34787 &hf_ieee80211_he_oper_max_he_mcs_for_7_ss,
34788 &hf_ieee80211_he_oper_max_he_mcs_for_8_ss,
34789 NULL((void*)0)
34790};
34791
34792#define VHT_OPERATION_INFORMATION_PRESENT0x004000 0x004000
34793#define CO_HOSTED_BSS0x008000 0x008000
34794#define SIXGHZ_OPERATION_INFORMATION_PRESENT0x020000 0x020000
34795
34796static const value_string channel_width_vals[] = {
34797 { 0, "20 MHz or 40 MHz BSS Bandwidth" },
34798 { 1, "80 MHz, 160 MHz or 80+80 MHz BSS Bandwidth" },
34799 { 2, "160 MHz BSS Bandwidth (deprecated)" },
34800 { 3, "Non-contiguous 80+80 MHz BSS Bandwidth (deprecated)" },
34801 { 0, NULL((void*)0) }
34802};
34803
34804static void
34805dissect_he_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34806 int offset, int len _U___attribute__((unused)))
34807{
34808 uint32_t op_params = tvb_get_letoh24(tvb, offset);
34809
34810 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34811 hf_ieee80211_he_operation_parameter, ett_he_operation_params,
34812 he_operation_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34813 offset += 3;
34814
34815 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34816 hf_ieee80211_he_bss_color_information, ett_he_bss_color_information,
34817 he_bss_color_info_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34818 offset += 1;
34819
34820 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34821 hf_ieee80211_he_operation_basic_mcs, ett_he_oper_basic_mcs,
34822 he_basic_he_mcs_header, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34823 offset += 2;
34824
34825 if (op_params & VHT_OPERATION_INFORMATION_PRESENT0x004000) {
34826 proto_tree *vht_op_info = NULL((void*)0);
34827
34828 vht_op_info = proto_tree_add_subtree(tree, tvb, offset, 3,
34829 ett_he_operation_vht_op_info, NULL((void*)0),
34830 "VHT Operation Information");
34831 proto_tree_add_item(vht_op_info, hf_ieee80211_he_operation_channel_width, tvb,
34832 offset, 1, ENC_NA0x00000000);
34833 offset++;
34834
34835 proto_tree_add_item(vht_op_info, hf_ieee80211_he_operation_channel_center_freq_0,
34836 tvb, offset, 1, ENC_NA0x00000000);
34837 offset++;
34838
34839 proto_tree_add_item(vht_op_info, hf_ieee80211_he_operation_channel_center_freq_1,
34840 tvb, offset, 1, ENC_NA0x00000000);
34841 offset++;
34842 }
34843
34844 if (op_params & CO_HOSTED_BSS0x008000) {
34845 proto_tree_add_item(tree, hf_ieee80211_he_operation_max_co_hosted_bssid_indicator,
34846 tvb, offset, 1, ENC_NA0x00000000);
34847 offset++;
34848 }
34849
34850 if (op_params & SIXGHZ_OPERATION_INFORMATION_PRESENT0x020000) {
34851 proto_tree *sixghz_tree = NULL((void*)0);
34852
34853 sixghz_tree = proto_tree_add_subtree(tree, tvb, offset, 5,
34854 ett_he_operation_6ghz, NULL((void*)0),
34855 "6 GHz Operation Information");
34856 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_primary_channel, tvb,
34857 offset, 1, ENC_NA0x00000000);
34858 offset++;
34859
34860 proto_tree_add_bitmask_with_flags(sixghz_tree, tvb, offset,
34861 hf_ieee80211_he_operation_6ghz_control, ett_he_operation_6ghz_control,
34862 he_operation_6ghz_control, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34863 offset++;
34864
34865 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_channel_center_freq_0,
34866 tvb, offset, 1, ENC_NA0x00000000);
34867 offset++;
34868
34869 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_channel_center_freq_1,
34870 tvb, offset, 1, ENC_NA0x00000000);
34871 offset++;
34872
34873 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_minimum_rate,
34874 tvb, offset, 1, ENC_NA0x00000000);
34875 offset++;
34876 }
34877}
34878
34879static int * const uora_headers[] = {
34880 &hf_ieee80211_he_uora_eocwmin,
34881 &hf_ieee80211_he_uora_owcwmax,
34882 &hf_ieee80211_he_uora_reserved,
34883 NULL((void*)0)
34884};
34885
34886static void
34887dissect_uora_parameter_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34888 int offset)
34889{
34890 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34891 hf_ieee80211_he_uora_field, ett_he_uora_tree, uora_headers,
34892 ENC_NA0x00000000, BMT_NO_APPEND0x01);
34893 offset++;
34894}
34895
34896static int * const muac_aci_aifsn_headers[] = {
34897 &hf_ieee80211_he_muac_aifsn,
34898 &hf_ieee80211_he_muac_acm,
34899 &hf_ieee80211_he_muac_aci,
34900 &hf_ieee80211_he_muac_reserved,
34901 NULL((void*)0)
34902};
34903
34904static int
34905dissect_muac_param_record(tvbuff_t *tvb, proto_tree *tree, int offset)
34906{
34907 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34908 hf_ieee80211_he_muac_aci_aifsn, ett_he_aic_aifsn,
34909 muac_aci_aifsn_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
34910 offset++;
34911
34912 proto_tree_add_item(tree, hf_ieee80211_he_muac_ecwmin_ecwmax, tvb, offset, 1, ENC_NA0x00000000);
34913 offset++;
34914
34915 proto_tree_add_item(tree, hf_ieee80211_he_mu_edca_timer, tvb, offset, 1, ENC_NA0x00000000);
34916 offset++;
34917
34918 return offset;
34919}
34920
34921static int
34922dissect_mu_edca_parameter_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34923 int offset, int len _U___attribute__((unused)))
34924{
34925 proto_tree *param_tree = NULL((void*)0);
34926
34927 /* Is this from an AP or an STA? */
34928 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
34929 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
34930 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34931 offset++;
34932
34933 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
34934 NULL((void*)0), "MUAC_BE Parameter Record");
34935 offset = dissect_muac_param_record(tvb, param_tree, offset);
34936
34937 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
34938 NULL((void*)0), "MUAC_BK Parameter Record");
34939 offset = dissect_muac_param_record(tvb, param_tree, offset);
34940
34941 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
34942 NULL((void*)0), "MUAC_VI Parameter Record");
34943 offset = dissect_muac_param_record(tvb, param_tree, offset);
34944
34945 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
34946 NULL((void*)0), "MUAC_VO Parameter Record");
34947 offset = dissect_muac_param_record(tvb, param_tree, offset);
34948
34949 return offset;
34950}
34951
34952#define SRP_DISALLOWED0x01 0x01
34953#define NON_SRG_OBSS_PD_SR_DISALLOWED0x02 0x02
34954#define NON_SRG_OFFSET_PRESENT0x04 0x04
34955#define SRG_INFORMATION_PRESENT0x08 0x08
34956#define HESIGA_SPATIAL_REUSE_VAL15_ALLOWED0x10 0x10
34957
34958static int * const sr_control_field_headers[] = {
34959 &hf_ieee80211_he_srp_disallowed,
34960 &hf_ieee80211_he_non_srg_obss_pd_sr_disallowed,
34961 &hf_ieee80211_he_non_srg_offset_present,
34962 &hf_ieee80211_he_srg_information_present,
34963 &hf_ieee80211_he_hesiga_spatial_reuse_value15_allowed,
34964 &hf_ieee80211_he_sr_control_reserved,
34965 NULL((void*)0)
34966};
34967
34968static int
34969dissect_spatial_reuse_parameter_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34970 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34971{
34972 uint8_t sr_control = tvb_get_uint8(tvb, offset);
34973
34974 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_he_spatial_reuse_sr_control,
34975 ett_he_spatial_reuse_control,
34976 sr_control_field_headers,
34977 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34978 offset++;
34979
34980 if (sr_control & NON_SRG_OFFSET_PRESENT0x04) {
34981 proto_tree_add_item(tree, hf_ieee80211_he_spatial_non_srg_obss_pd_max_offset,
34982 tvb, offset, 1, ENC_NA0x00000000);
34983 offset++;
34984 }
34985
34986 if (sr_control & SRG_INFORMATION_PRESENT0x08) {
34987 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_obss_pd_min_offset, tvb,
34988 offset, 1, ENC_NA0x00000000);
34989 offset++;
34990 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_obss_pd_max_offset, tvb,
34991 offset, 1, ENC_NA0x00000000);
34992 offset++;
34993 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_bss_color_bitmap, tvb,
34994 offset, 8, ENC_NA0x00000000);
34995 offset += 8;
34996 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_partial_bssid_bitmap,
34997 tvb, offset, 8, ENC_NA0x00000000);
34998 offset += 8;
34999 }
35000
35001 return offset;
35002}
35003
35004static void
35005dissect_ndp_feedback_report_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35006 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35007{
35008 proto_tree_add_item(tree, hf_ieee80211_he_resource_request_buffer_thresh, tvb, offset,
35009 1, ENC_NA0x00000000);
35010}
35011
35012static int * const bss_new_color_headers[] = {
35013 &hf_ieee80211_he_new_bss_color_info_color,
35014 &hf_ieee80211_he_new_bss_color_info_reserved,
35015 NULL((void*)0)
35016};
35017
35018static void
35019dissect_bss_color_change(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35020 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35021{
35022 proto_tree_add_item(tree, hf_ieee80211_he_bss_color_change_switch_countdown, tvb, offset,
35023 1, ENC_NA0x00000000);
35024 offset++;
35025
35026 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35027 hf_ieee80211_he_bss_color_change_new_color_info,
35028 ett_he_bss_new_color_info, bss_new_color_headers,
35029 ENC_NA0x00000000, BMT_NO_APPEND0x01);
35030}
35031
35032static int * const ess_info_field_headers[] = {
35033 &hf_ieee80211_he_ess_report_planned_ess,
35034 &hf_ieee80211_he_ess_report_edge_of_ess,
35035 NULL((void*)0)
35036};
35037
35038static void
35039dissect_ess_report(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35040 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35041{
35042 uint8_t bss_trans_thresh = tvb_get_uint8(tvb, offset) >> 2;
35043
35044
35045 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_he_ess_report_info_field,
35046 ett_he_ess_report_info_field,
35047 ess_info_field_headers,
35048 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35049 if (bss_trans_thresh == 63)
35050 proto_tree_add_int_format(tree, hf_ieee80211_he_ess_report_recommend_transition_thresh,
35051 tvb, offset, 1, bss_trans_thresh,
35052 "Recommended BSS Transition Threshold: %d (No recommendation)",
35053 bss_trans_thresh);
35054 else
35055 proto_tree_add_int_format(tree, hf_ieee80211_he_ess_report_recommend_transition_thresh, tvb,
35056 offset, 1, bss_trans_thresh,
35057 "Recommended BSS Transition Threshold: %d (%ddBm)",
35058 bss_trans_thresh, -100 + bss_trans_thresh);
35059}
35060
35061static void
35062dissect_ops(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35063 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35064{
35065 proto_tree_add_item(tree, hf_ieee80211_he_ops_duration, tvb, offset, 1,
35066 ENC_NA0x00000000);
35067}
35068
35069static void
35070dissect_max_channel_switch_time(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35071 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35072{
35073 proto_tree_add_item(tree, hf_ieee80211_max_channel_switch_time, tvb, offset,
35074 3, ENC_LITTLE_ENDIAN0x80000000);
35075}
35076
35077static void
35078dissect_oci(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35079 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35080{
35081 proto_tree_add_item(tree, hf_ieee80211_oci_operating_class, tvb, offset,
35082 1, ENC_NA0x00000000);
35083 offset += 1;
35084
35085 proto_tree_add_item(tree, hf_ieee80211_oci_primary_channel_number, tvb,
35086 offset, 1, ENC_NA0x00000000);
35087 offset += 1;
35088
35089 proto_tree_add_item(tree, hf_ieee80211_oci_frequency_segment_1, tvb,
35090 offset, 1, ENC_NA0x00000000);
35091 offset += 1;
35092
35093 /* Does it have the OCT fields? */
35094 if (len > 3) {
35095 if (len != 6) {
35096 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
35097 "OCI element with OCT field length must be 6 bytes");
35098 }
35099
35100 proto_tree_add_item(tree, hf_ieee80211_oci_oct_operating_class, tvb,
35101 offset, 1, ENC_NA0x00000000);
35102 offset += 1;
35103
35104 proto_tree_add_item(tree, hf_ieee80211_oci_oct_primary_channel_number, tvb,
35105 offset, 1, ENC_NA0x00000000);
35106 offset += 1;
35107
35108 proto_tree_add_item(tree, hf_ieee80211_oci_oct_frequency_segment_1, tvb,
35109 offset, 1, ENC_NA0x00000000);
35110 }
35111}
35112
35113static void
35114dissect_multiple_bssid_configuration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35115 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35116{
35117
35118 proto_tree_add_item(tree, hf_ieee80211_multiple_bssid_configuration_bssid_count, tvb, offset, 1, ENC_NA0x00000000);
35119 offset += 1;
35120
35121 proto_tree_add_item(tree, hf_ieee80211_multiple_bssid_configuration_full_set_rx_periodicity, tvb, offset, 1, ENC_NA0x00000000);
35122 /*offset += 1;*/
35123
35124}
35125
35126static void
35127dissect_non_inheritance(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35128 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35129{
35130 proto_tree *element_id_list = NULL((void*)0);
35131 proto_tree *element_id_ext_list = NULL((void*)0);
35132
35133 uint8_t element_id_list_length = tvb_get_uint8(tvb, offset);
35134
35135 element_id_list = proto_tree_add_subtree(tree, tvb, offset, element_id_list_length + 1,
35136 ett_non_inheritance_element_id_list,
35137 NULL((void*)0), "Element ID List");
35138
35139 proto_tree_add_item(element_id_list, hf_ieee80211_non_inheritance_element_id_list_length,
35140 tvb, offset, 1, ENC_NA0x00000000);
35141 offset += 1;
35142
35143 while (element_id_list_length > 0) {
35144 proto_tree_add_item(element_id_list, hf_ieee80211_non_inheritance_element_id_list_element_id,
35145 tvb, offset, 1, ENC_NA0x00000000);
35146 element_id_list_length--;
35147 offset++;
35148 }
35149
35150 uint8_t element_id_ext_list_length = tvb_get_uint8(tvb, offset);
35151
35152 element_id_ext_list = proto_tree_add_subtree(tree, tvb, offset, element_id_ext_list_length + 1,
35153 ett_non_inheritance_element_id_ext_list,
35154 NULL((void*)0), "Element ID Extension List");
35155
35156 proto_tree_add_item(element_id_ext_list, hf_ieee80211_non_inheritance_element_id_ext_list_length,
35157 tvb, offset, 1, ENC_NA0x00000000);
35158 offset += 1;
35159
35160 while (element_id_ext_list_length > 0) {
35161 proto_tree_add_item(element_id_ext_list, hf_ieee80211_non_inheritance_element_id_ext_list_element_id_ext,
35162 tvb, offset, 1, ENC_NA0x00000000);
35163 element_id_ext_list_length--;
35164 offset++;
35165 }
35166}
35167
35168static void
35169dissect_known_bssid(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35170 proto_tree *tree, int offset, int len)
35171{
35172
35173 proto_tree_add_item(tree, hf_ieee80211_known_bssid_bitmap, tvb, offset, len, ENC_NA0x00000000);
35174
35175}
35176
35177static void
35178dissect_short_ssid(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35179 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35180{
35181
35182 while(len > 0){
35183
35184 proto_tree_add_item(tree, hf_ieee80211_short_ssid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
35185 offset += 4;
35186 len -=4;
35187 }
35188}
35189
35190static int
35191dissect_password_identifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35192 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35193{
35194 proto_tree_add_item(tree, hf_ieee80211_sae_password_identifier, tvb, offset,
35195 len, ENC_ASCII0x00000000);
35196 offset += len;
35197
35198 return offset;
35199}
35200
35201#define SCS_ADD0 0
35202#define SCS_REMOVE1 1
35203#define SCS_CHANGE2 2
35204
35205static const range_string scs_request_type_rvals[] = {
35206 { SCS_ADD0, SCS_ADD0, "Add" },
35207 { SCS_REMOVE1, SCS_REMOVE1, "Remove" },
35208 { SCS_CHANGE2, SCS_CHANGE2, "Change" },
35209 { 3, 255, "Reserved" },
35210 { 0, 0, NULL((void*)0) }
35211};
35212
35213static int * const user_prio_bitmap_headers[] = {
35214 &hf_ieee80211_user_prio_bitmap_bit0,
35215 &hf_ieee80211_user_prio_bitmap_bit1,
35216 &hf_ieee80211_user_prio_bitmap_bit2,
35217 &hf_ieee80211_user_prio_bitmap_bit3,
35218 &hf_ieee80211_user_prio_bitmap_bit4,
35219 &hf_ieee80211_user_prio_bitmap_bit5,
35220 &hf_ieee80211_user_prio_bitmap_bit6,
35221 &hf_ieee80211_user_prio_bitmap_bit7,
35222 NULL((void*)0)
35223};
35224
35225static void
35226dissect_mscs_descriptor_element(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35227 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35228{
35229 uint8_t request_type = tvb_get_uint8(tvb, offset);
35230
35231 proto_tree_add_item(tree, hf_ieee80211_mscs_descriptor_type, tvb, offset, 1,
35232 ENC_NA0x00000000);
35233 offset += 1;
35234
35235 if (request_type == SCS_REMOVE1) {
35236 proto_tree_add_item(tree, hf_ieee80211_mscs_user_prio_control_reserved,
35237 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35238 offset += 2;
35239 } else {
35240 proto_tree *user_prio_tree = NULL((void*)0);
35241
35242 user_prio_tree = proto_tree_add_subtree(tree, tvb, offset, 2,
35243 ett_mscs_user_prio, NULL((void*)0),
35244 "User Priority Control");
35245 proto_tree_add_bitmask_with_flags(user_prio_tree, tvb, offset,
35246 hf_ieee80211_user_prio_bitmap,
35247 ett_ieee80211_user_prio_bitmap,
35248 user_prio_bitmap_headers,
35249 ENC_NA0x00000000, BMT_NO_APPEND0x01);
35250 offset += 1;
35251
35252 proto_tree_add_item(user_prio_tree, hf_ieee80211_user_prio_limit, tvb,
35253 offset, 1, ENC_NA0x00000000);
35254 proto_tree_add_item(user_prio_tree, hf_ieee80211_user_prio_reserved, tvb,
35255 offset, 1, ENC_NA0x00000000);
35256 offset += 1;
35257 }
35258
35259 if (request_type == SCS_REMOVE1) {
35260 proto_tree_add_item(tree, hf_ieee80211_stream_timeout_reserved, tvb,
35261 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
35262 } else {
35263 proto_tree_add_item(tree, hf_ieee80211_stream_timeout, tvb,
35264 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
35265 }
35266 offset += 4;
35267
35268 /*
35269 * If there is nothing more in the TVB we are done.
35270 */
35271 if (tvb_reported_length_remaining(tvb, offset) == 0)
35272 return;
35273
35274 /*
35275 * There may be tclas elements following and optional MSCS elements.
35276 * A TCLAS Mask element will start with 0xFF <len> 0x89
35277 */
35278 while (tvb_reported_length_remaining(tvb, offset) &&
35279 tvb_get_uint8(tvb, offset) == 0xFF) {
35280 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35281 }
35282
35283 /*
35284 * Any optional MSCS elements come next. Should be 1 byte ID, 1 byte len
35285 * and len bytes.
35286 */
35287 if (offset < len) {
35288 uint8_t sub_elt_len;
35289
35290 proto_tree_add_item(tree, hf_ieee80211_mscs_subelement_id, tvb, offset, 1,
35291 ENC_NA0x00000000);
35292 offset += 1;
35293
35294 sub_elt_len = tvb_get_uint8(tvb, offset);
35295 proto_tree_add_item(tree, hf_ieee80211_mscs_subelement_len, tvb, offset, 1,
35296 ENC_NA0x00000000);
35297 offset += 1;
35298
35299 proto_tree_add_item(tree, hf_ieee80211_mscs_subelement_data, tvb, offset,
35300 sub_elt_len, ENC_NA0x00000000);
35301 }
35302}
35303
35304static void
35305dissect_tclas_mask_element(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35306 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35307{
35308 ieee80211_frame_classifier(tvb, pinfo, tree, offset, len);
35309}
35310
35311static int * const intra_access_prio_headers[] = {
35312 &hf_ieee80211_intra_access_prio_user_prio,
35313 &hf_ieee80211_intra_access_prio_alt_queue,
35314 &hf_ieee80211_intra_access_prio_drop_elig,
35315 &hf_ieee80211_intra_access_prio_reserved,
35316 NULL((void*)0)
35317};
35318
35319static int
35320ieee80211_tag_intra_access_cat_prio(tvbuff_t *tvb, packet_info *pinfo,
35321 proto_tree *tree, void *data)
35322{
35323 int tag_len = tvb_reported_length(tvb);
35324 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t *)data;
35325 int offset = 0;
35326
35327 if (tag_len != 1) {
35328 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
35329 return tvb_captured_length(tvb);
35330 }
35331
35332 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35333 hf_ieee80211_intra_access_prio,
35334 ett_ieee80211_intra_access_prio,
35335 intra_access_prio_headers,
35336 ENC_NA0x00000000, BMT_NO_APPEND0x01);
35337
35338 return tvb_captured_length(tvb);
35339}
35340
35341static int
35342ieee80211_tag_scs_descriptor(tvbuff_t *tvb, packet_info *pinfo,
35343 proto_tree *tree, void *data _U___attribute__((unused)))
35344{
35345 int offset = 0;
35346 uint8_t request_type = tvb_get_uint8(tvb, offset + 1);
35347
35348 proto_tree_add_item(tree, hf_ieee80211_scs_descriptor_scsid, tvb, offset, 1,
35349 ENC_NA0x00000000);
35350 offset += 1;
35351
35352 proto_tree_add_item(tree, hf_ieee80211_scs_descriptor_type, tvb, offset, 1,
35353 ENC_NA0x00000000);
35354 offset += 1;
35355
35356 if (request_type == SCS_ADD0 || request_type == SCS_CHANGE2) {
35357 /* There will only be one intra access priority */
35358 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35359
35360 /* There will be at least one tclass element ... */
35361 while ((tvb_captured_length_remaining(tvb, offset) > 0) &&
35362 tvb_get_uint8(tvb, offset) == TAG_TCLAS14) {
35363 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35364 }
35365 /* There could be a TCLAS PROCESS element ... */
35366 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
35367 tvb_get_uint8(tvb, offset) == TAG_TCLAS_PROCESS44) {
35368 add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35369 }
35370
35371 /* There could be one QoS Char element ... */
35372 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
35373 tvb_get_uint8(tvb, offset) == TAG_ELEMENT_ID_EXTENSION255 &&
35374 tvb_get_uint8(tvb, offset+2) == ETAG_QOS_CHARACTERISTICS113) {
35375 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35376 }
35377
35378 /* There can be zero or one TSPEC elements */
35379 if (tvb_captured_length_remaining(tvb, offset) > 0) {
35380 static const uint8_t ids[] = { TAG_TSPEC13 };
35381 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
35382 /* Add an expert info */
35383 }
35384 }
35385
35386 }
35387
35388 /* There could be Optional subelements here too ... */
35389
35390 return tvb_captured_length(tvb);
35391}
35392
35393/*
35394 * Just a list of finite cyclic group numbers as 16-bit uints.
35395 */
35396static void
35397dissect_rejected_groups(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35398 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35399{
35400 while (tvb_reported_length_remaining(tvb, offset)) {
35401 proto_tree_add_item(tree, hf_ieee80211_rejected_groups_group, tvb, offset,
35402 2, ENC_LITTLE_ENDIAN0x80000000);
35403 offset += 2;
35404 }
35405}
35406
35407/*
35408 * Just a string of bytes
35409 */
35410static void
35411dissect_anti_clogging_token(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35412 proto_tree *tree, int offset, int len)
35413{
35414 proto_tree_add_item(tree, hf_ieee80211_sae_anti_clogging_token, tvb, offset,
35415 len, ENC_NA0x00000000);
35416}
35417
35418/*
35419 * There will be from 1 to 4 24-bit fields in the order of AC=BK, AC=BE,
35420 * AC=VI and AC=VO.
35421 */
35422
35423static int * const esp_headers[] = {
35424 &hf_ieee80211_esp_access_category,
35425 &hf_ieee80211_esp_reserved,
35426 &hf_ieee80211_esp_data_format,
35427 &hf_ieee80211_esp_ba_windows_size,
35428 &hf_ieee80211_esp_est_air_time_frac,
35429 &hf_ieee80211_esp_data_ppdu_duration_target,
35430 NULL((void*)0)
35431};
35432
35433static const value_string esp_access_category_vals[] = {
35434 { 0, "AC=BK" },
35435 { 1, "AC=BE" },
35436 { 2, "AC=VI" },
35437 { 3, "AC=VO" },
35438 { 0, NULL((void*)0) }
35439};
35440
35441static const value_string esp_data_format_vals[] = {
35442 { 0, "No aggregation is expected to be performed" },
35443 { 1, "A-MSDU aggregation is expected but not A-MPDUs when type is data" },
35444 { 2, "A-MSDU aggregation is NOT expected but A-MPDUs aggregation is when type is data" },
35445 { 3, "A-MSDU aggregation is expected and A-MPDU aggregation is when type is data" },
35446 { 0, NULL((void*)0) }
35447};
35448
35449static const value_string esp_ba_window_size_vals[] = {
35450 { 0, "Block Ack not expected to be used" },
35451 { 1, "2" },
35452 { 2, "4" },
35453 { 3, "6" },
35454 { 4, "8" },
35455 { 5, "16" },
35456 { 6, "32" },
35457 { 7, "64" },
35458 { 0, NULL((void*)0) }
35459};
35460
35461static int
35462dissect_estimated_service_params(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35463 proto_tree *tree, int offset, int len)
35464{
35465 while (len > 0) {
35466 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35467 hf_ieee80211_estimated_service_params, ett_ieee80211_esp,
35468 esp_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35469 offset += 3;
35470 len -= 3;
35471 }
35472
35473 return offset;
35474}
35475
35476static int
35477dissect_future_channel_guidance(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35478 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35479{
35480 proto_tree_add_item(tree, hf_ieee80211_fcg_new_channel_number, tvb, offset,
35481 4, ENC_LITTLE_ENDIAN0x80000000);
35482 offset += 4;
35483
35484 if (len - 4 > 0) {
35485 proto_tree_add_item(tree, hf_ieee80211_fcg_extra_info, tvb, offset, len - 4,
35486 ENC_NA0x00000000);
35487 offset += len - 4;
35488 }
35489
35490 return offset;
35491}
35492
35493/* IANA, "Transform Type 4 - Diffie-Hellman Group Transform IDs" */
35494static const value_string owe_dh_parameter_group_vals[] = {
35495 { 0, "None" },
35496 { 1, "768-bit MODP Group" },
35497 { 2, "1024-bit MODP Group" },
35498 { 5, "1536-bit MODP Group" },
35499 { 14, "2048-bit MODP Group"},
35500 { 15, "3072-bit MODP Group"},
35501 { 16, "4096-bit MODP Group"},
35502 { 17, "6144-bit MODP Group"},
35503 { 18, "8192-bit MODP Group"},
35504 { 19, "256-bit random ECP group"},
35505 { 20, "384-bit random ECP group"},
35506 { 21, "521-bit random ECP group"},
35507 { 22, "1024-bit MODP Group with 160-bit Prime Order Subgroup"},
35508 { 23, "2048-bit MODP Group with 224-bit Prime Order Subgroup"},
35509 { 24, "2048-bit MODP Group with 256-bit Prime Order Subgroup"},
35510 { 25, "192-bit Random ECP Group"},
35511 { 26, "224-bit Random ECP Group"},
35512 { 27, "brainpoolP224r1"},
35513 { 28, "brainpoolP256r1"},
35514 { 29, "brainpoolP384r1"},
35515 { 30, "brainpoolP512r1"},
35516 { 31, "Curve25519"},
35517 { 32, "Curve448"},
35518 { 0, NULL((void*)0) }
35519};
35520
35521static int
35522dissect_owe_dh_parameter(tvbuff_t *tvb, packet_info *pinfo,
35523 proto_tree *tree, int offset, int len _U___attribute__((unused)), association_sanity_check_t* sanity_check)
35524{
35525 if (len < 2) {
35526 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
35527 "OWE: Diffie-Hellman Parameter must be at least 2 "
35528 "octets long");
35529 return offset + len;
35530 }
35531
35532 ieee80211_packet_data_t *packet_data = get_or_create_packet_data(pinfo);
35533 packet_data->owe_group = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35534 if (sanity_check != NULL((void*)0)) {
35535 sanity_check->owe_group = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35536 }
35537
35538 proto_tree_add_item(tree, hf_ieee80211_owe_dh_parameter_group, tvb, offset,
35539 2, ENC_LITTLE_ENDIAN0x80000000);
35540 proto_tree_add_item(tree, hf_ieee80211_owe_dh_parameter_public_key, tvb, offset + 2,
35541 len - 2, ENC_NA0x00000000);
35542 offset += len;
35543
35544 return offset;
35545}
35546
35547static int * const ieee80211_twt_ctrl_field[] = {
35548 &hf_ieee80211_tag_twt_ndp_paging_indicator,
35549 &hf_ieee80211_tag_twt_responder_pm_mode,
35550 &hf_ieee80211_tag_twt_neg_type,
35551 &hf_ieee80211_tag_twt_info_frame_disabled,
35552 &hf_ieee80211_tag_twt_wake_duration_unit,
35553 &hf_ieee80211_tag_twt_link_id_bitmap_present,
35554 &hf_ieee80211_tag_twt_aligned_twt,
35555 NULL((void*)0),
35556};
35557
35558static int * const ieee80211_twt_req_type_field[] = {
35559 &hf_ieee80211_tag_twt_req_type_req,
35560 &hf_ieee80211_tag_twt_req_type_setup_cmd,
35561 &hf_ieee80211_tag_twt_req_type_trigger,
35562 &hf_ieee80211_tag_twt_req_type_implicit,
35563 &hf_ieee80211_tag_twt_req_type_flow_type,
35564 &hf_ieee80211_tag_twt_req_type_flow_id,
35565 &hf_ieee80211_tag_twt_req_type_wake_int_exp,
35566 &hf_ieee80211_tag_twt_req_type_prot,
35567 NULL((void*)0),
35568};
35569
35570static int * const ieee80211_bcst_twt_req_type_field[] = {
35571 &hf_ieee80211_tag_twt_req_type_req,
35572 &hf_ieee80211_tag_twt_req_type_setup_cmd,
35573 &hf_ieee80211_tag_twt_req_type_trigger,
35574 &hf_ieee80211_tag_twt_req_type_last_bcst_parm_set,
35575 &hf_ieee80211_tag_twt_req_type_flow_type,
35576 &hf_ieee80211_tag_twt_req_type_bcst_twt_recom,
35577 &hf_ieee80211_tag_twt_req_type_wake_int_exp,
35578 &hf_ieee80211_tag_twt_req_type_aligned,
35579 NULL((void*)0),
35580};
35581
35582static int * const ieee80211_twt_ndp_paging_field[] = {
35583 &hf_ieee80211_tag_twt_ndp_paging_p_id,
35584 &hf_ieee80211_tag_twt_ndp_max_ndp_paging_period,
35585 &hf_ieee80211_tag_twt_ndp_partial_tsf_offset,
35586 &hf_ieee80211_tag_twt_ndp_action,
35587 &hf_ieee80211_tag_twt_ndp_min_sleep_duration,
35588 &hf_ieee80211_tag_twt_ndp_reserved,
35589 NULL((void*)0)
35590};
35591
35592static int * const ieee80211_twt_broadcast_info_field[] = {
35593 &hf_ieee80211_tag_twt_bcast_info_persistence,
35594 &hf_ieee80211_tag_twt_bcast_info_id,
35595 &hf_ieee80211_tag_twt_bcast_info_rtwt_sche_info,
35596 &hf_ieee80211_tag_twt_bcast_info_rtwt_traffic_present,
35597 NULL((void*)0)
35598};
35599
35600static int * const ieee80211_twt_traffic_info_control_field[] = {
35601 &hf_ieee80211_tag_twt_traffic_info_dl_bitmap_valid,
35602 &hf_ieee80211_tag_twt_traffic_info_ul_bitmap_valid,
35603 &hf_ieee80211_tag_twt_traffic_info_reserved,
35604 NULL((void*)0)
35605};
35606
35607static const value_string twt_ndp_action_vals[] = {
35608 { 0, "Send a PD-Poll or uplink trigger frame" },
35609 { 1, "Wake up at the time indicated by Min Sleep Duration" },
35610 { 2, "Wake up to receive the Beacon" },
35611 { 3, "Wake up to receive the DTIM Beacon" },
35612 { 4, "Wake up at the time indicated by the sum of the Min Sleep Duration and the ASD" },
35613 { 5, "Reserved" },
35614 { 6, "Reserved" },
35615 { 7, "Reserved" },
35616 { 0, NULL((void*)0) }
35617};
35618
35619static int
35620ieee80211_tag_twt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35621{
35622 int tag_len;
35623 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35624 int offset = 0;
35625 proto_item *item = NULL((void*)0);
35626 bool_Bool twt_requester;
35627 uint8_t setup_command;
35628 uint8_t ctrl_field;
35629 uint16_t req_type;
35630 uint8_t neg_type;
35631 bool_Bool last_bcast = false0;
35632
35633 ctrl_field = tvb_get_uint8(tvb, offset);
35634 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35635 hf_ieee80211_tag_twt_control_field,
35636 ett_twt_control_field_tree,
35637 ieee80211_twt_ctrl_field,
35638 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FALSE0x04);
35639 offset += 1;
35640 neg_type = (ctrl_field & 0xc) >> 2;
35641
35642 while (!last_bcast) {
35643 tag_len = tvb_captured_length_remaining(tvb, offset);
35644 if (tag_len < 2) {
35645 expert_add_info(pinfo, item ? item : tree,
35646 &ei_ieee80211_twt_bcast_info_no_term);
35647 return tvb_captured_length(tvb);
35648 }
35649 req_type = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35650 if (neg_type & 0x2) { /* If a bcast TWT */
35651 // 2 bytes - request type
35652 // 2 bytes - target wake time
35653 // 1 byte - nominal minimum interval TWT wake duration
35654 // 2 bytes - TWT wake interval mantissa
35655 // 2 byte - Broadcast TWT info
35656 // total: 10 bytes.
35657 if (tag_len < 9) {
35658 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
35659 "Tag Length %u wrong, must be >= 9", tag_len);
35660 return tvb_captured_length(tvb);
35661 }
35662 item = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35663 hf_ieee80211_tag_twt_req_type_field,
35664 ett_twt_req_type_tree,
35665 ieee80211_bcst_twt_req_type_field,
35666 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35667 last_bcast = (req_type & 0x20) >> 5;
35668 } else {
35669 // 2 bytes - request type
35670 // 8 bytes - target wake time
35671 // 1 byte - nominal minimum interval TWT wake duration
35672 // 2 bytes - TWT wake interval mantissa
35673 // 1 byte - channel
35674 // total: 14 bytes.
35675 if (tag_len < 14) {
35676 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
35677 "Tag Length %u wrong, must be >= 14", tag_len);
35678 return tvb_captured_length(tvb);
35679 }
35680 item = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35681 hf_ieee80211_tag_twt_req_type_field,
35682 ett_twt_req_type_tree,
35683 ieee80211_twt_req_type_field,
35684 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35685 last_bcast = true1;
35686 }
35687
35688 twt_requester = req_type & 0x1;
35689 setup_command = (req_type & 0xe) >> 1;
35690
35691 switch (setup_command) {
35692 case REQUEST_TWT0:
35693 case SUGGEST_TWT1:
35694 case DEMAND_TWT2:
35695 // we must be TWT requester
35696 if (!twt_requester) {
35697 expert_add_info_format(pinfo, item,
35698 &ei_ieee80211_twt_setup_bad_command,
35699 "Command %d is not allowed if TWT Request is not set",
35700 setup_command);
35701 return tvb_captured_length(tvb);
35702 }
35703 break;
35704 case TWT_GROUPING3:
35705 // TODO: There are more tests needed here
35706 // Fall through since we can't be requester here as well.
35707 case ACCEPT_TWT4:
35708 case ALTERNATE_TWT5:
35709 // we can't be TWT requester
35710 if (twt_requester) {
35711 expert_add_info_format(pinfo, item,
35712 &ei_ieee80211_twt_setup_bad_command,
35713 "Command %d is not allowed if TWT Request is set",
35714 setup_command);
35715 return tvb_captured_length(tvb);
35716 }
35717 break;
35718 case DICTATE_TWT6:
35719 case REJECT_TWT7:
35720 // TODO: Unclear what to do here. Looks like we can't be Requester, OTOH
35721 // the spec doesn't say anything
35722 break;
35723 default:
35724 break;
35725 }
35726
35727 offset += 2;
35728
35729 if (neg_type & 0x2) { /* If a bcast TWT */
35730 uint16_t twt_info;
35731
35732 proto_tree_add_item(tree, hf_ieee80211_tag_twt_target_wake_time_short,
35733 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35734 offset += 2;
35735
35736 proto_tree_add_item(tree, hf_ieee80211_tag_twt_nom_min_twt_wake_dur, tvb,
35737 offset, 1, ENC_NA0x00000000);
35738 offset += 1;
35739
35740 proto_tree_add_item(tree, hf_ieee80211_tag_twt_wake_interval_mantissa,
35741 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35742 offset += 2;
35743
35744 twt_info = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35745 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35746 hf_ieee80211_tag_twt_broadcast_info,
35747 ett_twt_broadcast_info_tree,
35748 ieee80211_twt_broadcast_info_field,
35749 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35750 offset += 2;
35751 if (twt_info & 0x01) { /* RTWT Traffic Info */
35752 proto_tree *info_tree;
35753 info_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_twt_traffic_info_tree,
35754 NULL((void*)0), "Restricted TWT Traffic Info");
35755 proto_tree_add_bitmask_with_flags(info_tree, tvb, offset,
35756 hf_ieee80211_tag_twt_traffic_info_control,
35757 ett_twt_traffic_info_control_tree,
35758 ieee80211_twt_traffic_info_control_field,
35759 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FALSE0x04);
35760 offset += 1;
35761
35762 proto_tree_add_item(info_tree, hf_ieee80211_tag_twt_traffic_info_rtwt_dl_bitmap,
35763 tvb, offset, 1, ENC_NA0x00000000);
35764 offset += 1;
35765
35766 proto_tree_add_item(info_tree, hf_ieee80211_tag_twt_traffic_info_rtwt_ul_bitmap,
35767 tvb, offset, 1, ENC_NA0x00000000);
35768 offset += 1;
35769 }
35770 } else {
35771 proto_tree_add_item(tree, hf_ieee80211_tag_twt_target_wake_time, tvb,
35772 offset, 8, ENC_LITTLE_ENDIAN0x80000000);
35773 offset += 8;
35774
35775 proto_tree_add_item(tree, hf_ieee80211_tag_twt_nom_min_twt_wake_dur, tvb,
35776 offset, 1, ENC_NA0x00000000);
35777 offset += 1;
35778
35779 item = proto_tree_add_item(tree,
35780 hf_ieee80211_tag_twt_wake_interval_mantissa,
35781 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35782 offset += 2;
35783
35784 proto_tree_add_item(tree, hf_ieee80211_tag_twt_channel, tvb, offset, 1,
35785 ENC_NA0x00000000);
35786 offset += 1;
35787
35788 if (ctrl_field & 0x01) { /* NDP Paging */
35789 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35790 hf_ieee80211_tag_twt_ndp_paging_field,
35791 ett_twt_ndp_paging_field_tree,
35792 ieee80211_twt_ndp_paging_field,
35793 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FALSE0x04);
35794 offset += 4;
35795 }
35796
35797 if (ctrl_field & 0x40) { /* Link ID Bitmap */
35798 proto_tree_add_item(tree, hf_ieee80211_tag_twt_link_id_bitmap, tvb, offset, 2,
35799 ENC_LITTLE_ENDIAN0x80000000);
35800 offset += 2;
35801 }
35802
35803 if (ctrl_field & 0x80) { /* Aligned TWT Link Bitmap */
35804 proto_tree_add_item(tree, hf_ieee80211_tag_twt_aligned_twt_link_bitmap, tvb, offset, 2,
35805 ENC_LITTLE_ENDIAN0x80000000);
35806 offset += 2;
35807 }
35808 }
35809 }
35810
35811 return tvb_captured_length(tvb);
35812}
35813
35814static int
35815dissect_rsnx_ie(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, int tag_len)
35816{
35817 int offset = 0;
35818 proto_item *octet;
35819 static int * const octet1[] = {
35820 &hf_ieee80211_tag_rsnx_length,
35821 &hf_ieee80211_tag_rsnx_protected_twt_operations_support,
35822 &hf_ieee80211_tag_rsnx_sae_hash_to_element,
35823 &hf_ieee80211_tag_rsnx_sae_pk,
35824 &hf_ieee80211_tag_rsnx_protected_wur_frame_support,
35825 NULL((void*)0)
35826 };
35827 static int * const octet2[] = {
35828 &hf_ieee80211_tag_rsnx_secure_ltf_support,
35829 &hf_ieee80211_tag_rsnx_secure_rtt_supported,
35830 &hf_ieee80211_tag_rsnx_urnm_mfpr_x20,
35831 &hf_ieee80211_tag_rsnx_protected_announce_support,
35832 &hf_ieee80211_tag_rsnx_pbac,
35833 &hf_ieee80211_tag_rsnx_extended_s1g_action_protection,
35834 &hf_ieee80211_tag_rsnx_spp_amsdu_capable,
35835 &hf_ieee80211_tag_rsnx_urnm_mfpr,
35836 NULL((void*)0)
35837 };
35838
35839 /* octet 1 */
35840 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);
35841 proto_item_append_text(octet, " (octet %d)", offset + 1);
35842
35843 offset += 1;
35844 if (offset >= tag_len) {
35845 return offset;
35846 }
35847
35848 /* octet 2 */
35849 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);
35850 proto_item_append_text(octet, " (octet %d)", offset + 1);
35851
35852 offset += 1;
35853 if (offset >= tag_len) {
35854 return offset;
35855 }
35856
35857 /* all rest of payload is reserved... */
35858 while (offset < tag_len) {
35859 proto_tree_add_item(tree, hf_ieee80211_tag_rsnx_reserved, tvb, offset, 1,
35860 ENC_LITTLE_ENDIAN0x80000000);
35861 offset += 1;
35862 }
35863
35864 return offset;
35865}
35866
35867static int
35868ieee80211_tag_rsnx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35869{
35870 int tag_len = tvb_reported_length(tvb);
35871 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35872
35873 if (tag_len < 1) {
35874 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 1", tag_len);
35875 return 0;
35876 }
35877 proto_item_append_text(field_data->item_tag, " (%u octet%s)", tag_len, plurality(tag_len, "", "s")((tag_len) == 1 ? ("") : ("s")));
35878
35879 dissect_rsnx_ie(tvb, pinfo, tree, tag_len);
35880
35881 return tvb_captured_length(tvb);
35882}
35883
35884static int
35885ieee80211_tag_fils_indication(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35886{
35887 int tag_len = tvb_reported_length(tvb);
35888 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35889 int offset = 0;
35890 uint16_t info;
35891 uint8_t nr_realm, nr_pk, i, len;
35892 proto_item *item;
35893 proto_tree *subtree;
35894
35895 if (tag_len < 2)
35896 {
35897 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
35898 return tvb_captured_length(tvb);
35899 }
35900
35901 static int * const ieee80211_tag_fils_indication_info[] = {
35902 &hf_ieee80211_tag_fils_indication_info_nr_pk,
35903 &hf_ieee80211_tag_fils_indication_info_nr_realm,
35904 &hf_ieee80211_tag_fils_indication_info_ip_config,
35905 &hf_ieee80211_tag_fils_indication_info_cache_id_included,
35906 &hf_ieee80211_tag_fils_indication_info_hessid_included,
35907 &hf_ieee80211_tag_fils_indication_info_ska_without_pfs,
35908 &hf_ieee80211_tag_fils_indication_info_ska_with_pfs,
35909 &hf_ieee80211_tag_fils_indication_info_pka,
35910 &hf_ieee80211_tag_fils_indication_info_reserved,
35911 NULL((void*)0)
35912 };
35913
35914 info = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35915 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_fils_indication_info, ENC_LITTLE_ENDIAN0x80000000);
35916 offset += 2;
35917
35918 nr_pk = info & 0x07;
35919 nr_realm = (info >> 3) & 0x07;
35920
35921 /* Cache identifier */
35922 if (info & (1 << 7)) {
35923 proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_cache_identifier, tvb, offset, 2, ENC_NA0x00000000);
35924 offset += 2;
35925 }
35926
35927 /* HESSID */
35928 if (info & (1 << 8)) {
35929 proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_hessid, tvb, offset, 6, ENC_NA0x00000000);
35930 offset += 6;
35931 }
35932
35933 /* Realm identifiers */
35934 if (nr_realm > 0) {
35935 item = proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_realm_list, tvb, offset, nr_realm * 2, ENC_NA0x00000000);
35936 subtree = proto_item_add_subtree(item, ett_fils_indication_realm_list);
35937 proto_item_append_text(item, ": %u", nr_realm);
35938
35939 for (i = 0; i < nr_realm; i++) {
35940 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_realm_identifier, tvb, offset, 2, ENC_NA0x00000000);
35941 offset += 2;
35942 }
35943 }
35944
35945 /* PK identifiers */
35946 if (nr_pk > 0) {
35947 item = proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_public_key_list, tvb, offset, tag_len - offset, ENC_NA0x00000000);
35948 subtree = proto_item_add_subtree(item, ett_fils_indication_public_key_list);
35949 proto_item_append_text(item, ": %u", nr_pk);
35950
35951 for (i = 0; i < nr_pk; i++) {
35952 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_public_key_type, tvb, offset, 1, ENC_NA0x00000000);
35953 offset += 1;
35954
35955 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_public_key_length, tvb, offset, 1, ENC_NA0x00000000);
35956 len = tvb_get_uint8(tvb, offset);
35957 offset += 1;
35958
35959 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_public_key_indicator, tvb, offset, len, ENC_NA0x00000000);
35960 offset += len;
35961 }
35962 }
35963
35964 return tvb_captured_length(tvb);
35965}
35966
35967static int
35968ieee80211_tag_element_id_extension(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35969{
35970 int tag_len = tvb_reported_length(tvb);
35971 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35972 int offset = 0;
35973 int ext_tag_len;
35974 uint8_t ext_tag_no;
35975
35976 if (tag_len < 1)
35977 {
35978 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 1", tag_len);
35979 return tvb_captured_length(tvb);
35980 }
35981 ext_tag_no = tvb_get_uint8(tvb, offset++);
35982 ext_tag_len = tag_len - 1;
35983
35984 switch (ext_tag_no) {
35985 case ETAG_FILS_REQ_PARAMS2:
35986 dissect_fils_req_params(tree, pinfo, tvb, offset, ext_tag_len);
35987 break;
35988 case ETAG_FILS_SESSION4:
35989 proto_tree_add_item(tree, hf_ieee80211_fils_session, tvb, offset, ext_tag_len, ENC_NA0x00000000);
35990 if (field_data->sanity_check != NULL((void*)0)) {
35991 field_data->sanity_check->has_fils_session = true1;
35992 }
35993 break;
35994 case ETAG_FILS_WRAPPED_DATA8:
35995 dissect_wrapped_data(tree, pinfo, tvb, offset, ext_tag_len);
35996 break;
35997 case ETAG_FILS_NONCE13:
35998 proto_tree_add_item(tree, hf_ieee80211_fils_nonce, tvb, offset, ext_tag_len, ENC_NA0x00000000);
35999 break;
36000 case ETAG_ESTIMATED_SERVICE_PARAM11:
36001 dissect_estimated_service_params(tvb, pinfo, tree, offset, ext_tag_len);
36002 break;
36003 case ETAG_FUTURE_CHANNEL_GUIDANCE14:
36004 dissect_future_channel_guidance(tvb, pinfo, tree, offset, ext_tag_len);
36005 break;
36006 case ETAG_OWE_DH_PARAMETER32:
36007 dissect_owe_dh_parameter(tvb, pinfo, tree, offset, ext_tag_len, field_data->sanity_check);
36008 break;
36009 case ETAG_PASSWORD_IDENTIFIER33:
36010 dissect_password_identifier(tvb, pinfo, tree, offset, ext_tag_len);
36011 break;
36012 case ETAG_HE_CAPABILITIES35:
36013 dissect_he_capabilities(tvb, pinfo, tree, offset, ext_tag_len);
36014 break;
36015 case ETAG_HE_OPERATION36:
36016 dissect_he_operation(tvb, pinfo, tree, offset, ext_tag_len);
36017 break;
36018 case ETAG_UORA_PARAMETER_SET37:
36019 dissect_uora_parameter_set(tvb, pinfo, tree, offset);
36020 break;
36021 case ETAG_MU_EDCA_PARAMETER_SET38:
36022 dissect_mu_edca_parameter_set(tvb, pinfo, tree, offset, ext_tag_len);
36023 break;
36024 case ETAG_SPATIAL_REUSE_PARAMETER_SET39:
36025 dissect_spatial_reuse_parameter_set(tvb, pinfo, tree, offset, ext_tag_len);
36026 break;
36027 case ETAG_NDP_FEEDBACK_REPORT_PARAMETER_SET41:
36028 dissect_ndp_feedback_report_set(tvb, pinfo, tree, offset, ext_tag_len);
36029 break;
36030 case ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42:
36031 dissect_bss_color_change(tvb, pinfo, tree, offset, ext_tag_len);
36032 break;
36033 case ETAG_QUIET_TIME_PERIOD_SETUP43:
36034 dissect_quiet_time_period(tvb, pinfo, tree, offset, ext_tag_len);
36035 break;
36036 case ETAG_ESS_REPORT45:
36037 dissect_ess_report(tvb, pinfo, tree, offset, ext_tag_len);
36038 break;
36039 case ETAG_OPS46:
36040 dissect_ops(tvb, pinfo, tree, offset, ext_tag_len);
36041 break;
36042 case ETAG_MAX_CHANNEL_SWITCH_TIME52:
36043 dissect_max_channel_switch_time(tvb, pinfo, tree, offset, ext_tag_len);
36044 break;
36045 case ETAG_OCI54:
36046 dissect_oci(tvb, pinfo, tree, offset, ext_tag_len);
36047 break;
36048 case ETAG_MULTIPLE_BSSID_CONFIGURATION55:
36049 dissect_multiple_bssid_configuration(tvb, pinfo, tree, offset, ext_tag_len);
36050 break;
36051 case ETAG_NON_INHERITANCE56:
36052 dissect_non_inheritance(tvb, pinfo, tree, offset, ext_tag_len);
36053 break;
36054 case ETAG_KNOWN_BSSID57:
36055 dissect_known_bssid(tvb, pinfo, tree, offset, ext_tag_len);
36056 break;
36057 case ETAG_SHORT_SSID58:
36058 dissect_short_ssid(tvb, pinfo, tree, offset, ext_tag_len);
36059 break;
36060 case ETAG_MSCS_DESCRIPTOR_ELEMENT88:
36061 dissect_mscs_descriptor_element(tvb, pinfo, tree, offset, ext_tag_len);
36062 break;
36063 case ETAG_TCLAS_MASK89:
36064 dissect_tclas_mask_element(tvb, pinfo, tree, offset, ext_tag_len);
36065 break;
36066 case ETAG_REJECTED_GROUPS92:
36067 dissect_rejected_groups(tvb, pinfo, tree, offset, ext_tag_len);
36068 break;
36069 case ETAG_ANTI_CLOGGING_TOKEN93:
36070 dissect_anti_clogging_token(tvb, pinfo, tree, offset, ext_tag_len);
36071 break;
36072 case ETAG_EXTENDED_REQUEST10:
36073 dissect_extended_request(tvb, pinfo, tree, offset, ext_tag_len);
36074 break;
36075 case ETAG_HE_6GHZ_BAND_CAPABILITIES59:
36076 dissect_he_6ghz_band_capabilities(tvb, pinfo, tree, offset, ext_tag_len);
36077 break;
36078 case ETAG_RANGING_PARAMETERS101:
36079 dissect_ranging_parameters(tvb, pinfo, tree, offset, ext_tag_len);
36080 break;
36081 case ETAG_DIRECTION_MEASUREMENT_RESULTS102:
36082 dissect_direction_measurement_results(tvb, pinfo, tree, offset, ext_tag_len);
36083 break;
36084 case ETAG_FTM_SYNC_INFO9:
36085 proto_tree_add_item(tree, hf_ieee80211_tag_ftm_tsf_sync_info, tvb, offset, ext_tag_len, ENC_NA0x00000000);
36086 break;
36087 case ETAG_SECURE_LTF_PARAMETERS94:
36088 dissect_secure_ltf_parameters(tvb, pinfo, tree, offset, ext_tag_len);
36089 break;
36090 case ETAG_ISTA_AVAILABILITY_WINDOW98:
36091 dissect_ista_availability_window(tvb, pinfo, tree, offset, ext_tag_len);
36092 break;
36093 case ETAG_RSTA_AVAILABILITY_WINDOW99:
36094 dissect_rsta_availability_window(tvb, pinfo, tree, offset, ext_tag_len);
36095 break;
36096 case ETAG_PASN_PARAMETERS100:
36097 dissect_pasn_parameters(tvb, pinfo, tree, offset, ext_tag_len);
36098 break;
36099 case ETAG_MULTI_LINK107:
36100 dissect_multi_link(tvb, pinfo, tree, offset, ext_tag_len);
36101 break;
36102 case ETAG_EHT_OPERATION106:
36103 dissect_eht_operation(tvb, pinfo, tree, offset, ext_tag_len);
36104 break;
36105 case ETAG_EHT_CAPABILITIES108:
36106 dissect_eht_capabilities(tvb, pinfo, tree, offset, ext_tag_len);
36107 break;
36108 case ETAG_TID_TO_LINK_MAPPING109:
36109 dissect_tid_to_link_mapping(tvb, pinfo, tree, offset, ext_tag_len);
36110 break;
36111 case ETAG_MULTI_LINK_TRAFFIC110:
36112 dissect_multi_link_traffic(tvb, pinfo, tree, offset, ext_tag_len);
36113 break;
36114 case ETAG_QOS_CHARACTERISTICS113:
36115 dissect_qos_characteristics(tvb, pinfo, tree, offset, ext_tag_len);
36116 break;
36117 case ETAG_AKM_SUITE_SELECTOR114:
36118 dissect_akm_suite_selector(tvb, pinfo, tree, offset, ext_tag_len);
36119 break;
36120 case ETAG_MLO_LINK_INFORMATION133:
36121 dissect_mlo_link_information(tvb, pinfo, tree, offset, ext_tag_len);
36122 break;
36123 case ETAG_AID_BITMAP134:
36124 dissect_aid_bitmap(tvb, pinfo, tree, offset, ext_tag_len);
36125 break;
36126 case ETAG_BANDWIDTH_INDICATION135:
36127 dissect_bandwidth_indication(tvb, pinfo, tree, offset, ext_tag_len);
36128 break;
36129 case ETAG_NONAP_STA_REGULATORY_CONNECT137:
36130 dissect_nonap_sta_regulatory_connect(tvb, pinfo, tree, offset, ext_tag_len);
36131 break;
36132 default:
36133 proto_tree_add_item(tree, hf_ieee80211_ext_tag_data, tvb, offset, ext_tag_len, ENC_NA0x00000000);
36134 expert_add_info_format(pinfo, field_data->item_tag, &ei_ieee80211_tag_data,
36135 "Dissector for 802.11 Extension Tag"
36136 " (%s) code not implemented, Contact"
36137 " Wireshark developers if you want this supported", val_to_str_ext(pinfo->pool, ext_tag_no,
36138 &tag_num_vals_eid_ext_ext, "%d"));
36139 proto_item_append_text(field_data->item_tag, ": Undecoded");
36140 break;
36141 }
36142
36143 return tvb_captured_length(tvb);
36144}
36145
36146/* Conflict: WAPI Vs. IEEE */
36147static int
36148ieee80211_tag_ie_68_conflict(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36149{
36150 int tag_len = tvb_reported_length(tvb);
36151 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36152 if (tag_len >= 20) { /* It Might be WAPI*/
36153 dissect_wapi_param_set(tvb, pinfo, tree, 0, tag_len, field_data->item_tag_length, field_data->item_tag, field_data->ftype);
36154 }
36155 else { /* BSS AC Access Delay (68) */
36156 dissect_bss_ac_access_delay_ie(tvb, pinfo, tree, 0, tag_len, field_data->item_tag_length);
36157 }
36158 return tvb_captured_length(tvb);
36159}
36160
36161static int
36162ieee80211_tag_mesh_peering_mgmt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36163{
36164 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36165 int tag_len = tvb_reported_length(tvb);
36166 int offset = 0;
36167 int ampe_frame = 0;
36168
36169 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_proto, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36170 offset += 2;
36171 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_local_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36172 offset += 2;
36173
36174 if (field_data && field_data->sanity_check)
36175 ampe_frame = field_data->sanity_check->ampe_frame;
36176
36177 switch (ampe_frame)
36178 { /* Self-protected action field */
36179 case SELFPROT_ACTION_MESH_PEERING_OPEN1:
36180 break;
36181
36182 case SELFPROT_ACTION_MESH_PEERING_CONFIRM2:
36183 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36184 break;
36185
36186 case SELFPROT_ACTION_MESH_PEERING_CLOSE3:
36187 if ((tag_len == 8) || (tag_len == 24))
36188 {
36189 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36190 offset += 2;
36191 }
36192 add_ff_reason_code(tree, tvb, pinfo, offset);
36193 break;
36194
36195 /* unexpected values */
36196 default:
36197 proto_tree_add_expert(tree, pinfo, &ei_ieee80211_mesh_peering_unexpected , tvb, offset, tag_len);
36198 break;
36199 }
36200 if (tag_len - offset == 16)
36201 {
36202 proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA0x00000000);
36203 }
36204 return tvb_captured_length(tvb);
36205}
36206
36207static int
36208ieee80211_tag_mesh_configuration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36209{
36210
36211 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36212 int tag_len = tvb_reported_length(tvb);
36213 if (tag_len != 7)
36214 {
36215 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 7", tag_len);
36216 return tvb_captured_length(tvb);
36217 }
36218
36219 int offset = 0;
36220 proto_item *item;
36221 proto_tree *subtree;
36222 static int * const ieee80211_mesh_config_cap[] = {
36223 &hf_ieee80211_mesh_config_cap_accepting,
36224 &hf_ieee80211_mesh_config_cap_mcca_support,
36225 &hf_ieee80211_mesh_config_cap_mcca_enabled,
36226 &hf_ieee80211_mesh_config_cap_forwarding,
36227 &hf_ieee80211_mesh_config_cap_mbca_enabled,
36228 &hf_ieee80211_mesh_config_cap_tbtt_adjusting,
36229 &hf_ieee80211_mesh_config_cap_power_save_level,
36230 &hf_ieee80211_mesh_config_cap_reserved,
36231 NULL((void*)0)
36232 };
36233
36234 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_protocol, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36235 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_metric, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
36236 proto_tree_add_item(tree, hf_ieee80211_mesh_config_congestion_control, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
36237 proto_tree_add_item(tree, hf_ieee80211_mesh_config_sync_method, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
36238 proto_tree_add_item(tree, hf_ieee80211_mesh_config_auth_protocol, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN0x80000000);
36239 item = proto_tree_add_item(tree, hf_ieee80211_mesh_config_formation_info, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36240 subtree = proto_item_add_subtree(item, ett_mesh_formation_info_tree);
36241 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_conn_to_mesh_gate, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36242 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_num_of_peerings, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36243 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_conn_to_as, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36244
36245 proto_tree_add_bitmask_with_flags(tree, tvb, offset + 6, hf_ieee80211_mesh_config_capability,
36246 ett_mesh_config_cap_tree, ieee80211_mesh_config_cap,
36247 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36248 return tvb_captured_length(tvb);
36249}
36250
36251static int
36252ieee80211_tag_mesh_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36253{
36254 int offset = 0;
36255 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36256 int tag_len = tvb_reported_length(tvb);
36257 const uint8_t* mesh_id;
36258
36259 proto_tree_add_item_ret_string(tree, hf_ieee80211_mesh_id, tvb, offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &mesh_id);
36260 if (tag_len > 0) {
36261 char* s = format_text(pinfo->pool, (const char*)mesh_id, tag_len);
36262 col_append_fstr(pinfo->cinfo, COL_INFO, ", MESHID=%s", s);
36263 proto_item_append_text(field_data->item_tag, ": %s", s);
36264 }
36265 /* Make sure dissector is accepted */
36266 return ((tag_len > 0) ? tag_len : 1);
36267}
36268
36269static int
36270ieee80211_tag_beacon_timing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36271{
36272 int tag_len = tvb_reported_length(tvb);
36273 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36274 int offset = 0;
36275 uint32_t value;
36276 proto_item *item;
36277 proto_tree *subtree;
36278
36279 static int * const ieee80211_beacon_timing_rctrl_byte[] = {
36280 &hf_ieee80211_bcn_timing_rctrl_more,
36281 &hf_ieee80211_bcn_timing_rctrl_element_num,
36282 &hf_ieee80211_bcn_timing_rctrl_status_num,
36283 NULL((void*)0),
36284 };
36285
36286 /* Beacon timing element (120) */
36287 if (tag_len < 1) {
36288 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36289 "Tag length %u too short, must be greater than 1", tag_len);
36290 return tvb_captured_length(tvb);
36291 }
36292
36293 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_bcn_timing_rctrl,
36294 ett_bcn_timing_rctrl_tree, ieee80211_beacon_timing_rctrl_byte,
36295 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36296 offset += 1;
36297
36298 while (offset < tag_len) {
36299 item = proto_tree_add_item(tree, hf_ieee80211_bcn_timing_info, tvb, offset, 6, ENC_NA0x00000000);
36300 subtree = proto_item_add_subtree(item, ett_bcn_timing_info_tree);
36301 proto_item_append_text(item, " %u", ((offset / 6) + 1));
36302
36303 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_bcn_timing_info_nsta_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &value);
36304 proto_item_append_text(item, ": STA ID: %u", value);
36305 offset += 1;
36306
36307 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_bcn_timing_info_nsta_tbtt, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000, &value);
36308 proto_item_append_text(item, ", STA TBTT: %u", value);
36309 offset += 3;
36310
36311 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_bcn_timing_info_nsta_bi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &value);
36312 proto_item_append_text(item, ", STA BI: %u", value);
36313 offset += 2;
36314 }
36315
36316 proto_item_append_text(field_data->item_tag, " (%d entr%s)", offset / 6, plurality(offset / 6, "y", "ies")((offset / 6) == 1 ? ("y") : ("ies")));
36317
36318 return tvb_captured_length(tvb);
36319}
36320
36321static int
36322ieee80211_tag_gann(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36323{
36324 int tag_len = tvb_reported_length(tvb);
36325 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36326 int offset = 0;
36327
36328 static int * const ieee80211_gann_flags_byte[] = {
36329 &hf_ieee80211_gann_flags_reserved,
36330 NULL((void*)0),
36331 };
36332
36333 /* Gate Announcement (125) */
36334 if (tag_len != 15) {
36335 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36336 "Tag length %u wrong, must be = 15", tag_len);
36337 return tvb_captured_length(tvb);
36338 }
36339
36340 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_gann_flags,
36341 ett_gann_flags_tree, ieee80211_gann_flags_byte,
36342 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36343 offset += 1;
36344
36345 proto_tree_add_item(tree, hf_ieee80211_gann_hop_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36346 offset += 1;
36347 proto_tree_add_item(tree, hf_ieee80211_gann_elem_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36348 offset += 1;
36349 proto_tree_add_item(tree, hf_ieee80211_gann_mesh_gate_addr, tvb, offset, 6, ENC_NA0x00000000);
36350 offset += 6;
36351 proto_tree_add_item(tree, hf_ieee80211_gann_seq_num, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36352 offset += 4;
36353 proto_tree_add_item(tree, hf_ieee80211_gann_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36354
36355 return tvb_captured_length(tvb);
36356}
36357
36358static int
36359ieee80211_tag_mesh_preq(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36360{
36361 int offset = 0;
36362
36363 uint32_t flags;
36364 uint8_t targs, i;
36365
36366 proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &flags);
36367 offset += 1;
36368 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36369 offset += 1;
36370 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36371 offset += 1;
36372 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_pdid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36373 offset += 4;
36374 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA0x00000000);
36375 offset += 6;
36376 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36377 offset += 4;
36378
36379 if (flags & (1<<6)) {
36380 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_ext, tvb, offset, 6, ENC_NA0x00000000);
36381 offset += 6;
36382 }
36383 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36384 offset += 4;
36385 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36386 offset += 4;
36387 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36388 targs = tvb_get_uint8(tvb, offset);
36389 offset += 1;
36390 for (i = 0; i < targs; i++) {
36391 static int * const targ_flags[] = {
36392 &hf_ieee80211_ff_hwmp_targ_to_flags,
36393 &hf_ieee80211_ff_hwmp_targ_usn_flags,
36394 NULL((void*)0)
36395 };
36396
36397 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_hwmp_targ_flags,
36398 ett_hwmp_targ_flags_tree, targ_flags, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36399
36400 offset += 1;
36401 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
36402 offset += 6;
36403 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36404 offset += 4;
36405 }
36406
36407 return tvb_captured_length(tvb);
36408}
36409
36410static int
36411ieee80211_tag_mesh_prep(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36412{
36413 int offset = 0;
36414
36415 uint32_t flags;
36416 proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &flags);
36417 offset += 1;
36418 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36419 offset += 1;
36420 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset , 1, ENC_LITTLE_ENDIAN0x80000000);
36421 offset += 1;
36422 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
36423 offset += 6;
36424 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36425 offset += 4;
36426 if (flags & (1<<6)) {
36427 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA0x00000000);
36428 offset += 6;
36429 }
36430 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36431 offset += 4;
36432 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36433 offset += 4;
36434 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA0x00000000);
36435 offset += 6;
36436 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36437 return tvb_captured_length(tvb);
36438}
36439
36440static int
36441ieee80211_tag_mesh_perr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
36442{
36443 int offset = 0;
36444 uint8_t targs, i;
36445
36446 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36447 offset += 1;
36448 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36449 targs = tvb_get_uint8(tvb, offset);
36450 offset += 1;
36451 for (i = 0; i < targs; i++) {
36452 uint8_t flags = tvb_get_uint8(tvb, offset);
36453
36454 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36455 offset += 1;
36456 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
36457 offset += 6;
36458 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36459 offset += 4;
36460 if (flags & (1<<6)) {
36461 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA0x00000000);
36462 offset += 6;
36463 }
36464 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
36465 }
36466 return tvb_captured_length(tvb);
36467}
36468
36469static int
36470ieee80211_tag_pxu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
36471{
36472 int tag_len = tvb_reported_length(tvb);
36473 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36474 int offset = 0;
36475 uint32_t pxu_count = 0, i, proxy_info_len;
36476 uint8_t pxu_flag;
36477 proto_item *item;
36478 proto_tree *subtree;
36479
36480 static int * const ieee80211_pxu_proxy_info_flags_byte[] = {
36481 &hf_ieee80211_pxu_proxy_info_flags_delete,
36482 &hf_ieee80211_pxu_proxy_info_flags_orig_is_proxy,
36483 &hf_ieee80211_pxu_proxy_info_flags_lifetime,
36484 &hf_ieee80211_pxu_proxy_info_flags_reserved,
36485 NULL((void*)0),
36486 };
36487
36488 /* PXU element (137) */
36489 if (tag_len < 8) {
36490 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36491 "Tag length %u wrong, must be at least 8", tag_len);
36492 return tvb_captured_length(tvb);
36493 }
36494
36495 proto_tree_add_item(tree, hf_ieee80211_pxu_pxu_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36496 offset += 1;
36497 proto_tree_add_item(tree, hf_ieee80211_pxu_pxu_origin_mac, tvb, offset, 6, ENC_NA0x00000000);
36498 offset += 6;
36499 proto_tree_add_item_ret_uint(tree, hf_ieee80211_pxu_no_proxy_info, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &pxu_count);
36500 offset += 1;
36501
36502 for (i = 0; i < pxu_count; i++) {
36503 pxu_flag = tvb_get_uint8(tvb, offset);
36504 proxy_info_len = 1 + 6 + 4 + ((pxu_flag & 0x2) ? 0 : 6) + ((pxu_flag & 0x4) ? 4 : 0);
36505
36506 item = proto_tree_add_item(tree, hf_ieee80211_pxu_proxy_info, tvb, offset, proxy_info_len, ENC_NA0x00000000);
36507 subtree = proto_item_add_subtree(item, ett_pxu_proxy_info_tree);
36508 proto_item_append_text(item, " #%u", (i + 1));
36509
36510 proto_tree_add_bitmask_with_flags(subtree, tvb, offset, hf_ieee80211_pxu_proxy_info_flags,
36511 ett_pxu_proxy_info_flags_tree, ieee80211_pxu_proxy_info_flags_byte,
36512 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36513 offset += 1;
36514
36515 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_ext_mac, tvb, offset, 6, ENC_NA0x00000000);
36516 offset += 6;
36517
36518 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_seq_num, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36519 offset += 4;
36520
36521 if (!(pxu_flag & 0x2)) {
36522 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_proxy_mac, tvb, offset, 6, ENC_NA0x00000000);
36523 offset += 6;
36524 }
36525
36526 if (pxu_flag & 0x4) {
36527 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36528 offset += 4;
36529 }
36530 }
36531
36532 proto_item_append_text(field_data->item_tag, " (%d entr%s)", pxu_count, plurality(pxu_count, "y", "ies")((pxu_count) == 1 ? ("y") : ("ies")));
36533 return tvb_captured_length(tvb);
36534}
36535
36536static int
36537ieee80211_tag_pxuc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
36538{
36539 int tag_len = tvb_reported_length(tvb);
36540 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36541 int offset = 0;
36542
36543 /* PXUC element (138) */
36544 if (tag_len != 7) {
36545 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36546 "Tag length %u wrong, must be = 7", tag_len);
36547 return tvb_captured_length(tvb);
36548 }
36549
36550 proto_tree_add_item(tree, hf_ieee80211_pxuc_pxu_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36551 offset += 1;
36552 proto_tree_add_item(tree, hf_ieee80211_pxuc_pxu_recip_mac, tvb, offset, 6, ENC_NA0x00000000);
36553
36554 return tvb_captured_length(tvb);
36555}
36556
36557static int
36558ieee80211_tag_mic(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36559{
36560 int tag_len = tvb_reported_length(tvb);
36561 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36562
36563 if ((tag_len != 16) && (tag_len != 24))
36564 {
36565 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36566 "MIC Tag Length %u wrong, must be 16 or 24", tag_len);
36567 return tvb_captured_length(tvb);
36568 }
36569
36570 proto_tree_add_item(tree, hf_ieee80211_mesh_mic, tvb, 0, tag_len, ENC_NA0x00000000);
36571 return tvb_captured_length(tvb);
36572}
36573
36574static int
36575ieee80211_tag_rann(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36576{
36577 int offset = 0;
36578 proto_tree_add_item(tree, hf_ieee80211_rann_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36579 offset += 1;
36580 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36581 offset += 1;
36582 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36583 offset += 1;
36584 proto_tree_add_item(tree, hf_ieee80211_rann_root_sta, tvb, offset, 6, ENC_NA0x00000000);
36585 offset += 6;
36586 proto_tree_add_item(tree, hf_ieee80211_rann_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36587 offset += 4;
36588 proto_tree_add_item(tree, hf_ieee80211_rann_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36589 offset += 4;
36590 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36591 return tvb_captured_length(tvb);
36592}
36593
36594/* Mesh Channel Switch Parameters (118) */
36595static int
36596ieee80211_tag_mesh_channel_switch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36597{
36598 int tag_len = tvb_reported_length(tvb);
36599 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36600 int offset = 0;
36601 static int * const ieee80211_mesh_chswitch_flag[] = {
36602 &hf_ieee80211_mesh_chswitch_flag_initiator,
36603 &hf_ieee80211_mesh_chswitch_flag_txrestrict,
36604 NULL((void*)0)
36605 };
36606
36607 if (tag_len != 6)
36608 {
36609 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
36610 return tvb_captured_length(tvb);
36611 }
36612
36613 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36614 proto_item_append_text(field_data->item_tag, " TTL: %d", tvb_get_uint8(tvb, offset));
36615 offset += 1;
36616
36617 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_mesh_channel_switch_flag,
36618 ett_mesh_chswitch_flag_tree, ieee80211_mesh_chswitch_flag, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36619 offset += 1;
36620
36621 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_reason_code, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36622 offset += 2;
36623
36624 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_precedence_value, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36625 return tvb_captured_length(tvb);
36626}
36627
36628/* Mesh Awake Window Parameters (119) */
36629static int
36630ieee80211_tag_mesh_awake_window(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36631{
36632 int tag_len = tvb_reported_length(tvb);
36633 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36634 int offset = 0;
36635
36636 if (tag_len != 2) {
36637 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36638 "Tag length %u wrong, must be = 2", tag_len);
36639 return tvb_captured_length(tvb);
36640 }
36641
36642 proto_tree_add_item(tree, hf_ieee80211_mesh_awake_window, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36643 return tvb_captured_length(tvb);
36644}
36645
36646static int
36647ieee80211_tag_channel_switch_announcement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36648{
36649 int tag_len = tvb_reported_length(tvb);
36650 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36651 int offset = 0;
36652 if (tag_len != 4)
36653 {
36654 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
36655 return tvb_captured_length(tvb);
36656 }
36657
36658 add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
36659 return tvb_captured_length(tvb);
36660}
36661
36662static int
36663ieee80211_tag_supported_operating_classes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36664{
36665 int tag_len = tvb_reported_length(tvb);
36666 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36667 int offset = 0;
36668 proto_item* item = NULL((void*)0);
36669 uint8_t field_len = 0;
36670 uint8_t alt_op_class_field[256];
36671
36672 if (tag_len < 2) {
36673 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
36674 return tvb_captured_length(tvb);
36675 } else if (tag_len > 255) {
36676 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, uint8 <= 255", tag_len);
36677 return tvb_captured_length(tvb);
36678 }
36679
36680 proto_tree_add_item(tree, hf_ieee80211_tag_supported_ope_classes_current, tvb, offset++, 1, ENC_NA0x00000000);
36681
36682 for (int i = offset; i < tag_len; i++) {
36683 uint8_t op_class = tvb_get_uint8(tvb, i);
36684 /* Field terminates immediately before OneHundredAndThirty or Zero delimiter */
36685 if (op_class == 130 || op_class == 0) {
36686 break;
36687 }
36688 alt_op_class_field[field_len++] = op_class;
36689 }
36690 if (field_len) {
36691 item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_ope_classes_alternate, tvb, offset, field_len, ENC_NA0x00000000);
36692 }
36693 for (int i = 0; i < field_len; i++) {
36694 proto_item_append_text(item, i == 0 ? ": %d":", %d", alt_op_class_field[i]);
36695 }
36696
36697 /* TODO parse optional Current Operating Class Extension Sequence field */
36698 /* TODO parse optional Operating Class Duple Sequence field */
36699 return tvb_captured_length(tvb);
36700}
36701
36702static int
36703ieee80211_tag_bss_parameter_change(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36704{
36705 int tag_len = tvb_reported_length(tvb);
36706 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36707 int offset = 0;
36708 bool_Bool size;
36709 if (tag_len != 7)
36710 {
36711 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 7", tag_len);
36712 return tvb_captured_length(tvb);
36713 }
36714 size = (tvb_get_uint8(tvb, offset) & 0x02) >> 1;
36715 proto_tree_add_item(tree, hf_ieee80211_tag_move, tvb, offset, 1, ENC_NA0x00000000);
36716 proto_tree_add_item(tree, hf_ieee80211_tag_size, tvb, offset, 1, ENC_NA0x00000000);
36717 offset += 1;
36718 proto_tree_add_item(tree, hf_ieee80211_tag_tbtt_offset, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36719 offset += 4;
36720 if(size == true1) { /* if size bit is 0, the field is reserved. */
36721 proto_tree_add_item(tree, hf_ieee80211_tag_bi_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36722 }
36723 return tvb_captured_length(tvb);
36724}
36725
36726static int
36727ieee80211_tag_dmg_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36728{
36729 int tag_len = tvb_reported_length(tvb);
36730 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36731 int offset = 0;
36732 static int * const ieee80211_tag_dmg_cap1[] = {
36733 &hf_ieee80211_tag_reverse_direction,
36734 &hf_ieee80211_tag_hlts,
36735 &hf_ieee80211_tag_tpc,
36736 &hf_ieee80211_tag_spsh,
36737 &hf_ieee80211_tag_rx_antenna,
36738 &hf_ieee80211_tag_fast_link,
36739 &hf_ieee80211_tag_num_sectors,
36740 &hf_ieee80211_tag_rxss_length,
36741 &hf_ieee80211_tag_reciprocity,
36742 &hf_ieee80211_tag_max_ampdu_exp,
36743 NULL((void*)0)
36744 };
36745
36746 static int * const ieee80211_tag_dmg_cap2[] = {
36747 &hf_ieee80211_tag_min_mpdu_spacing,
36748 &hf_ieee80211_tag_ba_flow_control,
36749 &hf_ieee80211_tag_max_sc_rx_mcs,
36750 &hf_ieee80211_tag_max_ofdm_rx_mcs,
36751 &hf_ieee80211_tag_max_sc_tx_mcs,
36752 &hf_ieee80211_tag_max_ofdm_tx_mcs,
36753 NULL((void*)0)
36754 };
36755
36756 static int * const ieee80211_tag_dmg_cap3[] = {
36757 &hf_ieee80211_tag_low_power_supported,
36758 &hf_ieee80211_tag_code_rate,
36759 &hf_ieee80211_tag_dtp,
36760 &hf_ieee80211_tag_appdu_supp,
36761 &hf_ieee80211_tag_heartbeat,
36762 &hf_ieee80211_tag_other_aid,
36763 &hf_ieee80211_tag_pattern_recip,
36764 &hf_ieee80211_tag_heartbeat_elapsed,
36765 &hf_ieee80211_tag_grant_ack_supp,
36766 &hf_ieee80211_tag_RXSSTxRate_supp,
36767 NULL((void*)0)
36768 };
36769
36770 static int * const ieee80211_tag_dmg_cap4[] = {
36771 &hf_ieee80211_tag_pcp_tddti,
36772 &hf_ieee80211_tag_pcp_PSA,
36773 &hf_ieee80211_tag_pcp_handover,
36774 &hf_ieee80211_tag_pcp_max_assoc,
36775 &hf_ieee80211_tag_pcp_power_src,
36776 &hf_ieee80211_tag_pcp_decenter,
36777 &hf_ieee80211_tag_pcp_forwarding,
36778 &hf_ieee80211_tag_pcp_center,
36779 NULL((void*)0)
36780 };
36781
36782 static int * const ieee80211_tag_dmg_cap5[] = {
36783 &hf_ieee80211_tag_ext_sc_mcs_max_tx,
36784 &hf_ieee80211_tag_ext_sc_mcs_tx_code_7_8,
36785 &hf_ieee80211_tag_ext_sc_mcs_max_rx,
36786 &hf_ieee80211_tag_ext_sc_mcs_rx_code_7_8,
36787 NULL((void*)0)
36788 };
36789
36790 /*
36791 * Plenty of devices still do not conform to the older version of this
36792 * field. So, it must be at least 17 bytes in length.
36793 */
36794 if (tag_len < 17)
36795 {
36796 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);
36797 return tvb_captured_length(tvb);
36798 }
36799
36800 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_sta_addr, tvb, offset, 6, ENC_NA0x00000000);
36801 offset += 6;
36802 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_aid, tvb, offset, 1, ENC_NA0x00000000);
36803 offset += 1;
36804 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_dmg_cap1, ENC_LITTLE_ENDIAN0x80000000);
36805 offset += 3;
36806 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_dmg_cap2, ENC_LITTLE_ENDIAN0x80000000);
36807 offset += 3;
36808 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_dmg_cap3, ENC_LITTLE_ENDIAN0x80000000);
36809 offset += 2;
36810 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_dmg_cap4, ENC_LITTLE_ENDIAN0x80000000);
36811 offset += 2;
36812
36813 /*
36814 * There are many captures out there that do not conform to the 2016
36815 * version, so give them a malformed IE message now after we have dissected
36816 * the above
36817 */
36818 if (tag_len != 22)
36819 {
36820 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);
36821 return tvb_captured_length(tvb);
36822 }
36823
36824 proto_tree_add_item(tree, hf_ieee80211_tag_sta_beam_track, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36825 offset += 2;
36826 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_dmg_cap5, ENC_LITTLE_ENDIAN0x80000000);
36827 offset += 1;
36828 proto_tree_add_item(tree, hf_ieee80211_tag_max_basic_sf_amsdu, tvb, offset, 1, ENC_NA0x00000000);
36829 offset += 1;
36830 proto_tree_add_item(tree, hf_ieee80211_tag_max_short_sf_amsdu, tvb, offset, 1, ENC_NA0x00000000);
36831
36832 return tvb_captured_length(tvb);
36833}
36834
36835static int
36836ieee80211_tag_dmg_operation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36837{
36838 int tag_len = tvb_reported_length(tvb);
36839 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36840 int offset = 0;
36841 static int * const ieee80211_tag_dmg_operation_flags[] = {
36842 &hf_ieee80211_tag_pcp_tddti,
36843 &hf_ieee80211_tag_pcp_PSA,
36844 &hf_ieee80211_tag_pcp_handover,
36845 NULL((void*)0)
36846 };
36847
36848 if (tag_len != 10)
36849 {
36850 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 10", tag_len);
36851 return tvb_captured_length(tvb);
36852 }
36853 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_dmg_operation_flags, ENC_LITTLE_ENDIAN0x80000000);
36854 offset += 2;
36855 proto_tree_add_item(tree, hf_ieee80211_tag_PSRSI, tvb, offset, 1, ENC_NA0x00000000);
36856 offset += 1;
36857 proto_tree_add_item(tree, hf_ieee80211_tag_min_BHI_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36858 offset += 2;
36859 proto_tree_add_item(tree, hf_ieee80211_tag_brdct_sta_info_dur, tvb, offset, 1, ENC_NA0x00000000);
36860 offset += 1;
36861 proto_tree_add_item(tree, hf_ieee80211_tag_assoc_resp_confirm_time, tvb, offset, 1, ENC_NA0x00000000);
36862 offset += 1;
36863 proto_tree_add_item(tree, hf_ieee80211_tag_min_pp_duration, tvb, offset, 1, ENC_NA0x00000000);
36864 offset += 1;
36865 proto_tree_add_item(tree, hf_ieee80211_tag_SP_idle_timeout, tvb, offset, 1, ENC_NA0x00000000);
36866 offset += 1;
36867 proto_tree_add_item(tree, hf_ieee80211_tag_max_lost_beacons, tvb, offset, 1, ENC_NA0x00000000);
36868 return tvb_captured_length(tvb);
36869}
36870
36871static int
36872ieee80211_tag_antenna_section_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36873{
36874 int tag_len = tvb_reported_length(tvb);
36875 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36876 int offset = 0;
36877 static int * const ieee80211_tag_antenna[] = {
36878 &hf_ieee80211_tag_type,
36879 &hf_ieee80211_tag_tap1,
36880 &hf_ieee80211_tag_state1,
36881 &hf_ieee80211_tag_tap2,
36882 &hf_ieee80211_tag_state2,
36883 NULL((void*)0)
36884 };
36885
36886 if (tag_len != 4)
36887 {
36888 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
36889 return tvb_captured_length(tvb);
36890 }
36891 proto_tree_add_bitmask_list(tree, tvb, offset, 4, ieee80211_tag_antenna, ENC_LITTLE_ENDIAN0x80000000);
36892 return tvb_captured_length(tvb);
36893}
36894
36895static int
36896ieee80211_tag_extended_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36897{
36898 int tag_len = tvb_reported_length(tvb);
36899 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36900 int offset = 0;
36901 int i;
36902 bool_Bool isGrant;
36903 proto_tree * alloc_tree;
36904 if ((tag_len%15) != 0)
36905 {
36906 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);
36907 return tvb_captured_length(tvb);
36908 }
36909 isGrant = ((field_data->ftype==CTRL_GRANT0x164)||(field_data->ftype==CTRL_GRANT_ACK0x167));
36910 for(i=0; i < tag_len; i+=15) {
36911 alloc_tree = proto_tree_add_subtree_format(tree, tvb, offset, 15, ett_allocation_tree, NULL((void*)0), "Allocation %d", i/15);
36912 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36913 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36914 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pseudo_static, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36915 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_truncatable, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36916 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_extendable, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36917 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pcp_active, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36918 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_lp_sc_used, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36919 offset += 2;
36920 offset += add_ff_beamforming_ctrl(alloc_tree, tvb, pinfo, offset, isGrant);
36921 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_src_aid, tvb, offset, 1, ENC_NA0x00000000);
36922 offset += 1;
36923 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_dest_aid, tvb, offset, 1, ENC_NA0x00000000);
36924 offset += 1;
36925 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36926 offset += 4;
36927 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36928 offset += 2;
36929 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_num_blocks, tvb, offset, 1, ENC_NA0x00000000);
36930 offset += 1;
36931 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36932 offset += 2;
36933 }
36934 return tvb_captured_length(tvb);
36935}
36936
36937static int
36938ieee80211_tag_sta_availability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36939{
36940 int tag_len = tvb_reported_length(tvb);
36941 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36942 int offset = 0;
36943 int i;
36944 proto_tree * sta_info_tree;
36945 if ((tag_len%2) != 0)
36946 {
36947 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);
36948 return tvb_captured_length(tvb);
36949 }
36950 for(i=0; i < tag_len; i+=2) {
36951 sta_info_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2, ett_sta_info, NULL((void*)0), "STA Info %d", i/2);
36952 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36953 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_cbap, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36954 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_pp_avail, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36955 offset += 2;
36956 }
36957 return tvb_captured_length(tvb);
36958}
36959
36960static int
36961ieee80211_tag_next_dmg_ati(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36962{
36963 int tag_len = tvb_reported_length(tvb);
36964 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36965 int offset = 0;
36966 if (tag_len != 6)
36967 {
36968 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
36969 return tvb_captured_length(tvb);
36970 }
36971 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36972 offset += 4;
36973 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36974 return tvb_captured_length(tvb);
36975}
36976
36977static int
36978ieee80211_tag_nextpcp_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36979{
36980 int tag_len = tvb_reported_length(tvb);
36981 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36982 int offset = 0;
36983 int i;
36984 if (tag_len < 1)
36985 {
36986 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);
36987 return tvb_captured_length(tvb);
36988 }
36989 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_token, tvb, offset, 1, ENC_NA0x00000000);
36990 offset += 1;
36991 for(i=0; i < tag_len-1; i+=1) {
36992 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_list, tvb, offset, 1, ENC_NA0x00000000);
36993 offset += 1;
36994 }
36995 return tvb_captured_length(tvb);
36996}
36997
36998static int
36999ieee80211_tag_pcp_handover(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37000{
37001 int tag_len = tvb_reported_length(tvb);
37002 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37003 int offset = 0;
37004 if (tag_len != 13)
37005 {
37006 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 13", tag_len);
37007 return tvb_captured_length(tvb);
37008 }
37009 proto_tree_add_item(tree, hf_ieee80211_tag_old_bssid, tvb, offset, 6, ENC_NA0x00000000);
37010 offset += 6;
37011 proto_tree_add_item(tree, hf_ieee80211_tag_new_pcp_addr, tvb, offset, 6, ENC_NA0x00000000);
37012 offset += 6;
37013 proto_tree_add_item(tree, hf_ieee80211_tag_remaining_BI, tvb, offset, 1, ENC_NA0x00000000);
37014 return tvb_captured_length(tvb);
37015}
37016
37017static int
37018ieee80211_tag_beamlink_maintenance(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37019{
37020 int tag_len = tvb_reported_length(tvb);
37021 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37022 int offset = 0;
37023 if (tag_len != 1)
37024 {
37025 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
37026 return tvb_captured_length(tvb);
37027 }
37028 add_ff_beamformed_link(tree, tvb, pinfo, offset);
37029 return tvb_captured_length(tvb);
37030}
37031
37032static int
37033ieee80211_tag_quiet_period_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37034{
37035 int tag_len = tvb_reported_length(tvb);
37036 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37037 int offset = 0;
37038 if (tag_len != 10)
37039 {
37040 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 10", tag_len);
37041 return tvb_captured_length(tvb);
37042 }
37043 proto_tree_add_item(tree, hf_ieee80211_tag_request_token, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37044 offset += 2;
37045 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA0x00000000);
37046 offset += 6;
37047 add_ff_sta_address(tree, tvb, pinfo, offset);
37048 return tvb_captured_length(tvb);
37049}
37050
37051static int
37052ieee80211_tag_relay_transfer_param(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37053{
37054 int tag_len = tvb_reported_length(tvb);
37055 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37056 int offset = 0;
37057
37058 if (tag_len != 8)
37059 {
37060 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
37061 return tvb_captured_length(tvb);
37062 }
37063 proto_tree_add_item(tree, hf_ieee80211_tag_duplex_relay, tvb, offset, 1, ENC_NA0x00000000);
37064 proto_tree_add_item(tree, hf_ieee80211_tag_cooperation_relay, tvb, offset, 1, ENC_NA0x00000000);
37065 proto_tree_add_item(tree, hf_ieee80211_tag_tx_mode, tvb, offset, 1, ENC_NA0x00000000);
37066 proto_tree_add_item(tree, hf_ieee80211_tag_link_change_interval, tvb, offset+1, 1, ENC_NA0x00000000);
37067 proto_tree_add_item(tree, hf_ieee80211_tag_data_sensing_time, tvb, offset+2, 1, ENC_NA0x00000000);
37068 proto_tree_add_item(tree, hf_ieee80211_tag_first_period, tvb, offset+3, 2, ENC_LITTLE_ENDIAN0x80000000);
37069 proto_tree_add_item(tree, hf_ieee80211_tag_second_period, tvb, offset+5, 2, ENC_LITTLE_ENDIAN0x80000000);
37070 return tvb_captured_length(tvb);
37071}
37072
37073static int
37074ieee80211_tag_dmg_beam_refinement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37075{
37076 int tag_len = tvb_reported_length(tvb);
37077 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37078 int offset = 0;
37079 static int * const ieee80211_dmg_beam_refinement_fields[] = {
37080 &hf_ieee80211_tag_initiator,
37081 &hf_ieee80211_tag_tx_train_res,
37082 &hf_ieee80211_tag_rx_train_res,
37083 &hf_ieee80211_tag_tx_trn_ok,
37084 &hf_ieee80211_tag_txss_fbck_req,
37085 &hf_ieee80211_tag_bs_fbck,
37086 &hf_ieee80211_tag_bs_fbck_antenna_id,
37087 &hf_ieee80211_tag_snr_requested,
37088 &hf_ieee80211_tag_channel_measurement_requested,
37089 &hf_ieee80211_tag_number_of_taps_requested,
37090 &hf_ieee80211_tag_sector_id_order_req,
37091 &hf_ieee80211_tag_snr_present,
37092 &hf_ieee80211_tag_channel_measurement_present,
37093 &hf_ieee80211_tag_tap_delay_present,
37094 &hf_ieee80211_tag_number_of_taps_present,
37095 &hf_ieee80211_tag_number_of_measurement,
37096 &hf_ieee80211_tag_sector_id_order_present,
37097 &hf_ieee80211_tag_number_of_beams,
37098 &hf_ieee80211_tag_mid_extension,
37099 &hf_ieee80211_tag_capability_request,
37100 &hf_ieee80211_tag_beam_refine_reserved,
37101 NULL((void*)0)
37102 };
37103
37104 if (tag_len != 5)
37105 {
37106 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
37107 return tvb_captured_length(tvb);
37108 }
37109
37110 proto_tree_add_bitmask_list(tree, tvb, offset, 5, ieee80211_dmg_beam_refinement_fields, ENC_LITTLE_ENDIAN0x80000000);
37111 return tvb_captured_length(tvb);
37112}
37113
37114static int
37115ieee80211_tag_wakeup_schedule_ad(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37116{
37117 int tag_len = tvb_reported_length(tvb);
37118 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37119 int offset = 0;
37120
37121 if (tag_len != 8)
37122 {
37123 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
37124 return tvb_captured_length(tvb);
37125 }
37126 proto_tree_add_item(tree, hf_ieee80211_tag_bi_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
37127 offset += 4;
37128 proto_tree_add_item(tree, hf_ieee80211_tag_sleep_cycle, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37129 offset += 2;
37130 proto_tree_add_item(tree, hf_ieee80211_tag_num_awake_bis, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37131 return tvb_captured_length(tvb);
37132}
37133
37134static int
37135ieee80211_tag_dmg_tspec(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37136{
37137 int tag_len = tvb_reported_length(tvb);
37138 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37139 int offset = 0;
37140
37141 bool_Bool isGrant;
37142 int num_constraints;
37143 if (tag_len < 14)
37144 {
37145 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);
37146 return tvb_captured_length(tvb);
37147 }
37148 static int * const ieee80211_tag_tspec_flags[] = {
37149 &hf_ieee80211_tag_tspec_allocation_id,
37150 &hf_ieee80211_tag_tspec_allocation_type,
37151 &hf_ieee80211_tag_tspec_allocation_format,
37152 &hf_ieee80211_tag_tspec_pseudo_static,
37153 &hf_ieee80211_tag_tspec_truncatable,
37154 &hf_ieee80211_tag_tspec_extendable,
37155 &hf_ieee80211_tag_tspec_lp_sc_used,
37156 &hf_ieee80211_tag_tspec_up,
37157 &hf_ieee80211_tag_tap2,
37158 &hf_ieee80211_tag_tspec_dest_aid,
37159 NULL((void*)0)
37160 };
37161
37162 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_tspec_flags, ENC_LITTLE_ENDIAN0x80000000);
37163 offset += 3;
37164 isGrant = ((field_data->ftype==CTRL_GRANT0x164)||(field_data->ftype==CTRL_GRANT_ACK0x167));
37165 offset += add_ff_beamforming_ctrl(tree, tvb, pinfo, 2, isGrant);
37166 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37167 offset += 2;
37168 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37169 offset += 2;
37170 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_max_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37171 offset += 2;
37172 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37173 offset += 2;
37174 num_constraints = tvb_get_uint8(tvb, offset);
37175 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_num_of_constraints, tvb, offset, 1, ENC_NA0x00000000);
37176 offset += 1;
37177 while(num_constraints > 0) {
37178 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
37179 offset += 4;
37180 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37181 offset += 2;
37182 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37183 offset += 2;
37184 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_interferer_mac, tvb, offset, 2, ENC_NA0x00000000);
37185 offset += 6;
37186 num_constraints--;
37187 }
37188 return tvb_captured_length(tvb);
37189}
37190
37191static int
37192ieee80211_tag_channel_measurement_fb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37193{
37194 int tag_len = tvb_reported_length(tvb);
37195 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37196 int offset = 0;
37197
37198 int num_measurement;
37199 if (tag_len%5 != 0)
37200 {
37201 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);
37202 return tvb_captured_length(tvb);
37203 }
37204 num_measurement = tvb_get_uint8(tvb, offset+1);
37205 offset += 2;
37206 while(num_measurement > 0) {
37207 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA0x00000000);
37208 offset += 1;
37209 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_relative_I, tvb, offset, 1, ENC_NA0x00000000);
37210 offset += 1;
37211 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_relative_Q, tvb, offset, 1, ENC_NA0x00000000);
37212 offset += 1;
37213 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_tap_delay, tvb, offset, 1, ENC_NA0x00000000);
37214 offset += 1;
37215 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_sector_id, tvb, offset, 1, ENC_NA0x00000000);
37216 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
37217 offset += 1;
37218 num_measurement--;
37219 }
37220 return tvb_captured_length(tvb);
37221}
37222
37223static int
37224ieee80211_tag_awake_window(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37225{
37226 int tag_len = tvb_reported_length(tvb);
37227 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37228
37229 if (tag_len != 2)
37230 {
37231 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 2", tag_len);
37232 }
37233 else
37234 {
37235 proto_tree_add_item(tree, hf_ieee80211_tag_awake_window, tvb, 0, 2, ENC_LITTLE_ENDIAN0x80000000);
37236 }
37237 return tvb_captured_length(tvb);
37238}
37239
37240static int
37241ieee80211_tag_addba_ext(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37242{
37243 int tag_len = tvb_reported_length(tvb);
37244 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37245
37246 if (tag_len != 1)
37247 {
37248 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
37249 }
37250 else
37251 {
37252 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_no_frag, tvb, 0, 1, ENC_NA0x00000000);
37253 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_he_fragmentation_operation, tvb, 0, 1, ENC_NA0x00000000);
37254 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_reserved, tvb, 0, 1, ENC_NA0x00000000);
37255 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_buffer_size, tvb, 0, 1, ENC_NA0x00000000);
37256 }
37257 return tvb_captured_length(tvb);
37258}
37259
37260static int
37261ieee80211_tag_multi_band(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37262{
37263 int tag_len = tvb_reported_length(tvb);
37264 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37265 int offset = 0;
37266 bool_Bool chiper_present, addr_present;
37267 static int * const ieee80211_tag_multi_band_ctrl[] = {
37268 &hf_ieee80211_tag_multi_band_ctrl_sta_role,
37269 &hf_ieee80211_tag_multi_band_ctrl_addr_present,
37270 &hf_ieee80211_tag_multi_band_ctrl_cipher_present,
37271 NULL((void*)0)
37272 };
37273 static int * const ieee80211_tag_multi_band_conn[] = {
37274 &hf_ieee80211_tag_multi_band_conn_ap,
37275 &hf_ieee80211_tag_multi_band_conn_pcp,
37276 &hf_ieee80211_tag_multi_band_conn_dls,
37277 &hf_ieee80211_tag_multi_band_conn_tdls,
37278 &hf_ieee80211_tag_multi_band_conn_ibss,
37279 NULL((void*)0)
37280 };
37281
37282 if (tag_len < 22)
37283 {
37284 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);
37285 return tvb_captured_length(tvb);
37286 }
37287 chiper_present = (tvb_get_letohs(tvb, offset) & 0x08) >> 3;
37288 addr_present = (tvb_get_letohs(tvb, offset) & 0x10) >> 4;
37289 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_multi_band_ctrl, ENC_NA0x00000000);
37290 offset += 1;
37291 offset += add_ff_band_id(tree, tvb, pinfo, 1);
37292 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_oper_class, tvb, offset, 1, ENC_NA0x00000000);
37293 offset += 1;
37294 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_channel_number, tvb, offset, 1, ENC_NA0x00000000);
37295 offset += 1;
37296 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA0x00000000);
37297 offset += 6;
37298 offset += add_ff_beacon_interval(tree, tvb, pinfo, 2);
37299 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_tsf_offset, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
37300 offset += 8;
37301
37302 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_multi_band_conn, ENC_NA0x00000000);
37303 offset += 1;
37304 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_fst_timeout, tvb, offset, 1, ENC_NA0x00000000);
37305 offset += 1;
37306 if(addr_present)
37307 {
37308 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_sta_mac, tvb, offset, 6, ENC_NA0x00000000);
37309 offset += 6;
37310 }
37311 if(chiper_present)
37312 {
37313 proto_item *rsn_pcs_count, *rsn_pcs_item, *rsn_sub_pcs_item;
37314 proto_tree *rsn_pcs_tree, *rsn_sub_pcs_tree;
37315 int ii;
37316 uint16_t pcs_count;
37317 int tag_end = tvb_reported_length(tvb);
37318 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37319 pcs_count = tvb_get_letohs(tvb, offset);
37320 offset += 2;
37321
37322 if (offset + (pcs_count * 4) > tag_end)
37323 {
37324 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
37325 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
37326 pcs_count = (tag_end - offset) / 4;
37327 }
37328
37329 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA0x00000000);
37330 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
37331 for (ii = 0; ii < pcs_count; ii++)
37332 {
37333 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
37334 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
37335 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
37336
37337 /* Check if OUI is 00:0F:AC (ieee80211) */
37338 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
37339 {
37340 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
37341 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
37342 } else {
37343 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
37344 }
37345 offset += 4;
37346 }
37347 }
37348
37349 return tvb_captured_length(tvb);
37350}
37351
37352static int
37353ieee80211_tag_dmg_link_margin(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37354{
37355 int tag_len = tvb_reported_length(tvb);
37356 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37357 int offset = 0;
37358
37359 if (tag_len != 8)
37360 {
37361 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
37362 return tvb_captured_length(tvb);
37363 }
37364 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA0x00000000);
37365 offset += 1;
37366 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_mcs, tvb, offset, 1, ENC_NA0x00000000);
37367 offset += 1;
37368 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_link_margin, tvb, offset, 1, ENC_NA0x00000000);
37369 offset += 1;
37370 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA0x00000000);
37371 offset += 1;
37372 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
37373 return tvb_captured_length(tvb);
37374}
37375
37376static int
37377ieee80211_tag_dmg_link_adaption_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37378{
37379 int tag_len = tvb_reported_length(tvb);
37380 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37381 int offset = 0;
37382
37383 if (tag_len != 5)
37384 {
37385 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
37386 return tvb_captured_length(tvb);
37387 }
37388 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA0x00000000);
37389 offset += 1;
37390 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
37391 return tvb_captured_length(tvb);
37392}
37393
37394static int
37395ieee80211_tag_switching_stream(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37396{
37397 int tag_len = tvb_reported_length(tvb);
37398 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37399 int offset = 0;
37400 static int * const ieee80211_tag_switching_stream_flags[] = {
37401 &hf_ieee80211_tag_switching_stream_old_tid,
37402 &hf_ieee80211_tag_switching_stream_old_direction,
37403 &hf_ieee80211_tag_switching_stream_new_tid,
37404 &hf_ieee80211_tag_switching_stream_new_direction,
37405 &hf_ieee80211_tag_switching_stream_new_valid_id,
37406 &hf_ieee80211_tag_switching_stream_llt_type,
37407 NULL((void*)0)
37408 };
37409
37410 int param_num;
37411 if (tag_len < 4)
37412 {
37413 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);
37414 return tvb_captured_length(tvb);
37415 }
37416 offset += add_ff_band_id(tree, tvb, pinfo, 1);
37417 offset += add_ff_band_id(tree, tvb, pinfo, 1);
37418 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_non_qos, tvb, offset, 1, ENC_NA0x00000000);
37419 offset += 1;
37420 param_num = tvb_get_letohs(tvb, offset);
37421 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_param_num, tvb, offset, 1, ENC_NA0x00000000);
37422 offset += 1;
37423 while(param_num > 0)
37424 {
37425 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_switching_stream_flags, ENC_NA0x00000000);
37426 param_num--;
37427 offset += 2;
37428 }
37429 return tvb_captured_length(tvb);
37430}
37431
37432static const range_string channel_usage_mode[] = {
37433 { 0, 0, "Channel-usage-aidable BSS" },
37434 { 1, 1, "Off-channel TDLS Direct Link" },
37435 { 2, 2, "Channel-usage-aidable BSS in which none of the channel-usage-aiding BSSs that belong to the same ESS" },
37436 { 3, 3, "Unavailability Indication" },
37437 { 4, 4, "Channel-usage-aidable BSS Channel Switch Request" },
37438 { 5, 5, "Capability Notification" },
37439 { 6, 254, "Reserved" },
37440 { 255, 255, "Unknown Request" },
37441 { 0, 0, NULL((void*)0) }
37442};
37443
37444static int
37445ieee80211_tag_channel_usage(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
37451 if (tag_len < 1)
37452 {
37453 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);
37454 return tvb_captured_length(tvb);
37455 }
37456
37457 proto_tree_add_item(tree, hf_ieee80211_tag_channel_usage_mode, tvb, offset, 1, ENC_NA0x00000000);
37458 offset += 1;
37459
37460 while (offset < tag_len) {
37461 offset += add_ff_operating_class(tree, tvb, pinfo, offset);
37462 offset += add_ff_channel(tree, tvb, pinfo, offset);
37463 }
37464
37465 return tvb_captured_length(tvb);
37466}
37467
37468static const range_string dms_req_type[] = {
37469 { 0, 0, "Add" },
37470 { 1, 1, "Remove" },
37471 { 2, 2, "Change" },
37472 { 3, 255, "Reserved" },
37473 { 0, 0, NULL((void*)0) }
37474};
37475
37476static int
37477ieee80211_tag_dms_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37478{
37479 int tag_len = tvb_reported_length(tvb);
37480 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37481 int offset = 0;
37482
37483 if (tag_len < 3)
37484 {
37485 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);
37486 return tvb_captured_length(tvb);
37487 }
37488
37489 proto_tree_add_item(tree, hf_ieee80211_tag_dms_id, tvb, offset, 1, ENC_NA0x00000000);
37490 offset += 1;
37491
37492 proto_tree_add_item(tree, hf_ieee80211_tag_dms_length, tvb, offset, 1, ENC_NA0x00000000);
37493 offset += 1;
37494
37495 proto_tree_add_item(tree, hf_ieee80211_tag_dms_req_type, tvb, offset, 1, ENC_NA0x00000000);
37496 offset += 1;
37497
37498 /* There will be at least one tclass element ... */
37499 while ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37500 tvb_get_uint8(tvb, offset) == TAG_TCLAS14) {
37501 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37502 }
37503 /* There could be a TCLAS PROCESS element ... */
37504 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37505 tvb_get_uint8(tvb, offset) == TAG_TCLAS_PROCESS44) {
37506 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37507 }
37508 /* There could be a TSPEC element ... */
37509 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37510 tvb_get_uint8(tvb, offset) == TAG_TSPEC13) {
37511 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37512 }
37513 /* Subelements? */
37514
37515 return tvb_captured_length(tvb);
37516}
37517
37518static const range_string dms_resp_type[] = {
37519 { 0, 0, "Accept" },
37520 { 1, 1, "Denied" },
37521 { 2, 2, "Terminate" },
37522 { 3, 3, "GCR Advertise" },
37523 { 4, 255, "Reserved" },
37524 { 0, 0, NULL((void*)0) }
37525};
37526
37527static int
37528ieee80211_tag_dms_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37529{
37530 int tag_len = tvb_reported_length(tvb);
37531 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37532 int offset = 0;
37533
37534 if (tag_len < 5)
37535 {
37536 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);
37537 return tvb_captured_length(tvb);
37538 }
37539
37540 proto_tree_add_item(tree, hf_ieee80211_tag_dms_id, tvb, offset, 1, ENC_NA0x00000000);
37541 offset += 1;
37542
37543 proto_tree_add_item(tree, hf_ieee80211_tag_dms_length, tvb, offset, 1, ENC_NA0x00000000);
37544 offset += 1;
37545
37546 proto_tree_add_item(tree, hf_ieee80211_tag_dms_resp_type, tvb, offset, 1, ENC_NA0x00000000);
37547 offset += 1;
37548
37549 proto_tree_add_item(tree, hf_ieee80211_tag_dms_last_seq_control, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37550 offset += 2;
37551
37552 /* There will be at least one tclass element ... */
37553 while ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37554 tvb_get_uint8(tvb, offset) == TAG_TCLAS14) {
37555 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37556 }
37557 /* There could be a TCLAS PROCESS element ... */
37558 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37559 tvb_get_uint8(tvb, offset) == TAG_TCLAS_PROCESS44) {
37560 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37561 }
37562 /* There could be a TSPEC element ... */
37563 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37564 tvb_get_uint8(tvb, offset) == TAG_TSPEC13) {
37565 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
Value stored to 'offset' is never read
37566 }
37567 /* Subelements? */
37568
37569 return tvb_captured_length(tvb);
37570}
37571
37572static void
37573ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
37574 proto_tree *tree, int tagged_parameters_len, int ftype,
37575 association_sanity_check_t *association_sanity_check)
37576{
37577 int next_len;
37578 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
37579 while (tagged_parameters_len > 0) {
37580 uint8_t tag_no = tvb_get_uint8(tvb, offset);
37581
37582 /* TODO make callers optionally specify the list of valid IE IDs? */
37583 if ((next_len=add_tagged_field (pinfo, tree, tvb, offset, ftype, NULL((void*)0), 0, association_sanity_check)) == 0)
37584 break;
37585 if (next_len > tagged_parameters_len) {
37586 /* XXX - flag this as an error? */
37587 next_len = tagged_parameters_len;
37588 }
37589 offset += next_len;
37590 tagged_parameters_len -= next_len;
37591
37592 /* If FILS is used, all data after the FILS Session tag in a (re)association message is encrypted */
37593 if (association_sanity_check != NULL((void*)0) && association_sanity_check->has_fils_session) {
37594 proto_tree_add_item(tree, hf_ieee80211_fils_encrypted_data, tvb, offset, tagged_parameters_len, ENC_NA0x00000000);
37595 break;
37596 }
37597
37598 /* In an AMPE frame the data following the MIC element is encrypted */
37599 if ((tag_no == TAG_MIC140) && (association_sanity_check != NULL((void*)0)) && association_sanity_check->ampe_frame) {
37600 proto_tree_add_item(tree, hf_ieee80211_mesh_ampe_encrypted_data, tvb, offset, tagged_parameters_len, ENC_NA0x00000000);
37601 break;
37602 }
37603 }
37604}
37605
37606static void
37607ieee_80211_do_association_sanity_check(packet_info *pinfo, association_sanity_check_t *sanity_check)
37608{
37609 /* Given a [re-]association request frame, consider it in its totality and
37610 add expert information as appropriate */
37611
37612 if (sanity_check->association_has_mobility_domain_element) {
37613 /* This is an FT association, warn about any non-FT AKM suites */
37614 if (sanity_check->has_non_ft_akm_suite) {
37615 expert_add_info_format(pinfo, sanity_check->rsn_first_non_ft_akm_suite, &ei_ieee80211_mismatched_akm_suite,
37616 "Non-FT AKM suite is prohibited for FT association request");
37617 }
37618 } else {
37619 /* This is a non-FT association, warn about any FT AKM suites */
37620 if (sanity_check->has_ft_akm_suite) {
37621 expert_add_info_format(pinfo, sanity_check->rsn_first_ft_akm_suite, &ei_ieee80211_mismatched_akm_suite,
37622 "FT AKM suite is prohibited for non-FT association request");
37623 }
37624 }
37625}
37626
37627/* ************************************************************************* */
37628/* Dissect 802.11 management frame */
37629/* ************************************************************************* */
37630static void dissect_mgt_action(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset, association_sanity_check_t *sanity_check)
37631{
37632 proto_item *lcl_fixed_hdr;
37633 proto_tree *lcl_fixed_tree;
37634 proto_tree *tagged_tree;
37635 int tagged_parameter_tree_len;
37636
37637 lcl_fixed_tree = proto_tree_add_subtree(tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
37638 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0, sanity_check);
37639
37640 proto_item_set_len(lcl_fixed_hdr, offset);
37641 if (ieee80211_tvb_invalid)
37642 return; /* Buffer not available for further processing */
37643 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37644 if (tagged_parameter_tree_len > 0) {
37645 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
37646 tagged_parameter_tree_len);
37647 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37648 tagged_parameter_tree_len, MGT_ACTION0x0D,
37649 sanity_check);
37650 }
37651}
37652
37653static void
37654dissect_ieee80211_mgt(uint16_t fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
37655{
37656 proto_item *ti;
37657 proto_tree *mgt_tree;
37658 proto_tree *fixed_tree;
37659 proto_tree *tagged_tree;
37660 int offset = 0;
37661 int tagged_parameter_tree_len;
37662 bool_Bool is_s1g = sta_is_s1g(pinfo);
37663
37664 conversation_t *conversation;
37665 ieee80211_conversation_data_t *conversation_data;
37666
37667 association_sanity_check_t association_sanity_check;
37668 memset(&association_sanity_check, 0, sizeof(association_sanity_check));
37669
37670
37671 ieee80211_tvb_invalid = false0;
37672
37673 ti = proto_tree_add_item(tree, hf_ieee80211_mgt, tvb, 0, -1, ENC_NA0x00000000);
37674 mgt_tree = proto_item_add_subtree(ti, ett_80211_mgt);
37675 /*
37676 * Add the frame type to the pinfo for those cases where it is needed
37677 * to determine other things.
37678 * XXX - Is there any reason why this is file scoped? Couldn't this
37679 * be pinfo->pool?
37680 */
37681 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)))))
);
37682
37683 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)))
)
37684 {
37685
37686 case MGT_ASSOC_REQ0x00:
37687 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 4, false0);
37688 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37689 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
37690 offset = 4; /* Size of fixed fields */
37691
37692 tagged_parameter_tree_len =
37693 tvb_reported_length_remaining(tvb, offset);
37694 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37695 tagged_parameter_tree_len);
37696 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37697 tagged_parameter_tree_len, MGT_ASSOC_REQ0x00, &association_sanity_check);
37698 ieee_80211_do_association_sanity_check(pinfo, &association_sanity_check);
37699
37700 if (!pinfo->fd->visited) {
37701 if (!assoc_counter_in_auth) {
37702 association_counter++;
37703 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
37704 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
37705 } else {
37706 assoc_counter_in_auth = 0;
37707 }
37708 }
37709 conversation = find_or_create_wlan_conversation(pinfo);
37710 conversation_data = get_or_create_conversation_data(conversation);
37711 set_conversation_last_akm_suite(conversation_data,
37712 association_sanity_check.last_akm_suite);
37713 conversation_data->owe_group = association_sanity_check.owe_group;
37714 break;
37715
37716
37717 case MGT_ASSOC_RESP0x01:
37718 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, is_s1g ? 4 : 6,
37719 false0);
37720 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37721 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
37722 if (!is_s1g) {
37723 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
37724 offset = 6; /* Size of fixed fields */
37725 } else {
37726 offset = 4;
37727 }
37728
37729 tagged_parameter_tree_len =
37730 tvb_reported_length_remaining(tvb, offset);
37731 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37732 tagged_parameter_tree_len);
37733 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37734 tagged_parameter_tree_len, MGT_ASSOC_RESP0x01, &association_sanity_check);
37735 break;
37736
37737
37738 case MGT_REASSOC_REQ0x02:
37739 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 10, false0);
37740 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37741 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
37742 add_ff_current_ap_addr(fixed_tree, tvb, pinfo, 4);
37743 offset = 10; /* Size of fixed fields */
37744
37745 tagged_parameter_tree_len =
37746 tvb_reported_length_remaining(tvb, offset);
37747 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37748 tagged_parameter_tree_len);
37749 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37750 tagged_parameter_tree_len, MGT_REASSOC_REQ0x02, &association_sanity_check);
37751 ieee_80211_do_association_sanity_check(pinfo, &association_sanity_check);
37752
37753 if (!pinfo->fd->visited) {
37754 if (!assoc_counter_in_auth) {
37755 association_counter++;
37756 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
37757 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
37758 } else {
37759 assoc_counter_in_auth = 0;
37760 }
37761 }
37762 conversation = find_or_create_wlan_conversation(pinfo);
37763 conversation_data = get_or_create_conversation_data(conversation);
37764 set_conversation_last_akm_suite(conversation_data,
37765 association_sanity_check.last_akm_suite);
37766 conversation_data->owe_group = association_sanity_check.owe_group;
37767 break;
37768
37769 case MGT_REASSOC_RESP0x03:
37770 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6, false0);
37771 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37772 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
37773 if (!is_s1g) {
37774 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
37775 offset = 6; /* Size of fixed fields */
37776 } else {
37777 offset = 4;
37778 }
37779
37780 tagged_parameter_tree_len =
37781 tvb_reported_length_remaining(tvb, offset);
37782 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37783 tagged_parameter_tree_len);
37784 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37785 tagged_parameter_tree_len, MGT_REASSOC_RESP0x03, &association_sanity_check);
37786 break;
37787
37788
37789 case MGT_PROBE_REQ0x04:
37790 offset = 0;
37791 tagged_parameter_tree_len =
37792 tvb_reported_length_remaining(tvb, offset);
37793 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37794 tagged_parameter_tree_len);
37795 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37796 tagged_parameter_tree_len, MGT_PROBE_REQ0x04, NULL((void*)0));
37797 break;
37798
37799 case MGT_PROBE_RESP0x05:
37800 {
37801 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12, false0);
37802 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
37803 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
37804 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
37805 offset = 12; /* Size of fixed fields */
37806
37807 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37808 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
37809 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_PROBE_RESP0x05, NULL((void*)0));
37810 break;
37811 }
37812 case MGT_MEASUREMENT_PILOT0x06:
37813 {
37814 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12, false0);
37815 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
37816 offset += add_ff_measurement_pilot_int(fixed_tree, tvb, pinfo, offset);
37817 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
37818 offset += add_ff_cap_info(fixed_tree, tvb, pinfo, offset);
37819 offset += add_ff_country_str(fixed_tree, tvb, pinfo, offset);
37820 offset += add_ff_max_reg_pwr(fixed_tree, tvb, pinfo, offset);
37821 offset += add_ff_max_tx_pwr(fixed_tree, tvb, pinfo, offset);
37822 offset += add_ff_tx_pwr_used(fixed_tree, tvb, pinfo, offset);
37823 offset += add_ff_transceiver_noise_floor(fixed_tree, tvb, pinfo, offset);
37824 /* TODO DS Parameter Set ??? */
37825
37826 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37827 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
37828 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_MEASUREMENT_PILOT0x06, NULL((void*)0));
37829 break;
37830 }
37831 case MGT_BEACON0x08: /* Dissect protocol payload fields */
37832 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12, false0);
37833 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
37834 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
37835 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
37836 offset = 12; /* Size of fixed fields */
37837
37838 tagged_parameter_tree_len =
37839 tvb_reported_length_remaining(tvb, offset);
37840 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37841 tagged_parameter_tree_len);
37842 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37843 tagged_parameter_tree_len, MGT_BEACON0x08, NULL((void*)0));
37844 break;
37845
37846 case MGT_ATIM0x09:
37847 break;
37848
37849 case MGT_DISASS0x0A:
37850 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2, false0);
37851 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
37852 offset = 2; /* Size of fixed fields */
37853 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37854 if (tagged_parameter_tree_len > 0) {
37855 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37856 tagged_parameter_tree_len);
37857 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37858 tagged_parameter_tree_len, MGT_DISASS0x0A, NULL((void*)0));
37859 }
37860
37861 conversation = find_wlan_conversation_pinfo(pinfo);
37862 if (conversation) {
37863 conversation_delete_proto_data(conversation, proto_wlan);
37864 }
37865 break;
37866
37867 case MGT_AUTHENTICATION0x0B:
37868 offset = 6; /* Size of fixed fields */
37869
37870 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, offset, true1);
37871 offset = dissect_auth_frame(fixed_tree, pinfo, tvb);
37872 proto_item_append_text(fixed_tree, " (%d bytes)", offset);
37873 proto_item_set_len(fixed_tree, offset);
37874
37875 tagged_parameter_tree_len =
37876 tvb_reported_length_remaining(tvb, offset);
37877 if (tagged_parameter_tree_len > 0)
37878 {
37879 tagged_tree = get_tagged_parameter_tree(mgt_tree,
37880 tvb,
37881 offset,
37882 tagged_parameter_tree_len);
37883 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37884 tagged_parameter_tree_len, MGT_AUTHENTICATION0x0B, NULL((void*)0));
37885 }
37886 break;
37887
37888 case MGT_DEAUTHENTICATION0x0C:
37889 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2, false0);
37890 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
37891 offset = 2; /* Size of fixed fields */
37892 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37893 if (tagged_parameter_tree_len > 0) {
37894 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37895 tagged_parameter_tree_len);
37896 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37897 tagged_parameter_tree_len, MGT_DEAUTHENTICATION0x0C, NULL((void*)0));
37898 }
37899
37900 conversation = find_wlan_conversation_pinfo(pinfo);
37901 if (conversation) {
37902 conversation_delete_proto_data(conversation, proto_wlan);
37903 }
37904 break;
37905
37906 case MGT_ACTION0x0D:
37907 dissect_mgt_action(tvb, pinfo, mgt_tree, offset, &association_sanity_check);
37908 break;
37909
37910 case MGT_ACTION_NO_ACK0x0E:
37911 {
37912 proto_item *lcl_fixed_hdr;
37913 proto_tree *lcl_fixed_tree;
37914 lcl_fixed_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
37915
37916 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0, NULL((void*)0));
37917
37918 proto_item_set_len(lcl_fixed_hdr, offset);
37919 if (ieee80211_tvb_invalid)
37920 break; /* Buffer not available for further processing */
37921 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37922 if (tagged_parameter_tree_len > 0)
37923 {
37924 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37925 tagged_parameter_tree_len);
37926 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37927 tagged_parameter_tree_len, MGT_ACTION_NO_ACK0x0E, NULL((void*)0));
37928 }
37929 break;
37930 }
37931 case MGT_ARUBA_WLAN0x0F:
37932 {
37933 proto_tree *aruba_tree;
37934 uint16_t type;
37935 type = tvb_get_ntohs(tvb, offset);
37936
37937 aruba_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, NULL((void*)0), "Aruba Management");
37938
37939 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
37940 offset += 2;
37941 switch(type){
37942 case 0x0003: /* MTU Size */
37943 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_mtu, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
37944 break;
37945 case 0x0005: /* HeartBeat Sequence */
37946 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_hb_seq, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
37947 break;
37948 }
37949 break;
37950 }
37951 }
37952}
37953
37954/*
37955 * Dissect a Block Ack request (which is also used in Trigger frames).
37956 */
37957static int * const block_ack_control_headers[] = {
37958 &hf_ieee80211_block_ack_control_ack_policy,
37959 &hf_ieee80211_block_ack_control_type,
37960 &hf_ieee80211_block_ack_control_reserved,
37961 &hf_ieee80211_block_ack_control_tid_info,
37962 NULL((void*)0)
37963};
37964
37965static int * const multi_sta_aid_tid_headers[] = {
37966 &hf_ieee80211_block_ack_multi_sta_aid11,
37967 &hf_ieee80211_block_ack_multi_sta_ack_type,
37968 &hf_ieee80211_block_ack_multi_sta_tid,
37969 NULL((void*)0)
37970};
37971
37972/*
37973 * These bits are shown in reverse order in the spec.
37974 */
37975#define BASIC_BLOCK_ACK0x0 0x0
37976#define EXTENDED_COMPRESSED_BLOCK_ACK0x1 0x1
37977#define COMPRESSED_BLOCK_ACK0x2 0x2
37978#define MULTI_TID_BLOCK_ACK0x3 0x3
37979#define GCR_BLOCK_ACK0x6 0x6
37980#define GLK_GCR_BLOCK_ACK0xA 0xA
37981#define MULTI_STA_BLOCK_ACK0xB 0xB
37982
37983static const value_string block_ack_type_vals[] = {
37984 { BASIC_BLOCK_ACK0x0, "Basic BlockAck" },
37985 { EXTENDED_COMPRESSED_BLOCK_ACK0x1, "Extended Compressed BlockAck" },
37986 { COMPRESSED_BLOCK_ACK0x2, "Compressed BlockAck" },
37987 { MULTI_TID_BLOCK_ACK0x3, "Multi-TID BlockAck" },
37988 { GCR_BLOCK_ACK0x6, "GCR BlockAck" },
37989 { GLK_GCR_BLOCK_ACK0xA, "GLK-GCR BlockAck" },
37990 { MULTI_STA_BLOCK_ACK0xB, "Multi-STA BlockAck" },
37991 { 0, NULL((void*)0) }
37992};
37993
37994static int
37995dissect_ieee80211_block_ack_bitmap(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
37996 proto_tree *tree, int offset, uint16_t ssn, unsigned bitmap_size)
37997{
37998 uint64_t bitmap;
37999 uint16_t last_ack_frame_pos = 0;
38000 int f;
38001 int i;
38002 unsigned j;
38003
38004 proto_item *ba_bitmap_item = proto_tree_add_item(tree,
38005 hf_ieee80211_block_ack_bitmap,
38006 tvb, offset, bitmap_size, ENC_NA0x00000000);
38007 proto_item *ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item,
38008 ett_block_ack_bitmap);
38009 proto_item * last_ack_frame_item;
38010
38011 /* Handle bitmap_size = 4 for Multi-STA block ack */
38012 if (bitmap_size == 4)
38013 {
38014 bitmap = tvb_get_letohl(tvb, offset);
38015
38016 if (bitmap != 0)
38017 last_ack_frame_pos = ws_ilog2(bitmap);
38018
38019 for (f = 0; f < last_ack_frame_pos && f < 32; f++) {
38020 if (bitmap & (UINT64_C(1)1UL << f))
38021 continue;
38022 proto_tree_add_uint_format_value(ba_bitmap_tree,
38023 hf_ieee80211_block_ack_bitmap_missing_frame,
38024 tvb, offset + (f/8), 1, ssn + f, "%u",
38025 (ssn + f) & 0x0fff);
38026 }
38027
38028 } else {
38029 /* Browse the bitmap backwards to find the last acknowledged frame */
38030 for (i = bitmap_size - 8; i >= 0; i -= 8) {
38031 bitmap = tvb_get_letoh64(tvb, offset + i);
38032
38033 if (bitmap == 0)
38034 continue;
38035
38036 last_ack_frame_pos = i * 8 + ws_ilog2(bitmap);
38037 break;
38038 }
38039
38040 /* Browse the bitmap up to the last the last acknowledged frame */
38041 for (j = 0; j < bitmap_size * 8; j += 64) {
38042 bitmap = tvb_get_letoh64(tvb, offset + j/8);
38043 for (f = 0; f < 64 && (f + j) < last_ack_frame_pos; f++) {
38044 if (bitmap & (UINT64_C(1)1UL << f))
38045 continue;
38046 proto_tree_add_uint_format_value(ba_bitmap_tree,
38047 hf_ieee80211_block_ack_bitmap_missing_frame,
38048 tvb, offset + ((f + j)/8), 1, ssn + f + j, "%u",
38049 (ssn + f + j) & 0x0fff);
38050 }
38051 }
38052 }
38053
38054 last_ack_frame_item = proto_tree_add_uint_format_value(ba_bitmap_tree,
38055 hf_ieee80211_block_ack_bitmap_last_ack_frame,
38056 tvb, offset + (last_ack_frame_pos/8), 1, ssn + last_ack_frame_pos, "%u",
38057 (ssn + last_ack_frame_pos) & 0x0fff);
38058 proto_item_set_generated(last_ack_frame_item);
38059
38060 return offset + bitmap_size;
38061}
38062
38063static int
38064dissect_ieee80211_block_ack_details(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
38065 proto_tree *tree, int offset, bool_Bool isDMG, bool_Bool is_req, bool_Bool has_fcs)
38066{
38067 proto_item *pi;
38068 uint16_t ba_control;
38069 uint8_t block_ack_type;
38070 proto_tree *ba_tree;
38071 uint8_t tid_count, frag_num;
38072 unsigned i;
38073 proto_tree *ba_mtid_tree, *ba_mtid_sub_tree;
38074 uint16_t ssn;
38075 uint16_t aid_tid;
38076 proto_tree *ba_multi_sta_tree;
38077 int ba_start = offset;
38078
38079 ba_control = tvb_get_letohs(tvb, offset);
38080 block_ack_type = (ba_control & 0x001E) >> 1;
38081 ba_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_block_ack,
38082 &pi, is_req ? "%s Request" : "%s Response",
38083 val_to_str(pinfo->pool, block_ack_type, block_ack_type_vals,
38084 "Reserved (%d)"));
38085 proto_tree_add_bitmask_with_flags(ba_tree, tvb, offset,
38086 hf_ieee80211_block_ack_control,
38087 ett_block_ack_request_control,
38088 block_ack_control_headers,
38089 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38090 offset += 2;
38091
38092 switch (block_ack_type) {
38093 case BASIC_BLOCK_ACK0x0:
38094 if (isDMG == true1) {
38095 expert_add_info_format(pinfo, ba_tree, &ei_ieee80211_dmg_subtype,
38096 "DMG STAs shouldn't transmit BlockAckReq frames "
38097 "with Basic BlockAckReqs");
38098 }
38099
38100 /* Both request and response have an SSC */
38101 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
38102
38103 if (!is_req) {
38104 proto_tree_add_item(ba_tree, hf_ieee80211_block_ack_bitmap, tvb, offset,
38105 128, ENC_NA0x00000000);
38106 offset += 128;
38107 }
38108 break;
38109
38110 case COMPRESSED_BLOCK_ACK0x2:
38111 ssn = tvb_get_letohs(tvb, offset);
38112 frag_num = ssn & 0x0F;
38113 ssn >>= 4;
38114 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
38115
38116 if (!is_req) {
38117 unsigned bytes = 0;
38118 if (((frag_num & 0x06) >> 1) == 2) {
38119 bytes = 32;
38120 } else if ((frag_num & 0x0f) == 0x08) {
38121 bytes = 64;
38122 } else if ((frag_num & 0x0f) == 0x0A) {
38123 bytes = 128;
38124 } else { /* Default length */
38125 bytes = 8;
38126 }
38127
38128 offset = dissect_ieee80211_block_ack_bitmap(tvb, pinfo, ba_tree, offset, ssn, bytes);
38129 }
38130 break;
38131
38132 case EXTENDED_COMPRESSED_BLOCK_ACK0x1:
38133 if (isDMG == false0) {
38134 expert_add_info_format(pinfo, ba_tree, &ei_ieee80211_dmg_subtype,
38135 "Non-DMG STAs shouldn't transmit BlockAckReq "
38136 "frames with Extended Compressed BlockAckReqs");
38137 }
38138
38139 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
38140
38141 if (!is_req) {
38142 ssn = tvb_get_letohs(tvb, offset);
38143 ssn >>= 4;
38144
38145 dissect_ieee80211_block_ack_bitmap(tvb, pinfo, ba_tree, offset, ssn, 8);
38146 offset += 8;
38147 proto_tree_add_item(ba_tree, hf_ieee80211_block_ack_RBUFCAP, tvb, offset,
38148 1, ENC_LITTLE_ENDIAN0x80000000);
38149 offset += 1;
38150 }
38151 break;
38152
38153 case MULTI_TID_BLOCK_ACK0x3:
38154
38155 if (isDMG == true1) {
38156 expert_add_info_format(pinfo, ba_tree, &ei_ieee80211_dmg_subtype,
38157 "DMG STAs shouldn't transmit BlockAckReq frames "
38158 "with Multi-TID BlockAckReqs");
38159 }
38160
38161 tid_count = ((ba_control & 0xF000) >> 12) + 1;
38162 if (is_req) {
38163 ba_mtid_tree = proto_tree_add_subtree(ba_tree, tvb, offset, tid_count*4,
38164 ett_block_ack, NULL((void*)0), "TID List");
38165 for (i = 0; i < tid_count; i++) {
38166 uint8_t tid = tvb_get_uint8(tvb, offset) & 0x0F;
38167 ba_mtid_sub_tree = proto_tree_add_subtree_format(ba_mtid_tree, tvb,
38168 offset, 4, ett_block_ack_tid, NULL((void*)0),
38169 "TID %u details", tid);
38170
38171 proto_tree_add_item(ba_mtid_sub_tree,
38172 hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2,
38173 ENC_LITTLE_ENDIAN0x80000000);
38174 proto_tree_add_item(ba_mtid_sub_tree,
38175 hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2,
38176 ENC_LITTLE_ENDIAN0x80000000);
38177 offset += 2;
38178
38179 offset += add_ff_block_ack_ssc(ba_mtid_sub_tree, tvb, pinfo, offset);
38180 }
38181 } else {
38182 ba_mtid_tree = proto_tree_add_subtree(ba_tree, tvb, offset, tid_count*4,
38183 ett_block_ack, NULL((void*)0), "TID List");
38184 for (i = 0; i < tid_count; i++) {
38185 uint8_t tid = tvb_get_uint8(tvb, offset) & 0x0F;
38186 ba_mtid_sub_tree = proto_tree_add_subtree_format(ba_mtid_tree, tvb,
38187 offset, 4, ett_block_ack_tid, NULL((void*)0),
38188 "TID %u details", tid);
38189
38190 proto_tree_add_item(ba_mtid_sub_tree,
38191 hf_ieee80211_block_ack_multi_tid_reserved,
38192 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38193 proto_tree_add_item(ba_mtid_sub_tree,
38194 hf_ieee80211_block_ack_multi_tid_value, tvb,
38195 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38196 offset += 2;
38197
38198 offset += add_ff_block_ack_ssc(ba_mtid_sub_tree, tvb, pinfo, offset);
38199 proto_tree_add_item(ba_mtid_sub_tree,
38200 hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA0x00000000);
38201 offset += 8;
38202 }
38203 }
38204 break;
38205
38206 case GCR_BLOCK_ACK0x6:
38207 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
38208
38209 proto_tree_add_item(ba_tree, hf_ieee80211_block_ack_gcr_addr, tvb,
38210 offset, 6, ENC_NA0x00000000);
38211 offset += 6;
38212
38213 if (!is_req) {
38214 proto_tree_add_item(ba_tree,
38215 hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA0x00000000);
38216 offset += 8;
38217 }
38218 break;
38219
38220 case MULTI_STA_BLOCK_ACK0xB:
38221 while (tvb_reported_length_remaining(tvb, offset) > (has_fcs ? 4 : 0)) {
38222 int start = offset;
38223 proto_item *msta_ti = NULL((void*)0);
38224 aid_tid = tvb_get_letohs(tvb, offset);
38225 ba_multi_sta_tree = proto_tree_add_subtree_format(ba_tree, tvb, offset, -1,
38226 ett_multi_sta_block_ack, &msta_ti,
38227 "Per AID TID Info: 0x%0x", aid_tid & 0x07ff);
38228 proto_tree_add_bitmask_with_flags(ba_multi_sta_tree, tvb, offset,
38229 hf_ieee80211_block_ack_multi_sta_aid_tid,
38230 ett_block_ack_request_multi_sta_aid_tid,
38231 multi_sta_aid_tid_headers,
38232 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38233 offset += 2;
38234
38235 if ((aid_tid & 0x07ff) != 2045) {
38236 if (((aid_tid & 0x0800) == 0) && ((aid_tid & 0xf000) >> 12) <= 7) {
38237 unsigned bitmap_size;
38238 ssn = tvb_get_letohs(tvb, offset);
38239 frag_num = ssn & 0x0F;
38240 ssn >>= 4;
38241 offset += add_ff_block_ack_ssc(ba_multi_sta_tree, tvb, pinfo, offset);
38242 if ((frag_num & 0x0f) == 0x8 || (frag_num & 0x0f) == 0xA) {
38243 bitmap_size = (frag_num & 0x0f) == 8 ? 64 : 128;
38244 } else {
38245 bitmap_size = ((frag_num + 2) & 0x6) >> 1; /* Turn into an exponent */
38246 bitmap_size = 4 << bitmap_size; /* It goes 4, 8, 16, 32 */
38247 }
38248 offset = dissect_ieee80211_block_ack_bitmap(tvb, pinfo, ba_multi_sta_tree, offset, ssn, bitmap_size);
38249 }
38250 } else {
38251 offset += add_ff_block_ack_ssc(ba_multi_sta_tree, tvb, pinfo, offset);
38252 proto_tree_add_item(ba_multi_sta_tree, hf_ieee80211_block_ack_multi_sta_reserved,
38253 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38254 offset += 2;
38255 proto_tree_add_item(ba_multi_sta_tree, hf_ieee80211_block_ack_multi_sta_ra,
38256 tvb, offset, 6, ENC_NA0x00000000);
38257 offset += 6;
38258 }
38259 proto_item_set_len(msta_ti, offset - start);
38260 }
38261 break;
38262 }
38263 proto_item_set_len(pi, offset - ba_start);
38264
38265 return offset;
38266}
38267
38268static void
38269dissect_ieee80211_block_ack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
38270 proto_tree *tree, int offset, bool_Bool isDMG, bool_Bool is_req, bool_Bool has_fcs)
38271{
38272 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
38273 offset += 6;
38274
38275 dissect_ieee80211_block_ack_details(tvb, pinfo, tree, offset, isDMG, is_req, has_fcs);
38276}
38277
38278/*
38279 * Dissect an 802.11ax HE Trigger frame and return the actual len including
38280 * padding!
38281 */
38282
38283typedef enum he_trigger_type {
38284 TRIGGER_TYPE_BASIC = 0,
38285 TRIGGER_TYPE_BRP,
38286 TRIGGER_TYPE_MU_BAR,
38287 TRIGGER_TYPE_MU_RTS,
38288 TRIGGER_TYPE_BSRP,
38289 TRIGGER_TYPE_GCR_MU_BAR,
38290 TRIGGER_TYPE_BQRP,
38291 TRIGGER_TYPE_NFRP,
38292 TRIGGER_TYPE_RANGING,
38293 TRIGGER_TYPE_MIN_RESERVED,
38294} he_trigger_type_t;
38295
38296typedef enum he_trigger_subtype {
38297 TRIGGER_SUBTYPE_POLL = 0,
38298 TRIGGER_SUBTYPE_SOUNDING,
38299 TRIGGER_SUBTYPE_SECURE_SOUNDING,
38300 TRIGGER_SUBTYPE_REPORT,
38301 TRIGGER_SUBTYPE_PASSIVE_TB_MEAS_EXCHANGE,
38302 TRIGGER_SUBTYPE_MIN_RESERVED,
38303} he_trigger_subtype_t;
38304
38305static const val64_string trigger_type_vals[] = {
38306 { 0, "Basic" },
38307 { 1, "Beamforming Report Poll (BRP)" },
38308 { 2, "MU-BAR" },
38309 { 3, "MU-RTS" },
38310 { 4, "Buffer Status Report Poll (BSRP)" },
38311 { 5, "GCR MU-BAR" },
38312 { 6, "Bandwidth Query Report Poll (BQRP)" },
38313 { 7, "NDP Feedback Report Poll (NFRP)" },
38314 { 8, "Ranging" },
38315 /* 9-15 reserved */
38316 { 0, NULL((void*)0) }
38317};
38318
38319static const val64_string bw_subfield_vals[] = {
38320 { 0, "20 MHz" },
38321 { 1, "40 MHz" },
38322 { 2, "80 MHz" },
38323 { 3, "80+80 MHz or 160 MHz" },
38324 { 0, NULL((void*)0) }
38325};
38326
38327static const val64_string gi_and_ltf_type_subfield_vals[] = {
38328 { 0, "1x LTF + 1.6 us GI" },
38329 { 1, "2x LTF + 1.6 us GI" },
38330 { 2, "4x LTF + 3.2 us GI" },
38331 { 3, "Reserved" },
38332 { 0, NULL((void*)0) }
38333};
38334
38335static const true_false_string mu_mimo_ltf_mode_tfs = {
38336 "HE masked HE LTF sequence mode",
38337 "HE single stream pilot HE LTF mode"
38338};
38339
38340static int * const he_trig_frm_bar_ctrl_fields[] = {
38341 &hf_ieee80211_he_trigger_bar_ctrl_ba_ack_policy,
38342 &hf_ieee80211_he_trigger_bar_ctrl_ba_type,
38343 &hf_ieee80211_he_trigger_bar_ctrl_reserved,
38344 &hf_ieee80211_he_trigger_bar_ctrl_tid_info,
38345 NULL((void*)0)
38346};
38347
38348static int * const he_trig_frm_bar_info_fields[] = {
38349 &hf_ieee80211_he_trigger_bar_info_blk_ack_seq_ctrl,
38350 NULL((void*)0)
38351};
38352
38353#define PRE_FEC_PADDING_FACTOR0x3 0x3
38354#define PE_DISAMBIGUITY0x4 0x4
38355
38356static void
38357ap_tx_power_custom(char *result, uint32_t ap_tx_power)
38358{
38359 if (ap_tx_power > 60)
38360 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Reserved");
38361 else
38362 snprintf(result, ITEM_LABEL_LENGTH240, "%d dBm", -20 + ap_tx_power);
38363}
38364
38365static void
38366add_gcr_mu_bar_trigger_frame_common_info(proto_tree *tree, tvbuff_t *tvb,
38367 int offset)
38368{
38369
38370 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38371 hf_ieee80211_he_trigger_bar_ctrl,
38372 ett_he_trigger_bar_ctrl,
38373 he_trig_frm_bar_ctrl_fields,
38374 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38375 offset += 2;
38376
38377 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38378 hf_ieee80211_he_trigger_bar_info,
38379 ett_he_trigger_bar_info,
38380 he_trig_frm_bar_info_fields,
38381 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38382}
38383
38384static int * const common_info_headers[] = {
38385 &hf_ieee80211_he_trigger_type,
38386 &hf_ieee80211_he_trigger_ul_length,
38387 &hf_ieee80211_he_trigger_more_tf,
38388 &hf_ieee80211_he_trigger_cs_required,
38389 &hf_ieee80211_he_trigger_ul_bw,
38390 &hf_ieee80211_he_trigger_gi_and_ltf_type,
38391 &hf_ieee80211_he_trigger_mu_mimo_ltf_mode,
38392 &hf_ieee80211_he_trigger_num_he_ltf_syms_etc,
38393 &hf_ieee80211_he_trigger_ul_stbc,
38394 &hf_ieee80211_he_trigger_ldpc_extra_sym_seg,
38395 &hf_ieee80211_he_trigger_ap_tx_power,
38396 &hf_ieee80211_he_trigger_pre_fec_padding_factor,
38397 &hf_ieee80211_he_trigger_pe_disambiguity,
38398 &hf_ieee80211_he_trigger_ul_spatial_reuse,
38399 &hf_ieee80211_he_trigger_doppler,
38400 &hf_ieee80211_he_trigger_ul_he_sig_a_reserved,
38401 &hf_ieee80211_he_trigger_reserved,
38402 NULL((void*)0)
38403};
38404
38405static int * const eht_common_info_headers[] = {
38406 &hf_ieee80211_eht_trigger_type,
38407 &hf_ieee80211_eht_trigger_ul_length,
38408 &hf_ieee80211_eht_trigger_more_tf,
38409 &hf_ieee80211_eht_trigger_cs_required,
38410 &hf_ieee80211_eht_trigger_ul_bw,
38411 &hf_ieee80211_eht_trigger_gi_and_eht_ltf_type,
38412 &hf_ieee80211_eht_trigger_reserved2,
38413 &hf_ieee80211_eht_trigger_num_he_eht_ltf_syms_etc,
38414 &hf_ieee80211_eht_trigger_reserved3,
38415 &hf_ieee80211_eht_trigger_ldpc_extra_sym_seg,
38416 &hf_ieee80211_eht_trigger_ap_tx_power,
38417 &hf_ieee80211_eht_trigger_pre_fec_padding_factor,
38418 &hf_ieee80211_eht_trigger_pe_disambiguity,
38419 &hf_ieee80211_eht_trigger_ul_spatial_reuse,
38420 &hf_ieee80211_eht_trigger_reserved4,
38421 &hf_ieee80211_eht_trigger_he_eht_p160,
38422 &hf_ieee80211_eht_trigger_special_user_info_flag,
38423 &hf_ieee80211_eht_trigger_eht_reserved,
38424 &hf_ieee80211_eht_trigger_reserved,
38425 NULL((void*)0)
38426};
38427
38428static int* const uhr_common_info_headers[] = {
38429 &hf_ieee80211_uhr_trigger_type,
38430 &hf_ieee80211_uhr_trigger_ul_length,
38431 &hf_ieee80211_uhr_trigger_more_tf,
38432 &hf_ieee80211_uhr_trigger_cs_required,
38433 &hf_ieee80211_uhr_trigger_ul_bw,
38434 &hf_ieee80211_uhr_trigger_gi_and_he_uhr_ltf_type,
38435 &hf_ieee80211_uhr_trigger_reserved2,
38436 &hf_ieee80211_uhr_trigger_num_he_uhr_ltf_syms_etc,
38437 &hf_ieee80211_uhr_trigger_reserved3,
38438 &hf_ieee80211_uhr_trigger_ldpc_extra_sym_seg,
38439 &hf_ieee80211_uhr_trigger_ap_tx_power,
38440 &hf_ieee80211_uhr_trigger_pre_fec_padding_factor,
38441 &hf_ieee80211_uhr_trigger_pe_disambiguity,
38442 &hf_ieee80211_uhr_trigger_ul_spatial_reuse,
38443 &hf_ieee80211_uhr_trigger_reserved4,
38444 &hf_ieee80211_uhr_trigger_he_uhr_p160,
38445 &hf_ieee80211_uhr_trigger_special_user_info_flag,
38446 &hf_ieee80211_uhr_trigger_dru_rru,
38447 &hf_ieee80211_uhr_trigger_ifcs,
38448 &hf_ieee80211_uhr_trigger_uhr_reserved,
38449 &hf_ieee80211_uhr_trigger_reserved,
38450 NULL((void*)0)
38451};
38452
38453static const val64_string pre_fec_padding_factor_vals[] = {
38454 { 0, "pre-FEC Padding Factor of 4" },
38455 { 1, "pre-FEC Padding Factor of 1" },
38456 { 2, "pre-FEC Padding Factor of 2" },
38457 { 3, "pre-FEC Padding Factor of 3" },
38458 { 0, NULL((void*)0) }
38459};
38460
38461static const true_false_string pe_disambiguity_tfs = {
38462 "PE Disambiguity",
38463 "no PE Disambiguity"
38464 };
38465
38466static int
38467add_trigger_common_info(proto_tree *tree, tvbuff_t *tvb, int offset,
38468 packet_info *pinfo _U___attribute__((unused)), uint8_t trigger_type, int *frame_len,
38469 proto_tree **common_tree)
38470{
38471 proto_item *pi = NULL((void*)0);
38472 proto_tree *common_info = NULL((void*)0);
38473 int length = 0;
38474 int start_offset = offset;
38475 uint64_t bw_etc = tvb_get_letoh64(tvb, offset);
38476 uint64_t special_user = tvb_get_letoh64(tvb, offset+8);
38477 bool_Bool is_uhr = (((bw_etc >> 54) & 0x03) != 0x03) && (((special_user >> 12) & 0x01) == 0x01);
38478 bool_Bool is_eht = (((bw_etc >> 54) & 0x03) != 0x03) && (((special_user >> 12) & 0x01) == 0x00);
38479
38480 global_he_trigger_bw = (bw_etc >> 18) & 0x03;
38481
38482 common_info = proto_tree_add_subtree(tree, tvb, offset, -1,
38483 ett_he_trigger_common_info, &pi, "Common Info");
38484 *common_tree = common_info;
38485
38486 if (is_eht) {
38487 proto_tree_add_bitmask_with_flags(common_info, tvb, offset,
38488 hf_ieee80211_eht_trigger_common_info,
38489 ett_he_trigger_base_common_info,
38490 eht_common_info_headers,
38491 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38492 } else if (is_uhr) {
38493 proto_tree_add_bitmask_with_flags(common_info, tvb, offset,
38494 hf_ieee80211_uhr_trigger_common_info,
38495 ett_he_trigger_base_common_info,
38496 uhr_common_info_headers,
38497 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38498 } else {
38499 proto_tree_add_bitmask_with_flags(common_info, tvb, offset,
38500 hf_ieee80211_he_trigger_common_info,
38501 ett_he_trigger_base_common_info,
38502 common_info_headers,
38503 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38504 }
38505 offset += 8;
38506 length += 8;
38507
38508 /*
38509 * Handle the trigger dependent common info
38510 */
38511 switch (trigger_type) {
38512 case TRIGGER_TYPE_GCR_MU_BAR: /* Actually two uint16 fields */
38513 add_gcr_mu_bar_trigger_frame_common_info(common_info, tvb, offset);
38514 offset += 4;
38515 length += 4;
38516 break;
38517 default: /* No other type has a trigger dependent common info subfield */
38518 break;
38519 }
38520 proto_item_set_len(pi, offset - start_offset);
38521
38522 *frame_len += length;
38523 return length;
38524}
38525
38526static const char * const he_trigger_ru_allocation_region_values[] = {
38527 "primary 80MHz channel for 80+80 and 160MHz",
38528 "secondary 80MHz channel for 80+80 and 160MHz",
38529};
38530
38531/*
38532 * Format the ru allocation region bit
38533 */
38534static void
38535he_trigger_ru_allocation_region_custom(char *result, uint32_t ru_alloc_val)
38536{
38537 if (global_he_trigger_bw == 3) {
38538 snprintf(result, ITEM_LABEL_LENGTH240, "%s",
38539 he_trigger_ru_allocation_region_values[ru_alloc_val & 0x01]);
38540 } else {
38541 snprintf(result, ITEM_LABEL_LENGTH240, "Not used for 20, 40 or 80MHz");
38542 }
38543}
38544
38545static void
38546he_trigger_minus_one_custom(char *result, unsigned ss_alloc_value)
38547{
38548 snprintf(result, ITEM_LABEL_LENGTH240, "%d", ss_alloc_value + 1);
38549}
38550
38551static const true_false_string he_trigger_ul_fec_coding_type_tfs = {
38552 "LDPC",
38553 "BCC"
38554};
38555
38556static const value_string preferred_ac_vals[] = {
38557 { 0, "AC_BE" },
38558 { 1, "AC_BK" },
38559 { 2, "AC_VI" },
38560 { 3, "AC_VO" },
38561 { 0, NULL((void*)0) }
38562};
38563
38564static int * const basic_trigger_dependent_user_headers[] = {
38565 &hf_ieee80211_he_trigger_mpdu_mu_spacing,
38566 &hf_ieee80211_he_trigger_tid_aggregation_limit,
38567 &hf_ieee80211_he_trigger_dependent_reserved1,
38568 &hf_ieee80211_he_trigger_preferred_ac,
38569 NULL((void*)0)
38570};
38571
38572static void
38573add_basic_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38574 int offset)
38575{
38576 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38577 hf_ieee80211_he_trigger_dep_basic_user_info,
38578 ett_he_trigger_dep_basic_user_info,
38579 basic_trigger_dependent_user_headers,
38580 ENC_NA0x00000000, BMT_NO_APPEND0x01);
38581}
38582
38583static void
38584add_brp_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38585 int offset)
38586{
38587 proto_tree_add_item(tree, hf_ieee80211_he_trigger_feedback_seg_retrans_bm,
38588 tvb, offset, 1, ENC_NA0x00000000);
38589}
38590
38591static int
38592add_mu_bar_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38593 int offset, packet_info *pinfo, int *frame_len)
38594{
38595 int start_offset = offset;
38596
38597 /*
38598 * It's a request and not DMG, I think. Also, it is only supposed to be
38599 * a compressed block ack or a multi-tid block ack request.
38600 */
38601 offset = dissect_ieee80211_block_ack_details(tvb, pinfo, tree, offset,
38602 false0, true1, false0);
38603
38604 *frame_len += offset - start_offset;
38605
38606 return offset;
38607}
38608
38609
38610static int * const nfrp_trigger_dependent_user_headers[] = {
38611 &hf_ieee80211_he_trigger_starting_aid,
38612 &hf_ieee80211_he_trigger_dependent_reserved2,
38613 &hf_ieee80211_he_trigger_feedback_type,
38614 &hf_ieee80211_he_trigger_dependent_reserved3,
38615 &hf_ieee80211_he_trigger_nfrp_target_rssi,
38616 &hf_ieee80211_he_trigger_multiplexing_flag,
38617 NULL((void*)0)
38618};
38619
38620static void
38621add_nfrp_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38622 int offset)
38623{
38624 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38625 hf_ieee80211_he_trigger_dep_nfrp_user_info,
38626 ett_he_trigger_dep_nfrp_user_info,
38627 nfrp_trigger_dependent_user_headers,
38628 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38629}
38630
38631/*
38632 * Dissect one of the ranging trigger types ...
38633 */
38634static int * const poll_rpt_hdrs[] = {
38635 &hf_ieee80211_ranging_pol_rpt_aid12_rsid12,
38636 &hf_ieee80211_ranging_pol_rpt_ru_alloc_region,
38637 &hf_ieee80211_ranging_pol_rpt_ru_alloc,
38638 &hf_ieee80211_ranging_pol_rpt_ul_fec_coding_type,
38639 &hf_ieee80211_ranging_pol_rpt_ulmcs,
38640 &hf_ieee80211_ranging_pol_rpt_uldcm,
38641 &hf_ieee80211_ranging_pol_rpt_starting_spatial_stream,
38642 &hf_ieee80211_ranging_pol_rpt_number_spatial_streams,
38643 &hf_ieee80211_ranging_pol_rpt_ul_target_rssi,
38644 &hf_ieee80211_ranging_pol_rpt_reserved,
38645 NULL((void*)0)
38646};
38647
38648static int * const sounding_hdrs[] = {
38649 &hf_ieee80211_ranging_sounding_aid12_rsid12,
38650 &hf_ieee80211_ranging_sounding_reserved1,
38651 &hf_ieee80211_ranging_sounding_i2r_rep,
38652 &hf_ieee80211_ranging_sounding_reserved2,
38653 &hf_ieee80211_ranging_sounding_starting_spatial_stream,
38654 &hf_ieee80211_ranging_sounding_number_spatial_streams,
38655 &hf_ieee80211_ranging_sounding_ul_target_rssi,
38656 &hf_ieee80211_ranging_sounding_reserved3,
38657 NULL((void*)0)
38658};
38659
38660static int * const sec_sound_hdrs[] = {
38661 &hf_ieee80211_ranging_sec_sound_aid12_rsid12,
38662 &hf_ieee80211_ranging_sec_sound_reserved1,
38663 &hf_ieee80211_ranging_sec_sound_i2r_rep,
38664 &hf_ieee80211_ranging_sec_sound_reserved2,
38665 &hf_ieee80211_ranging_sec_sound_starting_spatial_stream,
38666 &hf_ieee80211_ranging_sec_sound_number_spatial_streams,
38667 &hf_ieee80211_ranging_sec_sound_ul_target_rssi,
38668 &hf_ieee80211_ranging_sec_sound_reserved3,
38669 NULL((void*)0)
38670};
38671
38672static int
38673dissect_ieee80211_ranging_trigger_variant(proto_tree *tree, tvbuff_t *tvb,
38674 int offset, packet_info *pinfo _U___attribute__((unused)),
38675 uint8_t subtype)
38676{
38677 int saved_offset = offset;
38678
38679 switch (subtype) {
38680 case TRIGGER_SUBTYPE_POLL:
38681 case TRIGGER_SUBTYPE_REPORT:
38682 proto_tree_add_bitmask(tree, tvb, offset,
38683 hf_ieee80211_he_trigger_ranging_trigger_poll_rpt,
38684 ett_he_trigger_ranging_poll, poll_rpt_hdrs,
38685 ENC_LITTLE_ENDIAN0x80000000);
38686 offset += 5;
38687 break;
38688 case TRIGGER_SUBTYPE_SOUNDING: /* Sounding subvariant */
38689 proto_tree_add_bitmask(tree, tvb, offset,
38690 hf_ieee80211_he_trigger_ranging_trigger_sounding,
38691 ett_he_trigger_ranging_poll, sounding_hdrs,
38692 ENC_LITTLE_ENDIAN0x80000000);
38693 offset += 5;
38694 break;
38695 case TRIGGER_SUBTYPE_SECURE_SOUNDING:
38696 proto_tree_add_bitmask(tree, tvb, offset,
38697 hf_ieee80211_he_trigger_ranging_trigger_sec_sound,
38698 ett_he_trigger_ranging_poll, sec_sound_hdrs,
38699 ENC_LITTLE_ENDIAN0x80000000);
38700 offset += 5;
38701
38702 proto_tree_add_item(tree, hf_ieee80211_he_trigger_ranging_user_info_sac,
38703 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38704 offset += 2;
38705 break;
38706 case TRIGGER_SUBTYPE_PASSIVE_TB_MEAS_EXCHANGE:
38707 /* This is much the same as SOUNDING subtype */
38708 proto_tree_add_bitmask(tree, tvb, offset,
38709 hf_ieee80211_he_trigger_ranging_trigger_sounding,
38710 ett_he_trigger_ranging_poll, sounding_hdrs,
38711 ENC_LITTLE_ENDIAN0x80000000);
38712 offset += 5;
38713 break;
38714 default:
38715 /* Unknown subtypes are filtered out above us. Should not get here! */
38716 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 38716))
;
38717 break;
38718 }
38719
38720 return offset - saved_offset;
38721}
38722
38723/*
38724 * Print the target RSSI field as per the spec.
38725 * 0->90 map to -110 to -20 dBm.
38726 * 127 maps to Max ransmit power for assigned MCS
38727 * rest are reserved.
38728 */
38729static void
38730target_rssi_base_custom(char *result, uint32_t target_rssi)
38731{
38732 if (target_rssi <= 90) {
38733 snprintf(result, ITEM_LABEL_LENGTH240, "%ddBm", -110 + target_rssi);
38734 } else if (target_rssi == 127) {
38735 snprintf(result, ITEM_LABEL_LENGTH240, "Max transmit power");
38736 } else {
38737 snprintf(result, ITEM_LABEL_LENGTH240, "Reserved");
38738 }
38739}
38740
38741static int * const user_info_headers_no_2045[] = {
38742 &hf_ieee80211_he_trigger_aid12,
38743 &hf_ieee80211_he_trigger_ru_allocation_region,
38744 &hf_ieee80211_he_trigger_ru_allocation,
38745 &hf_ieee80211_he_trigger_ul_fec_coding_type,
38746 &hf_ieee80211_he_trigger_ul_mcs,
38747 &hf_ieee80211_he_trigger_ul_dcm,
38748 &hf_ieee80211_he_trigger_ru_starting_spatial_stream,
38749 &hf_ieee80211_he_trigger_ru_number_spatial_streams,
38750 &hf_ieee80211_he_trigger_ul_target_rssi,
38751 &hf_ieee80211_he_trigger_user_reserved,
38752 NULL((void*)0)
38753};
38754
38755static int * const user_info_headers_2045[] = {
38756 &hf_ieee80211_he_trigger_aid12,
38757 &hf_ieee80211_he_trigger_ru_allocation_region,
38758 &hf_ieee80211_he_trigger_ru_allocation,
38759 &hf_ieee80211_he_trigger_ul_fec_coding_type,
38760 &hf_ieee80211_he_trigger_ul_mcs,
38761 &hf_ieee80211_he_trigger_ul_dcm,
38762 &hf_ieee80211_he_trigger_ru_number_ra_ru,
38763 &hf_ieee80211_he_trigger_ru_no_more_ra_ru,
38764 &hf_ieee80211_he_trigger_ul_target_rssi,
38765 &hf_ieee80211_he_trigger_user_reserved,
38766 NULL((void*)0)
38767};
38768
38769static int * const user_info_headers_eht[] = {
38770 &hf_ieee80211_eht_trigger_aid12,
38771 &hf_ieee80211_eht_trigger_ru_allocation_region,
38772 &hf_ieee80211_eht_trigger_ru_allocation,
38773 &hf_ieee80211_eht_trigger_ul_fec_coding_type,
38774 &hf_ieee80211_eht_trigger_ul_eht_mcs,
38775 &hf_ieee80211_eht_trigger_user_info_reserved,
38776 &hf_ieee80211_eht_trigger_ru_starting_spatial_stream,
38777 &hf_ieee80211_eht_trigger_ru_number_spatial_streams,
38778 &hf_ieee80211_eht_trigger_ul_target_recv_power,
38779 &hf_ieee80211_eht_trigger_ps160,
38780 NULL((void*)0)
38781};
38782
38783static int * const special_user_info_headers_eht[] = {
38784 &hf_ieee80211_eht_trigger_aid12,
38785 &hf_ieee80211_eht_trigger_phy_version_identifier,
38786 &hf_ieee80211_eht_trigger_ul_bw_extenstion,
38787 &hf_ieee80211_eht_trigger_eht_spatial_reuse_1,
38788 &hf_ieee80211_eht_trigger_eht_spatial_reuse_2,
38789 &hf_ieee80211_eht_trigger_disregard_u_sig_1,
38790 &hf_ieee80211_eht_trigger_validate_u_sig_2,
38791 &hf_ieee80211_eht_trigger_disregard_u_sig_2_4lsb,
38792 &hf_ieee80211_eht_trigger_disregard_u_sig_2_msb,
38793 &hf_ieee80211_eht_trigger_special_reserved,
38794 NULL((void*)0)
38795};
38796
38797static int* const user_info_headers_uhr_rru[] = {
38798 &hf_ieee80211_uhr_trigger_aid12,
38799 &hf_ieee80211_uhr_trigger_ru_allocation_region,
38800 &hf_ieee80211_uhr_trigger_ru_allocation,
38801 &hf_ieee80211_uhr_trigger_ul_fec_coding_type,
38802 &hf_ieee80211_uhr_trigger_ul_uhr_mcs,
38803 &hf_ieee80211_uhr_trigger_2xldpc,
38804 &hf_ieee80211_uhr_trigger_ru_starting_spatial_stream,
38805 &hf_ieee80211_uhr_trigger_ru_number_spatial_streams,
38806 &hf_ieee80211_uhr_trigger_ul_target_recv_power,
38807 &hf_ieee80211_uhr_trigger_ps160,
38808 NULL((void*)0)
38809};
38810
38811static int* const user_info_headers_uhr_dru[] = {
38812 &hf_ieee80211_uhr_trigger_aid12,
38813 &hf_ieee80211_uhr_trigger_ru_allocation_region,
38814 &hf_ieee80211_uhr_trigger_ru_allocation,
38815 &hf_ieee80211_uhr_trigger_ul_fec_coding_type,
38816 &hf_ieee80211_uhr_trigger_ul_uhr_mcs,
38817 &hf_ieee80211_uhr_trigger_2xldpc,
38818 &hf_ieee80211_uhr_trigger_dru_distribution_bw,
38819 &hf_ieee80211_uhr_trigger_dru_reserved,
38820 &hf_ieee80211_uhr_trigger_ru_number_spatial_streams,
38821 &hf_ieee80211_uhr_trigger_ul_target_recv_power,
38822 &hf_ieee80211_uhr_trigger_ps160,
38823 NULL((void*)0)
38824};
38825
38826#define HE_USER_INFO0 0
38827#define EHT_USER_INFO1 1
38828#define SPECIAL_USER_INFO2 2
38829
38830static int
38831add_trigger_user_info(proto_tree *tree, tvbuff_t *tvb, int offset,
38832 packet_info *pinfo, uint8_t trigger_type, uint8_t subtype,
38833 uint8_t common_info_b54_55 _U___attribute__((unused)), int *frame_len, unsigned fcs_len)
38834{
38835 proto_item *pi = NULL((void*)0);
38836 proto_tree *user_info = NULL((void*)0);
38837 int length = 0, range_len = 0;
38838 int start_offset = offset;
38839 uint16_t aid12_subfield = 0;
38840 uint16_t phy_version_subfield = 0;
38841 unsigned len_remaining = 0;
38842 bool_Bool special_user_info;
38843 uint8_t user_info_b39;
38844 bool_Bool eht_variant = false0;
38845 uint8_t ddru_indication;
38846
38847 /*
38848 * If the AID12 subfield has the value 4095 it indicates the start of
38849 * the padding field.
38850 *
38851 * If the AID12 subfield has the value 2007, it indicates a special user
38852 * info field and combined with the common_info_b54_55 and B39 of the user
38853 * info field determines whether this field is an HE User Info field or an
38854 * EHT User Info field.
38855 */
38856 user_info = proto_tree_add_subtree(tree, tvb, offset, -1,
38857 ett_he_trigger_user_info, &pi, "User Info");
38858 aid12_subfield = tvb_get_letohs(tvb, offset) & 0x0FFF;
38859 phy_version_subfield = (tvb_get_letohs(tvb, offset) >> 12) & 0x01;
38860 /*9.3.1.22.2 of 802.11bn and Figure 9-90e1—DRU/RRU Indication subfield format*/
38861 ddru_indication = (tvb_get_letohs(tvb, offset - 1)) & 0x0F;
38862
38863 while (aid12_subfield != 4095) {
38864 /* Compute the special user info and EHT Variant for each one. */
38865 special_user_info = aid12_subfield == 2007;
38866 user_info_b39 = tvb_get_uint8(tvb, offset + 4) >> 7;
38867
38868 /* 9.3.1.22.4 of 802.11be and table 9-45a */
38869 if ((common_info_b54_55 == 0x01 && special_user_info && user_info_b39) ||
38870 (common_info_b54_55 == 0x00 && special_user_info))
38871 eht_variant = true1;
38872
38873 switch (trigger_type) {
38874 case TRIGGER_TYPE_BASIC:
38875 case TRIGGER_TYPE_BRP:
38876 case TRIGGER_TYPE_MU_BAR:
38877 case TRIGGER_TYPE_MU_RTS:
38878 case TRIGGER_TYPE_BSRP:
38879 case TRIGGER_TYPE_GCR_MU_BAR:
38880 case TRIGGER_TYPE_BQRP:
38881 if (!eht_variant) {
38882 if (aid12_subfield != 0 && aid12_subfield != 2045) {
38883 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38884 hf_ieee80211_he_trigger_user_info,
38885 ett_he_trigger_base_user_info,
38886 user_info_headers_no_2045,
38887 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38888 } else {
38889 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38890 hf_ieee80211_he_trigger_user_info,
38891 ett_he_trigger_base_user_info,
38892 user_info_headers_2045,
38893 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38894 }
38895 } else {
38896 /* Is it a special user info? */
38897 if (special_user_info) {
38898 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38899 hf_ieee80211_eht_trigger_special_user_info,
38900 ett_he_trigger_base_user_info,
38901 special_user_info_headers_eht,
38902 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38903 } else {
38904 if (!phy_version_subfield) {
38905 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38906 hf_ieee80211_eht_trigger_user_info,
38907 ett_he_trigger_base_user_info,
38908 user_info_headers_eht,
38909 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38910 } else {
38911 /* 9.3.1.22.6 of 802.11bn and Figure 9-90j2 and Figure 9-90j3 */
38912 if(ddru_indication != 0) {
38913 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38914 hf_ieee80211_uhr_trigger_user_info,
38915 ett_he_trigger_base_user_info,
38916 user_info_headers_uhr_rru,
38917 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38918 } else {
38919 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38920 hf_ieee80211_uhr_trigger_user_info,
38921 ett_he_trigger_base_user_info,
38922 user_info_headers_uhr_dru,
38923 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38924 }
38925 }
38926 }
38927 }
38928 offset += 5;
38929 length += 5;
38930 break;
38931 case TRIGGER_TYPE_NFRP:
38932 add_nfrp_trigger_dependent_user_info(user_info, tvb, offset);
38933 offset += 5;
38934 length += 5;
38935 break;
38936 case TRIGGER_TYPE_RANGING:
38937 range_len = dissect_ieee80211_ranging_trigger_variant(user_info, tvb,
38938 offset, pinfo, subtype);
38939 if (range_len == 0) {
38940 /* XXX - unknown subtype, report this somehow */
38941 goto out;
38942 }
38943 offset += range_len;
38944 length += range_len;
38945 break;
38946 default:
38947 /* Should never get here */
38948 break;
38949 }
38950
38951
38952 /*
38953 * Handle the trigger dependent user info
38954 */
38955 switch (trigger_type) {
38956 case TRIGGER_TYPE_BASIC:
38957 add_basic_trigger_dependent_user_info(user_info, tvb, offset);
38958 offset++;
38959 length++;
38960 break;
38961 case TRIGGER_TYPE_BRP:
38962 add_brp_trigger_dependent_user_info(user_info, tvb, offset);
38963 offset++;
38964 length++;
38965 break;
38966 case TRIGGER_TYPE_MU_BAR:
38967 /* This is variable length so we need it to update the length */
38968 offset = add_mu_bar_trigger_dependent_user_info(user_info, tvb,
38969 offset, pinfo, &length);
38970 break;
38971 default:
38972 break;
38973 }
38974
38975 len_remaining = tvb_reported_length_remaining(tvb, offset);
38976 if (len_remaining < 5)
38977 aid12_subfield = 4095;
38978 else
38979 aid12_subfield = tvb_get_letohs(tvb, offset) & 0xFFF;
38980 }
38981
38982out:
38983
38984 if (aid12_subfield == 4095 && len_remaining >= 5) {
38985 /* Show the Start of Padding field. */
38986 proto_tree_add_item(user_info,
38987 hf_ieee80211_he_trigger_user_info_padding_start,
38988 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38989 offset += 2;
38990
38991 }
38992
38993 proto_item_set_len(pi, offset - start_offset);
38994
38995 /* Now, treat all the rest of the frame as padding */
38996 if (aid12_subfield == 4095 && len_remaining >= 5) {
38997 proto_tree_add_item(tree, hf_ieee80211_he_trigger_padding, tvb, offset,
38998 tvb_reported_length_remaining(tvb, offset) - fcs_len,
38999 ENC_NA0x00000000);
39000 }
39001
39002 *frame_len += length;
39003 return length;
39004}
39005
39006static const range_string ranging_trigger_subtype_vals[] = {
39007 { 0, 0, "Poll" },
39008 { 1, 1, "Sounding" },
39009 { 2, 2, "Secured Sounding" },
39010 { 3, 3, "Report" },
39011 { 4, 4, "Passive TB Measurement Exchange" },
39012 { 5, 15, "Reserved" },
39013 { 0, 0, NULL((void*)0)},
39014};
39015
39016static int * const ranging_headers1[] = {
39017 &hf_ieee80211_ranging_trigger_subtype1,
39018 &hf_ieee80211_ranging_trigger_reserved1,
39019 &hf_ieee80211_ranging_trigger_token,
39020 NULL((void*)0)
39021};
39022
39023static int * const ranging_headers2[] = {
39024 &hf_ieee80211_ranging_trigger_subtype2,
39025 &hf_ieee80211_ranging_trigger_reserved2,
39026 &hf_ieee80211_ranging_trigger_sounding_dialog_token,
39027 NULL((void*)0)
39028};
39029
39030static int
39031dissect_ieee80211_he_eht_trigger(tvbuff_t *tvb, packet_info *pinfo,
39032 proto_tree *tree, int offset, unsigned fcs_len)
39033{
39034 proto_tree *common_tree = NULL((void*)0);
39035 uint8_t trigger_type;
39036 uint8_t phy_version;
39037 uint8_t subtype = 0;
39038 int length = 0;
39039 uint8_t common_info_b54_55;
39040 bool_Bool eht_trigger = true1;
39041
39042 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
39043
39044 offset += 6;
39045 length += 6;
39046
39047 if (tvb_captured_length_remaining(tvb, offset) < 8) {
39048 expert_add_info_format(pinfo, tree, &ei_ieee80211_missing_data,
39049 "Invalid Trigger frame, not enough data for the "
39050 "Common Info field.");
39051 return tvb_captured_length(tvb);
39052 }
39053
39054 trigger_type = tvb_get_uint8(tvb, offset) & 0x0F;
39055 common_info_b54_55 = tvb_get_uint8(tvb, offset + 6);
39056 phy_version = (tvb_get_letohs(tvb, offset + 8) >> 12) & 0x01;
39057 if ((common_info_b54_55 >> 6) == 0x03)
39058 eht_trigger = false0;
39059
39060 col_append_fstr(pinfo->cinfo, COL_INFO, " %s %s",
39061 eht_trigger ? (phy_version ? "UHR": "EHT") : "HE",
39062 val64_to_str_wmem(pinfo->pool, trigger_type, trigger_type_vals, "Reserved"));
39063
39064 if (trigger_type >= TRIGGER_TYPE_MIN_RESERVED) {
39065 /* Add an Expert Info and forget it */
39066 proto_item *item;
39067
39068 item = proto_tree_add_item(tree, hf_ieee80211_he_trigger_type, tvb, offset,
39069 1, ENC_NA0x00000000);
39070 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
39071 "Trigger type too large: %u", trigger_type);
39072 return tvb_captured_length_remaining(tvb, offset) + length;
39073 }
39074
39075 /*
39076 * Deal with the common Info and then any user info after that.
39077 */
39078 offset += add_trigger_common_info(tree, tvb, offset, pinfo,
39079 trigger_type, &length, &common_tree);
39080
39081 /*
39082 * If the trigger type is Ranging Trigger type, then deal with it separately.
39083 */
39084 if (trigger_type == TRIGGER_TYPE_RANGING) {
39085 subtype = tvb_get_uint8(tvb, offset) & 0x0f;
39086
39087 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s",
39088 rval_to_str_const(subtype, ranging_trigger_subtype_vals, "Reserved"));
39089
39090 if (subtype >= TRIGGER_SUBTYPE_MIN_RESERVED) {
39091 proto_item *item;
39092
39093 item = proto_tree_add_item(tree, hf_ieee80211_ranging_trigger_subtype1,
39094 tvb, offset, 1, ENC_NA0x00000000);
39095 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
39096 "Ranging trigger subtype too large: %u", subtype);
39097 return tvb_captured_length_remaining(tvb, offset) + length;
39098 }
39099
39100 switch (subtype) {
39101 case TRIGGER_SUBTYPE_POLL:
39102 case TRIGGER_SUBTYPE_SOUNDING:
39103 case TRIGGER_SUBTYPE_SECURE_SOUNDING:
39104 case TRIGGER_SUBTYPE_REPORT:
39105 proto_tree_add_bitmask(common_tree, tvb, offset,
39106 hf_ieee80211_he_trigger_ranging_common_info_1,
39107 ett_he_trigger_ranging, ranging_headers1,
39108 ENC_NA0x00000000);
39109 offset += 1;
39110 break;
39111 case TRIGGER_SUBTYPE_PASSIVE_TB_MEAS_EXCHANGE:
39112 proto_tree_add_bitmask(common_tree, tvb, offset,
39113 hf_ieee80211_he_trigger_ranging_common_info_2,
39114 ett_he_trigger_ranging, ranging_headers2,
39115 ENC_LITTLE_ENDIAN0x80000000);
39116 offset += 2;
39117 break;
39118 default:
39119 /* We should never get here! */
39120 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 39120))
;
39121 break;
39122 }
39123 }
39124
39125 add_trigger_user_info(tree, tvb, offset, pinfo, trigger_type, subtype,
39126 common_info_b54_55, &length, fcs_len);
39127
39128 /*
39129 * Padding should commence here ... TODO, deal with it.
39130 */
39131
39132 return length;
39133}
39134
39135static int * const tack_headers[] = {
39136 &hf_ieee80211_tack_next_twt,
39137 &hf_ieee80211_tack_flow_identifier,
39138 NULL((void*)0)
39139};
39140
39141static int
39142dissect_ieee80211_s1g_tack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39143 proto_tree *tree, int offset, uint16_t flags)
39144{
39145 int length = 0;
39146
39147 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
39148
39149 offset += 6;
39150 length += 6;
39151
39152 proto_tree_add_item(tree, hf_ieee80211_beacon_sequence, tvb, offset, 1,
39153 ENC_NA0x00000000);
39154 offset += 1;
39155 length += 1;
39156
39157 proto_tree_add_item(tree, hf_ieee80211_pentapartial_timestamp, tvb, offset,
39158 5, ENC_LITTLE_ENDIAN0x80000000);
39159 offset += 5;
39160 length += 5;
39161
39162 if ((flags & 0xC0) == 0xC0) {
39163 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
39164 hf_ieee80211_tack_next_twt_info, ett_tack_info,
39165 tack_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39166 length += 6;
39167 }
39168
39169 return length;
39170}
39171
39172/*
39173 * Dissect a VHT or an HE NDP announcement frame. They differ past
39174 * the sounding dialog token with a bit in the SDT indicating VHT vs HE.
39175 */
39176#define NDP_ANNC_VHT_HE0x02 0x02
39177
39178static const value_string ndp_annc_variant_vals[] = {
39179 { 0, "VHT NDP Announcement" },
39180 { 1, "Ranging NDP Announcement" },
39181 { 2, "HE NDP Announcement" },
39182 { 3, "EHT NDP Announcement" },
39183 { 0, NULL((void*)0) }
39184};
39185
39186static int * const sta_info_ranging_2008[] = {
39187 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_aid11,
39188 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_ltf_offset,
39189 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_n_sts,
39190 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_rep,
39191 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_n_sts,
39192 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved1,
39193 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_disambiguation,
39194 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_rep,
39195 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved2,
39196 NULL((void*)0)
39197};
39198
39199static int * const sta_info_ranging_2043[] = {
39200 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_aid11,
39201 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_sac,
39202 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_disambiguation,
39203 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_reserved,
39204 NULL((void*)0)
39205};
39206
39207static int * const sta_info_ranging_2044[] = {
39208 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_aid11,
39209 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_partial_tsf,
39210 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_disambiguation,
39211 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_reserved,
39212 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_token,
39213 NULL((void*)0)
39214};
39215
39216static int * const sta_info_ranging_2045[] = {
39217 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_aid11,
39218 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_i2r_ndp_tx_power,
39219 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_r2i_ndp_target_rssi,
39220 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_disambiguation,
39221 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_reserved,
39222 NULL((void*)0)
39223};
39224
39225static int
39226dissect_ieee80211_ranging_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39227 proto_tree *tree, int offset, bool_Bool has_fcs)
39228{
39229 uint8_t len_fcs = 0;
39230 proto_tree *sta_list;
39231 proto_item *sta_info_item, *pi;
39232 int saved_offset = 0;
39233 int sta_index = 0;
39234
39235 if (has_fcs){
39236 len_fcs = 4;
39237 }
39238
39239 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39240 ett_ndp_ranging_annc_sta_list, &pi, "STA list");
39241 saved_offset = offset;
39242
39243 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39244 uint16_t aid11;
39245
39246 sta_info_item = proto_tree_add_subtree_format(sta_list, tvb, offset, 2,
39247 ett_ndp_ranging_annc_sta_info, NULL((void*)0), "STA %d",
39248 sta_index++);
39249
39250 aid11 = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000) & 0x7ff;
39251 if (aid11 < 2008) {
39252 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39253 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008,
39254 ett_vht_ranging_annc, sta_info_ranging_2008,
39255 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39256 } else if (aid11 == 2043) {
39257 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39258 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043,
39259 ett_vht_ranging_annc, sta_info_ranging_2043,
39260 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39261 } else if (aid11 == 2044) {
39262 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39263 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044,
39264 ett_vht_ranging_annc, sta_info_ranging_2044,
39265 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39266 } else if (aid11 == 2045) {
39267 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39268 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045,
39269 ett_vht_ranging_annc, sta_info_ranging_2045,
39270 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39271 }
39272 offset += 4;
39273 }
39274
39275 proto_item_set_len(pi, offset - saved_offset);
39276 return offset;
39277}
39278
39279static int
39280dissect_ieee80211_vht_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39281 proto_tree *tree, int offset, bool_Bool has_fcs)
39282{
39283 uint16_t sta_info;
39284 uint8_t len_fcs = 0;
39285 proto_tree *sta_list;
39286 proto_item *sta_info_item, *pi;
39287 int saved_offset = 0;
39288 int sta_index = 0;
39289
39290 if (has_fcs){
39291 len_fcs = 4;
39292 }
39293
39294 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39295 ett_ndp_vht_annc_sta_list, &pi, "STA list");
39296 saved_offset = offset;
39297
39298 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39299 sta_info_item = proto_tree_add_subtree_format(sta_list, tvb, offset, 2,
39300 ett_ndp_vht_annc_sta_info_tree, NULL((void*)0), "STA %d",
39301 sta_index++);
39302
39303 proto_tree_add_item(sta_info_item, hf_ieee80211_vht_ndp_annc_sta_info_aid12,
39304 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39305 proto_tree_add_item(sta_info_item,
39306 hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
39307 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39308
39309 sta_info = tvb_get_letohs(tvb, offset);
39310
39311 if (sta_info & 0x1000)
39312 proto_tree_add_uint(sta_info_item,
39313 hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
39314 tvb, offset, 2, sta_info);
39315 else
39316 proto_tree_add_item(sta_info_item,
39317 hf_ieee80211_vht_ndp_annc_sta_info_reserved,
39318 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39319 offset += 2;
39320 }
39321
39322 proto_item_set_len(pi, offset - saved_offset);
39323 return offset;
39324}
39325
39326static int * const he_ndp_sta_headers[] = {
39327 &hf_ieee80211_he_ndp_annc_aid11,
39328 &hf_ieee80211_he_ndp_annc_ru_start,
39329 &hf_ieee80211_he_ndp_annc_ru_end,
39330 &hf_ieee80211_he_ndp_annc_feedback_type_and_ng,
39331 &hf_ieee80211_he_ndp_annc_disambiguation,
39332 &hf_ieee80211_he_ndp_annc_codebook_size,
39333 &hf_ieee80211_he_ndp_annc_nc,
39334 NULL((void*)0)
39335};
39336
39337static int * const he_ndp_annc_2047_hdrs[] = {
39338 &hf_ieee80211_he_ndp_annc_aid11,
39339 &hf_ieee80211_he_ndp_annc_disallowed_bitmap,
39340 &hf_ieee80211_he_ndp_annc_reserved1,
39341 &hf_ieee80211_he_ndp_annc_disambiguation,
39342 &hf_ieee80211_he_ndp_annc_reserved2,
39343 NULL((void*)0)
39344};
39345
39346static int
39347dissect_ieee80211_he_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39348 proto_tree *tree, int offset, bool_Bool has_fcs)
39349{
39350 uint8_t len_fcs = 0;
39351 proto_tree *sta_list;
39352 proto_item *pi;
39353 int saved_offset;
39354 int sta_index = 0;
39355
39356 if (has_fcs){
39357 len_fcs = 4;
39358 }
39359
39360 saved_offset = offset;
39361 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39362 ett_ndp_he_annc_sta_list, &pi, "STA list");
39363
39364 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39365 proto_tree *sta_item;
39366 uint32_t sta_info = tvb_get_letohl(tvb, offset);
39367
39368 sta_item = proto_tree_add_subtree_format(sta_list, tvb, offset, 4,
39369 ett_ndp_he_annc_sta_item, NULL((void*)0), "STA %d", sta_index++);
39370 if ((sta_info & 0x000007ff) < 2047) {
39371 proto_tree_add_bitmask_with_flags(sta_item, tvb, offset,
39372 hf_ieee80211_he_ndp_annc_sta,
39373 ett_ndp_he_annc_sta_info,
39374 he_ndp_sta_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39375 } else {
39376 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
39377 hf_ieee80211_he_ndp_annc_sta,
39378 ett_ndp_he_annc_sta_info,
39379 he_ndp_annc_2047_hdrs, ENC_LITTLE_ENDIAN0x80000000,
39380 BMT_NO_APPEND0x01);
39381 }
39382
39383 offset += 4;
39384 }
39385
39386 proto_item_set_len(pi, offset - saved_offset);
39387 return offset;
39388}
39389
39390static int * const eht_ndp_annc_hdrs[] = {
39391 &hf_ieee80211_ndp_eht_annc_aid11,
39392 &hf_ieee80211_ndp_eht_annc_resolution,
39393 &hf_ieee80211_ndp_eht_annc_feedback_map,
39394 &hf_ieee80211_ndp_eht_annc_reserved1,
39395 &hf_ieee80211_ndp_eht_annc_nc_index,
39396 &hf_ieee80211_ndp_eht_annc_feedback_type,
39397 &hf_ieee80211_ndp_eht_annc_disambiguation,
39398 &hf_ieee80211_ndp_eht_annc_codebook_size,
39399 &hf_ieee80211_ndp_eht_annc_reserved2,
39400 NULL((void*)0)
39401};
39402
39403static int
39404dissect_ieee80211_eht_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39405 proto_tree *tree, int offset, bool_Bool has_fcs)
39406{
39407 uint8_t len_fcs = 0;
39408 proto_tree *sta_list;
39409 proto_item *pi;
39410 int saved_offset;
39411
39412 if (has_fcs){
39413 len_fcs = 4;
39414 }
39415
39416 saved_offset = offset;
39417 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39418 ett_ndp_eht_annc_sta_list, &pi, "STA list");
39419
39420 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39421
39422 proto_tree_add_bitmask_with_flags(sta_list, tvb, offset,
39423 hf_ieee80211_ndp_eht_annc_sta_info,
39424 ett_ndp_eht_annc_sta_info,
39425 eht_ndp_annc_hdrs, ENC_LITTLE_ENDIAN0x80000000,
39426 BMT_NO_APPEND0x01);
39427 offset += 4;
39428 }
39429
39430 proto_item_set_len(pi, offset - saved_offset);
39431 return offset;
39432}
39433
39434static int * const ndp_annc_headers[] = {
39435 &hf_ieee80211_ndp_annc_variant,
39436 &hf_ieee80211_ndp_annc_token_number,
39437 NULL((void*)0)
39438};
39439
39440static int
39441dissect_ieee80211_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39442 proto_tree *tree, int offset, bool_Bool has_fcs)
39443{
39444 proto_item *dialog;
39445 uint8_t dialog_token;
39446
39447 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
39448 offset += 6;
39449
39450 dialog_token = tvb_get_uint8(tvb, offset);
39451 col_append_fstr(pinfo->cinfo, COL_INFO, ", Sounding Dialog Token=%d",
39452 dialog_token);
39453
39454 dialog = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
39455 hf_ieee80211_ndp_annc_token, ett_ndp_annc,
39456 ndp_annc_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
39457
39458 offset++;
39459
39460 if ((dialog_token & 0x03) == 0x00) {
39461 proto_item_append_text(dialog, " VHT NDP Announcement");
39462 return dissect_ieee80211_vht_ndp_annc(tvb, pinfo, tree, offset, has_fcs);
39463 } else if ((dialog_token & 0x03) == 0x01) {
39464 proto_item_append_text(dialog, " Ranging NDP Announcement");
39465 return dissect_ieee80211_ranging_ndp_annc(tvb, pinfo, tree, offset,
39466 has_fcs);
39467 } else if ((dialog_token & 0x03) == 0x02) {
39468 proto_item_append_text(dialog, " HE NDP Announcement");
39469 return dissect_ieee80211_he_ndp_annc(tvb, pinfo, tree, offset, has_fcs);
39470 } else if ((dialog_token & 0x03) == 0x03) {
39471 proto_item_append_text(dialog, " EHT NDP Announcement");
39472 return dissect_ieee80211_eht_ndp_annc(tvb, pinfo, tree, offset, has_fcs);
39473 } else {
39474 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 39474))
;
39475 }
39476
39477 return offset;
39478}
39479
39480static void
39481set_src_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, int type)
39482{
39483 set_address_tvb(&pinfo->dl_src, type, 6, tvb, offset);
39484 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
39485 // Should we call proto_tree_add_mac48_detail here?
39486}
39487
39488static void
39489set_dst_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, int type)
39490{
39491 set_address_tvb(&pinfo->dl_dst, type, 6, tvb, offset);
39492 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
39493 // Should we call proto_tree_add_mac48_detail here?
39494}
39495
39496static uint32_t
39497crc32_802_tvb_padded(tvbuff_t *tvb, unsigned hdr_len, unsigned hdr_size, unsigned len)
39498{
39499 uint32_t c_crc;
39500
39501 c_crc = crc32_ccitt_tvb(tvb, hdr_len);
39502 c_crc = crc32_ccitt_tvb_offset_seed(tvb, hdr_size, len, ~c_crc);
39503
39504 return (c_crc);
39505}
39506
39507/*
39508 * Check if the SA at offset is that of an S1G STA, and if so, and the
39509 * IS_S1G_KEY with true.
39510 */
39511static void
39512check_s1g_setting(packet_info *pinfo, tvbuff_t *tvb, int offset)
39513{
39514 uint8_t *src_addr[6];
39515 tvb_memcpy(tvb, src_addr, offset, 6);
39516 unsigned result = GPOINTER_TO_UINT(wmem_map_lookup(sta_prop_hash, &src_addr))((guint) (gulong) (wmem_map_lookup(sta_prop_hash, &src_addr
)))
;
39517 if (result == STA_IS_S1G0x00000001) {
39518 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_S1G_KEY, GINT_TO_POINTER(true)((gpointer) (glong) (1)));
39519 }
39520}
39521
39522typedef enum {
39523 ENCAP_802_2,
39524 ENCAP_IPX,
39525 ENCAP_ETHERNET,
39526 ENCAP_EPD
39527} encap_t;
39528
39529/*
39530 * Dissect a Protocol Version 1 frame
39531 */
39532
39533static const value_string pv1_frame_type_vals[] = {
39534 { 0, "PV1 QoS Data - with one SID" },
39535 { 1, "PV1 Management" },
39536 { 2, "PV1 Control" } ,
39537 { 3, "PV1 QoS Data - no SIDs" },
39538 { 4, "PV1 Reserved" },
39539 { 5, "PV1 Reserved" },
39540 { 6, "PV1 Reserved" },
39541 { 7, "PV1 Extension (currently reserved)" },
39542 { 0, NULL((void*)0) }
39543};
39544
39545static const value_string pv1_control_frame_type_vals[] = {
39546 { 0, "STACK" },
39547 { 1, "BAT" },
39548 { 2, "Reserved" },
39549 { 3, "Reserved" },
39550 { 4, "Reserved" },
39551 { 5, "Reserved" },
39552 { 6, "Reserved" },
39553 { 7, "Reserved" },
39554 { 0, NULL((void*)0) }
39555};
39556
39557static const value_string pv1_management_frame_type_vals[] = {
39558 { 0, "Action" },
39559 { 1, "Action No Ack" },
39560 { 2, "PV1 Probe Response" },
39561 { 3, "Resource Allocation" },
39562 { 4, "Reserved" },
39563 { 5, "Reserved" },
39564 { 6, "Reserved" },
39565 { 7, "Reserved" },
39566 { 0, NULL((void*)0) }
39567};
39568
39569/* Also used for S1G PV0 */
39570static const value_string pv1_bandwidth_indic_vals[] = {
39571 { 0, "1 MHz" },
39572 { 1, "2 MHz" },
39573 { 2, "4 MHz" },
39574 { 3, "8 MHz" },
39575 { 4, "16 MHz" },
39576 { 5, "Reserved" },
39577 { 6, "Reserved" },
39578 { 7, "Reserved" },
39579 { 0, NULL((void*)0) },
39580};
39581
39582/*
39583 * Extract the three interesting flags from an SID, however, only set
39584 * the respective booleans if the flag is set in the SID.
39585 */
39586static void
39587extract_a3_a4_amsdu(uint16_t sid, bool_Bool *a3_present, bool_Bool *a4_present,
39588 bool_Bool *a_msdu)
39589{
39590 if (sid & SID_A3_PRESENT0x2000)
39591 *a3_present = true1;
39592 if (sid & SID_A4_PRESENT0x4000)
39593 *a4_present = true1;
39594 if (sid & SID_A_MSDU0x8000)
39595 *a_msdu = true1;
39596}
39597
39598static int
39599wlan_aid_to_str(const address* addr, char* buf, int buf_len)
39600{
39601 int ret;
39602
39603 ret = snprintf(buf, buf_len, "0x%04"PRIx16"x", *(uint16_t *)addr->data);
39604
39605 return ret + 1;
39606}
39607
39608static int
39609wlan_aid_str_len(const address* addr _U___attribute__((unused)))
39610{
39611 return sizeof("0x0000");
39612}
39613
39614#if 0
39615/* The length is 2 bytes, but tvb_address_to_str() etc. don't have a way of
39616 * dealing with addresses that need to mask out bits in the tvb. */
39617static int
39618wlan_aid_len(void)
39619{
39620 return 2;
39621}
39622#endif
39623
39624/*
39625 * If we know the AID, then translated it to an Ethernet addr, otherwise
39626 * just place the AID in the correct col
39627 */
39628static void
39629set_sid_addr_cols(packet_info *pinfo, uint16_t sid, bool_Bool dst)
39630{
39631 uint16_t* aid = wmem_new0(pinfo->pool, uint16_t)((uint16_t*)wmem_alloc0((pinfo->pool), sizeof(uint16_t)));
39632 *aid = sid & SID_AID_MASK0x1FFF;
39633 if (dst) {
39634 set_address(&pinfo->dl_dst, wlan_aid_address_type, (int)sizeof(*aid), aid);
39635 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
39636 } else {
39637 set_address(&pinfo->dl_src, wlan_aid_address_type, (int)sizeof(*aid), aid);
39638 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
39639 }
39640}
39641
39642static int * const sid_headers[] = {
39643 &hf_ieee80211_pv1_sid_association_id,
39644 &hf_ieee80211_pv1_sid_a3_present,
39645 &hf_ieee80211_pv1_sid_a4_present,
39646 &hf_ieee80211_pv1_sid_a_msdu,
39647 NULL((void*)0)
39648};
39649
39650static void
39651dissect_pv1_sid(proto_tree *tree, packet_info *pinfo _U___attribute__((unused)), tvbuff_t *tvb,
39652 unsigned offset)
39653{
39654 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_pv1_sid,
39655 ett_pv1_sid_field, sid_headers, ENC_LITTLE_ENDIAN0x80000000);
39656
39657}
39658
39659static void
39660dissect_pv1_sequence_control(proto_tree *tree, packet_info *pinfo _U___attribute__((unused)),
39661 tvbuff_t *tvb, unsigned offset)
39662{
39663 proto_tree *seq_ctrl_tree = NULL((void*)0);
39664
39665 seq_ctrl_tree = proto_tree_add_subtree(tree, tvb, offset, 2,
39666 ett_pv1_seq_control, NULL((void*)0),
39667 "Sequence Control");
39668 proto_tree_add_item(seq_ctrl_tree, hf_ieee80211_frag_number, tvb, offset, 2,
39669 ENC_LITTLE_ENDIAN0x80000000);
39670 proto_tree_add_item(seq_ctrl_tree, hf_ieee80211_seq_number, tvb, offset, 2,
39671 ENC_LITTLE_ENDIAN0x80000000);
39672}
39673
39674static int
39675dissect_pv1_data(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)),
39676 int offset, bool_Bool a_msdu _U___attribute__((unused)), struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39677 unsigned len_no_fcs _U___attribute__((unused)))
39678{
39679
39680 return offset;
39681}
39682
39683static int
39684dissect_pv1_mgmt_action(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39685 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39686 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39687 unsigned len _U___attribute__((unused)))
39688{
39689 proto_tree *mgmt_action_tree = NULL((void*)0);
39690
39691 mgmt_action_tree = proto_tree_add_subtree(tree, tvb, offset, 4,
39692 ett_pv1_mgmt_action, NULL((void*)0),
39693 "Action");
39694 dissect_mgt_action(tvb, pinfo, mgmt_action_tree, offset, NULL((void*)0));
39695
39696 return offset;
39697}
39698
39699static int
39700dissect_pv1_mgmt_action_no_ack(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39701 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39702 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39703 unsigned len _U___attribute__((unused)))
39704{
39705 proto_tree *mgmt_action_tree = NULL((void*)0);
39706
39707 mgmt_action_tree = proto_tree_add_subtree(tree, tvb, offset, 4,
39708 ett_pv1_mgmt_action, NULL((void*)0),
39709 "Action No Ack");
39710 dissect_mgt_action(tvb, pinfo, mgmt_action_tree, offset, NULL((void*)0));
39711
39712 return offset;
39713}
39714
39715#define PV1_NEXT_TBTT_PRESENT0x0100 0x0100
39716#define PV1_FULL_SSID_PRESENT0x0200 0x0200
39717#define PV1_ANO_PRESENT0x0400 0x0400
39718
39719static int
39720dissect_pv1_mgmt_probe_response(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39721 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39722 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39723 unsigned len _U___attribute__((unused)), uint16_t frame_control _U___attribute__((unused)))
39724{
39725
39726 return offset;
39727}
39728
39729static int
39730dissect_pv1_mgmt_resource_alloc(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39731 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39732 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39733 unsigned len _U___attribute__((unused)), uint16_t frame_control _U___attribute__((unused)))
39734{
39735
39736 return offset;
39737}
39738
39739static int
39740dissect_pv1_management(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)),
39741 int offset, struct ieee_802_11_phdr *phdr _U___attribute__((unused)), uint8_t subtype,
39742 unsigned len_no_fcs, uint16_t frame_control _U___attribute__((unused)))
39743{
39744
39745 /*
39746 * XXX - We add COMPOSE_FRAME_TYPE(fcf) (which doesn't work for PV1) as
39747 * proto_data FRAME_TYPE_KEY for PV0. Do we need to put something here?
39748 */
39749 switch (subtype) {
39750 case PV1_MANAGEMENT_ACTION0x00:
39751 offset = dissect_pv1_mgmt_action(tvb, pinfo, tree, offset, phdr, len_no_fcs);
39752 break;
39753 case PV1_MANAGEMENT_ACTION_NO_ACK0x01:
39754 offset = dissect_pv1_mgmt_action_no_ack(tvb, pinfo, tree, offset, phdr, len_no_fcs);
39755 break;
39756 case PV1_MANAGEMENT_PROBE_RESPONSE0x02:
39757 offset = dissect_pv1_mgmt_probe_response(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39758 break;
39759 case PV1_MANAGEMENT_RESOURCE_ALLOC0x03:
39760 offset = dissect_pv1_mgmt_resource_alloc(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39761 break;
39762 default:
39763 proto_tree_add_item(tree, hf_ieee80211_pv1_mgmt_reserved, tvb, offset,
39764 len_no_fcs, ENC_NA0x00000000);
39765 offset = len_no_fcs;
39766 }
39767
39768 return offset;
39769}
39770
39771static int
39772dissect_pv1_control_stack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39773 proto_tree *tree, int offset,
39774 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39775 unsigned len _U___attribute__((unused)), uint16_t frame_control _U___attribute__((unused)))
39776{
39777 proto_tree *stack_tree = NULL((void*)0);
39778
39779 stack_tree = proto_tree_add_subtree(tree, tvb, offset, 4, ett_pv1_cntl_stack,
39780 NULL((void*)0), "STACK");
39781 proto_tree_add_item(stack_tree, hf_ieee80211_pv1_cnt_stack_tetra_timest,
39782 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
39783 offset += 4;
39784
39785 return offset;
39786}
39787
39788static int
39789dissect_pv1_control_bat(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39790 proto_tree *tree, int offset,
39791 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39792 unsigned len _U___attribute__((unused)),
39793 uint16_t frame_control _U___attribute__((unused)))
39794{
39795 proto_tree *bat_tree = NULL((void*)0);
39796
39797 bat_tree = proto_tree_add_subtree(tree, tvb, offset, 4, ett_pv1_cntl_stack,
39798 NULL((void*)0), "BAT");
39799
39800 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_beacon_seq, tvb,
39801 offset, 1, ENC_NA0x00000000);
39802 offset += 1;
39803
39804 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_penta_timest, tvb,
39805 offset, 5, ENC_LITTLE_ENDIAN0x80000000);
39806 offset += 5;
39807
39808 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_next_twt_info, tvb,
39809 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
39810 offset += 6;
39811
39812 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_stating_seq_cntl, tvb,
39813 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39814 offset += 6;
39815
39816 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_bitmap, tvb, offset,
39817 4, ENC_LITTLE_ENDIAN0x80000000);
39818 offset += 4;
39819
39820 return offset;
39821}
39822
39823static int
39824dissect_pv1_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
39825 int offset, struct ieee_802_11_phdr *phdr, uint8_t subtype,
39826 unsigned len_no_fcs, uint16_t frame_control)
39827{
39828 switch (subtype) {
39829 case PV1_CONTROL_STACK0x00:
39830 offset = dissect_pv1_control_stack(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39831 break;
39832
39833 case PV1_CONTROL_BAT0x01:
39834 offset = dissect_pv1_control_bat(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39835 break;
39836
39837 default:
39838 proto_tree_add_item(tree, hf_ieee80211_pv1_cntl_reserved, tvb, offset,
39839 len_no_fcs, ENC_NA0x00000000);
39840 offset = len_no_fcs;
39841 }
39842
39843 return offset;
39844}
39845
39846static int
39847dissect_ieee80211_pv1(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
39848 struct ieee_802_11_phdr *phdr)
39849{
39850 uint16_t fcf;
39851 uint8_t type, subtype, from_ds;
39852 unsigned offset = 0;
39853 const char *fts_str = NULL((void*)0);
39854 proto_item *ti;
39855 proto_tree *hdr_tree;
39856 proto_item *fc_item = NULL((void*)0);
39857 proto_tree *fc_tree = NULL((void*)0);
39858 bool_Bool a1_is_sid = false0;
39859 bool_Bool a2_is_sid = false0;
39860 bool_Bool a3_present = false0;
39861 bool_Bool a4_present = false0;
39862 bool_Bool a_msdu = false0;
39863 unsigned len = tvb_reported_length_remaining(tvb, offset);
39864 unsigned len_no_fcs = len;
39865 proto_tree *mgt_tree;
39866
39867 fcf = tvb_get_letohs(tvb, offset);
39868
39869 type = FCF_PV1_TYPE(fcf)(((fcf) >> 2) & 0x7);
39870 subtype = FCF_PV1_SUBTYPE(fcf)(((fcf) >> 5) & 0x7);
39871
39872 fts_str = val_to_str(pinfo->pool, type, pv1_frame_type_vals, "Unrecognized frame type (%d)");
39873 col_set_str(pinfo->cinfo, COL_INFO, fts_str);
39874
39875 /* Create the protocol tree */
39876 ti = proto_tree_add_protocol_format (tree, proto_wlan, tvb, 0, -1,
39877 "IEEE 802.11 %s", fts_str);
39878 hdr_tree = proto_item_add_subtree(ti, ett_80211);
39879
39880 /* Add the FC and duration/id to the current tree */
39881 fc_item = proto_tree_add_item(hdr_tree, hf_ieee80211_fc_field, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39882
39883 fc_tree = proto_item_add_subtree(fc_item, ett_fc_tree);
39884
39885 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_proto_version, tvb, offset,
39886 2, ENC_LITTLE_ENDIAN0x80000000);
39887 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_type, tvb, offset, 2,
39888 ENC_LITTLE_ENDIAN0x80000000);
39889 /*
39890 * PDID/Subtype depends on ... whether it is a QoS data frame or Control
39891 * or Management frames
39892 */
39893 switch (type) {
39894 case PV1_QOS_DATA_1MAC0x00:
39895 case PV1_QOS_DATA_2MAC0x03:
39896 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_ptid, tvb, offset, 2,
39897 ENC_LITTLE_ENDIAN0x80000000);
39898 break;
39899
39900 case PV1_MANAGEMENT0x01:
39901 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_subtype, tvb, offset,
39902 2, ENC_LITTLE_ENDIAN0x80000000);
39903 break;
39904
39905 case PV1_CONTROL0x02:
39906 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_subtype, tvb, offset,
39907 2, ENC_LITTLE_ENDIAN0x80000000);
39908 break;
39909
39910 default: /* Assume all else just a 3-bit field */
39911 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_unk_field, tvb, offset, 2,
39912 ENC_LITTLE_ENDIAN0x80000000);
39913 break;
39914 }
39915
39916 from_ds = (fcf >> 8) & 0x01; /* It's also the slot assignment field */
39917
39918 switch (type) {
39919 case PV1_CONTROL0x02:
39920 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_bw_indication, tvb,
39921 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39922 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_dynamic_indication, tvb,
39923 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39924 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_power_mgmt, tvb,
39925 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39926 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_more_data, tvb,
39927 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39928 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_flow_control, tvb,
39929 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39930 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_next_twt_info, tvb,
39931 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39932 break;
39933 case PV1_MANAGEMENT0x01:
39934 if (subtype == PV1_MANAGEMENT_PROBE_RESPONSE0x02) {
39935 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_next_tbt, tvb,
39936 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39937 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_full_ssid, tvb,
39938 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39939 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_ano, tvb,
39940 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39941 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_bss_bw, tvb,
39942 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39943 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_security, tvb,
39944 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39945 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_1mhz_pc, tvb,
39946 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39947 } else if (subtype == PV1_MANAGEMENT_RESOURCE_ALLOC0x03) {
39948 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_slot_assign, tvb,
39949 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39950 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_more_frag, tvb,
39951 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39952 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_pwr_mgmt, tvb,
39953 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39954 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_grp_indic, tvb,
39955 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39956 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_protected, tvb,
39957 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39958 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_end_of_svc, tvb,
39959 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39960 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_relayed_frm, tvb,
39961 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39962 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_ack_policy, tvb,
39963 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39964 } else {
39965 // TODO: What about the rest
39966 }
39967 break;
39968
39969 default:
39970 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_from_ds, tvb, offset, 2,
39971 ENC_LITTLE_ENDIAN0x80000000);
39972 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_more_fragments, tvb,
39973 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39974 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_power_mgmt, tvb, offset, 2,
39975 ENC_LITTLE_ENDIAN0x80000000);
39976 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_more_data, tvb, offset, 2,
39977 ENC_LITTLE_ENDIAN0x80000000);
39978 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_protected_frame, tvb,
39979 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39980 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_end_service_per, tvb,
39981 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39982 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_relayed_frame, tvb, offset,
39983 2, ENC_LITTLE_ENDIAN0x80000000);
39984 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_ack_policy, tvb, offset, 2,
39985 ENC_LITTLE_ENDIAN0x80000000);
39986 }
39987
39988 offset += 2;
39989
39990 /*
39991 * Now, handle the MAC addresses or SIDs, which is dependent on the
39992 * Type and From DS etc.
39993 */
39994
39995 if (from_ds == 0x0) {
39996 a2_is_sid = true1;
39997 } else {
39998 a1_is_sid = true1;
39999 }
40000
40001 /* Now override where needed */
40002 switch (type) {
40003 case PV1_MANAGEMENT0x01:
40004 if (subtype == PV1_MANAGEMENT_PROBE_RESPONSE0x02) {
40005 a1_is_sid = false0;
40006 a2_is_sid = false0;
40007 }
40008 break;
40009 case PV1_CONTROL0x02:
40010 a1_is_sid = true1;
40011 break;
40012 case PV1_QOS_DATA_2MAC0x03:
40013 a1_is_sid = false0;
40014 a2_is_sid = false0;
40015 break;
40016 }
40017
40018 /*
40019 * Now handle the address fields.
40020 * If one of them is a SID, then it tells us if A3 and/or A4 is there.
40021 *
40022 * Also, add the SID (with MAC address if we know it), or the MAC
40023 * addr depending on type.
40024 *
40025 * XXX - For PV1_CONTROL frames (IEEE 802.11-2020 9.8.4), the A3 Present,
40026 * A4 Present, and A-MSDU subfields of the SID are reserved. Should
40027 * they be dissected differently, and ignored / expert info if set?
40028 *
40029 * For PV1_MANAGEMENT frames (9.8.5), A4 and A-MSDU cannot be present.
40030 * Ignore / expert info if set?
40031 */
40032 if (a1_is_sid) {
40033 uint16_t a1 = tvb_get_letohs(tvb, offset);
40034 proto_tree *dst_sid = NULL((void*)0);
40035
40036 extract_a3_a4_amsdu(a1, &a3_present, &a4_present, &a_msdu);
40037 set_sid_addr_cols(pinfo, a1, true1); /* Set the R SID address from A1 */
40038
40039 dst_sid = proto_tree_add_subtree(hdr_tree, tvb, offset, 2, ett_pv1_sid,
40040 NULL((void*)0), "Receiver SID");
40041 dissect_pv1_sid(dst_sid, pinfo, tvb, offset);
40042 offset += 2;
40043 } else {
40044 set_dst_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40045 proto_tree_add_mac48_detail(&mac_ra, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40046 offset += 6;
40047 }
40048
40049 if (a2_is_sid) {
40050 uint16_t a2 = tvb_get_letohs(tvb, offset);
40051 proto_tree *src_sid = NULL((void*)0);
40052
40053 extract_a3_a4_amsdu(a2, &a3_present, &a4_present, &a_msdu);
40054 set_sid_addr_cols(pinfo, a2, false0); /* Set the T SID address from A2 */
40055
40056 src_sid = proto_tree_add_subtree(hdr_tree, tvb, offset, 2, ett_pv1_sid,
40057 NULL((void*)0), "Transmitter SID");
40058 dissect_pv1_sid(src_sid, pinfo, tvb, offset);
40059 offset += 2;
40060 } else {
40061 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40062 proto_tree_add_mac48_detail(&mac_ta, NULL((void*)0), ett_addr, tvb, hdr_tree, offset);
40063 offset += 6;
40064 }
40065
40066 /* Now, add the sequence control field if present */
40067 switch (type) {
40068 case PV1_QOS_DATA_1MAC0x00:
40069 case PV1_QOS_DATA_2MAC0x03:
40070 dissect_pv1_sequence_control(hdr_tree, pinfo, tvb, offset);
40071 offset += 2;
40072 break;
40073 case PV1_MANAGEMENT0x01:
40074 if (subtype != PV1_MANAGEMENT_PROBE_RESPONSE0x02) {
40075 dissect_pv1_sequence_control(hdr_tree, pinfo, tvb, offset);
40076 offset += 2;
40077 }
40078 break;
40079 }
40080 /* Now, add A3 and A4 if present */
40081 if (a3_present) {
40082 set_dst_addr_cols(pinfo, tvb, offset, wlan_address_type);
40083 proto_tree_add_mac48_detail(&mac_da, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40084 offset += 6;
40085 }
40086
40087 if (a4_present) {
40088 set_src_addr_cols(pinfo, tvb, offset, wlan_address_type);
40089 proto_tree_add_mac48_detail(&mac_sa, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40090 offset += 6;
40091 }
40092
40093 /* TODO: Properly handle the FCS len */
40094 if (phdr->fcs_len == 4)
40095 len_no_fcs -= 4;
40096
40097 /* Now, handle the body */
40098 switch (type) {
40099 case PV1_QOS_DATA_1MAC0x00:
40100 case PV1_QOS_DATA_2MAC0x03:
40101 offset = dissect_pv1_data(tvb, pinfo, tree, offset, a_msdu, phdr, len_no_fcs);
40102 break;
40103 case PV1_MANAGEMENT0x01:
40104 ti = proto_tree_add_item(tree, hf_ieee80211_mgt, tvb, 0, -1, ENC_NA0x00000000);
40105 mgt_tree = proto_item_add_subtree(ti, ett_80211_mgt);
40106 offset = dissect_pv1_management(tvb, pinfo, mgt_tree, offset, phdr, subtype, len_no_fcs, fcf);
40107 break;
40108 case PV1_CONTROL0x02:
40109 offset = dissect_pv1_control(tvb, pinfo, fc_tree, offset, phdr, subtype, len_no_fcs, fcf);
40110 break;
40111 default:
40112 /* Invalid so far. Insert as data and add an Expert Info */
40113 break;
40114 }
40115
40116 /* Now, handle the FCS, if present */
40117 if (phdr->fcs_len == 4) {
40118 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);
40119 }
40120
40121 return offset;
40122}
40123
40124static int
40125dissect_ieee80211_pv0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
40126 uint32_t option_flags, wlan_hdr_t *whdr,
40127 struct ieee_802_11_phdr *phdr)
40128{
40129 uint16_t fcf, flags, frame_type_subtype, ctrl_fcf, ctrl_type_subtype;
40130 uint16_t cw_fcf;
40131 uint16_t seq_control;
40132 uint32_t seq_number, frag_number;
40133 bool_Bool more_frags;
40134 proto_item *ti = NULL((void*)0);
40135 proto_item *cw_item = NULL((void*)0);
40136 proto_tree *flags_item;
40137 proto_item *hidden_item;
40138 proto_tree *cw_tree = NULL((void*)0);
40139 uint16_t hdr_len, ohdr_len;
40140 uint16_t htc_len = 0;
40141 bool_Bool has_fcs;
40142 int len, reported_len, ivlen;
40143 int sta_addr_offset = 0;
40144 bool_Bool is_amsdu = 0;
40145 bool_Bool save_fragmented;
40146 uint32_t addr_type;
40147 uint8_t octet1, octet2;
40148 uint16_t etype;
40149 char out_buff[SHORT_STR256];
40150 int is_iv_bad;
40151 unsigned char iv_buff[4];
40152 int addr1_type = wlan_ra_ta_address_type;
40153 unsigned offset = 0;
40154 const char *fts_str;
40155 char flag_str[] = "opmPRMFTC";
40156 int ii;
40157 uint16_t qosoff = 0;
40158 uint16_t qos_control = 0;
40159 int meshctl_len = 0;
40160 uint8_t mesh_flags;
40161 uint16_t meshoff = 0;
40162 bool_Bool retransmitted;
40163 bool_Bool isDMG = (phdr->phy == PHDR_802_11_PHY_11AD9);
40164
40165 encap_t encap_type;
40166 proto_tree *hdr_tree = NULL((void*)0);
40167 tvbuff_t *next_tvb = NULL((void*)0);
40168
40169#define PROTECTION_ALG_WEP DOT11DECRYPT_KEY_TYPE_WEP0
40170#define PROTECTION_ALG_TKIP DOT11DECRYPT_KEY_TYPE_TKIP100
40171#define PROTECTION_ALG_CCMP DOT11DECRYPT_KEY_TYPE_CCMP101
40172#define PROTECTION_ALG_CCMP_256102 DOT11DECRYPT_KEY_TYPE_CCMP_256102
40173#define PROTECTION_ALG_GCMP103 DOT11DECRYPT_KEY_TYPE_GCMP103
40174#define PROTECTION_ALG_GCMP_256104 DOT11DECRYPT_KEY_TYPE_GCMP_256104
40175#define PROTECTION_ALG_RSNAPROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP PROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP
40176#define IS_TKIP(tvb, hdr_len) (tvb_get_uint8(tvb, hdr_len + 1) == \
40177 ((tvb_get_uint8(tvb, hdr_len) | 0x20) & 0x7f))
40178#define IS_CCMP(tvb, hdr_len) (tvb_get_uint8(tvb, hdr_len + 2) == 0)
40179 uint8_t algorithm=UINT8_MAX(255);
40180 uint32_t sec_trailer=0;
40181
40182 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))
;
40183
40184 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)))
;
40185 whdr->type = frame_type_subtype;
40186 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17)
40187 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))
;
40188 else
40189 ctrl_fcf = 0;
40190
40191 fts_str = val_to_str_ext_const(frame_type_subtype, &frame_type_subtype_vals_ext,
40192 "Unrecognized (Reserved frame)");
40193 col_set_str(pinfo->cinfo, COL_INFO, fts_str);
40194
40195
40196# define FROM_TO_DS3 3
40197 flags = FCF_FLAGS(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))
;
40198 more_frags = HAVE_FRAGMENTS(flags)((flags) & 0x04);
40199
40200 for (ii = 0; ii < 8; ii++) {
40201 if (! (flags & 0x80 >> ii)) {
40202 flag_str[ii] = '.';
40203 }
40204 }
40205
40206 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2)) {
40207
40208 case MGT_FRAME0x00:
40209 hdr_len = MGT_FRAME_HDR_LEN24;
40210
40211 /*
40212 * IEEE 802.11-2016 section 9.2.4.1.10 "+HTC/Order subfield" says:
40213 *
40214 * The +HTC/Order subfield is 1 bit in length. It is used for two
40215 * purposes:
40216 *
40217 * -- It is set to 1 in a non-QoS Data frame transmitted by a
40218 * non-QoS STA to indicate that the frame contains an MSDU,
40219 * or fragment thereof, that is being transferred using the
40220 * StrictlyOrdered service class.
40221 *
40222 * -- It is set to 1 in a QoS Data or Management frame transmitted
40223 * with a value of HT_GF, HT_MF, or VHT for the FORMAT parameter
40224 * of the TXVECTOR to indicate that the frame contains an
40225 * HT Control field.
40226 *
40227 * Otherwise, the +HTC/Order subfield is set to 0.
40228 *
40229 * NOTE -- The +HTC/Order subfield is always set to 0 for frames
40230 * transmitted by a DMG STA.
40231 *
40232 * and 802.11ax drafts appear to say that the +HTC/Order flag, for
40233 * QoS frames, also indicates that there's an HT Control field.
40234 */
40235 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
40236 /*
40237 * For the DMG PHY, do *not* treat the +HTC field as an indication
40238 * that there's an HT Control field, because, in the ns-3 capture
40239 * in issue 11277, it's set in packets with a channel frequency
40240 * in the 60 GHz band, meaning DMG (802.11ad), but it's not
40241 * supposed to be set, and those packets lack an HT Control
40242 * field, so they would be dissected incorrectly if we treated
40243 * them as if they had an HT Control field.
40244 */
40245 if (!isDMG) {
40246 /*
40247 * Non-DMG PHY; treat this field as having an HT Control field.
40248 *
40249 * XXX - as I read the above, this shouldn't be set except for
40250 * HT, VHT, or HE PHYs; however, in the capture in issue 11351,
40251 * a frame with an HT Control field, with a radiotap header,
40252 * has no MCS, VHT, or HE field in that header, so Wireshark
40253 * has no clue that it's an HT, VHT, or HE field. assumed that
40254 * this meant that it wouldn't have an HT Control field even
40255 * if it's a QoS field with +HTC/Order set, and misdissected
40256 * it. Omnipeek, which also appeared to have no clue that it
40257 * was an HT or VHT field - it called it an 802.11b frame - *did*
40258 * dissect the HT Control field. Therefore, we must not require
40259 * an indication that a QoS frame is an HT, VHT, or HE frame
40260 * in order to dissect it a having an HT Control field.
40261 */
40262 hdr_len += 4;
40263 htc_len = 4;
40264 }
40265 }
40266 break;
40267
40268 case CONTROL_FRAME0x01:
40269 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
40270 hdr_len = 6;
40271 cw_fcf = ctrl_fcf;
40272 } else {
40273 hdr_len = 0;
40274 cw_fcf = fcf;
40275 }
40276 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)))
) {
40277
40278 case CTRL_TRIGGER0x12:
40279 /*
40280 * This is a variable length frame ... we set the real length below
40281 * and since the common info is variable, just set the hdr len to
40282 * the fixed portion, 16. There can also be one or more user-info
40283 * sections, followed by padding.
40284 */
40285 hdr_len = 16;
40286 break;
40287
40288 case CTRL_TACK0x13:
40289 /*
40290 * This also is a variable length frame. Set to 22, the common portion
40291 */
40292 hdr_len = 22;
40293 break;
40294
40295 case CTRL_BEAMFORM_RPT_POLL0x14:
40296 hdr_len += 17;
40297 break;
40298
40299 case CTRL_VHT_NDP_ANNC0x15:
40300 hdr_len += 17;
40301 /* TODO: for now we only consider a single STA, add support for more */
40302 hdr_len += 2;
40303 break;
40304
40305 case CTRL_CTS0x1C:
40306 case CTRL_ACKNOWLEDGEMENT0x1D:
40307 hdr_len += 10;
40308 break;
40309
40310 case CTRL_POLL0x162:
40311 hdr_len += 18;
40312 break;
40313
40314 case CTRL_SPR0x163:
40315 case CTRL_GRANT0x164:
40316 case CTRL_GRANT_ACK0x167:
40317 hdr_len += 23;
40318 break;
40319
40320 case CTRL_DMG_CTS0x165:
40321 hdr_len += 16;
40322 break;
40323
40324 case CTRL_DMG_DTS0x166:
40325 case CTRL_SSW0x168:
40326 hdr_len += 22;
40327 break;
40328
40329 case CTRL_SSW_FEEDBACK0x169:
40330 case CTRL_SSW_ACK0x16A:
40331 hdr_len += 24;
40332 break;
40333
40334 case CTRL_RTS0x1B:
40335 case CTRL_PS_POLL0x1A:
40336 case CTRL_CFP_END0x1E:
40337 case CTRL_CFP_ENDACK0x1F:
40338 case CTRL_BLOCK_ACK_REQ0x18:
40339 case CTRL_BLOCK_ACK0x19:
40340 hdr_len += 16;
40341 break;
40342
40343 default:
40344 hdr_len += 4; /* XXX */
40345 break;
40346 }
40347 break;
40348
40349 case DATA_FRAME0x02:
40350 hdr_len = (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) ? DATA_LONG_HDR_LEN30 : DATA_SHORT_HDR_LEN24;
40351
40352 if (option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) {
40353 /*
40354 * IEEE 802.11-2016 section 9.2.4.1.10 "+HTC/Order subfield" says:
40355 *
40356 * The +HTC/Order subfield is 1 bit in length. It is used for two
40357 * purposes:
40358 *
40359 * -- It is set to 1 in a non-QoS Data frame transmitted by a
40360 * non-QoS STA to indicate that the frame contains an MSDU,
40361 * or fragment thereof, that is being transferred using the
40362 * StrictlyOrdered service class.
40363 *
40364 * -- It is set to 1 in a QoS Data or Management frame transmitted
40365 * with a value of HT_GF, HT_MF, or VHT for the FORMAT parameter
40366 * of the TXVECTOR to indicate that the frame contains an
40367 * HT Control field.
40368 *
40369 * Otherwise, the +HTC/Order subfield is set to 0.
40370 *
40371 * NOTE -- The +HTC/Order subfield is always set to 0 for frames
40372 * transmitted by a DMG STA.
40373 *
40374 * and 802.11ax drafts appear to say that the +HTC/Order flag, for
40375 * QoS frames, also indicates that there's an HT Control field.
40376 */
40377 if (DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
40378 /* QoS frame */
40379 qosoff = hdr_len;
40380 qos_control = tvb_get_letohs(tvb, qosoff);
40381 hdr_len += 2; /* Include the QoS field in the header length */
40382
40383 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
40384 /*
40385 * For the DMG PHY, do *not* treat the +HTC field as an indication
40386 * that there's an HT Control field, because, in the ns-3 capture
40387 * in issue 11277, it's set in packets with a channel frequency
40388 * in the 60 GHz band, meaning DMG (802.11ad), but it's not
40389 * supposed to be set, and those packets lack an HT Control
40390 * field, so they would be dissected incorrectly if we treated
40391 * them as if they had an HT Control field.
40392 */
40393 if (!isDMG) {
40394 /*
40395 * Non-DMG PHY; treat this field as having an HT Control field.
40396 *
40397 * XXX - as I read the above, this shouldn't be set except for
40398 * HT, VHT, or HE PHYs; however, in the capture in issue 11351,
40399 * a frame with an HT Control field, with a radiotap header,
40400 * has no MCS, VHT, or HE field in that header, so Wireshark
40401 * has no clue that it's an HT, VHT, or HE field. assumed that
40402 * this meant that it wouldn't have an HT Control field even
40403 * if it's a QoS field with +HTC/Order set, and misdissected
40404 * it. Omnipeek, which also appeared to have no clue that it
40405 * was an HT or VHT field - it called it an 802.11b frame - *did*
40406 * dissect the HT Control field. Therefore, we must not require
40407 * an indication that a QoS frame is an HT, VHT, or HE frame
40408 * in order to dissect it a having an HT Control field.
40409 */
40410 hdr_len += 4;
40411 htc_len = 4;
40412 }
40413 }
40414 }
40415 }
40416 break;
40417
40418 case EXTENSION_FRAME0x03:
40419 hdr_len = 10;
40420 break;
40421
40422 default:
40423 hdr_len = 4; /* XXX */
40424 break;
40425 }
40426
40427 /*
40428 * Some portions of this code calculate offsets relative to the end of the
40429 * header. But when the header has been padded to align the data this must
40430 * be done relative to true header size, not the padded/aligned value. To
40431 * simplify this work we stash the original header size in ohdr_len instead
40432 * of recalculating it every time we need it.
40433 */
40434 ohdr_len = hdr_len;
40435 if (phdr->datapad) {
40436 /*
40437 * Add in Atheros padding between the 802.11 header and body.
40438 *
40439 * In the Atheros mesh capture sample we have, the padding
40440 * is before the mesh header, possibly because it doesn't
40441 * recognize the mesh header.
40442 */
40443 hdr_len = WS_ROUNDUP_4(hdr_len)(((hdr_len) + ((unsigned)(4U-1U))) & (~((unsigned)(4U-1U)
)))
;
40444 }
40445
40446 if (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2) == DATA_FRAME0x02) {
40447 /*
40448 * Does it look as if we have a mesh header?
40449 *
40450 * For locally originated mesh frames, the QoS header may be added
40451 * by the hardware, and no present in wireshark captures. This
40452 * poses a problem as the QoS header indicates the presence of the
40453 * mesh control header.
40454 *
40455 * In addition, we have examples of mesh captures where the QoS
40456 * field indicates that there is no mesh control header, yet there
40457 * is one.
40458 *
40459 * Instead of QoS, we use a few heuristics to determine the presence
40460 * of the mesh control header, which is tricky because it can have a
40461 * variable length. We fall back to using the QoS field if it exists
40462 * and the packet isn't long enough (due to truncation or something
40463 * malformed that should be flagged.)
40464 *
40465 * Assume minimal length, and then correct if wrong.
40466 */
40467 if (tvb_bytes_exist(tvb, hdr_len, 1)) {
40468 meshoff = hdr_len;
40469 mesh_flags = tvb_get_uint8(tvb, meshoff);
40470 meshctl_len = find_mesh_control_length(mesh_flags);
40471 /* ... and try to read two bytes of next header */
40472 if (tvb_bytes_exist(tvb, hdr_len, meshctl_len + 2)) {
40473 uint16_t next_header = tvb_get_letohs(tvb, meshoff + meshctl_len);
40474 if (!has_mesh_control_local(fcf, mesh_flags, next_header)) {
40475 meshctl_len = 0;
40476 }
40477 } else {
40478 if (DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
40479 /* QoS frame */
40480 /*
40481 * Look at the Mesh Control subfield of the QoS field and at the
40482 * purported mesh flag fields.
40483 */
40484 if (!has_mesh_control(fcf, qos_control, mesh_flags)) {
40485 meshctl_len = 0;
40486 }
40487 } else {
40488 /* Not QoS frame, can't do the other heuristic, so assume no mesh */
40489 meshctl_len = 0;
40490 }
40491 }
40492 }
40493 hdr_len += meshctl_len;
40494 }
40495
40496 /* Create the protocol tree */
40497 ti = proto_tree_add_protocol_format(tree, proto_wlan, tvb, 0, hdr_len,
40498 "IEEE 802.11 %s", fts_str);
40499 hdr_tree = proto_item_add_subtree(ti, ett_80211);
40500
40501 /* Add the FC and duration/id to the current tree */
40502 dissect_frame_control(hdr_tree, tvb, option_flags, 0, pinfo, isDMG);
40503 dissect_durid(hdr_tree, tvb, frame_type_subtype, 2);
40504
40505 switch (phdr->fcs_len)
40506 {
40507 case 0: /* Definitely has no FCS */
40508 has_fcs = false0;
40509 break;
40510
40511 case 4: /* Definitely has an FCS */
40512 has_fcs = true1;
40513 break;
40514
40515 case -2: /* Data frames have no FCS, other frames may have an FCS */
40516 /* XXX: -2 currently used only in wiretap/netmon.c */
40517 if (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2) == DATA_FRAME0x02)
40518 has_fcs = false0;
40519 else /* Management, Control, Extension */
40520 has_fcs = wlan_check_fcs;
40521 break;
40522
40523 default: /* Don't know - use "wlan_check_fcs" */
40524 has_fcs = wlan_check_fcs;
40525 break;
40526 }
40527
40528 /*
40529 * Decode the part of the frame header that isn't the same for all
40530 * frame types.
40531 */
40532 seq_control = 0;
40533 frag_number = 0;
40534 seq_number = 0;
40535
40536 /* all frames have address 1 = RA */
40537 proto_tree_add_mac48_detail(&mac_ra, &mac_addr, ett_addr, tvb, hdr_tree, 4);
40538
40539 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
40540 {
40541
40542 case MGT_FRAME0x00:
40543 /*
40544 * All management frame types have the same header.
40545 */
40546 set_dst_addr_cols(pinfo, tvb, 4, wlan_address_type);
40547 set_src_addr_cols(pinfo, tvb, 10, wlan_address_type);
40548
40549 /* for tap */
40550 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, 16);
40551 copy_address_shallow(&whdr->src, &pinfo->dl_src);
40552 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
40553 if (addresses_data_equal(&whdr->bssid, &whdr->src)) {
40554 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, IS_AP_KEY, GINT_TO_POINTER(true)((gpointer) (glong) (1)));
40555 }
40556
40557 seq_control = tvb_get_letohs(tvb, 22);
40558 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control)((seq_control) & 0x000F);
40559 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control)(((seq_control) & 0xFFF0) >> 4);
40560
40561 col_append_fstr(pinfo->cinfo, COL_INFO,
40562 ", SN=%d", seq_number);
40563
40564 col_append_fstr(pinfo->cinfo, COL_INFO,
40565 ", FN=%d", frag_number);
40566
40567 if (tree)
40568 {
40569 proto_tree_add_mac48_detail(&mac_da, NULL((void*)0), ett_addr, tvb, hdr_tree, 4);
40570 proto_tree_add_mac48_detail(&mac_ta, NULL((void*)0), ett_addr, tvb, hdr_tree, 10);
40571 proto_tree_add_mac48_detail(&mac_sa, NULL((void*)0), ett_addr, tvb, hdr_tree, 10);
40572 check_s1g_setting(pinfo, tvb, 10);
40573 proto_tree_add_mac48_detail(&mac_bssid, NULL((void*)0), ett_addr, tvb, hdr_tree, 16);
40574
40575 /* FIXME: With mgmt frames FROM_TO_DS is always 0, perhaps compare address to bssid instead? */
40576 if ((flags & FROM_TO_DS3) == FLAG_FROM_DS0x02) { /* Receiver address */
40577 sta_addr_offset = 4;
40578 } else if ((flags & FROM_TO_DS3) == FLAG_TO_DS0x01) { /* Transmitter address */
40579 sta_addr_offset = 10;
40580 }
40581 if (sta_addr_offset > 0) {
40582 proto_tree_add_mac48_detail(&mac_staa, NULL((void*)0), ett_addr, tvb, hdr_tree, sta_addr_offset);
40583 }
40584 /* add items for wlan.addr filter */
40585 hidden_item = proto_tree_add_mac48_detail(&mac_addr_hidden, NULL((void*)0), -1, tvb, hdr_tree, 10);
40586 proto_item_set_hidden(hidden_item);
40587 hidden_item = proto_tree_add_mac48_detail(&mac_addr_hidden, NULL((void*)0), -1, tvb, hdr_tree, 16);
40588 proto_item_set_hidden(hidden_item);
40589 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40590 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40591 }
40592 break;
40593
40594 case CONTROL_FRAME0x01:
40595 {
40596 /*
40597 * Control Wrapper frames insert themselves between address 1
40598 * and address 2 in a normal control frame. Process address 1
40599 * first, then handle the rest of the frame in dissect_control.
40600 */
40601 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
40602 offset = 10; /* FC + D/ID + Address 1 + CFC + HTC */
40603 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))
;
40604 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)))
;
40605 } else {
40606 offset = 10; /* FC + D/ID + Address 1 */
40607 ctrl_type_subtype = frame_type_subtype;
40608 }
40609 /* Added to disallow DMG STA to transfer packets of certain forbidden types. */
40610 switch (ctrl_type_subtype)
40611 {
40612 case CTRL_PS_POLL0x1A:
40613 case CTRL_CTS0x1C:
40614 case CTRL_CFP_ENDACK0x1F:
40615 if(isDMG == true1) {
40616 expert_add_info_format(pinfo, hdr_tree, &ei_ieee80211_dmg_subtype,
40617 "DMG STA shouldn't transmit control frame of type contention-free period end+ack");
40618 }
40619 break;
40620 default:
40621 break;
40622 }
40623
40624 if (ctrl_type_subtype == CTRL_PS_POLL0x1A) {
40625 addr1_type = wlan_bssid_address_type;
40626 proto_tree_add_mac48_detail(&mac_bssid, NULL((void*)0), ett_addr, tvb, hdr_tree, 4);
40627 }
40628
40629 /* Add address 1 */
40630 set_dst_addr_cols(pinfo, tvb, 4, addr1_type);
40631
40632 /*
40633 * Start shoving in other fields if needed.
40634 */
40635 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
40636 /* if (tree) */
40637 {
40638 cw_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
40639 ett_cntrl_wrapper_fc, NULL((void*)0), "Contained Frame Control");
40640 dissect_frame_control(cw_tree, tvb, 0, offset, pinfo, isDMG);
40641 dissect_ht_control(pinfo, hdr_tree, tvb, offset + 2);
40642 offset += 6;
40643 hdr_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
40644 ett_cntrl_wrapper_fc, &cw_item, "Carried Frame");
40645 if (isDMG) {
40646 expert_add_info_format(pinfo, cw_item, &ei_ieee80211_dmg_subtype,
40647 "DMG STA shouldn't transmit Control Wrapper frame");
40648 }
40649 }
40650 }
40651
40652 switch (ctrl_type_subtype)
40653 {
40654 case CTRL_PS_POLL0x1A:
40655 case CTRL_CFP_ENDACK0x1F:
40656 {
40657 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40658 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40659 offset += 6;
40660 break;
40661 }
40662
40663 case CTRL_CFP_END0x1E:
40664 {
40665 if (isDMG)
40666 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40667 else
40668 set_src_addr_cols(pinfo, tvb, offset, wlan_bssid_address_type);
40669 /* if (tree) */
40670 {
40671 if (isDMG) {
40672 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40673 } else {
40674 proto_tree_add_mac48_detail(&mac_bssid, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40675 }
40676 offset += 6;
40677 }
40678 break;
40679 }
40680
40681 case CTRL_TRIGGER0x12:
40682 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40683 /*
40684 * The len returned will be adjusted to include any padding required
40685 */
40686 hdr_len = dissect_ieee80211_he_eht_trigger(tvb, pinfo, hdr_tree, offset,
40687 phdr->fcs_len);
40688 ohdr_len = hdr_len;
40689 break;
40690
40691 case CTRL_TACK0x13:
40692 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40693 hdr_len = dissect_ieee80211_s1g_tack(tvb, pinfo, hdr_tree, offset,
40694 flags);
40695 break;
40696
40697 case CTRL_BEAMFORM_RPT_POLL0x14:
40698 {
40699 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40700 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40701 offset += 6;
40702 proto_tree_add_item(hdr_tree, hf_ieee80211_beamform_feedback_seg_retrans_bitmap, tvb, offset, 1, ENC_NA0x00000000);
40703 break;
40704 }
40705
40706 case CTRL_VHT_NDP_ANNC0x15:
40707 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40708
40709 dissect_ieee80211_ndp_annc(tvb, pinfo, hdr_tree, offset, has_fcs);
40710 break;
40711
40712 case CTRL_GRANT_ACK0x167:
40713 case CTRL_SSW0x168:
40714 case CTRL_SSW_FEEDBACK0x169:
40715 case CTRL_SSW_ACK0x16A:
40716 case CTRL_DMG_CTS0x165:
40717 case CTRL_GRANT0x164:
40718 case CTRL_SPR0x163:
40719 case CTRL_POLL0x162:
40720 case CTRL_RTS0x1B:
40721 {
40722 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40723 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40724 offset += 6;
40725 break;
40726 }
40727
40728 case CTRL_CONTROL_WRAPPER0x17:
40729 /* XXX - We shouldn't see this. Should we throw an error? */
40730 break;
40731
40732 case CTRL_BLOCK_ACK_REQ0x18:
40733 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40734
40735 dissect_ieee80211_block_ack(tvb, pinfo, hdr_tree, offset, isDMG, true1, has_fcs);
40736 break;
40737
40738 case CTRL_BLOCK_ACK0x19:
40739 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40740
40741 dissect_ieee80211_block_ack(tvb, pinfo, hdr_tree, offset, isDMG, false0, has_fcs);
40742 break;
40743 }
40744/*
40745 * 802.11ad : Used for extension types.
40746 */
40747 switch (ctrl_type_subtype) {
40748 case CTRL_POLL0x162: {
40749 proto_tree_add_item(hdr_tree, hf_ieee80211_cf_response_offset,
40750 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40751
40752 break;
40753 }
40754 case CTRL_GRANT0x164:
40755 case CTRL_GRANT_ACK0x167:
40756 case CTRL_SPR0x163: {
40757 bool_Bool isGrant;
40758 if(ctrl_type_subtype != CTRL_GRANT_ACK0x167) {
40759 offset += add_ff_dynamic_allocation(hdr_tree, tvb, pinfo, offset);
40760 } else { /* CTRL_GRANT_ACK have 5 octets that are reserved*/
40761 proto_tree_add_item(hdr_tree, hf_ieee80211_grant_ack_reserved, tvb, offset, 5, ENC_NA0x00000000);
40762 offset += 5;
40763 }
40764 isGrant = ((ctrl_type_subtype==CTRL_GRANT0x164)||(ctrl_type_subtype==CTRL_GRANT_ACK0x167));
40765 add_ff_beamforming_ctrl(hdr_tree, tvb, pinfo, offset, isGrant);
40766 /* offset += 2; */
40767 break;
40768 }
40769 case CTRL_SSW0x168: {
40770 uint32_t sector_sweep;
40771
40772 sector_sweep = tvb_get_letoh24(tvb, offset);
40773 offset += add_ff_sector_sweep(hdr_tree, tvb, pinfo, offset);
40774 /* if Sector Sweep Direction = Responder, use SW Feedback field format when not transmitted as part of an ISS */
40775 if(sector_sweep & 0x00001) {
40776 add_ff_sector_sweep_feedback_to_iss(hdr_tree, tvb, pinfo, offset);
40777 } else {
40778 add_ff_sector_sweep_feedback_from_iss(hdr_tree, tvb, pinfo, offset);
40779 }
40780 /* offset += 3; */
40781 break;
40782 }
40783 case CTRL_SSW_ACK0x16A:
40784 case CTRL_SSW_FEEDBACK0x169: {
40785 offset += add_ff_sector_sweep_feedback_to_iss(hdr_tree, tvb, pinfo, offset);
40786 offset += add_ff_BRP_request(hdr_tree, tvb, pinfo, offset);
40787 add_ff_beamformed_link(hdr_tree, tvb, pinfo, offset);
40788 /* offset += 1; */
40789 break;
40790 }
40791 case CTRL_DMG_DTS0x166: {
40792 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_sa, tvb, offset, 6, ENC_NA0x00000000);
40793 offset += 6;
40794 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_da, tvb, offset, 6, ENC_NA0x00000000);
40795 /* offset += 6; */
40796 break;
40797 }
40798 default:
40799 break;
40800 }
40801 break;
40802 }
40803
40804 case DATA_FRAME0x02:
40805 {
40806 uint32_t src_offset, dst_offset, da_offset, sa_offset, ta_offset = 10, bssid_offset;
40807 addr_type = FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8));
40808 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) && DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
40809 if (!phdr->no_a_msdus && !DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04)) {
40810 is_amsdu = QOS_AMSDU_PRESENT(qos_control)(((qos_control) & 0x0080) >> 6);
40811 }
40812 }
40813
40814 /* In order to show src/dst address we must always do the following */
40815 switch (addr_type)
40816 {
40817
40818 case DATA_ADDR_T10:
40819 da_offset = 4;
40820 sa_offset = 10;
40821 bssid_offset = 16;
40822 dst_offset = da_offset;
40823 src_offset = sa_offset;
40824 break;
40825
40826 case DATA_ADDR_T2(0x02 << 8):
40827 da_offset = 4;
40828 sa_offset = !is_amsdu ? 16 : 0;
40829 bssid_offset = 10;
40830 dst_offset = da_offset;
40831 src_offset = sa_offset;
40832 break;
40833
40834 case DATA_ADDR_T3(0x01 << 8):
40835 da_offset = !is_amsdu ? 16 : 0;
40836 sa_offset = 10;
40837 bssid_offset = 4;
40838 dst_offset = da_offset;
40839 src_offset = sa_offset;
40840 break;
40841
40842 case DATA_ADDR_T4((0x01|0x02) << 8):
40843 if (!is_amsdu) {
40844 da_offset = 16;
40845 sa_offset = 24;
40846 bssid_offset = 0;
40847 dst_offset = da_offset;
40848 src_offset = sa_offset;
40849 } else {
40850 da_offset = 0;
40851 sa_offset = 0;
40852 // The second BSSID (Addr4) is handled below.
40853 bssid_offset = 16;
40854 dst_offset = 4; // RA
40855 src_offset = 10; // TA
40856 }
40857 break;
40858
40859 default:
40860 /* All four cases are covered above. */
40861 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 40861))
;
40862 }
40863
40864 if (src_offset) {
40865 set_address_tvb(&pinfo->dl_src, wlan_address_type, 6, tvb, src_offset);
40866 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
40867 }
40868 if (dst_offset) {
40869 set_address_tvb(&pinfo->dl_dst, wlan_address_type, 6, tvb, dst_offset);
40870 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
40871 }
40872
40873 if (bssid_offset) {
40874 /* for tap */
40875 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, bssid_offset);
40876 /* for dot11decrypt */
40877 save_proto_data(tvb, pinfo, bssid_offset, 6, BSSID_KEY);
40878 }
40879
40880 if (src_offset) {
40881 copy_address_shallow(&whdr->src, &pinfo->dl_src);
40882 }
40883 if (dst_offset) {
40884 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
40885 }
40886
40887 if ((flags & FROM_TO_DS3) == FLAG_FROM_DS0x02) { /* Receiver address */
40888 sta_addr_offset = 4;
40889 } else if ((flags & FROM_TO_DS3) == FLAG_TO_DS0x01) { /* Transmitter address */
40890 sta_addr_offset = ta_offset;
40891 }
40892
40893 /* for dot11decrypt */
40894 if (sta_addr_offset > 0) {
40895 save_proto_data(tvb, pinfo, sta_addr_offset, 6, STA_KEY);
40896 }
40897
40898 seq_control = tvb_get_letohs(tvb, 22);
40899 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control)((seq_control) & 0x000F);
40900 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control)(((seq_control) & 0xFFF0) >> 4);
40901
40902 col_append_fstr(pinfo->cinfo, COL_INFO,
40903 ", SN=%d, FN=%d", seq_number, frag_number);
40904
40905 /* Now if we have a tree we start adding stuff */
40906 if (tree)
40907 {
40908 switch (addr_type)
40909 {
40910 case DATA_ADDR_T10:
40911 case DATA_ADDR_T2(0x02 << 8):
40912 case DATA_ADDR_T3(0x01 << 8):
40913 case DATA_ADDR_T4((0x01|0x02) << 8):
40914 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, ta_offset);
40915
40916 if (da_offset) {
40917 bool_Bool add_mac = (da_offset >= 16 && da_offset != sa_offset);
40918 proto_tree_add_mac48_detail(&mac_da, add_mac ? &mac_addr : NULL((void*)0), ett_addr, tvb, hdr_tree, da_offset);
40919 }
40920
40921 if (sa_offset) {
40922 bool_Bool add_mac = (sa_offset >= 16);
40923 proto_tree_add_mac48_detail(&mac_sa, add_mac ? &mac_addr : NULL((void*)0), ett_addr, tvb, hdr_tree, sa_offset);
40924 }
40925
40926 if (bssid_offset) {
40927 bool_Bool add_mac = (bssid_offset >= 16 && bssid_offset != sa_offset && bssid_offset != da_offset);
40928 proto_tree_add_mac48_detail(&mac_bssid, add_mac ? &mac_addr : NULL((void*)0), ett_addr, tvb, hdr_tree, bssid_offset);
40929 }
40930
40931 if (addr_type == DATA_ADDR_T4((0x01|0x02) << 8) && is_amsdu) {
40932 proto_tree_add_mac48_detail(&mac_bssid, NULL((void*)0), ett_addr, tvb, hdr_tree, 24);
40933 }
40934
40935 if (sta_addr_offset > 0) {
40936 proto_tree_add_mac48_detail(&mac_staa, NULL((void*)0), ett_addr, tvb, hdr_tree, sta_addr_offset);
40937 }
40938 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40939 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40940
40941 break;
40942 }
40943
40944 }
40945 break;
40946 }
40947 case EXTENSION_FRAME0x03: {
40948 switch (frame_type_subtype) {
40949 case EXTENSION_DMG_BEACON0x30: {
40950 set_dst_addr_cols(pinfo, tvb, 4, wlan_bssid_address_type);
40951 proto_tree_add_mac48_detail(&mac_bssid, &mac_addr, ett_addr, tvb, hdr_tree, 4);
40952 break;
40953 }
40954 case EXTENSION_S1G_BEACON0x31: {
40955 uint8_t *src_addr[6];
40956 tvb_memcpy(tvb, src_addr, 4, 6);
40957
40958 /* Insert this src_addr into the s1g sta hash */
40959 if (!wmem_map_lookup(sta_prop_hash, src_addr)) {
40960 wmem_map_insert(sta_prop_hash, wmem_memdup(wmem_file_scope(), src_addr, 6), GUINT_TO_POINTER(STA_IS_S1G)((gpointer) (gulong) (0x00000001)));
40961 }
40962
40963 check_s1g_setting(pinfo, tvb, 4);
40964
40965 set_src_addr_cols(pinfo, tvb, 4, wlan_address_type);
40966 proto_tree_add_mac48_detail(&mac_sa, &mac_addr, ett_addr, tvb, hdr_tree, 4);
40967 break;
40968 }
40969 }
40970 }
40971 }
40972
40973 len = tvb_captured_length_remaining(tvb, hdr_len);
40974 reported_len = tvb_reported_length_remaining(tvb, hdr_len);
40975
40976 if (has_fcs)
40977 {
40978 /*
40979 * Well, this packet should, in theory, have an FCS.
40980 * Do we have the entire packet, and does it have enough data for
40981 * the FCS?
40982 */
40983 if (reported_len < 4)
40984 {
40985 /*
40986 * The packet is claimed not to even have enough data for a 4-byte
40987 * FCS.
40988 * Pretend it doesn't have an FCS.
40989 */
40990 ;
40991 }
40992 else if (len < reported_len)
40993 {
40994 /*
40995 * The packet is claimed to have enough data for a 4-byte FCS, but
40996 * we didn't capture all of the packet.
40997 * Slice off the 4-byte FCS from the reported length, and trim the
40998 * captured length so it's no more than the reported length; that
40999 * will slice off what of the FCS, if any, is in the captured
41000 * length.
41001 */
41002 reported_len -= 4;
41003 if (len > reported_len)
41004 len = reported_len;
41005 }
41006 else
41007 {
41008 /*
41009 * We have the entire packet, and it includes a 4-byte FCS.
41010 * Slice it off, and put it into the tree.
41011 */
41012 len -= 4;
41013 reported_len -= 4;
41014 if (wlan_check_checksum)
41015 {
41016 uint32_t sent_fcs = tvb_get_letohl(tvb, hdr_len + len);
41017 uint32_t fcs;
41018
41019 if (phdr->datapad)
41020 fcs = crc32_802_tvb_padded(tvb, ohdr_len, hdr_len, len);
41021 else
41022 fcs = crc32_ccitt_tvb(tvb, hdr_len + len);
41023 if (fcs != sent_fcs) {
41024 flag_str[8] = '.';
41025 }
41026
41027 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);
41028 } else {
41029 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);
41030 }
41031 }
41032 }
41033 else
41034 {
41035 flag_str[8] = '\0';
41036 }
41037
41038 proto_item_append_text(ti, ", Flags: %s", flag_str);
41039 col_append_fstr(pinfo->cinfo, COL_INFO, ", Flags=%s", flag_str);
41040
41041 flags_item = proto_tree_add_string(hdr_tree, hf_ieee80211_fc_flags_str, tvb, 0, 0, flag_str);
41042 proto_item_set_generated(flags_item);
41043
41044 /*
41045 * Only management and data frames have a body, so we don't have
41046 * anything more to do for other types of frames.
41047 */
41048 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
41049 {
41050
41051 case MGT_FRAME0x00:
41052 if (htc_len == 4) {
41053 dissect_ht_control(pinfo, hdr_tree, tvb, ohdr_len - 4);
41054 }
41055 break;
41056
41057 case DATA_FRAME0x02:
41058 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) && tree && DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08))
41059 {
41060 proto_item *qos_fields, *qos_ti;
41061 proto_tree *qos_tree;
41062
41063 uint16_t qos_eosp;
41064 uint16_t qos_field_content;
41065
41066 qos_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_qos, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41067 qos_tree = proto_item_add_subtree(qos_fields, ett_qos_parameters);
41068
41069 qos_eosp = QOS_EOSP(qos_control)(((qos_control) & 0x0010) >> 4);
41070 qos_field_content = QOS_FIELD_CONTENT(qos_control)(((qos_control) & 0xFF00) >> 8);
41071
41072 proto_tree_add_item(qos_tree, hf_ieee80211_qos_tid, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41073
41074 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_priority, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41075 proto_item_set_generated(qos_ti);
41076
41077 if (FLAGS_DS_STATUS(flags)((flags) & (0x02|0x01)) == (FLAG_FROM_DS0x02|FLAG_TO_DS0x01)) {
41078 /* mesh frame */
41079 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41080 } else {
41081 /*
41082 * Table 9-3 from IEEE802.11-2016 tells us that FROM DS means from
41083 * an AP. And Table 9-6 tells us that we should treat bit 4 as
41084 * EOSP if from an AP otherwise as simply bit 4.
41085 */
41086 if (flags & FLAG_FROM_DS0x02) {
41087 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41088 } else {
41089 proto_tree_add_item(qos_tree, hf_ieee80211_qos_bit4, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41090 }
41091 }
41092
41093 proto_tree_add_item(qos_tree, hf_ieee80211_qos_ack_policy, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41094
41095 if (!DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04)) {
41096 proto_tree_add_item(qos_tree, hf_ieee80211_qos_amsdu_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41097 if (!phdr->no_a_msdus)
41098 is_amsdu = QOS_AMSDU_PRESENT(qos_control)(((qos_control) & 0x0080) >> 6);
41099 }
41100
41101 if (meshctl_len) {
41102 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ctl_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41103 if (POWER_MGT_STATUS(flags)((flags) & 0x10)) {
41104 if (tvb_get_uint8(tvb, 4) & 0x1)
41105 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ps_multicast, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41106 else
41107 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ps_unicast, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41108 } else {
41109 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ps_rsvd, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41110 }
41111 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_rspi, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41112 } else if (flags & FLAG_FROM_DS0x02) {
41113 if (DATA_FRAME_IS_CF_POLL(frame_type_subtype)((frame_type_subtype) & 0x02)) {
41114 /* txop limit */
41115 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_limit, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41116 if (qos_field_content == 0) {
41117 proto_item_append_text(qos_ti, " (transmit one frame immediately)");
41118 }
41119 } else {
41120 /* qap ps buffer state */
41121 proto_item *qos_ps_buf_state_fields;
41122 proto_tree *qos_ps_buf_state_tree;
41123
41124 qos_ps_buf_state_fields = proto_tree_add_item(qos_tree, hf_ieee80211_qos_ps_buf_state, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41125 qos_ps_buf_state_tree = proto_item_add_subtree(qos_ps_buf_state_fields, ett_qos_ps_buf_state);
41126
41127 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_buf_state_indicated, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41128
41129 if (QOS_PS_BUF_STATE_INDICATED(qos_field_content)(((qos_field_content) & 0x02) >> 1)) {
41130 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_highest_pri_buf_ac, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41131 qos_ti = proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41132 switch (QOS_PS_QAP_BUF_LOAD(qos_field_content)(((qos_field_content) & 0xF0) >> 4)) {
41133
41134 case 0:
41135 proto_item_append_text(qos_ti, " (no buffered traffic)");
41136 break;
41137
41138 default:
41139 proto_item_append_text(qos_ti, " (%d octets)", QOS_PS_QAP_BUF_LOAD(qos_field_content)(((qos_field_content) & 0xF0) >> 4)*4096);
41140 break;
41141
41142 case 15:
41143 proto_item_append_text(qos_ti, " (greater than 57344 octets)");
41144 break;
41145 }
41146
41147 }
41148 }
41149 } else {
41150 /*
41151 * Only QoS Data, Qos CF-ACK and NULL frames To-DS have a Queue Size
41152 * field.
41153 */
41154 uint16_t scaling_factor = QOS_SCALING_FACTOR(qos_field_content)(((qos_field_content) & 0xD0) >> 6);
41155 uint16_t unscaled_value = QOS_UNSCALED_VALUE(qos_field_content)((qos_field_content) & 0x3F);
41156
41157 if ((DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04) ||
41158 (frame_type_subtype & 0x7) == 0 ||
41159 DATA_FRAME_IS_CF_ACK(frame_type_subtype)((frame_type_subtype) & 0x01))) {
41160 if (qos_eosp) {
41161 /* queue size */
41162 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_queue_size, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41163 switch (qos_field_content) {
41164 case 0:
41165 proto_item_append_text(qos_ti, " (no buffered traffic in the queue)");
41166 break;
41167
41168 case 254:
41169 proto_item_append_text(qos_ti, " (more than 64768 octets)");
41170 break;
41171
41172 case 255:
41173 proto_item_append_text(qos_ti, " (unspecified or unknown)");
41174 break;
41175
41176 default:
41177 switch (scaling_factor) {
41178 case 0:
41179 proto_item_append_text(qos_ti, " (%u bytes)", 16 * unscaled_value);
41180 break;
41181 case 1:
41182 proto_item_append_text(qos_ti, " (%u bytes)", (1024 + (256 * unscaled_value)));
41183 break;
41184 case 2:
41185 proto_item_append_text(qos_ti, " (%u bytes)", (17408 + (2048 * unscaled_value)));
41186 break;
41187 case 3:
41188 if (unscaled_value < 62)
41189 proto_item_append_text(qos_ti, " (%u bytes)", (148480 + (32768 * unscaled_value)));
41190 else if (unscaled_value == 62)
41191 proto_item_append_text(qos_ti, " (> 2147328)");
41192 else if (unscaled_value == 63)
41193 proto_item_append_text(qos_ti, " (unspecified or unknown)");
41194 break;
41195 default:
41196 proto_item_append_text(qos_ti, " (unspecified or unknown)");
41197 break;
41198 }
41199 break;
41200 }
41201 } else {
41202 /* txop duration requested */
41203 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_dur_req,
41204 tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41205 if (qos_field_content == 0) {
41206 proto_item_append_text(qos_ti, " (no TXOP requested)");
41207 }
41208 }
41209 }
41210 }
41211
41212 /* Do we have +HTC? */
41213 if (htc_len == 4) {
41214 dissect_ht_control(pinfo, hdr_tree, tvb, ohdr_len - 4);
41215 }
41216
41217 } /* end of qos control field */
41218
41219 if (meshctl_len != 0) {
41220 proto_item *msh_fields;
41221 proto_tree *msh_tree;
41222
41223 msh_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_mesh_control_field, tvb, meshoff, meshctl_len, ENC_NA0x00000000);
41224 msh_tree = proto_item_add_subtree(msh_fields, ett_msh_control);
41225 add_ff_mesh_control(msh_tree, tvb, pinfo, meshoff);
41226 }
41227
41228 /*
41229 * No-data frames don't have a body.
41230 */
41231 if (DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04))
41232 goto end_of_wlan;
41233
41234 if (!wlan_subdissector) {
41235 unsigned fnum = 0;
41236
41237 /* key: bssid:src
41238 * data: last seq_control seen and frame number
41239 */
41240 retransmitted = false0;
41241 if (!pinfo->fd->visited) {
41242 retransmit_key key;
41243 retransmit_key *result;
41244
41245 if (whdr->bssid.type == wlan_bssid_address_type) {
41246 memcpy(key.bssid, whdr->bssid.data, 6);
41247 } else {
41248 memset(key.bssid, 0, 6);
41249 }
41250 if (whdr->src.type != AT_NONE) {
41251 memcpy(key.src, whdr->src.data, 6);
41252 } else {
41253 memset(key.src, 0, 6);
41254 }
41255 key.seq_control = 0;
41256 result = (retransmit_key *)g_hash_table_lookup(fc_analyse_retransmit_table, &key);
41257 if (result && (result->seq_control == seq_control)) {
41258 /* keep a pointer to the first seen frame, could be done with proto data? */
41259 fnum = result->fnum;
41260 g_hash_table_insert(fc_first_frame_table, GINT_TO_POINTER(pinfo->num)((gpointer) (glong) (pinfo->num)),
41261 GINT_TO_POINTER(fnum)((gpointer) (glong) (fnum)));
41262 retransmitted = true1;
41263 } else {
41264 /* first time or new seq*/
41265 if (!result) {
41266 result = wmem_new(wmem_file_scope(), retransmit_key)((retransmit_key*)wmem_alloc((wmem_file_scope()), sizeof(retransmit_key
)))
;
41267 *result = key;
41268 g_hash_table_insert(fc_analyse_retransmit_table, result, result);
41269 }
41270 result->seq_control = seq_control;
41271 result->fnum = pinfo->num;
41272 }
41273 }
41274 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)))))
)) {
41275 retransmitted = true1;
41276 }
41277
41278 if (retransmitted) {
41279 col_append_str(pinfo->cinfo, COL_INFO, " [retransmitted]");
41280 if (tree) {
41281 proto_item *item;
41282
41283 item=proto_tree_add_none_format(hdr_tree, hf_ieee80211_fc_analysis_retransmission, tvb, 0, 0,
41284 "Retransmitted frame");
41285 proto_item_set_generated(item);
41286 item=proto_tree_add_uint(hdr_tree, hf_ieee80211_fc_analysis_retransmission_frame, tvb, 0, 0, fnum);
41287 proto_item_set_generated(item);
41288 }
41289 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len, len, reported_len);
41290 call_data_dissector(next_tvb, pinfo, tree);
41291 goto end_of_wlan;
41292 }
41293 }
41294 break;
41295
41296 case CONTROL_FRAME0x01:
41297 goto end_of_wlan;
41298
41299 case EXTENSION_FRAME0x03:
41300 break;
41301
41302 default:
41303 goto end_of_wlan;
41304 }
41305
41306 if (IS_PROTECTED(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x40)
41307 && (frame_type_subtype != EXTENSION_S1G_BEACON0x31)
41308 && !phdr->decrypted
41309 && (wlan_ignore_prot != WLAN_IGNORE_PROT_WO_IV1)) {
41310 /*
41311 * It's a WEP or WPA encrypted frame, and it hasn't already been
41312 * decrypted; dissect the protections parameters and decrypt the data,
41313 * if we have a matching key. Otherwise display it as data.
41314 */
41315 bool_Bool can_decrypt = false0;
41316 proto_tree *wep_tree = NULL((void*)0);
41317 uint32_t iv;
41318 uint8_t wep_key, keybyte;
41319 DOT11DECRYPT_KEY_ITEM used_key = { 0 };
41320
41321 if (len == reported_len) {
41322 next_tvb = try_decrypt(tvb, pinfo, hdr_len, reported_len,
41323 &algorithm, &sec_trailer, &used_key);
41324 }
41325
41326 keybyte = tvb_get_uint8(tvb, hdr_len + 3);
41327 wep_key = KEY_OCTET_WEP_KEY(keybyte)(((keybyte) & 0xC0) >> 6);
41328 if ((keybyte & KEY_EXTIV0x20) && (len >= EXTIV_LEN8)) {
41329 /* Extended IV; this frame is likely encrypted with TKIP or CCMP */
41330 if (tree) {
41331 if (algorithm==PROTECTION_ALG_TKIP)
41332 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41333 ett_wep_parameters, NULL((void*)0), "TKIP parameters");
41334 else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102)
41335 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41336 ett_wep_parameters, NULL((void*)0), "CCMP parameters");
41337 else if (algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104)
41338 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41339 ett_wep_parameters, NULL((void*)0), "GCMP parameters");
41340 else {
41341 if (IS_TKIP(tvb, hdr_len)) {
41342 algorithm=PROTECTION_ALG_TKIP;
41343 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41344 ett_wep_parameters, NULL((void*)0), "TKIP parameters");
41345 } else if (IS_CCMP(tvb, hdr_len)) {
41346 algorithm=PROTECTION_ALG_CCMP;
41347 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41348 ett_wep_parameters, NULL((void*)0), "CCMP parameters");
41349 } else
41350 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41351 ett_wep_parameters, NULL((void*)0), "TKIP/CCMP parameters");
41352 }
41353 proto_item_set_len(ti, hdr_len + 8);
41354
41355 if (algorithm==PROTECTION_ALG_TKIP) {
41356 snprintf(out_buff, SHORT_STR256, "0x%08X%02X%02X",
41357 tvb_get_letohl(tvb, hdr_len + 4),
41358 tvb_get_uint8(tvb, hdr_len),
41359 tvb_get_uint8(tvb, hdr_len + 2));
41360 proto_tree_add_string(wep_tree, hf_ieee80211_tkip_extiv, tvb, hdr_len,
41361 EXTIV_LEN8, out_buff);
41362 } else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102 ||
41363 algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104) {
41364 snprintf(out_buff, SHORT_STR256, "0x%08X%02X%02X",
41365 tvb_get_letohl(tvb, hdr_len + 4),
41366 tvb_get_uint8(tvb, hdr_len + 1),
41367 tvb_get_uint8(tvb, hdr_len));
41368 proto_tree_add_string(wep_tree, hf_ieee80211_ccmp_extiv, tvb, hdr_len,
41369 EXTIV_LEN8, out_buff);
41370 }
41371
41372 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, wep_key);
41373 }
41374
41375 /* Subtract out the length of the IV. */
41376 len -= EXTIV_LEN8;
41377 reported_len -= EXTIV_LEN8;
41378 ivlen = EXTIV_LEN8;
41379 /* It is unknown whether this is TKIP or CCMP, so let's not even try to
41380 * parse TKIP Michael MIC+ICV or CCMP MIC. */
41381
41382 const uint8_t *key = NULL((void*)0);
41383 int key_len;
41384
41385 /* checking for the trailer */
41386 if (next_tvb!=NULL((void*)0)) {
41387 if (reported_len < (int) sec_trailer) {
41388 /* There is no space for a trailer, ignore it and don't decrypt */
41389 ;
41390 } else if (len < reported_len) {
41391 /* There is space for a trailer, but we haven't capture all the */
41392 /* packet. Slice off the trailer, but don't try to decrypt */
41393 reported_len -= sec_trailer;
41394 if (len > reported_len)
41395 len = reported_len;
41396 } else {
41397 /* Ok, we have a trailer and the whole packet. Decrypt it! */
41398 /* TODO: At the moment we won't add the trailer to the tree, */
41399 /* so don't remove the trailer from the packet */
41400 len -= sec_trailer;
41401 reported_len -= sec_trailer;
41402 can_decrypt = true1;
41403
41404 /* Add Key information to packet */
41405 if (!tvb_get_bits8(tvb, 39, 1)) { /* RA is unicast, encrypted with pairwise key */
41406 key_len = Dot11DecryptGetTK(&used_key, &key);
41407 bytes_to_hexstr(out_buff, key, key_len);
41408 out_buff[2 * key_len] = '\0';
41409 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_tk, tvb, 0, 0, out_buff);
41410 proto_item_set_generated(ti);
41411
41412 /* Also add the PMK used to decrypt the packet. (PMK==PSK) */
41413 if (used_key.KeyData.Wpa.PskLen > 0) {
41414
41415 bytes_to_hexstr(out_buff, used_key.KeyData.Wpa.Psk, used_key.KeyData.Wpa.PskLen);
41416 out_buff[2*used_key.KeyData.Wpa.PskLen] = '\0';
41417 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_pmk, tvb, 0, 0, out_buff);
41418 proto_item_set_generated(ti);
41419 }
41420
41421 } else { /* Encrypted with Group Key */
41422 key_len = Dot11DecryptGetGTK(&used_key, &key);
41423 bytes_to_hexstr(out_buff, key, key_len);
41424 out_buff[2 * key_len] = '\0';
41425 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_gtk, tvb, 0, 0, out_buff);
41426 proto_item_set_generated(ti);
41427 }
41428 }
41429 }
41430 } else {
41431 /* No Ext. IV - WEP packet */
41432 /*
41433 * XXX - pass the IV and key to "try_decrypt_wep()", and have it pass
41434 * them to "wep_decrypt()", rather than having "wep_decrypt()" extract
41435 * them itself.
41436 *
41437 * Also, just pass the data *following* the WEP parameters as the
41438 * buffer to decrypt.
41439 */
41440 iv = tvb_get_ntoh24(tvb, hdr_len);
41441 if (tree) {
41442 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 4,
41443 ett_wep_parameters, NULL((void*)0), "WEP parameters");
41444
41445 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_iv, tvb, hdr_len, 3, iv);
41446 tvb_memcpy(tvb, iv_buff, hdr_len, 3);
41447 is_iv_bad = weak_iv(iv_buff);
41448 if (is_iv_bad != -1) {
41449 proto_tree_add_boolean_format (wep_tree, hf_ieee80211_wep_iv_weak,
41450 tvb, 0, 0, true1,
41451 "Weak IV for key byte %d",
41452 is_iv_bad);
41453 }
41454 }
41455 if (tree)
41456 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, wep_key);
41457
41458 /* Subtract out the length of the IV. */
41459 len -= 4;
41460 reported_len -= 4;
41461 ivlen = 4;
41462
41463 /* Even if the decryption was not successful, set the algorithm */
41464 algorithm=PROTECTION_ALG_WEP;
41465
41466 /*
41467 * Well, this packet should, in theory, have an ICV.
41468 * Do we have the entire packet, and does it have enough data for
41469 * the ICV?
41470 */
41471 if (reported_len < 4) {
41472 /*
41473 * The packet is claimed not to even have enough data for a
41474 * 4-byte ICV.
41475 * Pretend it doesn't have an ICV.
41476 */
41477 ;
41478 } else if (len < reported_len) {
41479 /*
41480 * The packet is claimed to have enough data for a 4-byte ICV,
41481 * but we didn't capture all of the packet.
41482 * Slice off the 4-byte ICV from the reported length, and trim
41483 * the captured length so it's no more than the reported length;
41484 * that will slice off what of the ICV, if any, is in the
41485 * captured length.
41486 */
41487 reported_len -= 4;
41488 if (len > reported_len)
41489 len = reported_len;
41490 } else {
41491 /*
41492 * We have the entire packet, and it includes a 4-byte ICV.
41493 * Slice it off, and put it into the tree.
41494 *
41495 * We only support decrypting if we have the ICV.
41496 *
41497 * XXX - the ICV is encrypted; we're putting the encrypted
41498 * value, not the decrypted value, into the tree.
41499 */
41500 len -= 4;
41501 reported_len -= 4;
41502 can_decrypt = true1;
41503 }
41504 }
41505
41506 if (algorithm == PROTECTION_ALG_WEP) {
41507 (void) g_strlcpy(wlan_stats.protection, "WEP", MAX_PROTECT_LEN10);
41508 } else if (algorithm == PROTECTION_ALG_TKIP) {
41509 (void) g_strlcpy(wlan_stats.protection, "TKIP", MAX_PROTECT_LEN10);
41510 } else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102) {
41511 (void) g_strlcpy(wlan_stats.protection, "CCMP", MAX_PROTECT_LEN10);
41512 } else if (algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104) {
41513 (void) g_strlcpy(wlan_stats.protection, "GCMP", MAX_PROTECT_LEN10);
41514 } else {
41515 (void) g_strlcpy(wlan_stats.protection, "Unknown", MAX_PROTECT_LEN10);
41516 }
41517
41518 /* protection header */
41519 if (!can_decrypt || (next_tvb == NULL((void*)0))) {
41520 /*
41521 * WEP decode impossible or failed, treat payload as raw data
41522 * and don't attempt fragment reassembly or further dissection.
41523 */
41524 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len + ivlen, len, reported_len);
41525
41526 if (tree) {
41527 if (algorithm == PROTECTION_ALG_WEP) {
41528 if (can_decrypt)
41529 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
41530 hdr_len + ivlen + len, 4,
41531 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
41532 "0x%08x (not verified)",
41533 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
41534 } else if (algorithm == PROTECTION_ALG_CCMP) {
41535 } else if (algorithm == PROTECTION_ALG_TKIP) {
41536 }
41537 }
41538
41539 if ((!(option_flags & IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002)) && (wlan_ignore_prot == WLAN_IGNORE_PROT_NO0)) {
41540 /* Some wireless drivers (such as Centrino) WEP payload already decrypted */
41541 call_data_dissector(next_tvb, pinfo, tree);
41542 goto end_of_wlan;
41543 }
41544 } else {
41545 if (algorithm == PROTECTION_ALG_WEP) {
41546 if (tree)
41547 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
41548 hdr_len + ivlen + len, 4,
41549 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
41550 "0x%08x (correct)",
41551 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
41552
41553 add_new_data_source(pinfo, next_tvb, "Decrypted WEP data");
41554 } else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102) {
41555 add_new_data_source(pinfo, next_tvb, "Decrypted CCMP data");
41556 } else if (algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104) {
41557 add_new_data_source(pinfo, next_tvb, "Decrypted GCMP data");
41558 } else if (algorithm==PROTECTION_ALG_TKIP) {
41559 add_new_data_source(pinfo, next_tvb, "Decrypted TKIP data");
41560 }
41561#undef IS_TKIP
41562#undef IS_CCMP
41563#undef PROTECTION_ALG_CCMP
41564#undef PROTECTION_ALG_TKIP
41565#undef PROTECTION_ALG_WEP
41566 }
41567
41568 /*
41569 * WEP decryption successful!
41570 *
41571 * Use the tvbuff we got back from the decryption; the data starts at
41572 * the beginning. The lengths are already correct for the decoded WEP
41573 * payload.
41574 */
41575 hdr_len = 0;
41576
41577 } else {
41578 /*
41579 * Not a WEP-encrypted frame; just use the data from the tvbuff
41580 * handed to us.
41581 *
41582 * The payload starts at "hdr_len" (i.e., just past the 802.11
41583 * MAC header), the length of data in the tvbuff following the
41584 * 802.11 header is "len", and the length of data in the packet
41585 * following the 802.11 header is "reported_len".
41586 */
41587 next_tvb = tvb;
41588 }
41589
41590 /*
41591 * Do defragmentation if "wlan_defragment" is true, and we have more
41592 * fragments or this isn't the first fragment.
41593 *
41594 * We have to do some special handling to catch frames that
41595 * have the "More Fragments" indicator not set but that
41596 * don't show up as reassembled and don't have any other
41597 * fragments present. Some networking interfaces appear
41598 * to do reassembly even when you're capturing raw packets
41599 * *and* show the reassembled packet without the "More
41600 * Fragments" indicator set *but* with a non-zero fragment
41601 * number.
41602 *
41603 * "fragment_add_seq_802_11()" handles that; we want to call it
41604 * even if we have a short frame, so that it does those checks - if
41605 * the frame is short, it doesn't do reassembly on it.
41606 *
41607 * (This could get some false positives if we really *did* only
41608 * capture the last fragment of a fragmented packet, but that's
41609 * life.)
41610 */
41611 save_fragmented = pinfo->fragmented;
41612 if (wlan_defragment && (more_frags || (frag_number != 0))) {
41613 fragment_head *fd_head;
41614
41615 /*
41616 * If we've already seen this frame, look it up in the
41617 * table of reassembled packets, otherwise add it to
41618 * whatever reassembly is in progress, if any, and see
41619 * if it's done.
41620 */
41621 if (reported_len < 0)
41622 THROW(ReportedBoundsError)except_throw(1, (3), ((void*)0));
41623 fd_head = fragment_add_seq_802_11(&wlan_reassembly_table,
41624 next_tvb, hdr_len, pinfo, seq_number, NULL((void*)0),
41625 frag_number,
41626 reported_len,
41627 more_frags);
41628 next_tvb = process_reassembled_data(tvb, hdr_len, pinfo,
41629 "Reassembled 802.11", fd_head,
41630 &frag_items, NULL((void*)0), hdr_tree);
41631 } else {
41632 /*
41633 * If this is the first fragment, dissect its contents, otherwise
41634 * just show it as a fragment.
41635 */
41636 if (frag_number != 0) {
41637 /* Not the first fragment - don't dissect it. */
41638 next_tvb = NULL((void*)0);
41639 } else {
41640 /* First fragment, or not fragmented. Dissect what we have here. */
41641
41642 /* Get a tvbuff for the payload. */
41643 next_tvb = tvb_new_subset_length_caplen(next_tvb, hdr_len, len, reported_len);
41644
41645 /*
41646 * If this is the first fragment, but not the only fragment,
41647 * tell the next protocol that.
41648 */
41649 if (more_frags)
41650 pinfo->fragmented = true1;
41651 else
41652 pinfo->fragmented = false0;
41653 }
41654 }
41655
41656 if (next_tvb == NULL((void*)0)) {
41657 /* Just show this as an incomplete fragment. */
41658 col_set_str(pinfo->cinfo, COL_INFO, "Fragmented IEEE 802.11 frame");
41659 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len, len, reported_len);
41660 call_data_dissector(next_tvb, pinfo, tree);
41661 pinfo->fragmented = save_fragmented;
41662 goto end_of_wlan;
41663 }
41664
41665 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
41666 {
41667
41668 case MGT_FRAME0x00:
41669 dissect_ieee80211_mgt(fcf, next_tvb, pinfo, tree);
41670 try_scan_ft_assoc_keys(pinfo, whdr);
41671 break;
41672
41673 case DATA_FRAME0x02:
41674 if (is_amsdu && (tvb_reported_length_remaining(next_tvb, 0) > 4)) {
41675 proto_item *parent_item;
41676 proto_tree *mpdu_tree;
41677 uint32_t msdu_offset = 0;
41678 unsigned i = 1;
41679
41680 parent_item = proto_tree_add_protocol_format(tree, proto_aggregate, next_tvb, 0,
41681 tvb_reported_length_remaining(next_tvb, 0), "IEEE 802.11 Aggregate MSDU");
41682 mpdu_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_parent_tree);
41683
41684 do {
41685 tvbuff_t *msdu_tvb;
41686 uint16_t msdu_length;
41687 proto_tree *subframe_tree;
41688 bool_Bool last_subframe = false0;
41689 uint16_t subframe_length;
41690
41691 /*
41692 * IEEE Std 802.11-2012 says, in section 8.3.2.2 "A-MSDU format":
41693 *
41694 * The A-MSDU subframe header contains three fields: DA, SA, and
41695 * Length. The order of these fields and the bits within these
41696 * fields are the same as the IEEE 802.3 frame format.
41697 *
41698 * which means that the length field is big-endian, not
41699 * little-endian.
41700 */
41701 msdu_length = tvb_get_ntohs(next_tvb, msdu_offset+12);
41702
41703 if (tvb_reported_length_remaining(next_tvb, msdu_offset+14+msdu_length) <= 14)
41704 last_subframe = true1;
41705
41706 /* The last A-MSDU subframe has no padding. */
41707 if (last_subframe)
41708 subframe_length = 14+msdu_length;
41709 else
41710 subframe_length = WS_ROUNDUP_4(14+msdu_length)(((14+msdu_length) + ((unsigned)(4U-1U))) & (~((unsigned)
(4U-1U))))
;
41711
41712 parent_item = proto_tree_add_item(mpdu_tree, hf_ieee80211_amsdu_subframe, next_tvb,
41713 msdu_offset, subframe_length, ENC_NA0x00000000);
41714 proto_item_append_text(parent_item, " #%u", i);
41715 subframe_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
41716 i += 1;
41717
41718 proto_tree_add_mac48_detail(&mac_da, NULL((void*)0), ett_addr, next_tvb, subframe_tree, msdu_offset);
41719 proto_tree_add_mac48_detail(&mac_sa, NULL((void*)0), ett_addr, next_tvb, subframe_tree, msdu_offset+6);
41720 proto_tree_add_item(subframe_tree, hf_ieee80211_amsdu_length, next_tvb, msdu_offset+12, 2, ENC_BIG_ENDIAN0x00000000);
41721
41722 msdu_offset += 14;
41723 msdu_tvb = tvb_new_subset_length(next_tvb, msdu_offset, msdu_length);
41724 call_dissector(llc_handle, msdu_tvb, pinfo, subframe_tree);
41725 if (!last_subframe) {
41726 uint8_t padding = (4-((msdu_offset+msdu_length)&3))&3;
41727 if (padding > 0)
41728 proto_tree_add_item(subframe_tree, hf_ieee80211_amsdu_padding, next_tvb, msdu_offset+msdu_length, padding, ENC_NA0x00000000);
41729 }
41730
41731 msdu_offset = WS_ROUNDUP_4(msdu_offset+msdu_length)(((msdu_offset+msdu_length) + ((unsigned)(4U-1U))) & (~((
unsigned)(4U-1U))))
;
41732 } while (tvb_reported_length_remaining(next_tvb, msdu_offset) > 14);
41733 } else {
41734 /* I guess some bridges take Netware Ethernet_802_3 frames,
41735 which are 802.3 frames (with a length field rather than
41736 a type field, but with no 802.2 header in the payload),
41737 and just stick the payload into an 802.11 frame. I've seen
41738 captures that show frames of that sort.
41739
41740 We also handle some odd form of encapsulation in which a
41741 complete Ethernet frame is encapsulated within an 802.11
41742 data frame, with no 802.2 header. This has been seen
41743 from some hardware.
41744
41745 On top of that, at least at some point it appeared that
41746 the OLPC XO sent out frames with two bytes of 0 between
41747 the "end" of the 802.11 header and the beginning of
41748 the payload. Something similar has also been observed
41749 with Atheros chipsets. There the sequence control field
41750 seems repeated.
41751
41752 And, on top of *that*, IEEE Std 802.11-2018 section
41753 5.1.4 "MSDU format" says:
41754
41755 Logical Link Control (LLC) sublayer entities use the MAC
41756 sublayer service to exchange PDUs with peer LLC sublayer
41757 entities. These PDUs are termed MAC sublayer SDUs (MSDUs)
41758 when sent to the MAC sublayer. There are two LLC sublayer
41759 protocols used (see IEEE Std 802-2014); LLC Protocol
41760 Discrimination (LPD) (see ISO/IEC 8802-2:1998) and EtherType
41761 Protocol Discrimination (EPD) (see IEEE Std 802.3-2012).
41762 LPD is used for transmission of all IEEE 802.11 MSDUs with
41763 the exception of the 5.9 GHz bands where EPD is used
41764 (see E.2.3 and E.2.4).
41765
41766 and IEEE Std 1609.3-2016, section 5.2 "Logical link control",
41767 subsection 5.2.1 "General", says:
41768
41769 A Networking Services implementation shall use EPD in the
41770 LLC sublayer as described in IEEE Std 802, using an EtherType
41771 in the LLC sublayer header Type9 field (see Figure 5 and
41772 Figure 28). The LLC sublayer header consists solely of a
41773 2-octet field that contains an EtherType that identifies
41774 the higher layer protocol.
41775
41776 and ISO 21215, second edition, 2018-06, "Intelligent transport
41777 systems -- Localized communications -- ITS-M5", section 6.3
41778 "Logical link control sub-layer" says:
41779
41780 IEEE Std 802.11TM-2016 does not specify a logical link control
41781 sub-layer protocol. Related functionality is part of the
41782 communication adaptation sub-layer specified in 6.4.
41783
41784 The Length/Type field specified in IEEE 802.3-2015 contains
41785 a 2-octet unsigned Integer number. Dependent on the value,
41786 the field provides either length information or EtherType
41787 information. If the value contained in this field is equal
41788 to or larger than 1 536 = 0x06.00, the field contains an
41789 EtherType address. Ethertype addresses are assigned by the
41790 IEEE Registration Authority, and are used to identify the
41791 protocol employed directly above the ITS-S access layer.
41792 This method of addressing is named "EtherType Protocol
41793 Discrimination" (EPD). An ITS-M5 CI shall support EPD
41794 specified in IEEE Std 802.
41795
41796 ...
41797
41798 NOTE 2 EPD replaces LLC Protocol Discrimination (LPD).
41799 ETSI ITS-G5 is the only known ITS access technology still
41800 using LPD.
41801
41802 Different to the information in IEEE Std 802.11-2016, 5.1.4,
41803 EPD is applicable in all frequency bands as long as
41804 dot11OCBActivated is set to true, i.e. activating the operation
41805 mode "outside the context of a BSS" (OCB).
41806
41807 meaning that a packet might just begin with an Ethertype.
41808
41809 So, if the packet doesn't start with 0xaa 0xaa:
41810
41811 we first use the same scheme that linux-wlan-ng does to detect
41812 those encapsulated Ethernet frames, namely looking to see whether
41813 the frame either starts with 6 octets that match the destination
41814 address from the 802.11 header or has 6 octets that match the
41815 source address from the 802.11 header following the first 6 octets,
41816 and, if so, treat it as an encapsulated Ethernet frame;
41817
41818 otherwise, we use the same scheme that we use in the Ethernet
41819 dissector to recognize Netware 802.3 frames, namely checking
41820 whether the packet starts with 0xff 0xff and, if so, treat it
41821 as an encapsulated IPX frame;
41822
41823 otherwise, we check whether the packet starts with 0x00 0x00
41824 or with a copy of the sequence control field and, if so, treat
41825 those two octets as mysterious extra stuff preceding the
41826 payload (possibly OLPC stuff, possibly Ruckus Wireless stuff,
41827 possibly Atheros stuff), and treat what follows as a frame
41828 using LPD;
41829
41830 otherwise, we check whether the first two octets, treated
41831 as an Ethertype, has a dissector and, if so, treat this as
41832 a frame using EPD;
41833
41834 otherwise, we treat this as a frame using LPD. */
41835 heur_dtbl_entry_t *hdtbl_entry;
41836 if (dissector_try_heuristic(heur_subdissector_list, next_tvb, pinfo, tree, &hdtbl_entry, NULL((void*)0))) {
41837 pinfo->fragmented = save_fragmented;
41838 goto end_of_wlan; /* heuristics dissector handled it. */
41839 }
41840 encap_type = ENCAP_802_2;
41841 if (tvb_bytes_exist(next_tvb, 0, 2)) {
41842 octet1 = tvb_get_uint8(next_tvb, 0);
41843 octet2 = tvb_get_uint8(next_tvb, 1);
41844 if ((octet1 != 0xaa) || (octet2 != 0xaa)) {
41845 if ((tvb_memeql(next_tvb, 6, (const uint8_t *)pinfo->dl_src.data, 6) == 0) ||
41846 (tvb_memeql(next_tvb, 0, (const uint8_t *)pinfo->dl_dst.data, 6) == 0))
41847 encap_type = ENCAP_ETHERNET;
41848 else if ((octet1 == 0xff) && (octet2 == 0xff))
41849 encap_type = ENCAP_IPX;
41850 else if (((octet1 == 0x00) && (octet2 == 0x00)) &&
41851 tvb_bytes_exist(next_tvb, 0, 18) &&
41852 (tvb_memeql(next_tvb, 6, (const uint8_t*)pinfo->dl_dst.data, 6) == 0) &&
41853 (tvb_memeql(next_tvb, 12, (const uint8_t*)pinfo->dl_src.data, 6) == 0)) {
41854 proto_tree_add_item(tree, hf_ieee80211_mysterious_extra_stuff, next_tvb, 0, 6, ENC_NA0x00000000);
41855 next_tvb = tvb_new_subset_remaining(next_tvb, 6);
41856 encap_type = ENCAP_ETHERNET;
41857 } else if (((octet1 == 0x00) && (octet2 == 0x00)) ||
41858 (((octet2 << 8) | octet1) == seq_control)) {
41859 proto_tree_add_item(tree, hf_ieee80211_mysterious_extra_stuff, next_tvb, 0, 2, ENC_NA0x00000000);
41860 next_tvb = tvb_new_subset_remaining(next_tvb, 2);
41861 } else if ((etype = ((octet1 << 8) | octet2)) > ETHERNET_II_MIN_LEN1536) {
41862 /*
41863 * This might be an Ethertype, so maybe this is 802.11
41864 * using EPD rather than LPD. Is this a *known* Ethertype?
41865 */
41866 if (dissector_get_uint_handle(ethertype_subdissector_table,
41867 etype) != NULL((void*)0)) {
41868 /* Yes. */
41869 encap_type = ENCAP_EPD;
41870 }
41871 }
41872 }
41873 }
41874
41875 switch (encap_type) {
41876
41877 case ENCAP_802_2:
41878 /* 802.2 LPD */
41879 call_dissector(llc_handle, next_tvb, pinfo, tree);
41880 break;
41881
41882 case ENCAP_ETHERNET:
41883 call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, tree);
41884 break;
41885
41886 case ENCAP_IPX:
41887 call_dissector(ipx_handle, next_tvb, pinfo, tree);
41888 break;
41889
41890 case ENCAP_EPD:
41891 /* EPD */
41892 call_dissector(epd_llc_handle, next_tvb, pinfo, tree);
41893 break;
41894 }
41895 }
41896 break;
41897
41898 case EXTENSION_FRAME0x03:
41899 {
41900 dissect_ieee80211_extension(fcf, next_tvb, pinfo, tree, flags);
41901 break;
41902 }
41903 }
41904 pinfo->fragmented = save_fragmented;
41905
41906end_of_wlan:
41907 whdr->stats = wlan_stats;
41908 tap_queue_packet(wlan_tap, pinfo, whdr);
41909 memset(&wlan_stats, 0, sizeof wlan_stats);
41910
41911 return tvb_captured_length(tvb);
41912}
41913
41914static int
41915dissect_ieee80211_unknown_pv(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
41916 proto_tree *tree, uint8_t pv,
41917 struct ieee_802_11_phdr *phdr)
41918{
41919 proto_item *ti;
41920 int len;
41921 unsigned offset = 0;
41922 proto_tree *hdr_tree;
41923 tvbuff_t *next_tvb;
41924
41925 col_add_fstr(pinfo->cinfo, COL_INFO, "Unknown protocol version: %u", pv);
41926
41927 /* Create the protocol tree */
41928 len = tvb_reported_length_remaining(tvb, offset);
41929 ti = proto_tree_add_protocol_format(tree, proto_wlan, tvb, offset, len,
41930 "IEEE 802.11 Unknown Protocol Version:"
41931 "%d", pv);
41932 hdr_tree = proto_item_add_subtree(ti, ett_80211);
41933 /* The FCF is two bytes in known versions. The first 2 bits are the
41934 * protocol version. Let's use the PV1 version so that, among other
41935 * things, it will highlight the entire putative FCF and throw an
41936 * exception if we have fewer than two octets. */
41937 proto_tree_add_item(hdr_tree, hf_ieee80211_fc_pv1_proto_version, tvb, offset, 2, ENC_NA0x00000000);
41938 len -= 2; /* We have already dealt with two bytes (FCF) */
41939 if (phdr->fcs_len == 4) {
41940 /* This is claimed to have an FCS. Is there enough reported room for it? */
41941 if (len >= 4) {
41942 len -= 4;
41943 }
41944 }
41945 next_tvb = tvb_new_subset_length(tvb, 2, len);
41946 call_data_dissector(next_tvb, pinfo, hdr_tree);
41947 /* Below should throw an exception if we didn't have room for the FCS. */
41948 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);
41949
41950 return tvb_captured_length(tvb);
41951}
41952
41953/* ************************************************************************* */
41954/* Dissect 802.11 frame */
41955/* ************************************************************************* */
41956/*
41957 * The 802.11n specification makes some fairly significant changes to the
41958 * layout of the MAC header. The first two bits of the MAC header are the
41959 * protocol version. You'd think that the 802.11 committee would have
41960 * bumped the version to indicate a different MAC layout, but NOOOO -- we
41961 * have to go digging for bits in various locations instead.
41962 */
41963static int
41964dissect_ieee80211_common(tvbuff_t *tvb, packet_info *pinfo,
41965 proto_tree *tree, uint32_t option_flags,
41966 struct ieee_802_11_phdr *phdr)
41967{
41968 uint8_t pv = 0;
41969 bool_Bool isDMG = (phdr->phy == PHDR_802_11_PHY_11AD9);
41970 bool_Bool isS1G = (phdr->phy == PHDR_802_11_PHY_11AH10);
41971 uint16_t fcf;
41972 static wlan_hdr_t whdrs[4];
41973 wlan_hdr_t *whdr;
41974
41975 /* Update these so the info is available down the line */
41976 if (pinfo->pseudo_header) {
41977 pinfo->pseudo_header->ieee_802_11.has_frequency = phdr->has_frequency;
41978 pinfo->pseudo_header->ieee_802_11.frequency = phdr->frequency;
41979 }
41980
41981 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY, GINT_TO_POINTER(isDMG)((gpointer) (glong) (isDMG)));
41982
41983 memset(&whdrs[0], 0, sizeof(wlan_hdr_t) * 4);
41984 whdr= &whdrs[0];
41985
41986 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_S1G_KEY, GINT_TO_POINTER(isS1G)((gpointer) (glong) (isS1G)));
41987
41988 /* Handling for one-one mapping between associations and conversations */
41989 if (!pinfo->fd->visited) {
41990 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
41991 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
41992 }
41993
41994 col_set_str(pinfo->cinfo, COL_PROTOCOL, "802.11");
41995 col_clear(pinfo->cinfo, COL_INFO);
41996
41997 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))
;
41998
41999 /*
42000 * Handle PV0 and PV1 in separate functions.
42001 */
42002 pv = FCF_PROT_VERSION(fcf)((fcf) & 0x3);
42003 switch (pv) {
42004 case PV00x0:
42005 dissect_ieee80211_pv0(tvb, pinfo, tree, option_flags, whdr, phdr);
42006 break;
42007 case PV10x1:
42008 dissect_ieee80211_pv1(tvb, pinfo, tree, phdr);
42009 break;
42010 default: /* Unknown protocol version */
42011 dissect_ieee80211_unknown_pv(tvb, pinfo, tree, pv, phdr);
42012 break;
42013 }
42014 return tvb_captured_length(tvb);
42015}
42016
42017/*
42018 * Dissect 802.11 with a variable-length link-layer header and with the FCS
42019 * presence or absence indicated by the pseudo-header, if there is one.
42020 */
42021static int
42022dissect_ieee80211(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
42023{
42024 struct ieee_802_11_phdr *phdr = (struct ieee_802_11_phdr *)data;
42025 struct ieee_802_11_phdr ourphdr;
42026
42027 if (phdr == NULL((void*)0)) {
42028 /*
42029 * Fake a pseudo-header.
42030 * XXX - what are we supposed to do if the FCS length is unknown?
42031 */
42032 memset(&ourphdr, 0, sizeof(ourphdr));
42033 ourphdr.fcs_len = -1;
42034 ourphdr.decrypted = false0;
42035 ourphdr.datapad = false0;
42036 ourphdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42037 phdr = &ourphdr;
42038 }
42039 return dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, phdr);
42040}
42041
42042/*
42043 * Dissect 802.11 with a variable-length link-layer header and with an
42044 * FCS, but no pseudo-header.
42045 */
42046static int
42047dissect_ieee80211_withfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
42048{
42049 struct ieee_802_11_phdr phdr;
42050
42051 /* Construct a pseudo-header to hand to the common code. */
42052 memset(&phdr, 0, sizeof(phdr));
42053 phdr.fcs_len = 4;
42054 phdr.decrypted = false0;
42055 phdr.datapad = false0;
42056 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42057 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
42058 return tvb_captured_length(tvb);
42059}
42060
42061/*
42062 * Dissect 802.11 with a variable-length link-layer header and without an
42063 * FCS, but no pseudo-header.
42064 */
42065static int
42066dissect_ieee80211_withoutfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
42067{
42068 struct ieee_802_11_phdr phdr;
42069
42070 /* Construct a pseudo-header to hand to the common code. */
42071 memset(&phdr, 0, sizeof(phdr));
42072 phdr.decrypted = false0;
42073 phdr.datapad = false0;
42074 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42075 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
42076 return tvb_captured_length(tvb);
42077}
42078
42079/*
42080 * Dissect 802.11 from an Intel 2200BG adapter in a Centrino laptop
42081 * running Windows XP.
42082 *
42083 * From
42084 *
42085 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00184.html
42086 *
42087 * and
42088 *
42089 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00393.html:
42090 *
42091 * I tried capturing from a Centrino laptop with the Intel 2200BG 802.11g
42092 * chipset. I saw a lot of "Ethernet II" frames with 0x2452 as ethertype.
42093 *
42094 * ...
42095 *
42096 * This behaviour has been observed on Windows XP. In my opinion it is
42097 * a "proprietary" behaviour of either the Centrino driver or the Centrino
42098 * hardware. Currently I have no Linux distro installed on the machine to
42099 * verify whether it is also the case.
42100 *
42101 * These packets are seen only in a promiscuous capture:
42102 * - Packets normally received by the Centrino computer have the normal
42103 * structure (no 802.11/LLC header but directly IP header).
42104 * - Packets that are supposed to be received by another computer have
42105 * the 802.11/LLC headers. ... Also I noticed that when WEP is enabled,
42106 * the 802.11 header has the flag "WEP" set to true, but the packet
42107 * is already decrypted. I added a test in the code to accommodate this.
42108 * For TKIP it seems to stay encrypted.
42109 */
42110static int
42111dissect_ieee80211_centrino(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
42112{
42113 struct ieee_802_11_phdr phdr;
42114
42115 /* Construct a pseudo-header to hand to the common code. */
42116 memset(&phdr, 0, sizeof(phdr));
42117 phdr.decrypted = false0;
42118 phdr.datapad = false0;
42119 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42120 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002|IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
42121 return tvb_captured_length(tvb);
42122}
42123
42124/*
42125 * Dissect 802.11 with a variable-length link-layer header and a byte-swapped
42126 * control field and with no FCS (some hardware sends out LWAPP-encapsulated
42127 * 802.11 packets with the control field byte swapped).
42128 */
42129static int
42130dissect_ieee80211_bsfc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
42131{
42132 struct ieee_802_11_phdr phdr;
42133
42134 /* Construct a pseudo-header to hand to the common code. */
42135 memset(&phdr, 0, sizeof(phdr));
42136 phdr.decrypted = false0;
42137 phdr.datapad = false0;
42138 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42139 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_BROKEN_FC0x00000001|IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
42140 return tvb_captured_length(tvb);
42141}
42142
42143/*
42144 * Dissect 802.11 with a variable-length link-layer header without qos elements
42145 * in data+qos frames and with no FCS (sent as WIDS frames by Cisco standalone
42146 * APs).
42147 */
42148static int
42149dissect_ieee80211_noqos(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
42150{
42151 struct ieee_802_11_phdr phdr;
42152
42153 /* Construct a pseudo-header to hand to the common code. */
42154 memset(&phdr, 0, sizeof(phdr));
42155 phdr.decrypted = false0;
42156 phdr.datapad = false0;
42157 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42158 dissect_ieee80211_common(tvb, pinfo, tree, 0, &phdr);
42159 return tvb_captured_length(tvb);
42160}
42161
42162
42163/* ------------- */
42164static unsigned
42165retransmit_hash(const void *k)
42166{
42167 const retransmit_key *key = (const retransmit_key *)k;
42168 unsigned hash_val;
42169 int i;
42170
42171 hash_val = 0;
42172 for (i = 0; i < 6; i++)
42173 hash_val += key->bssid[i];
42174
42175 for (i = 0; i < 6; i++)
42176 hash_val += key->src[i];
42177
42178 return hash_val;
42179}
42180
42181static int
42182retransmit_equal(const void *k1, const void *k2)
42183{
42184 const retransmit_key *key1 = (const retransmit_key *)k1;
42185 const retransmit_key *key2 = (const retransmit_key *)k2;
42186
42187 return ((!memcmp(key1->bssid, key2->bssid, 6) && !memcmp(key1->src, key2->src, 6)) ? true1:false0);
42188}
42189
42190static unsigned
42191frame_hash(const void *k)
42192{
42193 uint32_t frame = GPOINTER_TO_UINT(k)((guint) (gulong) (k));
42194
42195 return frame;
42196}
42197
42198static int
42199frame_equal(const void *k1, const void *k2)
42200{
42201 uint32_t frame1 = GPOINTER_TO_UINT(k1)((guint) (gulong) (k1));
42202 uint32_t frame2 = GPOINTER_TO_UINT(k2)((guint) (gulong) (k2));
42203
42204 return frame1==frame2;
42205}
42206
42207/*
42208 * EAPOL key description dissectors.
42209 */
42210#define KEY_INFO_KEYDES_VERSION_MASK0x0007 0x0007
42211#define KEY_INFO_KEY_TYPE_MASK0x0008 0x0008
42212#define KEY_INFO_KEY_INDEX_MASK0x0030 0x0030
42213#define KEY_INFO_INSTALL_MASK0x0040 0x0040
42214#define KEY_INFO_KEY_ACK_MASK0x0080 0x0080
42215#define KEY_INFO_KEY_MIC_MASK0x0100 0x0100
42216#define KEY_INFO_SECURE_MASK0x0200 0x0200
42217#define KEY_INFO_ERROR_MASK0x0400 0x0400
42218#define KEY_INFO_REQUEST_MASK0x0800 0x0800
42219#define KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000 0x1000
42220#define KEY_INFO_SMK_MESSAGE_MASK0x2000 0x2000
42221
42222#define KEYDES_VER_TYPE10x01 0x01
42223#define KEYDES_VER_TYPE20x02 0x02
42224#define KEYDES_VER_TYPE30x03 0x03
42225
42226static const value_string keydes_version_vals[] = {
42227 { KEYDES_VER_TYPE10x01, "RC4 Cipher, HMAC-MD5 MIC" },
42228 { KEYDES_VER_TYPE20x02, "AES Cipher, HMAC-SHA1 MIC" },
42229 { KEYDES_VER_TYPE30x03, "AES Cipher, AES-128-CMAC MIC" },
42230 { 0, NULL((void*)0) }
42231};
42232
42233static int proto_wlan_rsna_eapol;
42234
42235static int hf_wlan_rsna_eapol_wpa_keydes_msgnr;
42236static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo;
42237static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version;
42238static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type;
42239static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index;
42240static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install;
42241static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack;
42242static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic;
42243static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure;
42244static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error;
42245static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request;
42246static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data;
42247static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message;
42248static int hf_wlan_rsna_eapol_keydes_key_len;
42249static int hf_wlan_rsna_eapol_keydes_replay_counter;
42250static int hf_wlan_rsna_eapol_keydes_key_iv;
42251static int hf_wlan_rsna_eapol_wpa_keydes_nonce;
42252static int hf_wlan_rsna_eapol_wpa_keydes_rsc;
42253static int hf_wlan_rsna_eapol_wpa_keydes_id;
42254static int hf_wlan_rsna_eapol_wpa_keydes_mic;
42255static int hf_wlan_rsna_eapol_wpa_keydes_data_len;
42256static int hf_wlan_rsna_eapol_wpa_keydes_data;
42257static int hf_wlan_rsna_eapol_wpa_keydes_padding;
42258static int hf_wlan_rsna_eapol_wpa_extraneous;
42259
42260static int ett_keyinfo;
42261static int ett_wlan_rsna_eapol_keydes_data;
42262
42263static const true_false_string keyinfo_key_type_tfs = { "Pairwise Key", "Group Key" };
42264
42265static int
42266keydata_padding_len(tvbuff_t *tvb)
42267{
42268 int keydata_len = tvb_reported_length(tvb);
42269 int len_no_padding = keydata_len;
42270 const uint8_t *keydata = tvb_get_ptr(tvb, 0, keydata_len);
42271 while (len_no_padding > 0 && (keydata[len_no_padding - 1] == 0x00)) {
42272 len_no_padding--;
42273 }
42274 if (len_no_padding > 0 && keydata[len_no_padding - 1] == 0xdd) {
42275 len_no_padding--;
42276 return keydata_len - len_no_padding;
42277 }
42278 return 0;
42279}
42280
42281static void
42282get_eapol_parsed(packet_info *pinfo, PDOT11DECRYPT_EAPOL_PARSED eapol_parsed,
42283 ieee80211_conversation_data_t *conv_data)
42284{
42285 if (!eapol_parsed) {
42286 return;
42287 }
42288
42289 proto_eapol_key_frame_t *eapol_key =
42290 (proto_eapol_key_frame_t *)p_get_proto_data(pinfo->pool, pinfo, proto_eapol,
42291 EAPOL_KEY_FRAME_KEY0);
42292 if (!eapol_key) {
42293 return;
42294 }
42295 eapol_parsed->len = eapol_key->len;
42296 eapol_parsed->key_type = eapol_key->type;
42297 eapol_parsed->key_version = (uint8_t)
42298 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)))
;
42299 eapol_parsed->key_len = (uint16_t)
42300 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)))
;
42301 eapol_parsed->key_iv = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, KEY_IV_KEY);
42302 eapol_parsed->key_data = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, KEY_DATA_KEY);
42303 eapol_parsed->key_data_len = (uint16_t)
42304 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)))
;
42305 eapol_parsed->nonce = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, NONCE_KEY);
42306 eapol_parsed->group_cipher = (uint8_t)
42307 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)))
;
42308 eapol_parsed->cipher = (uint8_t)
42309 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)))
;
42310 eapol_parsed->akm = (uint8_t)
42311 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)))
;
42312 eapol_parsed->mic = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MIC_KEY);
42313 eapol_parsed->mic_len =
42314 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)))
;
42315 eapol_parsed->gtk = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GTK_KEY);
42316 eapol_parsed->gtk_len = (uint16_t)
42317 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)))
;
42318
42319 /* For fast bss transition akms */
42320 eapol_parsed->mdid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MDID_KEY);
42321 eapol_parsed->fte.r0kh_id =
42322 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R0KH_ID_KEY);
42323 eapol_parsed->fte.r0kh_id_len = (uint8_t)
42324 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)))
;
42325 eapol_parsed->fte.r1kh_id =
42326 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R1KH_ID_KEY);
42327 eapol_parsed->fte.r1kh_id_len = (uint8_t)
42328 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)))
;
42329
42330 if (conv_data) {
42331 eapol_parsed->dh_group = conv_data->sae_group;
42332 }
42333}
42334
42335static void
42336get_assoc_parsed(packet_info *pinfo, PDOT11DECRYPT_ASSOC_PARSED assoc_parsed)
42337{
42338 if (!assoc_parsed) {
42339 return;
42340 }
42341
42342 assoc_parsed->group_cipher = (uint8_t)
42343 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)))
;
42344 assoc_parsed->cipher = (uint8_t)
42345 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)))
;
42346 assoc_parsed->akm = (uint8_t)
42347 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)))
;
42348 assoc_parsed->fte.mic = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_MIC_KEY);
42349 assoc_parsed->fte.mic_len =
42350 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)))
;
42351 assoc_parsed->mdid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MDID_KEY);
42352 assoc_parsed->fte.anonce =
42353 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_ANONCE_KEY);
42354 assoc_parsed->fte.snonce =
42355 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_SNONCE_KEY);
42356 assoc_parsed->fte.r0kh_id =
42357 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R0KH_ID_KEY);
42358 assoc_parsed->fte.r0kh_id_len = (uint8_t)
42359 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)))
;
42360 assoc_parsed->fte.r1kh_id =
42361 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R1KH_ID_KEY);
42362 assoc_parsed->fte.r1kh_id_len = (uint8_t)
42363 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)))
;
42364 assoc_parsed->rsne_tag =
42365 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, RSNE_TAG_KEY);
42366 assoc_parsed->rsnxe_tag =
42367 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, RSNXE_TAG_KEY);
42368 assoc_parsed->mde_tag =
42369 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MDE_TAG_KEY);
42370 assoc_parsed->fte_tag =
42371 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_TAG_KEY);
42372 assoc_parsed->rde_tag =
42373 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, RDE_TAG_KEY);
42374 assoc_parsed->gtk = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GTK_KEY);
42375 assoc_parsed->gtk_len = (uint16_t)
42376 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)))
;
42377 assoc_parsed->gtk_subelem_key_len = (uint16_t)
42378 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)))
;
42379}
42380
42381static void
42382try_decrypt_keydata(packet_info *pinfo)
42383{
42384 uint32_t dec_caplen;
42385 unsigned char dec_data[DOT11DECRYPT_EAPOL_MAX_LEN1024U];
42386 DOT11DECRYPT_EAPOL_PARSED eapol_parsed;
42387 DOT11DECRYPT_KEY_ITEM used_key;
42388
42389 if (!enable_decryption) {
42390 return;
42391 }
42392
42393 uint8_t *bssid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, BSSID_KEY);
42394 uint8_t *sta = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, STA_KEY);
42395 if (!bssid || !sta) {
42396 return;
42397 }
42398
42399 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
42400 ieee80211_conversation_data_t *conversation_data = NULL((void*)0);
42401 if (conversation) {
42402 conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
42403 /* Use MLD MAC in EAPOL */
42404 if (conversation_data && conversation_data->mld_set) {
42405 bssid = conversation_data->ap_mld;
42406 sta = conversation_data->sta_mld;
42407 }
42408 }
42409
42410 memset(&eapol_parsed, 0, sizeof(eapol_parsed));
42411 get_eapol_parsed(pinfo, &eapol_parsed, conversation_data);
42412
42413 int ret = Dot11DecryptDecryptKeyData(&dot11decrypt_ctx,
42414 &eapol_parsed,
42415 bssid, sta,
42416 dec_data, &dec_caplen,
42417 &used_key);
42418 if (ret == DOT11DECRYPT_RET_SUCCESS0 && dec_caplen > 0) {
42419 proto_keydata_t *eapol = wmem_new(wmem_file_scope(), proto_keydata_t)((proto_keydata_t*)wmem_alloc((wmem_file_scope()), sizeof(proto_keydata_t
)))
;
42420 eapol->used_key = used_key;
42421 eapol->keydata_len = dec_caplen;
42422 eapol->keydata = (uint8_t *)wmem_memdup(wmem_file_scope(), dec_data, dec_caplen);
42423
42424 /* Save decrypted eapol keydata for rsna dissector */
42425 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_EAPOL_KEY, eapol);
42426 }
42427}
42428
42429static void
42430try_scan_eapol_keys(packet_info *pinfo, DOT11DECRYPT_HS_MSG_TYPE msg_type)
42431{
42432 DOT11DECRYPT_EAPOL_PARSED eapol_parsed;
42433
42434 if (!enable_decryption) {
42435 return;
42436 }
42437
42438 proto_eapol_key_frame_t *eapol_key =
42439 (proto_eapol_key_frame_t *)p_get_proto_data(pinfo->pool, pinfo, proto_eapol,
42440 EAPOL_KEY_FRAME_KEY0);
42441 uint8_t *bssid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, BSSID_KEY);
42442 uint8_t *sta = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, STA_KEY);
42443
42444 if (!eapol_key || !bssid || !sta) {
42445 return;
42446 }
42447
42448 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
42449 ieee80211_conversation_data_t *conversation_data = NULL((void*)0);
42450 if (conversation) {
42451 conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
42452 /* Use MLD MAC in EAPOL */
42453 if (conversation_data && conversation_data->mld_set) {
42454 bssid = conversation_data->ap_mld;
42455 sta = conversation_data->sta_mld;
42456 }
42457 }
42458
42459 memset(&eapol_parsed, 0, sizeof(eapol_parsed));
42460 get_eapol_parsed(pinfo, &eapol_parsed, conversation_data);
42461 eapol_parsed.msg_type = msg_type;
42462
42463 Dot11DecryptScanEapolForKeys(&dot11decrypt_ctx,
42464 &eapol_parsed,
42465 eapol_key->data, eapol_key->len,
42466 bssid, sta);
42467}
42468
42469static void
42470try_scan_ft_assoc_keys(packet_info *pinfo, const wlan_hdr_t *whdr)
42471{
42472 DOT11DECRYPT_ASSOC_PARSED assoc_parsed;
42473 uint8_t decrypted_buf[DOT11DECRYPT_WPA_PTK_MAX_LEN88];
42474 size_t decrypted_len = 0;
42475 DOT11DECRYPT_KEY_ITEM used_key;
42476 int ret;
42477
42478 if (!enable_decryption || pinfo->fd->visited || !whdr) {
42479 return;
42480 }
42481 if (whdr->type != MGT_ASSOC_REQ0x00 && whdr->type != MGT_ASSOC_RESP0x01 &&
42482 whdr->type != MGT_REASSOC_REQ0x02 && whdr->type != MGT_REASSOC_RESP0x03) {
42483 return;
42484 }
42485
42486 memset(&assoc_parsed, 0, sizeof(assoc_parsed));
42487 get_assoc_parsed(pinfo, &assoc_parsed);
42488 /* Implicit conversion from MGT_ASSOC_xxx to DOT11DECRYPT_SUBTYPE_xxx */
42489 assoc_parsed.frame_subtype = (uint8_t)whdr->type;
42490 memcpy(assoc_parsed.bssid, whdr->bssid.data, 6);
42491 memcpy(assoc_parsed.sa, whdr->src.data, 6);
42492 memcpy(assoc_parsed.da, whdr->dst.data, 6);
42493
42494 ret = Dot11DecryptScanFtAssocForKeys(&dot11decrypt_ctx, &assoc_parsed,
42495 decrypted_buf, &decrypted_len,
42496 &used_key);
42497 if (ret == DOT11DECRYPT_RET_SUCCESS_HANDSHAKE-1 && decrypted_len > 0) {
42498 proto_keydata_t *proto = wmem_new(wmem_file_scope(), proto_keydata_t)((proto_keydata_t*)wmem_alloc((wmem_file_scope()), sizeof(proto_keydata_t
)))
;
42499 proto->used_key = used_key;
42500 proto->keydata_len = (unsigned)decrypted_len;
42501 proto->keydata = (uint8_t *)wmem_memdup(wmem_file_scope(), decrypted_buf, decrypted_len);
42502
42503 /* Save decrypted GTK keydata for tag dissector */
42504 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_GTK_KEY, proto);
42505 }
42506}
42507
42508/*
42509 * In some cases we do not know the key mic len from other sources, however
42510 * we can figure it out from the first frame in the four-way handshake.
42511 *
42512 * It defaults to 16 bytes, but if there are more than 16 bytes of zeros before
42513 * the eapol data len, then we can adjust upwards. We used steps of 8 bytes
42514 * because the MIC len is usually a multiple of 8 in length.
42515 *
42516 * If we find it, set it in the conversation data for the wlan conversation
42517 * found via the pinfo.
42518 */
42519static void
42520discover_key_mic_len1(tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
42521{
42522 conversation_t *conversation = find_or_create_wlan_conversation(pinfo);
42523 ieee80211_conversation_data_t *conversation_data = get_or_create_conversation_data(conversation);
42524 uint16_t mic_len = 16;
42525
42526 /*
42527 * The first sixteen bytes at offset should 0. If not, get out of here
42528 */
42529 if (tvb_get_letoh64(tvb, offset) != 0 ||
42530 tvb_get_letoh64(tvb, offset + 8) != 0) {
42531 return;
42532 }
42533
42534 offset += 16;
42535 /*
42536 * Do we have another 8 bytes of zeros? But do not fall off the end!
42537 */
42538 while ((tvb_captured_length(tvb) > (offset + 8)) &&
42539 tvb_get_letoh64(tvb, offset) == 0) {
42540 /*
42541 * equal to the rest of the data.
42542 */
42543 mic_len += 8;
42544 offset += 8;
42545
42546 }
42547
42548 /*
42549 * Do the next two bytes give us the length of the remainder?
42550 */
42551 if (tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000) + 2 ==
42552 tvb_reported_length_remaining(tvb, offset)) {
42553 conversation_data->discovered_key_mic_len = mic_len;
42554 }
42555}
42556
42557/*
42558 * Sometimes we cannot discover it from the first frame of the four-way
42559 * handshake, however, we can still determine it from the second frame.
42560 */
42561static void
42562discover_key_mic_len2(tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
42563{
42564 conversation_t *conversation = find_or_create_wlan_conversation(pinfo);
42565 ieee80211_conversation_data_t *conversation_data = get_or_create_conversation_data(conversation);
42566 uint16_t mic_len = 16;
42567
42568 /*
42569 * The KeyMIC should have a 2-byte length field following it, and that
42570 * should cover the rest of the captured data ...
42571 */
42572 offset += 16;
42573
42574 while ((tvb_captured_length(tvb) > (offset + 2)) &&
42575 tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000) !=
42576 tvb_reported_length_remaining(tvb, offset + 2)) {
42577
42578 /*
42579 * Add 8 more bytes.
42580 */
42581 mic_len +=8;
42582 offset+= 8;
42583 }
42584
42585 /*
42586 * Check that we are correct ... ie, the two bytes where we are is the length
42587 * of the remaining data, because we might have walked off the end of the
42588 * tvb.
42589 *
42590 * We check against the reported length remaining because the capture might
42591 * have been truncated beyond the key data length field.
42592 */
42593 if (tvb_captured_length_remaining(tvb, offset) >= 2 &&
42594 tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000) + 2 ==
42595 tvb_reported_length_remaining(tvb, offset)) {
42596 conversation_data->discovered_key_mic_len = mic_len;
42597 }
42598}
42599
42600static int
42601dissect_wlan_rsna_eapol_wpa_or_rsn_key(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
42602{
42603 unsigned offset = 0;
42604 uint16_t keyinfo;
42605 uint16_t eapol_data_len;
42606 proto_tree *keydes_tree;
42607 proto_tree *ti = NULL((void*)0);
42608 static int * const wlan_rsna_eapol_wpa_keydes_keyinfo[] = {
42609 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version,
42610 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type,
42611 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index,
42612 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install,
42613 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack,
42614 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic,
42615 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure,
42616 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error,
42617 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request,
42618 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data,
42619 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message,
42620 NULL((void*)0)
42621 };
42622
42623 keyinfo = tvb_get_ntohs(tvb, offset);
42624 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
42625 /* Use link address to get correct conversation in MLD case */
42626 if (conversation == NULL((void*)0)) {
42627 uint8_t *bssid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, BSSID_KEY);
42628 uint8_t *sta = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, STA_KEY);
42629 /* bssid and sta might not be present if this is Bluetooth AMP (removed
42630 * in Bluetooth v5.3), because all data packets have ToDS and FromDS set.
42631 * XXX - Decryption might not work properly with AMP as a result. */
42632 if (bssid && sta) {
42633 if (keyinfo & KEY_INFO_KEY_ACK_MASK0x0080) { /* From AP */
42634 set_address(&pinfo->src, wlan_address_type, 6, bssid);
42635 set_address(&pinfo->dst, wlan_address_type, 6, sta);
42636
42637 } else {
42638 set_address(&pinfo->src, wlan_address_type, 6, sta);
42639 set_address(&pinfo->dst, wlan_address_type, 6, bssid);
42640 }
42641 }
42642 }
42643
42644 uint16_t eapol_data_offset = 76; /* 92 - 16 */
42645 bool_Bool has_nonce = determine_nonce_is_set(tvb);
42646 bool_Bool defaulted_mic_len = false0;
42647 uint16_t eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len);
42648 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42649 eapol_data_offset += eapol_key_mic_len;
42650 DOT11DECRYPT_HS_MSG_TYPE msg_type = DOT11DECRYPT_HS_MSG_TYPE_INVALID;
42651
42652 /*
42653 * RSNA key descriptors.
42654 */
42655 eapol_data_len = tvb_get_ntohs(tvb, offset+eapol_data_offset);
42656 if (keyinfo & KEY_INFO_REQUEST_MASK0x0800) {
42657 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request)");
42658 if (keyinfo & KEY_INFO_ERROR_MASK0x0400)
42659 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request, Error)");
42660 } else if (keyinfo & KEY_INFO_KEY_TYPE_MASK0x0008) {
42661 uint16_t masked;
42662 /* Windows is setting the Secure Bit on message 2 when rekeying, so we'll ignore it */
42663 /* When an AEAD cipher is used no MIC is included, so we cannot rely on the MIC flag */
42664 masked = keyinfo &
42665 (KEY_INFO_INSTALL_MASK0x0040 | KEY_INFO_KEY_ACK_MASK0x0080);
42666
42667 switch (masked) {
42668 case KEY_INFO_KEY_ACK_MASK0x0080:
42669 {
42670 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 1);
42671
42672 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 1 of 4)");
42673 /*
42674 * If we defaulted it, then try to determine the mic len and update
42675 * structures.
42676 */
42677 if (defaulted_mic_len) {
42678 discover_key_mic_len1(tvb, pinfo, 76);
42679 /* Must reset the MIC len */
42680 eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len);
42681 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42682 eapol_data_offset = 76 + eapol_key_mic_len;
42683 eapol_data_len = tvb_get_ntohs(tvb, offset + eapol_data_offset);
42684 }
42685 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_1;
42686 break;
42687 }
42688
42689 case (KEY_INFO_INSTALL_MASK0x0040 | KEY_INFO_KEY_ACK_MASK0x0080):
42690 {
42691 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 3);
42692
42693 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 3 of 4)");
42694 /* Get correct MIC LEN if there is no M1 and M2 */
42695 if (defaulted_mic_len) {
42696 discover_key_mic_len2(tvb, pinfo, 76);
42697 eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len);
42698 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42699 eapol_data_offset = 76 + eapol_key_mic_len;
42700 eapol_data_len = tvb_get_ntohs(tvb, offset + eapol_data_offset);
42701 }
42702 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_3;
42703 break;
42704 }
42705
42706 default:
42707 /* We check the key length to differentiate between message 2 and 4 and just hope that
42708 there are no strange implementations with key data and non-zero key length in message 4.
42709 According to the IEEE specification, sections 11.6.6.3 and 11.6.6.5 we should
42710 use the Secure Bit and/or the Nonce, but there are implementations ignoring the spec.
42711 The Secure Bit is incorrectly set on rekeys for Windows clients for Message 2 and the Nonce is non-zero
42712 in Message 4 in Bug 11994 (Apple?) */
42713 /* In Wi-SUN protocol, message 2 does not contains any data. However, all the implementations
42714 * respect 802.11X, so Secure Bit is set only on message 2 and Nonce is set only on message 4
42715 * (see section 6.5.2.3 of Wi-SUN specification) */
42716 /* When using AES-SIV without plaintext (i.e. only for integrity), the ciphertext has length 16 */
42717 /* With MLO message 4 will have 12 bytes of data */
42718 if (((eapol_key_mic_len == 0) && (eapol_data_len > 16)) ||
42719 ((eapol_key_mic_len > 0) && (eapol_data_len == 0) && !(keyinfo & KEY_INFO_SECURE_MASK0x0200) && has_nonce) ||
42720 ((eapol_key_mic_len > 0) && (eapol_data_len != 0) && (eapol_data_len != 12))) {
42721 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 2);
42722
42723 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 2 of 4)");
42724 if (defaulted_mic_len) {
42725 discover_key_mic_len2(tvb, pinfo, 76);
42726 eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len);
42727 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42728 eapol_data_offset = 76 + eapol_key_mic_len;
42729 eapol_data_len = tvb_get_ntohs(tvb, offset + eapol_data_offset);
42730 }
42731 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_2;
42732 } else {
42733 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 4);
42734
42735 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 4 of 4)");
42736 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_4;
42737 }
42738 break;
42739 }
42740 } else {
42741 if (keyinfo & KEY_INFO_KEY_ACK_MASK0x0080) {
42742 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 1);
42743
42744 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 1 of 2)");
42745 msg_type = DOT11DECRYPT_HS_MSG_TYPE_GHS_1;
42746 } else {
42747 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 2);
42748
42749 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 2 of 2)");
42750 msg_type = DOT11DECRYPT_HS_MSG_TYPE_GHS_2;
42751 }
42752 }
42753 proto_item_set_generated(ti);
42754
42755 uint16_t keydes_version = tvb_get_ntohs(tvb, offset) & KEY_INFO_KEYDES_VERSION_MASK0x0007;
42756 save_proto_data_value(pinfo, keydes_version, KEY_VERSION_KEY);
42757 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_wlan_rsna_eapol_wpa_keydes_keyinfo,
42758 ett_keyinfo, wlan_rsna_eapol_wpa_keydes_keyinfo,
42759 ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
42760 offset += 2;
42761
42762 uint16_t key_len = tvb_get_ntohs(tvb, offset);
42763 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_len, tvb, offset,
42764 2, ENC_BIG_ENDIAN0x00000000);
42765 save_proto_data_value(pinfo, tvb_get_ntohs(tvb, offset), KEY_LEN_KEY);
42766 offset += 2;
42767 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_replay_counter, tvb,
42768 offset, 8, ENC_BIG_ENDIAN0x00000000);
42769 offset += 8;
42770 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_nonce, tvb, offset,
42771 32, ENC_NA0x00000000);
42772 save_proto_data(tvb, pinfo, offset, 32, NONCE_KEY);
42773
42774 offset += 32;
42775 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_iv, tvb,
42776 offset, 16, ENC_NA0x00000000);
42777 save_proto_data(tvb, pinfo, offset, 16, KEY_IV_KEY);
42778 offset += 16;
42779 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_rsc, tvb, offset,
42780 8, ENC_NA0x00000000);
42781 offset += 8;
42782 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_id, tvb, offset, 8,
42783 ENC_NA0x00000000);
42784 offset += 8;
42785
42786 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_mic, tvb, offset,
42787 eapol_key_mic_len, ENC_NA0x00000000);
42788 save_proto_data(tvb, pinfo, offset, eapol_key_mic_len, MIC_KEY);
42789 offset += eapol_key_mic_len;
42790
42791 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data_len, tvb,
42792 offset, 2, ENC_BIG_ENDIAN0x00000000);
42793 save_proto_data_value(pinfo, tvb_get_ntohs(tvb, offset), KEY_DATA_LEN_KEY);
42794 offset += 2;
42795
42796 if (eapol_data_len != 0) {
42797 save_proto_data(tvb, pinfo, offset, eapol_data_len, KEY_DATA_KEY);
42798 ti = proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data,
42799 tvb, offset, eapol_data_len, ENC_NA0x00000000);
42800 if ((keyinfo & KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000) ||
42801 (!(keyinfo & KEY_INFO_KEY_TYPE_MASK0x0008) && key_len)) {
42802 /* RSN: EAPOL-Key Key Data is encrypted.
42803 * WPA: Group Keys use encrypted Key Data.
42804 * IEEE 802.11i-2004 8.5.2.
42805 * Having an encrypted data field without the Encrypted Key Data set
42806 * is not standard, but there are WPA implementation which assume
42807 * encryption when Key Type = 0. In Wi-SUN, the EAPOL-Key frame has
42808 * Key Type = 0 and Encrypted Key Data = 0, but the Key Data is not
42809 * encrypted. To differentiate this case from non standard WPA, we
42810 * check the Key Length, which is 0 for Wi-SUN.
42811 * Let decryption engine try to decrypt this and if successful it's
42812 * stored in EAPOL_KEY proto data.
42813 */
42814 if (!pinfo->fd->visited) {
42815 try_decrypt_keydata(pinfo);
42816 }
42817
42818 proto_keydata_t *eapol;
42819 eapol = (proto_keydata_t*)
42820 p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_EAPOL_KEY);
42821
42822 if (eapol) {
42823 int keydata_len = eapol->keydata_len;
42824 tvbuff_t *next_tvb = tvb_new_child_real_data(tvb, eapol->keydata,
42825 keydata_len, keydata_len);
42826 keydes_tree = proto_item_add_subtree(ti, ett_wlan_rsna_eapol_keydes_data);
42827
42828 if (keydes_version == KEYDES_VER_TYPE10x01) {
42829 add_new_data_source(pinfo, next_tvb, "Decrypted RC4 keydata");
42830 save_proto_data(next_tvb, pinfo, 0, keydata_len, GTK_KEY);
42831 save_proto_data_value(pinfo, keydata_len, GTK_LEN_KEY);
42832 } else {
42833 add_new_data_source(pinfo, next_tvb, "Decrypted AES keydata");
42834 int padding_len = keydata_padding_len(next_tvb);
42835 ieee_80211_add_tagged_parameters(next_tvb, 0, pinfo, keydes_tree,
42836 keydata_len - padding_len,
42837 -1, NULL((void*)0));
42838 if (padding_len) {
42839 proto_tree_add_item(keydes_tree, hf_wlan_rsna_eapol_wpa_keydes_padding,
42840 next_tvb, keydata_len - padding_len,
42841 padding_len, ENC_NA0x00000000);
42842 }
42843 }
42844 /* Also add the PTK used to decrypt and validate the keydata. */
42845 add_ptk_analysis(tvb, keydes_tree, &eapol->used_key);
42846 }
42847 } else {
42848 keydes_tree = proto_item_add_subtree(ti, ett_wlan_rsna_eapol_keydes_data);
42849 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, keydes_tree,
42850 tvb_reported_length_remaining(tvb, offset),
42851 -1, NULL((void*)0));
42852 }
42853
42854 offset += eapol_data_len;
42855 }
42856 if (!pinfo->fd->visited && msg_type != DOT11DECRYPT_HS_MSG_TYPE_INVALID) {
42857 /* Key data at this pointer was either not encrypted or dot11decrypt
42858 * engine has tried to decrypt keydata. Try to extract the keys now that
42859 * all fields from the EAPOL frame have been parsed.
42860 */
42861 try_scan_eapol_keys(pinfo, msg_type);
42862 }
42863
42864 /*
42865 * Do we have extraneous data at the end?
42866 */
42867 if (offset < (tvb_captured_length(tvb) - 1)) {
42868 proto_item *extra;
42869 extra = proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_extraneous, tvb,
42870 offset,
42871 tvb_captured_length_remaining(tvb, offset),
42872 ENC_NA0x00000000);
42873 expert_add_info_format(pinfo, extra, &ei_ieee80211_inv_val,
42874 "Extraneous and invalid data in EAPOL frame");
42875 }
42876 return tvb_captured_length(tvb);
42877}
42878
42879static void try_scan_tdls_keys(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
42880{
42881 if (!enable_decryption) {
42882 return;
42883 }
42884 int len = tvb_captured_length(tvb) - offset;
42885 const uint8_t *action = tvb_get_ptr(tvb, offset, len);
42886 if (action) {
42887 Dot11DecryptScanTdlsForKeys(&dot11decrypt_ctx, action, len);
42888 }
42889}
42890
42891/* It returns the algorithm used for decryption and trailer length. */
42892static tvbuff_t *
42893try_decrypt(tvbuff_t *tvb, packet_info *pinfo, unsigned offset, unsigned len,
42894 uint8_t *algorithm, uint32_t *sec_trailer,
42895 PDOT11DECRYPT_KEY_ITEM used_key)
42896{
42897 const uint8_t *enc_data;
42898 tvbuff_t *decr_tvb = NULL((void*)0);
42899 uint32_t dec_caplen;
42900 unsigned char dec_data[DOT11DECRYPT_MAX_CAPLEN(12 * 1024)];
42901
42902 if (!enable_decryption)
42903 return NULL((void*)0);
42904
42905 /* get the entire packet */
42906 enc_data = tvb_get_ptr(tvb, 0, len+offset);
42907
42908 /* decrypt packet with Dot11Decrypt */
42909 int ret = Dot11DecryptDecryptPacket(&dot11decrypt_ctx, enc_data, offset, offset+len,
42910 dec_data, &dec_caplen, used_key);
42911 if (ret == DOT11DECRYPT_RET_SUCCESS0) {
42912 uint8_t *tmp;
42913 *algorithm=used_key->KeyType;
42914 switch (*algorithm) {
42915 case DOT11DECRYPT_KEY_TYPE_WEP0:
42916 *sec_trailer=DOT11DECRYPT_WEP_TRAILER4;
42917 break;
42918 case DOT11DECRYPT_KEY_TYPE_CCMP101:
42919 *sec_trailer=DOT11DECRYPT_CCMP_TRAILER8;
42920 break;
42921 case DOT11DECRYPT_KEY_TYPE_CCMP_256102:
42922 *sec_trailer = DOT11DECRYPT_CCMP_256_TRAILER16;
42923 break;
42924 case DOT11DECRYPT_KEY_TYPE_GCMP103:
42925 case DOT11DECRYPT_KEY_TYPE_GCMP_256104:
42926 *sec_trailer = DOT11DECRYPT_GCMP_TRAILER16;
42927 break;
42928 case DOT11DECRYPT_KEY_TYPE_TKIP100:
42929 *sec_trailer=DOT11DECRYPT_TKIP_TRAILER8 + 4;
42930 break;
42931 default:
42932 return NULL((void*)0);
42933 }
42934 if (dec_caplen > offset) {
42935 /* allocate buffer for decrypted payload */
42936 tmp = (uint8_t *)wmem_memdup(pinfo->pool, dec_data+offset, dec_caplen-offset);
42937 len = dec_caplen-offset;
42938
42939 /* decrypt successful, let's set up a new data tvb. */
42940 decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
42941 }
42942 }
42943 return decr_tvb;
42944}
42945
42946/* Collect our WEP and WPA keys */
42947static void
42948set_dot11decrypt_keys(void)
42949{
42950 unsigned i;
42951 DOT11DECRYPT_KEYS_COLLECTION *keys = g_new(DOT11DECRYPT_KEYS_COLLECTION, 1)((DOT11DECRYPT_KEYS_COLLECTION *) g_malloc_n ((1), sizeof (DOT11DECRYPT_KEYS_COLLECTION
)))
;
42952
42953 keys->nKeys = 0;
42954
42955 for (i = 0; (uat_wep_key_records != NULL((void*)0)) && (i < num_wepkeys_uat) && (i < MAX_ENCRYPTION_KEYS64); i++)
42956 {
42957 decryption_key_t *dk;
42958 dk = parse_key_string(uat_wep_key_records[i].string, uat_wep_key_records[i].key, NULL((void*)0));
42959
42960 if (dk != NULL((void*)0))
42961 {
42962 /* parse_key_string() does validation, so if it doesn't
42963 * return NULL, we can just copy the results.
42964 */
42965 DOT11DECRYPT_KEY_ITEM key = { 0 };
42966 if (dk->type == DOT11DECRYPT_KEY_TYPE_WEP0)
42967 {
42968 key.KeyType = DOT11DECRYPT_KEY_TYPE_WEP0;
42969
42970 /*
42971 * WEP key is correct (well, at least no longer than
42972 * DOT11DECRYPT_WEP_KEY_MAXLEN)
42973 */
42974 memcpy(key.KeyData.Wep.WepKey, dk->key->data, dk->key->len);
42975 key.KeyData.Wep.WepKeyLen = dk->key->len;
42976 keys->Keys[keys->nKeys] = key;
42977 keys->nKeys += 1;
42978 }
42979 else if (dk->type == DOT11DECRYPT_KEY_TYPE_WPA_PWD3)
42980 {
42981 key.KeyType = DOT11DECRYPT_KEY_TYPE_WPA_PWD3;
42982
42983 /*
42984 * dk->key has a valid length, because otherwise
42985 * parse_key_string() would have returned NULL.
42986 */
42987 memcpy(key.UserPwd.Passphrase, dk->key->data, dk->key->len);
42988 key.UserPwd.PassphraseLen = dk->key->len;
42989
42990 key.UserPwd.SsidLen = 0;
42991 if ((dk->ssid != NULL((void*)0)) && (dk->ssid->len <= DOT11DECRYPT_WPA_SSID_MAX_LEN32))
42992 {
42993 memcpy(key.UserPwd.Ssid, dk->ssid->data, dk->ssid->len);
42994 key.UserPwd.SsidLen = dk->ssid->len;
42995 }
42996
42997 keys->Keys[keys->nKeys] = key;
42998 keys->nKeys += 1;
42999 }
43000 else if (dk->type == DOT11DECRYPT_KEY_TYPE_WPA_PSK4)
43001 {
43002 key.KeyType = DOT11DECRYPT_KEY_TYPE_WPA_PSK4;
43003
43004 memcpy(key.KeyData.Wpa.Psk, dk->key->data, dk->key->len);
43005 key.KeyData.Wpa.PskLen = dk->key->len;
43006 keys->Keys[keys->nKeys] = key;
43007 keys->nKeys += 1;
43008 }
43009 else if (dk->type == DOT11DECRYPT_KEY_TYPE_TK6)
43010 {
43011 key.KeyType = DOT11DECRYPT_KEY_TYPE_TK6;
43012
43013 memcpy(key.Tk.Tk, dk->key->data, dk->key->len);
43014 key.Tk.Len = dk->key->len;
43015 keys->Keys[keys->nKeys] = key;
43016 keys->nKeys += 1;
43017 }
43018 else if (dk->type == DOT11DECRYPT_KEY_TYPE_MSK7)
43019 {
43020 key.KeyType = DOT11DECRYPT_KEY_TYPE_MSK7;
43021
43022 memcpy(key.Msk.Msk, dk->key->data, dk->key->len);
43023 key.Msk.Len = dk->key->len;
43024 keys->Keys[keys->nKeys] = key;
43025 keys->nKeys += 1;
43026 }
43027 free_key_string(dk);
43028 }
43029 }
43030
43031 /* Now set the keys */
43032 Dot11DecryptSetKeys(&dot11decrypt_ctx, keys->Keys, keys->nKeys);
43033 g_free(keys);
43034}
43035
43036static void
43037init_wepkeys(void)
43038{
43039
43040 /*
43041 * XXX - Dot11Decrypt - That God sends it to us beautiful (che dio ce la mandi bona)
43042 * The next lines will add a key to the Dot11Decrypt context. The keystring will be added
43043 * to the old WEP array too, but we don't care, because the packets will come here
43044 * already decrypted... One of these days we will fix this too
43045 */
43046 set_dot11decrypt_keys();
43047}
43048
43049/*
43050 * This code had been taken from AirSnort crack.c function classify()
43051 * Permission granted by snax <at> shmoo dot com
43052 * weak_iv - determine which key byte an iv is useful in resolving
43053 * parm - p, pointer to the first byte of an IV
43054 * return - n - this IV is weak for byte n of a WEP key
43055 * -1 - this IV is not weak for any key bytes
43056 *
43057 * This function tests for IVs that are known to satisfy the criteria
43058 * for a weak IV as specified in FMS section 7.1
43059 *
43060 */
43061static int
43062weak_iv(unsigned char *iv)
43063{
43064 unsigned char sum, k;
43065
43066 if ((iv[1] == 255) && (iv[0] > 2) && (iv[0] < 16)) {
43067 return iv[0] -3;
43068 }
43069
43070 sum = iv[0] + iv[1];
43071 if (sum == 1) {
43072 if (iv[2] <= 0x0a) {
43073 return iv[2] +2;
43074 }
43075 else if (iv[2] == 0xff) {
43076 return 0;
43077 }
43078 }
43079 k = 0xfe - iv[2];
43080 if ((sum == k) && ((iv[2] >= 0xf2) && (iv[2] <= 0xfe) && (iv[2] != 0xfd))) {
43081 return k;
43082 }
43083 return -1;
43084}
43085
43086static void
43087wlan_retransmit_init(void)
43088{
43089 if (fc_analyse_retransmit_table) {
43090 g_hash_table_destroy(fc_analyse_retransmit_table);
43091 fc_analyse_retransmit_table = NULL((void*)0);
43092 }
43093
43094 if (fc_first_frame_table) {
43095 g_hash_table_destroy(fc_first_frame_table);
43096 fc_first_frame_table = NULL((void*)0);
43097 }
43098
43099 if (wlan_subdissector)
43100 return;
43101
43102 fc_analyse_retransmit_table= g_hash_table_new(retransmit_hash, retransmit_equal);
43103 fc_first_frame_table = g_hash_table_new(frame_hash, frame_equal);
43104
43105}
43106
43107static int
43108dissect_data_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
43109{
43110 int offset = 0;
43111 uint8_t type;
43112 int tagged_parameter_tree_len;
43113 proto_tree *tagged_tree;
43114
43115 type = tvb_get_uint8(tvb, offset);
43116 proto_tree_add_item(tree, hf_ieee80211_data_encap_payload_type, tvb, offset,
43117 1, ENC_LITTLE_ENDIAN0x80000000);
43118 offset += 1;
43119 switch (type) {
43120 case 1:
43121 col_set_str(pinfo->cinfo, COL_PROTOCOL, "RRB");
43122 /* TODO: IEEE 802.11r */
43123 break;
43124 case 2:
43125 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
43126 col_clear(pinfo->cinfo, COL_INFO);
43127 offset += add_ff_action(tree, tvb, pinfo, offset, NULL((void*)0));
43128 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
43129 if (tagged_parameter_tree_len > 0) {
43130 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
43131 tagged_parameter_tree_len);
43132 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
43133 tagged_parameter_tree_len, -1, NULL((void*)0));
43134 }
43135 break;
43136 }
43137 return tvb_captured_length(tvb);
43138}
43139
43140void
43141proto_register_ieee80211(void)
43142{
43143
43144 static hf_register_info hf[] = {
43145 {&hf_ieee80211_fc_field,
43146 {"Frame Control Field", "wlan.fc",
43147 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
43148 "MAC Frame control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43149
43150 {&hf_ieee80211_fc_proto_version,
43151 {"Version", "wlan.fc.version",
43152 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
43153 "MAC Protocol version", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 0 */
43154
43155 {&hf_ieee80211_fc_frame_type,
43156 {"Type", "wlan.fc.type",
43157 FT_UINT8, BASE_DEC, VALS(frame_type)((0 ? (const struct _value_string*)0 : ((frame_type)))), 0x0C,
43158 "Frame type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43159
43160 {&hf_ieee80211_fc_frame_subtype,
43161 {"Subtype", "wlan.fc.subtype",
43162 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
43163 "Frame subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 2 */
43164
43165 {&hf_ieee80211_fc_frame_type_subtype,
43166 {"Type/Subtype", "wlan.fc.type_subtype",
43167 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &frame_type_subtype_vals_ext, 0x0,
43168 "Type and subtype combined (as bytes (for Control Frame Extension subtypes) or nibbles)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43169
43170 {&hf_ieee80211_fc_frame_extension,
43171 {"Control Frame Extension", "wlan.fc.extension",
43172 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
43173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43174
43175 {&hf_ieee80211_fc_flags,
43176 {"Flags", "wlan.flags",
43177 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
43178 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43179
43180 {&hf_ieee80211_fc_flags_str,
43181 {"WLAN Flags", "wlan.flags.str",
43182 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43184
43185 {&hf_ieee80211_fc_data_ds,
43186 {"DS status", "wlan.fc.ds",
43187 FT_UINT8, BASE_HEX, VALS(tofrom_ds)((0 ? (const struct _value_string*)0 : ((tofrom_ds)))), (FLAG_FROM_DS0x02|FLAG_TO_DS0x01),
43188 "Data-frame DS-traversal status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 3 */
43189
43190 {&hf_ieee80211_fc_to_ds,
43191 {"To DS", "wlan.fc.tods",
43192 FT_BOOLEAN, 8, TFS(&tods_flag)((0 ? (const struct true_false_string*)0 : ((&tods_flag))
))
, FLAG_TO_DS0x01,
43193 "To DS flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 4 */
43194
43195 {&hf_ieee80211_fc_from_ds,
43196 {"From DS", "wlan.fc.fromds",
43197 FT_BOOLEAN, 8, TFS(&fromds_flag)((0 ? (const struct true_false_string*)0 : ((&fromds_flag
))))
, FLAG_FROM_DS0x02,
43198 "From DS flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 5 */
43199
43200 {&hf_ieee80211_fc_more_frag,
43201 {"More Fragments", "wlan.fc.frag",
43202 FT_BOOLEAN, 8, TFS(&more_fragments)((0 ? (const struct true_false_string*)0 : ((&more_fragments
))))
, FLAG_MORE_FRAGMENTS0x04,
43203 "More Fragments flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 6 */
43204
43205 {&hf_ieee80211_fc_retry,
43206 {"Retry", "wlan.fc.retry",
43207 FT_BOOLEAN, 8, TFS(&retry_flags)((0 ? (const struct true_false_string*)0 : ((&retry_flags
))))
, FLAG_RETRY0x08,
43208 "Retransmission flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43209
43210 {&hf_ieee80211_fc_analysis_retransmission,
43211 {"Retransmission", "wlan.analysis.retransmission",
43212 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
43213 "This frame is a suspected wireless retransmission", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43214
43215 {&hf_ieee80211_fc_analysis_retransmission_frame,
43216 {"Retransmission of frame", "wlan.analysis.retransmission_frame",
43217 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43218 "This is a retransmission of frame #", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43219
43220 {&hf_ieee80211_fc_pwr_mgt,
43221 {"PWR MGT", "wlan.fc.pwrmgt",
43222 FT_BOOLEAN, 8, TFS(&pm_flags)((0 ? (const struct true_false_string*)0 : ((&pm_flags)))
)
, FLAG_POWER_MGT0x10,
43223 "Power management status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43224
43225 {&hf_ieee80211_fc_more_data,
43226 {"More Data", "wlan.fc.moredata",
43227 FT_BOOLEAN, 8, TFS(&md_flags)((0 ? (const struct true_false_string*)0 : ((&md_flags)))
)
, FLAG_MORE_DATA0x20,
43228 "More data flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43229
43230 {&hf_ieee80211_fc_protected,
43231 {"Protected flag", "wlan.fc.protected",
43232 FT_BOOLEAN, 8, TFS(&protected_flags)((0 ? (const struct true_false_string*)0 : ((&protected_flags
))))
, FLAG_PROTECTED0x40,
43233 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43234
43235 {&hf_ieee80211_fc_order,
43236 {"+HTC/Order flag", "wlan.fc.order",
43237 FT_BOOLEAN, 8, TFS(&order_flags)((0 ? (const struct true_false_string*)0 : ((&order_flags
))))
, FLAG_ORDER0x80,
43238 "HT Control present/strictly ordered flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43239
43240 {&hf_ieee80211_fc_s1g_bw_indication,
43241 {"Bandwidth Indication", "wlan.fc.control.bandwidth_indication",
43242 FT_UINT8, BASE_DEC, VALS(pv1_bandwidth_indic_vals)((0 ? (const struct _value_string*)0 : ((pv1_bandwidth_indic_vals
))))
,
43243 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43244
43245 {&hf_ieee80211_fc_s1g_dynamic_indication,
43246 {"Dynamic Indication", "wlan.fc.control.dynamic_indication",
43247 FT_BOOLEAN, 8, TFS(&s1g_dynamic_indication_flags)((0 ? (const struct true_false_string*)0 : ((&s1g_dynamic_indication_flags
))))
, FLAG_RETRY0x08,
43248 "Static/dynamic bandwidth negotiation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43249
43250 {&hf_ieee80211_fc_pv1_proto_version,
43251 {"Version", "wlan.fc.version",
43252 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43253
43254 {&hf_ieee80211_fc_pv1_type,
43255 {"Type", "wlan.fc.type",
43256 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) }},
43257
43258 {&hf_ieee80211_fc_pv1_ptid,
43259 {"PTID", "wlan.fc.ptid",
43260 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43261
43262 {&hf_ieee80211_fc_pv1_mgmt_subtype,
43263 {"Subtype", "wlan.fc.subtype",
43264 FT_UINT16, BASE_HEX, VALS(pv1_management_frame_type_vals)((0 ? (const struct _value_string*)0 : ((pv1_management_frame_type_vals
))))
,
43265 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43266
43267 {&hf_ieee80211_fc_pv1_cntl_subtype,
43268 {"Subtype", "wlan.fc.subtype",
43269 FT_UINT16, BASE_HEX, VALS(pv1_control_frame_type_vals)((0 ? (const struct _value_string*)0 : ((pv1_control_frame_type_vals
))))
,
43270 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43271
43272 {&hf_ieee80211_fc_pv1_unk_field,
43273 {"Unknown Subtype", "wlan.fc.unknown_subtype",
43274 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43275
43276 {&hf_ieee80211_fc_pv1_bw_indication,
43277 {"Bandwidth Indication", "wlan.fc.control.bandwidth_indication",
43278 FT_UINT16, BASE_DEC, VALS(pv1_bandwidth_indic_vals)((0 ? (const struct _value_string*)0 : ((pv1_bandwidth_indic_vals
))))
,
43279 0x0700, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43280
43281 {&hf_ieee80211_fc_pv1_dynamic_indication,
43282 {"Dynamic Indication", "wlan.fc.control.dynamic_indication",
43283 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43284
43285 {&hf_ieee80211_fc_pv1_cntl_power_mgmt,
43286 {"Power Management", "wlan.fc.control.power_management",
43287 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43288
43289 {&hf_ieee80211_fc_pv1_cntl_more_data,
43290 {"More Data", "wlan.fc.control.more_data",
43291 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43292
43293 {&hf_ieee80211_fc_pv1_cntl_flow_control,
43294 {"Flow Control", "wlan.fc.control.flow_control",
43295 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43296
43297 {&hf_ieee80211_fc_pv1_cntl_next_twt_info,
43298 {"Next TWT Info Present", "wlan.fc.control.next_twt_info_present",
43299 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43300
43301 {&hf_ieee80211_fc_pv1_mgmt_pr_next_tbt,
43302 {"Next TBTT Present", "wlan.fc.mgmt.next_tbtt_present",
43303 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43304 {&hf_ieee80211_fc_pv1_mgmt_pr_full_ssid,
43305 {"Full SSID Present", "wlan.fc.mgmt.full_ssid_present",
43306 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43307
43308 {&hf_ieee80211_fc_pv1_mgmt_pr_ano,
43309 {"AMO Present", "wlan.fc.mgmt.amo_present",
43310 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43311
43312 {&hf_ieee80211_fc_pv1_mgmt_pr_bss_bw,
43313 {"BSS BW", "wlan.fc.mgmt.bss_bw",
43314 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43315
43316 {&hf_ieee80211_fc_pv1_mgmt_pr_security,
43317 {"Security", "wlan.fc.mgmt.security",
43318 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43319
43320 {&hf_ieee80211_fc_pv1_mgmt_pr_1mhz_pc,
43321 {"1MHz Primary Channel Location",
43322 "wlan.fc.mgmt.1mhz_primary_channel_location",
43323 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43324
43325 {&hf_ieee80211_fc_pv1_mgmt_pr_slot_assign,
43326 {"Slot Assignment Mode", "wlan.fc.mgmt.slot_assignment_mode",
43327 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43328
43329 {&hf_ieee80211_fc_pv1_mgmt_pr_more_frag,
43330 {"More Fragments", "wlan.fc.mgmt.more_fragments",
43331 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43332
43333 {&hf_ieee80211_fc_pv1_mgmt_pr_pwr_mgmt,
43334 {"Power Management", "wlan.fc.mgmt.power_management",
43335 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43336
43337 {&hf_ieee80211_fc_pv1_mgmt_pr_grp_indic,
43338 {"Group Indication", "wlan.fc.mgmt.group_indication",
43339 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43340
43341 {&hf_ieee80211_fc_pv1_mgmt_pr_protected,
43342 {"Protected Frame", "wlan.fc.mgmt.protected_frame",
43343 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43344
43345 {&hf_ieee80211_fc_pv1_mgmt_pr_end_of_svc,
43346 {"End of Service Period", "wlan.fc.mgmt.end_of_service_period",
43347 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43348
43349 {&hf_ieee80211_fc_pv1_mgmt_pr_relayed_frm,
43350 {"Relayed Frame", "wlan.fc.mgmt.relayed_frame",
43351 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43352
43353 {&hf_ieee80211_fc_pv1_mgmt_pr_ack_policy,
43354 {"Ack Policy", "wlan.fc.mgmt.ack_policy",
43355 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43356
43357 {&hf_ieee80211_fc_pv1_from_ds,
43358 {"From DS", "wlan.fc.from_ds",
43359 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43360
43361 {&hf_ieee80211_fc_pv1_more_fragments,
43362 {"More Fragments", "wlan.fc.more_fragments",
43363 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43364
43365 {&hf_ieee80211_fc_pv1_power_mgmt,
43366 {"Power Management", "wlan.fc.power_management",
43367 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43368
43369 {&hf_ieee80211_fc_pv1_more_data,
43370 {"More Data", "wlan.fc.more_data",
43371 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43372
43373 {&hf_ieee80211_fc_pv1_protected_frame,
43374 {"Protected Frame", "wlan.fc.protected_frame",
43375 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43376
43377 {&hf_ieee80211_fc_pv1_end_service_per,
43378 {"End of Service Period", "wlan.fc.end_of_service_period",
43379 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43380
43381 {&hf_ieee80211_fc_pv1_relayed_frame,
43382 {"Relayed Frame", "wlan.fc.relayed_frame",
43383 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43384
43385 {&hf_ieee80211_fc_pv1_ack_policy,
43386 {"Ack Policy", "wlan.fc.ack_policy",
43387 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43388
43389 {&hf_ieee80211_pv1_sid,
43390 {"SID", "wlan.fc.sid",
43391 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43392
43393 {&hf_ieee80211_pv1_sid_association_id,
43394 {"Association ID", "wlan.fc.sid.association_id",
43395 FT_UINT16, BASE_HEX, NULL((void*)0), SID_AID_MASK0x1FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43396
43397 {&hf_ieee80211_pv1_sid_a3_present,
43398 {"A3 Present", "wlan.fc.sid.a3_present",
43399 FT_BOOLEAN, 16, NULL((void*)0), SID_A3_PRESENT0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43400
43401 {&hf_ieee80211_pv1_sid_a4_present,
43402 {"A4 Present", "wlan.fc.sid.a4_present",
43403 FT_BOOLEAN, 16, NULL((void*)0), SID_A4_PRESENT0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43404
43405 {&hf_ieee80211_pv1_sid_a_msdu,
43406 {"A MSDU", "wlan.fc.sid.a_msdu",
43407 FT_BOOLEAN, 16, NULL((void*)0), SID_A_MSDU0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43408
43409 {&hf_ieee80211_pv1_cnt_stack_tetra_timest,
43410 {"Tetrapartial Timestamp", "wlan.pv1.control.stack.tetrapartial_timestamp",
43411 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43412
43413 {&hf_ieee80211_pv1_cnt_bat_beacon_seq,
43414 {"Beacon Sequence", "wlan.pv1.control.bat.beacon_sequence",
43415 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43416
43417 {&hf_ieee80211_pv1_cnt_bat_penta_timest,
43418 {"Pentapartial Timestamp", "wlan.pv1.control.bat.pentapartial_timestamp",
43419 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43420
43421 {&hf_ieee80211_pv1_cnt_bat_next_twt_info,
43422 {"Next TWT Info", "wlan.pv1.control.bat.next_twt_info",
43423 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43424
43425 {&hf_ieee80211_pv1_cnt_bat_stating_seq_cntl,
43426 {"Starting Sequence Control", "wlan.pv1.control.bat.starting_sequence_control",
43427 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43428
43429 {&hf_ieee80211_pv1_cnt_bat_bitmap,
43430 {"BAT Bitmap", "wlan.pv1.control.bat.bat_bitmap",
43431 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43432
43433 {&hf_ieee80211_pv1_mgmt_reserved,
43434 {"PV1 Reserved Management frame", "wlan.pv1.management.reserved",
43435 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43436
43437 {&hf_ieee80211_pv1_cntl_reserved,
43438 {"PV1 Reserved Control frame", "wlan.pv1.control.reserved",
43439 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43440
43441 {&hf_ieee80211_fc_s1g_next_tbtt_present,
43442 {"Next TBTT Present", "wlan.fc.s1g.next_tbtt_present",
43443 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) }},
43444
43445 {&hf_ieee80211_fc_s1g_compressed_ssid_present,
43446 {"Compressed SSID Present", "wlan.fc.s1g.compressed_ssid_present",
43447 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) }},
43448
43449 {&hf_ieee80211_fc_s1g_ano_present,
43450 {"ANO Present", "wlan.fc.s1g.ano_present",
43451 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) }},
43452
43453 {&hf_ieee80211_fc_s1g_bss_bw,
43454 {"BSS BW", "wlan.fc.s1g.bss_bw",
43455 FT_UINT8, BASE_DEC, NULL((void*)0), 0x38, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43456
43457 {&hf_ieee80211_fc_s1g_security,
43458 {"Security", "wlan.fc.s1g.security",
43459 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) }},
43460
43461 {&hf_ieee80211_fc_s1g_ap_pm,
43462 {"AP PM", "wlan.fc.s1g.ap_pm",
43463 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) }},
43464
43465 {&hf_ieee80211_assoc_id,
43466 {"Association ID", "wlan.aid",
43467 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3FFF,
43468 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43469
43470 {&hf_ieee80211_did_duration,
43471 {"Duration", "wlan.duration",
43472 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7FFF,
43473 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43474
43475 {&hf_ieee80211_addr_da,
43476 {"Destination address", "wlan.da",
43477 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43478 "Destination Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43479
43480 {&hf_ieee80211_addr_da_resolved,
43481 {"Destination address (resolved)", "wlan.da_resolved", FT_STRING,
43482 BASE_NONE, NULL((void*)0), 0x0,
43483 "Destination Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43484
43485 {&hf_ieee80211_addr_da_oui,
43486 {"Destination OUI", "wlan.da.oui",
43487 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43488 "Destination Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43489
43490 {&hf_ieee80211_addr_da_oui_resolved,
43491 {"Destination OUI (resolved)", "wlan.da.oui_resolved",
43492 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43493 "Destination Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43494
43495 { &hf_ieee80211_addr_da_lg,
43496 { "LG bit", "wlan.da.lg",
43497 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43498 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43499
43500 { &hf_ieee80211_addr_da_ig,
43501 { "IG bit", "wlan.da.ig",
43502 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43503 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43504
43505 {&hf_ieee80211_addr_sa,
43506 {"Source address", "wlan.sa",
43507 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43508 "Source Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43509
43510 {&hf_ieee80211_addr_sa_resolved,
43511 {"Source address (resolved)", "wlan.sa_resolved", FT_STRING,
43512 BASE_NONE, NULL((void*)0), 0x0,
43513 "Source Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43514
43515 {&hf_ieee80211_addr_sa_oui,
43516 {"Source OUI", "wlan.sa.oui",
43517 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43518 "Source Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43519
43520 {&hf_ieee80211_addr_sa_oui_resolved,
43521 {"Source OUI (resolved)", "wlan.sa.oui_resolved",
43522 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43523 "Source Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43524
43525 { &hf_ieee80211_addr_sa_lg,
43526 { "LG bit", "wlan.sa.lg",
43527 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43528 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43529
43530 { &hf_ieee80211_addr_sa_ig,
43531 { "IG bit", "wlan.sa.ig",
43532 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43533 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43534
43535 {&hf_ieee80211_addr,
43536 {"Hardware address", "wlan.addr",
43537 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43538 "SA, DA, BSSID, RA or TA Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43539
43540 {&hf_ieee80211_addr_resolved,
43541 { "Hardware address (resolved)", "wlan.addr_resolved", FT_STRING,
43542 BASE_NONE, NULL((void*)0), 0x0,
43543 "SA, DA, BSSID, RA or TA Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43544
43545 {&hf_ieee80211_addr_oui,
43546 {"Hardware OUI", "wlan.oui",
43547 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43548 "Hardware Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43549
43550 {&hf_ieee80211_addr_oui_resolved,
43551 {"Hardware OUI (resolved)", "wlan.oui_resolved",
43552 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43553 "Hardware Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43554
43555 { &hf_ieee80211_addr_lg,
43556 { "LG bit", "wlan.addr.lg",
43557 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43558 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43559
43560 { &hf_ieee80211_addr_ig,
43561 { "IG bit", "wlan.addr.ig",
43562 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43563 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43564
43565 {&hf_ieee80211_addr_ra,
43566 {"Receiver address", "wlan.ra",
43567 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43568 "Receiving Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43569
43570 {&hf_ieee80211_addr_ra_resolved,
43571 {"Receiver address (resolved)", "wlan.ra_resolved", FT_STRING, BASE_NONE,
43572 NULL((void*)0), 0x0, "Receiving Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43573
43574 {&hf_ieee80211_addr_ra_oui,
43575 {"Receiver OUI", "wlan.ra.oui",
43576 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43577 "Receiver Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43578
43579 {&hf_ieee80211_addr_ra_oui_resolved,
43580 {"Receiver OUI (resolved)", "wlan.ra.oui_resolved",
43581 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43582 "Receiver Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43583
43584 { &hf_ieee80211_addr_ra_lg,
43585 { "LG bit", "wlan.ra.lg",
43586 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43587 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43588
43589 { &hf_ieee80211_addr_ra_ig,
43590 { "IG bit", "wlan.ra.ig",
43591 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43592 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43593
43594 {&hf_ieee80211_addr_ta,
43595 {"Transmitter address", "wlan.ta",
43596 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43597 "Transmitting Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43598
43599 {&hf_ieee80211_addr_ta_resolved,
43600 {"Transmitter address (resolved)", "wlan.ta_resolved", FT_STRING,
43601 BASE_NONE, NULL((void*)0), 0x0,
43602 "Transmitting Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43603
43604 {&hf_ieee80211_addr_ta_oui,
43605 {"Transmitter OUI", "wlan.ta.oui",
43606 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43607 "Transmitter Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43608
43609 {&hf_ieee80211_addr_ta_oui_resolved,
43610 {"Transmitter OUI (resolved)", "wlan.ta.oui_resolved",
43611 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43612 "Transmitter Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43613
43614 { &hf_ieee80211_addr_ta_lg,
43615 { "LG bit", "wlan.ta.lg",
43616 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43617 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43618
43619 { &hf_ieee80211_addr_ta_ig,
43620 { "IG bit", "wlan.ta.ig",
43621 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43622 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43623
43624 {&hf_ieee80211_addr_bssid,
43625 {"BSS Id", "wlan.bssid",
43626 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43627 "Basic Service Set ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43628
43629 {&hf_ieee80211_addr_bssid_resolved,
43630 {"BSS Id (resolved)", "wlan.bssid_resolved", FT_STRING, BASE_NONE, NULL((void*)0),
43631 0x0, "Basic Service Set ID (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43632
43633 {&hf_ieee80211_addr_bssid_oui,
43634 {"BSS Id OUI", "wlan.bssid.oui",
43635 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43636 "BSS Id Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43637
43638 {&hf_ieee80211_addr_bssid_oui_resolved,
43639 {"BSS Id OUI (resolved)", "wlan.bssid.oui_resolved",
43640 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43641 "BSS Id Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43642
43643 { &hf_ieee80211_addr_bssid_lg,
43644 { "LG bit", "wlan.bssid.lg",
43645 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43646 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43647
43648 { &hf_ieee80211_addr_bssid_ig,
43649 { "IG bit", "wlan.bssid.ig",
43650 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43651 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43652
43653 {&hf_ieee80211_addr_staa,
43654 {"STA address", "wlan.staa",
43655 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43656 "Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43657
43658 {&hf_ieee80211_addr_staa_resolved,
43659 {"STA address (resolved)", "wlan.staa_resolved", FT_STRING, BASE_NONE, NULL((void*)0),
43660 0x0, "Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43661
43662 {&hf_ieee80211_addr_staa_oui,
43663 {"STA OUI", "wlan.staa.oui",
43664 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43665 "STA Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43666
43667 {&hf_ieee80211_addr_staa_oui_resolved,
43668 {"STA OUI (resolved)", "wlan.staa.oui_resolved",
43669 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43670 "STA Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43671
43672 { &hf_ieee80211_addr_staa_lg,
43673 { "LG bit", "wlan.staa.lg",
43674 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43675 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43676
43677 { &hf_ieee80211_addr_staa_ig,
43678 { "IG bit", "wlan.staa.ig",
43679 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43680 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43681
43682 {&hf_ieee80211_frag_number,
43683 {"Fragment number", "wlan.frag",
43684 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F,
43685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43686
43687 {&hf_ieee80211_seq_number,
43688 {"Sequence number", "wlan.seq",
43689 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFF0,
43690 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43691
43692 {&hf_ieee80211_mesh_control_field,
43693 {"Mesh Control Field", "wlan.mesh.control_field",
43694 FT_NONE, BASE_NONE, NULL((void*)0), 0,
43695 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43696
43697 {&hf_ieee80211_qos,
43698 {"Qos Control", "wlan.qos",
43699 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
43700 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43701
43702 {&hf_ieee80211_qos_tid,
43703 {"TID", "wlan.qos.tid",
43704 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F,
43705 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43706
43707 {&hf_ieee80211_qos_priority,
43708 {"Priority", "wlan.qos.priority",
43709 FT_UINT16, BASE_DEC, VALS(ieee80211_qos_tags_acs)((0 ? (const struct _value_string*)0 : ((ieee80211_qos_tags_acs
))))
, 0x0007,
43710 "802.1D Tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43711
43712 {&hf_ieee80211_qos_eosp,
43713 {"EOSP", "wlan.qos.eosp",
43714 FT_BOOLEAN, 16, TFS(&eosp_flag)((0 ? (const struct true_false_string*)0 : ((&eosp_flag))
))
, QOS_FLAG_EOSP0x0010,
43715 "EOSP Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43716
43717 {&hf_ieee80211_qos_bit4,
43718 {"QoS bit 4", "wlan.qos.bit4",
43719 FT_BOOLEAN, 16, TFS(&bit4_flag)((0 ? (const struct true_false_string*)0 : ((&bit4_flag))
))
, QOS_FLAG_EOSP0x0010,
43720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43721
43722 {&hf_ieee80211_qos_ack_policy,
43723 {"Ack Policy", "wlan.qos.ack",
43724 FT_UINT16, BASE_HEX, VALS(ack_policy)((0 ? (const struct _value_string*)0 : ((ack_policy)))), 0x0060,
43725 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43726
43727 {&hf_ieee80211_qos_amsdu_present,
43728 {"Payload Type", "wlan.qos.amsdupresent",
43729 FT_BOOLEAN, 16, TFS(&ieee80211_qos_amsdu_present_flag)((0 ? (const struct true_false_string*)0 : ((&ieee80211_qos_amsdu_present_flag
))))
, 0x0080,
43730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43731
43732 {&hf_ieee80211_qos_txop_limit,
43733 {"TXOP Limit", "wlan.qos.txop_limit",
43734 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
43735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43736
43737 {&hf_ieee80211_qos_ps_buf_state,
43738 {"QAP PS Buffer State", "wlan.qos.ps_buf_state",
43739 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00,
43740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43741
43742 {&hf_ieee80211_qos_buf_state_indicated,
43743 {"Buffer State Indicated", "wlan.qos.buf_state_indicated",
43744 FT_BOOLEAN, 16, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x0200,
43745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43746
43747 {&hf_ieee80211_qos_highest_pri_buf_ac,
43748 {"Highest-Priority Buffered AC", "wlan.qos.highest_pri_buf_ac",
43749 FT_UINT16, BASE_DEC, VALS(wme_acs)((0 ? (const struct _value_string*)0 : ((wme_acs)))), 0x0C00,
43750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43751
43752 {&hf_ieee80211_qos_qap_buf_load,
43753 {"QAP Buffered Load", "wlan.qos.qap_buf_load",
43754 FT_UINT16, BASE_DEC, NULL((void*)0), 0xF000,
43755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43756
43757 {&hf_ieee80211_qos_txop_dur_req,
43758 {"TXOP Duration Requested", "wlan.qos.txop_dur_req",
43759 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
43760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43761
43762 {&hf_ieee80211_qos_queue_size,
43763 {"Queue Size", "wlan.qos.queue_size",
43764 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
43765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43766
43767 {&hf_ieee80211_qos_mesh_ctl_present,
43768 {"Mesh Control Present", "wlan.qos.mesh_ctl_present",
43769 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0100,
43770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43771
43772 {&hf_ieee80211_qos_mesh_ps_rsvd,
43773 {"Mesh Power Save Level (reserved)", "wlan.qos.mesh_ps.reserved",
43774 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0200,
43775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43776
43777 {&hf_ieee80211_qos_mesh_ps_unicast,
43778 {"Mesh Power Save Level (for the receiving peer)", "wlan.qos.mesh_ps.unicast",
43779 FT_BOOLEAN, 16, TFS(&ieee80211_qos_mesh_ps)((0 ? (const struct true_false_string*)0 : ((&ieee80211_qos_mesh_ps
))))
, 0x0200,
43780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43781
43782 {&hf_ieee80211_qos_mesh_ps_multicast,
43783 {"Mesh Power Save Level (for all receiving peers)", "wlan.qos.mesh_ps.multicast",
43784 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,
43785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43786
43787 {&hf_ieee80211_qos_mesh_rspi,
43788 {"Receiver Service Period Initiated (RSPI)", "wlan.qos.mesh_rspi",
43789 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0400,
43790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43791
43792 {&hf_ieee80211_fcs,
43793 {"Frame check sequence", "wlan.fcs",
43794 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43795 "Frame Check Sequence (FCS)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43796
43797 {&hf_ieee80211_fcs_status,
43798 {"FCS Status", "wlan.fcs.status",
43799 FT_UINT8, BASE_NONE, VALS(proto_checksum_vals)((0 ? (const struct _value_string*)0 : ((proto_checksum_vals)
)))
, 0x0,
43800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43801
43802 {&hf_ieee80211_fragment_overlap,
43803 {"Fragment overlap", "wlan.fragment.overlap",
43804 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43805 "Fragment overlaps with other fragments", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43806
43807 {&hf_ieee80211_fragment_overlap_conflict,
43808 {"Conflicting data in fragment overlap", "wlan.fragment.overlap.conflict",
43809 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43810 "Overlapping fragments contained conflicting data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43811
43812 {&hf_ieee80211_fragment_multiple_tails,
43813 {"Multiple tail fragments found", "wlan.fragment.multipletails",
43814 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43815 "Several tails were found when defragmenting the packet", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43816
43817 {&hf_ieee80211_fragment_too_long_fragment,
43818 {"Fragment too long", "wlan.fragment.toolongfragment",
43819 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43820 "Fragment contained data past end of packet", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43821
43822 {&hf_ieee80211_fragment_error,
43823 {"Defragmentation error", "wlan.fragment.error",
43824 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43825 "Defragmentation error due to illegal fragments", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43826
43827 {&hf_ieee80211_fragment_count,
43828 {"Fragment count", "wlan.fragment.count",
43829 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
43830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43831
43832 {&hf_ieee80211_fragment,
43833 {"802.11 Fragment", "wlan.fragment",
43834 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43835 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43836
43837 {&hf_ieee80211_fragments,
43838 {"802.11 Fragments", "wlan.fragments",
43839 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
43840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43841
43842 {&hf_ieee80211_reassembled_in,
43843 {"Reassembled 802.11 in frame", "wlan.reassembled_in",
43844 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43845 "This 802.11 packet is reassembled in this frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43846
43847 {&hf_ieee80211_reassembled_length,
43848 {"Reassembled 802.11 length", "wlan.reassembled.length",
43849 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
43850 "The total length of the reassembled payload", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43851
43852 {&hf_ieee80211_wep_iv,
43853 {"Initialization Vector", "wlan.wep.iv",
43854 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
43855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43856
43857 {&hf_ieee80211_wep_iv_weak,
43858 {"Weak IV", "wlan.wep.weakiv",
43859 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
43861
43862 {&hf_ieee80211_tkip_extiv,
43863 {"TKIP Ext. Initialization Vector", "wlan.tkip.extiv",
43864 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43865 "TKIP Extended Initialization Vector", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43866
43867 {&hf_ieee80211_ccmp_extiv,
43868 {"CCMP Ext. Initialization Vector", "wlan.ccmp.extiv",
43869 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43870 "CCMP Extended Initialization Vector", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43871
43872 {&hf_ieee80211_wep_key,
43873 {"Key Index", "wlan.wep.key",
43874 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
43875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43876
43877 {&hf_ieee80211_wep_icv,
43878 {"WEP ICV", "wlan.wep.icv",
43879 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43881
43882 {&hf_ieee80211_fc_analysis_pmk,
43883 {"PMK", "wlan.analysis.pmk",
43884 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43886
43887 {&hf_ieee80211_fc_analysis_kck,
43888 {"KCK", "wlan.analysis.kck",
43889 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43891
43892 {&hf_ieee80211_fc_analysis_kek,
43893 {"KEK", "wlan.analysis.kek",
43894 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43896
43897 {&hf_ieee80211_fc_analysis_tk,
43898 {"TK", "wlan.analysis.tk",
43899 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43901
43902 {&hf_ieee80211_fc_analysis_gtk,
43903 {"GTK", "wlan.analysis.gtk",
43904 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43906
43907 {&hf_ieee80211_mgt,
43908 {"IEEE 802.11 Wireless Management", "wlan.mgt",
43909 FT_PROTOCOL, BASE_NONE, NULL((void*)0), 0x0,
43910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43911
43912 {&hf_ieee80211_block_ack_control,
43913 {"Block Ack Control", "wlan.ba.control",
43914 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
43915 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43916
43917 {&hf_ieee80211_block_ack_control_ack_policy,
43918 {"BA Ack Policy", "wlan.ba.control.ackpolicy",
43919 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,
43920 "Block Ack Request (BAR) Ack Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43921
43922 {&hf_ieee80211_block_ack_control_type,
43923 {"BA Type", "wlan.ba.control.ba_type",
43924 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) }},
43925
43926 {&hf_ieee80211_block_ack_control_reserved,
43927 {"Reserved", "wlan.ba.control.reserved",
43928 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0fe0,
43929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43930
43931 {&hf_ieee80211_block_ack_control_tid_info,
43932 {"TID for which a Basic BlockAck frame is requested", "wlan.ba.basic.tidinfo",
43933 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
43934 "Traffic Identifier (TID) for which a Basic BlockAck frame is requested", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43935
43936 {&hf_ieee80211_block_ack_multi_sta_aid11,
43937 {"AID11", "wlan.ba.multi_sta.aid11",
43938 FT_UINT16, BASE_HEX, NULL((void*)0), 0x07ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43939
43940 {&hf_ieee80211_block_ack_multi_sta_ack_type,
43941 {"Ack Type", "wlan.ba.multi_sta.ack_type",
43942 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43943
43944 {&hf_ieee80211_block_ack_multi_sta_tid,
43945 {"TID", "wlan.ba.multi_sta.tid",
43946 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43947
43948 {&hf_ieee80211_block_ack_multi_sta_aid_tid,
43949 {"AID TID Info", "wlan.ba.multi_sta.aid_tid_info",
43950 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43951
43952 {&hf_ieee80211_block_ack_multi_sta_reserved,
43953 {"Reserved", "wlan.ba.multi_sta.reserved",
43954 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43955
43956 {&hf_ieee80211_block_ack_multi_sta_ra,
43957 {"RA", "wlan.ba.multi_sta.ra",
43958 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43959
43960 {&hf_ieee80211_block_ack_multi_tid_reserved,
43961 {"Reserved", "wlan.bar.mtid.tidinfo.reserved",
43962 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0fff,
43963 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43964
43965 {&hf_ieee80211_block_ack_multi_tid_value,
43966 {"Multi-TID Value", "wlan.bar.mtid.tidinfo.value",
43967 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
43968 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43969
43970 {&hf_ieee80211_block_ack_bitmap,
43971 {"Block Ack Bitmap", "wlan.ba.bm",
43972 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
43973 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43974
43975 /* Used for Extended compressed BlockAck */
43976 {&hf_ieee80211_block_ack_RBUFCAP,
43977 {"Block Ack RBUFCAP", "wlan.ba.RBUFCAP",
43978 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0,
43979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43980
43981 {&hf_ieee80211_block_ack_bitmap_missing_frame,
43982 {"Not acknowledged frame", "wlan.ba.bm.missing_frame",
43983 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
43984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43985
43986 {&hf_ieee80211_block_ack_bitmap_last_ack_frame,
43987 {"Last acknowledged frame", "wlan.ba.bm.last_ack_frame",
43988 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
43989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43990
43991 {&hf_ieee80211_block_ack_gcr_addr,
43992 {"GCR Group Address", "wlan.ba.gcr_group_addr",
43993 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43994
43995 {&hf_ieee80211_beamform_feedback_seg_retrans_bitmap,
43996 {"Feedback segment Retransmission Bitmap", "wlan.beamform.feedback_seg_retrans_bitmap",
43997 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
43998 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43999
44000 {&hf_ieee80211_ndp_annc_token,
44001 {"Sounding Dialog Token", "wlan.ndp.token",
44002 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
44003 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44004
44005 {&hf_ieee80211_ndp_annc_variant,
44006 {"NDP Announcement Variant", "wlan.ndp.token.variant",
44007 FT_UINT8, BASE_HEX, VALS(ndp_annc_variant_vals)((0 ? (const struct _value_string*)0 : ((ndp_annc_variant_vals
))))
, 0x03,
44008 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44009
44010 {&hf_ieee80211_ndp_annc_token_number,
44011 {"Sounding Dialog Token", "wlan.ndp.token.number",
44012 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
44013 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44014
44015 {&hf_ieee80211_vht_ndp_annc_sta_info_aid12,
44016 {"AID12", "wlan.vht_ndp.sta_info.aid12",
44017 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0FFF,
44018 "12 least significant bits of the AID of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44019
44020 {&hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
44021 {"Feedback Type", "wlan.vht_ndp.sta_info.feedback_type",
44022 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,
44023 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44024
44025 {&hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
44026 {"Nc Index", "wlan.vht_ndp.sta_info.nc_index",
44027 FT_UINT16, BASE_DEC, VALS(num_plus_one_3bit_flag)((0 ? (const struct _value_string*)0 : ((num_plus_one_3bit_flag
))))
, 0xE000,
44028 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44029
44030 {&hf_ieee80211_vht_ndp_annc_sta_info_reserved,
44031 {"Reserved", "wlan.vht_ndp.sta_info.reserved",
44032 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE000,
44033 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44034
44035 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008,
44036 {"STA Info, AID11 < 2008", "wlan.vht_ndp.sta_info.ranging_2008",
44037 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44038 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44039
44040 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_aid11,
44041 {"AID11", "wlan.vht_ndp.sta_info.ranging_2008.aid11",
44042 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 0)(((1U << ((10) - (0) + 1)) - 1) << (0)),
44043 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44044
44045 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_ltf_offset,
44046 {"LTF Offset", "wlan.vht_ndp.sta_info.ranging_2008.ltf_offset",
44047 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(16, 11)(((1U << ((16) - (11) + 1)) - 1) << (11)),
44048 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44049
44050 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_n_sts,
44051 {"R2I N STS", "wlan.vht_ndp.sta_info.ranging_2008.r2i_n_sts",
44052 FT_UINT32, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK(19, 17)(((1U << ((19) - (17) + 1)) - 1) << (17)),
44053 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44054
44055 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_rep,
44056 {"R2I Rep", "wlan.vht_ndp.sta_info.ranging_2008.r2i_rep",
44057 FT_UINT32, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(22, 20)(((1U << ((22) - (20) + 1)) - 1) << (20)),
44058 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44059
44060 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_n_sts,
44061 {"I2R N STS", "wlan.vht_ndp.sta_info.ranging_2008.i2r_n_sts",
44062 FT_UINT32, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK(25, 23)(((1U << ((25) - (23) + 1)) - 1) << (23)),
44063 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44064
44065 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved1,
44066 {"Reserved", "wlan.vht_ndp.sta_info.ranging_2008.reserved1",
44067 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(26, 26)(((1U << ((26) - (26) + 1)) - 1) << (26)),
44068 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44069
44070 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_disambiguation,
44071 {"Disambiguation", "wlan.vht_ndp.sta_info.ranging_2008.disambiguation",
44072 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
44073 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44074
44075 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_rep,
44076 {"I2R Rep", "wlan.vht_ndp.sta_info.ranging_2008.i2r_rep",
44077 FT_UINT32, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(30, 28)(((1U << ((30) - (28) + 1)) - 1) << (28)),
44078 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44079
44080 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved2,
44081 {"Reserved", "wlan.vht_ndp.sta_info.ranging_2008.reserved2",
44082 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(31, 31)(((1U << ((31) - (31) + 1)) - 1) << (31)),
44083 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44084
44085 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043,
44086 {"STA Info, AID11 == 2043", "wlan.sta_info_ranging_2043",
44087 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44088 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44089
44090 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_aid11,
44091 {"AID11", "wlan.sta_info_ranging_2043.aid11",
44092 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 1)(((1U << ((10) - (1) + 1)) - 1) << (1)),
44093 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44094
44095 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_sac,
44096 {"SAC", "wlan.sta_info_ranging_2043.sac",
44097 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(26, 11)(((1U << ((26) - (11) + 1)) - 1) << (11)),
44098 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44099
44100 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_disambiguation,
44101 {"Disambiguation", "wlan.sta_info_ranging_2043.disambiguation",
44102 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
44103 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44104
44105 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_reserved,
44106 {"Reserved", "wlan.sta_info_ranging_2043.reserved",
44107 FT_UINT32, BASE_HEX, NULL((void*)0), GENMASK(31, 28)(((1U << ((31) - (28) + 1)) - 1) << (28)),
44108 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44109
44110 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044,
44111 {"STA Info, AID11 == 2044", "wlan.sta_info_ranging_2044",
44112 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44113 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44114
44115 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_aid11,
44116 {"AID11", "wlan.sta_info_ranging_2044.aid11",
44117 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 1)(((1U << ((10) - (1) + 1)) - 1) << (1)),
44118 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44119
44120 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_partial_tsf,
44121 {"Partial TSF", "wlan.sta_info_ranging_2044.partial_tsf",
44122 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)),
44123 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44124
44125 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_disambiguation,
44126 {"Disambiguation", "wlan.sta_info_ranging_2044.disambiguation",
44127 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
44128 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44129
44130 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_reserved,
44131 {"Reserved", "wlan.sta_info_ranging_2044.reserved",
44132 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(28, 28)(((1U << ((28) - (28) + 1)) - 1) << (28)),
44133 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44134
44135 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_token,
44136 {"Token", "wlan.sta_info_ranging_2044.token",
44137 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(31, 29)(((1U << ((31) - (29) + 1)) - 1) << (29)),
44138 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44139
44140 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045,
44141 {"STA Info Ranging, AID11 == 2045", "wlan.sta_info_ranging_2045",
44142 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44143 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44144
44145 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_aid11,
44146 {"AID11", "wlan.sta_info_ranging_2045.aid11",
44147 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 1)(((1U << ((10) - (1) + 1)) - 1) << (1)),
44148 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44149
44150 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_i2r_ndp_tx_power,
44151 {"I2R NDP Tx Power", "wlan.sta_info_ranging_2045.i2r_ndp_tx_power",
44152 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(18, 11)(((1U << ((18) - (11) + 1)) - 1) << (11)),
44153 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44154
44155 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_r2i_ndp_target_rssi,
44156 {"R2I NDP Target RSSI", "wlan.sta_info_ranging_2045.r2i_ndp_target_rssi",
44157 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(26, 19)(((1U << ((26) - (19) + 1)) - 1) << (19)),
44158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44159
44160 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_disambiguation,
44161 {"Disambiguation", "wlan.sta_info_ranging_2045.disambiguation",
44162 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
44163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44164
44165 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_reserved,
44166 {"Reserved", "wlan.sta_info_ranging_2045.reserved",
44167 FT_UINT32, BASE_HEX, NULL((void*)0), GENMASK(31, 28)(((1U << ((31) - (28) + 1)) - 1) << (28)),
44168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44169
44170 {&hf_ieee80211_ndp_eht_annc_sta_info,
44171 {"STA Info", "wlan.ndp_eht.sta_info",
44172 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44173
44174 {&hf_ieee80211_ndp_eht_annc_aid11,
44175 {"AID11", "wlan.ndp_eht.sta_info.aid11",
44176 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000007ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44177
44178 {&hf_ieee80211_ndp_eht_annc_resolution,
44179 {"Resolution", "wlan.ndp_eht.sta_info.resolution",
44180 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44181
44182 {&hf_ieee80211_ndp_eht_annc_feedback_map,
44183 {"Feedback Bitmap", "wlan.ndp_eht.sta_info.feedback_bitmap",
44184 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000ff000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44185
44186 {&hf_ieee80211_ndp_eht_annc_reserved1,
44187 {"Reserved", "wlan.ndp_eht.sta_info.reserved1",
44188 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44189
44190 {&hf_ieee80211_ndp_eht_annc_nc_index,
44191 {"Nc Index", "wlan.ndp_eht.sta_info.nc_index",
44192 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44193
44194 {&hf_ieee80211_ndp_eht_annc_feedback_type,
44195 {"Feedback Type And Ng", "wlan.ndp_eht.sta_info.feedback_type_and_ng",
44196 FT_UINT32, BASE_HEX, NULL((void*)0), 0x06000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44197
44198 {&hf_ieee80211_ndp_eht_annc_disambiguation,
44199 {"Disambiguation", "wlan.ndp_eht.sta_info.disambiguation",
44200 FT_UINT32, BASE_HEX, NULL((void*)0), 0x08000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44201
44202 {&hf_ieee80211_ndp_eht_annc_codebook_size,
44203 {"Codebook Size", "wlan.ndp_eht.sta_info.codebook_size",
44204 FT_UINT32, BASE_HEX, NULL((void*)0), 0x10000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44205
44206 {&hf_ieee80211_ndp_eht_annc_reserved2,
44207 {"Reserved", "wlan.ndp_eht.sta_info.reserved2",
44208 FT_UINT32, BASE_HEX, NULL((void*)0), 0xe0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44209
44210 {&hf_ieee80211_data_encap_payload_type,
44211 {"Payload Type", "wlan.data_encap.payload_type",
44212 FT_UINT8, BASE_DEC, VALS(ieee80211_data_encap_payload_types)((0 ? (const struct _value_string*)0 : ((ieee80211_data_encap_payload_types
))))
, 0,
44213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44214
44215 {&hf_ieee80211_ff_tdls_action_code,
44216 {"Action code", "wlan.fixed.action_code",
44217 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tdls_action_codes_ext, 0,
44218 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44219
44220 {&hf_ieee80211_ff_target_channel,
44221 {"Target Channel", "wlan.fixed.target_channel",
44222 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44223 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44224
44225 {&hf_ieee80211_ff_operating_class,
44226 {"Operating Class", "wlan.fixed.operating_class",
44227 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44228 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44229
44230 {&hf_ieee80211_ff_channel,
44231 {"Channel", "wlan.fixed.channel",
44232 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44233 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44234
44235 {&hf_ieee80211_ff_wnm_action_code,
44236 {"Action code", "wlan.fixed.action_code",
44237 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &wnm_action_codes_ext, 0,
44238 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44239
44240 {&hf_ieee80211_ff_unprotected_wnm_action_code,
44241 {"Action code", "wlan.fixed.action_code",
44242 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &unprotected_wnm_action_codes_ext, 0,
44243 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44244
44245 {&hf_ieee80211_ff_key_data,
44246 {"Key Data", "wlan.fixed.key_data",
44247 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44248
44249 {&hf_ieee80211_ff_key_data_length,
44250 {"Key Data Length", "wlan.fixed.key_data_length",
44251 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44252
44253 {&hf_ieee80211_ff_wnm_notification_type,
44254 {"WNM-Notification type", "wlan.fixed.wnm_notification_type",
44255 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &wnm_notification_types_ext, 0,
44256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44257
44258 {&hf_ieee80211_ff_wnm_notification_response_status,
44259 {"Response Status", "wlan.fixed.wnm_notification_response_status",
44260 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(wnm_notification_response_code)((0 ? (const struct _range_string*)0 : ((wnm_notification_response_code
))))
, 0,
44261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44262
44263 {&hf_ieee80211_ff_rm_action_code,
44264 {"Action code", "wlan.fixed.action_code",
44265 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &rm_action_codes_ext, 0,
44266 "Radio Measurement Action", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44267
44268 {&hf_ieee80211_ff_rm_dialog_token,
44269 {"Dialog token", "wlan.rm.dialog_token",
44270 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44271 "Non-zero Dialog Token identifies request/report transaction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44272
44273 {&hf_ieee80211_ff_rm_repetitions,
44274 {"Repetitions", "wlan.rm.repetitions",
44275 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
44276 "Number of Repetitions, 65535 indicates repeat until cancellation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44277
44278 {&hf_ieee80211_ff_rm_tx_power,
44279 {"Transmit Power Used", "wlan.rm.tx_power",
44280 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
44281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44282
44283 {&hf_ieee80211_ff_rm_max_tx_power,
44284 {"Max Transmit Power", "wlan.rm.max_tx_power",
44285 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
44286 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44287
44288 {&hf_ieee80211_ff_tpc,
44289 {"TPC Report", "wlan.rm.tpc",
44290 FT_NONE, BASE_NONE, NULL((void*)0), 0,
44291 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44292
44293 {&hf_ieee80211_ff_tpc_element_id,
44294 {"TPC Element ID", "wlan.rm.tpc.element_id",
44295 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44296 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44297
44298 {&hf_ieee80211_ff_tpc_length,
44299 {"TPC Length", "wlan.rm.tpc.length",
44300 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44301 "Length of TPC Report element (always 2)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44302
44303 {&hf_ieee80211_ff_tpc_tx_power,
44304 {"TPC Transmit Power", "wlan.rm.tpc.tx_power",
44305 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
44306 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44307
44308 {&hf_ieee80211_ff_tpc_link_margin,
44309 {"TPC Link Margin", "wlan.rm.tpc.link_margin",
44310 FT_INT8, BASE_DEC, NULL((void*)0), 0,
44311 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44312
44313 {&hf_ieee80211_ff_rm_rx_antenna_id,
44314 {"Receive Antenna ID", "wlan.rm.rx_antenna_id",
44315 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44316 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44317
44318 {&hf_ieee80211_ff_rm_tx_antenna_id,
44319 {"Transmit Antenna ID", "wlan.rm.tx_antenna_id",
44320 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44321 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44322
44323 {&hf_ieee80211_ff_rm_rcpi,
44324 {"Received Channel Power", "wlan.rm.rcpi",
44325 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44326 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44327
44328 {&hf_ieee80211_ff_rm_rsni,
44329 {"Received Signal to noise indication", "wlan.rm.rsni",
44330 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44331 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44332
44333 {&hf_ieee80211_ff_request_mode_pref_cand,
44334 {"Preferred Candidate List Included", "wlan.fixed.request_mode.pref_cand",
44335 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
44336 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44337
44338 {&hf_ieee80211_ff_request_mode_abridged,
44339 {"Abridged", "wlan.fixed.request_mode.abridged",
44340 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
44341 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44342
44343 {&hf_ieee80211_ff_request_mode_disassoc_imminent,
44344 {"Disassociation Imminent", "wlan.fixed.request_mode.disassoc_imminent",
44345 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
44346 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44347
44348 {&hf_ieee80211_ff_request_mode_bss_term_included,
44349 {"BSS Termination Included", "wlan.fixed.request_mode.bss_term_included",
44350 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
44351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44352
44353 {&hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
44354 {"ESS Disassociation Imminent", "wlan.fixed.request_mode.ess_disassoc_imminent",
44355 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
44356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44357
44358 {&hf_ieee80211_ff_request_mode_link_removal_imminent,
44359 {"Link Removal Imminent", "wlan.fixed.request_mode.link_removal_imminent",
44360 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
44361 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44362
44363 {&hf_ieee80211_ff_request_mode_reserved,
44364 {"Reserved", "wlan.fixed.request_mode.reserved",
44365 FT_UINT8, BASE_HEX, NULL((void*)0), 0xc0,
44366 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44367
44368 {&hf_ieee80211_ff_disassoc_timer,
44369 {"Disassociation Timer", "wlan.fixed.disassoc_timer",
44370 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
44371 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44372
44373 {&hf_ieee80211_ff_bss_termination_delay,
44374 {"BSS Termination Delay", "wlan.fixed.bss_termination_delay",
44375 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44376 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44377
44378 {&hf_ieee80211_ff_bss_transition_status_code,
44379 {"BSS Transition Status Code", "wlan.fixed.bss_transition_status_code",
44380 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44381 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44382
44383 {&hf_ieee80211_ff_validity_interval,
44384 {"Validity Interval", "wlan.fixed.validity_interval",
44385 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44386 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44387
44388 {&hf_ieee80211_ff_url_len,
44389 {"Session Information URL Length",
44390 "wlan.fixed.session_information.url_length",
44391 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44392 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44393
44394 {&hf_ieee80211_ff_url,
44395 {"Session Information URL", "wlan.fixed.session_information.url",
44396 FT_STRING, BASE_NONE, NULL((void*)0), 0,
44397 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44398
44399 {&hf_ieee80211_ff_target_bss,
44400 {"BSS Transition Target BSS", "wlan.fixed.bss_transition_target_bss",
44401 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44402 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44403
44404 {&hf_ieee80211_ff_bss_transition_query_reason,
44405 {"BSS Transition Query Reason", "wlan.fixed.bss_transition_query_reason",
44406 FT_UINT8, BASE_DEC, VALS(ieee80211_transition_reasons)((0 ? (const struct _value_string*)0 : ((ieee80211_transition_reasons
))))
, 0,
44407 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44408
44409 {&hf_ieee80211_ff_bss_transition_candidate_list_entries,
44410 {"BSS Transition Candidate List Entries", "wlan.fixed.bss_transition_candidate_list_entries",
44411 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
44412 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44413
44414/* 802.11ai */
44415
44416 {&hf_ieee80211_ff_fils_discovery_frame_control,
44417 {"Frame Control", "wlan.fils_discovery.frame_control",
44418 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
44419 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44420
44421 {&hf_ieee80211_ff_fils_discovery_frame_control_ssid_length,
44422 {"SSID Length", "wlan.fils_discovery.frame_control.ssid_length",
44423 FT_UINT16, BASE_HEX, NULL((void*)0), PA_FILS_FC_SSID_LENGTH0x001F,
44424 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44425
44426 {&hf_ieee80211_ff_fils_discovery_frame_control_capability,
44427 {"Capability", "wlan.fils_discovery.frame_control.capability",
44428 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_CAPABILITY0x0020,
44429 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44430
44431 {&hf_ieee80211_ff_fils_discovery_frame_control_short_ssid,
44432 {"Short SSID", "wlan.fils_discovery.frame_control.short_ssid",
44433 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_SHORT_SSID0x0040,
44434 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44435
44436 {&hf_ieee80211_ff_fils_discovery_frame_control_ap_csn,
44437 {"AP-CSN", "wlan.fils_discovery.frame_control.ap_csn",
44438 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_AP_CSN0x0080,
44439 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44440
44441 {&hf_ieee80211_ff_fils_discovery_frame_control_ano,
44442 {"ANO", "wlan.fils_discovery.frame_control.ano",
44443 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_ANO0x0100,
44444 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44445
44446 {&hf_ieee80211_ff_fils_discovery_frame_control_channel_center_frequency,
44447 {"Channel Center Frequency Segment 1", "wlan.fils_discovery.frame_control.channel_center_frequency",
44448 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_CCFS10x0200,
44449 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44450
44451 {&hf_ieee80211_ff_fils_discovery_frame_control_primary_channel,
44452 {"Primary Channel", "wlan.fils_discovery.frame_control.primary_channel",
44453 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_PC0x0400,
44454 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44455
44456 {&hf_ieee80211_ff_fils_discovery_frame_control_rsn_info,
44457 {"RSN Info", "wlan.fils_discovery.frame_control.rsn_info",
44458 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_RSN_INFO0x0800,
44459 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44460
44461 {&hf_ieee80211_ff_fils_discovery_frame_control_length,
44462 {"Length", "wlan.fils_discovery.frame_control.length",
44463 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_LENGTH0x1000,
44464 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44465
44466 {&hf_ieee80211_ff_fils_discovery_frame_control_md,
44467 {"MD", "wlan.fils_discovery.frame_control.md",
44468 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_MD0x2000,
44469 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44470
44471 {&hf_ieee80211_ff_fils_discovery_frame_control_reserved,
44472 {"Reserved", "wlan.fils_discovery.frame_control.reserved",
44473 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_RESERVED0xC000,
44474 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44475
44476 {&hf_ieee80211_ff_fils_discovery_ssid,
44477 {"SSID", "wlan.fils_discovery.ssid_length",
44478 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
44479 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44480
44481 {&hf_ieee80211_ff_fils_discovery_capability,
44482 {"Capability", "wlan.fils_discovery.capability",
44483 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
44484 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44485
44486 {&hf_ieee80211_ff_fils_discovery_capability_ess,
44487 {"ESS", "wlan.fils_discovery.capability.ess",
44488 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001,
44489 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44490
44491 {&hf_ieee80211_ff_fils_discovery_capability_privacy,
44492 {"Privacy", "wlan.fils_discovery.capability.privacy",
44493 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0002,
44494 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44495
44496 {&hf_ieee80211_ff_fils_discovery_capability_bss_operating_channel_width,
44497 {"BSS Operating Channel width", "wlan.fils_discovery.capability.bss_operating_channel_width",
44498 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,
44499 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44500
44501 {&hf_ieee80211_ff_fils_discovery_capability_max_number_of_spatial_streams,
44502 {"Maximum Number of Spatial Streams", "wlan.fils_discovery.maximum_number_of_spatial_streams",
44503 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,
44504 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44505
44506 {&hf_ieee80211_ff_fils_discovery_capability_reserved,
44507 {"Reserved", "wlan.fils_discovery.capability.reserved",
44508 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0100,
44509 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44510
44511 {&hf_ieee80211_ff_fils_discovery_capability_multiple_bssid,
44512 {"Multiple BSSID", "wlan.fils_discovery.capability.multiple_bssid",
44513 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0200,
44514 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44515
44516 {&hf_ieee80211_ff_fils_discovery_capability_phy_index,
44517 {"PHY Index", "wlan.fils_discovery.capability.phy_index",
44518 FT_UINT16, BASE_HEX, VALS(fils_discovery_capability_phy_index)((0 ? (const struct _value_string*)0 : ((fils_discovery_capability_phy_index
))))
, 0x1C00,
44519 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44520
44521 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_dsss,
44522 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44523 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,
44524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44525
44526 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ofdm,
44527 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44528 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,
44529 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44530
44531 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ht_vht_tvht,
44532 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44533 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,
44534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44535
44536 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_he,
44537 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44538 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,
44539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44540
44541 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate,
44542 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44543 FT_UINT16, BASE_HEX, NULL((void*)0), 0xE000,
44544 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44545
44546 {&hf_ieee80211_ff_fils_discovery_short_ssid,
44547 {"Short SSID", "wlan.fils_discovery.short_ssid",
44548 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
44549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44550
44551 {&hf_ieee80211_ff_fils_discovery_ap_csn,
44552 {"AP Configuration Sequence Number", "wlan.fils_discovery.ap_csn",
44553 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44555
44556 {&hf_ieee80211_ff_fils_discovery_ano,
44557 {"Access Network Options", "wlan.fils_discovery.ano",
44558 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
44559 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44560
44561 {&hf_ieee80211_ff_fils_discovery_ccfs1,
44562 {"Channel Center Frequency Segment 1", "wlan.fils_discovery.channel_center_frequency",
44563 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
44564 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44565
44566 {&hf_ieee80211_ff_fils_discovery_operating_class,
44567 {"Operating Class", "wlan.fils_discovery.operating_class",
44568 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44569 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44570
44571 {&hf_ieee80211_ff_fils_discovery_primary_channel,
44572 {"Primary Channel", "wlan.fils_discovery.primary_channel",
44573 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44575
44576 {&hf_ieee80211_ff_fils_discovery_rsn_info,
44577 {"RSN Info", "wlan.fils_discovery.rsn_info",
44578 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
44579 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44580
44581 {&hf_ieee80211_ff_fils_discovery_length,
44582 {"Length", "wlan.fils_discovery.length",
44583 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44584 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44585
44586 {&hf_ieee80211_ff_fils_discovery_md,
44587 {"MD", "wlan.fils_discovery.md",
44588 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
44589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44590
44591/* 802.11ad */
44592 {&hf_ieee80211_cf_response_offset,
44593 {"Response Offset", "wlan.res_offset",
44594 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
44595 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44596
44597 {&hf_ieee80211_grant_ack_reserved,
44598 {"Reserved", "wlan.grant_ack.reserved",
44599 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
44600 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44601
44602 {&hf_ieee80211_ff_dynamic_allocation,
44603 {"Dynamic Allocation", "wlan.dynamic_allocation",
44604 FT_UINT40, BASE_HEX, NULL((void*)0), 0,
44605 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44606
44607 {&hf_ieee80211_ff_TID,
44608 {"TID", "wlan.dynamic_allocation.tid",
44609 FT_UINT40, BASE_DEC, NULL((void*)0), 0x000000000F,
44610 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44611
44612 {&hf_ieee80211_ff_alloc_type,
44613 {"Allocation Type", "wlan.dynamic_allocation.alloc_type",
44614 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000070,
44615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44616
44617 {&hf_ieee80211_ff_src_aid,
44618 {"Source AID", "wlan.dynamic_allocation.src_aid",
44619 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000007F80,
44620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44621
44622 {&hf_ieee80211_ff_dest_aid,
44623 {"Destination AID", "wlan.dynamic_allocation.dest_aid",
44624 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00007f8000,
44625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44626
44627 {&hf_ieee80211_ff_alloc_duration,
44628 {"Allocation Duration", "wlan.dynamic_allocation.alloc_duration",
44629 FT_UINT40, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (size_t) (allocation_duration_base_custom)), 0x7FFF800000,
44630 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44631
44632 {&hf_ieee80211_ff_b39,
44633 {"Reserved (b39)", "wlan.dynamic_allocation.b39",
44634 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000,
44635 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44636
44637 {&hf_ieee80211_ff_ssw,
44638 {"Sector Sweep", "wlan.ssw",
44639 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
44640 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44641
44642 {&hf_ieee80211_ff_ssw_direction,
44643 {"Sector Sweep Direction", "wlan.ssw.direction",
44644 FT_BOOLEAN, 24, TFS(&ieee80211_cf_ssw_direction)((0 ? (const struct true_false_string*)0 : ((&ieee80211_cf_ssw_direction
))))
, 0x000001,
44645 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
44646
44647 {&hf_ieee80211_ff_ssw_cdown,
44648 {"Sector Sweep CDOWN", "wlan.ssw.cdown",
44649 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0003fe,
44650 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44651
44652 {&hf_ieee80211_ff_ssw_sector_id,
44653 {"Sector Sweep Sector ID", "wlan.ssw.sector_id",
44654 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00fc00,
44655 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44656
44657 {&hf_ieee80211_ff_ssw_dmg_ant_id,
44658 {"Sector Sweep DMG Antenna ID", "wlan.ssw.dmg_ant_id",
44659 FT_UINT24, BASE_DEC, NULL((void*)0), 0x030000,
44660 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44661
44662 {&hf_ieee80211_ff_ssw_rxss_len,
44663 {"Sector Sweep RXSS Length", "wlan.ssw.rxss_len",
44664 FT_UINT24, BASE_DEC, NULL((void*)0), 0xfc0000,
44665 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44666
44667 {&hf_ieee80211_ff_bf,
44668 {"Beam Forming", "wlan.bf",
44669 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
44670 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44671
44672 {&hf_ieee80211_ff_bf_train,
44673 {"Beam Forming Training", "wlan.bf.train",
44674 FT_BOOLEAN, 16, NULL((void*)0), 0x0001,
44675 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44676
44677 {&hf_ieee80211_ff_bf_is_init,
44678 {"Beam Forming Is InitiatorTXSS", "wlan.bf.isInit",
44679 FT_BOOLEAN, 16, NULL((void*)0), 0x0002,
44680 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44681
44682 {&hf_ieee80211_ff_bf_is_resp,
44683 {"Beam Forming Is ResponderTXSS", "wlan.bf.isResp",
44684 FT_BOOLEAN, 16, NULL((void*)0), 0x0004,
44685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44686
44687 {&hf_ieee80211_ff_bf_rxss_len,
44688 {"Beam Forming RXSS Length", "wlan.bf.rxss_len",
44689 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01f8,
44690 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44691
44692 {&hf_ieee80211_ff_bf_rxss_rate,
44693 {"Beam Forming RXSS Rate", "wlan.bf.rxss_rate",
44694 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
44695 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44696
44697 {&hf_ieee80211_ff_bf_b10b15,
44698 {"Reserved (B10-B15)", "wlan.bf.reserved",
44699 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFC00,
44700 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44701
44702 {&hf_ieee80211_ff_bf_num_sectors,
44703 {"Beam Forming Total Number of Sectors", "wlan.bf.num_sectors",
44704 FT_UINT16, BASE_DEC, NULL((void*)0), 0x03f8,
44705 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44706
44707 {&hf_ieee80211_ff_bf_num_rx_dmg_ants,
44708 {"Beam Forming Number of DMG Antennas", "wlan.bf.num_dmg_ants",
44709 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0c00,
44710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44711
44712 {&hf_ieee80211_ff_bf_b12b15,
44713 {"Reserved (B12-B15)", "wlan.bf.reserved",
44714 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
44715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44716
44717 {&hf_ieee80211_addr_nav_da,
44718 {"Destination address of STA that caused NAV update", "wlan.nav_da",
44719 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44720 "DMG Destination Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44721
44722 {&hf_ieee80211_addr_nav_sa,
44723 {"Source address of STA that caused NAV update", "wlan.nav_sa",
44724 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44725 "DMG Source Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44726
44727 {&hf_ieee80211_ff_sswf,
44728 {"Sector Sweep Feedback", "wlan.sswf",
44729 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
44730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44731
44732 {&hf_ieee80211_ff_sswf_total_sectors,
44733 {"Sector Sweep Feedback total number of sectors", "wlan.sswf.num_sectors",
44734 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0001ff,
44735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44736
44737 {&hf_ieee80211_ff_sswf_num_rx_dmg_ants,
44738 {"Sector Sweep Feedback Number of receive DMG Antennas", "wlan.sswf.num_dmg_ants",
44739 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000600,
44740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44741
44742 {&hf_ieee80211_ff_sswf_poll_required,
44743 {"Sector Sweep Feedback Poll required", "wlan.sswf.poll",
44744 FT_BOOLEAN, 24, NULL((void*)0), 0x010000,
44745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44746
44747 {&hf_ieee80211_ff_sswf_reserved1,
44748 {"Sector Sweep Feedback Reserved", "wlan.sswf.reserved",
44749 FT_UINT24, BASE_HEX, NULL((void*)0), 0x00F800,
44750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44751
44752 {&hf_ieee80211_ff_sswf_reserved2,
44753 {"Sector Sweep Feedback Reserved", "wlan.sswf.reserved",
44754 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFE0000,
44755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44756
44757 {&hf_ieee80211_ff_sswf_sector_select,
44758 {"Sector Sweep Feedback Sector Select", "wlan.sswf.sector_select",
44759 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00003F,
44760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44761
44762 {&hf_ieee80211_ff_sswf_dmg_antenna_select,
44763 {"Sector Sweep Feedback DMG Antenna Select", "wlan.sswf.dmg_antenna_select",
44764 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000C0,
44765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44766
44767 {&hf_ieee80211_ff_sswf_snr_report,
44768 {"Sector Sweep Feedback SNR Report", "wlan.sswf.snr_report",
44769 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00FF00,
44770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44771
44772
44773 {&hf_ieee80211_ff_brp,
44774 {"BRP Request", "wlan.brp",
44775 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44776 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44777
44778 {&hf_ieee80211_ff_brp_L_RX,
44779 {"BRP Request L-RX", "wlan.brp.l_rx",
44780 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f,
44781 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44782
44783 {&hf_ieee80211_ff_brp_TX_TRN_REQ,
44784 {"BRP Request TX-TRN-REQ", "wlan.brp.tx_trn_req",
44785 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
44786 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44787
44788 {&hf_ieee80211_ff_brp_MID_REQ,
44789 {"BRP Request MID-REQ", "wlan.brp.mid_req",
44790 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
44791 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44792
44793 {&hf_ieee80211_ff_brp_BC_REQ,
44794 {"BRP Request BC-REQ", "wlan.brp.bc_req",
44795 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
44796 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44797
44798 {&hf_ieee80211_ff_brp_MID_GRANT,
44799 {"BRP Request MID-GRANT", "wlan.brp.mid_grant",
44800 FT_BOOLEAN, 32, NULL((void*)0), 0x00000100,
44801 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44802
44803 {&hf_ieee80211_ff_brp_BC_GRANT,
44804 {"BRP Request BC-GRANT", "wlan.brp.bc_grant",
44805 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
44806 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44807
44808 {&hf_ieee80211_ff_brp_chan_FBCK_CAP,
44809 {"BRP Request Chan FBCK-CAP", "wlan.brp.chan_fbck_cap",
44810 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
44811 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44812
44813 {&hf_ieee80211_ff_brp_tx_sector,
44814 {"BRP Request TX Sector ID", "wlan.brp.tx_sector_id",
44815 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0001f800,
44816 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44817
44818 {&hf_ieee80211_ff_brp_other_aid,
44819 {"BRP Request Other AID", "wlan.brp.other_aid",
44820 FT_UINT32, BASE_DEC, NULL((void*)0), 0x01fe0000,
44821 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44822
44823 {&hf_ieee80211_ff_brp_tx_antenna,
44824 {"BRP Request TX Antenna ID", "wlan.brp.tx_antenna_id",
44825 FT_UINT32, BASE_DEC, NULL((void*)0), 0x06000000,
44826 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44827
44828 {&hf_ieee80211_ff_brp_reserved,
44829 {"BRP Request Reserved", "wlan.brp.reserved",
44830 FT_UINT32, BASE_HEX, NULL((void*)0), 0xF8000000,
44831 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44832
44833 {&hf_ieee80211_ff_blm,
44834 {"Beamformed Link Maintenance", "wlan.blm",
44835 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
44836 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44837
44838 {&hf_ieee80211_ff_blm_unit_index,
44839 {"BeamLink Maintenance Uint Index", "wlan.blm.uint_index",
44840 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
44841 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44842
44843 {&hf_ieee80211_ff_blm_maint_value,
44844 {"BeamLink Maintenance Value", "wlan.blm.value",
44845 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7e,
44846 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44847
44848 {&hf_ieee80211_ff_blm_is_master,
44849 {"BeamLink Is Master", "wlan.blm.is_master",
44850 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
44851 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44852
44853 {&hf_ieee80211_ff_bic,
44854 {"Beacon Interval Control", "wlan.bic",
44855 FT_UINT48, BASE_HEX, NULL((void*)0), 0,
44856 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44857
44858 {&hf_ieee80211_ff_bic_cc_present,
44859 {"Clustering Control Present", "wlan.bic.cc",
44860 FT_BOOLEAN, 48, NULL((void*)0), 0x000000000001,
44861 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44862
44863 {&hf_ieee80211_ff_bic_discovery_mode,
44864 {"Discovery Mode", "wlan.bic.discovery_mode",
44865 FT_BOOLEAN, 48, NULL((void*)0), 0x000000000002,
44866 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44867
44868 {&hf_ieee80211_ff_bic_next_beacon,
44869 {"Next Beacon", "wlan.bic.next_beacon",
44870 FT_UINT48, BASE_DEC, NULL((void*)0), 0x00000000003c,
44871
44872 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44873
44874 {&hf_ieee80211_ff_bic_ati_present,
44875 {"ATI Present", "wlan.bic.ati",
44876 FT_BOOLEAN, 48, NULL((void*)0), 0x000000000040,
44877 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44878
44879 {&hf_ieee80211_ff_bic_abft_len,
44880 {"A-BFT length", "wlan.bic.abft_len",
44881 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000000380,
44882 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44883
44884 {&hf_ieee80211_ff_bic_fss,
44885 {"FSS", "wlan.bic.fss",
44886 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000003c00,
44887 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44888
44889 {&hf_ieee80211_ff_bic_is_resp,
44890 {"Is TXSS Responder", "wlan.bic.is_responder",
44891 FT_BOOLEAN, 48, NULL((void*)0), 0x000000004000,
44892 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44893
44894 {&hf_ieee80211_ff_bic_next_abft,
44895 {"Next A-BFT", "wlan.bic.next_abft",
44896 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000078000,
44897 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44898
44899 {&hf_ieee80211_ff_bic_frag_txss,
44900 {"Fragmented TXSS", "wlan.bic.frag_txss",
44901 FT_BOOLEAN, 48, NULL((void*)0), 0x000000080000,
44902 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44903
44904 {&hf_ieee80211_ff_bic_txss_span,
44905 {"TXSS span", "wlan.bic.txss_span",
44906 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000007f00000,
44907 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44908
44909 {&hf_ieee80211_ff_bic_NBI_abft,
44910 {"Number of Beacon Intervals that are needed to allocate A-BFT", "wlan.bic.NBI_abft",
44911 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000078000000,
44912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44913
44914 {&hf_ieee80211_ff_bic_abft_count,
44915 {"A-BFT Count", "wlan.bic.abft_count",
44916 FT_UINT48, BASE_DEC, NULL((void*)0), 0x001f80000000,
44917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44918
44919 {&hf_ieee80211_ff_bic_nabft,
44920 {"Number of A-BFT's received from each Antenna", "wlan.bic.nabft",
44921 FT_UINT48, BASE_DEC, NULL((void*)0), 0x07e000000000,
44922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44923
44924 {&hf_ieee80211_ff_bic_pcp,
44925 {"PCP Association Ready", "wlan.bic.pcp",
44926 FT_BOOLEAN, 48, NULL((void*)0), 0x080000000000,
44927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44928
44929 {&hf_ieee80211_ff_bic_reserved,
44930 {"Reserved", "wlan.bic.reserved",
44931 FT_UINT48, BASE_HEX, NULL((void*)0), 0xF00000000000,
44932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44933
44934 {&hf_ieee80211_ff_dmg_params,
44935 {"DMG Parameters", "wlan.dmg_params",
44936 FT_UINT8, BASE_HEX , NULL((void*)0), 0,
44937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44938
44939 {&hf_ieee80211_ff_dmg_params_bss,
44940 {"BSS Type", "wlan.dmg_params.bss",
44941 FT_UINT8, BASE_DEC, VALS(bss_type)((0 ? (const struct _value_string*)0 : ((bss_type)))), 0x03,
44942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44943
44944 {&hf_ieee80211_ff_dmg_params_cbap_only,
44945 {"CBAP Only", "wlan.dmg_params.cbap_only",
44946 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
44947 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44948
44949 {&hf_ieee80211_ff_dmg_params_cbap_src,
44950 {"CBAP Source", "wlan.dmg_params.cbap_src",
44951 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
44952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44953
44954 {&hf_ieee80211_ff_dmg_params_privacy,
44955 {"DMG Privacy", "wlan.dmg_params.privacy",
44956 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
44957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44958
44959 {&hf_ieee80211_ff_dmg_params_policy,
44960 {"ECAPC Policy Enforced", "wlan.dmg_params.policy",
44961 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
44962 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44963
44964 {&hf_ieee80211_ff_dmg_params_spec_mgmt,
44965 {"Spectrum Management", "wlan.dmg_params.spec_mgmt",
44966 FT_BOOLEAN, 8, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x40,
44967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44968
44969 {&hf_ieee80211_ff_dmg_params_radio_measure,
44970 {"Radio Measurement", "wlan.dmg_params.radio_measure",
44971 FT_BOOLEAN, 8, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x80,
44972 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44973
44974 {&hf_ieee80211_ff_cc,
44975 {"Clustering Control", "wlan.cc",
44976 FT_UINT64, BASE_HEX , NULL((void*)0), 0,
44977 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44978
44979 {&hf_ieee80211_ff_cc_abft_resp_addr,
44980 {"A-BFT Responder Address", "wlan.cc.abft_resp_addr",
44981 FT_ETHER, BASE_NONE , NULL((void*)0), 0,
44982 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44983
44984 {&hf_ieee80211_ff_cc_sp_duration,
44985 {"Beacon SP Duration", "wlan.cc.sp_duration",
44986 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
44987 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44988
44989 {&hf_ieee80211_ff_cc_cluster_id,
44990 {"Cluster ID", "wlan.cc.cluster_id",
44991 FT_UINT64, BASE_DEC , NULL((void*)0), 0,
44992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44993
44994 {&hf_ieee80211_ff_cc_role,
44995 {"Cluster Member Role", "wlan.cc.rold",
44996 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
44997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44998
44999 {&hf_ieee80211_ff_cc_max_mem,
45000 {"Cluster MaxMem", "wlan.cc.max_mem",
45001 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
45002 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45003
45004 {&hf_ieee80211_tag_relay_support,
45005 {"Relay Supportability", "wlan.relay_capabilities.relay_support",
45006 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
45007 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45008
45009 {&hf_ieee80211_tag_relay_use,
45010 {"Relay Usability", "wlan.relay_capabilities.relay_use",
45011 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
45012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45013
45014 {&hf_ieee80211_tag_relay_permission,
45015 {"Relay Permission", "wlan.relay_capabilities.relay_permission",
45016 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
45017 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45018
45019 {&hf_ieee80211_tag_AC_power,
45020 {"A/C Power", "wlan.relay_capabilities.AC_power",
45021 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
45022 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45023
45024 {&hf_ieee80211_tag_relay_prefer,
45025 {"Relay Preference", "wlan.relay_capabilities.relay_prefer",
45026 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
45027 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45028
45029 {&hf_ieee80211_tag_duplex,
45030 {"Duplex", "wlan.relay_capabilities.duplex",
45031 FT_UINT8, BASE_DEC, NULL((void*)0), 0x60,
45032 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45033
45034 {&hf_ieee80211_tag_cooperation,
45035 {"Cooperation", "wlan.relay_capabilities.cooperation",
45036 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
45037 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45038
45039#if 0
45040 {&hf_ieee80211_ff_rcsi,
45041 {"Relay Capable STA Info", "wlan.rcsi",
45042 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
45043 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45044
45045 {&hf_ieee80211_ff_rcsi_aid,
45046 {"AID", "wlan.rcsi.aid",
45047 FT_UINT8, BASE_DEC, NULL((void*)0), 0xff,
45048 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45049#endif
45050
45051 {&hf_ieee80211_ff_band_id,
45052 {"Band ID", "wlan.band_id",
45053 FT_UINT8, BASE_DEC, VALS(band_id)((0 ? (const struct _value_string*)0 : ((band_id)))), 0x0,
45054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45055
45056 {&hf_ieee80211_tag_move,
45057 {"Move", "wlan.dmg_bss_param_change.move",
45058 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
45059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45060
45061 {&hf_ieee80211_tag_size,
45062 {"Size", "wlan.dmg_bss_param_change.size",
45063 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
45064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45065
45066 {&hf_ieee80211_tag_tbtt_offset,
45067 {"TBTT Offset", "wlan.dmg_bss_param_change.tbtt_offset",
45068 FT_UINT32, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (size_t) (allocation_duration_base_custom)), 0x0,
45069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45070
45071 {&hf_ieee80211_tag_bi_duration,
45072 {"BI Duration", "wlan.dmg_bss_param_change.bi_duration",
45073 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45075
45076 {&hf_ieee80211_tag_dmg_capa_sta_addr,
45077 {"STA Address", "wlan.dmg_capa.sta_addr",
45078 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45079 "STA_Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45080
45081 {&hf_ieee80211_tag_dmg_capa_aid,
45082 {"AID", "wlan.dmg_capa.aid",
45083 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45085/* 8.4.2.127.2 DMG STA Capability Information field */
45086 {&hf_ieee80211_tag_reverse_direction, /* DMG STA capa, bits [0] */
45087 {"Reverse Direction", "wlan.dmg_capa.reverse_direction",
45088 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
45089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45090
45091 {&hf_ieee80211_tag_hlts, /* DMG STA capa, bits [1] */
45092 {"Higher Layer Timer Synchronization", "wlan.dmg_capa.htls",
45093 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(1, 1)(((1U << ((1) - (1) + 1)) - 1) << (1)),
45094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45095
45096 {&hf_ieee80211_tag_tpc, /* DMG STA capa, bits [2] */
45097 {"TPC", "wlan.dmg_capa.tpc",
45098 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(2, 2)(((1U << ((2) - (2) + 1)) - 1) << (2)),
45099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45100
45101 {&hf_ieee80211_tag_spsh, /* DMG STA capa, bits [3] */
45102 {"SPSH and Interference Mitigation", "wlan.dmg_capa.spsh",
45103 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(3, 3)(((1U << ((3) - (3) + 1)) - 1) << (3)),
45104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45105
45106 {&hf_ieee80211_tag_rx_antenna, /* DMG STA capa, bits [4..5] */
45107 {"Number of RX DMG Antennas", "wlan.dmg_capa.num_rx",
45108 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)),
45109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45110
45111 {&hf_ieee80211_tag_fast_link, /* DMG STA capa, bits [6] */
45112 {"Fast Link Adaptation", "wlan.dmg_capa.fast_link",
45113 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(6, 6)(((1U << ((6) - (6) + 1)) - 1) << (6)),
45114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45115
45116 {&hf_ieee80211_tag_num_sectors, /* DMG STA capa, bits [7..13] */
45117 {"Total Number of Sectors", "wlan.dmg_capa.num_sectors",
45118 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)),
45119 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45120
45121 {&hf_ieee80211_tag_rxss_length, /* DMG STA capa, bits [14..19] */
45122 {"RXSS Length", "wlan.dmg_capa.rxss_len",
45123 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)),
45124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45125
45126 {&hf_ieee80211_tag_reciprocity, /* DMG STA capa, bits [20] */
45127 {"DMG Antenna Reciprocity", "wlan.dmg_capa.reciprocity",
45128 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(20, 20)(((1U << ((20) - (20) + 1)) - 1) << (20)),
45129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45130/* DMG STA capa, A-MPDU params, bits [21..26] */
45131 {&hf_ieee80211_tag_max_ampdu_exp, /* DMG STA capa, bits [21..23] */
45132 {"Maximum A-MPDU Length Exponent", "wlan.dmg_capa.max_ampdu_exp",
45133 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(23, 21)(((1U << ((23) - (21) + 1)) - 1) << (21)),
45134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45135
45136 {&hf_ieee80211_tag_min_mpdu_spacing, /* DMG STA capa, bits [24..26] */
45137 {"Minimum MPDU Start Spacing", "wlan.dmg_capa.min_mpdu_spacing",
45138 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(26-24, 24-24)(((1U << ((26-24) - (24-24) + 1)) - 1) << (24-24)
)
,
45139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45140
45141 {&hf_ieee80211_tag_ba_flow_control , /* DMG STA capa, bits [27] */
45142 {"BA with Flow Control", "wlan.dmg_capa.bs_flow_ctrl",
45143 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(27-24, 27-24)(((1U << ((27-24) - (27-24) + 1)) - 1) << (27-24)
)
,
45144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45145/* DMG STA capa, supported MCS set, bits [28..51] */
45146 {&hf_ieee80211_tag_max_sc_rx_mcs, /* DMG STA capa, bits [28..32] */
45147 {"Maximum SC Rx MCS", "wlan.dmg_capa.max_sc_rx_mcs",
45148 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(32-24, 28-24)(((1U << ((32-24) - (28-24) + 1)) - 1) << (28-24)
)
,
45149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45150
45151 {&hf_ieee80211_tag_max_ofdm_rx_mcs, /* DMG STA capa, bits [33..37] */
45152 {"Maximum OFDM Rx MCS", "wlan.dmg_capa.max_ofdm_rx_mcs",
45153 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(37-24, 33-24)(((1U << ((37-24) - (33-24) + 1)) - 1) << (33-24)
)
,
45154 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45155
45156 {&hf_ieee80211_tag_max_sc_tx_mcs, /* DMG STA capa, bits [38..42] */
45157 {"Maximum SC Tx MCS", "wlan.dmg_capa.max_sc_tx_mcs",
45158 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(42-24, 38-24)(((1U << ((42-24) - (38-24) + 1)) - 1) << (38-24)
)
,
45159 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45160
45161 {&hf_ieee80211_tag_max_ofdm_tx_mcs, /* DMG STA capa, bits [43..47] */
45162 {"Maximum OFDM Tx MCS", "wlan.dmg_capa.max_ofdm_tx_mcs",
45163 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(47-24, 43-24)(((1U << ((47-24) - (43-24) + 1)) - 1) << (43-24)
)
,
45164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45165
45166 {&hf_ieee80211_tag_low_power_supported, /* DMG STA capa, bits [48] */
45167 {"Low Power SC PHY Supported", "wlan.dmg_capa.low_power_supported",
45168 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(48-48, 48-48)(((1U << ((48-48) - (48-48) + 1)) - 1) << (48-48)
)
,
45169 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45170
45171 {&hf_ieee80211_tag_code_rate, /* DMG STA capa, bits [49] */
45172 {"Code Rate 13/16", "wlan.dmg_capa.code_rate",
45173 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(49-48, 49-48)(((1U << ((49-48) - (49-48) + 1)) - 1) << (49-48)
)
,
45174 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45175
45176 {&hf_ieee80211_tag_dtp, /* DMG STA capa, bits [52] */
45177 {"DTP Supported", "wlan.dmg_capa.dtp",
45178 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(52-48, 52-48)(((1U << ((52-48) - (52-48) + 1)) - 1) << (52-48)
)
,
45179 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45180
45181 {&hf_ieee80211_tag_appdu_supp, /* DMG STA capa, bits [53] */
45182 {"A-PPDU Supported", "wlan.dmg_capa.appdu_supp",
45183 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(53-48, 53-48)(((1U << ((53-48) - (53-48) + 1)) - 1) << (53-48)
)
,
45184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45185
45186 {&hf_ieee80211_tag_heartbeat, /* DMG STA capa, bits [54] */
45187 {"HeartBeat", "wlan.dmg_capa.heartbeat",
45188 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(54-48, 54-48)(((1U << ((54-48) - (54-48) + 1)) - 1) << (54-48)
)
,
45189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45190
45191 {&hf_ieee80211_tag_other_aid, /* DMG STA capa, bits [55] */
45192 {"Supports Other_AID", "wlan.dmg_capa.other_aid",
45193 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(55-48, 55-48)(((1U << ((55-48) - (55-48) + 1)) - 1) << (55-48)
)
,
45194 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45195
45196 {&hf_ieee80211_tag_pattern_recip, /* DMG STA capa, bits [56] */
45197 {"Antenna Pattern Reciprocity", "wlan.dmg_capa.pattern_recip",
45198 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(56-48, 56-48)(((1U << ((56-48) - (56-48) + 1)) - 1) << (56-48)
)
,
45199 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45200
45201 {&hf_ieee80211_tag_heartbeat_elapsed, /* DMG STA capa, bits [57..59] */
45202 {"Heartbeat Elapsed Indication", "wlan.dmg_capa.heartbeat_elapsed",
45203 FT_UINT16, BASE_DEC, NULL((void*)0), GENMASK(59-48, 57-48)(((1U << ((59-48) - (57-48) + 1)) - 1) << (57-48)
)
,
45204 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45205
45206 {&hf_ieee80211_tag_grant_ack_supp, /* DMG STA capa, bits [60] */
45207 {"Grant ACK Supported", "wlan.dmg_capa.grant_ack_supp",
45208 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(60-48, 60-48)(((1U << ((60-48) - (60-48) + 1)) - 1) << (60-48)
)
,
45209 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45210
45211 {&hf_ieee80211_tag_RXSSTxRate_supp, /* DMG STA capa, bits [61] */
45212 {"RXSSTxRate Supported", "wlan.dmg_capa.RXSSTxRate",
45213 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(61-48, 61-48)(((1U << ((61-48) - (61-48) + 1)) - 1) << (61-48)
)
,
45214 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45215/* 8.4.2.127.3 DMG PCP/AP Capability Information field */
45216 {&hf_ieee80211_tag_pcp_tddti, /* DMG PCP/AP capa, bits [0] */
45217 {"TDDTI", "wlan.dmg_capa.pcp_tdtti",
45218 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
45219 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45220
45221 {&hf_ieee80211_tag_pcp_PSA, /* DMG PCP/AP capa, bits [1] */
45222 {"Pseudo-static Allocations", "wlan.dmg_capa.pcp_psa",
45223 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(1, 1)(((1U << ((1) - (1) + 1)) - 1) << (1)),
45224 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45225
45226 {&hf_ieee80211_tag_pcp_handover, /* DMG PCP/AP capa, bits [2] */
45227 {"PDP Handover", "wlan.dmg_capa.pcp_handover",
45228 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(2, 2)(((1U << ((2) - (2) + 1)) - 1) << (2)),
45229 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45230
45231 {&hf_ieee80211_tag_pcp_max_assoc, /* DMG PCP/AP capa, bits [3..10] */
45232 {"Max Associated STA Number", "wlan.dmg_capa.pcp_max_assoc",
45233 FT_UINT16, BASE_DEC, NULL((void*)0), GENMASK(10, 3)(((1U << ((10) - (3) + 1)) - 1) << (3)),
45234 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45235
45236 {&hf_ieee80211_tag_pcp_power_src, /* DMG PCP/AP capa, bits [11] */
45237 {"Power Source", "wlan.dmg_capa.pcp_power_src",
45238 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(11, 11)(((1U << ((11) - (11) + 1)) - 1) << (11)),
45239 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45240
45241 {&hf_ieee80211_tag_pcp_decenter, /* DMG PCP/AP capa, bits [12] */
45242 {"Decentralized PCP/AP Clustering", "wlan.dmg_capa.pcp_decenter",
45243 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(12, 12)(((1U << ((12) - (12) + 1)) - 1) << (12)),
45244 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45245
45246 {&hf_ieee80211_tag_pcp_forwarding, /* DMG PCP/AP capa, bits [13] */
45247 {"PCP Forwarding", "wlan.dmg_capa.pcp_forwarding",
45248 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(13, 13)(((1U << ((13) - (13) + 1)) - 1) << (13)),
45249 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45250
45251 {&hf_ieee80211_tag_pcp_center, /* DMG PCP/AP capa, bits [14] */
45252 {"Centralized PCP/AP Clustering", "wlan.dmg_capa.pcp_center",
45253 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(14, 14)(((1U << ((14) - (14) + 1)) - 1) << (14)),
45254 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45255
45256 {&hf_ieee80211_tag_sta_beam_track, /* DMG STA beam track capa*/
45257 {"STA Beam Tracking Time Limit", "wlan.dmg_capa.beam_track",
45258 FT_UINT16, BASE_DEC | BASE_UNIT_STRING0x00001000, UNS(&units_microseconds)((0 ? (const struct unit_name_string*)0 : ((&units_microseconds
))))
, 0,
45259 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45260
45261 {&hf_ieee80211_tag_ext_sc_mcs_max_tx, /* DMG STA Ext SC MCS Capa: Max TX*/
45262 {"Extended SC Max Tx MCS Name", "wlan.dmg_capa.ext_sc_mcs_capa_max_tx",
45263 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)),
45264 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45265
45266 {&hf_ieee80211_tag_ext_sc_mcs_tx_code_7_8, /* DMG STA Ext SC MCS Capa: Tx code rate 7/8*/
45267 {"Extended SC Tx MCS code rate 7/8", "wlan.dmg_capa.ext_sc_mcs_tx_code_7_8",
45268 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)),
45269 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45270
45271 {&hf_ieee80211_tag_ext_sc_mcs_max_rx, /* DMG STA Ext SC MCS Capa: Max RX*/
45272 {"Extended SC Max Rx MCS Name", "wlan.dmg_capa.ext_sc_mcs_capa_max_rx",
45273 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)),
45274 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45275
45276 {&hf_ieee80211_tag_ext_sc_mcs_rx_code_7_8, /* DMG STA Ext SC MCS Capa: Rx code rate 7/8*/
45277 {"Extended SC Rx MCS code rate 7/8", "wlan.dmg_capa.ext_sc_mcs_rx_code_7_8",
45278 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)),
45279 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45280
45281 {&hf_ieee80211_tag_max_basic_sf_amsdu, /* DMG Max Number of Basic Subframes in an A-MSDU*/
45282 {"Max Number of Basic Subframes in an A-MSDU", "wlan.dmg_capa.max_basic_sf_amsdu",
45283 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(max_basic_sf_amsdu)((0 ? (const struct _range_string*)0 : ((max_basic_sf_amsdu))
))
, 0,
45284 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45285
45286 {&hf_ieee80211_tag_max_short_sf_amsdu, /* DMG Max Number of short Subframes in an A-MSDU*/
45287 {"Max Number of short Subframes in an A-MSDU", "wlan.dmg_capa.max_short_sf_amsdu",
45288 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(max_short_sf_amsdu)((0 ? (const struct _range_string*)0 : ((max_short_sf_amsdu))
))
, 0,
45289 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45290
45291 {&hf_ieee80211_tag_PSRSI,
45292 {"PS Request Suspension Interval", "wlan.dmg_oper.psrsi",
45293 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45295
45296 {&hf_ieee80211_tag_min_BHI_duration,
45297 {"Min BHI Duration", "wlan.dmg_oper.min_BHI_duration",
45298 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45299 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45300
45301 {&hf_ieee80211_tag_brdct_sta_info_dur,
45302 {"Broadcast STA Info Duration", "wlan.dmg_oper.brdcst_sta_info_dur",
45303 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45304 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45305
45306 {&hf_ieee80211_tag_assoc_resp_confirm_time,
45307 {"Associated Response Confirm Time", "wlan.dmg_oper.assoc_resp_confirm_time",
45308 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45309 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45310
45311 {&hf_ieee80211_tag_min_pp_duration,
45312 {"Min PP Duration", "wlan.dmg_oper.min_pp_duration",
45313 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45314 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45315
45316 {&hf_ieee80211_tag_SP_idle_timeout,
45317 {"SP Idle Timeout", "wlan.dmg_oper.SP_idle_timeout",
45318 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45319 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45320
45321 {&hf_ieee80211_tag_max_lost_beacons,
45322 {"Max Lost Beacons", "wlan.dmg_oper.max_lost_beacons",
45323 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45324 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45325
45326 {&hf_ieee80211_tag_type,
45327 {"Type", "wlan.sctor_id.type",
45328 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000f,
45329 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45330
45331 {&hf_ieee80211_tag_tap1,
45332 {"Tap 1", "wlan.sctor_id.tap1",
45333 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000003f0,
45334 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45335
45336 {&hf_ieee80211_tag_state1,
45337 {"State 1", "wlan.sctor_id.state1",
45338 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000fc00,
45339 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45340
45341 {&hf_ieee80211_tag_tap2,
45342 {"Tap 2", "wlan.sctor_id.tap2",
45343 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00ff0000,
45344 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45345
45346 {&hf_ieee80211_tag_state2,
45347 {"State 2", "wlan.sctor_id.state2",
45348 FT_UINT32, BASE_HEX, NULL((void*)0), 0xff000000,
45349 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45350
45351 {&hf_ieee80211_tag_allocation_id,
45352 {"Allocation ID", "wlan.ext_sched.alloc_id",
45353 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000f,
45354 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45355
45356 {&hf_ieee80211_tag_allocation_type,
45357 {"Allocation Type", "wlan.ext_sched.alloc_type",
45358 FT_UINT16, BASE_DEC, VALS(allocation_type)((0 ? (const struct _value_string*)0 : ((allocation_type)))), 0x0070,
45359 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45360
45361 {&hf_ieee80211_tag_pseudo_static,
45362 {"Pseudo-static", "wlan.ext_sched.p_static",
45363 FT_BOOLEAN, 16, NULL((void*)0), 0x0080,
45364 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45365
45366 {&hf_ieee80211_tag_truncatable,
45367 {"Truncatable", "wlan.ext_sched.truncatable",
45368 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
45369 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45370
45371 {&hf_ieee80211_tag_extendable,
45372 {"Extendable", "wlan.ext_sched.extendable",
45373 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
45374 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45375
45376 {&hf_ieee80211_tag_pcp_active,
45377 {"PCP Active", "wlan.ext_sched.pcp_active",
45378 FT_BOOLEAN, 16, NULL((void*)0), 0x0400,
45379 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45380
45381 {&hf_ieee80211_tag_lp_sc_used,
45382 {"LP SC Used", "wlan.ext_sched.lp_sc_used",
45383 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
45384 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45385
45386 {&hf_ieee80211_tag_src_aid,
45387 {"Source AID", "wlan.ext_sched.src_id",
45388 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45389 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45390
45391 {&hf_ieee80211_tag_dest_aid,
45392 {"Destination AID", "wlan.ext_sched.dest_id",
45393 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45394 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45395
45396 {&hf_ieee80211_tag_alloc_start,
45397 {"Allocation Start", "wlan.ext_sched.alloc_start",
45398 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45400
45401 {&hf_ieee80211_tag_alloc_block_duration,
45402 {"Allocation Block Duration", "wlan.ext_sched.block_duration",
45403 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45404 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45405
45406 {&hf_ieee80211_tag_num_blocks,
45407 {"Number of Blocks", "wlan.ext_sched.num_blocks",
45408 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45409 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45410
45411 {&hf_ieee80211_tag_alloc_block_period,
45412 {"Allocation Block Period", "wlan.ext_sched.alloc_block_period",
45413 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45414 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45415
45416 {&hf_ieee80211_tag_aid,
45417 {"AID", "wlan.sta_avail.aid",
45418 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00ff,
45419 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45420
45421 {&hf_ieee80211_tag_cbap,
45422 {"CBAP", "wlan.sta_avail.cbap",
45423 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
45424 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45425
45426 {&hf_ieee80211_tag_pp_avail,
45427 {"PP Available", "wlan.sta_avail.pp_avail",
45428 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
45429 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45430
45431 {&hf_ieee80211_tag_next_ati_start_time,
45432 {"Start Time", "wlan.next_ati.start_time",
45433 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45434 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45435
45436 {&hf_ieee80211_tag_next_ati_duration,
45437 {"ATI Duration", "wlan.next_ati.duration",
45438 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45439 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45440
45441 {&hf_ieee80211_tag_old_bssid,
45442 {"Old BSSID", "wlan.pcp_handover.old_bssid",
45443 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45444 "OLD_BSSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45445
45446 {&hf_ieee80211_tag_new_pcp_addr,
45447 {"New PCP Address", "wlan.pcp_handover.new_pcp_addr",
45448 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45449 "New_PCP_Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45450
45451 {&hf_ieee80211_tag_bssid,
45452 {"BSSID", "wlan.quiet_res.bssid",
45453 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45454 "BSS-ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45455
45456 {&hf_ieee80211_tag_duplex_relay,
45457 {"Duplex", "wlan.relay_capabilities.duplex",
45458 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45459 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45460
45461 {&hf_ieee80211_tag_cooperation_relay,
45462 {"Cooperation", "wlan.relay_capabilities.cooperation",
45463 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
45464 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45465
45466 {&hf_ieee80211_tag_tx_mode,
45467 {"TX-Mode", "wlan.relay_trans_param.tx_mode",
45468 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
45469 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45470
45471 {&hf_ieee80211_tag_link_change_interval,
45472 {"Link Change Interval", "wlan.relay_trans_param.link_change_interval",
45473 FT_UINT8, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (size_t) (allocation_duration_base_custom)), 0x0,
45474 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45475
45476 {&hf_ieee80211_tag_data_sensing_time,
45477 {"Data Sensing Time", "wlan.relay_trans_param.data_sensing_time",
45478 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45479 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45480
45481 {&hf_ieee80211_tag_first_period,
45482 {"First Period", "wlan.relay_trans_param.first_period",
45483 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45484 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45485
45486 {&hf_ieee80211_tag_second_period,
45487 {"Second Period", "wlan.relay_trans_param.second_period",
45488 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45489 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45490
45491 {&hf_ieee80211_tag_initiator,
45492 {"Initiator", "wlan.beam_refine.initiator",
45493 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000001,
45494 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45495
45496 {&hf_ieee80211_tag_tx_train_res,
45497 {"TX-train-response", "wlan.beam_refine.tx_train_res",
45498 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000002,
45499 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45500
45501 {&hf_ieee80211_tag_rx_train_res,
45502 {"RX-train-response", "wlan.beam_refine.rx_train_res",
45503 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000004,
45504 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45505
45506 {&hf_ieee80211_tag_tx_trn_ok,
45507 {"TX-TRN-OK", "wlan.beam_refine.tx_trn_ok",
45508 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000008,
45509 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45510
45511 {&hf_ieee80211_tag_txss_fbck_req,
45512 {"TXSS-FBCK-REQ", "wlan.beam_refine.txss_fbck_req",
45513 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000010,
45514 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45515
45516 {&hf_ieee80211_tag_bs_fbck,
45517 {"BS-FBCK", "wlan.beam_refine.bs_fbck",
45518 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000007e0,
45519 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45520
45521 {&hf_ieee80211_tag_bs_fbck_antenna_id,
45522 {"BS-FBCK Antenna ID", "wlan.beam_refine.bs_fbck_antenna_id",
45523 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000001800,
45524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45525
45526 {&hf_ieee80211_tag_snr_requested,
45527 {"SNR Requested", "wlan.beam_refine.snr_req",
45528 FT_BOOLEAN, 40, NULL((void*)0), 0x0000002000,
45529 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45530
45531 {&hf_ieee80211_tag_channel_measurement_requested,
45532 {"Channel Measurement Requested", "wlan.beam_refine.ch_measure_req",
45533 FT_BOOLEAN, 40, NULL((void*)0), 0x0000004000,
45534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45535
45536 {&hf_ieee80211_tag_number_of_taps_requested,
45537 {"Number of Taps Requested", "wlan.beam_refine.taps_req",
45538 FT_UINT40, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(number_of_taps_values)((0 ? (const struct _val64_string*)0 : ((number_of_taps_values
))))
, 0x0000018000,
45539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45540
45541 {&hf_ieee80211_tag_sector_id_order_req,
45542 {"Sector ID Order Requested", "wlan.beam_refine.sector_id_req",
45543 FT_BOOLEAN, 40, NULL((void*)0), 0x0000020000,
45544 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45545
45546 {&hf_ieee80211_tag_snr_present,
45547 {"SNR Present", "wlan.beam_refine.snr_present",
45548 FT_BOOLEAN, 40, NULL((void*)0), 0x0000040000,
45549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45550
45551 {&hf_ieee80211_tag_channel_measurement_present,
45552 {"Channel Measurement Present", "wlan.beam_refine.ch_measure_present",
45553 FT_BOOLEAN, 40, NULL((void*)0), 0x0000080000,
45554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45555
45556 {&hf_ieee80211_tag_tap_delay_present,
45557 {"Tap Delay Present", "wlan.beam_refine.tap_delay_present",
45558 FT_BOOLEAN, 40, NULL((void*)0), 0x0000100000,
45559 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45560
45561 {&hf_ieee80211_tag_number_of_taps_present,
45562 {"Number of Taps Present", "wlan.beam_refine.taps_present",
45563 FT_UINT40, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(number_of_taps_values)((0 ? (const struct _val64_string*)0 : ((number_of_taps_values
))))
, 0x0000600000,
45564 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45565
45566 {&hf_ieee80211_tag_number_of_measurement,
45567 {"Number of Measurements", "wlan.beam_refine.num_measurement",
45568 FT_UINT40, BASE_DEC, NULL((void*)0), 0x003f800000,
45569 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45570
45571 {&hf_ieee80211_tag_sector_id_order_present,
45572 {"Sector ID Order Present", "wlan.beam_refine.sector_id_present",
45573 FT_BOOLEAN, 40, NULL((void*)0), 0x0040000000,
45574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45575
45576 {&hf_ieee80211_tag_number_of_beams,
45577 {"Number of Beams", "wlan.beam_refine.num_beams",
45578 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0f80000000,
45579 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45580
45581 {&hf_ieee80211_tag_mid_extension,
45582 {"MID Extension", "wlan.beam_refine.mid_ext",
45583 FT_BOOLEAN, 40, NULL((void*)0), 0x1000000000,
45584 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45585
45586 {&hf_ieee80211_tag_capability_request,
45587 {"Capability Request", "wlan.beam_refine.cap_req",
45588 FT_BOOLEAN, 40, NULL((void*)0), 0x2000000000,
45589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45590
45591 {&hf_ieee80211_tag_beam_refine_reserved,
45592 {"Reserved", "wlan.beam_refine.reserved",
45593 FT_UINT40, BASE_HEX, NULL((void*)0), 0xc000000000,
45594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45595
45596 {&hf_ieee80211_tag_nextpcp_list,
45597 {"AID of NextPCP", "wlan.next_pcp.list",
45598 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45599 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45600
45601 {&hf_ieee80211_tag_nextpcp_token,
45602 {"NextPCP List Token", "wlan.next_pcp.token",
45603 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45604 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45605
45606 {&hf_ieee80211_tag_remaining_BI,
45607 {"Remaining BI's", "wlan.pcp_handover.remaining_BIs",
45608 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45609 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45610
45611 {&hf_ieee80211_tag_request_token,
45612 {"Request Token", "wlan.request_token",
45613 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45615
45616 {&hf_ieee80211_tag_bi_start_time,
45617 {"BI Start Time", "wlan.bi_start_time",
45618 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45619 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45620
45621 {&hf_ieee80211_tag_sleep_cycle,
45622 {"Sleep Cycle", "wlan.sleep_cycle",
45623 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45625
45626 {&hf_ieee80211_tag_num_awake_bis,
45627 {"Number of Awake/Doze BIs", "wlan.num_awake_bis",
45628 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45630
45631 {&hf_ieee80211_ff_dmg_action_code,
45632 {"DMG Action", "wlan.fixed.dmg_act",
45633 FT_UINT8, BASE_HEX, VALS(ff_dmg_action_flags)((0 ? (const struct _value_string*)0 : ((ff_dmg_action_flags)
)))
, 0,
45634 "Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45635
45636 {&hf_ieee80211_ff_unprotected_dmg_action_code,
45637 {"Unprotected DMG Action", "wlan.fixed.unprotected_dmg_act",
45638 FT_UINT8, BASE_HEX, VALS(ff_unprotected_dmg_action_flags)((0 ? (const struct _value_string*)0 : ((ff_unprotected_dmg_action_flags
))))
, 0,
45639 "Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45640
45641 {&hf_ieee80211_ff_dmg_pwr_mgmt,
45642 {"DMG Power Management", "wlan.dmg.pwr_mgmt",
45643 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
45644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45645
45646 {&hf_ieee80211_ff_subject_address,
45647 {"Subject Address", "wlan.dmg.subject_addr",
45648 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45649 "MAC address of requested STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45650
45651 {&hf_ieee80211_ff_handover_reason,
45652 {"Handover Reason", "wlan.dmg.handover_reason",
45653 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45654 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45655
45656 {&hf_ieee80211_ff_handover_remaining_bi,
45657 {"Handover Remaining BI", "wlan.dmg.handover_remaining_bi",
45658 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45659 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45660
45661 {&hf_ieee80211_ff_handover_result,
45662 {"Handover Result", "wlan.dmg.handover_result",
45663 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45664 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45665
45666 {&hf_ieee80211_ff_handover_reject_reason,
45667 {"Handover Reject Reason", "wlan.dmg.handover_reject_reason",
45668 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45669 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45670
45671 {&hf_ieee80211_ff_destination_reds_aid,
45672 {"Destination REDS AID", "wlan.dmg.destination_reds_aid",
45673 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45674 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45675
45676 {&hf_ieee80211_ff_destination_aid,
45677 {"Destination AID", "wlan.dmg.destination_aid",
45678 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45679 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45680
45681 {&hf_ieee80211_ff_relay_aid,
45682 {"Relay AID", "wlan.dmg.relay_aid",
45683 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45684 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45685
45686 {&hf_ieee80211_ff_source_aid,
45687 {"Source AID", "wlan.dmg.source_aid",
45688 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45689 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45690
45691 {&hf_ieee80211_ff_timing_offset,
45692 {"Timing Offset", "wlan.dmg.timing_offset",
45693 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45694 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45695
45696 {&hf_ieee80211_ff_sampling_frequency_offset,
45697 {"Sampling Frequency Offset", "wlan.dmg.sampling_frequency_offset",
45698 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45699 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45700
45701 {&hf_ieee80211_ff_relay_operation_type,
45702 {"Relay Operation Type", "wlan.dmg.relay_operation_type",
45703 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45704 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45705
45706 {&hf_ieee80211_ff_peer_sta_aid,
45707 {"Peer STA AID", "wlan.dmg.peer_sta_aid",
45708 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45709 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45710
45711 {&hf_ieee80211_ff_snr,
45712 {"SNR", "wlan.dmg.snr",
45713 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45714 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45715
45716 {&hf_ieee80211_ff_internal_angle,
45717 {"Internal Angle", "wlan.dmg.internal_angle",
45718 FT_UINT8, BASE_DEC, NULL((void*)0), 0xfe,
45719 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45720
45721 {&hf_ieee80211_ff_recommend,
45722 {"Recommend", "wlan.dmg.recommend",
45723 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45725
45726 {&hf_ieee80211_ff_fst_action_code,
45727 {"FST Action Code", "wlan.fst.action_code",
45728 FT_UINT8, BASE_HEX, VALS(ff_fst_action_flags)((0 ? (const struct _value_string*)0 : ((ff_fst_action_flags)
)))
, 0,
45729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45730
45731 {&hf_ieee80211_ff_robust_av_streaming_action_code,
45732 {"Robust AV Streaming Action Code", "wlan.robust_av_streaming.action_code",
45733 FT_UINT8, BASE_HEX, VALS(ff_robust_av_streaming_action_flags)((0 ? (const struct _value_string*)0 : ((ff_robust_av_streaming_action_flags
))))
, 0,
45734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45735
45736 {&hf_ieee80211_ff_llt,
45737 {"Link Loss Timeout", "wlan.fst.llt",
45738 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45740
45741 {&hf_ieee80211_ff_fsts_id,
45742 {"FSTS ID", "wlan.session_trans.fsts_id",
45743 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45744 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45745
45746 {&hf_ieee80211_ff_mmpdu_len,
45747 {"MMPDU Length", "wlan.fst.mmpdu_length",
45748 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45749 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45750
45751 {&hf_ieee80211_ff_mmpdu_ctrl,
45752 {"MMPDU Control", "wlan.fst.mmpdu_ctrl",
45753 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
45754 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45755
45756 {&hf_ieee80211_ff_oct_mmpdu,
45757 {"OCT MMPDU", "wlan.fst.oct_mmpdu",
45758 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45760
45761 {&hf_ieee80211_ff_scs_scsid,
45762 {"SCSID", "wlan.scs.scs_status_list.scsid",
45763 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45764
45765 {&hf_ieee80211_ff_scs_status,
45766 {"Status", "wlan.scs.scs_status_list.status",
45767 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
45768 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45769
45770 {&hf_ieee80211_ff_scs_response_count,
45771 {"Count", "wlan.scs.scs_response.count",
45772 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45773
45774 {&hf_ieee80211_ff_vht_mimo_cntrl,
45775 {"VHT MIMO Control", "wlan.vht.mimo_control.control",
45776 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
45777 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45778
45779 {&hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
45780 {"Nc Index", "wlan.vht.mimo_control.ncindex",
45781 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,
45782 "Number of Columns Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45783
45784 {&hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
45785 {"Nr Index", "wlan.vht.mimo_control.nrindex",
45786 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,
45787 "Number of Rows Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45788
45789 {&hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
45790 {"Channel Width", "wlan.vht.mimo_control.chanwidth",
45791 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,
45792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45793
45794 {&hf_ieee80211_ff_vht_mimo_cntrl_grouping,
45795 {"Grouping (Ng)", "wlan.vht.mimo_control.grouping",
45796 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_grouping_vals)((0 ? (const struct _value_string*)0 : ((ff_vht_mimo_cntrl_grouping_vals
))))
, 0x000300,
45797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45798
45799 {&hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
45800 {"Codebook Information", "wlan.vht.mimo_control.codebookinfo",
45801 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000400,
45802 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45803
45804 {&hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
45805 {"Feedback Type", "wlan.vht.mimo_control.feedbacktype",
45806 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_feedback_vals)((0 ? (const struct _value_string*)0 : ((ff_vht_mimo_cntrl_feedback_vals
))))
, 0x000800,
45807 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45808
45809 {&hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
45810 {"Remaining Feedback Segments", "wlan.vht.mimo_control.remainingfeedbackseg",
45811 FT_UINT24, BASE_HEX, NULL((void*)0), 0x007000,
45812 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45813
45814 {&hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
45815 {"First Feedback Segments", "wlan.vht.mimo_control.firstfeedbackseg",
45816 FT_UINT24, BASE_HEX, NULL((void*)0), 0x008000,
45817 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45818
45819 {&hf_ieee80211_ff_vht_mimo_cntrl_reserved,
45820 {"Reserved", "wlan.vht.mimo_control.reserved",
45821 FT_UINT24, BASE_HEX, NULL((void*)0), 0x030000,
45822 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45823
45824 {&hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
45825 {"Sounding Dialog Token Number", "wlan.vht.mimo_control.sounding_dialog_token_nbr",
45826 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFC0000,
45827 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45828
45829 {&hf_ieee80211_ff_vht_action,
45830 {"VHT Action", "wlan.vht.action",
45831 FT_UINT8, BASE_DEC, VALS(vht_action_vals)((0 ? (const struct _value_string*)0 : ((vht_action_vals)))), 0,
45832 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45833
45834 {&hf_ieee80211_vht_compressed_beamforming_report,
45835 {"VHT Compressed Beamforming Report", "wlan.vht.compressed_beamforming_report",
45836 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45837 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45838
45839 {&hf_ieee80211_vht_mu_exclusive_beamforming_report,
45840 {"VHT MU Exclusive Beamforming Report","wlan.vht.exclusive_beamforming_report",
45841 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45842 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45843
45844 {&hf_ieee80211_vht_compressed_beamforming_report_snr,
45845 {"Signal to Noise Ratio (SNR)", "wlan.vht.compressed_beamforming_report.snr",
45846 FT_INT8, BASE_DEC, NULL((void*)0), 0,
45847 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45848
45849 {&hf_ieee80211_vht_compressed_beamform_scidx,
45850 {"SCIDX", "wlan.vht.compressed_beamforming_report.scidx",
45851 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45852
45853 {&hf_ieee80211_vht_mu_exclusive_beamforming_delta_snr,
45854 {"Delta SNR for space-time stream Nc for subcarrier k", "wlan.vht.exclusive_beamforming_report.delta_snr",
45855 FT_NONE, BASE_NONE, NULL((void*)0), 0,
45856 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45857
45858 {&hf_ieee80211_vht_group_id_management,
45859 {"Group ID Management", "wlan.vht.group_id_management",
45860 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45861 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45862
45863 {&hf_ieee80211_vht_membership_status_array,
45864 {"Membership Status Array", "wlan.vht.membership_status_array",
45865 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45866 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45867
45868 {&hf_ieee80211_vht_user_position_array,
45869 {"User Position Array", "wlan.vht.user_position_array",
45870 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45871 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45872
45873 {&hf_ieee80211_vht_membership_status_field,
45874 {"Membership Status Field", "wlan.vht.membership_status_array.field",
45875 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45876 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45877
45878 {&hf_ieee80211_vht_user_position_field,
45879 {"User Position Field", "wlan.vht.user_position_array.field",
45880 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45881 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45882
45883 {&hf_ieee80211_vht_operation_mode_notification,
45884 {"Operation Mode Notification", "wlan.vht.operation_mode_notification",
45885 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45886 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45887
45888 {&hf_ieee80211_ff_he_action,
45889 {"HE Action", "wlan.he.action",
45890 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(he_action_rvals)((0 ? (const struct _range_string*)0 : ((he_action_rvals)))), 0,
45891 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45892
45893 {&hf_ieee80211_ff_protected_he_action,
45894 {"Protected HE Action", "wlan.he.protected_action",
45895 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(protected_he_action_rvals)((0 ? (const struct _range_string*)0 : ((protected_he_action_rvals
))))
, 0,
45896 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45897
45898 {&hf_ieee80211_ff_protected_eht_action,
45899 {"Protected EHT Action", "wlan.eht.protected_action",
45900 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(protected_eht_action_rvals)((0 ? (const struct _range_string*)0 : ((protected_eht_action_rvals
))))
, 0,
45901 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45902
45903 {&hf_ieee80211_ff_protected_ftm_action,
45904 {"Protected FTM Action", "wlan.ftm.protected_action",
45905 FT_UINT8, BASE_DEC, VALS(protected_ftm_action_vals)((0 ? (const struct _value_string*)0 : ((protected_ftm_action_vals
))))
, 0,
45906 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45907
45908 {&hf_ieee80211_ff_eht_action,
45909 {"EHT Action", "wlan.eht.action",
45910 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(eht_action_rvals)((0 ? (const struct _range_string*)0 : ((eht_action_rvals)))), 0,
45911 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45912
45913 {&hf_ieee80211_he_mimo_control_nc_index,
45914 {"Nc Index", "wlan.he.mimo.nc_index",
45915 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
))))
,
45916 0x0000000007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45917
45918 {&hf_ieee80211_he_mimo_control_nr_index,
45919 {"Nr Index", "wlan.he.mimo.nr_index",
45920 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
))))
,
45921 0x0000000038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45922
45923 {&hf_ieee80211_he_mimo_control_bw,
45924 {"BW", "wlan.he.mimo.bw",
45925 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45926
45927 {&hf_ieee80211_he_mimo_control_grouping,
45928 {"Grouping", "wlan.he.mimo.grouping",
45929 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(he_mimo_cntrl_grouping_flags)((0 ? (const struct _val64_string*)0 : ((he_mimo_cntrl_grouping_flags
))))
,
45930 0x0000000100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45931
45932 {&hf_ieee80211_he_mimo_control_codebook_info,
45933 {"Codebook Information", "wlan.he.mimo.codebook_info",
45934 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45935
45936 {&hf_ieee80211_he_mimo_control_feedback_type,
45937 {"Feedback Type", "wlan.he.mimo.feedback_type",
45938 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(he_mimo_cntrl_feedback_vals)((0 ? (const struct _val64_string*)0 : ((he_mimo_cntrl_feedback_vals
))))
,
45939 0x0000000C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45940
45941 {&hf_ieee80211_he_mimo_control_remaining_feedback_segs,
45942 {"Remaining Feedback Segments", "wlan.he.mimo.remaining_feedback_segs",
45943 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000007000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45944
45945 {&hf_ieee80211_he_mimo_control_first_feedback_seg,
45946 {"First Feedback Segment", "wlan.he.mimo.first_feedback_seg",
45947 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000008000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45948
45949 {&hf_ieee80211_he_mimo_control_ru_start_index,
45950 {"RU Start Index", "wlan.he.mimo.ru_start_index",
45951 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00007F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45952
45953 {&hf_ieee80211_he_mimo_control_ru_end_index,
45954 {"RU End Index", "wlan.he.mimo.ru_end_index",
45955 FT_UINT40, BASE_HEX, NULL((void*)0), 0x003F800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45956
45957 {&hf_ieee80211_he_mimo_control_sounding_dialog_token_num,
45958 {"Sounding Dialog Token Number", "wlan.he.mimo.sounding_dialog_token_num",
45959 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0FC0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45960
45961 {&hf_ieee80211_he_mimo_control_reserved,
45962 {"Reserved", "wlan.he.mimo.reserved",
45963 FT_UINT40, BASE_HEX, NULL((void*)0), 0xF000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45964
45965 {&hf_ieee80211_he_mimo_control_field,
45966 {"HE MIMO Control", "wlan.he.action.he_mimo_control",
45967 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45968
45969 {&hf_ieee80211_he_compressed_beamforming_report_snr,
45970 {"AvgSNR", "wlan.he.mimo.beamforming_report.avgsnr",
45971 FT_INT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45972
45973 {&hf_ieee80211_he_compressed_beamform_scidx,
45974 {"SCIDX", "wlan.he.action.he_mimo_control.scidx",
45975 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45976
45977 {&hf_ieee80211_he_beamforming_report_len,
45978 {"Report Len", "wlan.he.action.he_mimo_control.report_len",
45979 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45980
45981 {&hf_ieee80211_tag_tspec_allocation_id,
45982 {"Allocation ID", "wlan.dmg_tspec.allocation_id",
45983 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000f,
45984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45985
45986 {&hf_ieee80211_tag_tspec_allocation_type,
45987 {"Allocation Type", "wlan.dmg_tspec.allocation_type",
45988 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000070,
45989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45990
45991 {&hf_ieee80211_tag_tspec_allocation_format,
45992 {"Allocation Format", "wlan.dmg_tspec.allocation_format",
45993 FT_BOOLEAN, 24, NULL((void*)0), 0x000080,
45994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45995
45996 {&hf_ieee80211_tag_tspec_pseudo_static,
45997 {"Pseudo Static", "wlan.dmg_tspec.pseudo_static",
45998 FT_BOOLEAN, 24, NULL((void*)0), 0x000100,
45999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46000
46001 {&hf_ieee80211_tag_tspec_truncatable,
46002 {"Truncatable", "wlan.dmg_tspec.truncatable",
46003 FT_BOOLEAN, 24, NULL((void*)0), 0x000200,
46004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46005
46006 {&hf_ieee80211_tag_tspec_extendable,
46007 {"Extendable", "wlan.dmg_tspec.extendable",
46008 FT_BOOLEAN, 24, NULL((void*)0), 0x000400,
46009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46010
46011 {&hf_ieee80211_tag_tspec_lp_sc_used,
46012 {"LP SC Usec", "wlan.dmg_tspec.lp_sc_used",
46013 FT_BOOLEAN, 24, NULL((void*)0), 0x000800,
46014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46015
46016 {&hf_ieee80211_tag_tspec_up,
46017 {"UP", "wlan.dmg_tspec.up",
46018 FT_UINT24, BASE_HEX, NULL((void*)0), 0x007000,
46019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46020
46021 {&hf_ieee80211_tag_tspec_dest_aid,
46022 {"Destination AID", "wlan.dmg_tspec.dest_aid",
46023 FT_UINT24, BASE_HEX, NULL((void*)0), 0x7f8000,
46024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46025
46026 {&hf_ieee80211_tag_tspec_allocation_period,
46027 {"Allocation Period", "wlan.dmg_tspec.allocation_period",
46028 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46030
46031 {&hf_ieee80211_tag_tspec_min_allocation,
46032 {"Minimal Allocation", "wlan.dmg_tspec.min_allocation",
46033 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46035
46036 {&hf_ieee80211_tag_tspec_max_allocation,
46037 {"Maximal Allocation", "wlan.dmg_tspec.max_allocation",
46038 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46040
46041 {&hf_ieee80211_tag_tspec_min_duration,
46042 {"Minimal Duration", "wlan.dmg_tspec.min_duration",
46043 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46045
46046 {&hf_ieee80211_tag_tspec_num_of_constraints,
46047 {"Number Of Constraints", "wlan.dmg_tspec.num_of_constraints",
46048 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46050
46051 {&hf_ieee80211_tag_tspec_tsconst_start_time,
46052 {"TS Constraint Start Time", "wlan.dmg_tspec.tsconst.start_time",
46053 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
46054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46055
46056 {&hf_ieee80211_tag_tspec_tsconst_duration,
46057 {"TS Constraint Duration", "wlan.dmg_tspec.tsconst.duration",
46058 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46060
46061 {&hf_ieee80211_tag_tspec_tsconst_period,
46062 {"TS Constraint Period", "wlan.dmg_tspec.tsconst.period",
46063 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46065
46066 {&hf_ieee80211_tag_tspec_tsconst_interferer_mac,
46067 {"TS Constraint Interferer MAC Address", "wlan.dmg_tspec.tsconst.interferer_mac",
46068 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
46069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46070
46071 {&hf_ieee80211_tag_channel_measurement_feedback_relative_I,
46072 {"Channel Measurement Feedback Relative I", "wlan.ch_meas_fb.relative_I",
46073 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46075
46076 {&hf_ieee80211_tag_channel_measurement_feedback_relative_Q,
46077 {"Channel Measurement Feedback Relative Q", "wlan.ch_meas_fb.relative_Q",
46078 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46080
46081 {&hf_ieee80211_tag_channel_measurement_feedback_tap_delay,
46082 {"Channel Measurement Feedback Tap Delay", "wlan.ch_meas_fb.tap_delay",
46083 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46085
46086 {&hf_ieee80211_tag_channel_measurement_feedback_sector_id,
46087 {"Channel Measurement Feedback Sector ID", "wlan.ch_meas_fb.sector_id",
46088 FT_UINT8, BASE_DEC, NULL((void*)0), 0xfc,
46089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46090
46091 {&hf_ieee80211_tag_channel_measurement_feedback_antenna_id,
46092 {"Channel Measurement Feedback Antenna ID", "wlan.ch_meas_fb.antenna_id",
46093 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
46094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46095
46096 {&hf_ieee80211_tag_awake_window,
46097 {"Awake Window", "wlan.awake_window",
46098 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46100
46101 {&hf_ieee80211_tag_addba_ext_no_frag,
46102 {"ADDBA No Fragmentation", "wlan.addba.no_frag",
46103 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
46104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46105
46106 {&hf_ieee80211_tag_addba_ext_he_fragmentation_operation,
46107 {"ADDBA HE Fragmentation Operation", "wlan.addba.he_frag_oper",
46108 FT_UINT8, BASE_HEX, NULL((void*)0), 0x06,
46109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46110
46111 {&hf_ieee80211_tag_addba_ext_reserved,
46112 {"Reserved", "wlan.addba.reserved",
46113 FT_UINT8, BASE_HEX, NULL((void*)0), 0x18,
46114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46115
46116 {&hf_ieee80211_tag_addba_ext_buffer_size,
46117 {"Extended Buffer Size", "wlan.addba.extended_buffer_size",
46118 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46119
46120 {&hf_ieee80211_tag_multi_band_ctrl_sta_role,
46121 {"STA Rold", "wlan.multi_band.ctrl_sta_role",
46122 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
46123 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46124
46125 {&hf_ieee80211_tag_multi_band_ctrl_addr_present,
46126 {"STA MAC Address Present", "wlan.multi_band.ctrl_addr_present",
46127 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
46128 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46129
46130 {&hf_ieee80211_tag_multi_band_ctrl_cipher_present,
46131 {"PCS Present", "wlan.multi_band.ctrl_cipher_present",
46132 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
46133 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46134
46135 {&hf_ieee80211_tag_multi_band_oper_class,
46136 {"Operating Class", "wlan.multi_band.oper_class",
46137 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46138 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46139
46140 {&hf_ieee80211_tag_multi_band_channel_number,
46141 {"Channel Number", "wlan.multi_band.channel_number",
46142 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46143 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46144
46145 {&hf_ieee80211_tag_multi_band_tsf_offset,
46146 {"TSF Offset", "wlan.multi_band.tsf_offset",
46147 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
46148 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46149
46150 {&hf_ieee80211_tag_multi_band_conn_ap,
46151 {"Connection Capability AP", "wlan.multi_band.conn_ap",
46152 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
46153 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46154
46155 {&hf_ieee80211_tag_multi_band_conn_pcp,
46156 {"Connection Capability PCP", "wlan.multi_band.conn_pcp",
46157 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
46158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46159
46160 {&hf_ieee80211_tag_multi_band_conn_dls,
46161 {"Connection Capability DLS", "wlan.multi_band.conn_dls",
46162 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
46163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46164
46165 {&hf_ieee80211_tag_multi_band_conn_tdls,
46166 {"Connection Capability TDLS", "wlan.multi_band.conn_tdls",
46167 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
46168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46169
46170 {&hf_ieee80211_tag_multi_band_conn_ibss,
46171 {"Connection Capability IBSS", "wlan.multi_band.conn_ibss",
46172 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
46173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46174
46175 {&hf_ieee80211_tag_multi_band_fst_timeout,
46176 {"FST Session Timeout", "wlan.multi_band.fst_timeout",
46177 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46178 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46179
46180 {&hf_ieee80211_tag_multi_band_sta_mac,
46181 {"Transmitting STA MAC Address", "wlan.multi_band.sta_mac",
46182 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
46183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46184
46185 {&hf_ieee80211_tag_activity,
46186 {"Activity", "wlan.activity",
46187 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46188 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46189
46190 {&hf_ieee80211_tag_dmg_link_adapt_mcs,
46191 {"MCS", "wlan.dmg_link_adapt.mcs",
46192 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46193 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46194
46195 {&hf_ieee80211_tag_dmg_link_adapt_link_margin,
46196 {"Link Margin", "wlan.dmg_link_adapt.link_margin",
46197 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46198 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46199
46200 {&hf_ieee80211_tag_ref_timestamp,
46201 {"Reference Timestamp", "wlan.ref_timestamp",
46202 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
46203 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46204
46205 {&hf_ieee80211_tag_switching_stream_non_qos,
46206 {"Non-Qos Data Frames", "wlan.switching_stream.non_qos",
46207 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0,
46208 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46209
46210 {&hf_ieee80211_tag_switching_stream_param_num,
46211 {"Number Of Switching Stream Elements", "wlan.switching_stream.param_num",
46212 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46214
46215 {&hf_ieee80211_tag_switching_stream_old_tid,
46216 {"Old Band TID", "wlan.switching_stream.old_tid",
46217 FT_UINT16, BASE_DEC, NULL((void*)0), 0xf000,
46218 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46219
46220 {&hf_ieee80211_tag_switching_stream_old_direction,
46221 {"Old Band Direction", "wlan.switching_stream.old_direction",
46222 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
46223 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46224
46225 {&hf_ieee80211_tag_switching_stream_new_tid,
46226 {"New Band TID", "wlan.switching_stream.new_tid",
46227 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0780,
46228 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46229
46230 {&hf_ieee80211_tag_switching_stream_new_direction,
46231 {"New Band Direction", "wlan.switching_stream.new_direction",
46232 FT_BOOLEAN, 16, NULL((void*)0), 0x0040,
46233 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46234
46235 {&hf_ieee80211_tag_switching_stream_new_valid_id,
46236 {"Stream ID in New Band Valid", "wlan.switching_stream.new_valid_id",
46237 FT_BOOLEAN, 16, NULL((void*)0), 0x0020,
46238 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46239
46240 {&hf_ieee80211_tag_switching_stream_llt_type,
46241 {"LLT Type", "wlan.switching_stream.llt_type",
46242 FT_BOOLEAN, 16, NULL((void*)0), 0x0010,
46243 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46244
46245 {&hf_ieee80211_ff_timestamp,
46246 {"Timestamp", "wlan.fixed.timestamp",
46247 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
46248 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46249
46250 {&hf_ieee80211_ff_auth_alg,
46251 {"Authentication Algorithm", "wlan.fixed.auth.alg",
46252 FT_UINT16, BASE_DEC, VALS(auth_alg)((0 ? (const struct _value_string*)0 : ((auth_alg)))), 0,
46253 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46254
46255 {&hf_ieee80211_ff_beacon_interval,
46256 {"Beacon Interval", "wlan.fixed.beacon",
46257 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (size_t) (beacon_interval_base_custom)), 0,
46258 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46259
46260 {&hf_ieee80211_fixed_parameters,
46261 {"Fixed parameters", "wlan.fixed.all",
46262 FT_NONE, BASE_NONE, NULL((void*)0), 0,
46263 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46264
46265 {&hf_ieee80211_tagged_parameters,
46266 {"Tagged parameters", "wlan.tagged.all",
46267 FT_NONE, BASE_NONE, NULL((void*)0), 0,
46268 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46269
46270 {&hf_ieee80211_tag_ssid,
46271 {"SSID", "wlan.ssid",
46272 FT_BYTES, BASE_SHOW_UTF_8_PRINTABLE0x00020000, NULL((void*)0), 0,
46273 "Indicates the identity of an ESS or IBSS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46274
46275 {&hf_ieee80211_tag_supp_rates,
46276 {"Supported Rates", "wlan.supported_rates",
46277 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_supported_rates_vals_ext, 0x0,
46278 "In Mbit/sec, (B) for Basic Rates", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46279
46280 {&hf_ieee80211_tag_fh_dwell_time,
46281 {"Dwell Time", "wlan.fh.dwell_time",
46282 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
46283 "In Time Unit (TU)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46284
46285 {&hf_ieee80211_tag_fh_hop_set,
46286 {"Hop Set", "wlan.fh.hop_set",
46287 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
46288 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46289
46290 {&hf_ieee80211_tag_fh_hop_pattern,
46291 {"Hop Pattern", "wlan.fh.hop_pattern",
46292 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
46293 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46294
46295 {&hf_ieee80211_tag_fh_hop_index,
46296 {"Hop Index", "wlan.fh.hop_index",
46297 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
46298 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46299
46300 {&hf_ieee80211_ff_block_ack_params,
46301 {"Block Ack Parameters", "wlan.fixed.baparams",
46302 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46303 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46304
46305 {&hf_ieee80211_ff_block_ack_params_amsdu_permitted,
46306 {"A-MSDUs", "wlan.fixed.baparams.amsdu",
46307 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,
46308 "A-MSDU Permitted in QoS Data MPDUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46309
46310 {&hf_ieee80211_ff_block_ack_params_policy,
46311 {"Block Ack Policy", "wlan.fixed.baparams.policy",
46312 FT_BOOLEAN, 16, TFS(&ff_block_ack_params_policy_flag)((0 ? (const struct true_false_string*)0 : ((&ff_block_ack_params_policy_flag
))))
, 0x0002,
46313 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46314
46315 {&hf_ieee80211_ff_block_ack_params_tid,
46316 {"Traffic Identifier", "wlan.fixed.baparams.tid",
46317 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C,
46318 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46319
46320 {&hf_ieee80211_ff_block_ack_params_buffer_size,
46321 {"Number of Buffers (1 Buffer = 2304 Bytes)", "wlan.fixed.baparams.buffersize",
46322 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFC0,
46323 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46324
46325 {&hf_ieee80211_ff_block_ack_timeout,
46326 {"Block Ack Timeout", "wlan.fixed.batimeout",
46327 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46328 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46329
46330 {&hf_ieee80211_ff_block_ack_ssc,
46331 {"Block Ack Starting Sequence Control (SSC)", "wlan.fixed.ssc",
46332 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46333 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46334
46335 {&hf_ieee80211_ff_block_ack_ssc_fragment,
46336 {"Fragment", "wlan.fixed.ssc.fragment",
46337 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000f,
46338 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46339
46340 {&hf_ieee80211_ff_block_ack_ssc_sequence,
46341 {"Starting Sequence Number", "wlan.fixed.ssc.sequence",
46342 FT_UINT16, BASE_DEC, NULL((void*)0), 0xfff0,
46343 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46344
46345 {&hf_ieee80211_ff_delba_param,
46346 {"Delete Block Ack (DELBA) Parameter Set", "wlan.fixed.delba.param",
46347 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46348 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46349
46350 {&hf_ieee80211_ff_delba_param_reserved,
46351 {"Reserved", "wlan.fixed.delba.param.reserved",
46352 FT_UINT16, BASE_HEX, NULL((void*)0), 0x07ff,
46353 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46354
46355 {&hf_ieee80211_ff_delba_param_init,
46356 {"Initiator", "wlan.fixed.delba.param.initiator",
46357 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
46358 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46359
46360 {&hf_ieee80211_ff_delba_param_tid,
46361 {"TID", "wlan.fixed.delba.param.tid",
46362 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
46363 "Traffic Identifier (TID)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46364
46365 {&hf_ieee80211_ff_max_reg_pwr,
46366 {"Maximum Regulation Power", "wlan.fixed.maxregpwr",
46367 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46368 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46369
46370 {&hf_ieee80211_ff_measurement_pilot_int,
46371 {"Measurement Pilot Interval", "wlan.fixed.msmtpilotint",
46372 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46373 "Measurement Pilot Interval Fixed Field (in TUs)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46374
46375 {&hf_ieee80211_ff_country_str,
46376 {"Country String", "wlan.fixed.country",
46377 FT_STRING, BASE_NONE, NULL((void*)0), 0,
46378 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46379
46380 {&hf_ieee80211_ff_max_tx_pwr,
46381 {"Maximum Transmit Power", "wlan.fixed.maxtxpwr",
46382 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46383 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46384
46385 {&hf_ieee80211_ff_tx_pwr_used,
46386 {"Transmit Power Used", "wlan.fixed.txpwr",
46387 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46388 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46389
46390 {&hf_ieee80211_ff_transceiver_noise_floor,
46391 {"Transceiver Noise Floor", "wlan.fixed.tnoisefloor",
46392 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46393 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46394
46395 {&hf_ieee80211_ff_channel_width,
46396 {"Supported Channel Width", "wlan.fixed.chanwidth",
46397 FT_UINT8, BASE_HEX, VALS(ff_channel_width_vals)((0 ? (const struct _value_string*)0 : ((ff_channel_width_vals
))))
, 0,
46398 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46399
46400 {&hf_ieee80211_ff_qos_info_ap,
46401 {"QoS Information (AP)", "wlan.fixed.qosinfo.ap",
46402 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46403 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46404
46405 {&hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
46406 {"EDCA Parameter Set Update Count", "wlan.fixed.qosinfo.ap.edcaupdate",
46407 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F,
46408 "Enhanced Distributed Channel Access (EDCA) Parameter Set Update Count", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46409
46410 {&hf_ieee80211_ff_qos_info_ap_q_ack,
46411 {"Q-Ack", "wlan.fixed.qosinfo.ap.qack",
46412 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,
46413 "QoS Ack", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46414
46415 {&hf_ieee80211_ff_qos_info_ap_queue_req,
46416 {"Queue Request", "wlan.fixed.qosinfo.ap.queue_req",
46417 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,
46418 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46419
46420 {&hf_ieee80211_ff_qos_info_ap_txop_request,
46421 {"TXOP Request", "wlan.fixed.qosinfo.ap.txopreq",
46422 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,
46423 "Transmit Opportunity (TXOP) Request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46424
46425 {&hf_ieee80211_ff_qos_info_ap_more_data_ack,
46426 {"More Data Ack", "wlan.fixed.qosinfo.ap.more_data_ack",
46427 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
46428 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46429
46430 {&hf_ieee80211_ff_qos_info_sta,
46431 {"QoS Information (STA)", "wlan.fixed.qosinfo.sta",
46432 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46433 "TCLAS Processing", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46434
46435 {&hf_ieee80211_ff_qos_info_sta_ac_vo,
46436 {"AC_VO U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_vo",
46437 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x01,
46438 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46439
46440 {&hf_ieee80211_ff_qos_info_sta_ac_vi,
46441 {"AC_VI U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_vi",
46442 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x02,
46443 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46444
46445 {&hf_ieee80211_ff_qos_info_sta_ac_bk,
46446 {"AC_BK U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_bk",
46447 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x04,
46448 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46449
46450 {&hf_ieee80211_ff_qos_info_sta_ac_be,
46451 {"AC_BE U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_be",
46452 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x08,
46453 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46454
46455 {&hf_ieee80211_ff_qos_info_sta_q_ack,
46456 {"Q-Ack", "wlan.fixed.qosinfo.sta.qack",
46457 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,
46458 "QoS Ack", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46459
46460 {&hf_ieee80211_ff_qos_info_sta_max_sp_length,
46461 {"Max SP Length", "wlan.fixed.qosinfo.sta.max_sp_length",
46462 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,
46463 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46464
46465 {&hf_ieee80211_ff_qos_info_sta_more_data_ack,
46466 {"More Data Ack", "wlan.fixed.qosinfo.sta.more_data_ack",
46467 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,
46468 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46469
46470 {&hf_ieee80211_ff_sm_pwr_save,
46471 {"Spatial Multiplexing (SM) Power Control", "wlan.fixed.sm.powercontrol",
46472 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46473 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46474
46475 {&hf_ieee80211_ff_sm_pwr_save_enabled,
46476 {"SM Power Save", "wlan.fixed.sm.powercontrol.enabled",
46477 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
46478 "Spatial Multiplexing (SM) Power Save", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46479
46480 {&hf_ieee80211_ff_sm_pwr_save_sm_mode,
46481 {"SM Mode", "wlan.fixed.sm.powercontrol.mode",
46482 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,
46483 "Spatial Multiplexing (SM) Mode", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46484
46485 {&hf_ieee80211_ff_sm_pwr_save_reserved,
46486 {"Reserved", "wlan.fixed.sm.powercontrol.reserved",
46487 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
46488 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46489
46490 {&hf_ieee80211_ff_pco_phase_cntrl,
46491 {"Phased Coexistence Operation (PCO) Phase Control", "wlan.fixed.pco.phasecntrl",
46492 FT_BOOLEAN, BASE_NONE, TFS(&ff_pco_phase_cntrl_flag)((0 ? (const struct true_false_string*)0 : ((&ff_pco_phase_cntrl_flag
))))
, 0x0,
46493 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46494
46495 {&hf_ieee80211_ff_psmp_param_set,
46496 {"Power Save Multi-Poll (PSMP) Parameter Set", "wlan.fixed.psmp.paramset",
46497 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46498 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46499
46500 {&hf_ieee80211_ff_psmp_param_set_n_sta,
46501 {"Number of STA Info Fields Present", "wlan.fixed.psmp.paramset.nsta",
46502 FT_UINT16, BASE_HEX, NULL((void*)0), 0x000F,
46503 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46504
46505 {&hf_ieee80211_ff_psmp_param_set_more_psmp,
46506 {"More PSMP", "wlan.fixed.psmp.paramset.more",
46507 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,
46508 "More Power Save Multi-Poll (PSMP)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46509
46510 {&hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
46511 {"PSMP Sequence Duration [us]", "wlan.fixed.psmp.paramset.seqduration",
46512 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFE0,
46513 "Power Save Multi-Poll (PSMP) Sequence Duration", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46514
46515 {&hf_ieee80211_ff_mimo_cntrl,
46516 {"MIMO Control", "wlan.fixed.mimo.control",
46517 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
46518 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46519
46520 {&hf_ieee80211_ff_mimo_cntrl_nc_index,
46521 {"Nc Index", "wlan.fixed.mimo.control.ncindex",
46522 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nc_index_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_nc_index_flags
))))
, 0x0003,
46523 "Number of Columns Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46524
46525 {&hf_ieee80211_ff_mimo_cntrl_nr_index,
46526 {"Nr Index", "wlan.fixed.mimo.control.nrindex",
46527 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nr_index_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_nr_index_flags
))))
, 0x000C,
46528 "Number of Rows Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46529
46530 {&hf_ieee80211_ff_mimo_cntrl_channel_width,
46531 {"Channel Width", "wlan.fixed.mimo.control.chanwidth",
46532 FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag)((0 ? (const struct true_false_string*)0 : ((&ff_mimo_cntrl_channel_width_flag
))))
, 0x0010,
46533 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46534
46535 {&hf_ieee80211_ff_mimo_cntrl_grouping,
46536 {"Grouping (Ng)", "wlan.fixed.mimo.control.grouping",
46537 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_grouping_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_grouping_flags
))))
, 0x0060,
46538 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46539
46540 {&hf_ieee80211_ff_mimo_cntrl_coefficient_size,
46541 {"Coefficient Size (Nb)", "wlan.fixed.mimo.control.cosize",
46542 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_coefficient_size_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_coefficient_size_flags
))))
, 0x0180,
46543 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46544
46545 {&hf_ieee80211_ff_mimo_cntrl_codebook_info,
46546 {"Codebook Information", "wlan.fixed.mimo.control.codebookinfo",
46547 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_codebook_info_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_codebook_info_flags
))))
, 0x0600,
46548 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46549
46550 {&hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
46551 {"Remaining Matrix Segment", "wlan.fixed.mimo.control.matrixseg",
46552 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3800,
46553 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46554
46555 {&hf_ieee80211_ff_mimo_cntrl_reserved,
46556 {"Reserved", "wlan.fixed.mimo.control.reserved",
46557 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000,
46558 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46559
46560 {&hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
46561 {"Sounding Timestamp", "wlan.fixed.mimo.control.soundingtime",
46562 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
46563 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46564
46565 {&hf_ieee80211_ff_ftm_param_delim1,
46566 {"FTM Params (Subset 1 of 3)", "wlan.fixed.ftm.param.delim1",
46567 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
46568 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46569
46570 {&hf_ieee80211_ff_ftm_param_status_indication,
46571 {"Status Indication", "wlan.fixed.ftm.param.status_indication",
46572 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0003,
46573 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46574
46575 {&hf_ieee80211_ff_ftm_param_value,
46576 {"Value", "wlan.fixed.ftm.param.value",
46577 FT_UINT16, BASE_HEX, NULL((void*)0), 0x007C,
46578 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46579
46580 {&hf_ieee80211_ff_ftm_param_reserved1,
46581 {"Reserved1", "wlan.fixed.ftm.param.reserved1",
46582 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0080,
46583 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46584
46585 {&hf_ieee80211_ff_ftm_param_burst_exponent,
46586 {"Number of Burst Exponent", "wlan.fixed.ftm.param.burst_exponent",
46587 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0F00,
46588 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46589
46590 {&hf_ieee80211_ff_ftm_param_burst_duration,
46591 {"Burst Duration", "wlan.fixed.ftm.param.burst_duration",
46592 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
46593 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46594
46595 {&hf_ieee80211_ff_ftm_param_delim2,
46596 {"FTM Params (Subset 2 of 3)", "wlan.fixed.ftm.param.delim2",
46597 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
46598 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46599
46600 {&hf_ieee80211_ff_ftm_param_min_delta_ftm,
46601 {"Min Delta FTM", "wlan.fixed.ftm.param.min_delta_ftm",
46602 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000FF,
46603 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46604
46605 {&hf_ieee80211_ff_ftm_param_partial_tsf_timer,
46606 {"Partial TSF timer", "wlan.fixed.ftm.param.partial_tsf_timer",
46607 FT_UINT32, BASE_CUSTOM, CF_FUNC(partial_tsf_custom)((const void *) (size_t) (partial_tsf_custom)), 0x00FFFF00,
46608 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46609
46610 {&hf_ieee80211_ff_ftm_param_partial_tsf_no_pref,
46611 {"Partial TSF no pref", "wlan.fixed.ftm.param.partial_tsf_no_pref",
46612 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01000000,
46613 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46614
46615 {&hf_ieee80211_ff_ftm_param_asap_capable,
46616 {"ASAP Capable", "wlan.fixed.ftm.param.asap_capable",
46617 FT_UINT32, BASE_HEX, NULL((void*)0), 0x02000000,
46618 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46619
46620 {&hf_ieee80211_ff_ftm_param_asap,
46621 {"ASAP", "wlan.fixed.ftm.param.asap",
46622 FT_UINT32, BASE_HEX, NULL((void*)0), 0x04000000,
46623 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46624
46625 {&hf_ieee80211_ff_ftm_param_ftm_per_burst,
46626 {"FTM per burst", "wlan.fixed.ftm.param.ftm_per_burst",
46627 FT_UINT32, BASE_HEX, NULL((void*)0), 0xF8000000,
46628 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46629
46630 {&hf_ieee80211_ff_ftm_param_delim3,
46631 {"FTM Params (Subset 3 of 3)", "wlan.fixed.ftm.param.delim3",
46632 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
46633 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46634
46635 {&hf_ieee80211_ff_ftm_param_reserved2,
46636 {"Reserved2", "wlan.fixed.ftm.param.reserved2",
46637 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000003,
46638 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46639
46640 {&hf_ieee80211_ff_ftm_param_format_and_bw,
46641 {"Format and Bandwidth", "wlan.fixed.ftm.param.format_and_bw",
46642 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0000FC,
46643 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46644
46645 {&hf_ieee80211_ff_ftm_param_burst_period,
46646 {"Burst Period", "wlan.fixed.ftm.param.burst_period",
46647 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFFF00,
46648 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46649
46650 {&hf_ieee80211_ff_ftm_tod_err1,
46651 {"FTM TOD Error", "wlan.fixed.ftm.tod_error",
46652 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46653 "Management action FTM LMR TOD Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46654
46655 /* az: Ranging Parameters element */
46656
46657 {&hf_ieee80211_tag_ranging_parameters,
46658 {"Ranging Parameters", "wlan.ranging",
46659 FT_UINT56, BASE_HEX, NULL((void*)0), 0,
46660 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46661
46662 {&hf_ieee80211_tag_ranging_subelt_tag,
46663 {"Subelement Tag", "wlan.tag.ranging.subelt_tag",
46664 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46665
46666 {&hf_ieee80211_tag_ranging_subelt_len,
46667 {"Subelement Len", "wlan.tag.ranging.subelt_len",
46668 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46669
46670 {&hf_ieee80211_tag_ranging_status_indication,
46671 {"Status Indication", "wlan.ranging.status",
46672 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)),
46673 "Status Indication", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46674
46675 {&hf_ieee80211_tag_ranging_value,
46676 {"Value", "wlan.ranging.value",
46677 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(6, 2)(((1U << ((6) - (2) + 1)) - 1) << (2)),
46678 "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) }},
46679
46680 {&hf_ieee80211_tag_ranging_i2r_lmr_feedback,
46681 {"I2R LMR Feedback", "wlan.ranging.i2r_lmr_feedback",
46682 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(7, 7)(((1U << ((7) - (7) + 1)) - 1) << (7)),
46683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46684
46685 {&hf_ieee80211_tag_ranging_secure_ltf_required,
46686 {"Secure LTF Required", "wlan.ranging.secure_ltf_required",
46687 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(8, 8)(((1U << ((8) - (8) + 1)) - 1) << (8)),
46688 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46689
46690 {&hf_ieee80211_tag_ranging_secure_ltf_support,
46691 {"Secure LTF Support", "wlan.ranging.secure_ltf_support",
46692 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(9, 9)(((1U << ((9) - (9) + 1)) - 1) << (9)),
46693 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46694
46695 {&hf_ieee80211_tag_ranging_ranging_priority,
46696 {"Ranging Priority", "wlan.ranging.priority",
46697 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(11, 10)(((1U << ((11) - (10) + 1)) - 1) << (10)),
46698 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46699
46700 {&hf_ieee80211_tag_ranging_r2i_toa_type,
46701 {"R2I TOA Type", "wlan.ranging.r2i_toa_type",
46702 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(12, 12)(((1U << ((12) - (12) + 1)) - 1) << (12)),
46703 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46704
46705 {&hf_ieee80211_tag_ranging_i2r_toa_type,
46706 {"I2R TOA Type", "wlan.ranging.i2r_toa_type",
46707 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(13, 13)(((1U << ((13) - (13) + 1)) - 1) << (13)),
46708 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46709
46710 {&hf_ieee80211_tag_ranging_r2i_aoa_requested,
46711 {"R2I AOA Requested", "wlan.ranging.r2i_aoa_requested",
46712 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(14, 14)(((1U << ((14) - (14) + 1)) - 1) << (14)),
46713 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46714
46715 {&hf_ieee80211_tag_ranging_i2r_aoa_requested,
46716 {"I2R AOA Requested", "wlan.ranging.i2r_aoa_requested",
46717 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(15, 15)(((1U << ((15) - (15) + 1)) - 1) << (15)),
46718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46719
46720 {&hf_ieee80211_tag_ranging_format_and_bandwidth,
46721 {"Format and Bandwidth", "wlan.ranging.format_and_bandwidth",
46722 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)),
46723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46724
46725 {&hf_ieee80211_tag_ranging_immediate_r2i_feedback,
46726 {"Immediate R2I Feedback", "wlan.ranging.immediate_r2i_feedback",
46727 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(22, 22)(((1U << ((22) - (22) + 1)) - 1) << (22)),
46728 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46729
46730 {&hf_ieee80211_tag_ranging_immediate_i2r_feedback,
46731 {"Immediate I2R Feedback", "wlan.ranging.immediate_i2r_feedback",
46732 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(23, 23)(((1U << ((23) - (23) + 1)) - 1) << (23)),
46733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46734
46735 {&hf_ieee80211_tag_ranging_max_i2r_repetition,
46736 {"Max I2R Repetition", "wlan.ranging.max_i2r_repetition",
46737 FT_UINT56, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(26, 24)(((1U << ((26) - (24) + 1)) - 1) << (24)),
46738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46739
46740 {&hf_ieee80211_tag_ranging_max_r2i_repetition,
46741 {"Max R2I Repetition", "wlan.ranging.max_r2i_repetition",
46742 FT_UINT56, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(29, 27)(((1U << ((29) - (27) + 1)) - 1) << (27)),
46743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46744
46745 {&hf_ieee80211_tag_ranging_reserved1,
46746 {"Reserved", "wlan.ranging.reserved1",
46747 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(30, 30)(((1U << ((30) - (30) + 1)) - 1) << (30)),
46748 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46749
46750 {&hf_ieee80211_tag_ranging_reserved2,
46751 {"Reserved", "wlan.ranging.reserved2",
46752 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(31, 31)(((1U << ((31) - (31) + 1)) - 1) << (31)),
46753 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46754
46755 {&hf_ieee80211_tag_ranging_max_r2i_sts_le_80_mhz,
46756 {"Max R2I STS <= 80 MHz", "wlan.ranging.max_r2i_sts_le_80_mhz",
46757 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(34, 32)(((1UL << ((34) - (32) + 1)) - 1) << (32)),
46758 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46759
46760 {&hf_ieee80211_tag_ranging_max_r2i_sts_gt_80_mhz,
46761 {"Max R2I STS > 80 MHz", "wlan.ranging.max_r2i_sts_gt_80_mhz",
46762 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(37, 35)(((1UL << ((37) - (35) + 1)) - 1) << (35)),
46763 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46764
46765 {&hf_ieee80211_tag_ranging_max_r2i_ltf_total,
46766 {"Max R2I LTF Total", "wlan.ranging.max_r2i_ltf_total",
46767 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)),
46768 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46769
46770 {&hf_ieee80211_tag_ranging_max_i2r_ltf_total,
46771 {"Max I2R LTF Total", "wlan.ranging.max_i2r_ltf_total",
46772 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)),
46773 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46774
46775 {&hf_ieee80211_tag_ranging_max_i2r_sts_le_80_mhz,
46776 {"Max I2R STS <= 80 MHz", "wlan.ranging.max_i2r_sts_le_80_mhz",
46777 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(44, 42)(((1UL << ((44) - (42) + 1)) - 1) << (42)),
46778 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46779
46780 {&hf_ieee80211_tag_ranging_max_i2r_sts_gt_80_mhz,
46781 {"Max I2R STS > 80 MHz", "wlan.ranging.max_i2r_sts_gt_80_mhz",
46782 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(47, 45)(((1UL << ((47) - (45) + 1)) - 1) << (45)),
46783 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46784
46785 {&hf_ieee80211_tag_ranging_bss_color_info,
46786 {"BSS Color Information",
46787 "wlan.tag.ftm.param.ranging.bss_color_information",
46788 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) }},
46789
46790 /* az: non-TB-specific subelement */
46791
46792 {&hf_ieee80211_tag_ranging_ntb,
46793 {"Non-TB specific subelement", "wlan.ranging.ntb",
46794 FT_UINT48, BASE_HEX, NULL((void*)0), 0,
46795 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46796
46797 {&hf_ieee80211_tag_ranging_ntb_reserved1,
46798 {"Reserved", "wlan.ranging.ntb.reserved1",
46799 FT_UINT48, BASE_DEC, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
46800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46801
46802 {&hf_ieee80211_tag_ranging_ntb_min_time_msmts,
46803 {"Min Time Between Measurements", "wlan.ranging.ntb.min_time",
46804 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)),
46805 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46806
46807 {&hf_ieee80211_tag_ranging_ntb_max_time_msmts,
46808 {"Max Time Between Measurements", "wlan.ranging.ntb.max_time",
46809 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)),
46810 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46811
46812 {&hf_ieee80211_tag_ranging_ntb_r2i_tx_power,
46813 {"R2I Tx Power", "wlan.ranging.ntb.r2i_tx_power",
46814 FT_UINT48, BASE_DEC, NULL((void*)0), GENMASK64(44, 44)(((1UL << ((44) - (44) + 1)) - 1) << (44)),
46815 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46816
46817 {&hf_ieee80211_tag_ranging_ntb_i2r_tx_power,
46818 {"I2R Tx Power", "wlan.ranging.ntb.i2r_tx_power",
46819 FT_UINT48, BASE_DEC, NULL((void*)0), GENMASK64(45, 45)(((1UL << ((45) - (45) + 1)) - 1) << (45)),
46820 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46821
46822 {&hf_ieee80211_tag_ranging_ntb_reserved2,
46823 {"Reserved", "wlan.ranging.ntb.reserved2",
46824 FT_UINT48, BASE_HEX, NULL((void*)0), GENMASK64(47, 46)(((1UL << ((47) - (46) + 1)) - 1) << (46)),
46825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46826
46827 {&hf_ieee80211_tag_ranging_aid_rsid,
46828 {"AID/RSID", "wlan.ranging.tb.aid_rsid",
46829 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000ffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46830
46831 {&hf_ieee80211_tag_ranging_device_class,
46832 {"Device Class", "wlan.ranging.tb.device_class",
46833 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46834
46835 {&hf_ieee80211_tag_ranging_full_bw_ul_mu_mimo,
46836 {"Full Bandwidth UL MU-MIMO", "wlan.ranging.tb.full_bw_ul_mu_mimo",
46837 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46838
46839 {&hf_ieee80211_tag_ranging_trigger_frame_paddur,
46840 {"Trigger Frame Padding Duration",
46841 "wlan.ranging.tb.trigger_frame_padding_duration",
46842 FT_BOOLEAN, 32, NULL((void*)0), 0x000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46843
46844 {&hf_ieee80211_tag_ranging_max_sess_exp,
46845 {"Max Session Exp", "wlan.ranging.tb.max_session.exp",
46846 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00f00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46847
46848 {&hf_ieee80211_tag_ranging_passive_tb_ranging,
46849 {"Passive TB Ranging", "wlan.ranging.tb.passive_tb_ranging",
46850 FT_BOOLEAN, 32, NULL((void*)0), 0x01000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46851
46852 {&hf_ieee80211_tag_ranging_tb_specific_reserved,
46853 {"Reserved", "wlan.ranging.tb.reserved",
46854 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFE000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46855
46856 {&hf_ieee80211_tag_ranging_secure_he_ltf,
46857 {"Secure HE-LTF subelement", "wlan.ranging.secure_he_ltf",
46858 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
46859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46860
46861 {&hf_ieee80211_tag_ranging_secure_he_ltf_version,
46862 {"Protocol Version", "wlan.ranging.secure_he_ltf.version",
46863 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
46864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46865
46866 {&hf_ieee80211_tag_ranging_secure_he_ltf_req,
46867 {"Secure HE-LTF Req", "wlan.ranging.secure_he_ltf.req",
46868 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
46869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46870
46871 {&hf_ieee80211_tag_ranging_secure_he_ltf_r2i_tx_window,
46872 {"R2I Tx Window", "wlan.ranging.secure_he_ltf.r2i_tx_window",
46873 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
46874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46875
46876 {&hf_ieee80211_tag_ranging_secure_he_ltf_i2r_tx_window,
46877 {"I2R Tx Window", "wlan.ranging.secure_he_ltf.i2r_tx_window",
46878 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
46879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46880
46881 {&hf_ieee80211_tag_ranging_secure_he_ltf_reserved,
46882 {"Reserved", "wlan.ranging.secure_he_ltf.reserved",
46883 FT_UINT8, BASE_HEX, NULL((void*)0), 0xc0,
46884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46885
46886 {&hf_ieee80211_tag_dirn_meas_results_aoa_results,
46887 {"AOA Results", "wlan.etag.direction_measurement_results.aoa_results",
46888 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46889
46890 {&hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth,
46891 {"AOA Azimuth", "wlan.etag.direction_measurement_results.aoa_azimuth",
46892 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_azimuth_custom)((const void *) (size_t) (aoa_azimuth_custom)),
46893 0x0000000007ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46894
46895 {&hf_ieee80211_tag_ftm_aoa_results_aoa_elevation,
46896 {"AOA Elevation", "wlan.etag.direction_measurement_results.aoa_elevation",
46897 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_elevation_custom)((const void *) (size_t) (aoa_elevation_custom)),
46898 0x0000001ff800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46899
46900 {&hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth_accuracy,
46901 {"AOA Azimuth Accuracy",
46902 "wlan.etag.direction_measurement_results.aoa_azimuth_accuracy",
46903 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_accuracy_custom)((const void *) (size_t) (aoa_accuracy_custom)),
46904 0x00000fe00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46905
46906 {&hf_ieee80211_tag_ftm_aoa_results_aoa_elevation_accuracy,
46907 {"AOA Elevation Accuracy",
46908 "wlan.etag.direction_measurement_results.aoa_elevation_accuracy",
46909 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_accuracy_custom)((const void *) (size_t) (aoa_accuracy_custom)),
46910 0x0007f0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46911
46912 {&hf_ieee80211_tag_ftm_aoa_results_best_awv_id,
46913 {"Best AWV ID", "wlan.etag.direction_measurement_results.best_awv_id",
46914 FT_UINT48, BASE_DEC, NULL((void*)0), 0x3ff800000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46915
46916 {&hf_ieee80211_tag_ftm_aoa_results_aoa_reference,
46917 {"AOA Reference", "wlan.etag.direction_measurement_results.aoa_reference",
46918 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) }},
46919
46920 {&hf_ieee80211_tag_ftm_aoa_results_reserved,
46921 {"Reserved", "wlan.etag.direction_measurement_results.reserved",
46922 FT_UINT48, BASE_DEC, NULL((void*)0), 0x800000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46923
46924 {&hf_ieee80211_ff_ftm_max_tod_error_exponent,
46925 {"Max TOD Error Exponent", "wlan.fixed.ftm.max_tod_error_exponent",
46926 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) }},
46927
46928 {&hf_ieee80211_ff_ftm_tod_err_reserved,
46929 {"Reserved", "wlan.fixed.ftm.tod_reserved",
46930 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) }},
46931
46932 {&hf_ieee80211_ff_ftm_tod_not_continuous,
46933 {"TOD Not Continuous", "wlan.fixed.ftm.tod_not_continuous",
46934 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) }},
46935
46936 {&hf_ieee80211_ff_ftm_toa_err1,
46937 {"FTM TOA Error", "wlan.fixed.ftm_toa_err",
46938 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46939 "Management action FTM LMR TOA Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46940
46941 {&hf_ieee80211_ff_ftm_max_toa_error_exponent,
46942 {"Max TOA Error Exponent", "wlan.fixed.ftm_max_toa_error_exponent",
46943 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) }},
46944
46945 {&hf_ieee80211_ff_ftm_toa_err_reserved,
46946 {"Reserved", "wlan.fixed.ftm_toa_reserved",
46947 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) }},
46948
46949 {&hf_ieee80211_ff_ftm_invalid_measurement,
46950 {"Invalid Measurement", "wlan.fixed.ftm_invalid_measurement",
46951 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) }},
46952
46953 {&hf_ieee80211_ff_ftm_toa_type,
46954 {"TOA Type", "wlan.fixed.ftm_toa_type",
46955 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) }},
46956
46957 {&hf_ieee80211_ff_ftm_cfo,
46958 {"CFO", "wlan.fixed.ftm.param.cfo",
46959 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46961
46962 {&hf_ieee80211_ff_ftm_r2i_ndp_tx_power,
46963 {"R2I NDP Tx Power", "wlan.fixed.ftm.param.r2i_ndp_tx_power",
46964 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46966
46967 {&hf_ieee80211_ff_ftm_i2r_ndp_target_rssi,
46968 {"I2R NDP Target RSSI", "wlan.fixed.ftm.param.i2r_ndp_target_rssi",
46969 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46971
46972 {&hf_ieee80211_tag_secure_ltf_params_counter,
46973 {"Secure LTF Counter", "wlan.etag.secure_ltf_params.secure_ltf_counter",
46974 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46975
46976 {&hf_ieee80211_tag_secure_ltf_generation_sac,
46977 {"LTF Generation SAC", "wlan.etag.secure_ltf_params.ltf_generation_sac",
46978 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46979
46980 {&hf_ieee80211_tag_secure_ltf_management_sac,
46981 {"Ranging Management SAC",
46982 "wlan.etag.secure_ltf_params.ranging_management_sac",
46983 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46984
46985 {&hf_ieee80211_tag_secure_ltf_result_ltf_ofs,
46986 {"Measurement Result LTF Offset",
46987 "wlan.etag.secure_ltf_params.measurement_result_ltf_offset",
46988 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46989
46990 {&hf_ieee80211_ftm_ista_availability_count,
46991 {"ISTA Availability Count", "wlan.ranging.ista.availability_count",
46992 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46993
46994 {&hf_ieee80211_ftm_ista_availability_reserved,
46995 {"Reserved", "wlan.ranging.ista.availability_reserved",
46996 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46997
46998 {&hf_ieee80211_ftm_ista_avail_bits,
46999 {"ISTA Availability", "wlan.ranging.ista.availability_bits",
47000 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47001
47002 {&hf_ieee80211_ftm_ista_avail_pad,
47003 {"Padding", "wlan.ranging.ista.availability_pad",
47004 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47005
47006 {&hf_ieee80211_ftm_rsta_header,
47007 {"Header", "wlan.ftm.rsta.header",
47008 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47009
47010 {&hf_ieee80211_ftm_rsta_count,
47011 {"RSTA Count", "wlan.ranging.rsta.count",
47012 FT_UINT8, BASE_HEX, NULL((void*)0), 0x7F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47013
47014 {&hf_ieee80211_ftm_rsta_avail_window_bcast_fmt,
47015 {"Availability Window Broadcast Format",
47016 "wlan.ftm.rsta.availability_window_broadcast_format",
47017 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47018
47019 {&hf_ieee80211_ftm_rsta_partial_tsf_timer1,
47020 {"Partial TSF Timer", "wlan.ranging.rsta.partial_tsf_timer",
47021 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) }},
47022
47023 {&hf_ieee80211_ftm_rsta_duration1,
47024 {"Duration", "wlan.ranging.rsta.duration",
47025 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) }},
47026
47027 {&hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved1,
47028 {"Reserved", "wlan.ranging.rsta.reserved1",
47029 FT_BOOLEAN, 32, NULL((void*)0), 0x00800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47030
47031 {&hf_ieee80211_ftm_rsta_periodicity1,
47032 {"Periodicity", "wlan.ranging.rsta.periodicity1",
47033 FT_UINT32, BASE_DEC, NULL((void*)0), 0xff000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47034
47035 {&hf_ieee80211_ftm_rsta_partial_tsf_timer,
47036 {"Partial TSF Timer", "wlan.ranging.rsta.partial_tsf_timer_long",
47037 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) }},
47038
47039 {&hf_ieee80211_ftm_rsta_duration,
47040 {"Duration", "wlan.ranging.rsta.duration_long",
47041 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) }},
47042
47043 {&hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved,
47044 {"Reserved", "wlan.ranging.rsta.reserved",
47045 FT_BOOLEAN, 40, NULL((void*)0), 0x0000800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47046
47047 {&hf_ieee80211_ftm_rsta_periodicity,
47048 {"Periodicity", "wlan.ranging.rsta.periodicity",
47049 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00ff000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47050
47051 {&hf_ieee80211_ftm_rsta_format_and_bandwidth,
47052 {"Format and Bandwidth", "wlan.ftm.rsta.format_and_bandwidth",
47053 FT_UINT40, BASE_HEX, NULL((void*)0), 0x3F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47054
47055 {&hf_ieee80211_ftm_rsta_reserved,
47056 {"Reserved", "wlan.ftm.rsta.reserved",
47057 FT_UINT40, BASE_HEX, NULL((void*)0), 0xC000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47058
47059 {&hf_ieee80211_ftm_rsta_avail_subfield_short,
47060 {"RSTA Availability Information", "wlan.ranging.rsta.availability_window",
47061 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47062
47063 {&hf_ieee80211_ftm_rsta_avail_subfield_long,
47064 {"RSTA Availability Information",
47065 "wlan.ranging.rsta.availability_window_long",
47066 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47067
47068 {&hf_ieee80211_ff_psmp_sta_info,
47069 {"Power Save Multi-Poll (PSMP) Station Information", "wlan.fixed.psmp.stainfo",
47070 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
47071 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47072
47073 {&hf_ieee80211_ff_psmp_sta_info_type,
47074 {"Sta Info Type", "wlan.fixed.psmp.stainfo.type",
47075 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,
47076 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47077
47078 {&hf_ieee80211_ff_psmp_sta_info_dtt_start_offset,
47079 {"DTT Start Offset", "wlan.fixed.psmp.stainfo.dttstart",
47080 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_DTT_START0x00001FFC,
47081 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47082
47083 {&hf_ieee80211_ff_psmp_sta_info_dtt_duration,
47084 {"DTT Duration", "wlan.fixed.psmp.stainfo.dttduration",
47085 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_DTT_DURATION0x001FE000,
47086 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47087
47088 {&hf_ieee80211_ff_psmp_sta_info_sta_id,
47089 {"Target Station ID", "wlan.fixed.psmp.stainfo.staid",
47090 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_STA_ID0x001FFFE0,
47091 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47092
47093 {&hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
47094 {"UTT Start Offset", "wlan.fixed.psmp.stainfo.uttstart",
47095 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_UTT_START0x0000FFE0,
47096 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47097
47098 {&hf_ieee80211_ff_psmp_sta_info_utt_duration,
47099 {"UTT Duration", "wlan.fixed.psmp.stainfo.uttduration",
47100 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_UTT_DURATION0x03FF0000,
47101 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47102
47103 {&hf_ieee80211_ff_psmp_sta_info_reserved_small,
47104 {"Reserved", "wlan.fixed.psmp.stainfo.reserved",
47105 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_IA_RESERVED0xFC000000,
47106 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47107
47108 {&hf_ieee80211_ff_psmp_sta_info_reserved_large,
47109 {"Reserved", "wlan.fixed.psmp.stainfo.reserved64",
47110 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
47111 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47112
47113 {&hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
47114 {"Power Save Multi-Poll (PSMP) Multicast ID", "wlan.fixed.psmp.stainfo.multicastid",
47115 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
47116 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47117
47118 {&hf_ieee80211_ff_ant_selection,
47119 {"Antenna Selection", "wlan.fixed.antsel",
47120 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47121 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47122
47123 {&hf_ieee80211_ff_ant_selection_0,
47124 {"Antenna 0", "wlan.fixed.antsel.ant0",
47125 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
47126 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47127
47128 {&hf_ieee80211_ff_ant_selection_1,
47129 {"Antenna 1", "wlan.fixed.antsel.ant1",
47130 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
47131 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47132
47133 {&hf_ieee80211_ff_ant_selection_2,
47134 {"Antenna 2", "wlan.fixed.antsel.ant2",
47135 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04,
47136 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47137
47138 {&hf_ieee80211_ff_ant_selection_3,
47139 {"Antenna 3", "wlan.fixed.antsel.ant3",
47140 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
47141 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47142
47143 {&hf_ieee80211_ff_ant_selection_4,
47144 {"Antenna 4", "wlan.fixed.antsel.ant4",
47145 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10,
47146 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47147
47148 {&hf_ieee80211_ff_ant_selection_5,
47149 {"Antenna 5", "wlan.fixed.antsel.ant5",
47150 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20,
47151 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47152
47153 {&hf_ieee80211_ff_ant_selection_6,
47154 {"Antenna 6", "wlan.fixed.antsel.ant6",
47155 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40,
47156 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47157
47158 {&hf_ieee80211_ff_ant_selection_7,
47159 {"Antenna 7", "wlan.fixed.antsel.ant7",
47160 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
47161 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47162
47163 {&hf_ieee80211_ff_ext_channel_switch_announcement,
47164 {"Extended Channel Switch Announcement", "wlan.fixed.extchansw",
47165 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
47166 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47167
47168 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
47169 {"Channel Switch Mode", "wlan.fixed.extchansw.switchmode",
47170 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,
47171 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47172
47173 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
47174 {"New Operating Class", "wlan.fixed.extchansw.new.opeclass",
47175 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FF00,
47176 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47177
47178 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
47179 {"New Channel Number", "wlan.fixed.extchansw.new.channumber",
47180 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00FF0000,
47181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47182
47183 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
47184 {"Channel Switch Count", "wlan.extchansw.switchcount",
47185 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFF000000,
47186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47187
47188 {&hf_ieee80211_ff_ht_info,
47189 {"HT Information", "wlan.fixed.mimo",
47190 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47191 "HT Information Fixed Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47192
47193 {&hf_ieee80211_ff_ht_info_information_request,
47194 {"Information Request", "wlan.fixed.mimo.control.inforequest",
47195 FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag)((0 ? (const struct true_false_string*)0 : ((&ff_ht_info_information_request_flag
))))
, 0x01,
47196 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47197
47198 {&hf_ieee80211_ff_ht_info_40_mhz_intolerant,
47199 {"40 MHz Intolerant", "wlan.fixed.mimo.control.intolerant",
47200 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,
47201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47202
47203 {&hf_ieee80211_ff_ht_info_sta_chan_width,
47204 {"Station Channel Width", "wlan.fixed.mimo.control.chanwidth",
47205 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,
47206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47207
47208 {&hf_ieee80211_ff_ht_info_reserved,
47209 {"Reserved", "wlan.fixed.reserved",
47210 FT_UINT8, BASE_HEX, 0, 0xF8,
47211 "Reserved Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47212
47213 {&hf_ieee80211_ff_ht_action,
47214 {"HT Action", "wlan.fixed.htact",
47215 FT_UINT8, BASE_HEX, VALS(ff_ht_action_flags)((0 ? (const struct _value_string*)0 : ((ff_ht_action_flags))
))
, 0,
47216 "HT Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47217
47218 {&hf_ieee80211_ff_mimo_csi_snr,
47219 {"Signal to Noise Ratio (SNR)", "wlan.mimo.csimatrices.snr",
47220 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47221 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47222
47223 {&hf_ieee80211_ff_mimo_csi_matrices,
47224 {"CSI Matrices", "wlan.mimo.csimatrices",
47225 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47226 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47227
47228 {&hf_ieee80211_ff_mimo_csi_bf_matrices,
47229 {"Beamforming Feedback Matrices", "wlan.mimo.csimatrices.bf",
47230 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47231 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47232
47233 {&hf_ieee80211_ff_mimo_csi_cbf_matrices,
47234 {"Compressed Beamforming Feedback Matrices", "wlan.mimo.csimatrices.cbf",
47235 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47236 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47237
47238 {&hf_ieee80211_ff_public_action,
47239 {"Public Action", "wlan.fixed.publicact",
47240 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ff_pa_action_codes_ext, 0,
47241 "Public Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47242
47243 {&hf_ieee80211_ff_protected_public_action,
47244 {"Protected Public Action", "wlan.fixed.protectedpublicact",
47245 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ff_ppa_action_codes_ext, 0,
47246 "Protected Public Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47247
47248 {&hf_ieee80211_ff_capture,
47249 {"Capabilities Information", "wlan.fixed.capabilities",
47250 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47251 "Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47252
47253 {&hf_ieee80211_ff_cf_ess,
47254 {"ESS capabilities", "wlan.fixed.capabilities.ess",
47255 FT_BOOLEAN, 16, TFS(&cf_ess_flags)((0 ? (const struct true_false_string*)0 : ((&cf_ess_flags
))))
, 0x0001,
47256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47257
47258 {&hf_ieee80211_ff_cf_ibss,
47259 {"IBSS status", "wlan.fixed.capabilities.ibss",
47260 FT_BOOLEAN, 16, TFS(&cf_ibss_flags)((0 ? (const struct true_false_string*)0 : ((&cf_ibss_flags
))))
, 0x0002,
47261 "IBSS participation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47262
47263 {&hf_ieee80211_ff_cf_reserved1,
47264 {"Reserved", "wlan.fixed.capabilities.reserved1",
47265 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47266
47267 {&hf_ieee80211_ff_cf_reserved2,
47268 {"Reserved", "wlan.fixed.capabilities.reserved2",
47269 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47270
47271 {&hf_ieee80211_ff_cf_privacy,
47272 {"Privacy", "wlan.fixed.capabilities.privacy",
47273 FT_BOOLEAN, 16, TFS(&cf_privacy_flags)((0 ? (const struct true_false_string*)0 : ((&cf_privacy_flags
))))
, 0x0010,
47274 "Data privacy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47275
47276 {&hf_ieee80211_ff_cf_preamble,
47277 {"Short Preamble", "wlan.fixed.capabilities.short_preamble",
47278 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x0020,
47279 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47280
47281 {&hf_ieee80211_ff_cf_critical_update_flag,
47282 {"Critical Update Flag", "wlan.fixed.capabilities.critical_update_flag",
47283 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47284
47285 {&hf_ieee80211_ff_cf_nontran_bss_critical_update_flag,
47286 {"Nontransmitted BSSIDs Critical Update Flag", "wlan.fixed.capabilities.nontran_bss_critical_update_flag",
47287 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47288
47289 {&hf_ieee80211_ff_cf_spec_man,
47290 {"Spectrum Management", "wlan.fixed.capabilities.spec_man",
47291 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x0100,
47292 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47293
47294 {&hf_ieee80211_ff_cf_qos,
47295 {"QoS", "wlan.fixed.capabilities.qos",
47296 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x0200,
47297 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47298
47299 {&hf_ieee80211_ff_cf_short_slot_time,
47300 {"Short Slot Time", "wlan.fixed.capabilities.short_slot_time",
47301 FT_BOOLEAN, 16, TFS(&tfs_inuse_not_inuse)((0 ? (const struct true_false_string*)0 : ((&tfs_inuse_not_inuse
))))
, 0x0400,
47302 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47303
47304 {&hf_ieee80211_ff_cf_apsd,
47305 {"Automatic Power Save Delivery", "wlan.fixed.capabilities.apsd",
47306 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x0800,
47307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47308
47309 {&hf_ieee80211_ff_cf_radio_measurement,
47310 {"Radio Measurement", "wlan.fixed.capabilities.radio_measurement",
47311 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x1000,
47312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47313
47314 {&hf_ieee80211_ff_cf_epd,
47315 {"EPD", "wlan.fixed.capabilities.epd",
47316 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x2000,
47317 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47318
47319 {&hf_ieee80211_ff_cf_reserved5,
47320 {"Reserved", "wlan.fixed.capabilities.reserved5",
47321 FT_UINT16, BASE_DEC, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47322
47323 {&hf_ieee80211_ff_cf_reserved6,
47324 {"Reserved", "wlan.fixed.capabilities.reserved6",
47325 FT_UINT16, BASE_DEC, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47326
47327 {&hf_ieee80211_ff_auth_seq,
47328 {"Authentication SEQ", "wlan.fixed.auth_seq",
47329 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47330 "Authentication Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47331
47332 {&hf_ieee80211_ff_assoc_id,
47333 {"Association ID", "wlan.fixed.aid",
47334 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3FFF,
47335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47336
47337 {&hf_ieee80211_ff_listen_ival,
47338 {"Listen Interval", "wlan.fixed.listen_ival",
47339 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47340 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47341
47342 {&hf_ieee80211_ff_current_ap,
47343 {"Current AP", "wlan.fixed.current_ap",
47344 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47345 "MAC address of current AP", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47346
47347 {&hf_ieee80211_ff_reason,
47348 {"Reason code", "wlan.fixed.reason_code",
47349 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_reason_code_ext, 0,
47350 "Reason for unsolicited notification", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47351
47352 {&hf_ieee80211_ff_status_code,
47353 {"Status code", "wlan.fixed.status_code",
47354 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
47355 "Status of requested event", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47356
47357 {&hf_ieee80211_ff_category_code,
47358 {"Category code", "wlan.fixed.category_code",
47359 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &category_codes_ext, 0,
47360 "Management action category", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47361
47362 {&hf_ieee80211_ff_action_code,
47363 {"Action code", "wlan.fixed.action_code",
47364 FT_UINT16, BASE_DEC, VALS(action_codes)((0 ? (const struct _value_string*)0 : ((action_codes)))), 0,
47365 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47366
47367 {&hf_ieee80211_ff_dialog_token,
47368 {"Dialog token", "wlan.fixed.dialog_token",
47369 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47370 "Management action dialog token", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47371
47372 {&hf_ieee80211_ff_trigger,
47373 {"Trigger", "wlan.fixed.trigger",
47374 FT_UINT8, BASE_DEC, VALS(ftm_trigger_vals)((0 ? (const struct _value_string*)0 : ((ftm_trigger_vals)))), 0,
47375 "FTM action trigger", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47376
47377 {&hf_ieee80211_ff_ftm_tod,
47378 {"FTM TOD", "wlan.fixed.ftm_tod",
47379 FT_UINT48, BASE_DEC, NULL((void*)0), 0,
47380 "Management action FTM TOD", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47381
47382 {&hf_ieee80211_ff_ftm_toa,
47383 {"FTM TOA", "wlan.fixed.ftm_toa",
47384 FT_UINT48, BASE_DEC, NULL((void*)0), 0,
47385 "Management action FTM TOA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47386
47387 {&hf_ieee80211_ff_ftm_tod_err,
47388 {"FTM TOD Error", "wlan.fixed.ftm_tod_err",
47389 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47390 "Management action FTM TOD Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47391
47392 {&hf_ieee80211_ff_ftm_toa_err,
47393 {"FTM TOA Error", "wlan.fixed.ftm_toa_err",
47394 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47395 "Management action FTM TOA Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47396
47397 {&hf_ieee80211_ff_followup_dialog_token,
47398 {"Followup Dialog token", "wlan.fixed.followup_dialog_token",
47399 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47400 "Management action followup dialog token", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47401
47402 {&hf_ieee80211_ff_marvell_action_type,
47403 {"Marvell Action type", "wlan.fixed.mrvl_action_type",
47404 FT_UINT8, BASE_DEC, VALS(vendor_action_types_mrvl)((0 ? (const struct _value_string*)0 : ((vendor_action_types_mrvl
))))
, 0,
47405 "Vendor Specific Action Type (Marvell)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47406
47407 {&hf_ieee80211_ff_marvell_mesh_mgt_action_code,
47408 {"Mesh action(Marvell)", "wlan.fixed.mrvl_mesh_action",
47409 FT_UINT8, BASE_HEX, VALS(mesh_mgt_action_codes_mrvl)((0 ? (const struct _value_string*)0 : ((mesh_mgt_action_codes_mrvl
))))
, 0,
47410 "Mesh action code(Marvell)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47411
47412 {&hf_ieee80211_ff_marvell_mesh_mgt_length,
47413 {"Message Length", "wlan.fixed.length",
47414 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47416
47417 {&hf_ieee80211_ff_marvell_mesh_mgt_mode,
47418 {"Message Mode", "wlan.fixed.mode",
47419 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47421
47422 {&hf_ieee80211_ff_marvell_mesh_mgt_ttl,
47423 {"Message TTL", "wlan.fixed.ttl",
47424 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47426
47427 {&hf_ieee80211_ff_marvell_mesh_mgt_dstcount,
47428 {"Destination Count", "wlan.fixed.dstcount",
47429 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47431
47432 {&hf_ieee80211_ff_marvell_mesh_mgt_hopcount,
47433 {"Hop Count", "wlan.fixed.hopcount",
47434 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47436
47437 {&hf_ieee80211_ff_marvell_mesh_mgt_rreqid,
47438 {"RREQ ID", "wlan.fixed.rreqid",
47439 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47440 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47441
47442 {&hf_ieee80211_ff_marvell_mesh_mgt_sa,
47443 {"Source Address", "wlan.fixed.sa",
47444 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47445 "Source MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47446
47447 {&hf_ieee80211_ff_marvell_mesh_mgt_ssn,
47448 {"SSN", "wlan.fixed.ssn",
47449 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47450 "Source Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47451
47452 {&hf_ieee80211_ff_marvell_mesh_mgt_metric,
47453 {"Metric", "wlan.fixed.metric",
47454 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47455 "Route Metric", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47456
47457 {&hf_ieee80211_ff_marvell_mesh_mgt_flags,
47458 {"RREQ Flags", "wlan.fixed.flags",
47459 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47461
47462 {&hf_ieee80211_ff_marvell_mesh_mgt_da,
47463 {"Destination Address", "wlan.fixed.da",
47464 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47465 "Destination MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47466
47467 {&hf_ieee80211_ff_marvell_mesh_mgt_dsn,
47468 {"DSN", "wlan.fixed.dsn",
47469 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47470 "Destination Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47471
47472 {&hf_ieee80211_ff_marvell_mesh_mgt_lifetime,
47473 {"Lifetime", "wlan.fixed.lifetime",
47474 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47475 "Route Lifetime", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47476
47477 {&hf_ieee80211_ff_wme_action_code,
47478 {"Action code", "wlan.fixed.action_code",
47479 FT_UINT16, BASE_HEX, VALS(wme_action_codes)((0 ? (const struct _value_string*)0 : ((wme_action_codes)))), 0,
47480 "Management notification action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47481
47482 {&hf_ieee80211_ff_wme_status_code,
47483 {"Status code", "wlan.fixed.status_code",
47484 FT_UINT16, BASE_HEX, VALS(wme_status_codes)((0 ? (const struct _value_string*)0 : ((wme_status_codes)))), 0,
47485 "Management notification setup response status code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47486
47487 {&hf_ieee80211_ff_mesh_action,
47488 {"Mesh Action code", "wlan.fixed.mesh_action",
47489 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &mesh_action_ext, 0,
47490 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47491
47492 {&hf_ieee80211_ff_multihop_action,
47493 {"Multihop Action code", "wlan.fixed.multihop_action",
47494 FT_UINT8, BASE_HEX, VALS(multihop_action)((0 ? (const struct _value_string*)0 : ((multihop_action)))), 0,
47495 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47496
47497 {&hf_ieee80211_ff_mesh_flags,
47498 {"Mesh Flags", "wlan.fixed.mesh_flags",
47499 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47501
47502 {&hf_ieee80211_ff_mesh_ttl,
47503 {"Mesh TTL", "wlan.fixed.mesh_ttl",
47504 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47505 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47506
47507 {&hf_ieee80211_ff_mesh_sequence,
47508 {"Sequence Number", "wlan.fixed.mesh_sequence",
47509 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
47510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47511
47512 {&hf_ieee80211_ff_mesh_addr4,
47513 {"Mesh Extended Address 4", "wlan.fixed.mesh_addr4",
47514 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47516
47517 {&hf_ieee80211_ff_mesh_addr5,
47518 {"Mesh Extended Address 5", "wlan.fixed.mesh_addr5",
47519 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47521
47522 {&hf_ieee80211_ff_mesh_addr6,
47523 {"Mesh Extended Address 6", "wlan.fixed.mesh_addr6",
47524 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47526
47527 {&hf_ieee80211_ff_selfprot_action,
47528 {"Self-protected Action code", "wlan.fixed.selfprot_action",
47529 FT_UINT8, BASE_HEX, VALS(selfprot_action)((0 ? (const struct _value_string*)0 : ((selfprot_action)))), 0,
47530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47531
47532 {&hf_ieee80211_mesh_peering_proto,
47533 {"Mesh Peering Protocol ID", "wlan.peering.proto",
47534 FT_UINT16, BASE_HEX, VALS(mesh_peering_proto_ids)((0 ? (const struct _value_string*)0 : ((mesh_peering_proto_ids
))))
, 0,
47535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47536
47537 {&hf_ieee80211_mesh_peering_local_link_id,
47538 {"Local Link ID", "wlan.peering.local_id",
47539 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47540 "Mesh Peering Management Local Link ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47541
47542 {&hf_ieee80211_mesh_peering_peer_link_id,
47543 {"Peer Link ID", "wlan.peering.peer_id",
47544 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47545 "Mesh Peering Management Peer Link ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47546
47547 {&hf_ieee80211_ff_hwmp_flags,
47548 {"HWMP Flags", "wlan.hwmp.flags",
47549 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47551
47552 {&hf_ieee80211_ff_hwmp_hopcount,
47553 {"HWMP Hop Count", "wlan.hwmp.hopcount",
47554 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47556
47557 {&hf_ieee80211_ff_hwmp_ttl,
47558 {"HWMP TTL", "wlan.hwmp.ttl",
47559 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47561
47562 {&hf_ieee80211_ff_hwmp_pdid,
47563 {"HWMP Path Discovery ID", "wlan.hwmp.pdid",
47564 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47565 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47566
47567 {&hf_ieee80211_ff_hwmp_orig_sta,
47568 {"Originator STA Address", "wlan.hwmp.orig_sta",
47569 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47571
47572 {&hf_ieee80211_ff_hwmp_orig_sn,
47573 {"HWMP Originator Sequence Number", "wlan.hwmp.orig_sn",
47574 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47575 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
47576
47577 {&hf_ieee80211_ff_hwmp_orig_ext,
47578 {"Originator External Address", "wlan.hwmp.orig_ext",
47579 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47581
47582 {&hf_ieee80211_ff_hwmp_lifetime,
47583 {"HWMP Lifetime", "wlan.hwmp.lifetime",
47584 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47585 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47586
47587 {&hf_ieee80211_ff_hwmp_metric,
47588 {"HWMP Metric", "wlan.hwmp.metric",
47589 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47590 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47591
47592 {&hf_ieee80211_ff_hwmp_targ_count,
47593 {"HWMP Target Count", "wlan.hwmp.targ_count",
47594 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47595 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47596
47597 {&hf_ieee80211_ff_hwmp_targ_flags,
47598 {"HWMP Per-Target Flags", "wlan.hwmp.targ_flags",
47599 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47600 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47601
47602 {&hf_ieee80211_ff_hwmp_targ_to_flags,
47603 {"TO Flag", "wlan.hwmp.to_flag",
47604 FT_BOOLEAN, 8, TFS(&hwmp_targ_to_flags)((0 ? (const struct true_false_string*)0 : ((&hwmp_targ_to_flags
))))
, 0x01,
47605 "Target Only Flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47606
47607 {&hf_ieee80211_ff_hwmp_targ_usn_flags,
47608 {"USN Flag", "wlan.hwmp.usn_flag",
47609 FT_BOOLEAN, 8, TFS(&hwmp_targ_usn_flags)((0 ? (const struct true_false_string*)0 : ((&hwmp_targ_usn_flags
))))
, 0x04,
47610 "Unknown Target HWMP Sequence Number Flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47611
47612 {&hf_ieee80211_ff_hwmp_targ_sta,
47613 {"Target STA Address", "wlan.hwmp.targ_sta",
47614 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47616
47617 {&hf_ieee80211_ff_hwmp_targ_ext,
47618 {"Target External Address", "wlan.hwmp.targ_ext",
47619 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47621
47622 {&hf_ieee80211_ff_hwmp_targ_sn,
47623 {"Target HWMP Sequence Number", "wlan.hwmp.targ_sn",
47624 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47626
47627 {&hf_ieee80211_mesh_config_path_sel_protocol,
47628 {"Path Selection Protocol", "wlan.mesh.config.ps_protocol",
47629 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47630 "Mesh Configuration Path Selection Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47631
47632 {&hf_ieee80211_mesh_config_path_sel_metric,
47633 {"Path Selection Metric", "wlan.mesh.config.ps_metric",
47634 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47635 "Mesh Configuration Path Selection Metric", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47636
47637 {&hf_ieee80211_mesh_config_congestion_control,
47638 {"Congestion Control", "wlan.mesh.config.cong_ctl",
47639 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47640 "Mesh Configuration Congestion Control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47641
47642 {&hf_ieee80211_mesh_config_sync_method,
47643 {"Synchronization Method", "wlan.mesh.config.sync_method",
47644 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47645 "Mesh Configuration Synchronization Method", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47646
47647 {&hf_ieee80211_mesh_config_auth_protocol,
47648 {"Authentication Protocol", "wlan.mesh.config.auth_protocol",
47649 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47650 "Mesh Configuration Authentication Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47651
47652 {&hf_ieee80211_mesh_config_formation_info,
47653 {"Formation Info", "wlan.mesh.config.formation_info",
47654 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47655 "Mesh Configuration Formation Info", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47656
47657 {&hf_ieee80211_mesh_form_info_conn_to_mesh_gate,
47658 {"Connected to Mesh Gate", "wlan.mesh.formation_info.connect_to_mesh_gate",
47659 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x01,
47660 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47661
47662 {&hf_ieee80211_mesh_form_info_num_of_peerings,
47663 {"Number of Peerings", "wlan.mesh.config.formation_info.num_peers",
47664 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7E,
47665 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47666
47667 {&hf_ieee80211_mesh_form_info_conn_to_as,
47668 {"Connected to AS", "wlan.mesh.formation_info.connect_to_as",
47669 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x80,
47670 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47671
47672 {&hf_ieee80211_mesh_config_capability,
47673 {"Capability", "wlan.mesh.config.cap",
47674 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47675 "Mesh Configuration Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47676
47677 {&hf_ieee80211_mesh_config_cap_accepting,
47678 {"Accepting Additional Mesh Peerings", "wlan.mesh.config.cap.accept",
47679 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x01,
47680 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47681
47682 {&hf_ieee80211_mesh_config_cap_mcca_support,
47683 {"MCCA Support", "wlan.mesh.config.cap.mcca_support",
47684 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x02,
47685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47686
47687 {&hf_ieee80211_mesh_config_cap_mcca_enabled,
47688 {"MCCA Enabled", "wlan.mesh.config.cap.mcca_enabled",
47689 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x04,
47690 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47691
47692 {&hf_ieee80211_mesh_config_cap_forwarding,
47693 {"Mesh Forwarding", "wlan.mesh.config.cap.forwarding",
47694 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x08,
47695 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47696
47697 {&hf_ieee80211_mesh_config_cap_mbca_enabled,
47698 {"MBCA Enabled", "wlan.mesh.config.cap.mbca_enabled",
47699 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
47700 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47701
47702 {&hf_ieee80211_mesh_config_cap_tbtt_adjusting,
47703 {"TBTT Adjustment", "wlan.mesh.config.cap.tbtt_adjusting",
47704 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x20,
47705 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47706
47707 {&hf_ieee80211_mesh_config_cap_power_save_level,
47708 {"Power Save", "wlan.mesh.config.cap.power_save_level",
47709 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,
47710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47711
47712 {&hf_ieee80211_mesh_config_cap_reserved,
47713 {"Reserved", "wlan.mesh.config.cap.reserved",
47714 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
47715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47716
47717 {&hf_ieee80211_mesh_id,
47718 {"Mesh ID", "wlan.mesh.id",
47719 FT_STRING, BASE_NONE, NULL((void*)0), 0,
47720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47721
47722 {&hf_ieee80211_bcn_timing_rctrl,
47723 {"Report Control", "wlan.bcntime.rctrl",
47724 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47725 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47726
47727 {&hf_ieee80211_bcn_timing_rctrl_more,
47728 {"More Beacon Timing Elements", "wlan.bcntime.rctrl.more",
47729 FT_BOOLEAN, 8, TFS(&tfs_more_nomore)((0 ? (const struct true_false_string*)0 : ((&tfs_more_nomore
))))
, 0x01,
47730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47731
47732 {&hf_ieee80211_bcn_timing_rctrl_element_num,
47733 {"Beacon Timing Element Number", "wlan.bcntime.rctrl.elem_num",
47734 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0E,
47735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47736
47737 {&hf_ieee80211_bcn_timing_rctrl_status_num,
47738 {"Status Number", "wlan.bcntime.rctrl.status_num",
47739 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
47740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47741
47742 {&hf_ieee80211_bcn_timing_info,
47743 {"Beacon Timing Info", "wlan.bcntime.info",
47744 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47746
47747 {&hf_ieee80211_bcn_timing_info_nsta_id,
47748 {"Neighbor STA ID", "wlan.bcntime.info.nstaid",
47749 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47751
47752 {&hf_ieee80211_bcn_timing_info_nsta_tbtt,
47753 {"Neighbor STA TBTT", "wlan.bcntime.info.nstatbtt",
47754 FT_UINT24, BASE_DEC, NULL((void*)0), 0,
47755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47756
47757 {&hf_ieee80211_bcn_timing_info_nsta_bi,
47758 {"Neighbor STA Beacon Interval", "wlan.bcntime.info.nstabi",
47759 FT_UINT16, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (size_t) (beacon_interval_base_custom)), 0,
47760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47761
47762 {&hf_ieee80211_gann_flags,
47763 {"GANN Flags", "wlan.gann.flags",
47764 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47766
47767 {&hf_ieee80211_gann_flags_reserved,
47768 {"Reserved", "wlan.gann.flags.reserved",
47769 FT_UINT8, BASE_HEX, NULL((void*)0), 0xff,
47770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47771
47772 {&hf_ieee80211_gann_hop_count,
47773 {"GANN Hop count", "wlan.gann.hop_count",
47774 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47776
47777 {&hf_ieee80211_gann_elem_ttl,
47778 {"GANN Element TTL", "wlan.gann.elem_ttl",
47779 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47781
47782 {&hf_ieee80211_gann_mesh_gate_addr,
47783 {"GANN Mesh Gate Address", "wlan.gann.gate_addr",
47784 FT_BYTES, SEP_COLON, NULL((void*)0), 0,
47785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47786
47787 {&hf_ieee80211_gann_seq_num,
47788 {"GANN Sequence Number", "wlan.gann.seq_num",
47789 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47791
47792 {&hf_ieee80211_gann_interval,
47793 {"GANN Interval", "wlan.gann.interval",
47794 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47795 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47796
47797 {&hf_ieee80211_mesh_mic,
47798 {"Mesh Peering Management MIC", "wlan.mesh.mic",
47799 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47800
47801 {&hf_ieee80211_mesh_ampe_encrypted_data,
47802 {"Authenticated Mesh Peering Exchange Encrypted Data", "wlan.mesh.ampe.encrypted_data",
47803 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47804
47805 {&hf_ieee80211_rann_flags,
47806 {"RANN Flags", "wlan.rann.flags",
47807 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47808 "Root Announcement Flags", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47809
47810 {&hf_ieee80211_rann_root_sta,
47811 {"Root STA Address", "wlan.rann.root_sta", FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47812 "Root Mesh STA Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47813
47814 {&hf_ieee80211_rann_sn,
47815 {"Root STA Sequence Number", "wlan.rann.rann_sn",
47816 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47817 "Root Mesh STA Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47818
47819 {&hf_ieee80211_rann_interval,
47820 {"RANN Interval", "wlan.rann.interval",
47821 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47822 "Root Announcement Interval", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47823
47824 {&hf_ieee80211_pxu_pxu_id,
47825 {"PXU ID", "wlan.pxu.pxu_id",
47826 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47827 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47828
47829 {&hf_ieee80211_pxu_pxu_origin_mac,
47830 {"PXU Originator MAC Address", "wlan.pxu.origin_mac",
47831 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47832 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47833
47834 {&hf_ieee80211_pxu_no_proxy_info,
47835 {"Number of Proxy Information", "wlan.pxu.no_proxy_info",
47836 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47837 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47838
47839 {&hf_ieee80211_pxu_proxy_info,
47840 {"Proxy Information", "wlan.pxu.proxy_info",
47841 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47842 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47843
47844 {&hf_ieee80211_pxu_proxy_info_flags,
47845 {"Flags", "wlan.pxu.pxu_info.flags",
47846 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47847 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47848
47849 {&hf_ieee80211_pxu_proxy_info_flags_delete,
47850 {"Delete", "wlan.pxu.pxu_info.flags.delete",
47851 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
47852 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47853
47854 {&hf_ieee80211_pxu_proxy_info_flags_orig_is_proxy,
47855 {"Originator is Proxy", "wlan.pxu.pxu_info.flags.orig_is_proxy",
47856 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
47857 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47858
47859 {&hf_ieee80211_pxu_proxy_info_flags_lifetime,
47860 {"Lifetime", "wlan.pxu.pxu_info.flags.lifetime",
47861 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
47862 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47863
47864 {&hf_ieee80211_pxu_proxy_info_flags_reserved,
47865 {"Reserved", "wlan.pxu.pxu_info.flags.reserved",
47866 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
47867 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47868
47869 {&hf_ieee80211_pxu_proxy_info_ext_mac,
47870 {"External MAC Address", "wlan.pxu.pxu_info.ext_mac",
47871 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47872 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47873
47874 {&hf_ieee80211_pxu_proxy_info_seq_num,
47875 {"Proxy Information Sequence Number", "wlan.pxu.pxu_info.seq_num",
47876 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47877 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47878
47879 {&hf_ieee80211_pxu_proxy_info_proxy_mac,
47880 {"Proxy MAC Address", "wlan.pxu.pxu_info.proxy_mac",
47881 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47882 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47883
47884 {&hf_ieee80211_pxu_proxy_info_lifetime,
47885 {"Proxy Information Lifetime", "wlan.pxu.pxu_info.lifetime",
47886 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47887 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47888
47889 {&hf_ieee80211_pxuc_pxu_id,
47890 {"PXU ID", "wlan.pxuc.pxu_id",
47891 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47892 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47893
47894 {&hf_ieee80211_pxuc_pxu_recip_mac,
47895 {"PXU Recipient MAC Address", "wlan.pxuc.recip_mac",
47896 FT_BYTES, SEP_COLON, NULL((void*)0), 0,
47897 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47898
47899 {&hf_ieee80211_ff_qos_action_code,
47900 {"Action code", "wlan.fixed.action_code",
47901 FT_UINT16, BASE_HEX, VALS(qos_action_codes)((0 ? (const struct _value_string*)0 : ((qos_action_codes)))), 0,
47902 "QoS management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47903
47904 {&hf_ieee80211_ff_ba_action,
47905 {"Action code", "wlan.fixed.action_code",
47906 FT_UINT8, BASE_HEX, VALS(ba_action_codes)((0 ? (const struct _value_string*)0 : ((ba_action_codes)))), 0,
47907 "Block Ack action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47908
47909 {&hf_ieee80211_ff_check_beacon,
47910 {"Check Beacon", "wlan.fixed.check_beacon",
47911 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47912 "Unprotected WNM Check Beacon", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47913
47914 {&hf_ieee80211_ff_tod,
47915 {"TOD", "wlan.fixed.tod",
47916 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47917 "Previous TS of transmit antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47918
47919 {&hf_ieee80211_ff_toa,
47920 {"TOA", "wlan.fixed.toa",
47921 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47922 "Previous TS of receive antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47923
47924 {&hf_ieee80211_ff_max_tod_err,
47925 {"MAX TOD ERROR", "wlan.fixed.max_tod_err",
47926 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47927 "Maximal Error at Previous TS of transmit antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47928
47929 {&hf_ieee80211_ff_max_toa_err,
47930 {"MAX TOA ERROR", "wlan.fixed.max_toa_err",
47931 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47932 "Maximal Error at Previous TS of receive antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47933
47934 {&hf_ieee80211_ff_dls_action_code,
47935 {"Action code", "wlan.fixed.action_code",
47936 FT_UINT16, BASE_HEX, VALS(dls_action_codes)((0 ? (const struct _value_string*)0 : ((dls_action_codes)))), 0,
47937 "DLS management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47938
47939 {&hf_ieee80211_ff_dst_mac_addr,
47940 {"Destination address", "wlan.fixed.dst_mac_addr",
47941 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47942 "Destination MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47943
47944 {&hf_ieee80211_ff_src_mac_addr,
47945 {"Source address", "wlan.fixed.src_mac_addr",
47946 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47947 "Source MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47948
47949 {&hf_ieee80211_ff_req_ap_addr,
47950 {"RequesterAP address", "wlan.fixed.req_ap_addr",
47951 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47953
47954 {&hf_ieee80211_ff_res_ap_addr,
47955 {"ResponderAP address", "wlan.fixed.res_ap_addr",
47956 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47958
47959 {&hf_ieee80211_ff_ft_action_code,
47960 {"Action code", "wlan.fixed.action_code",
47961 FT_UINT8, BASE_DEC, VALS(ft_action_codes)((0 ? (const struct _value_string*)0 : ((ft_action_codes)))), 0,
47962 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47963
47964 {&hf_ieee80211_ff_sta_address,
47965 {"STA Address", "wlan.fixed.sta_address",
47966 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47968
47969 {&hf_ieee80211_ff_target_ap_address,
47970 {"Target AP Address", "wlan.fixed.target_ap_address",
47971 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47972 "Target AP MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47973
47974 {&hf_ieee80211_ff_gas_comeback_delay,
47975 {"GAS Comeback Delay", "wlan.fixed.gas_comeback_delay",
47976 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47977 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47978
47979 {&hf_ieee80211_ff_gas_fragment_id,
47980 {"GAS Query Response Fragment ID", "wlan.fixed.gas_fragment_id",
47981 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7f,
47982 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47983
47984 {&hf_ieee80211_ff_more_gas_fragments,
47985 {"More GAS Fragments", "wlan.fixed.more_gas_fragments",
47986 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
47987 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47988
47989 {&hf_ieee80211_ff_query_request_length,
47990 {"Query Request Length", "wlan.fixed.query_request_length",
47991 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47993
47994 {&hf_ieee80211_ff_query_request,
47995 {"Query Request", "wlan.fixed.query_request",
47996 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
47997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47998
47999 {&hf_ieee80211_ff_query_response_length,
48000 {"Query Response Length", "wlan.fixed.query_response_length",
48001 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48002 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48003
48004 {&hf_ieee80211_ff_query_response,
48005 {"Query Response", "wlan.fixed.query_response",
48006 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48007 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48008
48009 {&hf_ieee80211_gas_resp_fragments,
48010 {"GAS Query Response fragments", "wlan.fixed.fragments",
48011 FT_NONE, BASE_NONE, NULL((void*)0), 0x00,
48012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48013
48014 {&hf_ieee80211_gas_resp_fragment,
48015 {"GAS Query Response fragment", "wlan.fixed.fragment",
48016 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
48017 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48018
48019 {&hf_ieee80211_gas_resp_fragment_overlap,
48020 {"GAS Query Response fragment overlap", "wlan.fixed.fragment.overlap",
48021 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
48022 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48023
48024 {&hf_ieee80211_gas_resp_fragment_overlap_conflict,
48025 {"GAS Query Response fragment overlapping with conflicting data", "wlan.fixed.fragment.overlap.conflicts",
48026 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
48027 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48028
48029 {&hf_ieee80211_gas_resp_fragment_multiple_tails,
48030 {"GAS Query Response has multiple tail fragments", "wlan.fixed.fragment.multiple_tails",
48031 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
48032 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48033
48034 {&hf_ieee80211_gas_resp_fragment_too_long_fragment,
48035 {"GAS Query Response fragment too long", "wlan.fixed.fragment.too_long_fragment",
48036 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
48037 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48038
48039 {&hf_ieee80211_gas_resp_fragment_error,
48040 {"GAS Query Response reassembly error", "wlan.fixed.fragment.error",
48041 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
48042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48043
48044 {&hf_ieee80211_gas_resp_fragment_count,
48045 {"GAS Query Response fragment count", "wlan.fixed.fragment.count",
48046 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00,
48047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48048
48049 {&hf_ieee80211_gas_resp_reassembled_in,
48050 {"Reassembled in", "wlan.fixed.reassembled.in",
48051 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
48052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48053
48054 {&hf_ieee80211_gas_resp_reassembled_length,
48055 {"Reassembled length", "wlan.fixed.reassembled.length",
48056 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00,
48057 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48058
48059 {&hf_ieee80211_ff_anqp_info_id,
48060 {"Info ID", "wlan.fixed.anqp.info_id",
48061 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &anqp_info_id_vals_ext, 0,
48062 "Access Network Query Protocol Info ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48063
48064 {&hf_ieee80211_ff_anqp_info_length,
48065 {"Length", "wlan.fixed.anqp.info_length",
48066 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48067 "Access Network Query Protocol Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48068
48069 {&hf_ieee80211_ff_anqp_info,
48070 {"Information", "wlan.fixed.anqp.info",
48071 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48072 "Access Network Query Protocol Information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48073
48074 {&hf_ieee80211_ff_anqp_query_id,
48075 {"ANQP Query ID", "wlan.fixed.anqp.query_id",
48076 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &anqp_info_id_vals_ext, 0,
48077 "Access Network Query Protocol Query ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48078
48079 {&hf_ieee80211_ff_anqp_capability,
48080 {"ANQP Capability", "wlan.fixed.anqp.capability",
48081 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &anqp_info_id_vals_ext, 0,
48082 "Access Network Query Protocol Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48083
48084 {&hf_ieee80211_ff_anqp_capability_vlen,
48085 {"Vendor-specific Capability Length", "wlan.fixed.anqp.capability_vlen",
48086 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48087 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48088
48089 {&hf_ieee80211_ff_anqp_capability_vendor,
48090 {"Vendor-specific Capability", "wlan.fixed.anqp.capability_vendor",
48091 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48092 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48093
48094 {&hf_ieee80211_ff_venue_info_group,
48095 {"Venue Group", "wlan.fixed.venue_info.group",
48096 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &venue_group_vals_ext, 0,
48097 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48098
48099 {&hf_ieee80211_ff_venue_info_type,
48100 {"Venue Type", "wlan.fixed.venue_info.type",
48101 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48102 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48103
48104 {&hf_ieee80211_ff_anqp_venue_length,
48105 {"Venue Name Duple Length", "wlan.fixed.anqp.venue.length",
48106 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48107 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48108
48109 {&hf_ieee80211_ff_anqp_venue_language,
48110 {"Language Code", "wlan.fixed.anqp.venue.language",
48111 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48112 "Venue Name Language Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48113
48114 {&hf_ieee80211_ff_anqp_venue_name,
48115 {"Venue Name", "wlan.fixed.anqp.venue.name",
48116 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48117 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48118
48119 {&hf_ieee80211_ff_anqp_nw_auth_type_indicator,
48120 {"Network Authentication Type Indicator", "wlan.fixed.anqp.nw_auth_type.indicator",
48121 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals)((0 ? (const struct _value_string*)0 : ((nw_auth_type_vals)))
)
, 0,
48122 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48123
48124 {&hf_ieee80211_ff_anqp_nw_auth_type_url_len,
48125 {"Re-direct URL Length", "wlan.fixed.anqp.nw_auth_type.url_len",
48126 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48127 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48128
48129 {&hf_ieee80211_ff_anqp_nw_auth_type_url,
48130 {"Re-direct URL", "wlan.fixed.anqp.nw_auth_type.url",
48131 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48132 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48133
48134 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_indicator,
48135 {"Network Authentication Type w/ Timestamp Indicator",
48136 "wlan.fixed.anqp.nw_auth_type_ts.indicator",
48137 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals)((0 ? (const struct _value_string*)0 : ((nw_auth_type_vals)))
)
, 0,
48138 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48139
48140 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_url_len,
48141 {"Re-direct URL Length", "wlan.fixed.anqp.nw_auth_type_ts.url_len",
48142 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48143 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48144
48145 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_url,
48146 {"Re-direct URL", "wlan.fixed.anqp.nw_auth_type_ts.url",
48147 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48148 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48149
48150 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_year,
48151 {"Timestamp (Year)", "wlan.fixed.anqp.nw_auth_type_ts.year",
48152 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
48153 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48154
48155 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_mon,
48156 {"Timestamp (Month)", "wlan.fixed.anqp.nw_auth_type_ts.mon",
48157 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48159
48160 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_day,
48161 {"Timestamp (Day)", "wlan.fixed.anqp.nw_auth_type_ts.day",
48162 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48164
48165 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_hr,
48166 {"Timestamp (Hours)", "wlan.fixed.anqp.nw_auth_type_ts.hr",
48167 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48169
48170 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_min,
48171 {"Timestamp (Minutes)", "wlan.fixed.anqp.nw_auth_type_ts.min",
48172 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48174
48175 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_sec,
48176 {"Timestamp (Seconds)", "wlan.fixed.anqp.nw_auth_type_ts.sec",
48177 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48178 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48179
48180 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_msec,
48181 {"Timestamp (Milliseconds)", "wlan.fixed.anqp.nw_auth_type_ts.msec",
48182 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
48183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48184
48185 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_rsvd,
48186 {"Timestamp (Reserved)", "wlan.fixed.anqp.nw_auth_type_ts.rsvd",
48187 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48188 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48189
48190 {&hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
48191 {"OI Length", "wlan.fixed.anqp.roaming_consortium.oi_len",
48192 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48193 "Roaming Consortium OI Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48194
48195 {&hf_ieee80211_ff_anqp_roaming_consortium_oi,
48196 {"OI", "wlan.fixed.anqp.roaming_consortium.oi",
48197 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48198 "Roaming Consortium OI", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48199
48200 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
48201 {"IPv6 Address", "wlan.fixed.anqp.ip_addr_availability.ipv6",
48202 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv6_vals)((0 ? (const struct _value_string*)0 : ((ip_addr_avail_ipv6_vals
))))
, 0x03,
48203 "IP Address Type Availability information for IPv6", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48204
48205 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
48206 {"IPv4 Address", "wlan.fixed.anqp.ip_addr_availability.ipv4",
48207 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv4_vals)((0 ? (const struct _value_string*)0 : ((ip_addr_avail_ipv4_vals
))))
, 0xfc,
48208 "IP Address Type Availability information for IPv4", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48209
48210 {&hf_ieee80211_ff_anqp_nai_realm_count,
48211 {"NAI Realm Count", "wlan.fixed.anqp.nai_realm_list.count",
48212 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48214
48215 {&hf_ieee80211_ff_anqp_nai_field_len,
48216 {"NAI Realm Data Field Length", "wlan.fixed.anqp.nai_realm_list.field_len",
48217 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48218 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48219
48220 {&hf_ieee80211_ff_anqp_nai_realm_encoding,
48221 {"NAI Realm Encoding", "wlan.fixed.anqp_nai_realm_list.encoding",
48222 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals)((0 ? (const struct _value_string*)0 : ((nai_realm_encoding_vals
))))
, 0x01,
48223 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48224
48225 {&hf_ieee80211_ff_anqp_nai_realm_length,
48226 {"NAI Realm Length", "wlan.fixed.anqp_nai_realm_list.realm_length",
48227 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48228 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48229
48230 {&hf_ieee80211_ff_anqp_nai_realm,
48231 {"NAI Realm", "wlan.fixed.anqp_nai_realm_list.realm",
48232 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48233 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48234
48235 {&hf_ieee80211_ff_anqp_nai_realm_eap_count,
48236 {"EAP Method Count", "wlan.fixed.anqp_nai_realm_list.eap_method_count",
48237 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48238 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48239
48240 {&hf_ieee80211_ff_anqp_nai_realm_eap_len,
48241 {"EAP Method subfield Length", "wlan.fixed.anqp_nai_realm_list.eap_method_len",
48242 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48243 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48244
48245 {&hf_ieee80211_ff_anqp_nai_realm_eap_method,
48246 {"EAP Method", "wlan.fixed.anqp_nai_realm_list.eap_method",
48247 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &eap_type_vals_ext, 0,
48248 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48249
48250 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
48251 {"Authentication Parameter Count", "wlan.fixed.anqp_nai_realm_list.auth_param_count",
48252 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48253 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48254
48255 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
48256 {"Authentication Parameter ID", "wlan.fixed.anqp_nai_realm_list.auth_param_id",
48257 FT_UINT8, BASE_DEC, VALS(nai_realm_auth_param_id_vals)((0 ? (const struct _value_string*)0 : ((nai_realm_auth_param_id_vals
))))
, 0,
48258 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48259
48260 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
48261 {"Authentication Parameter Length", "wlan.fixed.anqp_nai_realm_list.auth_param_len",
48262 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48263 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48264
48265 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
48266 {"Authentication Parameter Value", "wlan.fixed.anqp_nai_realm_list.auth_param_value",
48267 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48268 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48269
48270 {&hf_ieee80211_3gpp_gc_gud,
48271 {"GUD", "wlan.fixed.anqp.3gpp_cellular_info.gud",
48272 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48273 "Generic container User Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48274
48275 {&hf_ieee80211_3gpp_gc_udhl,
48276 {"UDHL", "wlan.fixed.anqp.3gpp_cellular_info.udhl",
48277 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48278 "User Data Header Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48279
48280 {&hf_ieee80211_3gpp_gc_iei,
48281 {"IEI", "wlan.fixed.anqp.3gpp_cellular_info.iei",
48282 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48283 "Information Element Identity", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48284
48285 {&hf_ieee80211_3gpp_gc_plmn_len,
48286 {"PLMN Length", "wlan.fixed.anqp.3gpp_cellular_info.plmn_len",
48287 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48288 "Length of PLMN List value contents", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48289
48290 {&hf_ieee80211_3gpp_gc_num_plmns,
48291 {"Number of PLMNs", "wlan.fixed.anqp.3gpp_cellular_info.num_plmns",
48292 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48293 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48294
48295 {&hf_ieee80211_3gpp_gc_plmn,
48296 {"PLMN", "wlan.fixed.anqp.3gpp_cellular_info.plmn_info",
48297 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48298
48299 {&hf_ieee80211_ff_anqp_domain_name_len,
48300 {"Domain Name Length", "wlan.fixed.anqp.domain_name_list.len",
48301 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48302 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48303
48304 {&hf_ieee80211_ff_anqp_domain_name,
48305 {"Domain Name", "wlan.fixed.anqp.domain_name_list.name",
48306 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48308
48309 {&hf_ieee80211_ff_dls_timeout,
48310 {"DLS timeout", "wlan.fixed.dls_timeout",
48311 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
48312 "DLS timeout value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48313
48314 {&hf_ieee80211_ff_sa_query_action_code,
48315 {"Action code", "wlan.fixed.action_code",
48316 FT_UINT8, BASE_DEC, VALS(sa_query_action_codes)((0 ? (const struct _value_string*)0 : ((sa_query_action_codes
))))
, 0,
48317 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48318
48319 {&hf_ieee80211_ff_transaction_id,
48320 {"Transaction Id", "wlan.fixed.transaction_id",
48321 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
48322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48323
48324 {&hf_ieee80211_ff_send_confirm,
48325 {"Send-Confirm", "wlan.fixed.send_confirm",
48326 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48328
48329 {&hf_ieee80211_ff_scalar,
48330 {"Scalar", "wlan.fixed.scalar",
48331 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48333
48334 {&hf_ieee80211_ff_finite_field_element,
48335 {"Finite Field Element", "wlan.fixed.finite_field_element",
48336 FT_BYTES, 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_confirm,
48340 {"Confirm", "wlan.fixed.confirm",
48341 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48342 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48343
48344 {&hf_ieee80211_ff_finite_cyclic_group,
48345 {"Group Id", "wlan.fixed.finite_cyclic_group",
48346 FT_UINT16, BASE_DEC, VALS(ff_finite_cyclic_group_vals)((0 ? (const struct _value_string*)0 : ((ff_finite_cyclic_group_vals
))))
, 0,
48347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48348
48349 {&hf_ieee80211_ff_sae_message_type,
48350 {"SAE Message Type", "wlan.fixed.sae_message_type",
48351 FT_UINT16, BASE_DEC, VALS(ff_sae_message_type_vals)((0 ? (const struct _value_string*)0 : ((ff_sae_message_type_vals
))))
, 0,
48352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48353
48354 {&hf_ieee80211_ff_sae_anti_clogging_token,
48355 {"Anti-Clogging Token", "wlan.fixed.anti_clogging_token",
48356 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48357
48358 {&hf_ieee80211_anqp_wfa_subtype,
48359 {"WFA Subtype", "wlan.anqp.wfa.subtype",
48360 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) }},
48361
48362 {&hf_ieee80211_dpp_subtype,
48363 {"DPP Subtype", "wlan.wfa.dpp.subtype",
48364 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) }},
48365
48366 {&hf_ieee80211_hs20_indication_dgaf_disabled,
48367 {"DGAF Disabled", "wlan.hs20.indication.dgaf_disabled",
48368 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48369
48370 {&hf_ieee80211_hs20_indication_pps_mo_id_present,
48371 {"PPS MO ID Present", "wlan.hs20.indication.pps_mo_id_present",
48372 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) }},
48373
48374 {&hf_ieee80211_hs20_indication_anqp_domain_id_present,
48375 {"ANQP Domain ID Present", "wlan.hs20.indication.anqp_domain_id_present",
48376 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) }},
48377
48378 {&hf_ieee80211_hs20_reserved,
48379 { "Reserved", "wlan.hs20.indication.reserved",
48380 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) }},
48381
48382 {&hf_ieee80211_hs20_indication_version_number,
48383 {"Version Number", "wlan.hs20.indication.version_number",
48384 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) }},
48385
48386 {&hf_ieee80211_hs20_indication_pps_mo_id,
48387 {"PPS MO ID", "wlan.hs20.indication.pps_mo_id",
48388 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48389
48390 {&hf_ieee80211_hs20_indication_anqp_domain_id,
48391 {"ANQP Domain ID", "wlan.hs20.indication.domain_id",
48392 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48393
48394 {&hf_ieee80211_hs20_anqp_subtype,
48395 {"Subtype", "wlan.hs20.anqp.subtype",
48396 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((hs20_anqp_subtype_vals
))))
, 0,
48397 "Hotspot 2.0 ANQP Subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48398
48399 {&hf_ieee80211_hs20_anqp_reserved,
48400 {"Reserved", "wlan.hs20.anqp.reserved",
48401 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48402
48403 {&hf_ieee80211_hs20_anqp_payload,
48404 {"Payload", "wlan.hs20.anqp.payload",
48405 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48406 "Hotspot 2.0 ANQP Payload", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48407
48408 {&hf_ieee80211_hs20_anqp_hs_query_list,
48409 {"Queried Subtype", "wlan.hs20.anqp.hs_query_list",
48410 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((hs20_anqp_subtype_vals
))))
, 0,
48411 "Queried HS 2.0 Element Subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48412
48413 {&hf_ieee80211_hs20_anqp_hs_capability_list,
48414 {"Capability", "wlan.hs20.anqp.hs_capability_list",
48415 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((hs20_anqp_subtype_vals
))))
, 0,
48416 "Hotspot 2.0 ANQP Subtype Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48417
48418 {&hf_ieee80211_hs20_anqp_ofn_length,
48419 {"Length", "wlan.hs20.anqp.ofn.length",
48420 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48421 "Operator Friendly Name Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48422
48423 {&hf_ieee80211_hs20_anqp_ofn_language,
48424 {"Language Code", "wlan.hs20.anqp.ofn.language",
48425 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48426 "Operator Friendly Name Language Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48427
48428 {&hf_ieee80211_hs20_anqp_ofn_name,
48429 {"Operator Friendly Name", "wlan.hs20.anqp.ofn.name",
48430 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48431 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48432
48433 {&hf_ieee80211_hs20_anqp_wan_metrics_link_status,
48434 {"Link Status", "wlan.hs20.anqp.wan_metrics.link_status",
48435 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) }},
48436
48437 {&hf_ieee80211_hs20_anqp_wan_metrics_symmetric_link,
48438 {"Symmetric Link", "wlan.hs20.anqp.wan_metrics.symmetric_link",
48439 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48440
48441 {&hf_ieee80211_hs20_anqp_wan_metrics_at_capacity,
48442 {"At Capacity", "wlan.hs20.anqp.wan_metrics.at_capacity",
48443 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48444
48445 {&hf_ieee80211_hs20_anqp_wan_metrics_reserved,
48446 {"Reserved", "wlan.hs20.anqp.wan_metrics.reserved",
48447 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48448
48449 {&hf_ieee80211_hs20_anqp_wan_metrics_downlink_speed,
48450 {"Downlink Speed", "wlan.hs20.anqp.wan_metrics.downlink_speed",
48451 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48452
48453 {&hf_ieee80211_hs20_anqp_wan_metrics_uplink_speed,
48454 {"Uplink Speed", "wlan.hs20.anqp.wan_metrics.uplink_speed",
48455 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48456
48457 {&hf_ieee80211_hs20_anqp_wan_metrics_downlink_load,
48458 {"Downlink Load", "wlan.hs20.anqp.wan_metrics.downlink_load",
48459 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48460
48461 {&hf_ieee80211_hs20_anqp_wan_metrics_uplink_load,
48462 {"Uplink Load", "wlan.hs20.anqp.wan_metrics.uplink_load",
48463 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48464
48465 {&hf_ieee80211_hs20_anqp_wan_metrics_lmd,
48466 {"LMD", "wlan.hs20.anqp.wan_metrics.lmd",
48467 FT_UINT16, BASE_DEC, NULL((void*)0), 0, "Load Measurement Duration", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48468
48469 {&hf_ieee80211_hs20_anqp_cc_proto_ip_proto,
48470 {"IP Protocol", "wlan.hs20.anqp.cc.ip_proto",
48471 FT_UINT8, BASE_DEC, VALS(hs20_cc_proto_vals)((0 ? (const struct _value_string*)0 : ((hs20_cc_proto_vals))
))
, 0,
48472 "ProtoPort Tuple - IP Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48473
48474 {&hf_ieee80211_hs20_anqp_cc_proto_port_num,
48475 {"Port Number", "wlan.hs20.anqp.cc.port_num",
48476 FT_UINT16, BASE_DEC, VALS(hs20_cc_port_vals)((0 ? (const struct _value_string*)0 : ((hs20_cc_port_vals)))
)
, 0,
48477 "ProtoPort Tuple - Port Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48478
48479 {&hf_ieee80211_hs20_anqp_cc_proto_status,
48480 {"Status", "wlan.hs20.anqp.cc.status",
48481 FT_UINT8, BASE_DEC, VALS(hs20_cc_status_vals)((0 ? (const struct _value_string*)0 : ((hs20_cc_status_vals)
)))
, 0,
48482 "ProtoPort Tuple - Status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48483
48484 {&hf_ieee80211_hs20_anqp_nai_hrq_count,
48485 {"NAI Home Realm Count", "wlan.hs20.anqp.nai_hrq.count",
48486 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48487
48488 {&hf_ieee80211_hs20_anqp_nai_hrq_encoding_type,
48489 {"NAI Home Realm Encoding Type",
48490 "wlan.hs20.anqp.nai_hrq.encoding_type",
48491 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals)((0 ? (const struct _value_string*)0 : ((nai_realm_encoding_vals
))))
,
48492 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48493
48494 {&hf_ieee80211_hs20_anqp_nai_hrq_length,
48495 {"NAI Home Realm Name Length", "wlan.hs20.anqp.nai_hrq.length",
48496 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48497
48498 {&hf_ieee80211_hs20_anqp_nai_hrq_realm_name,
48499 {"NAI Home Realm Name", "wlan.hs20.anqp.nai_hrq.name",
48500 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48501
48502 {&hf_ieee80211_hs20_anqp_oper_class_indic,
48503 {"Operating Class", "wlan.hs20.anqp.oper_class_indic.oper_class",
48504 FT_UINT8, BASE_DEC | BASE_RANGE_STRING0x00000100, RVALS(oper_class_rvals)((0 ? (const struct _range_string*)0 : ((oper_class_rvals)))),
48505 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48506
48507 {&hf_ieee80211_hs20_osu_friendly_names_len,
48508 {"OSU Friendly Name Length", "wlan.hs20.osu_friendly_names_len",
48509 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48510
48511 {&hf_ieee80211_hs20_osu_friendly_name_length,
48512 {"Length", "wlan.hs20.osu_friendly_name.len",
48513 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48514
48515 {&hf_ieee80211_hs20_osu_friendly_name_language,
48516 {"Language Code", "wlan.hs20.osu_friendly_name.language",
48517 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48518
48519 {&hf_ieee80211_hs20_osu_friendly_name_name,
48520 {"OSU Friendly Name", "wlan.hs20.osu_friendly_name.name",
48521 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48522
48523 {&hf_ieee80211_hs20_osu_server_uri_len,
48524 {"OSU Server URI Length", "wlan.hs20.osu_server_uri_len",
48525 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48526
48527 {&hf_ieee80211_hs20_osu_server_uri,
48528 {"OSU Server URI", "wlan.hs20.osu_server_uri",
48529 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48530
48531 {&hf_ieee80211_hs20_osu_method_list_len,
48532 {"OSU Method List Length", "wlan.hs20.osu_method_list_len",
48533 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48534
48535 {&hf_ieee80211_hs20_osu_method_val,
48536 {"OSU Method", "wlan.hs20.osu_method_list.method",
48537 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48538
48539 {&hf_ieee80211_hs20_icons_avail_len,
48540 {"Icons Available Length", "wlan.hs20.osu_icons_avail_len",
48541 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48542
48543 {&hf_ieee80211_hs20_osu_providers_list_ssid_len,
48544 {"SSID Length", "wlan.hs20.anqp_osu_prov_list.ssid_len",
48545 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48546
48547 {&hf_ieee80211_hs20_osu_providers_ssid,
48548 {"SSID", "wlan.hs20.anqp_osu_prov_list.ssid",
48549 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48550
48551 {&hf_ieee80211_hs20_osu_providers_count,
48552 {"Number of OSU Providers", "wlan.hs20.anqp_osu_prov_list.number",
48553 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48554
48555 {&hf_ieee80211_hs20_osu_prov_length,
48556 {"OSU Provider Length", "wlan.hs20.anqp_osu_prov.len",
48557 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48558
48559 {&hf_ieee80211_hs20_icon_request_filename,
48560 {"Icon Filename", "wlan.hs20.anqp_icon_request.icon_filename",
48561 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48562
48563 {&hf_ieee80211_osu_icon_avail_width,
48564 {"Icon Width", "wlan.hs20.osu_icons_avail.icon_width",
48565 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48566
48567 {&hf_ieee80211_osu_icon_avail_height,
48568 {"Icon Height", "wlan.hs20.osu_icons_avail.icon_height",
48569 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48570
48571 {&hf_ieee80211_osu_icon_avail_lang_code,
48572 {"Language Code", "wlan.hs20.osu_icons_avail.lang_code",
48573 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48574
48575 {&hf_ieee80211_osu_icon_avail_icon_type_len,
48576 {"Icon Type Length", "wlan.hs20.osu_icons_avail.icon_type_len",
48577 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48578
48579 {&hf_ieee80211_osu_icon_avail_icon_type,
48580 {"Icon Type", "wlan.hs20.osu_icons_avail.icon_type",
48581 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48582
48583 {&hf_ieee80211_osu_icon_avail_filename_len,
48584 {"Icon Filename Length", "wlan.hs20.osu_icons_avail.icon_filename_len",
48585 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48586
48587 {&hf_ieee80211_osu_icon_avail_filename,
48588 {"Icon Filename", "wlan.hs20.osu_icons_avail.icon_filename",
48589 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48590
48591 {&hf_ieee80211_hs20_osu_nai_len,
48592 {"OSU_NAI Length", "wlan.hs20.osu_nai.len",
48593 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48594
48595 {&hf_ieee80211_hs20_osu_nai,
48596 {"OSU_NAI", "wlan.hs20.osu_nai",
48597 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48598
48599 {&hf_ieee80211_hs20_osu_service_desc_len,
48600 {"OSU Service Description Length", "wlan.hs20.osu_service_desc_len",
48601 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48602
48603 {&hf_ieee80211_hs20_osu_service_desc_duple_len,
48604 {"Length", "wlan.hs20.osu_service_desc.duple.len",
48605 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48606
48607 {&hf_ieee80211_hs20_osu_service_desc_lang,
48608 {"Language Code", "wlan.hs20.osu_service_desc.duple.lang",
48609 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48610
48611 {&hf_ieee80211_hs20_osu_service_desc,
48612 {"OSU Service Description", "wlan.hs20.osu_service_desc.duple.desc",
48613 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48614
48615 {&hf_ieee80211_hs20_icon_binary_file_status,
48616 {"Download Status Code", "wlan.hs20.anqp_icon_request.download_status",
48617 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48618
48619 {&hf_ieee80211_hs20_icon_type_length,
48620 {"Icon Type Length", "wlan.hs20.anqp_icon_request.icon_type_len",
48621 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48622
48623 {&hf_ieee80211_hs20_icon_type,
48624 {"Icon Type", "wlan.hs20.anqp_icon_request.icon_type",
48625 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48626
48627 {&hf_ieee80211_hs20_icon_binary_data_len,
48628 {"Icon Binary Data Length", "wlan.anqp_icon_request.icon_binary_data_len",
48629 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48630
48631 {&hf_ieee80211_hs20_icon_binary_data,
48632 {"Icon Binary Data", "wlan.h220.anqp_icon_request.icon_binary_data",
48633 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48634
48635 {&hf_ieee80211_hs20_subscription_remediation_url_len,
48636 {"Server URL Length", "wlan.hs20.subs_remediation.server_url_len",
48637 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48638
48639 {&hf_ieee80211_hs20_subscription_remediation_server_url,
48640 {"Server URL", "wlan.hs20.subs_remediation.server_url",
48641 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48642
48643 {&hf_ieee80211_hs20_subscription_remediation_server_method,
48644 {"Server Method", "wlan.hs20.subs_remediation.server_method",
48645 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48646
48647 {&hf_ieee80211_hs20_deauth_reason_code,
48648 {"De-Auth Reason Code", "wlan.hs20.deauth.reason_code",
48649 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48650
48651 {&hf_ieee80211_hs20_reauth_delay,
48652 {"Re-Auth Delay", "wlan.hs20.deauth.reauth_delay",
48653 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) }},
48654
48655 {&hf_ieee80211_hs20_deauth_reason_url_len,
48656 {"Reason URL Length", "wlan.hs20.deauth.reason_url_len",
48657 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48658
48659 {&hf_ieee80211_hs20_deauth_imminent_reason_url,
48660 {"Reason URL", "wlan.hs20.deauth.reason_url",
48661 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48662
48663 {&hf_ieee80211_hs20_anqp_venue_url_length,
48664 {"Length", "wlan.hs20.venue_url.len",
48665 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48666
48667 {&hf_ieee80211_hs20_anqp_venue_number,
48668 {"Venue number", "wlan.hs20.venue_url.venue_num",
48669 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48670
48671 {&hf_ieee80211_hs20_anqp_venue_url,
48672 {"Venue URL", "wlan.hs20.venue_url.url",
48673 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48674
48675 {&hf_ieee80211_hs20_anqp_advice_of_charge_length,
48676 {"Length", "wlan.hs20.advice_of_charge.len",
48677 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48678
48679 {&hf_ieee80211_hs20_anqp_advice_of_charge_type,
48680 {"Advice of Charge Type", "wlan.hs20.advice_of_charge.type",
48681 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48682
48683 {&hf_ieee80211_hs20_anqp_aoc_nai_realm_encoding,
48684 {"NAI Realm Encoding", "wlan.hs20.advice_of_charge.nai_realm_enc",
48685 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48686
48687 {&hf_ieee80211_hs20_anqp_aoc_nai_realm_len,
48688 {"NAI Realm Length", "wlan.hs20.advice_of_charge.nai_realm_len",
48689 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48690
48691 {&hf_ieee80211_hs20_anqp_aoc_nai_realm,
48692 {"NAI Realm", "wlan.hs20.advice_of_charge.nai_realm",
48693 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48694
48695 {&hf_ieee80211_hs20_anqp_aoc_plan_len,
48696 {"Plan length", "wlan.hs20.advice_of_charge.plan_info_tuples.plan_len",
48697 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48698
48699 {&hf_ieee80211_hs20_anqp_aoc_plan_lang,
48700 {"Plan language", "wlan.hs20.advice_of_charge.plan_info_tuples.plan_lang",
48701 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48702
48703 {&hf_ieee80211_hs20_anqp_aoc_plan_curcy,
48704 {"Plan currency", "wlan.hs20.advice_of_charge.plan_info_tuples.plan_curcy",
48705 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48706
48707 {&hf_ieee80211_hs20_anqp_aoc_plan_information,
48708 {"Plan information", "wlan.hs20.advice_of_charge.plan_info_tuples.info",
48709 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48710
48711 {&hf_ieee80211_tag,
48712 {"Tag", "wlan.tag",
48713 FT_NONE, BASE_NONE, NULL((void*)0), 0,
48714 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48715
48716 {&hf_ieee80211_tag_number,
48717 {"Tag Number", "wlan.tag.number",
48718 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_ext, 0,
48719 "Element ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48720
48721 {&hf_ieee80211_tag_length,
48722 {"Tag length", "wlan.tag.length",
48723 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
48724 "Length of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48725
48726 {&hf_ieee80211_tag_data,
48727 {"Tag Data", "wlan.tag.data",
48728 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48729 "Data Interpretation of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48730
48731 {&hf_ieee80211_tag_oui,
48732 {"OUI", "wlan.tag.oui",
48733 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
48734 "OUI of vendor specific IE", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48735
48736 {&hf_ieee80211_tag_oui_wfa_subtype,
48737 {"WFA Subtype", "wlan.tag.oui.wfa_subtype",
48738 FT_UINT8, BASE_DEC, VALS(wfa_subtype_vals)((0 ? (const struct _value_string*)0 : ((wfa_subtype_vals)))), 0,
48739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48740
48741 {&hf_ieee80211_tag_ds_param_channel,
48742 {"Current Channel", "wlan.ds.current_channel",
48743 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48744 "DS Parameter Set - Current Channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48745
48746 {&hf_ieee80211_tag_cfp_count,
48747 {"CFP Count", "wlan.cfp.count",
48748 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48749 "Indicates how many delivery traffic indication messages (DTIMs)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48750
48751 {&hf_ieee80211_tag_cfp_period,
48752 {"CFP Period", "wlan.cfp.period",
48753 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48754 "Indicates the number of DTIM intervals between the start of CFPs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48755
48756 {&hf_ieee80211_tag_cfp_max_duration,
48757 {"CFP Max Duration", "wlan.cfp.max_duration",
48758 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48759 "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) }},
48760
48761 {&hf_ieee80211_tag_cfp_dur_remaining,
48762 {"CFP Dur Remaining", "wlan.cfp.dur_remaining",
48763 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48764 "Indicates the maximum time (in TU) remaining in the present CFP", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48765
48766 {&hf_ieee80211_tag_vendor_oui_type,
48767 {"Vendor Specific OUI Type", "wlan.tag.vendor.oui.type",
48768 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48770
48771 {&hf_ieee80211_tag_vendor_data,
48772 {"Vendor Specific Data", "wlan.tag.vendor.data",
48773 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48774 "Unknown/undecoded Vendor Specific Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48775
48776 {&hf_ieee80211_symbp_extreme_assoc_clients,
48777 {"Associated clients", "wlan.tag.symbol_proprietary.extreme.assoc_clients",
48778 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48779 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48780
48781 {&hf_ieee80211_symbp_extreme_load_kbps,
48782 {"Load", "wlan.tag.symbol_proprietary.extreme.load_kbps",
48783 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0,
48784 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48785
48786 {&hf_ieee80211_symbp_extreme_load_pps,
48787 {"Load", "wlan.tag.symbol_proprietary.extreme.load_pps",
48788 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_pkts_per_sec)((0 ? (const struct unit_name_string*)0 : ((&units_pkts_per_sec
))))
, 0,
48789 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48790
48791 {&hf_ieee80211_symbp_extreme_client_tx_power,
48792 {"Desired client Tx power", "wlan.tag.symbol_proprietary.extreme.client_txpower",
48793 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48794 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48795
48796 {&hf_ieee80211_symbp_extreme_timestamp,
48797 {"Timestamp", "wlan.tag.symbol_proprietary.extreme.timestamp",
48798 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL((void*)0), 0,
48799 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48800
48801 {&hf_ieee80211_tag_symbol_proprietary_oui,
48802 {"Symbol Proprietary OUI", "wlan.tag.symbol_proprietary.oui",
48803 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
48804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48805
48806 {&hf_ieee80211_tag_symbol_proprietary_data,
48807 {"Symbol Proprietary Data", "wlan.tag.symbol_proprietary.data",
48808 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48809 "Unknown/undecoded Symbol Proprietary Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48810
48811 {&hf_ieee80211_tim_dtim_count,
48812 {"DTIM count", "wlan.tim.dtim_count",
48813 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48814 "Indicates how many Beacon frames (including the current frame) appear before the next DTIM", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48815
48816 {&hf_ieee80211_tim_dtim_period,
48817 {"DTIM period", "wlan.tim.dtim_period",
48818 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48819 "Indicates the number of beacon intervals between successive DTIMs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48820
48821 {&hf_ieee80211_tim_bmapctl,
48822 {"Bitmap control", "wlan.tim.bmapctl",
48823 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
48824 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48825
48826 {&hf_ieee80211_tim_bmapctl_mcast,
48827 {"Multicast", "wlan.tim.bmapctl.multicast",
48828 FT_BOOLEAN, 8, NULL((void*)0), 0x1,
48829 "Contains the Traffic Indicator bit associated with Association ID 0", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48830
48831 {&hf_ieee80211_tim_bmapctl_offset,
48832 {"Bitmap Offset", "wlan.tim.bmapctl.offset",
48833 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE,
48834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48835
48836 {&hf_ieee80211_tim_partial_virtual_bitmap,
48837 {"Partial Virtual Bitmap", "wlan.tim.partial_virtual_bitmap",
48838 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
48839 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48840
48841 {&hf_ieee80211_tim_aid,
48842 {"Association ID", "wlan.tim.aid",
48843 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
48844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48845
48846 {&hf_ieee80211_tag_ibss_atim_window,
48847 {"Atim Windows", "wlan.ibss.atim_windows",
48848 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
48849 "Contains the ATIM Window length in TU", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48850
48851 {&hf_ieee80211_tag_country_info_code,
48852 {"Code", "wlan.country_info.code",
48853 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
48854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48855
48856 {&hf_ieee80211_tag_country_info_env,
48857 {"Environment", "wlan.country_info.environment",
48858 FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS0x00008000, VALS(environment_vals)((0 ? (const struct _value_string*)0 : ((environment_vals)))), 0x0,
48859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48860
48861 {&hf_ieee80211_tag_country_info_pad,
48862 {"Padding", "wlan.country_info.padding",
48863 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
48864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48865
48866 {&hf_ieee80211_tag_country_info_fnm,
48867 {"Country Info", "wlan.country_info.fnm",
48868 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
48869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48870
48871 {&hf_ieee80211_tag_country_info_fnm_fcn,
48872 {"First Channel Number", "wlan.country_info.fnm.fcn",
48873 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48875
48876 {&hf_ieee80211_tag_country_info_fnm_nc,
48877 {"Number of Channels", "wlan.country_info.fnm.nc",
48878 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48880
48881 {&hf_ieee80211_tag_country_info_fnm_mtpl,
48882 {"Maximum Transmit Power Level", "wlan.country_info.fnm.mtpl",
48883 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
48884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48885
48886 {&hf_ieee80211_tag_country_info_rrc,
48887 {"Country Info", "wlan.country_info.rrc",
48888 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
48889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48890
48891 {&hf_ieee80211_tag_country_info_rrc_oei,
48892 {"Operating Extension Identifier", "wlan.country_info.rrc.oei",
48893 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48895
48896 {&hf_ieee80211_tag_country_info_rrc_oc,
48897 {"Operating Class", "wlan.country_info.rrc.oc",
48898 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48900
48901 {&hf_ieee80211_tag_country_info_rrc_cc,
48902 {"Coverage Class", "wlan.country_info.rrc.cc",
48903 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48905
48906 {&hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
48907 {"Prime Radix", "wlan.fh_hopping.parameter.prime_radix",
48908 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48910
48911 {&hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
48912 {"Number of Channels", "wlan.fh_hopping.parameter.nb_channels",
48913 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48915
48916 {&hf_ieee80211_tag_fh_hopping_table_flag,
48917 {"Flag", "wlan.fh_hopping.table.flag",
48918 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
48919 "Indicates that a Random Table is present when the value is 1", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48920
48921 {&hf_ieee80211_tag_fh_hopping_table_number_of_sets,
48922 {"Number of Sets", "wlan.fh_hopping.table.number_of_sets",
48923 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48924 "Indicates the total number of sets within the hopping patterns", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48925
48926 {&hf_ieee80211_tag_fh_hopping_table_modulus,
48927 {"Modulus", "wlan.fh_hopping.table.modulus",
48928 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
48929 "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) }},
48930
48931 {&hf_ieee80211_tag_fh_hopping_table_offset,
48932 {"Offset", "wlan.fh_hopping.table.offset",
48933 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
48934 "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) }},
48935
48936 {&hf_ieee80211_tag_fh_hopping_random_table,
48937 {"Random Table", "wlan.fh_hopping.table.random_table",
48938 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
48939 "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) }},
48940
48941 {&hf_ieee80211_tag_request,
48942 {"Requested Element ID", "wlan.tag.request",
48943 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_ext, 0,
48944 "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) }},
48945
48946 {&hf_ieee80211_tag_extended_request_id,
48947 {"Requested Element ID", "wlan.tag.extended_request.id",
48948 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_ext, 0,
48949 "The Element ID used to indicate an extended element", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48950
48951 {&hf_ieee80211_tag_extended_request_extension,
48952 {"Requested Element ID Extensions", "wlan.tag.extended_request.ext",
48953 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_eid_ext_ext, 0,
48954 "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) }},
48955
48956 {&hf_ieee80211_tclas_up,
48957 {"User Priority", "wlan.tclas.user_priority",
48958 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(user_prio_rvals)((0 ? (const struct _range_string*)0 : ((user_prio_rvals)))), 0,
48959 "Contains the value of the UP of the associated MSDUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48960
48961 {&hf_ieee80211_tclas_class_type,
48962 {"Classifier Type", "wlan.tclas.class_type",
48963 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(classifier_type)((0 ? (const struct _range_string*)0 : ((classifier_type)))), 0,
48964 "Specifies the type of classifier parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48965
48966 {&hf_ieee80211_tclas_class_mask,
48967 {"Classifier Mask", "wlan.tclas.class_mask",
48968 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
48969 "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) }},
48970
48971 {&hf_ieee80211_tclas_mask_reserved,
48972 {"Reserved", "wlan.tclas.class_mask.reserved",
48973 FT_UINT8, BASE_HEX, NULL((void*)0), 0, "Class mask is reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48974
48975 {&hf_ieee80211_tclas_class_mask0_src_addr,
48976 {"Source Address", "wlan.tclas.class_mask.src_addr",
48977 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48978
48979 {&hf_ieee80211_tclas_class_mask0_dst_addr,
48980 {"Destination Address", "wlan.tclas.class_mask.dst_addr",
48981 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48982
48983 {&hf_ieee80211_tclas_class_mask0_type,
48984 {"Type", "wlan.tclas.class_mask.type",
48985 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48986
48987 {&hf_ieee80211_tclas_class_mask1_ver,
48988 {"Version", "wlan.tclas.class_mask.version",
48989 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48990
48991 {&hf_ieee80211_tclas_class_mask1_src_ip,
48992 {"Source IP Address", "wlan.tclas.class_mask.src_ip",
48993 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48994
48995 {&hf_ieee80211_tclas_class_mask1_dst_ip,
48996 {"Destination IP Address", "wlan.tclas.class_mask.dst_ip",
48997 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48998
48999 {&hf_ieee80211_tclas_class_mask1_src_port,
49000 {"Source Port", "wlan.tclas.class_mask.src_port",
49001 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49002
49003 {&hf_ieee80211_tclas_class_mask1_dst_port,
49004 {"Destination Port", "wlan.tclas.class_mask.dst_port",
49005 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49006
49007 {&hf_ieee80211_tclas_class_mask1_ipv4_dscp,
49008 {"DSCP", "wlan.tclas.class_mask.dscp",
49009 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49010
49011 {&hf_ieee80211_tclas_class_mask1_ipv4_proto,
49012 {"Protocol", "wlan.tclas.class_mask.proto",
49013 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49014
49015 {&hf_ieee80211_tclas_class_mask1_ipv6_flow,
49016 {"Flow Label", "wlan.tclas.class_mask.flow_label",
49017 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49018
49019 {&hf_ieee80211_tclas_class_mask1_reserved,
49020 {"Reserved", "wlan.tclas.class_mask.reserved",
49021 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49022
49023 {&hf_ieee80211_tclas_class_mask2_tci,
49024 {"802.1Q CLAN TCI", "wlan.tclas.class_mask.tci",
49025 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49026
49027 {&hf_ieee80211_tclas_src_mac_addr,
49028 {"Source address", "wlan.tclas.src_mac_addr",
49029 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
49030 "Classifier Parameters Ethernet Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49031
49032 {&hf_ieee80211_tclas_dst_mac_addr,
49033 {"Destination address", "wlan.tclas.dat_mac_addr",
49034 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
49035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49036
49037 {&hf_ieee80211_tclas_ether_type,
49038 {"Ethernet Type", "wlan.tclas.ether_type",
49039 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49040 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49041
49042 {&hf_ieee80211_tclas_version,
49043 {"IP Version", "wlan.tclas.version",
49044 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49046
49047 {&hf_ieee80211_tclas_ipv4_src,
49048 {"IPv4 Src Addr", "wlan.tclas.ipv4_src",
49049 FT_IPv4, BASE_NONE, NULL((void*)0), 0,
49050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49051
49052 {&hf_ieee80211_tclas_ipv4_dst,
49053 {"IPv4 Dst Addr", "wlan.tclas.ipv4_dst",
49054 FT_IPv4, BASE_NONE, NULL((void*)0), 0,
49055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49056
49057 {&hf_ieee80211_tclas_src_port,
49058 {"Source Port", "wlan.tclas.src_port",
49059 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49061
49062 {&hf_ieee80211_tclas_dst_port,
49063 {"Destination Port", "wlan.tclas.dst_port",
49064 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49066
49067 {&hf_ieee80211_tclas_dscp,
49068 {"IPv4 DSCP", "wlan.tclas.dscp",
49069 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49070 "IPv4 Differentiated Services Code Point (DSCP) Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49071
49072 {&hf_ieee80211_tclas_protocol,
49073 {"Protocol", "wlan.tclas.protocol",
49074 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49075 "IPv4 Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49076
49077 {&hf_ieee80211_tclas_ipv6_src,
49078 {"IPv6 Src Addr", "wlan.tclas.ipv6_src",
49079 FT_IPv6, BASE_NONE, NULL((void*)0), 0,
49080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49081
49082 {&hf_ieee80211_tclas_ipv6_dst,
49083 {"IPv6 Dst Addr", "wlan.tclas.ipv6_dst",
49084 FT_IPv6, BASE_NONE, NULL((void*)0), 0,
49085 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49086
49087 {&hf_ieee80211_tclas_flow,
49088 {"Flow Label", "wlan.tclas.flow",
49089 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
49090 "IPv6 Flow Label", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49091
49092 {&hf_ieee80211_tclas_tag_type,
49093 {"802.1Q Tag Type", "wlan.tclas.tag_type",
49094 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49096
49097 {&hf_ieee80211_tclas_filter_offset,
49098 {"Filter Offset", "wlan.tclas.filter_offset",
49099 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49100
49101 {&hf_ieee80211_tclas_filter_value,
49102 {"Filter Value", "wlan.tclas.filter_value",
49103 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49104
49105 {&hf_ieee80211_tclas_filter_mask,
49106 {"Filter Mask", "wlan.tclas.filter_mask",
49107 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49108
49109 {&hf_ieee80211_tclas4_version,
49110 {"Version", "wlan.tclas.class4.version",
49111 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49112
49113 {&hf_ieee80211_tclas_class_mask4_ver,
49114 {"Version", "wlan.tclas.class4.mask.version",
49115 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) }},
49116
49117 {&hf_ieee80211_tclas_class_mask4_4_src_ip,
49118 {"Source IP (IPv4)", "wlan.tclas.class4.mask.ipv4_src",
49119 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) }},
49120
49121 {&hf_ieee80211_tclas_class_mask4_4_dst_ip,
49122 {"Destination IP (IPv4)", "wlan.tclas.class4.mask.ipv4_dst",
49123 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) }},
49124
49125 {&hf_ieee80211_tclas_class_mask4_src_port,
49126 {"Source Port", "wlan.tclas.class4.mask.src_port",
49127 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) }},
49128
49129 {&hf_ieee80211_tclas_class_mask4_dst_port,
49130 {"Destination Port", "wlan.tclas.class4.mask.dst_port",
49131 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) }},
49132
49133 {&hf_ieee80211_tclas_class_mask4_dscp,
49134 {"DSCP", "wlan.tclas.class4.mask.dscp",
49135 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) }},
49136
49137 {&hf_ieee80211_tclas_class_mask4_ipv4_proto,
49138 {"Protocol", "wlan.tclas.class4.mask.protocol",
49139 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) }},
49140
49141 {&hf_ieee80211_tclas_class_mask4_reserved,
49142 {"Reserved", "wlan.tclas.class4.mask.reserved",
49143 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49144
49145 {&hf_ieee80211_tclas_class_mask4_6_src_ip,
49146 {"Source IP (IPv6)", "wlan.tclas.class4.mask.ipv6_src",
49147 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) }},
49148
49149 {&hf_ieee80211_tclas_class_mask4_6_dst_ip,
49150 {"Destination IP (IPv6)", "wlan.tclas.class4.mask.ipv6_dst",
49151 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) }},
49152
49153 {&hf_ieee80211_tclas_reserved_bytes,
49154 {"Reserved", "wlan.tclas.reserved",
49155 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49156
49157 {&hf_ieee80211_tclas_class_mask4_next_hdr,
49158 {"Next Header", "wlan.tclas.class4.mask.next_header",
49159 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) }},
49160
49161 {&hf_ieee80211_tclas_class_mask4_flow_label,
49162 {"Flow Label", "wlan.tclas.class4.mask.flow_label",
49163 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) }},
49164
49165 {&hf_ieee80211_tclas4_ipv4_src,
49166 {"Source IP (IPv4)", "wlan.tclas.class4.ipv4_src_ip",
49167 FT_IPv4, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49168
49169 {&hf_ieee80211_tclas4_ipv4_dst,
49170 {"Destination IP (IPv4)", "wlan.tclas.class4.ipv4_dst_ip",
49171 FT_IPv4, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49172
49173 {&hf_ieee80211_tclas4_src_port,
49174 {"Source Port", "wlan.tclas.class4.src_port",
49175 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49176
49177 {&hf_ieee80211_tclas4_dst_port,
49178 {"Destination Port", "wlan.tclas.class4.dst_port",
49179 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49180
49181 {&hf_ieee80211_tclas4_dscp,
49182 {"DSCP", "wlan.tclas.class4.dscp",
49183 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49184
49185 {&hf_ieee80211_tclas4_protocol,
49186 {"Protocol", "wlan.tclas.class4.protocol",
49187 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49188
49189 {&hf_ieee80211_tclas4_reserved,
49190 {"Reserved", "wlan.tclas.class4.reserved",
49191 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49192
49193 {&hf_ieee80211_tclas4_ipv6_src,
49194 {"Source IP (IPv6)", "wlan.tclas.class4.ipv6_src_ip",
49195 FT_IPv6, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49196
49197 {&hf_ieee80211_tclas4_ipv6_dst,
49198 {"Destination IP (IPv6)", "wlan.tclas.class4.ipv6_dst_ip",
49199 FT_IPv6, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49200
49201 {&hf_ieee80211_tclas4_next_hdr,
49202 {"Next Header", "wlan.tclas.class4.next_header",
49203 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49204
49205 {&hf_ieee80211_tclas4_flow,
49206 {"Flow Label", "wlan.tclas.class4.flow_label",
49207 FT_UINT24, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49208
49209 {&hf_ieee80211_tclas_tclas_8021d_up_pcp,
49210 {"802.1D UP/802.1Q Priority Code Point", "wlan.tclas.class4.8021dq_up_pcp",
49211 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49212
49213 {&hf_ieee80211_tclas_8021q_dei,
49214 {"802.1Q DEI", "wlan.tclas.class4.8021q_dei",
49215 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49216
49217 {&hf_ieee80211_tclas_8021q_vid,
49218 {"802.1Q VID", "wlan.tclas.class4.8021q_vid",
49219 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49220
49221 {&hf_ieee80211_tclas_class_mask5_up_prio,
49222 {"802.1D UP/802.1Q PCP", "wlan.tclas.class5.mask.8021dq_up_prio",
49223 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) }},
49224
49225 {&hf_ieee80211_tclas_class_mask5_dei,
49226 {"802.1Q DEI", "wlan.tclas.class4.mask.8021q_dei",
49227 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) }},
49228
49229 {&hf_ieee80211_tclas_class_mask5_vid,
49230 {"802.1Q VID", "wlan.tclas.class4.mask.8021q_vid",
49231 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49232
49233 {&hf_ieee80211_tclas_class_mask5_reserved,
49234 {"Reserved", "wlan.tclas.class5.mask.reserved",
49235 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49236
49237 {&hf_ieee80211_tclas_class_mask6_a_above,
49238 {"Classifier Mask", "wlan.tclas.class6-9.mask",
49239 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49240
49241 {&hf_ieee80211_tclas_class_mask6_frame_control_match_spec,
49242 {"Frame Control", "wlan.tclas.class6.mask.frame_control",
49243 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
,
49244 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49245
49246 {&hf_ieee80211_tclas_class_mask6_duration_id_match_spec,
49247 {"Duration ID", "wlan.tclas.class6.mask.duration_id",
49248 FT_UINT24, BASE_HEX, VALS(duration_id_mask_vals)((0 ? (const struct _value_string*)0 : ((duration_id_mask_vals
))))
,
49249 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49250
49251 {&hf_ieee80211_tclas_class_mask6_address_1_match_spec,
49252 {"Address 1", "wlan.tclas.class6.mask.address_1",
49253 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) }},
49254
49255 {&hf_ieee80211_tclas_class_mask6_address_2_match_spec,
49256 {"Address 2", "wlan.tclas.class6.mask.address_2",
49257 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) }},
49258
49259 {&hf_ieee80211_tclas_class_mask6_address_3_match_spec,
49260 {"Address 3", "wlan.tclas.class6.mask.address_3",
49261 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) }},
49262
49263 {&hf_ieee80211_tclas_class_mask6_sequence_control_spec,
49264 {"Sequence Control", "wlan.tclas.class6.mask.sequence_control",
49265 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49266 0x00C000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49267
49268 {&hf_ieee80211_tclas_class_mask6_address_4_match_spec,
49269 {"Address 4", "wlan.tclas.class6.mask.address_4",
49270 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) }},
49271
49272 {&hf_ieee80211_tclas_class_mask6_qos_control_spec,
49273 {"QoS Control", "wlan.tclas.class6.mask.qos_control",
49274 FT_UINT24, BASE_HEX, VALS(qos_control_mask_vals)((0 ? (const struct _value_string*)0 : ((qos_control_mask_vals
))))
,
49275 0x0C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49276
49277 {&hf_ieee80211_tclas_class_mask6_ht_control_spec,
49278 {"HT Control", "wlan.tclas.class6.mask.ht_control",
49279 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) }},
49280
49281 {&hf_ieee80211_tclas_class_mask6_reserved,
49282 {"Reserved", "wlan.tclas.class6.mask.reserved",
49283 FT_UINT24, BASE_HEX, NULL((void*)0), 0xC00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49284
49285 {&hf_ieee80211_tclas6_frame_control_spec,
49286 {"Frame Control Spec", "wlan.tclas.class6.frame_control_spec",
49287 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49288
49289 {&hf_ieee80211_tclas6_frame_control_mask,
49290 {"Frame Control Mask", "wlan.tclas.class6.frame_control_mask",
49291 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49292
49293 {&hf_ieee80211_tclas6_duration_spec,
49294 {"Duration Spec", "wlan.tclas.class6.duration_spec",
49295 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49296
49297 {&hf_ieee80211_tclas6_duration_mask,
49298 {"Duration Mask", "wlan.tclas.class6.duration_mask",
49299 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49300
49301 {&hf_ieee80211_tclas6_address_1_spec,
49302 {"Address 1 Spec", "wlan.tclas.class6.address_1_spec",
49303 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49304
49305 {&hf_ieee80211_tclas6_address_1_mask,
49306 {"Address 1 Mask", "wlan.tclas.class6.address_1_mask",
49307 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49308
49309 {&hf_ieee80211_tclas6_address_2_spec,
49310 {"Address 2 Spec", "wlan.tclas.class6.address_2_spec",
49311 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49312
49313 {&hf_ieee80211_tclas6_address_2_mask,
49314 {"Address 2 Mask", "wlan.tclas.class6.address_2_mask",
49315 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49316
49317 {&hf_ieee80211_tclas6_address_3_spec,
49318 {"Address 3 Spec", "wlan.tclas.class6.address_3_spec",
49319 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49320
49321 {&hf_ieee80211_tclas6_address_3_mask,
49322 {"Address 3 Mask", "wlan.tclas.class6.address_3_mask",
49323 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49324
49325 {&hf_ieee80211_tclas6_sequence_control_spec,
49326 {"Sequence Control Spec", "wlan.tclas.class6.sequence_control_spec",
49327 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49328
49329 {&hf_ieee80211_tclas6_sequence_control_mask,
49330 {"Sequence Control Mask", "wlan.tclas.class6.sequence_control_mask",
49331 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49332
49333 {&hf_ieee80211_tclas6_address_4_spec,
49334 {"Address 4 Spec", "wlan.tclas.class6.address_4_spec",
49335 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49336
49337 {&hf_ieee80211_tclas6_address_4_mask,
49338 {"Address 4 Mask", "wlan.tclas.class6.address_4_mask",
49339 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49340
49341 {&hf_ieee80211_tclas6_qos_control_spec,
49342 {"QoS Control Spec", "wlan.tclas.class6.qos_control_spes",
49343 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49344
49345 {&hf_ieee80211_tclas6_qos_control_mask,
49346 {"QoS Control Mask", "wlan.tclas.class6.qos_control_mask",
49347 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49348
49349 {&hf_ieee80211_tclas6_ht_control_spec,
49350 {"HT Control Spec", "wlan.tclas.class6.ht_control_spec",
49351 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49352
49353 {&hf_ieee80211_tclas6_ht_control_mask,
49354 {"HT Control Mask", "wlan.tclas.class6.ht_control_mask",
49355 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49356
49357 {&hf_ieee80211_tclas_class_mask7_frame_control_match_spec,
49358 {"Frame Control Match", "wlan.tclas.class7.frame_control_spec",
49359 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
,
49360 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49361
49362 {&hf_ieee80211_tclas_class_mask7_address_1_sid_match_spec,
49363 {"Address 1 (SID) Spec", "wlan.tclas.class4.address_1_sid_spec",
49364 FT_UINT24, BASE_HEX, VALS(address_1_sid_mask_vals)((0 ? (const struct _value_string*)0 : ((address_1_sid_mask_vals
))))
,
49365 0x00000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49366
49367 {&hf_ieee80211_tclas_class_mask7_address_2_match_spec,
49368 {"Address 2 Spec", "wlan.tclas.class7.address_2i_match_spec",
49369 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) }},
49370
49371 {&hf_ieee80211_tclas_class_mask7_sequence_control_spec,
49372 {"Sequence Control Spec", "wlan.tclas.class7.sequence_control_spec",
49373 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49374 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49375
49376 {&hf_ieee80211_tclas_class_mask7_address_3_match_spec,
49377 {"Address 3 Spec", "wlan.tclas.class7.address_3_match_spec",
49378 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) }},
49379
49380 {&hf_ieee80211_tclas_class_mask7_address_4_match_spec,
49381 {"Address 4 Spec", "wlan.tclas.class7.address_4_match_spec",
49382 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) }},
49383
49384 {&hf_ieee80211_tclas_class_mask7_reserved,
49385 {"Reserved", "wlan.tclas.class7.reserved",
49386 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49387
49388 {&hf_ieee80211_tclas7_frame_control_spec,
49389 {"Frame Control Spec", "wlan.tclas.class7.frame_control_spec",
49390 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49391
49392 {&hf_ieee80211_tclas7_frame_control_mask,
49393 {"Frame Control Mask", "wlan.tclas.class7.frame_control_mask",
49394 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49395
49396 {&hf_ieee80211_tclas7_address_1_sid_spec,
49397 {"Address 1 (SID) Spec", "wlan.tclas.class7.address_1_sid_spec",
49398 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49399
49400 {&hf_ieee80211_tclas7_address_1_sid_mask,
49401 {"Address 1 (SID) Mask", "wlan.tclas.class7.address_1_sid_mask",
49402 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49403
49404 {&hf_ieee80211_tclas7_address_2_spec,
49405 {"Address 2 Spec", "wlan.tclas.class7.address_2_spec",
49406 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49407
49408 {&hf_ieee80211_tclas7_address_2_mask,
49409 {"Address 2 Mask", "wlan.tclas.class7.address_2_mask",
49410 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49411
49412 {&hf_ieee80211_tclas7_sequence_control_spec,
49413 {"Sequence Control Spec", "wlan.tclas.class7.sequence_control_spec",
49414 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49415
49416 {&hf_ieee80211_tclas7_sequence_control_mask,
49417 {"Sequence Control Mask", "wlan.tclas.class7.sequence_control_mask",
49418 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49419
49420 {&hf_ieee80211_tclas7_address_3_spec,
49421 {"Address 3 Spec", "wlan.tclas.class7.address_3_spec",
49422 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49423
49424 {&hf_ieee80211_tclas7_address_3_mask,
49425 {"Address 3 Mask", "wlan.tclas.class7.address_3_mask",
49426 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49427
49428 {&hf_ieee80211_tclas7_address_4_spec,
49429 {"Address 4 Spec", "wlan.tclas.class4.address_4_spec",
49430 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49431
49432 {&hf_ieee80211_tclas7_address_4_mask,
49433 {"Address 4 Mask", "wlan.tclas.class4.address_4_mask",
49434 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49435
49436 {&hf_ieee80211_tclas_class_mask8_frame_control_match_spec,
49437 {"Frame Control Spec", "wlan.tclas.class8.mask.frame_control_spec",
49438 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
,
49439 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49440
49441 {&hf_ieee80211_tclas_class_mask8_address_1_bssid_match_spec,
49442 {"Address 1 (BSSID) Spec", "wlan.tclas.class8.mask.address_1_bssid_spec",
49443 FT_UINT24, BASE_HEX, VALS(address_1_bssid_mask_vals)((0 ? (const struct _value_string*)0 : ((address_1_bssid_mask_vals
))))
,
49444 0x00000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49445
49446 {&hf_ieee80211_tclas_class_mask8_address_2_sid_match_spec,
49447 {"Address 2 (SID) Spec", "wlan.tclas.class8.mask.address_2_sid_spec",
49448 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) }},
49449
49450 {&hf_ieee80211_tclas_class_mask8_sequence_control_spec,
49451 {"Sequence Control Spec", "wlan.tclas.class8.mask.sequence_control_spec",
49452 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49453 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49454
49455 {&hf_ieee80211_tclas_class_mask8_address_3_match_spec,
49456 {"Address 3 Spec", "wlan.tclas.class8.mask.address_3_spec",
49457 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) }},
49458
49459 {&hf_ieee80211_tclas_class_mask8_address_4_match_spec,
49460 {"Address 4 Spec", "wlan.tclas.class8.mask.address_4_spec",
49461 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) }},
49462
49463 {&hf_ieee80211_tclas_class_mask8_reserved,
49464 {"Reserved", "wlan.tclas.class8.reserved",
49465 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49466
49467 {&hf_ieee80211_tclas8_frame_control_spec,
49468 {"Frame Control Spec", "wlan.tclas.class8.frame_control_spec",
49469 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49470
49471 {&hf_ieee80211_tclas8_frame_control_mask,
49472 {"Frame Control Mask", "wlan.tclas.class8.frame_control_mask",
49473 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49474
49475 {&hf_ieee80211_tclas8_address_1_bssid_spec,
49476 {"Address 1 (BSSID) Spec", "wlan.tclas.class8.address_1_bssid_spec",
49477 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49478
49479 {&hf_ieee80211_tclas8_address_1_bssid_mask,
49480 {"Address 1 (BSSID) Mask", "wlan.tclas.class8.address_1_bssid_mask",
49481 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49482
49483 {&hf_ieee80211_tclas8_address_2_sid_spec,
49484 {"Address 2 (SID) Spec", "wlan.tclas.class8.address_2_sid_spec",
49485 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49486
49487 {&hf_ieee80211_tclas8_address_2_sid_mask,
49488 {"Address 2 (SID) Spec", "wlan.tclas.class8.address_2_sid_spec",
49489 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49490
49491 {&hf_ieee80211_tclas8_sequence_control_spec,
49492 {"Sequence Control Spec", "wlan.tclas.class8.sequence_control_spec",
49493 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49494
49495 {&hf_ieee80211_tclas8_sequence_control_mask,
49496 {"Sequence Control Mask", "wlan.tclas.class8.sequence_control_mask",
49497 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49498
49499 {&hf_ieee80211_tclas8_address_3_spec,
49500 {"Address 3 Spec", "wlan.tclas.class8.address_3_spec",
49501 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49502
49503 {&hf_ieee80211_tclas8_address_3_mask,
49504 {"Address 3 Mask", "wlan.tclas.class8.address_3_mask",
49505 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49506
49507 {&hf_ieee80211_tclas8_address_4_spec,
49508 {"Address 4 Spec", "wlan.tclas.class8.address_4_spec",
49509 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49510
49511 {&hf_ieee80211_tclas8_address_4_mask,
49512 {"Address 4 Mask", "wlan.tclas.class8.address_4_mask",
49513 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49514
49515 {&hf_ieee80211_tclas_class_mask9_frame_control_match_spec,
49516 {"Frame Control Spec", "wlan.tclas.class9.frame_control_spec",
49517 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) }},
49518
49519 {&hf_ieee80211_tclas_class_mask9_address_1_match_spec,
49520 {"Address 1 Spec", "wlan.tclas.class9.mask.address_1_spec",
49521 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) }},
49522
49523 {&hf_ieee80211_tclas_class_mask9_address_2_match_spec,
49524 {"Address 2 Spec", "wlan.tclas.class9.mask.address_2_spec",
49525 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) }},
49526
49527 {&hf_ieee80211_tclas_class_mask9_sequence_control_spec,
49528 {"Sequence Control Spec", "wlan.tclas.class9.mask.sequence_control_spec",
49529 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49530 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49531
49532 {&hf_ieee80211_tclas_class_mask9_reserved,
49533 {"Reserved", "wlan.tclas.class9.mask.reserved",
49534 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49535
49536 {&hf_ieee80211_tclas9_frame_control_spec,
49537 {"Frame Control Spec", "wlan.tclas.class9.frame_control_spec",
49538 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49539
49540 {&hf_ieee80211_tclas9_frame_control_mask,
49541 {"Frame Control Mask", "wlan.tclas.class9.frame_control_mask",
49542 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49543
49544 {&hf_ieee80211_tclas9_address_1_spec,
49545 {"Address 1 Spec", "wlan.tclas.class9.address_1_spec",
49546 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49547
49548 {&hf_ieee80211_tclas9_address_1_mask,
49549 {"Address 1 Mask", "wlan.tclas.class9.address_1_mask",
49550 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49551
49552 {&hf_ieee80211_tclas9_address_2_spec,
49553 {"Address 2 Spec", "wlan.tclas.class9.address_2_spec",
49554 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49555
49556 {&hf_ieee80211_tclas9_address_2_mask,
49557 {"Address 2 Mask", "wlan.tclas.class9.address_2_mask",
49558 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49559
49560 {&hf_ieee80211_tclas9_sequence_control_spec,
49561 {"Sequence Control Spec", "wlan.tclas.class9.sequence_control_spec",
49562 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49563
49564 {&hf_ieee80211_tclas9_sequence_control_mask,
49565 {"Sequence Control Mask", "wlan.tclas.class9.sequence_control_mask",
49566 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49567
49568 {&hf_ieee80211_tclas10_protocol_instance,
49569 {"Protocol Instance", "wlan.tclas.class10.protocol_instance",
49570 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49571
49572 {&hf_ieee80211_tclas10_protocol_num_next_hdr,
49573 {"Protocol Number or Next Header",
49574 "wlan.tclas.class10.proto_num_or_next_hdr",
49575 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49576
49577 {&hf_ieee80211_tag_challenge_text,
49578 {"Challenge Text", "wlan.tag.challenge_text",
49579 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49581
49582 {&hf_ieee80211_tag_oui_wfa_action_type,
49583 {"OUI Type", "wlan.action.oui_type",
49584 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) }},
49585
49586 {&hf_ieee80211_oui_qos_subtype,
49587 {"OUI Subtype", "wlan.action.dscp_policy.oui_subtype",
49588 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) }},
49589
49590 {&hf_ieee80211_oui_qos_mgmt_dialog_token,
49591 {"Dialog Token", "wlan.action.dscp_policy.dialog_token",
49592 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49593
49594 {&hf_ieee80211_oui_qos_mgmt_rqst_control,
49595 {"Request Control", "wlan.action.dscp_policy.request.control",
49596 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49597
49598 {&hf_ieee80211_oui_qos_mgmt_rq_ctrl_more,
49599 {"More", "wlan.action.dscp_policy.request.control.more",
49600 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49601
49602 {&hf_ieee80211_oui_qos_mgmt_rq_ctrl_reset,
49603 {"Reset", "wlan.action.dscp_policy.request.control.reset",
49604 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49605
49606 {&hf_ieee80211_oui_qos_mgmt_rq_reserved,
49607 {"Reserved", "wlan.action.dscp_policy.request.control.reserved",
49608 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49609
49610 {&hf_ieee80211_dscp_policy_id,
49611 {"Policy ID", "wlan.action.dscp_policy_response.policy_id",
49612 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49613
49614 {&hf_ieee80211_dscp_policy_status,
49615 {"Status", "wlan.action.dscp_policy_response.policy_status",
49616 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49617
49618 {&hf_ieee80211_oui_qos_mgmt_resp_control,
49619 {"Response Control", "wlan.action.dscp_policy.request.control",
49620 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49621
49622 {&hf_ieee80211_oui_qos_mgmt_rsp_ctrl_more,
49623 {"More", "wlan.action.dscp_policy.response.control.more",
49624 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49625
49626 {&hf_ieee80211_oui_qos_mgmt_rsp_ctrl_reset,
49627 {"Reset", "wlan.action.dscp_policy.response.control.reset",
49628 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49629
49630 {&hf_ieee80211_oui_qos_mgmt_rsp_reserved,
49631 {"Reserved", "wlan.action.dscp_policy.response.control.reserved",
49632 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49633
49634 {&hf_ieee80211_dscp_policy_scs_sts_list,
49635 {"Status List", "wlan.action.dscp_policy_response.policy_status_list",
49636 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49637
49638 {&hf_ieee80211_oui_qos_mgmt_count,
49639 {"Count", "wlan.action.dscp_policy.response.count",
49640 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49641
49642 {&hf_ieee80211_tag_he_6ghz_cap_inf,
49643 {"Capabilities Information", "wlan.tag.he_6ghz.cap_inf",
49644 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49645 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49646
49647 {&hf_ieee80211_tag_he_6ghz_cap_inf_b0_b2,
49648 {"Minimum MPDU Start Spacing", "wlan.tag.he_6ghz.cap_inf.b0_b2",
49649 FT_UINT16, BASE_HEX, VALS(s1g_min_mpdu_start_spacing_vals)((0 ? (const struct _value_string*)0 : ((s1g_min_mpdu_start_spacing_vals
))))
, 0x0007,
49650 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49651
49652 {&hf_ieee80211_tag_he_6ghz_cap_inf_b3_b5,
49653 {"Maximum A-MPDU Length Exponent", "wlan.tag.he_6ghz.cap_inf.b3_b5",
49654 FT_UINT16, BASE_HEX, VALS(vht_max_ampdu_flag)((0 ? (const struct _value_string*)0 : ((vht_max_ampdu_flag))
))
, 0x0038,
49655 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49656
49657 {&hf_ieee80211_tag_he_6ghz_cap_inf_b6_b7,
49658 {"Maximum MPDU Length", "wlan.tag.he_6ghz.cap_inf.b6_b7",
49659 FT_UINT16, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x00C0,
49660 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49661
49662 {&hf_ieee80211_tag_he_6ghz_cap_inf_b8,
49663 {"Reserved", "wlan.tag.he_6ghz.cap_inf.b8",
49664 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0100,
49665 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49666
49667 {&hf_ieee80211_tag_he_6ghz_cap_inf_b9_b10,
49668 {"SM Power Save", "wlan.tag.he_6ghz.cap_inf.b9b_b10",
49669 FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag)((0 ? (const struct _value_string*)0 : ((ht_sm_pwsave_flag)))
)
, 0x0600,
49670 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49671
49672 {&hf_ieee80211_tag_he_6ghz_cap_inf_b11,
49673 {"RD Responder", "wlan.tag.he_6ghz.cap_inf.b11",
49674 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800,
49675 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49676
49677 {&hf_ieee80211_tag_he_6ghz_cap_inf_b12,
49678 {"Rx Antenna Pattern Consistency", "wlan.tag.he_6ghz.cap_inf.b12",
49679 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x1000,
49680 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49681
49682 {&hf_ieee80211_tag_he_6ghz_cap_inf_b13,
49683 {"Tx Antenna Pattern Consistency", "wlan.tag.he_6ghz.cap_inf.b13",
49684 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x2000,
49685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49686
49687 {&hf_ieee80211_tag_he_6ghz_cap_inf_b14_b15,
49688 {"Reserved", "wlan.tag.he_6ghz.cap_inf.b14_b15",
49689 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000,
49690 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49691
49692 {&hf_ieee80211_tag_ftm_tsf_sync_info,
49693 {"TSF Sync Info", "wlan.tag.ftm_tsf_sync_info",
49694 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49695 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49696
49697 {&hf_ieee80211_rsn_version,
49698 {"RSN Version", "wlan.rsn.version",
49699 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49700 "Indicates the version number of the RSNA protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49701
49702 {&hf_ieee80211_rsn_gcs,
49703 {"Group Cipher Suite", "wlan.rsn.gcs",
49704 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gcs_base_custom)((const void *) (size_t) (rsn_gcs_base_custom)), 0,
49705 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49706
49707 {&hf_ieee80211_rsn_gcs_oui,
49708 {"Group Cipher Suite OUI", "wlan.rsn.gcs.oui",
49709 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49711
49712 {&hf_ieee80211_rsn_gcs_type,
49713 {"Group Cipher Suite type", "wlan.rsn.gcs.type",
49714 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49716
49717 {&hf_ieee80211_rsn_gcs_80211_type,
49718 {"Group Cipher Suite type", "wlan.rsn.gcs.type",
49719 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_cipher_vals
))))
, 0,
49720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49721
49722 {&hf_ieee80211_rsn_pcs_count,
49723 {"Pairwise Cipher Suite Count", "wlan.rsn.pcs.count",
49724 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49725 "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) }},
49726
49727 {&hf_ieee80211_rsn_pcs_list,
49728 {"Pairwise Cipher Suite List", "wlan.rsn.pcs.list",
49729 FT_NONE, BASE_NONE, NULL((void*)0), 0,
49730 "Contains a series of cipher suite selectors that indicate the pairwisecipher suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49731
49732 {&hf_ieee80211_rsn_pcs,
49733 {"Pairwise Cipher Suite", "wlan.rsn.pcs",
49734 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_pcs_base_custom)((const void *) (size_t) (rsn_pcs_base_custom)), 0,
49735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49736
49737 {&hf_ieee80211_rsn_pcs_oui,
49738 {"Pairwise Cipher Suite OUI", "wlan.rsn.pcs.oui",
49739 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49741
49742 {&hf_ieee80211_rsn_pcs_type,
49743 {"Pairwise Cipher Suite type", "wlan.rsn.pcs.type",
49744 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49746
49747 {&hf_ieee80211_rsn_pcs_80211_type,
49748 {"Pairwise Cipher Suite type", "wlan.rsn.pcs.type",
49749 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_cipher_vals
))))
, 0,
49750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49751
49752 {&hf_ieee80211_rsn_akms_count,
49753 {"Auth Key Management (AKM) Suite Count", "wlan.rsn.akms.count",
49754 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49755 "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) }},
49756
49757 {&hf_ieee80211_rsn_akms_list,
49758 {"Auth Key Management (AKM) List", "wlan.rsn.akms.list",
49759 FT_NONE, BASE_NONE, NULL((void*)0), 0,
49760 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49761
49762 {&hf_ieee80211_rsn_akms,
49763 {"Auth Key Management (AKM) Suite", "wlan.rsn.akms",
49764 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_akms_base_custom)((const void *) (size_t) (rsn_akms_base_custom)), 0,
49765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49766
49767 {&hf_ieee80211_rsn_akms_oui,
49768 {"Auth Key Management (AKM) OUI", "wlan.rsn.akms.oui",
49769 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49771
49772 {&hf_ieee80211_rsn_akms_type,
49773 {"Auth Key Management (AKM) type", "wlan.rsn.akms.type",
49774 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49776
49777 {&hf_ieee80211_rsn_akms_80211_type,
49778 {"Auth Key Management (AKM) type", "wlan.rsn.akms.type",
49779 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_keymgmt_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_keymgmt_vals
))))
, 0,
49780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49781
49782 {&hf_ieee80211_rsn_cap,
49783 {"RSN Capabilities", "wlan.rsn.capabilities",
49784 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49785 "RSN Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49786
49787 {&hf_ieee80211_rsn_cap_preauth,
49788 {"RSN Pre-Auth capabilities", "wlan.rsn.capabilities.preauth",
49789 FT_BOOLEAN, 16, TFS(&rsn_preauth_flags)((0 ? (const struct true_false_string*)0 : ((&rsn_preauth_flags
))))
, 0x0001,
49790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49791
49792 {&hf_ieee80211_rsn_cap_no_pairwise,
49793 {"RSN No Pairwise capabilities", "wlan.rsn.capabilities.no_pairwise",
49794 FT_BOOLEAN, 16, TFS(&rsn_no_pairwise_flags)((0 ? (const struct true_false_string*)0 : ((&rsn_no_pairwise_flags
))))
, 0x0002,
49795 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49796
49797 {&hf_ieee80211_rsn_cap_ptksa_replay_counter,
49798 {"RSN PTKSA Replay Counter capabilities", "wlan.rsn.capabilities.ptksa_replay_counter",
49799 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter)((0 ? (const struct _value_string*)0 : ((rsn_cap_replay_counter
))))
, 0x000C,
49800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49801
49802 {&hf_ieee80211_rsn_cap_gtksa_replay_counter,
49803 {"RSN GTKSA Replay Counter capabilities", "wlan.rsn.capabilities.gtksa_replay_counter",
49804 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter)((0 ? (const struct _value_string*)0 : ((rsn_cap_replay_counter
))))
, 0x0030,
49805 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49806
49807 {&hf_ieee80211_rsn_cap_mfpr,
49808 {"Management Frame Protection Required", "wlan.rsn.capabilities.mfpr",
49809 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0040,
49810 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49811
49812 {&hf_ieee80211_rsn_cap_mfpc,
49813 {"Management Frame Protection Capable", "wlan.rsn.capabilities.mfpc",
49814 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x0080,
49815 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49816
49817 {&hf_ieee80211_rsn_cap_jmr,
49818 {"Joint Multi-band RSNA", "wlan.rsn.capabilities.jmr",
49819 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0100,
49820 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49821
49822 {&hf_ieee80211_rsn_cap_peerkey,
49823 {"PeerKey Enabled", "wlan.rsn.capabilities.peerkey",
49824 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0200,
49825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49826
49827 {&hf_ieee80211_rsn_cap_spp_amsdu_cap,
49828 {"SPP A-MSDU Capable", "wlan.rsn.capabilities.spp_amsdu_cap",
49829 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x0400,
49830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49831
49832 {&hf_ieee80211_rsn_cap_spp_amsdu_req,
49833 {"SPP A-MSDU Required", "wlan.rsn.capabilities.spp_amsdu_req",
49834 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0800,
49835 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49836
49837 {&hf_ieee80211_rsn_cap_pbac,
49838 {"PBAC (protected block ack agreement capable)", "wlan.rsn.capabilities.pbac",
49839 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x1000,
49840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49841
49842 {&hf_ieee80211_rsn_cap_extended_key_id_iaf,
49843 {"Extended Key ID for Individually Addressed Frames",
49844 "wlan.rsn.capabilities.extended_key_id_iaf",
49845 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) }},
49846
49847 {&hf_ieee80211_rsn_cap_ocvc,
49848 {"OCVC", "wlan.rsn.capabilities.ocvc",
49849 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x4000,
49850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49851
49852 {&hf_ieee80211_rsn_pmkid_count,
49853 {"PMKID Count", "wlan.rsn.pmkid.count",
49854 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49855 "Indicates the number of PMKID selectors that are contained in the PMKID Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49856
49857 {&hf_ieee80211_rsn_pmkid_list,
49858 {"PMKID List", "wlan.rsn.pmkid.list",
49859 FT_NONE, BASE_NONE, NULL((void*)0), 0,
49860 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49861
49862 {&hf_ieee80211_rsn_pmkid,
49863 {"PMKID", "wlan.pmkid.akms",
49864 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49866
49867 {&hf_ieee80211_rsn_gmcs,
49868 {"Group Management Cipher Suite", "wlan.rsn.gmcs",
49869 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gmcs_base_custom)((const void *) (size_t) (rsn_gmcs_base_custom)), 0,
49870 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49871
49872 {&hf_ieee80211_rsn_gmcs_oui,
49873 {"Group Management Cipher Suite OUI", "wlan.rsn.gmcs.oui",
49874 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49876
49877 {&hf_ieee80211_rsn_gmcs_type,
49878 {"Group Management Cipher Suite type", "wlan.rsn.gmcs.type",
49879 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49881
49882 {&hf_ieee80211_rsn_gmcs_80211_type,
49883 {"Group Management Cipher Suite type", "wlan.rsn.gmcs.type",
49884 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_cipher_vals
))))
, 0,
49885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49886
49887 {&hf_ieee80211_ht_pren_type,
49888 {"802.11n (Pre) Type", "wlan.vs.pren.type",
49889 FT_UINT8, BASE_DEC, VALS(ieee80211_ht_pren_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_ht_pren_type_vals
))))
, 0,
49890 "Vendor Specific HT Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49891 {&hf_ieee80211_ht_pren_unknown,
49892 {"802.11n (Pre) Unknown Data", "wlan.vs.pren.unknown_data",
49893 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49895
49896 {&hf_ieee80211_ht_cap,
49897 {"HT Capabilities Info", "wlan.ht.capabilities",
49898 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49899 "HT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49900
49901 {&hf_ieee80211_ht_vs_cap,
49902 {"HT Capabilities Info (VS)", "wlan.vs.ht.capabilities",
49903 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49904 "Vendor Specific HT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49905
49906 {&hf_ieee80211_ht_ldpc_coding,
49907 {"HT LDPC coding capability", "wlan.ht.capabilities.ldpccoding",
49908 FT_BOOLEAN, 16, TFS(&ht_ldpc_coding_flag)((0 ? (const struct true_false_string*)0 : ((&ht_ldpc_coding_flag
))))
, 0x0001,
49909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49910
49911 {&hf_ieee80211_ht_chan_width,
49912 {"HT Support channel width", "wlan.ht.capabilities.width",
49913 FT_BOOLEAN, 16, TFS(&ht_chan_width_flag)((0 ? (const struct true_false_string*)0 : ((&ht_chan_width_flag
))))
, 0x0002,
49914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49915
49916 {&hf_ieee80211_ht_sm_pwsave,
49917 {"HT SM Power Save", "wlan.ht.capabilities.sm",
49918 FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag)((0 ? (const struct _value_string*)0 : ((ht_sm_pwsave_flag)))
)
, 0x000c,
49919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49920
49921 {&hf_ieee80211_ht_green,
49922 {"HT Green Field", "wlan.ht.capabilities.green",
49923 FT_BOOLEAN, 16, TFS(&ht_green_flag)((0 ? (const struct true_false_string*)0 : ((&ht_green_flag
))))
, 0x0010,
49924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49925
49926 {&hf_ieee80211_ht_short20,
49927 {"HT Short GI for 20MHz", "wlan.ht.capabilities.short20",
49928 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0020,
49929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49930
49931 {&hf_ieee80211_ht_short40,
49932 {"HT Short GI for 40MHz", "wlan.ht.capabilities.short40",
49933 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040,
49934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49935
49936 {&hf_ieee80211_ht_tx_stbc,
49937 {"HT Tx STBC", "wlan.ht.capabilities.txstbc",
49938 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0080,
49939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49940
49941 {&hf_ieee80211_ht_rx_stbc,
49942 {"HT Rx STBC", "wlan.ht.capabilities.rxstbc",
49943 FT_UINT16, BASE_HEX, VALS(ht_rx_stbc_flag)((0 ? (const struct _value_string*)0 : ((ht_rx_stbc_flag)))), 0x0300,
49944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49945
49946 {&hf_ieee80211_ht_reserved_b10,
49947 {"Reserved", "wlan.ht.capabilities.info_reserved_b10",
49948 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0400,
49949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49950
49951 {&hf_ieee80211_ht_max_amsdu,
49952 {"HT Max A-MSDU length", "wlan.ht.capabilities.amsdu",
49953 FT_BOOLEAN, 16, TFS(&ht_max_amsdu_flag)((0 ? (const struct true_false_string*)0 : ((&ht_max_amsdu_flag
))))
, 0x0800,
49954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49955
49956 {&hf_ieee80211_ht_dss_cck_40,
49957 {"HT DSSS/CCK mode in 40MHz", "wlan.ht.capabilities.dsscck",
49958 FT_BOOLEAN, 16, TFS(&ht_dss_cck_40_flag)((0 ? (const struct true_false_string*)0 : ((&ht_dss_cck_40_flag
))))
, 0x1000,
49959 "HT DSS/CCK mode in 40MHz", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49960
49961 {&hf_ieee80211_ht_reserved_b13,
49962 {"Reserved", "wlan.ht.capabilities.info_reserved_b13",
49963 FT_UINT16, BASE_HEX, NULL((void*)0), 0x2000,
49964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49965
49966 {&hf_ieee80211_ht_40_mhz_intolerant,
49967 {"HT Forty MHz Intolerant", "wlan.ht.capabilities.40mhzintolerant",
49968 FT_BOOLEAN, 16, TFS(&ht_40_mhz_intolerant_flag)((0 ? (const struct true_false_string*)0 : ((&ht_40_mhz_intolerant_flag
))))
, 0x4000,
49969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49970
49971 {&hf_ieee80211_ht_reserved_b15,
49972 {"Reserved", "wlan.ht.capabilities.info_reserved_b15",
49973 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000,
49974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49975
49976 {&hf_ieee80211_ext_bss_mu_mimo_capable_sta_count,
49977 {"MU-MIMO Capable STA Count", "wlan.ext_bss.mu_mimo_capable_sta_count",
49978 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49980
49981 {&hf_ieee80211_ext_bss_ss_underutilization,
49982 {"Spatial Stream Underutilization", "wlan.ext_bss.ss_underutilization",
49983 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49985
49986 {&hf_ieee80211_ext_bss_observable_sec_20mhz_utilization,
49987 {"Observable Secondary 20MHz Utilization", "wlan.ext_bss.observable_sec_20mhz_utilization",
49988 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49990
49991 {&hf_ieee80211_ext_bss_observable_sec_40mhz_utilization,
49992 {"Observable Secondary 40MHz Utilization", "wlan.ext_bss.observable_sec_40mhz_utilization",
49993 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49995
49996 {&hf_ieee80211_ext_bss_observable_sec_80mhz_utilization,
49997 {"Observable Secondary 80MHz Utilization", "wlan.ext_bss.observable_sec_80mhz_utilization",
49998 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50000
50001 {&hf_ieee80211_wide_bw_new_channel_width,
50002 {"New Channel Width", "wlan.wide_bw.new_channel_width",
50003 FT_UINT8, BASE_HEX, VALS(vht_operation_info_channel_width)((0 ? (const struct _value_string*)0 : ((vht_operation_info_channel_width
))))
, 0x0,
50004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50005
50006 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment0,
50007 {"New Channel Center Frequency Segment 0", "wlan.wide_bw.new_channel_center_freq_segment0",
50008 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0x0,
50009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50010
50011 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment1,
50012 {"New Channel Center Frequency Segment 1", "wlan.wide_bw.new_channel_center_freq_segment1",
50013 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0x0,
50014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50015
50016 {&hf_ieee80211_operat_notification_mode,
50017 {"Operating Mode Notification", "wlan.operat_notification_mode",
50018 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
50019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50020
50021 {&hf_ieee80211_operat_mode_field_channel_width,
50022 {"Channel Width", "wlan.operat_mode_field.channelwidth",
50023 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03,
50024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50025
50026 {&hf_ieee80211_operat_mode_field_160_80plus80_bw,
50027 {"160/80+80 BW", "wlan.operat_mode_field.160_80plus80_bw",
50028 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04,
50029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50030
50031 {&hf_ieee80211_operat_mode_field_no_ldpc,
50032 {"No LDPC", "wlan.operat_mode_field.no_ldpc",
50033 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
50034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50035
50036 {&hf_ieee80211_operat_mode_field_rxnss,
50037 {"Rx NSS", "wlan.operat_mode_field.rxnss",
50038 FT_UINT8, BASE_HEX, VALS(operat_mode_field_rxnss)((0 ? (const struct _value_string*)0 : ((operat_mode_field_rxnss
))))
, 0x70,
50039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50040
50041 {&hf_ieee80211_operat_mode_field_rxnsstype,
50042 {"Rx NSS Type", "wlan.operat_mode_field.rxnsstype",
50043 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
50044 "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) }},
50045
50046 {&hf_ieee80211_tbtt_info,
50047 {"TBTT Information Field", "wlan.rnr.tbtt_info",
50048 FT_UINT16, BASE_DEC, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50049
50050 {&hf_ieee80211_tbtt_filtered_nap,
50051 {"TBTT Filtered Neighbor AP", "wlan.rnr.tbtt_info.fna",
50052 FT_UINT16, BASE_DEC, NULL((void*)0), 1<<2, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50053
50054 {&hf_ieee80211_tbtt_info_count,
50055 {"TBTT Information Count", "wlan.rnr.tbtt_info.info_count",
50056 FT_UINT16, BASE_DEC, NULL((void*)0), 0xf<<4, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50057
50058 {&hf_ieee80211_tbtt_info_length,
50059 {"TBTT Information Length", "wlan.rnr.tbtt_info.info_len",
50060 FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(tbtt_info_length)((0 ? (const struct _range_string*)0 : ((tbtt_info_length)))),
50061 0xff<<8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50062
50063 {&hf_ieee80211_tbtt_operating_class,
50064 {"Operating Class", "wlan.rnr.tbtt_info.operating_class",
50065 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50066
50067 {&hf_ieee80211_tbtt_channel_number,
50068 {"Channel Number", "wlan.rnr.tbtt_info.channel_num",
50069 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50070
50071 {&hf_ieee80211_tbtt_offset,
50072 {"Neighbor AP TBTT Offset", "wlan.rnr.tbtt_info.tbtt_offset",
50073 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50074
50075 {&hf_ieee80211_tbtt_bssid,
50076 {"BSSID", "wlan.rnr.tbtt_info.bssid",
50077 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50078
50079 {&hf_ieee80211_tbtt_short_ssid,
50080 {"Short SSID", "wlan.rnr.tbtt_info.sh_ssid",
50081 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50082
50083 {&hf_ieee80211_rnr_bss_params,
50084 {"BSS Parameters", "wlan.rnr.tbtt_info.bss_parameters",
50085 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50086
50087 {&hf_ieee80211_rnr_oct_recommended,
50088 {"OCT Recommended", "wlan.rnr.tbtt_info.bss_parameters.oct_recommended",
50089 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50090
50091 {&hf_ieee80211_rnr_same_ssid,
50092 {"Same SSID", "wlan.rnr.tbtt_info.bss_parameters.same_ssid",
50093 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50094
50095 {&hf_ieee80211_rnr_multiple_bssid,
50096 {"Multiple BSSID", "wlan.rnr.tbtt_info.bss_parameters.multiple_bssid",
50097 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50098
50099 {&hf_ieee80211_rnr_transmitted_bssid,
50100 {"Transmitted BSSID", "wlan.rnr.tbtt_info.bss_parameters.transmitted_bssid",
50101 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50102
50103 {&hf_ieee80211_rnr_ess_with_colocated_ap,
50104 {"Member of ESS with 2.4/5 GHz Co-Located AP",
50105 "wlan.rnr.tbtt_info.bss_parameters.member_of_ess_with_2p4_5_ghz_colocated_ap",
50106 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50107
50108 {&hf_ieee80211_rnr_unsolicited_probe_responses,
50109 {"Unsolicited Probe Responses",
50110 "wlan.rnr.tbtt_info.bss_parameters.unsolicited_probe_responses",
50111 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50112
50113 {&hf_ieee80211_rnr_same_colocated_ap,
50114 {"Co-Located AP", "wlan.rnr.tbtt_info.bss_parameters.colocated_ap",
50115 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50116
50117 {&hf_ieee80211_rnr_same_reserved,
50118 {"Reserved", "wlan.rnr.tbtt_info.bss_parameters.reserved",
50119 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50120
50121 {&hf_ieee80211_rnr_20mhz_psd_subfield,
50122 {"PSD Subfield", "wlan.rnr.tbtt_info.psd_subfield",
50123 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) }},
50124
50125 {&hf_ieee80211_rnr_reserved_data,
50126 {"Reserved", "wlan.rnr.tbtt_info.reserved",
50127 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50128
50129 {&hf_ieee80211_rnr_mld_params,
50130 {"MLD Parameters", "wlan.rnr.tbtt_info.mld_parameters",
50131 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50132
50133 {&hf_ieee80211_rnr_mld_id,
50134 {"MLD ID", "wlan.rnr.tbtt_info.mld_parameters.mld_id",
50135 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0000FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50136
50137 {&hf_ieee80211_rnr_mld_link_id,
50138 {"Link ID", "wlan.rnr.tbtt_info.mld_parameters.link_id",
50139 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50140
50141 {&hf_ieee80211_rnr_mld_bss_params_change_count,
50142 {"BSS Parameters Change Count",
50143 "wlan.rnr.tbtt_info.mld_parameters.bss_params_change_count",
50144 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0FF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50145
50146 {&hf_ieee80211_rnr_mld_all_updates_included,
50147 {"All Updates Included",
50148 "wlan.rnr.tbtt_info.mld_parameters.all_updates_included",
50149 FT_BOOLEAN, 24, NULL((void*)0), 0x100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50150
50151 {&hf_ieee80211_rnr_mld_disabled_link_indication,
50152 {"Disabled Link Indication",
50153 "wlan.rnr.tbtt_info.mld_parameters.disabled_link_indication",
50154 FT_BOOLEAN, 24, NULL((void*)0), 0x200000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50155
50156 {&hf_ieee80211_rnr_mld_reserved,
50157 {"Reserved", "wlan.rnr.tbtt_info.mld_parameters.reserved",
50158 FT_UINT24, BASE_HEX, NULL((void*)0), 0xC00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50159
50160 {&hf_ieee80211_s1g_cap_byte1,
50161 {"S1G Capabilities Byte 1", "wlan.s1g.capabilities.byte1",
50162 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50163
50164 {&hf_ieee80211_s1g_cap_byte2,
50165 {"S1G Capabilities Byte 2", "wlan.s1g.capabilities.byte2",
50166 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50167
50168 {&hf_ieee80211_s1g_cap_byte3,
50169 {"S1G Capabilities Byte 3", "wlan.s1g.capabilities.byte3",
50170 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50171
50172 {&hf_ieee80211_s1g_cap_byte4,
50173 {"S1G Capabilities Byte 4", "wlan.s1g.capabilities.byte4",
50174 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50175
50176 {&hf_ieee80211_s1g_cap_byte5,
50177 {"S1G Capabilities Byte 5", "wlan.s1g.capabilities.byte5",
50178 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50179
50180 {&hf_ieee80211_s1g_cap_byte6,
50181 {"S1G Capabilities Byte 6", "wlan.s1g.capabilities.byte6",
50182 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50183
50184 {&hf_ieee80211_s1g_cap_byte7,
50185 {"S1G Capabilities Byte 7", "wlan.s1g.capabilities.byte7",
50186 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50187
50188 {&hf_ieee80211_s1g_cap_byte8,
50189 {"S1G Capabilities Byte 8", "wlan.s1g.capabilities.byte8",
50190 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50191
50192 {&hf_ieee80211_s1g_cap_byte9,
50193 {"S1G Capabilities Byte 9", "wlan.s1g.capabilities.byte9",
50194 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50195
50196 {&hf_ieee80211_beacon_sequence,
50197 {"Beacon Sequence", "wlan.s1g.beacon_sequence",
50198 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50199
50200 {&hf_ieee80211_pentapartial_timestamp,
50201 {"Pentapartial Timestamp", "wlan.s1g.pentapartial_timestamp",
50202 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50203
50204 {&hf_ieee80211_tack_next_twt_info,
50205 {"Next TWT Info/Suspend Duration", "wlan.s1g.next_twt_info",
50206 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50207
50208 {&hf_ieee80211_tack_next_twt,
50209 {"Next TWT", "wlan.s1g.next_twt",
50210 FT_UINT40, BASE_HEX, NULL((void*)0), 0x1FFFFFFFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50211
50212 {&hf_ieee80211_tack_flow_identifier,
50213 {"TWT Flow Identifier", "wlan.s1g.twt_flow_identifier",
50214 FT_UINT40, BASE_HEX, NULL((void*)0), 0xE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50215
50216 {&hf_ieee80211_s1g_cap_byte10,
50217 {"S1G Capabilities Byte 10", "wlan.s1g.capabilities.byte10",
50218 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50219
50220 {&hf_ieee80211_s1g_cap_s1g_long_support,
50221 {"S1G_LONG Support", "wlan.s1g.capabilities.s1g_long_support",
50222 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) }},
50223
50224 {&hf_ieee80211_s1g_cap_short_gi_for_1_mhz,
50225 {"Short GI for 1MHz", "wlan.s1g.capabilities.short_gi_for_1_mhz",
50226 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) }},
50227
50228 {&hf_ieee80211_s1g_cap_short_gi_for_2_mhz,
50229 {"Short GI for 2MHz", "wlan.s1g.capabilities.short_gi_for_2_mhz",
50230 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) }},
50231
50232 {&hf_ieee80211_s1g_cap_short_gi_for_4_mhz,
50233 {"Short GI for 4MHz", "wlan.s1g.capabilities.short_gi_for_4_mhz",
50234 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) }},
50235
50236 {&hf_ieee80211_s1g_cap_short_gi_for_8_mhz,
50237 {"Short GI for 8MHz", "wlan.s1g.capabilities.short_gi_for_8_mhz",
50238 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) }},
50239
50240 {&hf_ieee80211_s1g_cap_short_gi_for_16_mhz,
50241 {"Short GI for 16MHz", "wlan.s1g.capabilities.short_gi_for_16_mhz",
50242 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) }},
50243
50244 {&hf_ieee80211_s1g_cap_supported_channel_width,
50245 {"Supported Channel Width", "wlan.s1g.capabilities.supported_channel_width",
50246 FT_UINT8, BASE_HEX, VALS(s1g_supported_channel_width_vals)((0 ? (const struct _value_string*)0 : ((s1g_supported_channel_width_vals
))))
, 0xC0,
50247 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50248
50249 {&hf_ieee80211_s1g_cap_rx_ldpc,
50250 {"Rx LDPC", "wlan.s1g.capabilities.rx_ldpc",
50251 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) }},
50252
50253 {&hf_ieee80211_s1g_cap_tx_stbc,
50254 {"Tx STBC", "wlan.s1g.capabilities.tx_stbc",
50255 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) }},
50256
50257 {&hf_ieee80211_s1g_cap_rx_stbc,
50258 {"Rx STBC", "wlan.s1g.capabilities.rx_stbc",
50259 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) }},
50260
50261 {&hf_ieee80211_s1g_cap_su_beamformer_capable,
50262 {"SU Beamformer Capable", "wlan.s1g.capabilities.su_beamformer_capable",
50263 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) }},
50264
50265 {&hf_ieee80211_s1g_cap_su_beamformee_capable,
50266 {"SU Beamformee Capable", "wlan.s1g.capabilities.su_beamformee_capable",
50267 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) }},
50268
50269 {&hf_ieee80211_s1g_cap_beamformee_sts_capability,
50270 {"Beamformee STS Capability", "wlan.s1g.capabilities.sts_beamformee_capability",
50271 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50272
50273 {&hf_ieee80211_s1g_cap_number_sounding_dimensions,
50274 {"Number of Sounding Dimensions", "wlan.s1g.capabilities.number_sounding_dimensions",
50275 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50276
50277 {&hf_ieee80211_s1g_cap_mu_beamformer_capable,
50278 {"MU Beamformer Capable", "wlan.s1g.capabilities.beamformer_capable",
50279 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) }},
50280
50281 {&hf_ieee80211_s1g_cap_mu_beamformee_capable,
50282 {"MU Beamformee Capable", "wlan.s1g.capabilities.beamformee_capable",
50283 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) }},
50284
50285 {&hf_ieee80211_s1g_cap_htc_vht_capable,
50286 {"+HTC-VHT Capable", "wlan.s1g.capabilities.htc_vht_capable",
50287 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) }},
50288
50289 {&hf_ieee80211_s1g_cap_travelling_pilot_support,
50290 {"Traveling Pilot Support", "wlan.s1g.capabilities.traveling_pilot_support",
50291 FT_UINT8, BASE_HEX, VALS(s1g_traveling_pilot_support_vals)((0 ? (const struct _value_string*)0 : ((s1g_traveling_pilot_support_vals
))))
, 0xC0,
50292 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50293
50294 {&hf_ieee80211_s1g_cap_rd_responder,
50295 {"RD Responder", "wlan.s1g.capabilities.rd_responder",
50296 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) }},
50297
50298 {&hf_ieee80211_s1g_cap_ht_delayed_block_ack,
50299 {"HT Delayed Block Ack", "wlan.s1g.capabilities.ht_delayed_block_ack",
50300 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) }},
50301
50302 {&hf_ieee80211_s1g_cap_maximum_mpdu_length,
50303 {"Maximum MPDU Length", "wlan.s1g.capabilities.max_mpdu_length",
50304 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) }},
50305
50306 {&hf_ieee80211_s1g_cap_maximum_a_mpdu_length_exp,
50307 {"Maximum A-MPDU Length Exponent", "wlan.s1g.capabilities.max_a_mpdu_length_exp",
50308 FT_UINT8, BASE_DEC, NULL((void*)0), 0x18, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50309
50310 {&hf_ieee80211_s1g_cap_minimum_mpdu_start_spacing,
50311 {"Minimum MPDU Start Spacing", "wlan.s1g.capabilities.min_mpdu_start_spacing",
50312 FT_UINT8, BASE_DEC, VALS(s1g_min_mpdu_start_spacing_vals)((0 ? (const struct _value_string*)0 : ((s1g_min_mpdu_start_spacing_vals
))))
, 0xE0,
50313 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50314
50315 {&hf_ieee80211_s1g_cap_uplink_sync_capable,
50316 {"Uplink Sync Capable", "wlan.s1g.capabilities.uplink_sync_capable",
50317 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) }},
50318
50319 {&hf_ieee80211_s1g_cap_dynamic_aid,
50320 {"Dynamic AID", "wlan.s1g.capabilities.dynamic_aid",
50321 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) }},
50322
50323 {&hf_ieee80211_s1g_cap_bat_support,
50324 {"BAT Support", "wlan.s1g.capabilities.bat_support",
50325 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) }},
50326
50327 {&hf_ieee80211_s1g_cap_tim_ade_support,
50328 {"TIM AID Support", "wlan.s1g.capabilities.tim_aid_support",
50329 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) }},
50330
50331 {&hf_ieee80211_s1g_cap_non_tim_support,
50332 {"Non TIM Support", "wlan.s1g.capabilities.non_tim_support",
50333 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) }},
50334
50335 {&hf_ieee80211_s1g_cap_group_aid_support,
50336 {"Group AID Support", "wlan.s1g.capabilities.group_aid_support",
50337 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) }},
50338
50339 {&hf_ieee80211_s1g_cap_sta_type_support,
50340 {"STA Type Support", "wlan.s1g.capabilities.sta_type_support",
50341 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) }},
50342
50343 {&hf_ieee80211_s1g_cap_centralized_authentication_control,
50344 {"Centralized Authentication Control", "wlan.s1g.capabilities.centralized_authentication_control",
50345 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) }},
50346
50347 {&hf_ieee80211_s1g_cap_distributed_authentication_control,
50348 {"Distributed Authentication Control", "wlan.s1g.capabilities.distributed_authentication_control",
50349 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) }},
50350
50351 {&hf_ieee80211_s1g_cap_a_msdu_support,
50352 {"A-MSDU Supported", "wlan.s1g.capabilities.a_msdu_supported",
50353 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) }},
50354
50355 {&hf_ieee80211_s1g_cap_a_mpdu_support,
50356 {"A-MPDU Support", "wlan.s1g.capabilities.a_mpdu_support",
50357 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) }},
50358
50359 {&hf_ieee80211_s1g_cap_asymmetic_block_ack_support,
50360 {"Asymmetric Block Ack Supported", "wlan.s1g.capabilities.asymmetric_block_ack_supported",
50361 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) }},
50362
50363 {&hf_ieee80211_s1g_cap_flow_control_support,
50364 {"Flow Control Supported", "wlan.s1g.capabilities.flow_control_supported",
50365 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) }},
50366
50367 {&hf_ieee80211_s1g_cap_sectorized_beam_capable,
50368 {"Sectorized Beam Capable", "wlan.s1g.capabilities.sectorized_beam_capable",
50369 FT_UINT8, BASE_HEX, VALS(s1g_sectorized_beam_capable_vals)((0 ? (const struct _value_string*)0 : ((s1g_sectorized_beam_capable_vals
))))
, 0xC0,
50370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50371
50372 {&hf_ieee80211_s1g_cap_obss_mitigation_support,
50373 {"OBSS Mitigation Support", "wlan.s1g.capabilities.obss_mitigation_support",
50374 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) }},
50375
50376 {&hf_ieee80211_s1g_cap_fragment_ba_support,
50377 {"Fragment BA Support", "wlan.s1g.capabilities.fragment_ba_support",
50378 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) }},
50379
50380 {&hf_ieee80211_s1g_cap_ndp_ps_poll_supported,
50381 {"NDS PS-Poll Supported", "wlan.s1g.capabilities.nds_ps_poll_supported",
50382 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) }},
50383
50384 {&hf_ieee80211_s1g_cap_raw_operation_support,
50385 {"Raw Operation Support", "wlan.s1g.capabilities.raw_operation_support",
50386 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) }},
50387
50388 {&hf_ieee80211_s1g_cap_page_slicing_support,
50389 {"Page Slicing Support", "wlan.s1g.capabilities.page_slicing_support",
50390 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) }},
50391
50392 {&hf_ieee80211_s1g_cap_txop_sharing_implicit_ack_support,
50393 {"TXOP Sharing Implicit Ack Support", "wlan.s1g.capabilities.txop_sharing_implicit_ack_support",
50394 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) }},
50395
50396 {&hf_ieee80211_s1g_cap_vht_link_adaptation_capable,
50397 {"VHT Link Adaptation Capable", "wlan.s1g.capabilities.vht_link_adaptation_capable",
50398 FT_UINT8, BASE_HEX, VALS(s1g_vht_link_adaptation_vals)((0 ? (const struct _value_string*)0 : ((s1g_vht_link_adaptation_vals
))))
, 0xC0,
50399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
50400
50401 {&hf_ieee80211_s1g_cap_tack_support_as_ps_poll_response,
50402 {"TACK Support as PS-Poll Response", "wlan.s1g.capabilities.tack_support_as_ps_poll_response",
50403 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) }},
50404
50405 {&hf_ieee80211_s1g_cap_duplicate_1_mhz_support,
50406 {"Duplicate 1 MHz Support", "wlan.s1g.capabilities.duplicate_1_mhz_support",
50407 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) }},
50408
50409 {&hf_ieee80211_s1g_cap_mcs_negotiation_support,
50410 {"MCS Negotiation Support", "wlan.s1g.capabilities.ms_negotiation_support",
50411 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) }},
50412
50413 {&hf_ieee80211_s1g_cap_1_mhz_control_response_preamble_support,
50414 {"1 MHz Control Response Preamble Supported",
50415 "wlan.s1g.capabilities.1_mhz_control_response_preamble_supported",
50416 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) }},
50417
50418 {&hf_ieee80211_s1g_cap_ndp_beamforming_report_poll_support,
50419 {"NDP Beamforming Report Poll Supported",
50420 "wlan.s1g.capabilities.ndp_beamforming_report_poll_supported",
50421 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) }},
50422
50423 {&hf_ieee80211_s1g_cap_unsolicited_dynamic_aid,
50424 {"Unsolicited Dynamic AID", "wlan.s1g.capabilities.unsolicited_dynamic_aid",
50425 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) }},
50426
50427 {&hf_ieee80211_s1g_cap_sector_training_operation_supported,
50428 {"Sector Training Operation Supported",
50429 "wlan.s1g.capabilities.sector_training_operation_supported",
50430 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) }},
50431
50432 {&hf_ieee80211_s1g_cap_temporary_ps_mode_switch,
50433 {"Temporary PS Mode Switch",
50434 "wlan.s1g.capabilities.temporary_ps_mode_switch",
50435 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) }},
50436
50437 {&hf_ieee80211_s1g_cap_twt_grouping_support,
50438 {"TWT Grouping Support", "wlan.s1g.capabilities.twt_grouping_support",
50439 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) }},
50440
50441 {&hf_ieee80211_s1g_cap_bdt_capable,
50442 {"BDT Capable", "wlan.s1g.capabilities.bdt_capable",
50443 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) }},
50444
50445 {&hf_ieee80211_s1g_cap_color,
50446 {"COLOR", "wlan.s1g.capabilities.color",
50447 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50448
50449 {&hf_ieee80211_s1g_cap_twt_requester_support,
50450 {"TWT Requester Support", "wlan.s1g.capabilities.twt_requester_support",
50451 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) }},
50452
50453 {&hf_ieee80211_s1g_cap_twt_responder_support,
50454 {"TWT Responder Support", "wlan.s1g.capabilities.twt_responder_support",
50455 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) }},
50456
50457 {&hf_ieee80211_s1g_cap_pv1_frame_support,
50458 {"PV1 Frame Support", "wlan.s1g.capabilities.pv1_frame_support",
50459 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) }},
50460
50461 {&hf_ieee80211_s1g_cap_link_adaptation_per_normal_control_response_capable,
50462 {"Link Adaptation per Normal Control Response Capable",
50463 "wlan.s1g.capabilities.link_adaptation_per_normal_control_response_capable",
50464 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) }},
50465
50466 {&hf_ieee80211_s1g_cap_reserved,
50467 {"Reserved", "wlan.s1g.capabilities.reserved",
50468 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50469
50470 {&hf_ieee80211_s1g_mcs_and_nss_set,
50471 {"Supported S1G-MCS and NSS Set", "wlan.s1g.supported_mcs_nss_set",
50472 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50473
50474 {&hf_ieee80211_s1g_rx_s1g_mcs_map,
50475 {"Rx S1G-MCS Map", "wlan.s1g.supported_mcs_nss_set.rx_s1g_mcs_map",
50476 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00000000FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50477
50478 {&hf_ieee80211_s1g_rx_highest_supported_long_gi_data_rate,
50479 {"Rx Highest Supported Long GI Data Rate",
50480 "wlan.s1g.supported_mcs_nss_set.rx_highest_supported_long_gi_data_rate",
50481 FT_UINT40, BASE_HEX, NULL((void*)0), 0x000001FF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50482
50483 {&hf_ieee80211_s1g_tx_s1g_mcs_map,
50484 {"Tx S1G-MCS Map", "wlan.s1g.supported_mcs_nss_set.tx_s1g_mcs_map",
50485 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001FE0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50486
50487 {&hf_ieee80211_s1g_tx_highest_supported_long_gi_data_rate,
50488 {"Tx Highest Supported Long GI Data Rate",
50489 "wlan.s1g.supported_mcs_nss_set.tx_highest_supported_long_gi_data_rate",
50490 FT_UINT40, BASE_HEX, NULL((void*)0), 0x03FE000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50491
50492 {&hf_ieee80211_s1g_rx_single_spatial_stream_map_for_1_mhz,
50493 {"Rx Single Spatial Stream and S1G-MCS Map for 1MHz",
50494 "wlan.s1g.supported_mcs_nss_set.rx_single_spatial_stream_1_mhz",
50495 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0C00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50496
50497 {&hf_ieee80211_s1g_tx_single_spatial_stream_map_for_1_mhz,
50498 {"Tx Single Spatial Stream and S1G-MCS Map for 1MHz",
50499 "wlan.s1g.supported_mcs_nss_set.tx_single_spatial_stream_1_mhz",
50500 FT_UINT40, BASE_HEX, NULL((void*)0), 0x3000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50501
50502 {&hf_ieee80211_s1g_mcs_and_nss_reserved,
50503 {"Reserved", "wlan.s1g.supported_mcs_nss_set.reserved",
50504 FT_UINT40, BASE_HEX, NULL((void*)0), 0xC000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50505
50506 {&hf_ieee80211_s1g_subchannel_selective_transmission,
50507 {"Channel Activity Schedule", "wlan.sst.channel_activity_schedule",
50508 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50509
50510 {&hf_ieee80211_s1g_sst_sounding_option,
50511 {"Sounding Option", "wlan.sst.channel_activity_schedule.sounding_option",
50512 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50513
50514 {&hf_ieee80211_s1g_channel_activity_bitmap,
50515 {"Channel Activity Bitmap", "wlan.sst.channel_activity_schedule.channel_activity_bitmap",
50516 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001FE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50517
50518 {&hf_ieee80211_s1g_ul_activity,
50519 {"UL Activity", "wlan.sst.channel_activity_schedule.ul_activity",
50520 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50521
50522 {&hf_ieee80211_s1g_dl_activity,
50523 {"DL Activity", "wlan.sst.channel_activity_schedule.dl_activity",
50524 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50525
50526 {&hf_ieee80211_s1g_max_trans_width,
50527 {"Maximum Transmission Width", "wlan.sst.channel_activity_schedule.max_trans_width",
50528 FT_UINT32, BASE_DEC, VALS(max_trans_width_vals)((0 ? (const struct _value_string*)0 : ((max_trans_width_vals
))))
,
50529 0x00001800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50530
50531 {&hf_ieee80211_s1g_activity_start_time,
50532 {"Activity Start Time", "wlan.sst.channel_activity_schedule.activity_start_time",
50533 FT_UINT32, BASE_DEC, NULL((void*)0), 0xFFFFE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50534
50535 {&hf_ieee80211_s1g_sst_sounding_option1,
50536 {"Sounding Option", "wlan.sst.channel_activity_schedule.sounding_option",
50537 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50538
50539 {&hf_ieee80211_s1g_channel_activity_bitmap1,
50540 {"Channel Activity Bitmap", "wlan.sst.channel_activity_schedule.channel_activity_bitmap",
50541 FT_UINT16, BASE_HEX, NULL((void*)0), 0x01FE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50542
50543 {&hf_ieee80211_s1g_sounding_start_time_present,
50544 {"Sounding Start Time Present", "wlan.sst.channel_activity_schedule.sounding_start_time_present",
50545 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50546
50547 {&hf_ieee80211_s1g_channel_activity_reserved,
50548 { "Reserved", "wlan.sst.channel_activity_schedule.reserved",
50549 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50550
50551 {&hf_ieee80211_s1g_max_trans_width1,
50552 {"Maximum Transmission Width", "wlan.sst.channel_activity_schedule.max_trans_width",
50553 FT_UINT16, BASE_DEC, VALS(max_trans_width_vals)((0 ? (const struct _value_string*)0 : ((max_trans_width_vals
))))
,
50554 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50555
50556 {&hf_ieee80211_s1g_sounding_start_time,
50557 {"Sounding Start Time",
50558 "wlan.sst.channel_activity_schedule.sounding_start_time",
50559 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50560
50561 {&hf_ieee80211_s1g_open_loop_link_margin,
50562 {"Open-Loop Link Margin Index", "wlan.s1g.open_loop_link_margin_index",
50563 FT_UINT8, BASE_CUSTOM, CF_FUNC(s1g_open_loop_link_margin_custom)((const void *) (size_t) (s1g_open_loop_link_margin_custom)),
50564 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50565
50566 {&hf_ieee80211_s1g_raw_control,
50567 {"RAW Control", "wlan.s1g.rps.raw_control",
50568 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50569
50570 {&hf_ieee80211_s1g_raw_type,
50571 {"RAW Type", "wlan.s1g.rps.raw_control.raw_type",
50572 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) }},
50573
50574 {&hf_ieee80211_s1g_raw_type_options,
50575 {"RAW Type Options", "wlan.s1g.rps.raw_control.raw_type_options",
50576 FT_UINT8, BASE_CUSTOM, CF_FUNC(s1g_raw_type_options_custom)((const void *) (size_t) (s1g_raw_type_options_custom)),
50577 0x0C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50578
50579 {&hf_ieee80211_s1g_raw_start_time_indication,
50580 {"Start Time Indication", "wlan.s1g.rps.raw_control.start_time_indication",
50581 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) }},
50582
50583 {&hf_ieee80211_s1g_raw_raw_group_indication,
50584 {"RAW Group Indication", "wlan.s1g.rps.raw_control.raw_group_indication",
50585 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) }},
50586
50587 {&hf_ieee80211_s1g_raw_channel_indication_preference,
50588 {"Channel Indication Preference",
50589 "wlan.s1g.rps.raw_control.channel_indication_preference",
50590 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) }},
50591
50592 {&hf_ieee80211_s1g_raw_periodic_raw_indication,
50593 {"Periodic RAW Indication",
50594 "wlan.s1g.rps.raw_control.periodic_raw_indication",
50595 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) }},
50596
50597 {&hf_ieee80211_s1g_raw_slot_def,
50598 {"RAW Slot Definition", "wlan.s1g.rps.raw_slot_definition",
50599 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50600
50601 {&hf_ieee80211_s1g_slot_def_format_indication,
50602 {"Slot Definition Format Indication",
50603 "wlan.s1g.rps.raw_slot_definition.slot_definition_format_indication",
50604 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50605
50606 {&hf_ieee80211_s1g_slot_def_cross_slot_boundary,
50607 {"Cross Slot Boundary",
50608 "wlan.s1g.rps.raw_slot_definition.cross_slot_boundary",
50609 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) }},
50610
50611 {&hf_ieee80211_s1g_slot_def_slot_duration_count8,
50612 {"Slot Duration Count",
50613 "wlan.s1g.rps.raw_slot_definition.slot_duration_count",
50614 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) }},
50615
50616 {&hf_ieee80211_s1g_slot_def_num_slots6,
50617 {"Number of Slots",
50618 "wlan.s1g.rps.raw_slot_definition.number_of_slots",
50619 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFC00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50620
50621 {&hf_ieee80211_s1g_slot_def_slot_duration_count11,
50622 {"Slot Duration Count",
50623 "wlan.s1g.rps.raw_slot_definition.slot_duration_count",
50624 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) }},
50625
50626 {&hf_ieee80211_s1g_slot_def_num_slots3,
50627 {"Number of Slots",
50628 "wlan.s1g.rps.raw_slot_definition.number_of_slots",
50629 FT_UINT16, BASE_DEC, NULL((void*)0), 0xE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50630
50631 {&hf_ieee80211_s1g_raw_start_time,
50632 {"RAW Start Time", "wlan.s1g.raw_slot_definition.raw_start_time",
50633 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50634
50635 {&hf_ieee80211_s1g_raw_group_subfield,
50636 {"RAW Group", "wlan.s1g.rps.raw_group",
50637 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50638
50639 {&hf_ieee80211_s1g_raw_group_page_index,
50640 {"Page Index", "wlan.s1g.rps.raw_group.page_index",
50641 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50642
50643 {&hf_ieee80211_s1g_raw_group_start_aid,
50644 {"RAW Start AID", "wlan.s1g.rps.raw_group.raw_start_aid",
50645 FT_UINT24, BASE_DEC, NULL((void*)0), 0x001FFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50646
50647 {&hf_ieee80211_s1g_raw_group_end_aid,
50648 {"RAW End AID", "wlan.s1g.rps.raw_group.raw_end_aid",
50649 FT_UINT24, BASE_DEC, NULL((void*)0), 0xFFE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50650
50651 {&hf_ieee80211_s1g_raw_channel_indication,
50652 {"Channel Indication", "wlan.s1g.rps.channel_indication",
50653 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50654
50655 {&hf_ieee80211_s1g_raw_ci_channel_activity_bitmap,
50656 {"Channel Activity Bitmap",
50657 "wlan.s1g.rps.channel_indication.channel_activity_bitmap",
50658 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50659
50660 {&hf_ieee80211_s1g_raw_ci_max_trans_width,
50661 {"Maximum Transmission Width",
50662 "wlan.s1g.rps.channel_indication.maximum_transmission_width",
50663 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) }},
50664
50665 {&hf_ieee80211_s1g_raw_ci_ul_activity,
50666 {"UL Activity", "wlan.s1g.rps.channel_indication.ul_activity",
50667 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50668
50669 {&hf_ieee80211_s1g_raw_ci_dl_activity,
50670 {"DL Activity", "wlan.s1g.rps.channel_indication.dl_activity",
50671 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50672
50673 {&hf_ieee80211_s1g_raw_ci_reserved,
50674 {"Reserved", "wlan.s1g.rps.channel_indication.reserved",
50675 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50676
50677 {&hf_ieee80211_s1g_raw_praw_periodicity,
50678 {"PRAW Periodicity",
50679 "wlan.s1g.rps.periodic_operation_parameters.praw_periodicity",
50680 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50681
50682 {&hf_ieee80211_s1g_raw_praw_validity,
50683 {"PRAW Validity",
50684 "wlan.s1g.rps.periodic_operation_parameters.praw_validity",
50685 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50686
50687 {&hf_ieee80211_s1g_raw_praw_start_offset,
50688 {"PRAW Start Offset",
50689 "wlan.s1g.rps.periodic_operation_parameters.praw_start_offset",
50690 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50691
50692
50693 {&hf_ieee80211_s1g_page_slice_page_period,
50694 {"Page Period", "wlan.page_slice.page_period",
50695 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50696
50697 {&hf_ieee80211_s1g_page_slice_control,
50698 {"Page Slice Control", "wlan.page_slice.page_slice_control",
50699 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50700
50701 {&hf_ieee80211_s1g_page_slice_page_index,
50702 {"Page Index", "wlan.page_slice.page_slice_control.page_index",
50703 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50704
50705 {&hf_ieee80211_s1g_page_slice_page_slice_length,
50706 {"Page Slice Length", "wlan.page_slice.page_slice_control.page_slice_len",
50707 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00007C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50708
50709 {&hf_ieee80211_s1g_page_slice_page_slice_count,
50710 {"Page Slice Count", "wlan.page_slice.page_slice_control.page_slice_count",
50711 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50712
50713 {&hf_ieee80211_s1g_page_slice_block_offset,
50714 {"Block Offset", "wlan.page_slice.page_slice_control.block_offset",
50715 FT_UINT24, BASE_DEC, NULL((void*)0), 0x01F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50716
50717 {&hf_ieee80211_s1g_page_slice_tim_offset,
50718 {"TIM Offset", "wlan.page_slice.page_slice_control.tim_offset",
50719 FT_UINT24, BASE_DEC, NULL((void*)0), 0x1E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50720
50721 {&hf_ieee80211_s1g_page_slice_reserved,
50722 {"Reserved", "wlan.page_slice.page_slice_control.reserved",
50723 FT_UINT24, BASE_HEX, NULL((void*)0), 0xE00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50724
50725 {&hf_ieee80211_s1g_page_slice_page_bitmap,
50726 {"Page Bitmap", "wlan.page_slice.page_bitmap",
50727 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50728
50729 {&hf_ieee80211_s1g_aid_request_mode,
50730 {"AID Request Mode", "wlan.s1g.aid_request.aid_request_mode",
50731 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50732
50733 {&hf_ieee80211_s1g_aid_request_interval_present,
50734 {"AID Request Interval Present",
50735 "wlan.s1g.aid_request.aid_request_mode.aid_request_interval_present",
50736 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) }},
50737
50738 {&hf_ieee80211_s1g_aid_request_per_sta_address_present,
50739 {"Per STA Address Present",
50740 "wlan.s1g.aid_request.aid_request_mode.per_sta_address_present",
50741 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) }},
50742
50743 {&hf_ieee80211_s1g_aid_request_service_characteristic_present,
50744 {"Service Characteristic Present",
50745 "wlan.s1g.aid_request.aid_request_mode.service_characteristic_present",
50746 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) }},
50747
50748 {&hf_ieee80211_s1g_aid_request_non_tim_mode_switch,
50749 {"Non-TIM Mode Switch",
50750 "wlan.s1g.aid_request.aid_request_mode.non_tim_mode_switch",
50751 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) }},
50752
50753 {&hf_ieee80211_s1g_aid_request_tim_mode_switch,
50754 {"TIM Mode Switch",
50755 "wlan.s1g.aid_request.aid_request_mode.tim_mode_switch",
50756 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) }},
50757
50758 {&hf_ieee80211_s1g_aid_request_group_address_present,
50759 {"Group Address Present",
50760 "wlan.s1g.aid_request.aid_request_mode.group_address_present",
50761 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) }},
50762
50763 {&hf_ieee80211_s1g_aid_request_reserved,
50764 {"Reserved", "wlan.s1g.aid_request.aid_request_mode.reserved",
50765 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50766
50767 {&hf_ieee80211_s1g_aid_request_interval,
50768 {"AID Request Interval", "wlan.s1g.aid_request.aid_request_interval",
50769 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50770
50771 {&hf_ieee80211_s1g_aid_request_characteristic_sensor,
50772 {"Sensor", "wlan.s1g.aid_request.service_characteristic.sensor",
50773 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50774
50775 {&hf_ieee80211_s1g_aid_request_characteristic_offload,
50776 {"Offload", "wlan.s1g.aid_request.service_characteristic.offload",
50777 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50778
50779 {&hf_ieee80211_s1g_aid_request_characteristic_official_service,
50780 {"Critical Service",
50781 "wlan.s1g.aid_request.service_characteristic.critical_service",
50782 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50783
50784 {&hf_ieee80211_s1g_aid_request_characteristic_reserved,
50785 {"Reserved", "wlan.s1g.aid_request.service_characteristic.reserved",
50786 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50787
50788 {&hf_ieee80211_s1g_aid_req_peer_sta_addr,
50789 {"Peer STA Address", "wlan.s1g.aid_request.peer_sta_address",
50790 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50791
50792 {&hf_ieee80211_s1g_aid_request_characteristic,
50793 {"Service Characteristic", "wlan.s1g.aid_request.service_characteristic",
50794 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50795
50796 {&hf_ieee80211_s1g_aid_req_group_addr,
50797 {"Group Mac Address", "wlan.s1g.aid_request.group_mac_address",
50798 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50799
50800 {&hf_ieee80211_s1g_aid_rsp_aid_group_aid,
50801 {"AID/Group AID", "wlan.s1g.aid_response.aid_group_aid",
50802 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50803
50804 {&hf_ieee80211_s1g_aid_rsp_aid_switch_count,
50805 {"AID Switch Count", "wlan.s1g.aid_response.aid_switch_count",
50806 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50807
50808 {&hf_ieee80211_s1g_aid_rsp_aid_response_interval,
50809 {"AID Response Interval", "wlan.s1g.aid_response.aid_response_interval",
50810 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50811
50812 {&hf_ieee80211_s1g_sector_op_control_16b,
50813 {"Sector Operation Control", "wlan.s1g.sector_operation.control",
50814 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50815
50816 {&hf_ieee80211_s1g_sector_op_sectorization_type_b16,
50817 {"Sectorization Type",
50818 "wlan.s1g.sector_operation.control.sectorization_type",
50819 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) }},
50820
50821 {&hf_ieee80211_s1g_sector_op_periodic_training_indicator,
50822 {"Periodic Training Indicator",
50823 "wlan.s1g.sector_operation.control.periodic_training_indicator",
50824 FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50825
50826 {&hf_ieee80211_s1g_sector_op_training_period,
50827 {"Training Period",
50828 "wlan.s1g.sector_operation.control.training_interval",
50829 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00FC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50830
50831 {&hf_ieee80211_s1g_sector_op_remaining_beacon_interval,
50832 {"Remaining Beacon Interval",
50833 "wlan.s1g.sector_operation.control.remaining_beacon_interval",
50834 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50835
50836 {&hf_ieee80211_s1g_sector_op_reserved_b16,
50837 {"Reserved", "wlan.s1g.sector_operation.reserved",
50838 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50839
50840 {&hf_ieee80211_s1g_sector_op_control,
50841 {"Sector Operation Control", "wlan.s1g.sector_operation.control",
50842 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50843
50844 {&hf_ieee80211_s1g_sector_op_sectorization_type,
50845 {"Sectorization Type",
50846 "wlan.s1g.sector_operation.control.sectorization_type",
50847 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) }},
50848
50849 {&hf_ieee80211_s1g_sector_op_period,
50850 {"Period", "wlan.s1g.sector_operation.control.period",
50851 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50852
50853 {&hf_ieee80211_s1g_sector_op_omni,
50854 {"Omni", "wlan.s1g.sector_operation.control.omni",
50855 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) }},
50856
50857 {&hf_ieee80211_s1g_sector_op_group_info,
50858 {"Group Info", "wlan.s1g.sector_operation.group_info",
50859 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50860
50861 {&hf_ieee80211_s1g_short_beacon_interval,
50862 {"Short Beacon Interval", "wlan.sig.short_beacon_interval",
50863 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50864
50865 {&hf_ieee80211_s1g_change_sequence,
50866 {"Change Sequence", "wlan.s1g.change_sequence",
50867 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50868
50869 /* Need to add a TFS for this and perhaps two versions */
50870 {&hf_ieee80211_s1g_auth_control_control,
50871 {"Control", "wlan.s1g.auth_control.control",
50872 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50873
50874 {&hf_ieee80211_s1g_auth_control_deferral,
50875 {"Deferral", "wlan.s1g.auth_control.deferral",
50876 FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50877
50878 {&hf_ieee80211_s1g_auth_control_reserved,
50879 {"Reserved", "wlan.s1g.auth_control.reserved",
50880 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50881
50882 {&hf_ieee80211_s1g_auth_control_thresh,
50883 {"Authentication Control Threshold", "wlan.s1g.auth_control.threshold",
50884 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50885
50886 {&hf_ieee80211_s1g_auth_control_thresh_tus,
50887 {"Authentication Control Threshold", "wlan.s1g.auth_control.threshold",
50888 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
,
50889 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50890
50891 {&hf_ieee80211_s1g_auth_slot_duration,
50892 {"Authentication Slot Duration", "wlan.s1g.auth_control.slot_duration",
50893 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_di_dis)((0 ? (const struct unit_name_string*)0 : ((&units_di_dis
))))
, 0x0000FE,
50894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50895
50896 {&hf_ieee80211_s1g_auth_max_trans_int,
50897 {"Maximum Transmission Interval",
50898 "wlan.s1g.distributed_auth_control.max_xmit_int",
50899 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
, 0x00FF00,
50900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50901
50902 {&hf_ieee80211_s1g_auth_min_trans_int,
50903 {"Minimum Transmission Interval",
50904 "wlan.s1g.distributed_auth_control.min_xmit_int",
50905 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
, 0xFF0000,
50906 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50907
50908 {&hf_ieee80211_s1g_tsf_timer_accuracy,
50909 {"TSF Timer Accuracy", "wlan.s1g.tsf_timer_accuracy",
50910 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) }},
50911
50912 {&hf_ieee80211_s1g_relay_control,
50913 {"Relay Control", "wlan.s1g.relay_control",
50914 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50915
50916 {&hf_ieee80211_s1g_relay_control_rootap_bssid,
50917 {"RootAP BSSID", "wlan.s1g.relay_control.rootap_bssid",
50918 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50919
50920 {&hf_ieee80211_s1g_relay_function_activation_mode,
50921 {"Relay Activation Mode",
50922 "wlan.s1g.relay_activation.relay_activation_mode",
50923 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) }},
50924
50925 {&hf_ieee80211_s1g_relay_function_direction,
50926 {"Direction", "wlan.s1g.relay_activation.direction",
50927 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) }},
50928
50929 {&hf_ieee80211_s1g_relay_function_enable_relay_function,
50930 {"Enable Relay Function",
50931 "wlan.s1g.relay_activation.enable_relay_function",
50932 FT_UINT8, BASE_CUSTOM, CF_FUNC(enable_relay_function_custom)((const void *) (size_t) (enable_relay_function_custom)), 0x04,
50933 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50934
50935 {&hf_ieee80211_s1g_relay_function_stas_present_indic,
50936 {"Number of STAs Presence Indicator",
50937 "wlan.s1g.relay_activation.number_of_stas_presence_indicator",
50938 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50939
50940 {&hf_ieee80211_s1g_relay_function_reserved,
50941 {"Reserved", "wlan.s1g.relay_activation.reserved",
50942 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50943
50944 {&hf_ieee80211_s1g_number_of_stas,
50945 {"Number of STAs", "wlan.s1g.relay_activation.number_of_stas",
50946 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50947
50948 {&hf_ieee80211_s1g_initiator_mac_address,
50949 {"Initiator MAC Address",
50950 "wlan.s1g.reachable_address.initiator_mac_address",
50951 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50952
50953 {&hf_ieee80211_s1g_address_count,
50954 {"Address Count", "wlan.s1g.reachable_address.address_count",
50955 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50956
50957 {&hf_ieee80211_s1g_reachable_add_remove,
50958 {"Add/Remove", "wlan.s1g.reachable_address.add_remove",
50959 FT_BOOLEAN, 8, TFS(&reachable_address_add_remove_tfs)((0 ? (const struct true_false_string*)0 : ((&reachable_address_add_remove_tfs
))))
,
50960 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50961
50962 {&hf_ieee80211_s1g_reachable_relay_capable,
50963 {"Relay Capable", "wlan.s1g.reachable_address.relay_capable",
50964 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50965
50966 {&hf_ieee80211_s1g_reachable_reserved,
50967 {"Reserved", "wlan.s1g.reachable_address.reserved",
50968 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50969
50970 {&hf_ieee80211_s1g_reachable_mac_address,
50971 {"MAC Address", "wlan.s1g.reachable_address.mac_address",
50972 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50973
50974 {&hf_ieee80211_s1g_relay_discovery_control,
50975 {"Relay Discovery Control", "wlan.s1g.relay_discovery_control",
50976 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50977
50978 {&hf_ieee80211_s1g_min_data_rate_included,
50979 {"Min Data Rate Included",
50980 "wlan.s1g.relay_discovery_control.min_data_rate_included",
50981 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) }},
50982
50983 {&hf_ieee80211_s1g_mean_data_rate_included,
50984 {"Mean Data Rate Included",
50985 "wlan.s1g.relay_discovery_control.mean_data_rate_included",
50986 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) }},
50987
50988 {&hf_ieee80211_s1g_max_data_rate_included,
50989 {"Max Data Rate Included",
50990 "wlan.s1g.relay_discovery_control.max_data_rate_included",
50991 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) }},
50992
50993 {&hf_ieee80211_s1g_delay_and_min_phy_rate,
50994 {"Delay and Min Phy Rate Included",
50995 "wlan.s1g.relay_discovery_control.delay_and_min_phy_rate_included",
50996 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) }},
50997
50998 {&hf_ieee80211_s1g_information_not_available,
50999 {"Information Not Available",
51000 "wlan.s1g.relay_discovery_control.information_not_available",
51001 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51002
51003 {&hf_ieee80211_s1g_relay_control_ul_min,
51004 {"UL Min Data Rate (100kbps)", "wlan.s1g.relay_discovery.ul_min_data_rate",
51005 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51006
51007 {&hf_ieee80211_s1g_relay_control_ul_mean,
51008 {"UL Mean Data Rate (100kbps)",
51009 "wlan.s1g.relay_discovery.ul_mean_data_rate",
51010 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51011
51012 {&hf_ieee80211_s1g_relay_control_ul_max,
51013 {"UL Max Data Rate (100kbps)", "wlan.s1g.relay_discovery.ul_max_data_rate",
51014 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51015
51016 {&hf_ieee80211_s1g_relay_control_dl_min,
51017 {"DL Min Data Rate (100kbps)", "wlan.s1g.relay_discovery.dl_min_data_rate",
51018 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51019
51020 {&hf_ieee80211_s1g_relay_control_dl_mean,
51021 {"DL Mean Data Rate (100kbps)",
51022 "wlan.s1g.relay_discovery.dl_mean_data_rate",
51023 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51024
51025 {&hf_ieee80211_s1g_relay_control_dl_max,
51026 {"DL Max Data Rate (100kbps)", "wlan.s1g.relay_discovery.dl_max_data_rate",
51027 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51028
51029 {&hf_ieee80211_s1g_relay_discovery_reserved,
51030 {"Reserved", "wlan.s1g.relay_discovery_control.reserved",
51031 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51032
51033 {&hf_ieee80211_s1g_relay_hierarchy_identifier,
51034 {"Relay Hierarchy Identifier",
51035 "wlan.s1g.relay_control.relay_hierarchy_identifier",
51036 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(relay_hierarchy_rstrs)((0 ? (const struct _range_string*)0 : ((relay_hierarchy_rstrs
))))
,
51037 0x7F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51038
51039 {&hf_ieee80211_s1g_relay_no_more_relay_flag,
51040 {"No More Relay Flag", "wlan.s1g.relay_control.no_more_relay_flag",
51041 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) }},
51042
51043 {&hf_ieee80211_s1g_aid_entry_mac_addr,
51044 {"STA MAC Address", "wlan.s1g.aid_entry.sta_mac_address",
51045 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51046
51047 {&hf_ieee80211_s1g_aid_entry_assoc_id,
51048 {"Association ID", "wlan.s1g.aid_entry.association_id",
51049 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51050
51051 {&hf_ieee80211_s1g_beacon_compatibility_info,
51052 {"Compatibility Information", "wlan.s1g.beacon_compatibility_info",
51053 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51054
51055 {&hf_ieee80211_s1g_beacon_interval,
51056 {"Beacon Interval", "wlan.s1g.beacon_interval",
51057 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51058
51059 {&hf_ieee80211_s1g_tsf_completion,
51060 {"TSF Completion", "wlan.s1g.tsf_completion",
51061 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51062
51063 {&hf_ieee80211_s1g_channel_width,
51064 {"Channel Width", "wlan.s1g.channel_width",
51065 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51066
51067 {&hf_ieee80211_s1g_primary_channel_width,
51068 {"Primary Channel Width", "wlan.s1g.channel_width.primary_channel_width",
51069 FT_UINT8, BASE_DEC, VALS(primary_channel_width_vals)((0 ? (const struct _value_string*)0 : ((primary_channel_width_vals
))))
,
51070 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51071
51072 {&hf_ieee80211_s1g_bss_operating_channel_width,
51073 {"BSS Operating Channel Width",
51074 "wlan.s1g.channel_width.bss_operating_channel_width",
51075 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1e, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51076
51077 {&hf_ieee80211_s1g_primary_channel_location,
51078 {"1MHz Primary Channel Location",
51079 "wlan.s1g.channel_width.1mhz_primary_channel_location",
51080 FT_UINT8, BASE_DEC,
51081 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) }},
51082
51083 {&hf_ieee80211_s1g_reserved_b6,
51084 {"Reserved", "wlan.s1g.channel_width.reserved_b6",
51085 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51086
51087 {&hf_ieee80211_s1g_mcs10_use,
51088 {"MCS10 Use", "wlan.s1g.channel_width.mcs10_use",
51089 FT_UINT8, BASE_DEC, VALS(mcs10_use_vals)((0 ? (const struct _value_string*)0 : ((mcs10_use_vals)))), 0x80,
51090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51091
51092 {&hf_ieee80211_s1g_operating_class,
51093 {"Operating Class", "wlan.s1g.operating_class",
51094 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51095
51096 {&hf_ieee80211_s1g_primary_channel_number,
51097 {"Primary Channel Number", "wlan.s1g.primary_channel_number",
51098 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51099
51100 {&hf_ieee80211_s1g_channel_center_frequency,
51101 {"Channel Center Frequency", "wlan.s1g.channel_center_frequency",
51102 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51103
51104 {&hf_ieee80211_s1g_basic_mcs_and_nss_set,
51105 {"Basic S1G-MCS and NSS Set", "wlan.s1g.basic_s1g_mcs_and_nss",
51106 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51107
51108 {&hf_ieee80211_s1g_sst_enabled_channel_bitmap,
51109 {"SST Enabled Channel Bitmap", "wlan.s1g.sst_enabled_channel_bitmap",
51110 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51111
51112 {&hf_ieee80211_s1g_sst_primary_channel_offset,
51113 {"Primary Channel Offset", "wlan.s1g.primary_channel_offset",
51114 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51115
51116 {&hf_ieee80211_s1g_sst_channel_unit,
51117 {"SST Channel Unit", "wlan.s1g.sst_channel_unit",
51118 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) }},
51119
51120 {&hf_ieee80211_s1g_sst_reserved,
51121 {"Reserved", "wlan.s1g.sst_reserved",
51122 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51123
51124 {&hf_ieee80211_s1g_max_away_duration,
51125 {"Max Away Duration", "wlan.s1g.max_away_duration",
51126 FT_UINT16, BASE_DEC | BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
,
51127 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51128
51129 {&hf_ieee80211_s1g_tim_bmapctrl,
51130 {"Bitmap Control", "wlan.s1g.tim.bitmap_control",
51131 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51132
51133 {&hf_ieee80211_s1g_tim_bmapctl_traffic_indicator,
51134 {"Traffic Indication", "wlan.s1g.tim.traffic_indication",
51135 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51136
51137 {&hf_ieee80211_s1g_tim_page_slice_number,
51138 {"Page Slice Number", "wlan.s1g.tim.page_slice_number",
51139 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51140
51141 {&hf_ieee80211_s1g_tim_page_index,
51142 {"Page Index", "wlan.s1g.tim.page_index",
51143 FT_UINT8, BASE_DEC, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51144
51145 {&hf_ieee80211_s1g_pvb_block_control_byte,
51146 {"Block Control Byte", "wlan.s1g.tim.pvb.block_control",
51147 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51148
51149 {&hf_ieee80211_s1g_pvb_encoding_mode,
51150 {"Encoding Mode", "wlan.s1g.tim.pvb.block_control.encoding_mode",
51151 FT_UINT8, BASE_HEX, VALS(s1g_block_control_encoding_mode_vals)((0 ? (const struct _value_string*)0 : ((s1g_block_control_encoding_mode_vals
))))
,
51152 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51153
51154 {&hf_ieee80211_s1g_pvb_inverse_bitmap,
51155 {"Inverse Bitmap", "wlan.s1g.tim.pvb.block_control.inverse_bitmap",
51156 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51157
51158 {&hf_ieee80211_s1g_pvb_block_offset,
51159 {"Block Offset", "wlan.s1g.tim.pvb.block_offset",
51160 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51161
51162 {&hf_ieee80211_s1g_block_bitmap,
51163 {"Block Bitmap", "wlan.s1g.tim.pvb.block_bitmap.bitmap",
51164 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51165
51166 {&hf_ieee80211_s1g_block_bitmap_sta_aid13,
51167 {"STA AID13", "wlan.s1g.tim.pvb.block_bitmap.subblock.aid13",
51168 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51169
51170 {&hf_ieee80211_s1g_block_bitmap_ade,
51171 {"ADE Control", "wlan.s1g.tim.pvb.block_bitmap.ade.control",
51172 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51173
51174 {&hf_ieee80211_s1g_block_bitmap_ewl,
51175 {"EWL", "wlan.s1g.tim.pvb.block_bitmap.ade.ewl",
51176 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51177
51178 {&hf_ieee80211_s1g_block_bitmap_len,
51179 {"Length", "wlan.s1g.tim.pvb.block_bitmap.ade.length",
51180 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51181
51182 {&hf_ieee80211_s1g_block_bitmap_ade_bytes,
51183 {"Bitmap", "wlan.s1g.tim.pvb.block_bitmap.ade.bitmap",
51184 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51185
51186 {&hf_ieee80211_s1g_block_bitmap_single_aid,
51187 {"Single AID13", "wlan.s1g.tim.pvb.single_aid",
51188 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51189
51190 {&hf_ieee80211_s1g_block_bitmap_olb_length,
51191 {"Length", "wlan.s1g.tim.pvb.olb.length",
51192 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51193
51194 {&hf_ieee80211_s1g_probe_response_group_bitmap,
51195 {"Probe Response Group Bitmap", "wlan.s1g.probe_response_group_bitmap",
51196 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51197
51198 {&hf_ieee80211_s1g_probe_resp_subfield_0,
51199 {"Probe Response Option Default Bitmap",
51200 "wlan.s1g.probe_response_option_default_bitmap",
51201 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51202
51203 {&hf_ieee80211_pv1_probe_response_req_full_ssid,
51204 {"Request Full SSID", "wlan.s1g.probe_response_option_request_full_ssid",
51205 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) }},
51206
51207 {&hf_ieee80211_pv1_probe_response_req_next_tbtt,
51208 {"Request Next TBTT", "wlan.s1g.probe_response_option_request_next_tbtt",
51209 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) }},
51210
51211 {&hf_ieee80211_pv1_probe_response_req_access_network_option,
51212 {"Request Access Network Options",
51213 "wlan.s1g.probe_response_option_request_access_network_options",
51214 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) }},
51215
51216 {&hf_ieee80211_pv1_probe_response_req_s1g_beacon_compatibility,
51217 {"Request S1G Beacon Compatibility",
51218 "wlan.s1g.probe_response_option_request_s1g_beacon_compatibility",
51219 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) }},
51220
51221 {&hf_ieee80211_pv1_probe_response_req_supported_rates,
51222 {"Request Supported Rates",
51223 "wlan.s1g.probe_response_option_request_supported_rates",
51224 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) }},
51225
51226 {&hf_ieee80211_pv1_probe_response_req_s1g_capability,
51227 {"Request S1G Capability",
51228 "wlan.s1g.probe_response_option_request_s1g_capability",
51229 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) }},
51230
51231 {&hf_ieee80211_pv1_probe_response_req_s1g_operation,
51232 {"Request S1G Operation",
51233 "wlan.s1g.probe_response_option_request_s1g_operation",
51234 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) }},
51235
51236 {&hf_ieee80211_pv1_probe_response_req_rsn,
51237 {"Request RSN", "wlan.s1g.probe_response_option_request_rsn",
51238 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) }},
51239
51240 {&hf_ieee80211_s1g_el_op_max_awake_duration,
51241 {"Max Awake Duration", "wlan.s1g.el_operation.max_awake_duration",
51242 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_max_awake_duration_custom)((const void *) (size_t) (s1g_max_awake_duration_custom)),
51243 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51244
51245 {&hf_ieee80211_s1g_el_op_recovery_time_duration,
51246 {"Recovery Time Duration", "wlan.s1g.el_operation.recovery_time_duration",
51247 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_recovery_time_duration_custom)((const void *) (size_t) (s1g_recovery_time_duration_custom)),
51248 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51249
51250 {&hf_ieee80211_s1g_sectorized_group_id_list,
51251 {"Sectorized Group List", "wlan.s1g.sectorized_group_list",
51252 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51253
51254 {&hf_ieee80211_s1g_header_comp_control,
51255 {"Header Compression Control",
51256 "wlan.s1g.header_compression.header_compression_control",
51257 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51258
51259 {&hf_ieee80211_s1g_header_comp_req_resp,
51260 {"Request/Response",
51261 "wlan.s1g.header_compression.header_compression_control.request_response",
51262 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) }},
51263
51264 {&hf_ieee80211_s1g_header_comp_store_a3,
51265 {"Store A3",
51266 "wlan.s1g.header_compression.header_compression_control.store_a3",
51267 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51268
51269 {&hf_ieee80211_s1g_header_comp_store_a4,
51270 {"Store A4",
51271 "wlan.s1g.header_compression.header_compression_control.store_a4",
51272 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51273
51274 {&hf_ieee80211_s1g_header_comp_ccmp_update_present,
51275 {"CCMP Update Present",
51276 "wlan.s1g.header_compression.header_compression_control.ccmp_update_present",
51277 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51278
51279 {&hf_ieee80211_s1g_header_comp_pv1_data_type_3_supported,
51280 {"PV1 Data Type 3 Supported",
51281 "wlan.s1g.header_compression.header_compression_control.pv1_data_type_3_supported",
51282 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51283
51284 {&hf_ieee80211_s1g_header_comp_reserved,
51285 {"Reserved",
51286 "wlan.s1g.header_compression.header_compression_control.reserved",
51287 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51288
51289 {&hf_ieee80211_s1g_header_comp_a3,
51290 {"A3", "wlan.s1g.header_compression.a3",
51291 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51292
51293 {&hf_ieee80211_s1g_header_comp_a4,
51294 {"A4", "wlan.s1g.header_compression.a4",
51295 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51296
51297 {&hf_ieee80211_s1g_header_comp_ccmp_update,
51298 {"CCMP Update", "wlan.s1g.header_compression.ccmp_update",
51299 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51300
51301 {&hf_ieee80211_ampduparam,
51302 {"A-MPDU Parameters", "wlan.ht.ampduparam",
51303 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51304 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51305
51306 {&hf_ieee80211_ampduparam_vs,
51307 {"A-MPDU Parameters (VS)", "wlan.vs.ht.ampduparam",
51308 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51309 "Vendor Specific A-MPDU Parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51310
51311 {&hf_ieee80211_ampduparam_mpdu,
51312 {"Maximum Rx A-MPDU Length Exponent", "wlan.ht.ampduparam.maxlength",
51313 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03,
51314 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51315
51316 {&hf_ieee80211_ampduparam_mpdu_start_spacing,
51317 {"Minimum MPDU Start Spacing", "wlan.ht.ampduparam.mpdu_start_spacing",
51318 FT_UINT8, BASE_HEX, VALS(ampduparam_mpdu_start_spacing_flags)((0 ? (const struct _value_string*)0 : ((ampduparam_mpdu_start_spacing_flags
))))
, 0x1c,
51319 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51320
51321 {&hf_ieee80211_ampduparam_reserved,
51322 {"Reserved", "wlan.ht.ampduparam.reserved",
51323 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
51324 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51325
51326 {&hf_ieee80211_mcsset,
51327 {"Rx Supported Modulation and Coding Scheme Set", "wlan.ht.mcsset",
51328 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51329 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51330
51331 {&hf_ieee80211_mcsset_vs,
51332 {"Rx Supported Modulation and Coding Scheme Set (VS)", "wlan.vs.ht.mcsset",
51333 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51334 "Vendor Specific Rx Supported Modulation and Coding Scheme Set", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51335
51336 {&hf_ieee80211_mcsset_rx_bitmask,
51337 {"Rx Modulation and Coding Scheme (One bit per modulation)", "wlan.ht.mcsset.rxbitmask",
51338 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51339 "One bit per modulation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51340
51341 {&hf_ieee80211_mcsset_rx_bitmask_0to7,
51342 {"Rx Bitmask Bits 0-7", "wlan.ht.mcsset.rxbitmask.0to7",
51343 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000ff,
51344 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51345
51346 {&hf_ieee80211_mcsset_rx_bitmask_8to15,
51347 {"Rx Bitmask Bits 8-15", "wlan.ht.mcsset.rxbitmask.8to15",
51348 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000ff00,
51349 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51350
51351 {&hf_ieee80211_mcsset_rx_bitmask_16to23,
51352 {"Rx Bitmask Bits 16-23", "wlan.ht.mcsset.rxbitmask.16to23",
51353 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00ff0000,
51354 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51355
51356 {&hf_ieee80211_mcsset_rx_bitmask_24to31,
51357 {"Rx Bitmask Bits 24-31", "wlan.ht.mcsset.rxbitmask.24to31",
51358 FT_UINT32, BASE_HEX, NULL((void*)0), 0xff000000,
51359 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51360
51361 {&hf_ieee80211_mcsset_rx_bitmask_32,
51362 {"Rx Bitmask Bit 32", "wlan.ht.mcsset.rxbitmask.32",
51363 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001,
51364 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51365
51366 {&hf_ieee80211_mcsset_rx_bitmask_33to38,
51367 {"Rx Bitmask Bits 33-38", "wlan.ht.mcsset.rxbitmask.33to38",
51368 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00007e,
51369 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51370
51371 {&hf_ieee80211_mcsset_rx_bitmask_39to52,
51372 {"Rx Bitmask Bits 39-52", "wlan.ht.mcsset.rxbitmask.39to52",
51373 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1fff80,
51374 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51375
51376 {&hf_ieee80211_mcsset_rx_bitmask_53to76,
51377 {"Rx Bitmask Bits 53-76", "wlan.ht.mcsset.rxbitmask.53to76",
51378 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1fffffe0,
51379 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51380
51381 {&hf_ieee80211_mcsset_highest_data_rate,
51382 {"Highest Supported Data Rate", "wlan.ht.mcsset.highestdatarate",
51383 FT_UINT16, BASE_HEX, NULL((void*)0), 0x03ff,
51384 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51385
51386 {&hf_ieee80211_mcsset_tx_mcs_set_defined,
51387 {"Tx Supported MCS Set", "wlan.ht.mcsset.txsetdefined",
51388 FT_BOOLEAN, 16, TFS(&tfs_defined_not_defined)((0 ? (const struct true_false_string*)0 : ((&tfs_defined_not_defined
))))
, 0x0001,
51389 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51390
51391 {&hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal,
51392 {"Tx and Rx MCS Set", "wlan.ht.mcsset.txrxmcsnotequal",
51393 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,
51394 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51395
51396 {&hf_ieee80211_mcsset_tx_max_spatial_streams,
51397 {"Maximum Number of Tx Spatial Streams Supported", "wlan.ht.mcsset.txmaxss",
51398 FT_UINT16, BASE_HEX, NULL((void*)0), 0x000c,
51399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51400
51401 {&hf_ieee80211_mcsset_tx_unequal_modulation,
51402 {"Unequal Modulation", "wlan.ht.mcsset.txunequalmod",
51403 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0010,
51404 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51405
51406 {&hf_ieee80211_htex_cap,
51407 {"HT Extended Capabilities", "wlan.htex.capabilities",
51408 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51409 "HT Extended Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51410
51411 {&hf_ieee80211_htex_vs_cap,
51412 {"HT Extended Capabilities (VS)", "wlan.vs.htex.capabilities",
51413 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51414 "Vendor Specific HT Extended Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51415
51416 {&hf_ieee80211_htex_reserved_b0_b7,
51417 {"Reserved", "wlan.htex.capabilities.reserved_b0_b7",
51418 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00ff,
51419 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51420
51421 {&hf_ieee80211_htex_mcs,
51422 {"MCS Feedback capability", "wlan.htex.capabilities.mcs",
51423 FT_UINT16, BASE_HEX, VALS(htex_mcs_flags)((0 ? (const struct _value_string*)0 : ((htex_mcs_flags)))), 0x0300,
51424 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51425
51426 {&hf_ieee80211_htex_htc_support,
51427 {"HT variant HT Control field", "wlan.htex.capabilities.htc",
51428 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0400,
51429 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51430
51431 {&hf_ieee80211_htex_rd_responder,
51432 {"Reverse Direction Responder", "wlan.htex.capabilities.rdresponder",
51433 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800,
51434 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51435
51436 {&hf_ieee80211_htex_reserved_b12_b15,
51437 {"Reserved", "wlan.htex.capabilities.reserved_b12_b15",
51438 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
51439 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51440
51441 {&hf_ieee80211_txbf,
51442 {"Transmit Beam Forming (TxBF) Capabilities", "wlan.txbf",
51443 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
51444 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51445
51446 {&hf_ieee80211_txbf_vs,
51447 {"Transmit Beam Forming (TxBF) Capabilities (VS)", "wlan.vs.txbf",
51448 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
51449 "Vendor Specific Transmit Beam Forming (TxBF) Capabilities", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51450
51451 {&hf_ieee80211_txbf_cap,
51452 {"Implicit Transmit Beamforming Receiving", "wlan.txbf.txbf",
51453 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000001,
51454 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51455
51456 {&hf_ieee80211_txbf_rcv_ssc,
51457 {"Receive Staggered Sounding", "wlan.txbf.rxss",
51458 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000002,
51459 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51460
51461 {&hf_ieee80211_txbf_tx_ssc,
51462 {"Transmit Staggered Sounding", "wlan.txbf.txss",
51463 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000004,
51464 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51465
51466 {&hf_ieee80211_txbf_rcv_ndp,
51467 {"Receive Null Data packet (NDP)", "wlan.txbf.rxndp",
51468 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000008,
51469 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51470
51471 {&hf_ieee80211_txbf_tx_ndp,
51472 {"Transmit Null Data packet (NDP)", "wlan.txbf.txndp",
51473 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000010,
51474 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51475
51476 {&hf_ieee80211_txbf_impl_txbf,
51477 {"Implicit Transmit Beamforming", "wlan.txbf.impltxbf",
51478 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000020,
51479 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51480
51481 {&hf_ieee80211_txbf_calib,
51482 {"Calibration", "wlan.txbf.calibration",
51483 FT_UINT32, BASE_HEX, VALS(txbf_calib_flag)((0 ? (const struct _value_string*)0 : ((txbf_calib_flag)))), 0x000000c0,
51484 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51485
51486 {&hf_ieee80211_txbf_expl_csi,
51487 {"Explicit CSI Transmit Beamforming", "wlan.txbf.csi",
51488 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000100,
51489 "Station can apply TxBF using CSI explicit feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51490
51491 {&hf_ieee80211_txbf_expl_uncomp_fm,
51492 {"Explicit Noncompressed Steering", "wlan.txbf.fm.uncompressed.tbf",
51493 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000200,
51494 "Station can apply TxBF using uncompressed beamforming feedback matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51495
51496 {&hf_ieee80211_txbf_expl_comp_fm,
51497 {"Explicit Compressed Steering", "wlan.txbf.fm.compressed.tbf",
51498 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000400,
51499 "Station can apply TxBF using compressed beamforming feedback matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51500
51501 {&hf_ieee80211_txbf_expl_bf_csi,
51502 {"Explicit Transmit Beamforming CSI Feedback", "wlan.txbf.rcsi",
51503 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)((0 ? (const struct _value_string*)0 : ((txbf_feedback_flags)
)))
, 0x00001800,
51504 "Receiver can return explicit CSI feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51505
51506 {&hf_ieee80211_txbf_expl_uncomp_fm_feed,
51507 {"Explicit Noncompressed Beamforming Feedback", "wlan.txbf.fm.uncompressed.rbf",
51508 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)((0 ? (const struct _value_string*)0 : ((txbf_feedback_flags)
)))
, 0x00006000,
51509 "Receiver can return explicit uncompressed Beamforming Feedback Matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51510
51511 {&hf_ieee80211_txbf_expl_comp_fm_feed,
51512 {"Explicit Noncompressed Beamforming Feedback", "wlan.txbf.fm.compressed.bf",
51513 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)((0 ? (const struct _value_string*)0 : ((txbf_feedback_flags)
)))
, 0x00018000,
51514 "Station can compress and use compressed Beamforming Feedback Matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51515
51516 {&hf_ieee80211_txbf_min_group,
51517 {"Minimal Grouping", "wlan.txbf.mingroup",
51518 FT_UINT32, BASE_HEX, VALS(txbf_min_group_flags)((0 ? (const struct _value_string*)0 : ((txbf_min_group_flags
))))
, 0x00060000,
51519 "Minimal grouping used for explicit feedback reports", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51520
51521 {&hf_ieee80211_vht_cap,
51522 {"VHT Capabilities Info", "wlan.vht.capabilities",
51523 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
51524 "VHT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51525
51526 {&hf_ieee80211_vht_max_mpdu_length,
51527 {"Maximum MPDU Length", "wlan.vht.capabilities.maxmpdulength",
51528 FT_UINT32, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x00000003,
51529 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51530
51531 {&hf_ieee80211_vht_supported_chan_width_set,
51532 {"Supported Channel Width Set", "wlan.vht.capabilities.supportedchanwidthset",
51533 FT_UINT32, BASE_HEX, VALS(vht_supported_chan_width_set_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_chan_width_set_flag
))))
, 0x0000000c,
51534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51535
51536 {&hf_ieee80211_vht_rx_ldpc,
51537 {"Rx LDPC", "wlan.vht.capabilities.rxldpc",
51538 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000010,
51539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51540
51541 {&hf_ieee80211_vht_short_gi_for_80,
51542 {"Short GI for 80MHz/TVHT_MODE_4C", "wlan.vht.capabilities.short80",
51543 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000020,
51544 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51545
51546 {&hf_ieee80211_vht_short_gi_for_160,
51547 {"Short GI for 160MHz and 80+80MHz", "wlan.vht.capabilities.short160",
51548 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000040,
51549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51550
51551 {&hf_ieee80211_vht_tx_stbc,
51552 {"Tx STBC", "wlan.vht.capabilities.txstbc",
51553 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000080,
51554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51555
51556 {&hf_ieee80211_vht_rx_stbc,
51557 {"Rx STBC", "wlan.vht.capabilities.rxstbc",
51558 FT_UINT32, BASE_HEX, VALS(vht_rx_stbc_flag)((0 ? (const struct _value_string*)0 : ((vht_rx_stbc_flag)))), 0x00000700,
51559 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51560
51561 {&hf_ieee80211_vht_su_beamformer_cap,
51562 {"SU Beamformer Capable", "wlan.vht.capabilities.subeamformer",
51563 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000800,
51564 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51565
51566 {&hf_ieee80211_vht_su_beamformee_cap,
51567 {"SU Beamformee Capable", "wlan.vht.capabilities.subeamformee",
51568 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00001000,
51569 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51570
51571 {&hf_ieee80211_vht_beamformer_antennas,
51572 {"Beamformee STS Capability", "wlan.vht.capabilities.beamformee_sts_cap",
51573 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag)((0 ? (const struct _value_string*)0 : ((num_plus_one_3bit_flag
))))
, 0x0000e000,
51574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51575
51576 {&hf_ieee80211_vht_sounding_dimensions,
51577 {"Number of Sounding Dimensions", "wlan.vht.capabilities.soundingdimensions",
51578 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag)((0 ? (const struct _value_string*)0 : ((num_plus_one_3bit_flag
))))
, 0x00070000,
51579 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51580
51581 {&hf_ieee80211_vht_mu_beamformer_cap,
51582 {"MU Beamformer Capable", "wlan.vht.capabilities.mubeamformer",
51583 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00080000,
51584 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51585
51586 {&hf_ieee80211_vht_mu_beamformee_cap,
51587 {"MU Beamformee Capable", "wlan.vht.capabilities.mubeamformee",
51588 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00100000,
51589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51590
51591 {&hf_ieee80211_vht_txop_ps,
51592 {"TXOP PS", "wlan.vht.capabilities.vhttxopps",
51593 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00200000,
51594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51595
51596 {&hf_ieee80211_vht_var_htc_field,
51597 {"+HTC-VHT Capable", "wlan.vht.capabilities.vhthtc",
51598 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00400000,
51599 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51600
51601 {&hf_ieee80211_vht_max_ampdu,
51602 {"Max A-MPDU Length Exponent", "wlan.vht.capabilities.maxampdu",
51603 FT_UINT32, BASE_HEX, VALS(vht_max_ampdu_flag)((0 ? (const struct _value_string*)0 : ((vht_max_ampdu_flag))
))
, 0x03800000,
51604 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51605
51606 {&hf_ieee80211_vht_link_adaptation_cap,
51607 {"VHT Link Adaptation", "wlan.vht.capabilities.linkadapt",
51608 FT_UINT32, BASE_HEX, VALS(vht_link_adapt_flag)((0 ? (const struct _value_string*)0 : ((vht_link_adapt_flag)
)))
, 0x0c000000,
51609 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51610
51611 {&hf_ieee80211_vht_rx_pattern,
51612 {"Rx Antenna Pattern Consistency", "wlan.vht.capabilities.rxpatconsist",
51613 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10000000,
51614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51615
51616 {&hf_ieee80211_vht_tx_pattern,
51617 {"Tx Antenna Pattern Consistency", "wlan.vht.capabilities.txpatconsist",
51618 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20000000,
51619 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51620
51621 {&hf_ieee80211_vht_ext_nss_bw_support,
51622 {"Extended NSS BW Support", "wlan.vht.capabilities.ext_nss_bw_support",
51623 FT_UINT32, BASE_HEX, NULL((void*)0), 0xc0000000,
51624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51625
51626 {&hf_ieee80211_vht_mcsset,
51627 {"VHT Supported MCS Set", "wlan.vht.mcsset",
51628 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51630
51631 {&hf_ieee80211_vht_mcsset_rx_mcs_map,
51632 {"Rx MCS Map", "wlan.vht.mcsset.rxmcsmap",
51633 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51634 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51635
51636 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
51637 {"Rx 1 SS", "wlan.vht.mcsset.rxmcsmap.ss1",
51638 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0003,
51639 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51640
51641 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
51642 {"Rx 2 SS", "wlan.vht.mcsset.rxmcsmap.ss2",
51643 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x000c,
51644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51645
51646 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
51647 {"Rx 3 SS", "wlan.vht.mcsset.rxmcsmap.ss3",
51648 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0030,
51649 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51650
51651 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
51652 {"Rx 4 SS", "wlan.vht.mcsset.rxmcsmap.ss4",
51653 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x00c0,
51654 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51655
51656 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
51657 {"Rx 5 SS", "wlan.vht.mcsset.rxmcsmap.ss5",
51658 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0300,
51659 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51660
51661 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
51662 {"Rx 6 SS", "wlan.vht.mcsset.rxmcsmap.ss6",
51663 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0c00,
51664 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51665
51666 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
51667 {"Rx 7 SS", "wlan.vht.mcsset.rxmcsmap.ss7",
51668 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x3000,
51669 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51670
51671 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
51672 {"Rx 8 SS", "wlan.vht.mcsset.rxmcsmap.ss8",
51673 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0xc000,
51674 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51675
51676 {&hf_ieee80211_vht_mcsset_max_nsts_total,
51677 {"MaX NSTS Total", "wlan.vht.mcsset.max_nsts_total",
51678 FT_UINT16, BASE_DEC, NULL((void*)0), 0xe000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51679
51680 {&hf_ieee80211_vht_mcsset_rx_highest_long_gi,
51681 {"Rx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.rxhighestlonggirate",
51682 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1fff,
51683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51684
51685 {&hf_ieee80211_vht_mcsset_tx_mcs_map,
51686 {"Tx MCS Map", "wlan.vht.mcsset.txmcsmap",
51687 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51688 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51689
51690 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
51691 {"Tx 1 SS", "wlan.vht.mcsset.txmcsmap.ss1",
51692 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0003,
51693 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51694
51695 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
51696 {"Tx 2 SS", "wlan.vht.mcsset.txmcsmap.ss2",
51697 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x000c,
51698 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51699
51700 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
51701 {"Tx 3 SS", "wlan.vht.mcsset.txmcsmap.ss3",
51702 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0030,
51703 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51704
51705 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
51706 {"Tx 4 SS", "wlan.vht.mcsset.txmcsmap.ss4",
51707 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x00c0,
51708 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51709
51710 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
51711 {"Tx 5 SS", "wlan.vht.mcsset.txmcsmap.ss5",
51712 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0300,
51713 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51714
51715 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
51716 {"Tx 6 SS", "wlan.vht.mcsset.txmcsmap.ss6",
51717 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0c00,
51718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51719
51720 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
51721 {"Tx 7 SS", "wlan.vht.mcsset.txmcsmap.ss7",
51722 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x3000,
51723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51724
51725 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
51726 {"Tx 8 SS", "wlan.vht.mcsset.txmcsmap.ss8",
51727 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0xc000,
51728 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51729
51730 {&hf_ieee80211_vht_mcsset_tx_highest_long_gi,
51731 {"Tx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.txhighestlonggirate",
51732 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1fff,
51733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51734
51735 {&hf_ieee80211_vht_mcsset_extended_nss_bw_capable,
51736 {"VHT Extended NSS BW Capable", "wlan.vht.mcsset.vht_ext_nss_bw_capable",
51737 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) }},
51738
51739 {&hf_ieee80211_vht_mcsset_reserved,
51740 {"Reserved", "wlan.vht.mcsset.reserved",
51741 FT_UINT16, BASE_HEX, NULL((void*)0), 0xc000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51742
51743 {&hf_ieee80211_vht_op,
51744 {"VHT Operation Info", "wlan.vht.op",
51745 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51746 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51747
51748 {&hf_ieee80211_vht_op_channel_width,
51749 {"Channel Width", "wlan.vht.op.channelwidth",
51750 FT_UINT8, BASE_DEC, VALS(channel_width_vals)((0 ? (const struct _value_string*)0 : ((channel_width_vals))
))
, 0,
51751 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51752
51753 {&hf_ieee80211_vht_op_channel_center0,
51754 {"Channel Center Segment 0", "wlan.vht.op.channelcenter0",
51755 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51756 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51757
51758 {&hf_ieee80211_vht_op_channel_center1,
51759 {"Channel Center Segment 1", "wlan.vht.op.channelcenter1",
51760 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51761 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51762
51763 {&hf_ieee80211_vht_op_basic_mcs_map,
51764 {"Basic MCS Map", "wlan.vht.op.basicmcsmap",
51765 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51766 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51767
51768 {&hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
51769 {"Basic 1 SS", "wlan.vht.op.basicmcsmap.ss1",
51770 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0003,
51771 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51772
51773 {&hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
51774 {"Basic 2 SS", "wlan.vht.op.basicmcsmap.ss2",
51775 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x000c,
51776 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51777
51778 {&hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
51779 {"Basic 3 SS", "wlan.vht.op.basicmcsmap.ss3",
51780 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0030,
51781 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51782
51783 {&hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
51784 {"Basic 4 SS", "wlan.vht.op.basicmcsmap.ss4",
51785 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x00c0,
51786 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51787
51788 {&hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
51789 {"Basic 5 SS", "wlan.vht.op.basicmcsmap.ss5",
51790 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0300,
51791 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51792
51793 {&hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
51794 {"Basic 6 SS", "wlan.vht.op.basicmcsmap.ss6",
51795 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0c00,
51796 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51797
51798 {&hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
51799 {"Basic 7 SS", "wlan.vht.op.basicmcsmap.ss7",
51800 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x3000,
51801 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51802
51803 {&hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
51804 {"Basic 8 SS", "wlan.vht.op.basicmcsmap.ss8",
51805 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0xc000,
51806 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51807
51808 {&hf_ieee80211_vht_tpe_pwr_info,
51809 {"Tx Pwr Info", "wlan.vht.tpe.pwr_info",
51810 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51811 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51812
51813 {&hf_ieee80211_vht_tpe_pwr_info_count,
51814 {"Max Tx Pwr Count", "wlan.vht.tpe.pwr_info.count",
51815 FT_UINT8, BASE_DEC, NULL((void*)0) , 0x07,
51816 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51817
51818 {&hf_ieee80211_vht_tpe_pwr_info_unit,
51819 {"Max Tx Pwr Unit Interpretation", "wlan.vht.tpe.pwr_info.unit",
51820 FT_UINT8, BASE_DEC, VALS(vht_tpe_pwr_units)((0 ? (const struct _value_string*)0 : ((vht_tpe_pwr_units)))
)
, 0x38,
51821 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51822
51823 {&hf_ieee80211_vht_tpe_pwr_info_category,
51824 {"Max Tx Pwr Category", "wlan.vht.tpe.pwr_info.category",
51825 FT_UINT8, BASE_DEC, NULL((void*)0) , 0xC0,
51826 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51827
51828 {&hf_ieee80211_vht_tpe_pwr_constr_20,
51829 {"Local Max Tx Pwr Constraint 20MHz", "wlan.vht.tpe.pwr_constr_20",
51830 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51831 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51832
51833 {&hf_ieee80211_vht_tpe_pwr_constr_40,
51834 {"Local Max Tx Pwr Constraint 40MHz", "wlan.vht.tpe.pwr_constr_40",
51835 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51836 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51837
51838 {&hf_ieee80211_vht_tpe_pwr_constr_80,
51839 {"Local Max Tx Pwr Constraint 80MHz", "wlan.vht.tpe.pwr_constr_80",
51840 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51841 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51842
51843 {&hf_ieee80211_vht_tpe_pwr_constr_160,
51844 {"Local Max Tx Pwr Constraint 160MHz/80+80 MHz", "wlan.vht.tpe.pwr_constr_160",
51845 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51846 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51847
51848 {&hf_ieee80211_vht_tpe_pwr_constr_320,
51849 {"Local Max Tx Pwr Constraint 320 MHz", "wlan.vht.tpe.pwr_constr_320",
51850 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51851 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51852
51853 {&hf_ieee80211_vht_tpe_any_bw_psd,
51854 {"Max Tx Power Spectral Density", "wlan.vht.tpe.max_tx_psd",
51855 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) }},
51856
51857 {&hf_ieee80211_vht_tpe_psd,
51858 {"Power Spectral Density", "wlan.vht.tpe.psd",
51859 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) }},
51860
51861 {&hf_ieee80211_vht_tpe_ext_count,
51862 {"Extension Count", "wlan.vht.tpe.extension_count",
51863 FT_UINT8, BASE_DEC, NULL((void*)0) , 0x0f,
51864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51865
51866 {&hf_ieee80211_vht_tpe_ext_reserved,
51867 {"Reserved", "wlan.vht.tpe.extension_reserved",
51868 FT_UINT8, BASE_HEX, NULL((void*)0) , 0xf0,
51869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51870
51871 {&hf_ieee80211_txbf_csi_num_bf_ant,
51872 {"CSI Number of Beamformer Antennas", "wlan.txbf.csinumant",
51873 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)((0 ? (const struct _value_string*)0 : ((txbf_antenna_flags))
))
, 0x00180000,
51874 "Max antennae station can support when CSI feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51875
51876 {&hf_ieee80211_txbf_uncomp_sm_bf_ant,
51877 {"Noncompressed Steering Number of Beamformer Antennas", "wlan.txbf.fm.uncompressed.maxant",
51878 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)((0 ? (const struct _value_string*)0 : ((txbf_antenna_flags))
))
, 0x00600000,
51879 "Max antennae station can support when uncompressed Beamforming feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51880
51881 {&hf_ieee80211_txbf_comp_sm_bf_ant,
51882 {"Compressed Steering Number of Beamformer Antennas", "wlan.txbf.fm.compressed.maxant",
51883 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)((0 ? (const struct _value_string*)0 : ((txbf_antenna_flags))
))
, 0x01800000,
51884 "Max antennae station can support when compressed Beamforming feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51885
51886 {&hf_ieee80211_txbf_csi_max_rows_bf,
51887 {"CSI Max Number of Rows Beamformer", "wlan.txbf.csi.maxrows",
51888 FT_UINT32, BASE_HEX, VALS(txbf_csi_max_rows_bf_flags)((0 ? (const struct _value_string*)0 : ((txbf_csi_max_rows_bf_flags
))))
, 0x06000000,
51889 "Maximum number of rows of CSI explicit feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51890
51891 {&hf_ieee80211_txbf_chan_est,
51892 {"Channel Estimation", "wlan.txbf.channelest",
51893 FT_UINT32, BASE_HEX, VALS(txbf_chan_est_flags)((0 ? (const struct _value_string*)0 : ((txbf_chan_est_flags)
)))
, 0x18000000,
51894 "Maximum number of space time streams for which channel dimensions can be simultaneously estimated", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51895
51896 {&hf_ieee80211_txbf_resrv,
51897 {"Reserved", "wlan.txbf.reserved",
51898 FT_UINT32, BASE_HEX, NULL((void*)0), 0xe0000000,
51899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51900
51901 {&hf_ieee80211_hta_cc,
51902 {"HT Control Channel", "wlan.hta.control_channel",
51903 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51905
51906 {&hf_ieee80211_hta_cap1,
51907 {"HT Additional Capabilities", "wlan.hta.capabilities",
51908 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51909 "HT Additional Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51910
51911 {&hf_ieee80211_hta_cap2,
51912 {"HT Additional Capabilities", "wlan.hta.capabilities",
51913 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51914 "HT Additional Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51915
51916 {&hf_ieee80211_hta_ext_chan_offset,
51917 {"Extension Channel Offset", "wlan.hta.capabilities.ext_chan_offset",
51918 FT_UINT16, BASE_HEX, VALS(hta_ext_chan_offset_flag)((0 ? (const struct _value_string*)0 : ((hta_ext_chan_offset_flag
))))
, 0x0003,
51919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51920
51921 {&hf_ieee80211_hta_rec_tx_width,
51922 {"Recommended Tx Channel Width", "wlan.hta.capabilities.rec_tx_width",
51923 FT_BOOLEAN, 16, TFS(&hta_rec_tx_width_flag)((0 ? (const struct true_false_string*)0 : ((&hta_rec_tx_width_flag
))))
, 0x0004,
51924 "Recommended Transmit Channel Width", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51925
51926 {&hf_ieee80211_hta_rifs_mode,
51927 {"Reduced Interframe Spacing (RIFS) Mode", "wlan.hta.capabilities.rifs_mode",
51928 FT_BOOLEAN, 16, TFS(&hta_rifs_mode_flag)((0 ? (const struct true_false_string*)0 : ((&hta_rifs_mode_flag
))))
, 0x0008,
51929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51930
51931 {&hf_ieee80211_hta_controlled_access,
51932 {"Controlled Access Only", "wlan.hta.capabilities.controlled_access",
51933 FT_BOOLEAN, 16, TFS(&hta_controlled_access_flag)((0 ? (const struct true_false_string*)0 : ((&hta_controlled_access_flag
))))
, 0x0010,
51934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51935
51936 {&hf_ieee80211_hta_service_interval,
51937 {"Service Interval Granularity", "wlan.hta.capabilities.service_interval",
51938 FT_UINT16, BASE_HEX, VALS(hta_service_interval_flag)((0 ? (const struct _value_string*)0 : ((hta_service_interval_flag
))))
, 0x00E0,
51939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51940
51941 {&hf_ieee80211_hta_operating_mode,
51942 {"Operating Mode", "wlan.hta.capabilities.operating_mode",
51943 FT_UINT16, BASE_HEX, VALS(hta_operating_mode_flag)((0 ? (const struct _value_string*)0 : ((hta_operating_mode_flag
))))
, 0x0003,
51944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51945
51946 {&hf_ieee80211_hta_non_gf_devices,
51947 {"Non Greenfield (GF) devices Present", "wlan.hta.capabilities.non_gf_devices",
51948 FT_BOOLEAN, 16, TFS(&hta_non_gf_devices_flag)((0 ? (const struct true_false_string*)0 : ((&hta_non_gf_devices_flag
))))
, 0x0004,
51949 "on Greenfield (GF) devices Present", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51950
51951 {&hf_ieee80211_hta_basic_stbc_mcs,
51952 {"Basic STB Modulation and Coding Scheme (MCS)", "wlan.hta.capabilities.basic_stbc_mcs",
51953 FT_UINT16, BASE_HEX, NULL((void*)0) , 0x007f,
51954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51955
51956 {&hf_ieee80211_hta_dual_stbc_protection,
51957 {"Dual Clear To Send (CTS) Protection", "wlan.hta.capabilities.dual_stbc_protection",
51958 FT_BOOLEAN, 16, TFS(&hta_dual_stbc_protection_flag)((0 ? (const struct true_false_string*)0 : ((&hta_dual_stbc_protection_flag
))))
, 0x0080,
51959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51960
51961 {&hf_ieee80211_hta_secondary_beacon,
51962 {"Secondary Beacon", "wlan.hta.capabilities.secondary_beacon",
51963 FT_BOOLEAN, 16, TFS(&hta_secondary_beacon_flag)((0 ? (const struct true_false_string*)0 : ((&hta_secondary_beacon_flag
))))
, 0x0100,
51964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51965
51966 {&hf_ieee80211_hta_lsig_txop_protection,
51967 {"L-SIG TXOP Protection Support", "wlan.hta.capabilities.lsig_txop_protection",
51968 FT_BOOLEAN, 16, TFS(&hta_lsig_txop_protection_flag)((0 ? (const struct true_false_string*)0 : ((&hta_lsig_txop_protection_flag
))))
, 0x0200,
51969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51970
51971 {&hf_ieee80211_hta_pco_active,
51972 {"Phased Coexistence Operation (PCO) Active", "wlan.hta.capabilities.pco_active",
51973 FT_BOOLEAN, 16, TFS(&hta_pco_active_flag)((0 ? (const struct true_false_string*)0 : ((&hta_pco_active_flag
))))
, 0x0400,
51974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51975
51976 {&hf_ieee80211_hta_pco_phase,
51977 {"Phased Coexistence Operation (PCO) Phase", "wlan.hta.capabilities.pco_phase",
51978 FT_BOOLEAN, 16, TFS(&hta_pco_phase_flag)((0 ? (const struct true_false_string*)0 : ((&hta_pco_phase_flag
))))
, 0x0800,
51979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51980
51981 {&hf_ieee80211_antsel,
51982 {"Antenna Selection (ASEL) Capabilities", "wlan.asel",
51983 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51985
51986 {&hf_ieee80211_antsel_vs,
51987 {"Antenna Selection (ASEL) Capabilities (VS)", "wlan.vs.asel",
51988 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51989 "Vendor Specific Antenna Selection (ASEL) Capabilities", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51990
51991 {&hf_ieee80211_antsel_b0,
51992 {"Antenna Selection Capable", "wlan.asel.capable",
51993 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
51994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51995
51996 {&hf_ieee80211_antsel_b1,
51997 {"Explicit CSI Feedback Based Tx ASEL", "wlan.asel.txcsi",
51998 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
51999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52000
52001 {&hf_ieee80211_antsel_b2,
52002 {"Antenna Indices Feedback Based Tx ASEL", "wlan.asel.txif",
52003 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
52004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52005
52006 {&hf_ieee80211_antsel_b3,
52007 {"Explicit CSI Feedback", "wlan.asel.csi",
52008 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
52009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52010
52011 {&hf_ieee80211_antsel_b4,
52012 {"Antenna Indices Feedback", "wlan.asel.if",
52013 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
52014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52015
52016 {&hf_ieee80211_antsel_b5,
52017 {"Rx ASEL", "wlan.asel.rx",
52018 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
52019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52020
52021 {&hf_ieee80211_antsel_b6,
52022 {"Tx Sounding PPDUs", "wlan.asel.sppdu",
52023 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52025
52026 {&hf_ieee80211_antsel_b7,
52027 {"Reserved", "wlan.asel.reserved",
52028 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
52029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52030
52031 {&hf_ieee80211_ht_operation_info_delimiter1,
52032 {"HT Operation Information Subset (1 of 3)", "wlan.ht.info.delim1",
52033 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52035
52036 {&hf_ieee80211_ht_operation_primary_channel,
52037 {"Primary Channel", "wlan.ht.info.primarychannel",
52038 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52040
52041 {&hf_ieee80211_ht_operation_info_secondary_channel_offset,
52042 {"Secondary channel offset", "wlan.ht.info.secchanoffset",
52043 FT_UINT8, BASE_HEX, VALS(ht_info_secondary_channel_offset_flags)((0 ? (const struct _value_string*)0 : ((ht_info_secondary_channel_offset_flags
))))
, 0x03,
52044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52045
52046 {&hf_ieee80211_ht_operation_info_sta_channel_width,
52047 {"Supported channel width", "wlan.ht.info.chanwidth",
52048 FT_BOOLEAN, 8, TFS(&ht_info_channel_sta_width_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_channel_sta_width_flag
))))
, 0x04,
52049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52050
52051 {&hf_ieee80211_ht_operation_info_rifs_mode,
52052 {"Reduced Interframe Spacing (RIFS)", "wlan.ht.info.rifs",
52053 FT_BOOLEAN, 8, TFS(&ht_info_rifs_mode_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_rifs_mode_flag
))))
, 0x08,
52054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52055
52056 {&hf_ieee80211_ht_operation_info_reserved_b4_b7,
52057 {"Reserved", "wlan.ht.info.reserved_b4_b7",
52058 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52059
52060 {&hf_ieee80211_ht_operation_info_delimiter2,
52061 {"HT Operation Information Subset (2 of 3)", "wlan.ht.info.delim2",
52062 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52063 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52064
52065 {&hf_ieee80211_ht_operation_info_protection,
52066 {"HT Protection", "wlan.ht.info.ht_protection",
52067 FT_UINT16, BASE_HEX, VALS(ht_info_operating_protection_mode_flags)((0 ? (const struct _value_string*)0 : ((ht_info_operating_protection_mode_flags
))))
, 0x0003,
52068 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52069
52070 {&hf_ieee80211_ht_operation_info_non_greenfield_sta_present,
52071 {"Non-greenfield STAs present", "wlan.ht.info.greenfield",
52072 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,
52073 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52074
52075 {&hf_ieee80211_ht_operation_info_reserved_b11,
52076 {"Reserved", "wlan.ht.info.reserved_b11",
52077 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52078
52079 {&hf_ieee80211_ht_operation_info_obss_non_ht_stas_present,
52080 {"OBSS non-HT STAs present", "wlan.ht.info.obssnonht",
52081 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,
52082 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52083
52084 {&hf_ieee80211_ht_operation_info_channel_center_freq_seg_2,
52085 {"Channel Center Frequency Segment 2", "wlan.ht.info.chan_center_freq_seg_2",
52086 FT_UINT16, BASE_DEC, NULL((void*)0), 0x1fe0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52087
52088 {&hf_ieee80211_ht_operation_info_reserved_b21_b23,
52089 {"Reserved", "wlan.ht.info.reserved_b21_b23",
52090 FT_UINT16, BASE_HEX, NULL((void*)0), 0xe000,
52091 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52092
52093 {&hf_ieee80211_ht_operation_info_delimiter3,
52094 {"HT Operation Information Subset (3 of 3)", "wlan.ht.info.delim3",
52095 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52096 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52097
52098 {&hf_ieee80211_ht_operation_info_reserved_b24_b29,
52099 {"Reserved", "wlan.ht.info.reserved_b24_b29",
52100 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52101
52102 {&hf_ieee80211_ht_operation_info_dual_beacon,
52103 {"Dual beacon", "wlan.ht.info.dualbeacon",
52104 FT_BOOLEAN, 16, TFS(&ht_info_dual_beacon_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_dual_beacon_flag
))))
, 0x0040,
52105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52106
52107 {&hf_ieee80211_ht_operation_info_dual_cts_protection,
52108 {"Dual Clear To Send (CTS) protection", "wlan.ht.info.dualcts",
52109 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0080,
52110 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52111
52112 {&hf_ieee80211_ht_operation_info_stbc_beacon,
52113 {"STBC Beacon", "wlan.ht.info.stbcbeacon",
52114 FT_BOOLEAN, 16, TFS(&ht_info_stbc_beacon_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_stbc_beacon_flag
))))
, 0x0100,
52115 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52116
52117 {&hf_ieee80211_ht_operation_info_reserved_b33_b39,
52118 {"Reserved", "wlan.ht.info.reserved_b33_b39",
52119 FT_UINT16, BASE_HEX, NULL((void*)0), 0xfe00,
52120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52121
52122 {&hf_ieee80211_ht_operation_mcsset_reserved,
52123 {"Basic HT-MCS Set: Reserved", "wlan.ht.info.mcsset_reserved",
52124 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
52125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52126
52127 {&hf_ieee80211_tag_ap_channel_report_operating_class,
52128 {"Operating Class", "wlan.ap_channel_report.operating_class",
52129 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52131
52132 {&hf_ieee80211_tag_ap_channel_report_channel_list,
52133 {"Channel List", "wlan.ap_channel_report.channel_list",
52134 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52136
52137 {&hf_ieee80211_tag_secondary_channel_offset,
52138 {"Secondary Channel Offset", "wlan.secchanoffset",
52139 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_secondary_channel_offset_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_secondary_channel_offset_flags
))))
, 0,
52140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52141
52142 {&hf_ieee80211_tag_bss_ap_avg_access_delay,
52143 {"AP Average Access Delay", "wlan.bss_ap_avg_access_delay",
52144 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52145 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52146
52147 {&hf_ieee80211_tag_antenna_id,
52148 {"Antenna ID", "wlan.antenna.id",
52149 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52151
52152 {&hf_ieee80211_tag_rsni,
52153 {"RSNI", "wlan.rsni",
52154 FT_UINT8, BASE_CUSTOM, CF_FUNC(rsni_base_custom)((const void *) (size_t) (rsni_base_custom)), 0x0,
52155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52156
52157 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
52158 {"Available Admission Capacity Bitmask", "wlan.bss_avb_adm_cap.bitmask",
52159 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52161
52162 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
52163 {"UP0 (bit0)", "wlan.bss_avb_adm_cap.bitmask.up0",
52164 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP00x0001,
52165 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52166
52167 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
52168 {"UP1 (bit1)", "wlan.bss_avb_adm_cap.bitmask.up1",
52169 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP10x0002,
52170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52171
52172 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
52173 {"UP2 (bit2)", "wlan.bss_avb_adm_cap.bitmask.up2",
52174 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP20x0004,
52175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52176
52177 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
52178 {"UP3 (bit3)", "wlan.bss_avb_adm_cap.bitmask.up3",
52179 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP30x0008,
52180 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52181
52182 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
52183 {"UP4 (bit4)", "wlan.bss_avb_adm_cap.bitmask.up4",
52184 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP40x0010,
52185 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52186
52187 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
52188 {"UP5 (bit5)", "wlan.bss_avb_adm_cap.bitmask.up5",
52189 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP50x0020,
52190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52191
52192 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
52193 {"UP6 (bit6)", "wlan.bss_avb_adm_cap.bitmask.up6",
52194 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP60x0040,
52195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52196
52197 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
52198 {"UP7 (bit7)", "wlan.bss_avb_adm_cap.bitmask.up7",
52199 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP70x0080,
52200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52201
52202 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
52203 {"AC0 (bit8)", "wlan.bss_avb_adm_cap.bitmask.ac0",
52204 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC00x0100,
52205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52206
52207 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
52208 {"AC1 (bit9)", "wlan.bss_avb_adm_cap.bitmask.AC1",
52209 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC10x0200,
52210 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52211
52212 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
52213 {"AC2 (bit10)", "wlan.bss_avb_adm_cap.bitmask.ac2",
52214 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC20x0400,
52215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52216
52217 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
52218 {"AC3 (bit11)", "wlan.bss_avb_adm_cap.bitmask.ac3",
52219 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC30x0800,
52220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52221
52222 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
52223 {"Reserved", "wlan.bss_avb_adm_cap.bitmask.rsv",
52224 FT_UINT16, BASE_HEX, NULL((void*)0), BSS_BITMASK_RSV0xF000,
52225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52226
52227 {&hf_ieee80211_tag_bss_avb_adm_cap_up0,
52228 {"UP0", "wlan.bss_avb_adm_cap.up0",
52229 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52231
52232 {&hf_ieee80211_tag_bss_avb_adm_cap_up1,
52233 {"UP1", "wlan.bss_avb_adm_cap.up1",
52234 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52236
52237 {&hf_ieee80211_tag_bss_avb_adm_cap_up2,
52238 {"UP2", "wlan.bss_avb_adm_cap.up2",
52239 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52241
52242 {&hf_ieee80211_tag_bss_avb_adm_cap_up3,
52243 {"UP3", "wlan.bss_avb_adm_cap.up3",
52244 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52246
52247 {&hf_ieee80211_tag_bss_avb_adm_cap_up4,
52248 {"UP4", "wlan.bss_avb_adm_cap.up4",
52249 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52250 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52251
52252 {&hf_ieee80211_tag_bss_avb_adm_cap_up5,
52253 {"UP5", "wlan.bss_avb_adm_cap.up5",
52254 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52255 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52256
52257 {&hf_ieee80211_tag_bss_avb_adm_cap_up6,
52258 {"UP6", "wlan.bss_avb_adm_cap.up6",
52259 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52260 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52261
52262 {&hf_ieee80211_tag_bss_avb_adm_cap_up7,
52263 {"UP7", "wlan.bss_avb_adm_cap.up7",
52264 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52266
52267 {&hf_ieee80211_tag_bss_avb_adm_cap_ac0,
52268 {"AC0", "wlan.bss_avb_adm_cap.ac0",
52269 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52271
52272 {&hf_ieee80211_tag_bss_avb_adm_cap_ac1,
52273 {"AC1", "wlan.bss_avb_adm_cap.ac1",
52274 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52276
52277 {&hf_ieee80211_tag_bss_avb_adm_cap_ac2,
52278 {"AC2", "wlan.bss_avb_adm_cap.ac2",
52279 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52281
52282 {&hf_ieee80211_tag_bss_avb_adm_cap_ac3,
52283 {"AC3", "wlan.bss_avb_adm_cap.ac3",
52284 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52286
52287 {&hf_ieee80211_tag_bss_avg_ac_access_delay_be,
52288 {"AC Average Access Delay for Best Effort", "wlan.bss_avg_ac_access_delay.be",
52289 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52290 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52291
52292 {&hf_ieee80211_tag_bss_avg_ac_access_delay_bk,
52293 {"AC Average Access Delay for Best Background", "wlan.bss_avg_ac_access_delay.bk",
52294 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52295 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52296
52297 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vi,
52298 {"AC Average Access Delay for Video", "wlan.bss_avg_ac_access_delay_vi",
52299 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52300 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52301
52302 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vo,
52303 {"AC Average Access Delay for Voice", "wlan.bss_avg_ac_access_delay_vo",
52304 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52306
52307
52308 /* 802.11-2012 Table 8-119-RM Enabled Capabilities definition */
52309 {&hf_ieee80211_tag_rm_enabled_capabilities,
52310 {"RM Capabilities", "wlan.rmcap",
52311 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52312 "Signals support for radio measurements in a device", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52313
52314 /* RM Enabled Capability octet 1 */
52315 {&hf_ieee80211_tag_rm_enabled_capabilities_b0,
52316 {"Link Measurement", "wlan.rmcap.b0",
52317 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52318 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52319
52320 {&hf_ieee80211_tag_rm_enabled_capabilities_b1,
52321 {"Neighbor Report", "wlan.rmcap.b1",
52322 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52323 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52324
52325 {&hf_ieee80211_tag_rm_enabled_capabilities_b2,
52326 {"Parallel Measurements", "wlan.rmcap.b2",
52327 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
52328 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52329
52330 {&hf_ieee80211_tag_rm_enabled_capabilities_b3,
52331 {"Repeated Measurements", "wlan.rmcap.b3",
52332 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52333 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52334
52335 {&hf_ieee80211_tag_rm_enabled_capabilities_b4,
52336 {"Beacon Passive Measurement", "wlan.rmcap.b4",
52337 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
52338 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52339
52340 {&hf_ieee80211_tag_rm_enabled_capabilities_b5,
52341 {"Beacon Active Measurement", "wlan.rmcap.b5",
52342 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
52343 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52344
52345 {&hf_ieee80211_tag_rm_enabled_capabilities_b6,
52346 {"Beacon Table Measurement", "wlan.rmcap.b6",
52347 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52348 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52349
52350 {&hf_ieee80211_tag_rm_enabled_capabilities_b7,
52351 {"Beacon Measurement Reporting Conditions", "wlan.rmcap.b7",
52352 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
52353 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52354
52355 /* RM Enabled Capability octet 2 */
52356 {&hf_ieee80211_tag_rm_enabled_capabilities_b8,
52357 {"Frame Measurement", "wlan.rmcap.b8",
52358 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52359 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52360
52361 {&hf_ieee80211_tag_rm_enabled_capabilities_b9,
52362 {"Channel Load Measurement", "wlan.rmcap.b9",
52363 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52364 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52365
52366 {&hf_ieee80211_tag_rm_enabled_capabilities_b10,
52367 {"Noise Histogram Measurement", "wlan.rmcap.b10",
52368 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
52369 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52370
52371 {&hf_ieee80211_tag_rm_enabled_capabilities_b11,
52372 {"Statistics Measurement", "wlan.rmcap.b11",
52373 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52374 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52375
52376 {&hf_ieee80211_tag_rm_enabled_capabilities_b12,
52377 {"LCI Measurement", "wlan.rmcap.b12",
52378 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
52379 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52380
52381 {&hf_ieee80211_tag_rm_enabled_capabilities_b13,
52382 {"LCI Azimuth capability", "wlan.rmcap.b13",
52383 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
52384 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52385
52386 {&hf_ieee80211_tag_rm_enabled_capabilities_b14,
52387 {"Transmit Stream/Category Measurement", "wlan.rmcap.b14",
52388 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52389 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52390
52391 {&hf_ieee80211_tag_rm_enabled_capabilities_b15,
52392 {"Triggered Transmit Stream/Category Measurement", "wlan.rmcap.b15",
52393 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
52394 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52395
52396 /* RM Enabled Capability octet 3 */
52397 {&hf_ieee80211_tag_rm_enabled_capabilities_b16,
52398 {"AP Channel Report capability", "wlan.rmcap.b16",
52399 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52401
52402 {&hf_ieee80211_tag_rm_enabled_capabilities_b17,
52403 {"RM MIB capability", "wlan.rmcap.b17",
52404 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52406
52407 {&hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
52408 {"Operating Channel Max Measurement Duration", "wlan.rmcap.b18to20",
52409 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C,
52410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52411
52412 {&hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
52413 {"Nonoperating Channel Max Measurement Duration", "wlan.rmcap.b21to23",
52414 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0,
52415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52416
52417 /* RM Enabled Capability octet 4 */
52418 {&hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
52419 {"Measurement Pilotcapability", "wlan.rmcap.b24to26",
52420 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
52421 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52422
52423 {&hf_ieee80211_tag_rm_enabled_capabilities_b27,
52424 {"Measurement Pilot Transmission Information", "wlan.rmcap.b27",
52425 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52426 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52427
52428 {&hf_ieee80211_tag_rm_enabled_capabilities_b28,
52429 {"Neighbor Report TSF Offset", "wlan.rmcap.b28",
52430 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
52431 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52432
52433 {&hf_ieee80211_tag_rm_enabled_capabilities_b29,
52434 {"RCPI Measurement capability", "wlan.rmcap.b29",
52435 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
52436 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52437
52438 {&hf_ieee80211_tag_rm_enabled_capabilities_b30,
52439 {"RSNI Measurement capability", "wlan.rmcap.b30",
52440 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52441 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52442
52443 {&hf_ieee80211_tag_rm_enabled_capabilities_b31,
52444 {"BSS Average Access Delay capability", "wlan.rmcap.b31",
52445 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
52446 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52447
52448 /* RM Enabled Capability octet 5 */
52449 {&hf_ieee80211_tag_rm_enabled_capabilities_b32,
52450 {"BSS Available Admission Capacity capability", "wlan.rmcap.b32",
52451 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52453
52454 {&hf_ieee80211_tag_rm_enabled_capabilities_b33,
52455 {"Antenna capability", "wlan.rmcap.b33",
52456 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52458
52459 {&hf_ieee80211_tag_rm_enabled_capabilities_b34,
52460 {"FTM Range Report Capability", "wlan.rmcap.b34",
52461 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
52462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52463
52464 {&hf_ieee80211_tag_rm_enabled_capabilities_b35,
52465 {"Civic Location Measurement Capability", "wlan.rmcap.b35",
52466 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52468
52469 {&hf_ieee80211_tag_rm_enabled_capabilities_o5,
52470 {"Reserved", "wlan.rmcap.o5",
52471 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
52472 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52473
52474 {&hf_ieee80211_tag_rcpi,
52475 {"RCPI", "wlan.rcpi",
52476 FT_UINT8, BASE_CUSTOM, CF_FUNC(rcpi_and_power_level_custom)((const void *) (size_t) (rcpi_and_power_level_custom)), 0,
52477 "Received channel power indicator", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52478
52479 /* Multiple BSSID */
52480 {&hf_ieee80211_tag_multiple_bssid,
52481 {"Max BSSID Indicator", "wlan.multiple_bssid",
52482 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52483 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52484
52485 {&hf_ieee80211_tag_multiple_bssid_subelem_id,
52486 {"Subelement ID", "wlan.multiple_bssid.subelem.id",
52487 FT_UINT8, BASE_DEC, VALS(multiple_bssid_subelem_ids)((0 ? (const struct _value_string*)0 : ((multiple_bssid_subelem_ids
))))
, 0x0,
52488 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52489
52490 {&hf_ieee80211_tag_multiple_bssid_subelem_len,
52491 {"Length", "wlan.multiple_bssid.subelem.len",
52492 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52493 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52494
52495 {&hf_ieee80211_tag_multiple_bssid_subelem_reserved,
52496 {"Reserved", "wlan.multiple_bssid.subelem.reserved",
52497 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52498 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52499
52500 {&hf_ieee80211_tag_multiple_bssid_subelem_nontrans_profile,
52501 {"Nontransmitted Profile", "wlan.multiple_bssid.subelem.nontrans_profile",
52502 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52503 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52504
52505 /* 20/40 BSS Coexistence */
52506 {&hf_ieee80211_tag_20_40_bc,
52507 {"20/40 BSS Coexistence Flags", "wlan.20_40_bc",
52508 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
52509 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52510
52511 {&hf_ieee80211_tag_20_40_bc_information_request,
52512 {"Information Request", "wlan.20_40_bc.information_request",
52513 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
52514 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52515
52516 {&hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant,
52517 {"Forty MHz Intolerant", "wlan.20_40_bc.forty_mhz_intolerant",
52518 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
52519 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52520
52521 {&hf_ieee80211_tag_20_40_bc_20_mhz_bss_width_request,
52522 {"20 MHz BSS Width Request", "wlan.20_40_bc.20_mhz_bss_width_request",
52523 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
52524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52525
52526 {&hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request,
52527 {"OBSS Scanning Exemption Request", "wlan.20_40_bc.obss_scanning_exemption_request",
52528 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
52529 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52530
52531 {&hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant,
52532 {"OBSS Scanning Exemption Grant", "wlan.20_40_bc.obss_scanning_exemption_grant",
52533 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
52534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52535
52536 {&hf_ieee80211_tag_20_40_bc_reserved,
52537 {"Reserved", "wlan.20_40_bc.reserved",
52538 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
52539 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52540
52541 {&hf_ieee80211_tag_intolerant_operating_class,
52542 {"Intolerant Operating Class", "wlan.tag.intolerant.operating_class",
52543 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52544
52545 {&hf_ieee80211_tag_intolerant_channel_list,
52546 {"Intolerant Channel List", "wlan.tag.intolerant.channel_list",
52547 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52548
52549 {&hf_ieee80211_tag_intolerant_channel,
52550 {"Intolerant Channel", "wlan.tag.intolerant.channel",
52551 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52552
52553 {&hf_ieee80211_tag_power_constraint_local,
52554 {"Local Power Constraint", "wlan.powercon.local",
52555 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52556 "Value that allows the mitigation requirements to be satisfied in the current channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52557
52558 {&hf_ieee80211_tag_power_capability_min,
52559 {"Minimum Transmit Power", "wlan.powercap.min",
52560 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
52561 "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) }},
52562
52563 {&hf_ieee80211_tag_power_capability_max,
52564 {"Maximum Transmit Power", "wlan.powercap.max",
52565 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
52566 "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) }},
52567
52568 {&hf_ieee80211_tag_tpc_report_trsmt_pow,
52569 {"Transmit Power", "wlan.tpcrep.trsmt_pow",
52570 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
52571 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52572
52573 {&hf_ieee80211_tag_tpc_report_link_mrg,
52574 {"Link Margin", "wlan.tpcrep.link_mrg",
52575 FT_INT8, BASE_DEC, NULL((void*)0), 0,
52576 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52577
52578 {&hf_ieee80211_tag_tpc_report_reserved,
52579 {"Reserved", "wlan.tpcrep.reserved",
52580 FT_INT8, BASE_DEC, NULL((void*)0), 0,
52581 "TPC Link Margin field is reserved in a Beacon or Probe Response frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52582
52583 {&hf_ieee80211_tag_supported_channels,
52584 {"Supported Channels Set", "wlan.supchan",
52585 FT_NONE, BASE_NONE, NULL((void*)0), 0,
52586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52587
52588 {&hf_ieee80211_tag_supported_channels_first,
52589 {"First Supported Channel", "wlan.supchan.first",
52590 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52592
52593 {&hf_ieee80211_tag_supported_channels_range,
52594 {"Supported Channel Range", "wlan.supchan.range",
52595 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52597
52598 {&hf_ieee80211_csa_channel_switch_mode,
52599 {"Channel Switch Mode", "wlan.csa.channel_switch_mode",
52600 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52601 "Indicates any restrictions on transmission until a channel switch", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52602
52603 {&hf_ieee80211_csa_new_channel_number,
52604 {"New Channel Number", "wlan.csa.new_channel_number",
52605 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52606 "Set to the number of the channel to which the STA is moving", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52607
52608 {&hf_ieee80211_csa_channel_switch_count,
52609 {"Channel Switch Count", "wlan.csa.channel_switch.count",
52610 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52611 "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) }},
52612
52613 {&hf_ieee80211_mesh_channel_switch_ttl,
52614 {"Mesh Channel Switch TTL", "wlan.csa.mesh_channel_switch.ttl",
52615 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52616 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52617
52618 {&hf_ieee80211_mesh_channel_switch_flag,
52619 {"Mesh Channel Switch Flag", "wlan.csa.mesh_channel_switch.flag",
52620 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52621 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52622
52623 {&hf_ieee80211_mesh_chswitch_flag_txrestrict,
52624 {"CSA Tx Restrict", "wlan.csa.mesh_channel_switch.flag.txrestrict",
52625 FT_BOOLEAN, 16, TFS(&csa_txrestrict_flags)((0 ? (const struct true_false_string*)0 : ((&csa_txrestrict_flags
))))
, 0x0001,
52626 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52627
52628 {&hf_ieee80211_mesh_chswitch_flag_initiator,
52629 {"CSA Initiator", "wlan.csa.mesh_channel_switch.flag.initiator",
52630 FT_BOOLEAN, 16, TFS(&csa_initiator_flags)((0 ? (const struct true_false_string*)0 : ((&csa_initiator_flags
))))
, 0x0002,
52631 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52632
52633 {&hf_ieee80211_mesh_channel_switch_reason_code,
52634 {"Mesh Channel Switch Reason Code", "wlan.csa.mesh_channel_switch.reason_code",
52635 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_reason_code_ext, 0,
52636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52637
52638 {&hf_ieee80211_mesh_channel_switch_precedence_value,
52639 {"Mesh Channel Switch Precedence Value", "wlan.csa.mesh_channel_switch.pre_value",
52640 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
52641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52642
52643 {&hf_ieee80211_mesh_awake_window,
52644 {"Mesh Awake Window", "wlan.mesh.mesh_awake_window",
52645 FT_UINT16, BASE_CUSTOM, CF_FUNC(mesh_active_window_base_custom)((const void *) (size_t) (mesh_active_window_base_custom)), 0,
52646 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52647
52648 {&hf_ieee80211_tag_measure_request_token,
52649 {"Measurement Token", "wlan.measure.req.token",
52650 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52651 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52652
52653 {&hf_ieee80211_tag_measure_request_mode,
52654 {"Measurement Request Mode", "wlan.measure.req.mode",
52655 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52656 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52657
52658 {&hf_ieee80211_tag_measure_request_mode_parallel,
52659 {"Parallel", "wlan.measure.req.reqmode.parallel",
52660 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
52661 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52662
52663 {&hf_ieee80211_tag_measure_request_mode_enable,
52664 {"Measurement Request Mode Field", "wlan.measure.req.reqmode.enable",
52665 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52666 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52667
52668 {&hf_ieee80211_tag_measure_request_mode_request,
52669 {"Measurement Reports", "wlan.measure.req.reqmode.request",
52670 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)((0 ? (const struct true_false_string*)0 : ((&tfs_accepted_not_accepted
))))
, 0x04,
52671 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52672
52673 {&hf_ieee80211_tag_measure_request_mode_report,
52674 {"Autonomous Measurement Reports", "wlan.measure.req.reqmode.report",
52675 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)((0 ? (const struct true_false_string*)0 : ((&tfs_accepted_not_accepted
))))
, 0x08,
52676 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52677
52678 {&hf_ieee80211_tag_measure_request_mode_duration_mandatory,
52679 {"Duration Mandatory", "wlan.measure.req.reqmode.duration_mandatory",
52680 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)((0 ? (const struct true_false_string*)0 : ((&tfs_accepted_not_accepted
))))
, 0x10,
52681 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52682
52683 {&hf_ieee80211_tag_measure_request_mode_reserved,
52684 {"Reserved", "wlan.measure.req.reqmode.reserved",
52685 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
52686 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52687
52688 {&hf_ieee80211_tag_measure_request_type,
52689 {"Measurement Request Type", "wlan.measure.req.reqtype",
52690 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_tag_measure_request_type_flags_ext, 0x00,
52691 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52692
52693 {&hf_ieee80211_tag_measure_request_channel_number,
52694 {"Measurement Channel Number", "wlan.measure.req.channelnumber",
52695 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom)((const void *) (size_t) (channel_number_custom)), 0,
52696 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52697
52698 {&hf_ieee80211_tag_measure_request_start_time,
52699 {"Measurement Start Time", "wlan.measure.req.starttime",
52700 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
52701 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52702
52703 {&hf_ieee80211_tag_measure_request_duration,
52704 {"Measurement Duration", "wlan.measure.req.duration",
52705 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52706 "in TU (1 TU = 1024 us)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52707
52708 {&hf_ieee80211_tag_measure_request_operating_class,
52709 {"Operating Class", "wlan.measure.req.operatingclass",
52710 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52711 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52712
52713 {&hf_ieee80211_tag_measure_request_randomization_interval,
52714 {"Randomization Interval", "wlan.measure.req.randint",
52715 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52716 "in TU (1 TU = 1024 us)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52717
52718 {&hf_ieee80211_tag_measure_request_measurement_mode,
52719 {"Measurement Mode", "wlan.measure.req.measurementmode",
52720 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,
52721 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52722
52723 {&hf_ieee80211_tag_measure_request_bssid,
52724 {"BSSID", "wlan.measure.req.bssid",
52725 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
52726 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52727
52728 {&hf_ieee80211_tag_measure_request_subelement_length,
52729 {"Length", "wlan.measure.req.sub.length",
52730 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52731 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52732
52733 {&hf_ieee80211_tag_measure_request_beacon_sub_id,
52734 {"SubElement ID", "wlan.measure.req.beacon.sub.id",
52735 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,
52736 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52737
52738 {&hf_ieee80211_tag_measure_request_beacon_sub_ssid,
52739 {"SSID", "wlan.measure.req.beacon.sub.ssid",
52740 FT_STRING, BASE_NONE, NULL((void*)0), 0,
52741 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52742
52743 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition,
52744 {"Reporting Condition", "wlan.measure.req.beacon.sub.bri.repcond",
52745 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,
52746 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52747
52748 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset,
52749 {"Threshold/Offset", "wlan.measure.req.beacon.sub.bri.threshold_offset",
52750 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52751 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52752
52753 {&hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail,
52754 {"Reporting Detail", "wlan.measure.req.beacon.sub.bri.reporting_detail",
52755 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,
52756 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52757
52758 {&hf_ieee80211_tag_measure_request_beacon_sub_last_report_indication_request,
52759 {"Request Indication", "wlan.measure.req.beacon.sub.last_report_ind_req",
52760 FT_BOOLEAN, BASE_NONE, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0,
52761 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52762
52763 {&hf_ieee80211_tag_measure_request_beacon_unknown,
52764 {"Unknown Data", "wlan.measure.req.beacon.unknown",
52765 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52766 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52767
52768 {&hf_ieee80211_tag_measure_request_channel_load_sub_id,
52769 {"SubElement ID", "wlan.measure.req.channel_load.sub.id",
52770 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,
52771 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52772
52773 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition,
52774 {"Reporting Condition", "wlan.measure.req.channel_load.sub.repcond",
52775 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,
52776 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52777
52778 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref,
52779 {"Reference Value", "wlan.measure.req.channel_load.sub.ref",
52780 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52781 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52782
52783
52784 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_id,
52785 {"SubElement ID", "wlan.measure.req.noise_histogram.sub.id",
52786 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,
52787 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52788
52789 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition,
52790 {"Reporting Condition", "wlan.measure.reqnoise_histogram.sub.repcond",
52791 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,
52792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52793
52794 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref,
52795 {"ANPI Reference Value", "wlan.measure.req.noise_histogram.sub.anpiref",
52796 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52798
52799
52800 {&hf_ieee80211_tag_measure_request_frame_request_type,
52801 {"Frame Request Type", "wlan.measure.req.frame_request_type",
52802 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52803 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52804
52805 {&hf_ieee80211_tag_measure_request_mac_address,
52806 {"MAC Address", "wlan.measure.req.mac_address",
52807 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52808 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52809
52810 {&hf_ieee80211_tag_measure_request_peer_mac_address,
52811 {"Peer MAC Address", "wlan.measure.req.peer_mac_address",
52812 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52813 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52814
52815 {&hf_ieee80211_tag_measure_request_group_id,
52816 {"Group ID", "wlan.measure.req.groupid",
52817 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_tag_measure_request_group_id_flags_ext, 0,
52818 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52819
52820 {&hf_ieee80211_tag_measure_request_location_subject,
52821 {"Location Subject", "wlan.measure.req.location_subject",
52822 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_location_subject)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_location_subject
))))
, 0,
52823 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52824
52825 {&hf_ieee80211_tag_measure_request_civic_location_type,
52826 {"Civic Location Type", "wlan.measure.req.location_type",
52827 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,
52828 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52829
52830 {&hf_ieee80211_tag_measure_request_location_service_interval_units,
52831 {"Location Service Interval Units", "wlan.measure.req.location_service_interval_units",
52832 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52833 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52834
52835 {&hf_ieee80211_tag_measure_request_location_service_interval,
52836 {"Location Service Interval", "wlan.measure.req.location_service_interval",
52837 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
52838 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52839
52840 {&hf_ieee80211_tag_measure_request_unknown,
52841 {"Unknown Data", "wlan.measure.req.unknown",
52842 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52843 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52844
52845 {&hf_ieee80211_tag_measure_report_measurement_token,
52846 {"Measurement Token", "wlan.measure.rep.token",
52847 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52848 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52849
52850 {&hf_ieee80211_tag_measure_report_mode,
52851 {"Measurement Report Mode", "wlan.measure.rep.mode",
52852 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52853 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52854
52855 {&hf_ieee80211_tag_measure_report_mode_late,
52856 {"Late", "wlan.measure.rep.repmode.late",
52857 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x01,
52858 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52859
52860 {&hf_ieee80211_tag_measure_report_mode_incapable,
52861 {"Incapable", "wlan.measure.rep.repmode.incapable",
52862 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x02,
52863 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52864
52865 {&hf_ieee80211_tag_measure_report_mode_refused,
52866 {"Refused", "wlan.measure.rep.repmode.refused",
52867 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x04,
52868 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52869
52870 {&hf_ieee80211_tag_measure_report_mode_reserved,
52871 {"Reserved", "wlan.measure.rep.repmode.reserved",
52872 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf8,
52873 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52874
52875 {&hf_ieee80211_tag_measure_report_type,
52876 {"Measurement Report Type", "wlan.measure.rep.reptype",
52877 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_tag_measure_report_type_flags_ext, 0x00,
52878 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52879
52880 {&hf_ieee80211_tag_measure_report_channel_number,
52881 {"Measurement Channel Number", "wlan.measure.rep.channelnumber",
52882 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom)((const void *) (size_t) (channel_number_custom)), 0,
52883 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52884
52885 {&hf_ieee80211_tag_measure_report_start_time,
52886 {"Measurement Start Time", "wlan.measure.rep.starttime",
52887 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
52888 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52889
52890 {&hf_ieee80211_tag_measure_report_duration,
52891 {"Measurement Duration", "wlan.measure.rep.duration",
52892 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52893 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52894
52895 {&hf_ieee80211_tag_measure_report_beacon_unknown,
52896 {"Unknown Data", "wlan.measure.rep.beacon.unknown",
52897 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52898 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52899
52900 {&hf_ieee80211_tag_measure_reported_frame_frag_id,
52901 {"Fragment ID", "wlan.measure.rep.beacon.frag_id",
52902 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52903 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
52904
52905 {&hf_ieee80211_tag_measure_reported_frame_frag_rep_id,
52906 {"Beacon Report ID", "wlan.measure.rep.beacon.frag_id.report_id",
52907 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00ff,
52908 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
52909
52910 {&hf_ieee80211_tag_measure_reported_frame_frag_number,
52911 {"Fragment ID Number", "wlan.measure.rep.beacon.frag_id.number",
52912 FT_UINT16, BASE_HEX, NULL((void*)0), 0x7f00,
52913 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
52914
52915 {&hf_ieee80211_tag_measure_reported_frame_frag_more,
52916 {"More Frame Body Fragments", "wlan.measure.rep.beacon.frag_id.more",
52917 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000,
52918 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
52919
52920 {&hf_ieee80211_tag_measure_cca_busy_fraction,
52921 {"CCA Busy Fraction", "wlan.measure.rep.ccabusy",
52922 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52923 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52924
52925 {&hf_ieee80211_tag_measure_basic_map_field,
52926 {"Map Field", "wlan.measure.rep.mapfield",
52927 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52928 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52929
52930 {&hf_ieee80211_tag_measure_map_field_bss,
52931 {"BSS", "wlan.measure.rep.repmode.mapfield.bss",
52932 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,
52933 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52934
52935 {&hf_ieee80211_tag_measure_map_field_ofdm,
52936 {"Orthogonal Frequency Division Multiplexing (OFDM) Preamble", "wlan.measure.rep.repmode.mapfield.ofdm_preamble",
52937 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)((0 ? (const struct true_false_string*)0 : ((&tfs_detected_not_detected
))))
, 0x02,
52938 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52939
52940 {&hf_ieee80211_tag_measure_map_field_unident_signal,
52941 {"Unidentified Signal", "wlan.measure.rep.repmode.mapfield.unidentsig",
52942 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)((0 ? (const struct true_false_string*)0 : ((&tfs_detected_not_detected
))))
, 0x04,
52943 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52944
52945 {&hf_ieee80211_tag_measure_map_field_radar,
52946 {"Radar", "wlan.measure.rep.repmode.mapfield.radar",
52947 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)((0 ? (const struct true_false_string*)0 : ((&tfs_detected_not_detected
))))
, 0x08,
52948 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52949
52950 {&hf_ieee80211_tag_measure_map_field_unmeasured,
52951 {"Unmeasured", "wlan.measure.rep.repmode.mapfield.unmeasured",
52952 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
52953 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52954
52955 {&hf_ieee80211_tag_measure_map_field_reserved,
52956 {"Reserved", "wlan.measure.rep.repmode.mapfield.reserved",
52957 FT_UINT8, BASE_HEX, NULL((void*)0), 0xe0,
52958 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52959
52960 {&hf_ieee80211_tag_measure_rpi_histogram_report,
52961 {"Receive Power Indicator (RPI) Histogram Report", "wlan.measure.rep.rpi.histogram_report",
52962 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52963 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52964
52965 {&hf_ieee80211_tag_measure_rpi_histogram_report_0,
52966 {"RPI 0 Density", "wlan.measure.rep.rpi.rpi0density",
52967 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52968 "Receive Power Indicator (RPI) 0 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52969
52970 {&hf_ieee80211_tag_measure_rpi_histogram_report_1,
52971 {"RPI 1 Density", "wlan.measure.rep.rpi.rpi1density",
52972 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52973 "Receive Power Indicator (RPI) 1 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52974
52975 {&hf_ieee80211_tag_measure_rpi_histogram_report_2,
52976 {"RPI 2 Density", "wlan.measure.rep.rpi.rpi2density",
52977 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52978 "Receive Power Indicator (RPI) 2 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52979
52980 {&hf_ieee80211_tag_measure_rpi_histogram_report_3,
52981 {"RPI 3 Density", "wlan.measure.rep.rpi.rpi3density",
52982 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52983 "Receive Power Indicator (RPI) 3 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52984
52985 {&hf_ieee80211_tag_measure_rpi_histogram_report_4,
52986 {"RPI 4 Density", "wlan.measure.rep.rpi.rpi4density",
52987 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52988 "Receive Power Indicator (RPI) 4 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52989
52990 {&hf_ieee80211_tag_measure_rpi_histogram_report_5,
52991 {"RPI 5 Density", "wlan.measure.rep.rpi.rpi5density",
52992 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52993 "Receive Power Indicator (RPI) 5 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52994
52995 {&hf_ieee80211_tag_measure_rpi_histogram_report_6,
52996 {"RPI 6 Density", "wlan.measure.rep.rpi.rpi6density",
52997 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52998 "Receive Power Indicator (RPI) 6 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52999
53000 {&hf_ieee80211_tag_measure_rpi_histogram_report_7,
53001 {"RPI 7 Density", "wlan.measure.rep.rpi.rpi7density",
53002 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53003 "Receive Power Indicator (RPI) 7 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53004
53005 {&hf_ieee80211_tag_measure_report_operating_class,
53006 {"Operating Class", "wlan.measure.rep.operatingclass",
53007 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53008 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53009
53010 {&hf_ieee80211_tag_measure_report_channel_load,
53011 {"Channel Load", "wlan.measure.rep.chanload",
53012 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53013 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53014
53015 {&hf_ieee80211_tag_measure_report_frame_info,
53016 {"Reported Frame Information", "wlan.measure.rep.frameinfo",
53017 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53018 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53019
53020 {&hf_ieee80211_tag_measure_report_frame_info_phy_type,
53021 {"Condensed PHY", "wlan.measure.rep.frameinfo.phytype",
53022 FT_UINT8, BASE_HEX, NULL((void*)0), 0x7F,
53023 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53024
53025 {&hf_ieee80211_tag_measure_report_frame_info_frame_type,
53026 {"Reported Frame Type", "wlan.measure.rep.frameinfo.frametype",
53027 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,
53028 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53029
53030 {&hf_ieee80211_tag_measure_report_rcpi,
53031 {"Received Channel Power Indicator (RCPI)", "wlan.measure.rep.rcpi",
53032 FT_UINT8, BASE_CUSTOM, CF_FUNC(rcpi_and_power_level_custom)((const void *) (size_t) (rcpi_and_power_level_custom)), 0,
53033 "in dBm", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53034
53035 {&hf_ieee80211_tag_measure_report_rsni,
53036 {"Received Signal to Noise Indicator (RSNI)", "wlan.measure.rep.rsni",
53037 FT_UINT8, BASE_CUSTOM, CF_FUNC(rsni_base_custom)((const void *) (size_t) (rsni_base_custom)), 0,
53038 "in dB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53039
53040 {&hf_ieee80211_tag_measure_report_bssid,
53041 {"BSSID Being Reported", "wlan.measure.rep.bssid",
53042 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
53043 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53044
53045 {&hf_ieee80211_tag_measure_report_ant_id,
53046 {"Antenna ID", "wlan.measure.rep.antid",
53047 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53048 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53049
53050 {&hf_ieee80211_tag_measure_report_anpi,
53051 {"ANPI", "wlan.measure.rep.anpi",
53052 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53053 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53054
53055 {&hf_ieee80211_tag_measure_report_ipi_density_0,
53056 {"IPI Density 0", "wlan.measure.rep.ipi_density0",
53057 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53058 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53059
53060 {&hf_ieee80211_tag_measure_report_ipi_density_1,
53061 {"IPI Density 1", "wlan.measure.rep.ipi_density1",
53062 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53063 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53064
53065 {&hf_ieee80211_tag_measure_report_ipi_density_2,
53066 {"IPI Density 2", "wlan.measure.rep.ipi_density2",
53067 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53068 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53069
53070 {&hf_ieee80211_tag_measure_report_ipi_density_3,
53071 {"IPI Density 3", "wlan.measure.rep.ipi_density3",
53072 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53073 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53074
53075 {&hf_ieee80211_tag_measure_report_ipi_density_4,
53076 {"IPI Density 4", "wlan.measure.rep.ipi_density4",
53077 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53078 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53079
53080 {&hf_ieee80211_tag_measure_report_ipi_density_5,
53081 {"IPI Density 5", "wlan.measure.rep.ipi_density5",
53082 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53083 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53084
53085 {&hf_ieee80211_tag_measure_report_ipi_density_6,
53086 {"IPI Density 6", "wlan.measure.rep.ipi_density6",
53087 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53088 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53089
53090 {&hf_ieee80211_tag_measure_report_ipi_density_7,
53091 {"IPI Density 7", "wlan.measure.rep.ipi_density7",
53092 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53093 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53094
53095 {&hf_ieee80211_tag_measure_report_ipi_density_8,
53096 {"IPI Density 8", "wlan.measure.rep.ipi_density8",
53097 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53098 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53099
53100 {&hf_ieee80211_tag_measure_report_ipi_density_9,
53101 {"IPI Density 9", "wlan.measure.rep.ipi_density9",
53102 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53103 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53104
53105 {&hf_ieee80211_tag_measure_report_ipi_density_10,
53106 {"IPI Density 10", "wlan.measure.rep.ipi_density10",
53107 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53108 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53109
53110 {&hf_ieee80211_tag_measure_report_parent_tsf,
53111 {"Parent Timing Synchronization Function (TSF)", "wlan.measure.rep.parenttsf",
53112 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
53113 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53114
53115 {&hf_ieee80211_tag_measure_report_subelement_length,
53116 {"Length", "wlan.measure.rep.sub.length",
53117 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53118 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53119
53120 {&hf_ieee80211_tag_measure_report_beacon_sub_id,
53121 {"SubElement ID", "wlan.measure.rep.beacon.sub.id",
53122 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,
53123 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53124
53125 {&hf_ieee80211_tag_measure_report_unknown,
53126 {"Unknown Data", "wlan.measure.rep.unknown",
53127 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53128 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53129
53130 {&hf_ieee80211_tag_measure_report_beacon_sub_last_report_indication,
53131 {"Last Report", "wlan.measure.rep.beacon.sub.last_report",
53132 FT_BOOLEAN, BASE_NONE, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0,
53133 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53134
53135 {&hf_ieee80211_tag_measure_report_lci_sub_id,
53136 {"SubElement ID", "wlan.measure.rep.lci.sub.id",
53137 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,
53138 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53139
53140 {&hf_ieee80211_tag_measure_report_lci_lci,
53141 {"LCI", "wlan.measure.rep.lci.lci",
53142 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53143 "Location Configuration Information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53144
53145 {&hf_ieee80211_tag_measure_report_lci_z_sta_floor_info,
53146 {"STA Floor Info", "wlan.measure.rep.lci.z.sta_floor_info",
53147 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
53148 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53149
53150 {&hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_expected_to_move,
53151 {"Expected To Move", "wlan.measure.rep.lci.z.sta_floor_info.expected_to_move",
53152 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
53153 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53154
53155 {&hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_sta_floor_number,
53156 {"STA Floor Number", "wlan.measure.rep.lci.z.sta_floor_info.sta_floor_number",
53157 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFFC,
53158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53159
53160 {&hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor,
53161 {"STA Height Above Floor", "wlan.measure.rep.lci.z.sta_height_above_floor",
53162 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
53163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53164
53165 {&hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor_uncertainty,
53166 {"STA Height Above Floor Uncertainty", "wlan.measure.rep.lci.z.sta_height_above_floor_uncertainty",
53167 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
53168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53169
53170 {&hf_ieee80211_tag_measure_report_lci_urp,
53171 {"Usage Rules/Policy Parameters", "wlan.measure.rep.lci.urp",
53172 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
53173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53174
53175 {&hf_ieee80211_tag_measure_report_lci_urp_retransmission_allowed,
53176 {"Retransmission Allowed", "wlan.measure.rep.lci.urp.retransmission_allowed",
53177 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53178 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53179
53180 {&hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative_present,
53181 {"Retention Expires Relative Present", "wlan.measure.rep.lci.urp.retention_expires_relative_present",
53182 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53184
53185 {&hf_ieee80211_tag_measure_report_lci_urp_sta_location_policy,
53186 {"STA Location Policy", "wlan.measure.rep.lci.urp.sta_location_policy",
53187 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53188 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53189
53190 {&hf_ieee80211_tag_measure_report_lci_urp_reserved,
53191 {"Reserved", "wlan.measure.rep.lci.urp.reserved",
53192 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
53193 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53194
53195 {&hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative,
53196 {"Retention Expires Relative", "wlan.measure.rep.lci.urp.retention_expires_relative",
53197 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
53198 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53199
53200 {&hf_ieee80211_tag_measure_report_lci_unknown,
53201 {"Unknown Data", "wlan.measure.rep.lci.unknown",
53202 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53203 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53204
53205 {&hf_ieee80211_tag_measure_report_civic_location_type,
53206 {"Civic Location Type", "wlan.measure.rep.location_subject",
53207 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,
53208 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53209
53210 {&hf_ieee80211_tag_measure_report_civic_sub_id,
53211 {"SubElement ID", "wlan.measure.rep.civic.sub.id",
53212 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,
53213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53214
53215 {&hf_ieee80211_tag_measure_report_location_civic_country,
53216 {"Country", "wlan.measure.rep.civic.sub.country",
53217 FT_STRING, BASE_NONE, NULL((void*)0), 0,
53218 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53219
53220 {&hf_ieee80211_tag_measure_report_location_civic_type,
53221 {"Type", "wlan.measure.rep.civic.sub.type",
53222 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53223 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53224
53225 {&hf_ieee80211_tag_measure_report_location_civic_length,
53226 {"Length", "wlan.measure.rep.civic.sub.length",
53227 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53228 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53229
53230 {&hf_ieee80211_tag_measure_report_location_civic,
53231 {"Location Civic", "wlan.measure.rep.civic.sub.location_civic",
53232 FT_STRING, BASE_NONE, NULL((void*)0), 0,
53233 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53234
53235 {&hf_ieee80211_tag_quiet_count,
53236 {"Count", "wlan.quiet.count",
53237 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53238 "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) }},
53239
53240 {&hf_ieee80211_tag_quiet_period,
53241 {"Period", "wlan.quiet.period",
53242 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53243 "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) }},
53244
53245 {&hf_ieee80211_tag_quiet_duration,
53246 {"Duration", "wlan.quiet.duration",
53247 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53248 "Set to the duration of the quiet interval", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53249
53250 {&hf_ieee80211_tag_quiet_offset,
53251 {"Offset", "wlan.quiet.offset",
53252 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53253 "Set to the offset of the start of the quiet interval from the TBTT", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53254
53255 {&hf_ieee80211_tag_dfs_owner,
53256 {"Owner", "wlan.dfs.owner",
53257 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
53258 "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) }},
53259
53260 {&hf_ieee80211_tag_dfs_recovery_interval,
53261 {"Recovery Interval", "wlan.dfs.recovery_interval",
53262 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53263 "Indicates the time interval that shall be used for DFS owner recovery", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53264
53265 {&hf_ieee80211_tag_dfs_channel_map,
53266 {"Channel Map", "wlan.dfs.channel_map",
53267 FT_NONE, BASE_NONE, NULL((void*)0), 0,
53268 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53269
53270 {&hf_ieee80211_tag_dfs_channel_number,
53271 {"Channel Number", "wlan.dfs.channel_number",
53272 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53273 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53274
53275 {&hf_ieee80211_tag_dfs_map,
53276 {"Map", "wlan.dfs.map",
53277 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53278 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53279
53280 {&hf_ieee80211_tag_erp_info,
53281 {"ERP Information", "wlan.erp_info",
53282 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53283 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53284
53285 {&hf_ieee80211_tag_erp_info_erp_present,
53286 {"Non ERP Present", "wlan.erp_info.erp_present",
53287 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
53288 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53289
53290 {&hf_ieee80211_tag_erp_info_use_protection,
53291 {"Use Protection", "wlan.erp_info.use_protection",
53292 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
53293 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53294
53295 {&hf_ieee80211_tag_erp_info_barker_preamble_mode,
53296 {"Barker Preamble Mode", "wlan.erp_info.barker_preamble_mode",
53297 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
53298 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53299
53300 {&hf_ieee80211_tag_erp_info_reserved,
53301 {"Reserved", "wlan.erp_info.reserved",
53302 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
53303 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53304
53305 /* IEEE Std 802.11 2016 */
53306 /* Table 9-135-Extended Capabilities field */
53307 {&hf_ieee80211_tag_extended_capabilities,
53308 {"Extended Capabilities", "wlan.extcap",
53309 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53311
53312 /* Extended Capability octet 1 */
53313 {&hf_ieee80211_tag_extended_capabilities_b0,
53314 {"20/40 BSS Coexistence Management Support", "wlan.extcap.b0",
53315 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53316 "HT Information Exchange Support", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53317
53318 {&hf_ieee80211_tag_extended_capabilities_b1,
53319 {"General Link (GLK)", "wlan.extcap.b1",
53320 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
53321 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53322
53323 {&hf_ieee80211_tag_extended_capabilities_b2,
53324 {"Extended Channel Switching", "wlan.extcap.b2",
53325 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53326 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53327
53328 {&hf_ieee80211_tag_extended_capabilities_b3,
53329 {"GLK-GCR", "wlan.extcap.b3",
53330 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53331 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53332
53333 {&hf_ieee80211_tag_extended_capabilities_b4,
53334 {"PSMP Capability", "wlan.extcap.b4",
53335 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53336 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53337
53338 {&hf_ieee80211_tag_extended_capabilities_b5,
53339 {"Reserved", "wlan.extcap.b5",
53340 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20,
53341 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53342
53343 {&hf_ieee80211_tag_extended_capabilities_b6,
53344 {"S-PSMP Support", "wlan.extcap.b6",
53345 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53346 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53347
53348 {&hf_ieee80211_tag_extended_capabilities_b7,
53349 {"Event", "wlan.extcap.b7",
53350 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53352
53353
53354 /* Extended Capability octet 2 */
53355 {&hf_ieee80211_tag_extended_capabilities_b8,
53356 {"Diagnostics", "wlan.extcap.b8",
53357 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53358 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53359
53360 {&hf_ieee80211_tag_extended_capabilities_b9,
53361 {"Multicast Diagnostics", "wlan.extcap.b9",
53362 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53363 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53364
53365 {&hf_ieee80211_tag_extended_capabilities_b10,
53366 {"Location Tracking", "wlan.extcap.b10",
53367 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53368 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53369
53370 {&hf_ieee80211_tag_extended_capabilities_b11,
53371 {"FMS", "wlan.extcap.b11",
53372 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
53373 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53374
53375 {&hf_ieee80211_tag_extended_capabilities_b12,
53376 {"Proxy ARP Service", "wlan.extcap.b12",
53377 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53378 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53379
53380 {&hf_ieee80211_tag_extended_capabilities_b13,
53381 {"Colocated Interference Reporting", "wlan.extcap.b13",
53382 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53383 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53384
53385 {&hf_ieee80211_tag_extended_capabilities_b14,
53386 {"Civic Location", "wlan.extcap.b14",
53387 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53388 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53389
53390 {&hf_ieee80211_tag_extended_capabilities_b15,
53391 {"Geospatial Location", "wlan.extcap.b15",
53392 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53393 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53394
53395
53396 /* Extended Capability octet 3 */
53397 {&hf_ieee80211_tag_extended_capabilities_b16,
53398 {"TFS", "wlan.extcap.b16",
53399 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53401
53402 {&hf_ieee80211_tag_extended_capabilities_b17,
53403 {"WNM Sleep Mode", "wlan.extcap.b17",
53404 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53406
53407 {&hf_ieee80211_tag_extended_capabilities_b18,
53408 {"TIM Broadcast", "wlan.extcap.b18",
53409 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53411
53412 {&hf_ieee80211_tag_extended_capabilities_b19,
53413 {"BSS Transition", "wlan.extcap.b19",
53414 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
53415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53416
53417 {&hf_ieee80211_tag_extended_capabilities_b20,
53418 {"QoS Traffic Capability", "wlan.extcap.b20",
53419 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53421
53422 {&hf_ieee80211_tag_extended_capabilities_b21,
53423 {"AC Station Count", "wlan.extcap.b21",
53424 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53426
53427 {&hf_ieee80211_tag_extended_capabilities_b22,
53428 {"Multiple BSSID", "wlan.extcap.b22",
53429 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53431
53432 {&hf_ieee80211_tag_extended_capabilities_b23,
53433 {"Timing Measurement", "wlan.extcap.b23",
53434 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53436
53437
53438 /* Extended Capability octet 4 */
53439 {&hf_ieee80211_tag_extended_capabilities_b24,
53440 {"Channel Usage", "wlan.extcap.b24",
53441 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53443
53444 {&hf_ieee80211_tag_extended_capabilities_b25,
53445 {"SSID List", "wlan.extcap.b25",
53446 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53447 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53448
53449 {&hf_ieee80211_tag_extended_capabilities_b26,
53450 {"DMS", "wlan.extcap.b26",
53451 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53453
53454 {&hf_ieee80211_tag_extended_capabilities_b27,
53455 {"UTC TSF Offset", "wlan.extcap.b27",
53456 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
53457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53458
53459 {&hf_ieee80211_tag_extended_capabilities_b28,
53460 {"TPU Buffer STA Support", "wlan.extcap.b28",
53461 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53463
53464 {&hf_ieee80211_tag_extended_capabilities_b29,
53465 {"TDLS Peer PSM Support", "wlan.extcap.b29",
53466 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53468
53469 {&hf_ieee80211_tag_extended_capabilities_b30,
53470 {"TDLS Channel Switching", "wlan.extcap.b30",
53471 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53472 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53473
53474 {&hf_ieee80211_tag_extended_capabilities_b31,
53475 {"Interworking", "wlan.extcap.b31",
53476 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53477 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53478
53479
53480 /* Extended Capability octet 5 */
53481 {&hf_ieee80211_tag_extended_capabilities_b32,
53482 {"QoS Map", "wlan.extcap.b32",
53483 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53484 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53485
53486 {&hf_ieee80211_tag_extended_capabilities_b33,
53487 {"EBR", "wlan.extcap.b33",
53488 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53489 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53490
53491 {&hf_ieee80211_tag_extended_capabilities_b34,
53492 {"SSPN Interface", "wlan.extcap.b34",
53493 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53494 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53495
53496 {&hf_ieee80211_tag_extended_capabilities_b35,
53497 {"Reserved", "wlan.extcap.b35",
53498 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53499 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53500
53501 {&hf_ieee80211_tag_extended_capabilities_b36,
53502 {"MSGCF Capability", "wlan.extcap.b36",
53503 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53504 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53505
53506 {&hf_ieee80211_tag_extended_capabilities_b37,
53507 {"TDLS Support", "wlan.extcap.b37",
53508 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53509 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53510
53511 {&hf_ieee80211_tag_extended_capabilities_b38,
53512 {"TDLS Prohibited", "wlan.extcap.b38",
53513 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53514 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53515
53516 {&hf_ieee80211_tag_extended_capabilities_b39,
53517 {"TDLS Channel Switching Prohibited", "wlan.extcap.b39",
53518 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53519 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53520
53521 /* Extended Capability octet 6 */
53522 {&hf_ieee80211_tag_extended_capabilities_b40,
53523 {"Reject Unadmitted Frame", "wlan.extcap.b40",
53524 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53526
53527 {&hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
53528 {"Service Interval Granularity",
53529 "wlan.extcap.serv_int_granularity",
53530 FT_UINT8, BASE_DEC, VALS(service_interval_granularity_vals)((0 ? (const struct _value_string*)0 : ((service_interval_granularity_vals
))))
, 0x0e,
53531 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53532
53533 {&hf_ieee80211_tag_extended_capabilities_b44,
53534 {"Identifier Location", "wlan.extcap.b44",
53535 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53537
53538 {&hf_ieee80211_tag_extended_capabilities_b45,
53539 {"U-APSD Coexistence", "wlan.extcap.b45",
53540 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53542
53543 {&hf_ieee80211_tag_extended_capabilities_b46,
53544 {"WNM Notification", "wlan.extcap.b46",
53545 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53546 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53547
53548 {&hf_ieee80211_tag_extended_capabilities_b47,
53549 {"QAB Capability", "wlan.extcap.b47",
53550 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
53551 "AP supports QAB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53552
53553 /* Extended Capability octet 7 */
53554 {&hf_ieee80211_tag_extended_capabilities_b48,
53555 {"UTF-8 SSID", "wlan.extcap.b48",
53556 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53557 "The SSID in this BSS is interpreted using UTF-8 encoding", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53558
53559 {&hf_ieee80211_tag_extended_capabilities_b49,
53560 {"QMF Activated", "wlan.extcap.b49",
53561 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53562 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53563
53564 {&hf_ieee80211_tag_extended_capabilities_b50,
53565 {"QMF Reconfiguration Activated", "wlan.extcap.b50",
53566 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53567 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53568
53569 {&hf_ieee80211_tag_extended_capabilities_b51,
53570 {"Robust AV Streaming", "wlan.extcap.b51",
53571 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
53572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53573
53574 {&hf_ieee80211_tag_extended_capabilities_b52,
53575 {"Advanced GCR", "wlan.extcap.b52",
53576 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53578
53579 {&hf_ieee80211_tag_extended_capabilities_b53,
53580 {"Mesh GCR", "wlan.extcap.b53",
53581 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
53582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53583
53584 {&hf_ieee80211_tag_extended_capabilities_b54,
53585 {"SCS", "wlan.extcap.b54",
53586 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
53587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53588
53589 {&hf_ieee80211_tag_extended_capabilities_b55,
53590 {"QLoad Report", "wlan.extcap.b55",
53591 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
53592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53593
53594 /* Extended Capability octet 8 */
53595 {&hf_ieee80211_tag_extended_capabilities_b56,
53596 {"Alternate EDCA", "wlan.extcap.b56",
53597 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53598 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53599
53600 {&hf_ieee80211_tag_extended_capabilities_b57,
53601 {"Unprotected TXOP Negotiation", "wlan.extcap.b57",
53602 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53603 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53604
53605 {&hf_ieee80211_tag_extended_capabilities_b58,
53606 {"Protected TXOP Negotiation", "wlan.extcap.b58",
53607 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53608 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53609
53610 {&hf_ieee80211_tag_extended_capabilities_b59,
53611 {"Reserved", "wlan.extcap.b59",
53612 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53613 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53614
53615 {&hf_ieee80211_tag_extended_capabilities_b60,
53616 {"Protected QLoad Report", "wlan.extcap.b60",
53617 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53618 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53619
53620 {&hf_ieee80211_tag_extended_capabilities_b61,
53621 {"TDLS Wider Bandwidth", "wlan.extcap.b61",
53622 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53623 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53624
53625 {&hf_ieee80211_tag_extended_capabilities_b62,
53626 {"Operating Mode Notification", "wlan.extcap.b62",
53627 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53628 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53629
53630 {&hf_ieee80211_tag_extended_capabilities_b63,
53631 {"Max Number Of MSDUs In A-MSDU", "wlan.extcap.b63",
53632 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
53633 "Part 1 (bit63)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53634
53635 /* Extended Capability octets 8 & 9 */
53636 {&hf_ieee80211_tag_extended_capabilities_2,
53637 {"Extended Capabilities", "wlan.extcap",
53638 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
53639 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53640
53641 {&hf_ieee80211_tag_extended_capabilities_b56_2,
53642 {"Alternate EDCA", "wlan.extcap.b56",
53643 FT_BOOLEAN, 16, NULL((void*)0), 0x0001,
53644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53645
53646 {&hf_ieee80211_tag_extended_capabilities_b57_2,
53647 {"Unprotected TXOP Negotiation", "wlan.extcap.b57",
53648 FT_BOOLEAN, 16, NULL((void*)0), 0x0002,
53649 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53650
53651 {&hf_ieee80211_tag_extended_capabilities_b58_2,
53652 {"Protected TXOP Negotiation", "wlan.extcap.b58",
53653 FT_BOOLEAN, 16, NULL((void*)0), 0x0004,
53654 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53655
53656 {&hf_ieee80211_tag_extended_capabilities_b59_2,
53657 {"Reserved", "wlan.extcap.b59",
53658 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0008,
53659 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53660
53661 {&hf_ieee80211_tag_extended_capabilities_b60_2,
53662 {"Protected QLoad Report", "wlan.extcap.b60",
53663 FT_BOOLEAN, 16, NULL((void*)0), 0x0010,
53664 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53665
53666 {&hf_ieee80211_tag_extended_capabilities_b61_2,
53667 {"TDLS Wider Bandwidth", "wlan.extcap.b61",
53668 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0020,
53669 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53670
53671 {&hf_ieee80211_tag_extended_capabilities_b62_2,
53672 {"Operating Mode Notification", "wlan.extcap.b62",
53673 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040,
53674 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53675
53676 {&hf_ieee80211_tag_extended_capabilities_max_num_msdus,
53677 {"Max Number Of MSDUs In A-MSDU", "wlan.extcap.b63",
53678 FT_UINT16, BASE_DEC, VALS(vht_max_mpdu_in_amsdu)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_in_amsdu
))))
, 0x0180,
53679 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53680
53681 {&hf_ieee80211_tag_extended_capabilities_b65_2,
53682 {"Channel Schedule Management", "wlan.extcap.b65",
53683 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
53684 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53685
53686 {&hf_ieee80211_tag_extended_capabilities_b66_2,
53687 {"Geodatabase Inband Enabling Signal", "wlan.extcap.b66",
53688 FT_BOOLEAN, 16, NULL((void*)0), 0x0400,
53689 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53690
53691 {&hf_ieee80211_tag_extended_capabilities_b67_2,
53692 {"Network Channel Control", "wlan.extcap.b67",
53693 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
53694 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53695
53696 {&hf_ieee80211_tag_extended_capabilities_b68_2,
53697 {"White Space Map", "wlan.extcap.b68",
53698 FT_BOOLEAN, 16, NULL((void*)0), 0x1000,
53699 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53700
53701 {&hf_ieee80211_tag_extended_capabilities_b69_2,
53702 {"Channel Availability Query", "wlan.extcap.b69",
53703 FT_BOOLEAN, 16, NULL((void*)0), 0x2000,
53704 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53705
53706 {&hf_ieee80211_tag_extended_capabilities_b70_2,
53707 {"Fine Timing Measurement Responder", "wlan.extcap.b70",
53708 FT_BOOLEAN, 16, NULL((void*)0), 0x4000,
53709 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53710
53711 {&hf_ieee80211_tag_extended_capabilities_b71_2,
53712 {"Fine Timing Measurement Initiator", "wlan.extcap.b71",
53713 FT_BOOLEAN, 16, NULL((void*)0), 0x8000,
53714 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53715
53716 /* Extended Capability Octet 10 */
53717 {&hf_ieee80211_tag_extended_capabilities_b72,
53718 {"FILS Capability", "wlan.extcap.b72",
53719 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53721
53722 {&hf_ieee80211_tag_extended_capabilities_b73,
53723 {"Extended Spectrum Management Capable", "wlan.extcap.b73",
53724 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53725 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53726
53727 {&hf_ieee80211_tag_extended_capabilities_b74,
53728 {"Future Channel Guidance", "wlan.extcap.b74",
53729 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53731
53732 {&hf_ieee80211_tag_extended_capabilities_b75,
53733 {"Preassociation discovery (PAD)", "wlan.extcap.b75",
53734 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53736
53737 {&hf_ieee80211_tag_extended_capabilities_b76,
53738 {"Reserved", "wlan.extcap.b76",
53739 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10,
53740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53741
53742 {&hf_ieee80211_tag_extended_capabilities_b77,
53743 {"TWT Requester Support", "wlan.extcap.b77",
53744 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
53745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53746
53747 {&hf_ieee80211_tag_extended_capabilities_b78,
53748 {"TWT Responder Support", "wlan.extcap.b78",
53749 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
53750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53751
53752 {&hf_ieee80211_tag_extended_capabilities_b79,
53753 {"OBSS Narrow Bandwidth RU in OFDMA Tolerance Support", "wlan.extcap.b79",
53754 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
53755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53756
53757 {&hf_ieee80211_tag_extended_capabilities_b80,
53758 {"Complete List of NonTxBSSID Profiles", "wlan.extcap.b80",
53759 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53761
53762 {&hf_ieee80211_tag_extended_capabilities_b81,
53763 {"SAE Password Identifiers In Use", "wlan.extcap.b81",
53764 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53766
53767 {&hf_ieee80211_tag_extended_capabilities_b82,
53768 {"SAE Passwords Used Exclusively", "wlan.extcap.b82",
53769 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53771
53772 {&hf_ieee80211_tag_extended_capabilities_b83,
53773 {"Enhanced Multi-BSSID Advertisement Support", "wlan.extcap.b83",
53774 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
53775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53776
53777 {&hf_ieee80211_tag_extended_capabilities_b84,
53778 {"Beacon Protection Enabled", "wlan.extcap.b84",
53779 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53781
53782 {&hf_ieee80211_tag_extended_capabilities_b85,
53783 {"Mirrored SCS", "wlan.extcap.b85",
53784 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
53785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53786
53787 {&hf_ieee80211_tag_extended_capabilities_b86,
53788 {"OCT", "wlan.extcap.b86",
53789 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
53790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53791
53792 {&hf_ieee80211_tag_extended_capabilities_b87,
53793 {"Local MAC Address Policy", "wlan.extcap.b87",
53794 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
53795 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53796
53797 {&hf_ieee80211_tag_extended_capabilities_b88,
53798 {"SAE-PK Passwords Used Exclusively", "wlan.extcap.b88",
53799 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53801
53802 {&hf_ieee80211_tag_extended_capabilities_b89,
53803 {"TWT Parameters Range Support", "wlan.extcap.b89",
53804 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53805
53806 {&hf_ieee80211_tag_extended_capabilities_b90,
53807 {"non-TB Ranging Responder", "wlan.extcap.b90",
53808 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53809
53810 {&hf_ieee80211_tag_extended_capabilities_b91,
53811 {"TB Ranging Responder", "wlan.extcap.b91",
53812 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53813
53814 {&hf_ieee80211_tag_extended_capabilities_b92,
53815 {"TB Ranging Responder Measurement Support", "wlan.extcap.b92",
53816 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53817
53818 {&hf_ieee80211_tag_extended_capabilities_b93,
53819 {"TB Ranging Initiator Measurement Support", "wlan.extcap.b93",
53820 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53821
53822 {&hf_ieee80211_tag_extended_capabilities_b94,
53823 {"AOA Measurement Available", "wlan.extcap.b94",
53824 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53825
53826 {&hf_ieee80211_tag_extended_capabilities_b95,
53827 {"Phase Shift Feedback Support", "wlan.extcap.b95",
53828 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53829
53830 {&hf_ieee80211_tag_extended_capabilities_b96,
53831 {"DMG/location supporting APs in the area", "wlan.extcap.dmg_location",
53832 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53833
53834 {&hf_ieee80211_tag_extended_capabilities_b97,
53835 {"I2R LMR Feedback Policy", "wlan.extcap.i2r_lmr_feedback_policy",
53836 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53837
53838 {&hf_ieee80211_tag_extended_capabilities_b98,
53839 {"EBCS Support", "wlan.extcap.b98",
53840 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53841
53842 {&hf_ieee80211_tag_extended_capabilities_b99,
53843 {"EBCS Relaying Support", "wlan.extcap.b99",
53844 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53845
53846 {&hf_ieee80211_tag_extended_capabilities_b100,
53847 {"Peer-to-peer TWT Support", "wlan.extcap.b100",
53848 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53849
53850 {&hf_ieee80211_tag_extended_capabilities_b101,
53851 {"Multiple BSSID Role Switch Support", "wlan.extcap.b101",
53852 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53853
53854 {&hf_ieee80211_tag_extended_capabilities_b102,
53855 {"Known STA Identification Enabled", "wlan.extcap.b102",
53856 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53857
53858 {&hf_ieee80211_tag_extended_capabilities_b103,
53859 {"Reserved", "wlan.extcap.b103",
53860 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53861
53862 {&hf_ieee80211_tag_extended_capabilities_b104,
53863 {"Capability Notification Support", "wlan.extcap.b104",
53864 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53865
53866 {&hf_ieee80211_tag_extended_capabilities_b105,
53867 {"GAS Query Request Fragmentation", "wlan.extcap.b105",
53868 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53869
53870 {&hf_ieee80211_tag_extended_capabilities_reserved2,
53871 {"Reserved", "wlan.extcap.reserved2",
53872 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53873
53874 {&hf_ieee80211_tag_cisco_ccx1_unknown,
53875 {"Unknown", "wlan.cisco.ccx1.unknown",
53876 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53877 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53878
53879 {&hf_ieee80211_tag_cisco_ccx1_name,
53880 {"Name", "wlan.cisco.ccx1.name",
53881 FT_STRING, BASE_NONE, NULL((void*)0), 0,
53882 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53883
53884 {&hf_ieee80211_tag_cisco_ccx1_clients,
53885 {"Clients", "wlan.cisco.ccx1.clients",
53886 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53887 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53888
53889 {&hf_ieee80211_tag_cisco_ccx1_unknown2,
53890 {"Unknown2", "wlan.cisco.ccx1.unknown2",
53891 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53892 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53893
53894 {&hf_ieee80211_tag_neighbor_report_bssid,
53895 {"BSSID", "wlan.nreport.bssid",
53896 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
53897 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53898
53899 {&hf_ieee80211_tag_neighbor_report_bssid_info,
53900 {"BSSID Information", "wlan.nreport.bssid.info",
53901 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
53902 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53903
53904 {&hf_ieee80211_tag_neighbor_report_bssid_info_reachability,
53905 {"AP Reachability", "wlan.nreport.bssid.info.reachability",
53906 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,
53907 "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) }},
53908
53909 {&hf_ieee80211_tag_neighbor_report_bssid_info_security,
53910 {"Security", "wlan.nreport.bssid.info.security",
53911 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004,
53912 "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) }},
53913
53914 {&hf_ieee80211_tag_neighbor_report_bssid_info_key_scope,
53915 {"Key Scope", "wlan.nreport.bssid.info.keyscope",
53916 FT_BOOLEAN, 32, NULL((void*)0), 0x00000008,
53917 "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) }},
53918
53919 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability,
53920 {"Capability", "wlan.nreport.bssid.info.capability",
53921 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000003F0,
53922 "Contains selected capability information for the AP indicated by this BSSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53923
53924 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng,
53925 {"Spectrum Management", "wlan.nreport.bssid.info.capability.specmngt",
53926 FT_BOOLEAN, 32, NULL((void*)0), 0x00000010,
53927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53928
53929 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos,
53930 {"QoS", "wlan.nreport.bssid.info.capability.qos",
53931 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
53932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53933
53934 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd,
53935 {"APSD", "wlan.nreport.bssid.info.capability.apsd",
53936 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
53937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53938
53939 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt,
53940 {"Radio Measurement", "wlan.nreport.bssid.info.capability.radiomsnt",
53941 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
53942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53943
53944 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b4,
53945 {"Reserved", "wlan.nreport.bssid.info.capability.reserved_b4",
53946 FT_BOOLEAN, 32, NULL((void*)0), 0x00000100,
53947 "Was Delayed Block Ack until 802.11-2016", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53948
53949 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b5,
53950 {"Reserved", "wlan.nreport.bssid.info.capability.reserved_b5",
53951 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
53952 "Was Immediate Block Ack until 802.11-2016", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53953
53954 {&hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain,
53955 {"Mobility Domain", "wlan.nreport.bssid.info.mobilitydomain",
53956 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
53957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53958
53959 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput,
53960 {"High Throughput (HT AP)", "wlan.nreport.bssid.info.hthroughput",
53961 FT_BOOLEAN, 32, NULL((void*)0), 0x00000800,
53962 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53963
53964 {&hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput,
53965 {"Very High Throughput (VHT AP)", "wlan.nreport.bssid.info.vht",
53966 FT_BOOLEAN, 32, NULL((void*)0), 0x00001000,
53967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53968
53969 {&hf_ieee80211_tag_neighbor_report_bssid_info_ftm,
53970 {"Fine Timing Measurement (FTM)", "wlan.nreport.bssid.info.ftm",
53971 FT_BOOLEAN, 32, NULL((void*)0), 0x00002000,
53972 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53973
53974 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_efficiency,
53975 {"High Efficiency (HE AP)", "wlan.nreport.bssid.info.he",
53976 FT_BOOLEAN, 32, NULL((void*)0), 0x00004000,
53977 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53978
53979 {&hf_ieee80211_tag_neighbor_report_bssid_info_er_bss,
53980 {"Extended Range BSS", "wlan.nreport.bssid.info.er_bss",
53981 FT_BOOLEAN, 32, NULL((void*)0), 0x00008000,
53982 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53983
53984 {&hf_ieee80211_tag_neighbor_report_bssid_info_colocated_ap,
53985 {"Co-Located AP", "wlan.nreport.bssid.info.colocated_ap",
53986 FT_BOOLEAN, 32, NULL((void*)0), 0x00010000,
53987 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53988
53989 {&hf_ieee80211_tag_neighbor_report_bssid_info_unsolicited_probe_responses_active,
53990 {"Unsolicited Probe Responses Active", "wlan.nreport.bssid.info.unsolicited_probe_responses",
53991 FT_BOOLEAN, 32, NULL((void*)0), 0x00020000,
53992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53993
53994 {&hf_ieee80211_tag_neighbor_report_bssid_info_ess_with_colocated_ap,
53995 {"Members Of ESS With 2.4/5 GHz Co-Located AP", "wlan.nreport.bssid.info.member_of_ess_with_2p4_5_ghz_colocated_ap",
53996 FT_BOOLEAN, 32, NULL((void*)0), 0x00040000,
53997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53998
53999 {&hf_ieee80211_tag_neighbor_report_bssid_info_oct_supported_with_reporting_ap,
54000 {"OCT Supported With Reporting AP", "wlan.nreport.bssid.info.oct_supported_with_reporting_ap",
54001 FT_BOOLEAN, 32, NULL((void*)0), 0x00080000,
54002 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54003
54004 {&hf_ieee80211_tag_neighbor_report_bssid_info_colocated_6ghz_ap,
54005 {"Co-Located With 6 GHz AP", "wlan.nreport.bssid.info.colocated_6ghz_ap",
54006 FT_BOOLEAN, 32, NULL((void*)0), 0x00100000,
54007 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54008
54009 {&hf_ieee80211_tag_neighbor_report_bssid_info_eht,
54010 {"Extremely High Throughput (EHT AP)", "wlan.nreport.bssid.info.eht",
54011 FT_BOOLEAN, 32, NULL((void*)0), 0x00200000,
54012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54013
54014 {&hf_ieee80211_tag_neighbor_report_bssid_info_dmg_positioning,
54015 {"DMG Positioning", "wlan.nreport.bssid.info.dmg_positioning",
54016 FT_BOOLEAN, 32, NULL((void*)0), 0x00400000,
54017 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54018
54019 {&hf_ieee80211_tag_neighbor_report_bssid_info_reserved,
54020 {"Reserved", "wlan.nreport.bssid.info.reserved",
54021 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFF800000,
54022 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54023
54024 {&hf_ieee80211_tag_neighbor_report_ope_class,
54025 {"Operating Class", "wlan.nreport.opeclass",
54026 FT_UINT8, BASE_DEC | BASE_RANGE_STRING0x00000100, RVALS(oper_class_rvals)((0 ? (const struct _range_string*)0 : ((oper_class_rvals)))), 0,
54027 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54028
54029 {&hf_ieee80211_tag_neighbor_report_channel_number,
54030 {"Channel Number", "wlan.nreport.channumber",
54031 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54032 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54033
54034 {&hf_ieee80211_tag_neighbor_report_phy_type,
54035 {"PHY Type", "wlan.nreport.phytype",
54036 FT_UINT8, BASE_DEC, VALS(phy_type_vals)((0 ? (const struct _value_string*)0 : ((phy_type_vals)))), 0,
54037 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54038
54039 {&hf_ieee80211_tag_neighbor_report_subelement_id,
54040 {"ID", "wlan.nreport.subelem.id",
54041 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54043
54044 {&hf_ieee80211_tag_neighbor_report_subelement_length,
54045 {"Length", "wlan.nreport.subelem.len",
54046 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54048
54049 {&hf_ieee80211_tag_neighbor_report_subelement_data,
54050 {"Data", "wlan.nreport.subelem.data",
54051 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54053
54054 {&hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref,
54055 {"Preference", "wlan.nreport.subelem.bss_trn_can_pref",
54056 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54057 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54058
54059 {&hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf,
54060 {"BSS Termination TSF", "wlan.nreport.subelem.bss_ter_tsf",
54061 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
54062 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54063
54064 {&hf_ieee80211_tag_neighbor_report_subelement_bss_dur,
54065 {"Duration", "wlan.nreport.subelem.bss_dur",
54066 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_minutes)((0 ? (const struct unit_name_string*)0 : ((&units_minutes
))))
, 0,
54067 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54068
54069 {&hf_ieee80211_tag_neighbor_report_subelement_tsf_offset,
54070 {"TSF Offset", "wlan.nreport.subelem.tsf_offset",
54071 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54072 "TSF Offset in TU units", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
54073
54074 {&hf_ieee80211_tag_neighbor_report_subelement_beacon_interval,
54075 {"Beacon Interval", "wlan.nreport.subelem.beacon_interval",
54076 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54077 "Beacon Interval in TUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
54078
54079 {&hf_ieee80211_tag_neighbor_report_subelement_country_code,
54080 {"Country Code", "wlan.nreport.subelem.country_code",
54081 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
54082 "ISO 3166-1 Alpha-2 Country Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54083
54084 {&hf_ieee80211_tag_supported_ope_classes_current,
54085 {"Current Operating Class", "wlan.supopeclass.current",
54086 FT_UINT8, BASE_DEC | BASE_RANGE_STRING0x00000100, RVALS(oper_class_rvals)((0 ? (const struct _range_string*)0 : ((oper_class_rvals)))), 0,
54087 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54088
54089 {&hf_ieee80211_tag_supported_ope_classes_alternate,
54090 {"Alternate Operating Classes", "wlan.supopeclass.alt",
54091 FT_NONE, BASE_NONE, NULL((void*)0), 0,
54092 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54093
54094 {&hf_ieee80211_wfa_ie_type,
54095 {"Type", "wlan.wfa.ie.type",
54096 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_type_vals)((0 ? (const struct _value_string*)0 : ((ieee802111_wfa_ie_type_vals
))))
, 0,
54097 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54098
54099 {&hf_ieee80211_wfa_ie_wpa_version,
54100 {"WPA Version", "wlan.wfa.ie.wpa.version",
54101 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54102 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54103
54104 {&hf_ieee80211_wfa_ie_wpa_mcs,
54105 {"Multicast Cipher Suite", "wlan.wfa.ie.wpa.mcs",
54106 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_mcs_base_custom)((const void *) (size_t) (wpa_mcs_base_custom)), 0,
54107 "Contains the cipher suite selector used by the BSS to protect broadcast/multicasttraffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54108
54109 {&hf_ieee80211_wfa_ie_wpa_mcs_oui,
54110 {"Multicast Cipher Suite OUI", "wlan.wfa.ie.wpa.mcs.oui",
54111 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
54112 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54113
54114 {&hf_ieee80211_wfa_ie_wpa_mcs_type,
54115 {"Multicast Cipher Suite type", "wlan.wfa.ie.wpa.mcs.type",
54116 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54117 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54118
54119 {&hf_ieee80211_wfa_ie_wpa_mcs_wfa_type,
54120 {"Multicast Cipher Suite type", "wlan.wfa.ie.wpa.mcs.type",
54121 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wpa_cipher_vals
))))
, 0,
54122 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54123
54124 {&hf_ieee80211_wfa_ie_wpa_ucs_count,
54125 {"Unicast Cipher Suite Count", "wlan.wfa.ie.wpa.ucs.count",
54126 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54127 "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) }},
54128
54129 {&hf_ieee80211_wfa_ie_wpa_ucs_list,
54130 {"Unicast Cipher Suite List", "wlan.wfa.ie.wpa.ucs.list",
54131 FT_NONE, BASE_NONE, NULL((void*)0), 0,
54132 "Contains a series of cipher suite selectors that indicate the Unicast cipher suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54133
54134 {&hf_ieee80211_wfa_ie_wpa_ucs,
54135 {"Unicast Cipher Suite", "wlan.wfa.ie.wpa.ucs",
54136 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_ucs_base_custom)((const void *) (size_t) (wpa_ucs_base_custom)), 0,
54137 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54138
54139 {&hf_ieee80211_wfa_ie_wpa_ucs_oui,
54140 {"Unicast Cipher Suite OUI", "wlan.wfa.ie.wpa.ucs.oui",
54141 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
54142 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54143
54144 {&hf_ieee80211_wfa_ie_wpa_ucs_type,
54145 {"Unicast Cipher Suite type", "wlan.wfa.ie.wpa.ucs.type",
54146 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54147 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54148
54149 {&hf_ieee80211_wfa_ie_wpa_ucs_wfa_type,
54150 {"Unicast Cipher Suite type", "wlan.wfa.ie.wpa.ucs.type",
54151 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wpa_cipher_vals
))))
, 0,
54152 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54153
54154 {&hf_ieee80211_wfa_ie_wpa_akms_count,
54155 {"Auth Key Management (AKM) Suite Count", "wlan.wfa.ie.wpa.akms.count",
54156 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54157 "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) }},
54158
54159 {&hf_ieee80211_wfa_ie_wpa_akms_list,
54160 {"Auth Key Management (AKM) List", "wlan.wfa.ie.wpa.akms.list",
54161 FT_NONE, BASE_NONE, NULL((void*)0), 0,
54162 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54163
54164 {&hf_ieee80211_wfa_ie_wpa_akms,
54165 {"Auth Key Management (AKM) Suite", "wlan.wfa.ie.wpa.akms",
54166 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_akms_base_custom)((const void *) (size_t) (wpa_akms_base_custom)), 0,
54167 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54168
54169 {&hf_ieee80211_wfa_ie_wpa_akms_oui,
54170 {"Auth Key Management (AKM) OUI", "wlan.wfa.ie.wpa.akms.oui",
54171 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
54172 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54173
54174 {&hf_ieee80211_wfa_ie_wpa_akms_type,
54175 {"Auth Key Management (AKM) type", "wlan.wfa.ie.wpa.akms.type",
54176 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54177 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54178
54179 {&hf_ieee80211_wfa_ie_wpa_akms_wfa_type,
54180 {"Auth Key Management (AKM) type", "wlan.wfa.ie.wpa.akms.type",
54181 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_keymgmt_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wpa_keymgmt_vals
))))
, 0,
54182 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54183
54184 {&hf_ieee80211_wfa_ie_wme_subtype,
54185 {"WME Subtype", "wlan.wfa.ie.wme.subtype",
54186 FT_UINT8, BASE_DEC, VALS(ieee802111_wfa_ie_wme_type)((0 ? (const struct _value_string*)0 : ((ieee802111_wfa_ie_wme_type
))))
, 0,
54187 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54188
54189 {&hf_ieee80211_wfa_ie_wme_version,
54190 {"WME Version", "wlan.wfa.ie.wme.version",
54191 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54192 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54193
54194 {&hf_ieee80211_wfa_ie_wme_qos_info,
54195 {"WME QoS Info", "wlan.wfa.ie.wme.qos_info",
54196 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54197 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54198
54199 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
54200 {"Max SP Length", "wlan.wfa.ie.wme.qos_info.sta.max_sp_length",
54201 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,
54202 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54203
54204 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
54205 {"AC_BE", "wlan.wfa.ie.wme.qos_info.sta.ac_be",
54206 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,
54207 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54208
54209 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
54210 {"AC_BK", "wlan.wfa.ie.wme.qos_info.sta.ac_bk",
54211 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,
54212 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54213
54214 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
54215 {"AC_VI", "wlan.wfa.ie.wme.qos_info.sta.ac_vi",
54216 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,
54217 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54218
54219 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
54220 {"AC_VO", "wlan.wfa.ie.wme.qos_info.sta.ac_vo",
54221 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,
54222 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54223
54224 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
54225 {"Reserved", "wlan.wfa.ie.wme.qos_info.sta.reserved",
54226 FT_UINT8, BASE_HEX, NULL((void*)0), 0x90,
54227 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54228
54229 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
54230 {"U-APSD", "wlan.wfa.ie.wme.qos_info.ap.u_apsd",
54231 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
54232 "Indicates the WMM AP is currently supporting unscheduled automatic power save delivery", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54233
54234 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
54235 {"Parameter Set Count", "wlan.wfa.ie.wme.qos_info.ap.parameter_set_count",
54236 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F,
54237 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54238
54239 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
54240 {"Reserved", "wlan.wfa.ie.wme.qos_info.ap.reserved",
54241 FT_UINT8, BASE_HEX, NULL((void*)0), 0x70,
54242 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54243
54244 {&hf_ieee80211_wfa_ie_wme_reserved,
54245 {"Reserved", "wlan.wfa.ie.wme.reserved",
54246 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54247 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54248
54249 {&hf_ieee80211_wfa_ie_wme_ac_parameters,
54250 {"Ac Parameters", "wlan.wfa.ie.wme.acp",
54251 FT_NONE, BASE_NONE, NULL((void*)0), 0,
54252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54253
54254 {&hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
54255 {"ACI / AIFSN Field", "wlan.wfa.ie.wme.acp.aci_aifsn",
54256 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54258
54259 {&hf_ieee80211_wfa_ie_wme_acp_aci_be,
54260 {"ACI", "wlan.wfa.ie.wme.acp.aci_be",
54261 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54263
54264 {&hf_ieee80211_wfa_ie_wme_acp_aci_bk,
54265 {"ACI", "wlan.wfa.ie.wme.acp.aci_bk",
54266 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54268
54269 {&hf_ieee80211_wfa_ie_wme_acp_aci_vi,
54270 {"ACI", "wlan.wfa.ie.wme.acp.aci_vi",
54271 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54272 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54273
54274 {&hf_ieee80211_wfa_ie_wme_acp_aci_vo,
54275 {"ACI", "wlan.wfa.ie.wme.acp.aci_vo",
54276 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54278
54279 {&hf_ieee80211_wfa_ie_wme_acp_acm_be,
54280 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_be",
54281 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54282 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54283
54284 {&hf_ieee80211_wfa_ie_wme_acp_acm_bk,
54285 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_bk",
54286 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54287 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54288
54289 {&hf_ieee80211_wfa_ie_wme_acp_acm_vi,
54290 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_vi",
54291 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54292 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54293
54294 {&hf_ieee80211_wfa_ie_wme_acp_acm_vo,
54295 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_vo",
54296 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54297 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54298
54299 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_be,
54300 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_be",
54301 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54302 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54303
54304 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_bk,
54305 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_bk",
54306 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54308
54309 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_vi,
54310 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_vi",
54311 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54313
54314 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_vo,
54315 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_vo",
54316 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54317 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54318
54319 {&hf_ieee80211_wfa_ie_wme_acp_reserved_be,
54320 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_be",
54321 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54322 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54323
54324 {&hf_ieee80211_wfa_ie_wme_acp_reserved_bk,
54325 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_bk",
54326 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54327 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54328
54329 {&hf_ieee80211_wfa_ie_wme_acp_reserved_vi,
54330 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_vi",
54331 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54332 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54333
54334 {&hf_ieee80211_wfa_ie_wme_acp_reserved_vo,
54335 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_vo",
54336 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54337 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54338
54339 {&hf_ieee80211_wfa_ie_wme_acp_ecw,
54340 {"ECW", "wlan.wfa.ie.wme.acp.ecw",
54341 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00,
54342 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54343
54344 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_be,
54345 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_be",
54346 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54348
54349 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_bk,
54350 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_bk",
54351 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54353
54354 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_vo,
54355 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_vo",
54356 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54358
54359 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_vi,
54360 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_vi",
54361 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54363
54364 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_be,
54365 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_be",
54366 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54367 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54368
54369 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_bk,
54370 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_bk",
54371 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54373
54374 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_vo,
54375 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_vo",
54376 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54377 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54378
54379 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_vi,
54380 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_vi",
54381 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54382 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54383
54384 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_be,
54385 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_be",
54386 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54387 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54388
54389 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_bk,
54390 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_bk",
54391 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54392 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54393
54394 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_vo,
54395 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_vo",
54396 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54397 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54398
54399 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_vi,
54400 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_vi",
54401 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54402 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54403
54404 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
54405 {"TS Info", "wlan.wfa.ie.wme.tspec.ts_info",
54406 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
54407 "Traffic Stream (TS) Info", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54408
54409 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
54410 {"TID", "wlan.wfa.ie.wme.tspec.ts_info.tid",
54411 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00001E,
54412 "Traffic Stream Info ID (TID)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54413
54414 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
54415 {"Direction", "wlan.wfa.ie.wme.tspec.ts_info.dir",
54416 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,
54417 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54418
54419 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
54420 {"PSB", "wlan.wfa.ie.wme.tspec.ts_info.psb",
54421 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,
54422 "Traffic Stream (TS) Info Power Save Behavior (PSB)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54423
54424 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
54425 {"UP", "wlan.wfa.ie.wme.tspec.ts_info.up",
54426 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,
54427 "Traffic Stream (TS) Info User Priority (UP)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54428
54429 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
54430 {"Reserved", "wlan.wfa.ie.wme.tspec.ts_info.reserved",
54431 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFC381,
54432 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54433
54434 {&hf_ieee80211_wfa_ie_wme_tspec_nor_msdu,
54435 {"Normal MSDU Size", "wlan.wfa.ie.wme.tspec.nor_msdu",
54436 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54437 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54438
54439 {&hf_ieee80211_wfa_ie_wme_tspec_max_msdu,
54440 {"Maximum MSDU Size", "wlan.wfa.ie.wme.tspec.max_msdu",
54441 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54443
54444 {&hf_ieee80211_wfa_ie_wme_tspec_min_srv,
54445 {"Minimum Service Interval", "wlan.wfa.ie.wme.tspec.min_srv",
54446 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54447 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54448
54449 {&hf_ieee80211_wfa_ie_wme_tspec_max_srv,
54450 {"Maximum Service Interval", "wlan.wfa.ie.wme.tspec.max_srv",
54451 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54453
54454 {&hf_ieee80211_wfa_ie_wme_tspec_inact_int,
54455 {"Inactivity Interval", "wlan.wfa.ie.wme.tspec.inact_int",
54456 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54458
54459 {&hf_ieee80211_wfa_ie_wme_tspec_susp_int,
54460 {"Suspension Interval", "wlan.wfa.ie.wme.tspec.susp_int",
54461 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54463
54464 {&hf_ieee80211_wfa_ie_wme_tspec_srv_start,
54465 {"Service Start Time", "wlan.wfa.ie.wme.tspec.srv_start",
54466 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54468
54469 {&hf_ieee80211_wfa_ie_wme_tspec_min_data,
54470 {"Minimum Data Rate", "wlan.wfa.ie.wme.tspec.min_data",
54471 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54472 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54473
54474 {&hf_ieee80211_wfa_ie_wme_tspec_mean_data,
54475 {"Mean Data Rate", "wlan.wfa.ie.wme.tspec.mean_data",
54476 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54477 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54478
54479 {&hf_ieee80211_wfa_ie_wme_tspec_peak_data,
54480 {"Peak Data Rate", "wlan.wfa.ie.wme.tspec.peak_data",
54481 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54482 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54483
54484 {&hf_ieee80211_wfa_ie_wme_tspec_burst_size,
54485 {"Burst Size", "wlan.wfa.ie.wme.tspec.burst_size",
54486 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54488
54489 {&hf_ieee80211_wfa_ie_wme_tspec_delay_bound,
54490 {"Delay Bound", "wlan.wfa.ie.wme.tspec.delay_bound",
54491 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54492 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54493
54494 {&hf_ieee80211_wfa_ie_wme_tspec_min_phy,
54495 {"Minimum PHY Rate", "wlan.wfa.ie.wme.tspec.min_phy",
54496 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54497 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54498
54499 {&hf_ieee80211_wfa_ie_wme_tspec_surplus,
54500 {"Surplus Bandwidth Allowance", "wlan.wfa.ie.wme.tspec.surplus",
54501 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54503
54504 {&hf_ieee80211_wfa_ie_wme_tspec_medium,
54505 {"Medium Time", "wlan.wfa.ie.wme.tspec.medium",
54506 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54508
54509 {&hf_ieee80211_wfa_ie_nc_cost_level,
54510 {"Cost Level", "wlan.wfa.ie.nc.cost_level",
54511 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,
54512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54513
54514 {&hf_ieee80211_wfa_ie_nc_reserved,
54515 {"Reserved", "wlan.wfa.ie.nc.reserved",
54516 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54518
54519 {&hf_ieee80211_wfa_ie_nc_cost_flags,
54520 {"Cost Flags", "wlan.wfa.ie.nc.cost_flags",
54521 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,
54522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54523
54524 {&hf_ieee80211_wfa_ie_tethering_type,
54525 {"Type", "wlan.wfa.ie.tethering.type",
54526 FT_UINT16, BASE_DEC, VALS(ieee80211_wfa_ie_tethering_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_tethering_type_vals
))))
, 0,
54527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54528
54529 {&hf_ieee80211_wfa_ie_tethering_mac_length,
54530 {"MAC Length", "wlan.wfa.ie.tethering.mac_length",
54531 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54533
54534 {&hf_ieee80211_wfa_ie_tethering_mac,
54535 {"MAC Address", "wlan.wfa.ie.tethering.mac",
54536 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54537 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54538
54539 {&hf_ieee80211_wfa_ie_owe_bssid,
54540 {"BSSID", "wlan.wfa.ie.owe.bssid",
54541 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54542 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54543
54544 {&hf_ieee80211_wfa_ie_owe_ssid_length,
54545 {"SSID length", "wlan.wfa.ie.owe.ssid_length",
54546 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54547 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54548
54549 {&hf_ieee80211_wfa_ie_owe_ssid,
54550 {"SSID", "wlan.wfa.ie.owe.ssid",
54551 FT_STRING, BASE_NONE, NULL((void*)0), 0,
54552 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54553
54554 {&hf_ieee80211_wfa_ie_owe_band_info,
54555 {"Band info", "wlan.wfa.ie.owe.band_info",
54556 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54557 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54558
54559 {&hf_ieee80211_wfa_ie_owe_channel_info,
54560 {"Channel info", "wlan.wfa.ie.owe.channel_info",
54561 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54562 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54563
54564 {&hf_ieee80211_wfa_ie_mbo_oce_attr,
54565 {"MBO/OCE attribute", "wlan.wfa.ie.mbo_oce.attr",
54566 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54567
54568 {&hf_ieee80211_wfa_ie_mbo_oce_attr_id,
54569 {"ID", "wlan.wfa.ie.mbo_oce.attr_id",
54570 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) }},
54571
54572 {&hf_ieee80211_wfa_ie_mbo_oce_attr_len,
54573 {"Length", "wlan.wfa.ie.mbo_oce.attr_len",
54574 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54575
54576 {&hf_ieee80211_wfa_ie_mbo_ap_cap,
54577 {"MBO Capability Indication", "wlan.wfa.ie.mbo_oce.ap_cap",
54578 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54579
54580 {&hf_ieee80211_wfa_ie_mbo_ap_cap_cell,
54581 {"AP is cellular data aware", "wlan.wfa.ie.mbo.ap_cap.cell",
54582 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) }},
54583
54584 {&hf_ieee80211_wfa_ie_mbo_ap_cap_reserved,
54585 {"Reserved", "wlan.wfa.ie.mbo.ap_cap.reserved",
54586 FT_UINT8, BASE_HEX, NULL((void*)0), 0xBF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54587
54588 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class,
54589 {"Operating Class", "wlan.wfa.ie.mbo.non_pref_chan.op_class",
54590 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54591
54592 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan,
54593 {"Channel", "wlan.wfa.ie.mbo.non_pref_chan.chan",
54594 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54595
54596 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref,
54597 {"Preference", "wlan.wfa.ie.mbo.non_pref_chan.pref",
54598 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) }},
54599
54600 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason,
54601 {"Reason Code", "wlan.wfa.ie.mbo.non_pref_chan.reason",
54602 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) }},
54603
54604 {&hf_ieee80211_wfa_ie_mbo_cellular_cap,
54605 {"Cellular Data Connectivity", "wlan.wfa.ie.mbo.cellular_cap",
54606 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) }},
54607
54608 {&hf_ieee80211_wfa_ie_mbo_assoc_disallow_reason,
54609 {"Reason Code", "wlan.wfa.ie.mbo.assoc_disallow.reason",
54610 FT_UINT8, BASE_DEC, VALS(wfa_mbo_assoc_disallow_reason_vals)((0 ? (const struct _value_string*)0 : ((wfa_mbo_assoc_disallow_reason_vals
))))
,
54611 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54612
54613 {&hf_ieee80211_wfa_ie_mbo_cellular_pref,
54614 {"Cellular Data Preference", "wlan.wfa.ie.mbo.cellular_pref",
54615 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) }},
54616
54617 {&hf_ieee80211_wfa_ie_mbo_transition_reason,
54618 {"Transition Reason Code", "wlan.wfa.ie.mbo.transition.reason",
54619 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) }},
54620
54621 {&hf_ieee80211_wfa_ie_mbo_transition_rej_reason,
54622 {"Transition Rejection Reason Code", "wlan.wfa.ie.mbo.transition_rej.reason",
54623 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) }},
54624
54625 {&hf_ieee80211_wfa_ie_mbo_assoc_retry_delay,
54626 {"Re-association Delay", "wlan.wfa.ie.mbo.assoc_retry.delay",
54627 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) }},
54628
54629 {&hf_ieee80211_wfa_ie_oce_cap_ctrl,
54630 {"OCE Control", "wlan.wfa.ie.oce.cap.ctrl",
54631 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54632
54633 {&hf_ieee80211_wfa_ie_oce_cap_release,
54634 {"OCE Release", "wlan.wfa.ie.oce.cap.release",
54635 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54636
54637 {&hf_ieee80211_wfa_ie_oce_cap_sta_cfon,
54638 {"is STA CFON", "wlan.wfa.ie.oce.cap.sta_cfon",
54639 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) }},
54640
54641 {&hf_ieee80211_wfa_ie_oce_cap_11b_only_ap,
54642 {"11b only AP present on operating channel", "wlan.wfa.ie.oce.cap.11b_only_ap",
54643 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) }},
54644
54645 {&hf_ieee80211_wfa_ie_oce_cap_hlp,
54646 {"FILS Higher Layer Setup with Higher Layer Protocol Encapsulation enabled",
54647 "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) }},
54648
54649 {&hf_ieee80211_wfa_ie_oce_cap_non_oce_ap,
54650 {"non OCE AP present on operating channel", "wlan.wfa.ie.oce.cap.non_oce_ap",
54651 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) }},
54652
54653 {&hf_ieee80211_wfa_ie_oce_cap_reserved,
54654 {"Reserved", "wlan.wfa.ie.oce.cap.reserved",
54655 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54656
54657 {&hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delta,
54658 {"Delta RSSI", "wlan.wfa.ie.oce.rssi_assoc_rej.delta",
54659 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) }},
54660
54661 {&hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delay,
54662 {"Retry Delay", "wlan.wfa.ie.oce.rssi_assoc_rej.delay",
54663 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) }},
54664
54665 {&hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap,
54666 {"Available Capacity", "wlan.wfa.ie.oce.wan_metrics.avail_cap",
54667 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54668
54669 {&hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_downlink,
54670 {"Downlink", "wlan.wfa.ie.oce.wan_metrics.avail_cap_downlink",
54671 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54672
54673 {&hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_uplink,
54674 {"Uplink", "wlan.wfa.ie.oce.wan_metrics.avail_cap_uplink",
54675 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54676
54677 {&hf_ieee80211_wfa_ie_oce_rnr_completeness_short_ssid,
54678 {"Short SSID", "wlan.wfa.ie.oce.rnr_completeness.short_ssid",
54679 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54680
54681 {&hf_ieee80211_wfa_ie_oce_probe_suppr_bssid,
54682 {"BSSID", "wlan.wfa.ie.oce.probe_suppr.bssid",
54683 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54684
54685 {&hf_ieee80211_wfa_ie_oce_probe_suppr_ssid,
54686 {"SSID", "wlan.wfa.ie.oce.probe_suppr.ssid",
54687 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54688
54689 {&hf_ieee80211_wfa_anqp_mbo_subtype,
54690 {"Subtype", "wlan.wfa.anqp.mbo.subtype",
54691 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) }},
54692
54693 {&hf_ieee80211_wfa_anqp_mbo_query,
54694 {"Query Subtype", "wlan.wfa.anqp.mbo.query",
54695 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) }},
54696
54697 {&hf_ieee80211_wfa_anqp_mbo_cellular_pref,
54698 {"Cellular Data Preference", "wlan.wfa.anqp.mbo.cellular_pref",
54699 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) }},
54700
54701 {&hf_ieee80211_rsn_ie_ptk_keyid,
54702 {"KeyID", "wlan.rsn.ie.ptk.keyid",
54703 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
54704 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54705
54706 {&hf_ieee80211_rsn_ie_pmkid,
54707 {"PMKID", "wlan.rsn.ie.pmkid",
54708 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54709 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54710
54711 {&hf_ieee80211_rsn_ie_gtk_kde_data_type,
54712 {"Data Type", "wlan.rsn.ie.data_type",
54713 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(kde_selectors_rvals)((0 ? (const struct _range_string*)0 : ((kde_selectors_rvals)
)))
,
54714 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54715
54716 {&hf_ieee80211_rsn_ie_gtk_kde_key_id,
54717 {"Key ID", "wlan.rsn.ie.gtk_kde.key_id",
54718 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54719
54720 {&hf_ieee80211_rsn_ie_gtk_kde_tx,
54721 {"Tx", "wlan.rsn.ie.gtk_kde.tx",
54722 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) }},
54723
54724 {&hf_ieee80211_rsn_ie_gtk_kde_reserved1,
54725 {"Reserved", "wlan.rsn.ie.gtk_kde.res1",
54726 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54727
54728 {&hf_ieee80211_rsn_ie_gtk_kde_reserved2,
54729 {"Reserved", "wlan.rsn.ie.gtk_kde.res2",
54730 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54731
54732 {&hf_ieee80211_rsn_ie_gtk_kde_gtk,
54733 {"GTK", "wlan.rsn.ie.gtk_kde.gtk",
54734 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54735
54736 {&hf_ieee80211_rsn_ie_mac_address_kde_mac,
54737 {"MAC Address", "wlan.rsn.ie.mac_address_kde.mac_address",
54738 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54739
54740 {&hf_ieee80211_rsn_ie_gtk_kde_nonce,
54741 {"Key Nonce", "wlan.rsn.ie.key_nonce_kde.nonce",
54742 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54743
54744 {&hf_ieee80211_rsn_ie_gtk_kde_lifetime,
54745 {"Key Lifetime", "wlan.rsn.ie.key_lifetime_kde.lifetime",
54746 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) }},
54747
54748 {&hf_ieee80211_rsn_ie_error_kde_res,
54749 {"Reserved", "wlan.rsn.ie.error_kde.reserved",
54750 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54751
54752 {&hf_ieee80211_rsn_ie_error_kde_error_type,
54753 {"Error Type", "wlan.rsn.ie.error_kde.error_type",
54754 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54755
54756 {&hf_ieee80211_rsn_ie_igtk_kde_keyid,
54757 {"KeyId", "wlan.rsn.ie.igtk.kde.keyid",
54758 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54760
54761 {&hf_ieee80211_rsn_ie_igtk_kde_ipn,
54762 {"IPN", "wlan.rsn.ie.igtk.kde.ipn",
54763 FT_UINT48, BASE_DEC, NULL((void*)0), 0,
54764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54765
54766 {&hf_ieee80211_rsn_ie_igtk_kde_igtk,
54767 {"IGTK", "wlan.rsn.ie.igtk.kde.igtk",
54768 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54770
54771 {&hf_ieee80211_rsn_ie_oci_operating_class,
54772 {"Operating Class", "wlan.rsn.ie.oci_kde.operating_class",
54773 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54774
54775 {&hf_ieee80211_rsn_ie_oci_primary_channel_number,
54776 {"Primary Channel Number", "wlan.rsn.ie.oci_kde.primary_channel_number",
54777 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54778
54779 {&hf_ieee80211_rsn_ie_oci_frequency_segment_1,
54780 {"Frequency Segment 1 Channel Number",
54781 "wlan.rsn.ie.oci_kde.frequency_segment_1_channel_number",
54782 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54783
54784 {&hf_ieee80211_rsn_ie_bigtk_key_id,
54785 {"Key ID", "wlan.rsn.ie.bigtk_kde.key_id",
54786 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54787
54788 {&hf_ieee80211_rsn_ie_bigtk_bipn,
54789 {"BIPN", "wlan.rsn.ie.bigtk_kde.bipn",
54790 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54791
54792 {&hf_ieee80211_rsn_ie_bigtk_bigtk,
54793 {"BIGTK", "wlan.rsn.ie.bigtk_kde.bigtk",
54794 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54795
54796 {&hf_ieee80211_rsn_ie_mlo_link_info,
54797 {"Link Information", "wlan.rsn.ie.mlo_link.link_info",
54798 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54799
54800 {&hf_ieee80211_rsn_ie_mlo_linkid,
54801 {"LinkID", "wlan.rsn.ie.mlo_link.link_info.linkid",
54802 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54803
54804 {&hf_ieee80211_rsn_ie_mlo_rnse_present,
54805 {"RSNEInfo", "wlan.rsn.ie.mlo_link.link_info.rsneinfo",
54806 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54807
54808 {&hf_ieee80211_rsn_ie_mlo_rnsxe_present,
54809 {"RSNXEInfo", "wlan.rsn.ie.mlo_link.link_info.rsnxeinfo",
54810 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54811
54812 {&hf_ieee80211_rsn_ie_mlo_reserved,
54813 {"Reserved", "wlan.rsn.ie.mlo_link.link_info.reserved",
54814 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54815
54816 {&hf_ieee80211_rsn_ie_mlo_mac_addr,
54817 {"MAC Address", "wlan.rsn.ie.mlo_link.mac_addr",
54818 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54819
54820 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_key_id,
54821 {"Key ID", "wlan.rsn.ie.mlo_gtk.key_id",
54822 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54823
54824 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_tx,
54825 {"Tx", "wlan.rsn.ie.mlo_gtk.tx",
54826 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54827
54828 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_reserved,
54829 {"Reserved", "wlan.rsn.ie.mlo_gtk.reserved",
54830 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54831
54832 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_linkid,
54833 {"LinkID", "wlan.rsn.ie.mlo_gtk.linkid",
54834 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54835
54836 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_pn,
54837 {"PN", "wlan.rsn.ie.mlo_gtk.pn",
54838 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54839
54840 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_gtk,
54841 {"GTK", "wlan.rsn.ie.mlo_gtk.gtk",
54842 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54843
54844 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_key_id,
54845 {"Key ID", "wlan.rsn.ie.mlo_igtk.key_id",
54846 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54847
54848 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_ipn,
54849 {"IPN", "wlan.rsn.ie.mlo_igtk.ipn",
54850 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54851
54852 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_reserved,
54853 {"Reserved", "wlan.rsn.ie.mlo_igtk.reserved",
54854 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54855
54856 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_linkid,
54857 {"LinkID", "wlan.rsn.ie.mlo_igtk.linkid",
54858 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54859
54860 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_igtk,
54861 {"IGTK", "wlan.rsn.ie.mlo_igtk.igtk",
54862 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54863
54864 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_key_id,
54865 {"Key ID", "wlan.rsn.ie.mlo_bigtk.key_id",
54866 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54867
54868 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_ipn,
54869 {"IPN", "wlan.rsn.ie.mlo_bigtk.ipn",
54870 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54871
54872 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_reserved,
54873 {"Reserved", "wlan.rsn.ie.mlo_bigtk.reserved",
54874 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54875
54876 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_linkid,
54877 {"LinkID", "wlan.rsn.ie.mlo_bigtk.linkid",
54878 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54879
54880 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_bigtk,
54881 {"BIGTK", "wlan.rsn.ie.mlo_bigtk.bigtk",
54882 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54883
54884 {&hf_ieee80211_rsn_ie_unknown,
54885 {"RSN Unknown", "wlan.rsn.ie.unknown",
54886 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54887 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54888
54889 {&hf_ieee80211_marvell_ie_type,
54890 {"Type", "wlan.marvell.ie.type",
54891 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54892 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54893
54894 {&hf_ieee80211_marvell_ie_mesh_subtype,
54895 {"Subtype", "wlan.marvell.ie.subtype",
54896 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54897 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54898
54899 {&hf_ieee80211_marvell_ie_mesh_version,
54900 {"Version", "wlan.marvell.ie.version",
54901 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54902 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54903
54904 {&hf_ieee80211_marvell_ie_mesh_active_proto_id,
54905 {"Path Selection Protocol", "wlan.marvell.ie.proto_id",
54906 FT_UINT8, BASE_HEX, VALS(mesh_path_selection_codes)((0 ? (const struct _value_string*)0 : ((mesh_path_selection_codes
))))
, 0,
54907 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54908
54909 {&hf_ieee80211_marvell_ie_mesh_active_metric_id,
54910 {"Path Selection Metric", "wlan.marvell.ie.metric_id",
54911 FT_UINT8, BASE_HEX, VALS(mesh_metric_codes)((0 ? (const struct _value_string*)0 : ((mesh_metric_codes)))
)
, 0,
54912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54913
54914 {&hf_ieee80211_marvell_ie_mesh_cap,
54915 {"Mesh Capabilities", "wlan.marvell.ie.cap",
54916 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54918
54919 {&hf_ieee80211_marvell_ie_data,
54920 { "Marvell IE data", "wlan.marvell.data",
54921 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
54922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54923
54924 {&hf_ieee80211_extreme_mesh_ie_type,
54925 { "Type", "wlan.extreme_mesh.ie.type",
54926 FT_UINT8, BASE_HEX, VALS(extreme_mesh_ie_type_vals)((0 ? (const struct _value_string*)0 : ((extreme_mesh_ie_type_vals
))))
, 0,
54927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54928 {&hf_ieee80211_extreme_mesh_ie_services,
54929 { "Services", "wlan.extreme_mesh.ie.services",
54930 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54931 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54932 {&hf_ieee80211_extreme_mesh_ie_hello_f_root,
54933 { "Root", "wlan.extreme_mesh.ie.services.root",
54934 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_ROOT,
54935 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54936 {&hf_ieee80211_extreme_mesh_ie_hello_f_proxy,
54937 { "Proxy", "wlan.extreme_mesh.ie.services.proxy",
54938 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_PROXY,
54939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54940 {&hf_ieee80211_extreme_mesh_ie_hello_f_geo,
54941 { "Geo", "wlan.extreme_mesh.ie.services.geo",
54942 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_GEO,
54943 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54944 {&hf_ieee80211_extreme_mesh_ie_hello_f_path_pref,
54945 { "Path Preference", "wlan.extreme_mesh.ie.services.path_pref",
54946 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_PATH_PREF,
54947 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54948 {&hf_ieee80211_extreme_mesh_ie_hello_f_mobile,
54949 { "Mobile", "wlan.extreme_mesh.ie.services.mobile",
54950 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_MOBILE,
54951 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54952 {&hf_ieee80211_extreme_mesh_ie_htr,
54953 { "Hops to Root", "wlan.extreme_mesh.ie.htr",
54954 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54956 {&hf_ieee80211_extreme_mesh_ie_mtr,
54957 { "Metric to Root", "wlan.extreme_mesh.ie.mtr",
54958 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
54959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54960 {&hf_ieee80211_extreme_mesh_ie_root,
54961 { "Root Id", "wlan.extreme_mesh.ie.root",
54962 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54963 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54964 {&hf_ieee80211_extreme_mesh_ie_nh,
54965 { "Next Hop", "wlan.extreme_mesh.ie.nh",
54966 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54968 {&hf_ieee80211_extreme_mesh_ie_mesh_id,
54969 { "Mesh Id", "wlan.extreme_mesh.ie.mesh_id",
54970 FT_STRING, BASE_NONE, NULL((void*)0), 0,
54971 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54972 {&hf_ieee80211_extreme_mesh_ie_mp_id,
54973 { "Mesh Point Id", "wlan.extreme_mesh.ie.mp_id",
54974 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54976
54977 {&hf_ieee80211_atheros_ie_type,
54978 {"Type", "wlan.atheros.ie.type",
54979 FT_UINT8, BASE_HEX, VALS(atheros_ie_type_vals)((0 ? (const struct _value_string*)0 : ((atheros_ie_type_vals
))))
, 0,
54980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54981
54982 {&hf_ieee80211_atheros_ie_subtype,
54983 {"Subtype", "wlan.atheros.ie.subtype",
54984 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54986
54987 {&hf_ieee80211_atheros_ie_version,
54988 {"Version", "wlan.atheros.ie.version",
54989 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54991
54992 {&hf_ieee80211_atheros_ie_cap_f_turbop,
54993 {"Turbo Prime", "wlan.ie.atheros.capabilities.turbop",
54994 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_TURBOP,
54995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54996
54997 {&hf_ieee80211_atheros_ie_cap_f_comp,
54998 {"Compression", "wlan.ie.atheros.capabilities.comp",
54999 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_COMP,
55000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55001
55002 {&hf_ieee80211_atheros_ie_cap_f_ff,
55003 {"Fast Frames", "wlan.ie.atheros.capabilities.ff",
55004 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_FF,
55005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55006
55007 {&hf_ieee80211_atheros_ie_cap_f_xr,
55008 {"eXtended Range", "wlan.ie.atheros.capabilities.xr",
55009 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_XR,
55010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55011
55012 {&hf_ieee80211_atheros_ie_cap_f_ar,
55013 {"Advanced Radar", "wlan.ie.atheros.capabilities.ar",
55014 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_AR,
55015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55016
55017 {&hf_ieee80211_atheros_ie_cap_f_burst,
55018 {"Burst", "wlan.ie.atheros.capabilities.burst",
55019 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_BURST,
55020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55021
55022 {&hf_ieee80211_atheros_ie_cap_f_wme,
55023 {"CWMin tuning", "wlan.ie.atheros.capabilities.wme",
55024 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_WME,
55025 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55026
55027 {&hf_ieee80211_atheros_ie_cap_f_boost,
55028 {"Boost", "wlan.ie.atheros.capabilities.boost",
55029 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_BOOST,
55030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55031
55032 {&hf_ieee80211_atheros_ie_advcap_cap,
55033 {"Capabilities", "wlan.atheros.ie.advcap.cap",
55034 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55036
55037 {&hf_ieee80211_atheros_ie_advcap_defkey,
55038 {"Default key index", "wlan.atheros.ie.advcap.defkey",
55039 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
55040 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55041
55042 {&hf_ieee80211_atheros_ie_xr_info,
55043 {"Info", "wlan.atheros.ie.xr.info",
55044 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55046
55047 {&hf_ieee80211_atheros_ie_xr_base_bssid,
55048 {"Base BSS Id", "wlan.atheros.ie.xr.base_bssid",
55049 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
55050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55051
55052 {&hf_ieee80211_atheros_ie_xr_xr_bssid,
55053 {"XR BSS Id", "wlan.atheros.ie.xr.xr_bssid",
55054 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
55055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55056
55057 {&hf_ieee80211_atheros_ie_xr_xr_beacon,
55058 {"XR Beacon Interval", "wlan.atheros.ie.xr.xr_beacon",
55059 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (size_t) (beacon_interval_base_custom)), 0,
55060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55061
55062 {&hf_ieee80211_atheros_ie_xr_base_cap,
55063 {"Base capabilities", "wlan.atheros.ie.xr.base_cap",
55064 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55066
55067 {&hf_ieee80211_atheros_ie_xr_xr_cap,
55068 {"XR capabilities", "wlan.atheros.ie.xr.xr_cap",
55069 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55071
55072 {&hf_ieee80211_atheros_ie_data,
55073 {"Atheros IE data", "wlan.atheros.data",
55074 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55075 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55076
55077 {&hf_ieee80211_aironet_ie_type,
55078 {"Aironet IE type", "wlan.aironet.type",
55079 FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals)((0 ? (const struct _value_string*)0 : ((aironet_ie_type_vals
))))
, 0,
55080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55081
55082 {&hf_ieee80211_aironet_ie_dtpc,
55083 {"Aironet IE CCX DTCP", "wlan.aironet.dtpc",
55084 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
55085 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55086
55087 {&hf_ieee80211_aironet_ie_dtpc_unknown,
55088 {"Aironet IE CCX DTCP Unknown", "wlan.aironet.dtpc_unknown",
55089 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55091
55092 {&hf_ieee80211_aironet_ie_version,
55093 {"Aironet IE CCX version", "wlan.aironet.version",
55094 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55096
55097 {&hf_ieee80211_aironet_ie_data,
55098 { "Aironet IE data", "wlan.aironet.data",
55099 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
55100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55101
55102 {&hf_ieee80211_qbss_version,
55103 {"QBSS Version", "wlan.qbss.version",
55104 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55106
55107 {&hf_ieee80211_qbss_scount,
55108 {"Station Count", "wlan.qbss.scount",
55109 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55110 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55111
55112 {&hf_ieee80211_qbss_cu,
55113 {"Channel Utilization", "wlan.qbss.cu",
55114 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55115 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55116
55117 {&hf_ieee80211_qbss_adc,
55118 {"Available Admission Capacity", "wlan.qbss.adc",
55119 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55121
55122 {&hf_ieee80211_qbss2_cu,
55123 {"Channel Utilization", "wlan.qbss2.cu",
55124 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55126
55127 {&hf_ieee80211_qbss2_gl,
55128 {"G.711 CU Quantum", "wlan.qbss2.glimit",
55129 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55131
55132 {&hf_ieee80211_qbss2_cal,
55133 {"Call Admission Limit", "wlan.qbss2.cal",
55134 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55136
55137 {&hf_ieee80211_qbss2_scount,
55138 {"Station Count", "wlan.qbss2.scount",
55139 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55141
55142 {&hf_ieee80211_aironet_ie_qos_reserved,
55143 {"Aironet IE QoS reserved", "wlan.aironet.qos.reserved",
55144 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55145 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55146
55147 {&hf_ieee80211_aironet_ie_qos_paramset,
55148 {"Aironet IE QoS paramset", "wlan.aironet.qos.paramset",
55149 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55151
55152 {&hf_ieee80211_aironet_ie_qos_val,
55153 {"Aironet IE QoS valueset", "wlan.aironet.qos.val",
55154 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55156
55157 {&hf_ieee80211_aironet_ie_clientmfp,
55158 {"Aironet IE Client MFP", "wlan.aironet.clientmfp",
55159 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
55160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55161
55162 /* Vendor Specific : SGDSN */
55163 {&hf_ieee80211_vs_sgdsn_tag,
55164 {"Tag", "wlan.vs.sgdsn.tag",
55165 FT_NONE, BASE_NONE, NULL((void*)0), 0,
55166 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55167
55168 {&hf_ieee80211_vs_sgdsn_type,
55169 {"Type", "wlan.vs.sgdsn.type",
55170 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_sgdsn_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_sgdsn_type_vals
))))
, 0,
55171 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55172
55173 {&hf_ieee80211_vs_sgdsn_length,
55174 {"Length", "wlan.vs.sgdsn.length",
55175 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55176 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55177
55178 {&hf_ieee80211_vs_sgdsn_version,
55179 {"Version", "wlan.vs.sgdsn.tag.version",
55180 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55182
55183 {&hf_ieee80211_vs_sgdsn_icaomfrcode,
55184 {"ICAO Manufacturer Code", "wlan.vs.sgdsn.tag.icaomfrcode",
55185 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55187
55188 {&hf_ieee80211_vs_sgdsn_manufacturer,
55189 {"Manufacturer", "wlan.vs.sgdsn.tag.manufacturer",
55190 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55191 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55192
55193 {&hf_ieee80211_vs_sgdsn_model,
55194 {"Model", "wlan.vs.sgdsn.tag.model",
55195 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55196 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55197
55198 {&hf_ieee80211_vs_sgdsn_serialnumber,
55199 {"Serial number", "wlan.vs.sgdsn.tag.serialnumber",
55200 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55202
55203 {&hf_ieee80211_vs_sgdsn_serialnumber_len,
55204 {"Serial number length", "wlan.vs.sgdsn.tag.serialnumber.len",
55205 FT_UINT8, BASE_CUSTOM, CF_FUNC(vs_sgdsn_serialnumber_len_custom)((const void *) (size_t) (vs_sgdsn_serialnumber_len_custom)), 0,
55206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55207
55208 {&hf_ieee80211_vs_sgdsn_gpscoord,
55209 {"GPS Coord", "wlan.vs.sgdsn.tag.gpscoord",
55210 FT_INT32, BASE_DEC, NULL((void*)0), 0,
55211 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55212
55213 {&hf_ieee80211_vs_sgdsn_altitude,
55214 {"Altitude", "wlan.vs.sgdsn.tag.altitude",
55215 FT_INT16, BASE_DEC, NULL((void*)0), 0,
55216 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55217
55218 {&hf_ieee80211_vs_sgdsn_speed,
55219 {"Speed", "wlan.vs.sgdsn.tag.speed",
55220 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55221 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55222
55223 {&hf_ieee80211_vs_sgdsn_heading,
55224 {"Heading", "wlan.vs.sgdsn.tag.heading",
55225 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55226 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55227
55228 /* Vendor Specific : Nintendo */
55229 {&hf_ieee80211_vs_nintendo_type,
55230 {"Type", "wlan.vs.nintendo.type",
55231 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_nintendo_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_nintendo_type_vals
))))
, 0,
55232 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55233
55234 {&hf_ieee80211_vs_nintendo_length,
55235 {"Length", "wlan.vs.nintendo.length",
55236 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55237 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55238
55239 {&hf_ieee80211_vs_nintendo_servicelist,
55240 {"Servicelist", "wlan.vs.nintendo.servicelist",
55241 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55242 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55243
55244 {&hf_ieee80211_vs_nintendo_service,
55245 {"Service", "wlan.vs.nintendo.service",
55246 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55247 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55248
55249 {&hf_ieee80211_vs_nintendo_consoleid,
55250 {"Console ID", "wlan.vs.nintendo.consoleid",
55251 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55253
55254 {&hf_ieee80211_vs_nintendo_unknown,
55255 {"Unknown", "wlan.vs.nintendo.unknown",
55256 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55258
55259 /* Vendor Specific : Aruba Networks */
55260 {&hf_ieee80211_vs_aruba_subtype,
55261 {"Subtype", "wlan.vs.aruba.subtype",
55262 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_aruba_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_aruba_subtype_vals
))))
, 0,
55263 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55264
55265 {&hf_ieee80211_vs_aruba_apname,
55266 {"AP Name", "wlan.vs.aruba.ap_name",
55267 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55268 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55269
55270 {&hf_ieee80211_vs_aruba_data,
55271 {"Data", "wlan.vs.aruba.data",
55272 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55273 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55274
55275 {&hf_ieee80211_vs_aruba_gps_length,
55276 { "GPS Length", "wlan.ie.aruba.gps.length",
55277 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55278 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55279
55280 { &hf_ieee80211_vs_aruba_gps_subversion,
55281 { "GPS Subversion", "wlan.ie.aruba.gps.subversion",
55282 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55283 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55284
55285 { &hf_ieee80211_vs_aruba_gps_hop,
55286 { "GPS Hop", "wlan.ie.aruba.gps.hop",
55287 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55288 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55289
55290 { &hf_ieee80211_vs_aruba_gps_latitude,
55291 { "GPS Latitude", "wlan.ie.aruba.gps.latitude",
55292 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55293 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55294
55295 { &hf_ieee80211_vs_aruba_gps_longitude,
55296 { "GPS Longitude", "wlan.ie.aruba.gps.longitude",
55297 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55298 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55299
55300 { &hf_ieee80211_vs_aruba_gps_major_axis,
55301 { "GPS Major Axis", "wlan.ie.aruba.gps.major_axis",
55302 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55303 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55304
55305 { &hf_ieee80211_vs_aruba_gps_minor_axis,
55306 { "GPS Minor Axis", "wlan.ie.aruba.gps.minor_axis",
55307 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55308 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55309
55310 { &hf_ieee80211_vs_aruba_gps_orientation,
55311 { "GPS Orientation", "wlan.ie.aruba.gps.orientation",
55312 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55313 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55314
55315 { &hf_ieee80211_vs_aruba_gps_distance,
55316 { "GPS Distance", "wlan.ie.aruba.gps.distance",
55317 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55318 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55319
55320 /* Vendor Specific : Routerboard */
55321 {&hf_ieee80211_vs_routerboard_unknown,
55322 {"Unknown", "wlan.vs.routerboard.unknown",
55323 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55324 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55325
55326 {&hf_ieee80211_vs_routerboard_subitem,
55327 {"Sub IE", "wlan.vs.routerboard.subitem",
55328 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55329 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55330
55331 {&hf_ieee80211_vs_routerboard_subtype,
55332 {"Subtype", "wlan.vs.routerboard.subtype",
55333 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55334 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55335
55336 {&hf_ieee80211_vs_routerboard_sublength,
55337 {"Sublength", "wlan.vs.routerboard.sublength",
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_vs_routerboard_subdata,
55342 {"Subdata", "wlan.vs.routerboard.subdata",
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_vs_routerboard_subtype1_prefix,
55347 {"Subtype 1 Prefix", "wlan.vs.routerboard.subtype1_prefix",
55348 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55349 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55350
55351 {&hf_ieee80211_vs_routerboard_subtype1_data,
55352 {"Subtype 1 Data", "wlan.vs.routerboard.subtype1_data",
55353 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55354 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55355
55356 /* Vendor Specific : Meru (Fortinet) */
55357 {&hf_ieee80211_vs_meru_subitem,
55358 {"Sub IE", "wlan.vs.meru.unknown",
55359 FT_NONE, BASE_NONE, NULL((void*)0), 0,
55360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55361
55362 {&hf_ieee80211_vs_meru_subtype,
55363 {"Subtype", "wlan.vs.meru.subtype",
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_meru_sublength,
55368 {"Sublength", "wlan.vs.meru.sublength",
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_meru_subdata,
55373 {"Subdata", "wlan.vs.meru.subdata",
55374 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55376
55377 /* Vendor Specific : Extreme (Zebra) */
55378 {&hf_ieee80211_vs_extreme_subtype,
55379 {"Subtype", "wlan.vs.extreme.subtype",
55380 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_extreme_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_extreme_subtype_vals
))))
, 0,
55381 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55382
55383 {&hf_ieee80211_vs_extreme_subdata,
55384 {"Subdata", "wlan.vs.extreme.subdata",
55385 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55386 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55387
55388 {&hf_ieee80211_vs_extreme_unknown,
55389 {"Unknown", "wlan.vs.extreme.unknown",
55390 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55391 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55392
55393 {&hf_ieee80211_vs_extreme_ap_length,
55394 {"AP Length", "wlan.vs.extreme.ap_length",
55395 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55396 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55397
55398 {&hf_ieee80211_vs_extreme_ap_name,
55399 {"AP Name", "wlan.vs.extreme.ap_name",
55400 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55401 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55402
55403 /* Vendor Specific : Aerohive */
55404 {&hf_ieee80211_vs_aerohive_version,
55405 {"Version", "wlan.vs.aerohive.version",
55406 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55407 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55408
55409 {&hf_ieee80211_vs_aerohive_subtype,
55410 {"Subtype", "wlan.vs.aerohive.subtype",
55411 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55412 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55413
55414 {&hf_ieee80211_vs_aerohive_hostname_length,
55415 {"Host Name Length", "wlan.vs.aerohive.hostname_length",
55416 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55418
55419 {&hf_ieee80211_vs_aerohive_hostname,
55420 {"Host Name", "wlan.vs.aerohive.hostname",
55421 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55423
55424 {&hf_ieee80211_vs_aerohive_data,
55425 {"Data", "wlan.vs.aerohive.data",
55426 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55427 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55428
55429 /* Vendor Specific : Mist */
55430 {&hf_ieee80211_vs_mist_ap_name,
55431 {"AP Name", "wlan.vs.mist.apname",
55432 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55433 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55434
55435 {&hf_ieee80211_vs_mist_data,
55436 {"Data", "wlan.vs.mist.data",
55437 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55438 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55439
55440 {&hf_ieee80211_vs_ubiquiti_type,
55441 {"Subtype", "wlan.vs.ubiquiti.type",
55442 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_ubiquiti_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_ubiquiti_type_vals
))))
, 0,
55443 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55444
55445 {&hf_ieee80211_vs_ubiquiti_ap_name,
55446 {"AP Name", "wlan.vs.ubiquiti.ap_name",
55447 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55448 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55449
55450 {&hf_ieee80211_vs_ubiquiti_data,
55451 {"Data", "wlan.vs.ubiquiti.data",
55452 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55453 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55454
55455 /* Vendor Specific: Cisco */
55456 {&hf_ieee80211_vs_cisco_ap_name_v2,
55457 {"AP Name", "wlan.vs.cisco.apname_v2",
55458 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55459 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55460
55461 /* Vendor Specific : Ruckus */
55462 {&hf_ieee80211_vs_ruckus_ap_name,
55463 {"AP Name", "wlan.vs.ruckus.apname",
55464 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55465 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55466
55467 {&hf_ieee80211_vs_ruckus_data,
55468 {"Data", "wlan.vs.ruckus.data",
55469 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55470 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55471
55472 /* Vendor Specific : Alcatel-Lucent */
55473 {&hf_ieee80211_vs_alcatel_ap_name,
55474 {"AP Name", "wlan.vs.alcatel.apname",
55475 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55476 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55477
55478 {&hf_ieee80211_vs_alcatel_data,
55479 {"Data", "wlan.vs.alcatel.data",
55480 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55481 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55482
55483 /* Vendor Specific : Fortinet */
55484 {&hf_ieee80211_vs_fortinet_subtype,
55485 {"Subtype", "wlan.vs.fortinet.subtype",
55486 FT_UINT16, BASE_DEC, VALS(ieee80211_vs_fortinet_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_fortinet_subtype_vals
))))
, 0,
55487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55488
55489 {&hf_ieee80211_vs_fortinet_system_type,
55490 {"Type", "wlan.vs.fortinet.system.type",
55491 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_fortinet_system_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_fortinet_system_type_vals
))))
, 0,
55492 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55493
55494 {&hf_ieee80211_vs_fortinet_system_length,
55495 {"Length", "wlan.vs.fortinet.system.length",
55496 FT_UINT8, 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_fortinet_system_apname,
55500 {"AP Name", "wlan.vs.fortinet.system.ap_name",
55501 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55503
55504 {&hf_ieee80211_vs_fortinet_system_apmodel,
55505 {"AP Model", "wlan.vs.fortinet.system.ap_model",
55506 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55508
55509 {&hf_ieee80211_vs_fortinet_system_apserial,
55510 {"AP Serial", "wlan.vs.fortinet.system.ap_serial",
55511 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55513
55514 {&hf_ieee80211_vs_fortinet_data,
55515 {"Data", "wlan.vs.fortinet.data",
55516 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55518
55519 /* Vendor Specific : Arista Networks */
55520 {&hf_ieee80211_vs_arista_subtype,
55521 {"Subtype", "wlan.vs.arista.subtype",
55522 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_arista_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_arista_subtype_vals
))))
, 0,
55523 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55524
55525 {&hf_ieee80211_vs_arista_apname,
55526 {"AP Name", "wlan.vs.arista.ap_name",
55527 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55528 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55529
55530 {&hf_ieee80211_vs_arista_data,
55531 {"Data", "wlan.vs.arista.data",
55532 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55533 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55534
55535 /* Vendor Specific : Wi-SUN */
55536 {&hf_ieee80211_vs_wisun_type,
55537 {"Data Type", "wlan.vs.wisun.type",
55538 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_wisun_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_wisun_type_vals
))))
, 0,
55539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55540 {&hf_ieee80211_vs_wisun_ptkid,
55541 {"PTK ID", "wlan.vs.wisun.ptkid",
55542 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55543 {&hf_ieee80211_vs_wisun_gtkl,
55544 {"GTK Liveness", "wlan.vs.wisun.gtkl",
55545 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55546 {&hf_ieee80211_vs_wisun_gtkl_gtk0,
55547 {"GTK[0]", "wlan.vs.wisun.gtkl.gtk0",
55548 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK00x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55549 {&hf_ieee80211_vs_wisun_gtkl_gtk1,
55550 {"GTK[1]", "wlan.vs.wisun.gtkl.gtk1",
55551 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK10x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55552 {&hf_ieee80211_vs_wisun_gtkl_gtk2,
55553 {"GTK[2]", "wlan.vs.wisun.gtkl.gtk2",
55554 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK20x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55555 {&hf_ieee80211_vs_wisun_gtkl_gtk3,
55556 {"GTK[3]", "wlan.vs.wisun.gtkl.gtk3",
55557 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK30x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55558 {&hf_ieee80211_vs_wisun_nr,
55559 {"Node Role", "wlan.vs.wisun.nr",
55560 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_wisun_nr_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_wisun_nr_vals
))))
, 0,
55561 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55562 {&hf_ieee80211_vs_wisun_lgtkl,
55563 {"LGTK Liveness", "wlan.vs.wisun.lgtkl",
55564 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55565 {&hf_ieee80211_vs_wisun_lgtkl_lgtk0,
55566 {"LGTK[0]", "wlan.vs.wisun.lgtkl.lgtk0",
55567 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_LGTKL_LGTK00x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55568 {&hf_ieee80211_vs_wisun_lgtkl_lgtk1,
55569 {"LGTK[1]", "wlan.vs.wisun.lgtkl.lgtk1",
55570 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_LGTKL_LGTK10x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55571 {&hf_ieee80211_vs_wisun_lgtkl_lgtk2,
55572 {"LGTK[2]", "wlan.vs.wisun.lgtkl.lgtk2",
55573 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_LGTKL_LGTK20x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55574 {&hf_ieee80211_vs_wisun_lgtk_key_id,
55575 {"Key ID", "wlan.vs.wisun.lgtk.key_id",
55576 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55577 {&hf_ieee80211_vs_wisun_lgtk_lgtk,
55578 {"LGTK", "wlan.vs.wisun.lgtk.lgtk",
55579 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55580 {&hf_ieee80211_vs_wisun_data,
55581 {"Data", "wlan.vs.wisun.data",
55582 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55583
55584 /* Vendor Specific : apple */
55585 {&hf_ieee80211_vs_apple_type,
55586 {"Type", "wlan.vs.apple.type",
55587 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55588 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55589
55590 {&hf_ieee80211_vs_apple_subtype,
55591 {"Subtype", "wlan.vs.apple.subtype",
55592 FT_UINT16, BASE_DEC, VALS(ieee80211_vs_apple_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_apple_subtype_vals
))))
, 0,
55593 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55594
55595 {&hf_ieee80211_vs_apple_length,
55596 {"Length", "wlan.vs.apple.length",
55597 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55598 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55599
55600 {&hf_ieee80211_vs_apple_data,
55601 {"Data", "wlan.vs.apple.data",
55602 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55603 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55604
55605 {&hf_ieee80211_tsinfo,
55606 {"Traffic Stream (TS) Info", "wlan.ts_info",
55607 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
55608 "Traffic Stream (TS) Info field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55609
55610 {&hf_ieee80211_tsinfo_type,
55611 {"Traffic Type", "wlan.ts_info.type",
55612 FT_UINT24, BASE_DEC, VALS(tsinfo_type)((0 ? (const struct _value_string*)0 : ((tsinfo_type)))), 0x000001,
55613 "Traffic Stream (TS) Info Traffic Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55614
55615 {&hf_ieee80211_tsinfo_tsid,
55616 {"Traffic Stream ID (TSID)", "wlan.ts_info.tsid",
55617 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00001E,
55618 "Traffic Stream ID (TSID) Info TSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55619
55620 {&hf_ieee80211_tsinfo_dir,
55621 {"Direction", "wlan.ts_info.dir",
55622 FT_UINT24, BASE_DEC, VALS(tsinfo_direction)((0 ? (const struct _value_string*)0 : ((tsinfo_direction)))), 0x000060,
55623 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55624
55625 {&hf_ieee80211_tsinfo_access,
55626 {"Access Policy", "wlan.ts_info.access",
55627 FT_UINT24, BASE_DEC, VALS(tsinfo_access)((0 ? (const struct _value_string*)0 : ((tsinfo_access)))), 0x000180,
55628 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55629
55630 {&hf_ieee80211_tsinfo_agg,
55631 {"Aggregation", "wlan.ts_info.agg",
55632 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000200,
55633 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55634
55635 {&hf_ieee80211_tsinfo_apsd,
55636 {"Automatic Power-Save Delivery (APSD)", "wlan.ts_info.apsd",
55637 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000400,
55638 "Traffic Stream (TS) Info Automatic Power-Save Delivery (APSD)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55639
55640 {&hf_ieee80211_tsinfo_up,
55641 {"User Priority", "wlan.ts_info.up",
55642 FT_UINT24, BASE_DEC, VALS(qos_up)((0 ? (const struct _value_string*)0 : ((qos_up)))), 0x003800,
55643 "Traffic Stream (TS) Info User Priority", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55644
55645 {&hf_ieee80211_tsinfo_ack,
55646 {"Ack Policy", "wlan.ts_info.ack",
55647 FT_UINT24, BASE_DEC, VALS(ack_policy)((0 ? (const struct _value_string*)0 : ((ack_policy)))), 0x00C000,
55648 "Traffic Stream (TS) Info Ack Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55649
55650 {&hf_ieee80211_tsinfo_sched,
55651 {"Schedule", "wlan.ts_info.sched",
55652 FT_UINT24, BASE_DEC, NULL((void*)0), 0x010000,
55653 "Traffic Stream (TS) Info Schedule", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55654
55655 {&hf_ieee80211_tsinfo_rsv,
55656 {"Reserved", "wlan.ts_info.rsv",
55657 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFE0000,
55658 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55659
55660 {&hf_ieee80211_tspec_nor_msdu,
55661 {"Normal MSDU Size", "wlan.tspec.nor_msdu",
55662 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55663 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55664
55665 {&hf_ieee80211_tspec_max_msdu,
55666 {"Maximum MSDU Size", "wlan.tspec.max_msdu",
55667 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55668 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55669
55670 {&hf_ieee80211_tspec_min_srv,
55671 {"Minimum Service Interval", "wlan.tspec.min_srv",
55672 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55673 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55674
55675 {&hf_ieee80211_tspec_max_srv,
55676 {"Maximum Service Interval", "wlan.tspec.max_srv",
55677 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55678 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55679
55680 {&hf_ieee80211_tspec_inact_int,
55681 {"Inactivity Interval", "wlan.tspec.inact_int",
55682 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55684
55685 {&hf_ieee80211_tspec_susp_int,
55686 {"Suspension Interval", "wlan.tspec.susp_int",
55687 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55688 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55689
55690 {&hf_ieee80211_tspec_srv_start,
55691 {"Service Start Time", "wlan.tspec.srv_start",
55692 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55693 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55694
55695 {&hf_ieee80211_tspec_min_data,
55696 {"Minimum Data Rate", "wlan.tspec.min_data",
55697 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55698 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55699
55700 {&hf_ieee80211_tspec_mean_data,
55701 {"Mean Data Rate", "wlan.tspec.mean_data",
55702 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55703 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55704
55705 {&hf_ieee80211_tspec_peak_data,
55706 {"Peak Data Rate", "wlan.tspec.peak_data",
55707 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55708 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55709
55710 {&hf_ieee80211_tspec_burst_size,
55711 {"Burst Size", "wlan.tspec.burst_size",
55712 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55713 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55714
55715 {&hf_ieee80211_tspec_delay_bound,
55716 {"Delay Bound", "wlan.tspec.delay_bound",
55717 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55719
55720 {&hf_ieee80211_tspec_min_phy,
55721 {"Minimum PHY Rate", "wlan.tspec.min_phy",
55722 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55724
55725 {&hf_ieee80211_tspec_surplus,
55726 {"Surplus Bandwidth Allowance", "wlan.tspec.surplus",
55727 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55728 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55729
55730 {&hf_ieee80211_tspec_medium,
55731 {"Medium Time", "wlan.tspec.medium",
55732 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55734
55735 {&hf_ieee80211_tspec_dmg,
55736 {"DMG attributes", "wlan.tspec.dmg",
55737 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55739
55740 {&hf_ieee80211_ts_delay,
55741 {"Traffic Stream (TS) Delay", "wlan.ts_delay",
55742 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55744
55745 {&hf_ieee80211_tclas_process,
55746 {"Processing", "wlan.tclas_proc.processing",
55747 FT_UINT8, BASE_DEC, VALS(ieee80211_tclas_process_flag)((0 ? (const struct _value_string*)0 : ((ieee80211_tclas_process_flag
))))
, 0,
55748 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55749
55750 {&hf_ieee80211_tag_ext_supp_rates,
55751 {"Extended Supported Rates", "wlan.extended_supported_rates",
55752 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_supported_rates_vals_ext, 0x0,
55753 "In Mbit/sec, (B) for Basic Rates", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55754
55755 {&hf_ieee80211_sched_info,
55756 {"Schedule Info", "wlan.sched.sched_info",
55757 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
55758 "Schedule Info field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55759
55760 {&hf_ieee80211_sched_info_agg,
55761 {"Schedule Aggregation", "wlan.sched_info.agg",
55762 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0001,
55763 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55764
55765 {&hf_ieee80211_sched_info_tsid,
55766 {"Schedule Traffic Stream ID (TSID)", "wlan.sched_info.tsid",
55767 FT_UINT16, BASE_DEC, NULL((void*)0), 0x001E,
55768 "Traffic Stream ID (TSID) Info TSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55769
55770 {&hf_ieee80211_sched_info_dir,
55771 {"Schedule Direction", "wlan.sched_info.dir",
55772 FT_UINT16, BASE_DEC, VALS(tsinfo_direction)((0 ? (const struct _value_string*)0 : ((tsinfo_direction)))), 0x0060,
55773 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55774
55775 {&hf_ieee80211_sched_srv_start,
55776 {"Service Start Time", "wlan.sched.srv_start",
55777 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
55778 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55779
55780 {&hf_ieee80211_sched_srv_int,
55781 {"Service Interval", "wlan.sched.srv_int",
55782 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
55783 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55784
55785 {&hf_ieee80211_sched_spec_int,
55786 {"Specification Interval", "wlan.sched.spec_int",
55787 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
55788 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55789
55790 {&hf_ieee80211_aruba,
55791 {"Aruba Type", "wlan.aruba.type",
55792 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &aruba_mgt_typevals_ext, 0,
55793 "Aruba Management", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55794
55795 {&hf_ieee80211_aruba_hb_seq,
55796 {"Aruba Heartbeat Sequence", "wlan.aruba.heartbeat_sequence",
55797 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
55798 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55799
55800 {&hf_ieee80211_aruba_mtu,
55801 {"Aruba MTU Size", "wlan.aruba.mtu_size",
55802 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55803 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55804
55805 /* Start: HT Control (+HTC) */
55806 {&hf_ieee80211_htc,
55807 {"HT Control (+HTC)", "wlan.htc",
55808 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
55809 "High Throughput Control (+HTC)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55810
55811 {&hf_ieee80211_htc_vht,
55812 {"VHT", "wlan.htc.vht",
55813 FT_BOOLEAN, 32, NULL((void*)0), HTC_VHT0x00000001,
55814 "High Throughput Control HT/VHT flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55815
55816 {&hf_ieee80211_htc_he,
55817 {"HE", "wlan.htc.he",
55818 FT_BOOLEAN, 32, NULL((void*)0), HTC_HE0x00000002,
55819 "High Efficiency Control HE flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55820
55821 {&hf_ieee80211_htc_he_ctrl_id,
55822 {"Control ID", "wlan.htc.he.a_control.ctrl_id",
55823 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55824
55825 {&hf_ieee80211_he_a_control_padding,
55826 {"Padding", "wlan.htc.he.a_control.padding",
55827 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55828
55829 {&hf_ieee80211_he_trs_he_tb_ppdu_len,
55830 {"HE TB PPDU Length", "wlan.htc.he.a_control.umrs.he_tb_ppdu_len",
55831 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55832
55833 {&hf_ieee80211_he_trs_ru_allocation,
55834 {"RU Allocation", "wlan.htc.he.a_control.umrs.ru_allocation",
55835 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00001fe0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55836
55837 {&hf_ieee80211_he_dl_tx_power,
55838 {"DL Tx Power", "wlan.htc.he.a_control.umrs.dl_tx_power",
55839 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0003e000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55840
55841 {&hf_ieee80211_he_ul_target_rssi,
55842 {"UL Target RSSI", "wlan.htc.he.a_control.umrs.ul_target_rssi",
55843 FT_UINT32, BASE_CUSTOM, CF_FUNC(ul_target_rssi_base_custom)((const void *) (size_t) (ul_target_rssi_base_custom)),
55844 0x007c0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55845
55846 {&hf_ieee80211_he_ul_mcs,
55847 {"UL MCS", "wlan.htc.he.a_control.umrs.ul_mcs",
55848 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55849
55850 {&hf_ieee80211_he_ul_reserved,
55851 {"reserved", "wlan.htc.he.a_control.umrs.reserved",
55852 FT_UINT32, BASE_HEX, NULL((void*)0), 0x02000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55853
55854 {&hf_ieee80211_he_om_rx_nss,
55855 {"Rx NSS", "wlan.htc.he.a_control.om.rx_nss",
55856 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55857
55858 {&hf_ieee80211_he_om_channel_width,
55859 {"Channel Width", "wlan.htc.he.a_control.om.channel_width",
55860 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000018, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55861
55862 {&hf_ieee80211_he_om_ul_mu_disable,
55863 {"UL MU Disable", "wlan.htc.he.a_control.om.ul_mu_disable",
55864 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55865
55866 {&hf_ieee80211_he_om_tx_nsts,
55867 {"Tx NSTS", "wlan.htc.he.a_control.om.tx_nsts",
55868 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000001c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55869
55870 {&hf_ieee80211_he_om_er_su_disable,
55871 {"ER SU Disable", "wlan.htc.he.a_control.om.er_su_disable",
55872 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55873
55874 {&hf_ieee80211_he_om_dl_mu_mimo_resound,
55875 {"DL MU-MIMO Resound Recommendation",
55876 "wlan.htc.he.a_control.om.dl_mu_mimo_resound_recommendation",
55877 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55878
55879 {&hf_ieee80211_he_om_ul_mu_data_disable,
55880 {"UL MU Data Disable", "wlan.htc.he.a_control.om.ul_mu_data_disable",
55881 FT_BOOLEAN, 32, NULL((void*)0), 0x00000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55882
55883 {&hf_ieee80211_he_hla_unsolicited_mfb,
55884 {"Unsolicited MFB", "wlan.htc.he.a_control.hla.unsolicited_mfb",
55885 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55886
55887 {&hf_ieee80211_he_hla_mrq,
55888 {"MRQ", "wlan.htc.he.a_control.hla.mrq",
55889 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55890
55891 {&hf_ieee80211_he_hla_nss,
55892 {"NSS", "wlan.htc.he.a_control.hla.NSS",
55893 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001c, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55894
55895 {&hf_ieee80211_he_hla_he_mcs,
55896 {"HE-MCS", "wlan.htc.he.a_control.hla.he_mcs",
55897 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000001e0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55898
55899 {&hf_ieee80211_he_hla_dcm,
55900 {"DCM", "wlan.htc.he.a_control.hla.dcm",
55901 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55902
55903 {&hf_ieee80211_he_hla_ru,
55904 {"RU", "wlan.htc.he.a_control.hla.ru",
55905 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0003fc00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55906
55907 {&hf_ieee80211_he_hla_bw,
55908 {"BW", "wlan.htc.he.a_control.hla.bw",
55909 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000c0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55910
55911 {&hf_ieee80211_he_hla_msi_ppdu_type,
55912 {"MSI/PPDU Type", "wlan.htc.he.a_control.hla.msi_ppdu_type",
55913 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00700000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55914
55915 {&hf_ieee80211_he_hla_tx_bf,
55916 {"Tx BF", "wlan.htc.he.a_control.hla.tx_bf",
55917 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) }},
55918
55919 {&hf_ieee80211_he_hla_reserved,
55920 {"Reserved", "wlan.htc.he.a_control.hla.reserved",
55921 FT_UINT32, BASE_HEX, NULL((void*)0), 0x03000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55922
55923 {&hf_ieee80211_he_bsr_aci_bitmap,
55924 {"ACI Bitmap", "wlan.htc.he.a_control.bsr.aci_bitmap",
55925 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55926
55927 {&hf_ieee80211_he_bsr_delta_tid,
55928 {"Delta TID", "wlan.htc.he.a_control.bsr.delta_tid",
55929 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55930
55931 {&hf_ieee80211_he_bsr_aci_high,
55932 {"ACI High", "wlan.htc.he.a_control.bsr.aci_high",
55933 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55934
55935 {&hf_ieee80211_he_bsr_scaling_factor,
55936 {"Scaling Factor", "wlan.htc.he.a_control.bsr.scaling_factor",
55937 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55938
55939 {&hf_ieee80211_he_bsr_queue_size_high,
55940 {"Queue Size High", "wlan.htc.he.a_control.bsr.queue_size_high",
55941 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0003fc00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55942
55943 {&hf_ieee80211_he_bsr_queue_size_all,
55944 {"Queue Size All", "wlan.htc.he.a_control.bsr.queue_size_all",
55945 FT_UINT32, BASE_HEX, NULL((void*)0), 0x03fc0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55946
55947 {&hf_ieee80211_he_uph_ul_power_headroom,
55948 {"UL Power Headroom", "wlan.htc.he.a_control.uph.ul_power_headroom",
55949 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55950
55951 {&hf_ieee80211_he_uph_ul_min_transmit_power_flag,
55952 {"Minimum Transmit Power Flag", "wlan.htc.he.a_control.uph.min_transmit_power_flag",
55953 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55954
55955 {&hf_ieee80211_he_uph_reserved,
55956 {"Reserved", "wlan.htc.he.a_control.uph.reserved",
55957 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55958
55959 {&hf_ieee80211_he_btc_avail_chan,
55960 {"Available Channel Bitmap", "wlan.htc.he.a_control.bqr.avail_chan_bitmap",
55961 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55962
55963 {&hf_ieee80211_he_btc_reserved,
55964 {"Reserved", "wlan.htc.he.a_control.bqr.reserved",
55965 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55966
55967 {&hf_ieee80211_he_cci_ac_constraint,
55968 {"AC Constraint", "wlan.htc.he.a_control.cci.ac_constraint",
55969 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55970
55971 {&hf_ieee80211_he_cci_rdg_more_ppdu,
55972 {"RDG/More PPDU", "wlan.htc.he.a_control.cci.rdg_more_ppdu",
55973 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55974
55975 {&hf_ieee80211_he_cci_sr_ppdu_indic,
55976 {"PSRT PPDU", "wlan.htc.he.a_control.cci.sr_ppdu_indic",
55977 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55978
55979 {&hf_ieee80211_he_cci_reserved,
55980 {"Reserved", "wlan.htc.he.a_control.cci.reserved",
55981 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000F8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55982
55983 {&hf_ieee80211_he_eht_om_rx_nss_ext,
55984 {"Rx NSS Extension", "wlan.htc.he.a_control.eht_om.rx_nss_ext",
55985 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55986
55987 {&hf_ieee80211_he_eht_om_chan_w_ext,
55988 {"Channel Width Extension", "wlan.htc.he.a_control.eht_om.chan_w_ext",
55989 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55990
55991 {&hf_ieee80211_he_eht_om_tx_nsts_ext,
55992 {"Tx NSTS Extension", "wlan.htc.he.a_control.eht_om.tx_nsts_ext",
55993 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55994
55995 {&hf_ieee80211_he_eht_om_reserved,
55996 {"Reserved", "wlan.htc.he.a_control.eht_om.reserved",
55997 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55998
55999 {&hf_ieee80211_he_srs_ppdu_resp_dur,
56000 {"PPDU Response Duration", "wlan.htc.he.a_control.srs.ppdu_resp_dur",
56001 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000000FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56002
56003 {&hf_ieee80211_he_srs_reserved,
56004 {"Reserved", "wlan.htc.he.a_control.srs.reserved",
56005 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56006
56007 {&hf_ieee80211_he_aar_assisted_ap_bitmap,
56008 {"Assisted AP Link ID Bitmap",
56009 "wlan.htc.he.a_control.aar.assisted_ap_link_id_bitmap",
56010 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56011
56012 {&hf_ieee80211_he_aar_reserved,
56013 {"Reserved", "wlan.htc.he.a_control.aar.reserved",
56014 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56015
56016 {&hf_ieee80211_he_a_control_ones,
56017 {"Padding", "wlan.htc.he.a_control.ones",
56018 FT_UINT32, BASE_HEX, NULL((void*)0), 0x03ffffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56019
56020 {&hf_ieee80211_he_trigger_common_info,
56021 {"HE Trigger Common Info", "wlan.trigger.he.common_info",
56022 FT_UINT64, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56023
56024 {&hf_ieee80211_he_trigger_type,
56025 {"Trigger Type", "wlan.trigger.he.trigger_type",
56026 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(trigger_type_vals)((0 ? (const struct _val64_string*)0 : ((trigger_type_vals)))
)
,
56027 0x000000000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56028
56029 {&hf_ieee80211_he_trigger_ul_length,
56030 {"UL Length", "wlan.trigger.he.ul_length",
56031 FT_UINT64, BASE_DEC, NULL((void*)0), 0x000000000000FFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56032
56033 {&hf_ieee80211_he_trigger_more_tf,
56034 {"More TF", "wlan.trigger.he.more_tf",
56035 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56036
56037 {&hf_ieee80211_he_trigger_cs_required,
56038 {"CS Required", "wlan.trigger.he.cs_required",
56039 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56040
56041 {&hf_ieee80211_he_trigger_ul_bw,
56042 {"UL BW", "wlan.trigger.he.ul_bw",
56043 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) }},
56044
56045 {&hf_ieee80211_he_trigger_gi_and_ltf_type,
56046 {"GI And LTF Type", "wlan.trigger.he.gi_and_ltf_type",
56047 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,
56048 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56049
56050 {&hf_ieee80211_he_trigger_mu_mimo_ltf_mode,
56051 {"MU-MIMO LTF Mode", "wlan.trigger.he.mu_mimo_ltf_mode",
56052 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) }},
56053
56054 {&hf_ieee80211_he_trigger_num_he_ltf_syms_etc,
56055 {"Number of HE-LTF Symbols and Midamble Periodicity",
56056 "wlan.trigger.he.num_he_ltf_syms_and_midamble_per",
56057 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000003800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56058
56059 {&hf_ieee80211_he_trigger_ul_stbc,
56060 {"UL STBC", "wlan.trigger.he.ul_stbc",
56061 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000004000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56062
56063 {&hf_ieee80211_he_trigger_ldpc_extra_sym_seg,
56064 {"LDPC Extra Symbol Segment", "wlan.trigger.he.ldpc_extra_symbol_segment",
56065 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000008000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56066
56067 {&hf_ieee80211_he_trigger_ap_tx_power,
56068 {"AP Tx Power", "wlan.trigger.he.ap_tx_power",
56069 FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom)((const void *) (size_t) (ap_tx_power_custom)),
56070 0x00000003F0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56071
56072 {&hf_ieee80211_he_trigger_pre_fec_padding_factor,
56073 {"Pre-FEC Padding Factor",
56074 "wlan.trigger.he.ul_packet_extension.pre_fec_padding_factor",
56075 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400,
56076 VALS64(pre_fec_padding_factor_vals)((0 ? (const struct _val64_string*)0 : ((pre_fec_padding_factor_vals
))))
,
56077 0x0000000C00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56078
56079 {&hf_ieee80211_he_trigger_pe_disambiguity,
56080 {"PE Disambiguity",
56081 "wlan.trigger.he.ul_packet_extension.pe_disambiguity",
56082 FT_BOOLEAN, 64, TFS(&pe_disambiguity_tfs)((0 ? (const struct true_false_string*)0 : ((&pe_disambiguity_tfs
))))
,
56083 0x0000001000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56084
56085 {&hf_ieee80211_he_trigger_ul_spatial_reuse,
56086 {"UL Spatial Reuse", "wlan.trigger.he.ul_spatial_reuse",
56087 FT_UINT64, BASE_HEX, NULL((void*)0), 0x001FFFE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56088
56089 {&hf_ieee80211_he_trigger_ul_he_sig_a_reserved,
56090 {"UL HE-SIG-A2 Reserved", "wlan.trigger.he.ul_he_sig_a2_reserved",
56091 FT_UINT64, BASE_HEX, NULL((void*)0), 0x7FC0000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56092
56093 {&hf_ieee80211_he_trigger_doppler,
56094 {"Doppler", "wlan.trigger.he.doppler",
56095 FT_BOOLEAN, 64, NULL((void*)0), 0x0020000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56096
56097 {&hf_ieee80211_he_trigger_reserved,
56098 {"Reserved", "wlan.trigger.he.reserved",
56099 FT_UINT64, BASE_HEX, NULL((void*)0), 0x8000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56100
56101 {&hf_ieee80211_he_trigger_bar_ctrl,
56102 {"BAR Control", "wlan.trigger.he.common_info.bar_ctrl",
56103 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56104
56105 {&hf_ieee80211_he_trigger_bar_ctrl_ba_ack_policy,
56106 {"BA Ack Policy", "wlan.trigger.he.common_info.bar_ctrl.ba_ack_policy",
56107 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,
56108 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56109
56110 {&hf_ieee80211_he_trigger_bar_ctrl_ba_type,
56111 {"BA Type", "wlan.trigger.he.common_info.bar_ctrl.ba_type",
56112 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) }},
56113
56114 {&hf_ieee80211_he_trigger_bar_ctrl_reserved,
56115 {"Reserved", "wlan.trigger.he.common_info.bar_ctrl.reserved",
56116 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0FE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56117
56118 {&hf_ieee80211_he_trigger_bar_ctrl_tid_info,
56119 {"TID_INFO", "wlan.trigger.he.common_info.bar_ctrl.tid_info",
56120 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56121
56122 {&hf_ieee80211_he_trigger_bar_info,
56123 {"BAR Information", "wlan.trigger.he.common_info.bar_info",
56124 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56125
56126 {&hf_ieee80211_he_trigger_bar_info_blk_ack_seq_ctrl,
56127 {"Block Ack Starting Sequence Control",
56128 "wlan.trigger.he.common_info.bar_info.blk_ack_starting_seq_ctrl",
56129 FT_UINT16, BASE_HEX, NULL((void*)0), 0xffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56130
56131 {&hf_ieee80211_he_trigger_user_info,
56132 {"User Info", "wlan.trigger.he.user_info",
56133 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56134
56135 {&hf_ieee80211_he_trigger_user_info_padding_start,
56136 {"Start of Padding", "wlan.trigger.he.user_info.start_of_padding",
56137 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56138
56139 {&hf_ieee80211_he_trigger_padding,
56140 {"Padding", "wlan.trigger.he.padding",
56141 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56142
56143 {&hf_ieee80211_he_trigger_mpdu_mu_spacing,
56144 {"MPDU MU Spacing Factor", "wlan.trigger.he.mpdu_mu_spacing_factor",
56145 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56146
56147 {&hf_ieee80211_he_trigger_tid_aggregation_limit,
56148 {"TID Aggregation Limit", "wlan.trigger.he.tid_aggregation_limit",
56149 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56150
56151 {&hf_ieee80211_he_trigger_dependent_reserved1,
56152 {"Reserved", "wlan.trigger.he.reserved1",
56153 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56154
56155 {&hf_ieee80211_he_trigger_preferred_ac,
56156 {"Preferred AC", "wlan.trigger.he.preferred_ac",
56157 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) }},
56158
56159 {&hf_ieee80211_he_trigger_dep_basic_user_info,
56160 {"Basic Trigger Dependent User Info", "wlan.trigger.he.basic_user_info",
56161 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56162
56163 {&hf_ieee80211_he_trigger_starting_aid,
56164 {"Starting AID", "wlan.trigger.he.starting_aid",
56165 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56166
56167 {&hf_ieee80211_he_trigger_dependent_reserved2,
56168 {"Reserved", "wlan.trigger.he.reserved2",
56169 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001FF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56170
56171 {&hf_ieee80211_he_trigger_feedback_type,
56172 {"Feedback Type", "wlan.trigger.he.feedback_type",
56173 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56174
56175 {&hf_ieee80211_he_trigger_dependent_reserved3,
56176 {"Reserved", "wlan.trigger.he.reserved3",
56177 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00FE000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56178
56179 {&hf_ieee80211_he_trigger_nfrp_target_rssi,
56180 {"Target RSSI", "wlan.trigger.he.target_rssi",
56181 FT_UINT40, BASE_CUSTOM, CF_FUNC(target_rssi_base_custom)((const void *) (size_t) (target_rssi_base_custom)), 0x7F00000000,
56182 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56183
56184 {&hf_ieee80211_he_trigger_multiplexing_flag,
56185 {"Multiplexing Flag", "wlan.trigger.he.multiplexing_flag",
56186 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56187
56188 {&hf_ieee80211_he_trigger_dep_nfrp_user_info,
56189 {"NFRP Trigger Dependent User Unfo", "wlan.trigger.he.nfrp_user_info",
56190 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56191
56192 {&hf_ieee80211_he_trigger_feedback_seg_retrans_bm,
56193 {"Feedback Segment Retransmission Bitmap", "wlan.trigger.he.feedback_bm",
56194 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56195
56196 {&hf_ieee80211_he_trigger_aid12,
56197 {"AID12", "wlan.trigger.he.user_info.aid12",
56198 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56199
56200 {&hf_ieee80211_he_trigger_ru_allocation_region,
56201 {"RU Allocation Region", "wlan.trigger.he.ru_allocation_region",
56202 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_ru_allocation_region_custom)((const void *) (size_t) (he_trigger_ru_allocation_region_custom
))
,
56203 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56204
56205 {&hf_ieee80211_he_trigger_ru_allocation,
56206 {"RU Allocation", "wlan.trigger.he.ru_allocation",
56207 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_ru_allocation_base_custom)((const void *) (size_t) (he_ru_allocation_base_custom)),
56208 0x00000FE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56209
56210 {&hf_ieee80211_he_trigger_ul_fec_coding_type,
56211 {"UL FEC Coding Type", "wlan.trigger.he.ul_fec_coding_type",
56212 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,
56213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56214
56215 {&hf_ieee80211_he_trigger_ul_mcs,
56216 {"UL MCS", "wlan.trigger.he.ul_mcs",
56217 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56218
56219 {&hf_ieee80211_he_trigger_ul_dcm,
56220 {"UL DCM", "wlan.trigger.he.ul_dcm",
56221 FT_BOOLEAN, 40, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56222
56223 {&hf_ieee80211_he_trigger_ru_starting_spatial_stream,
56224 {"Starting Spatial Stream", "wlan.trigger.he.ru_starting_spatial_stream",
56225 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56226 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56227
56228 {&hf_ieee80211_he_trigger_ru_number_spatial_streams,
56229 {"Number Of Spatial Streams", "wlan.trigger.he.ru_number_of_spatial_stream",
56230 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56231 0x00E0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56232
56233 {&hf_ieee80211_he_trigger_ru_number_ra_ru,
56234 {"Number of RA-RU", "wlan.trigger.he.ru_number_of_ra_ru",
56235 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56236 0x007C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56237
56238 {&hf_ieee80211_he_trigger_ru_no_more_ra_ru,
56239 {"No More RA-RU", "wlan.trigger.he.ru_no_more_ra_ru",
56240 FT_BOOLEAN, 40, NULL((void*)0), 0x0080000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56241
56242 {&hf_ieee80211_he_trigger_ul_target_rssi,
56243 {"UL Target RSSI", "wlan.trigger.he.ul_target_rssi",
56244 FT_UINT40, BASE_CUSTOM, CF_FUNC(target_rssi_base_custom)((const void *) (size_t) (target_rssi_base_custom)), 0x7F00000000,
56245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56246
56247 {&hf_ieee80211_he_trigger_user_reserved,
56248 {"Reserved", "wlan.trigger.he.user_reserved",
56249 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56250
56251 {&hf_ieee80211_he_trigger_ranging_common_info_1,
56252 {"Ranging Common Info", "wlan.trigger.he.ranging.common_info",
56253 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56254
56255 {&hf_ieee80211_he_trigger_ranging_common_info_2,
56256 {"Ranging Common Info", "wlan.trigger.he.ranging.common_info",
56257 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56258
56259 {&hf_ieee80211_eht_trigger_common_info,
56260 {"EHT Trigger Common Info", "wlan.trigger.eht.common_info",
56261 FT_UINT64, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56262
56263 {&hf_ieee80211_eht_trigger_type,
56264 {"Trigger Type", "wlan.trigger.eht.trigger_type",
56265 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(trigger_type_vals)((0 ? (const struct _val64_string*)0 : ((trigger_type_vals)))
)
,
56266 0x000000000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56267
56268 {&hf_ieee80211_eht_trigger_ul_length,
56269 {"UL Length", "wlan.trigger.eht.ul_length",
56270 FT_UINT64, BASE_DEC, NULL((void*)0), 0x000000000000FFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56271
56272 {&hf_ieee80211_eht_trigger_more_tf,
56273 {"More TF", "wlan.trigger.eht.more_tf",
56274 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56275
56276 {&hf_ieee80211_eht_trigger_cs_required,
56277 {"CS Required", "wlan.trigger.eht.cs_required",
56278 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56279
56280 {&hf_ieee80211_eht_trigger_ul_bw,
56281 {"UL BW", "wlan.trigger.eht.ul_bw",
56282 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(bw_subfield_vals)((0 ? (const struct _val64_string*)0 : ((bw_subfield_vals)))),
56283 0x00000000000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56284
56285 {&hf_ieee80211_eht_trigger_gi_and_eht_ltf_type,
56286 {"GI And HE/EHT-LTF Type/Triggered TXOP Sharing Mode",
56287 "wlan.trigger.eht.gi_and_he_eht_ltf_type_triggered_txop_sharing_mode",
56288 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000300000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56289
56290 {&hf_ieee80211_eht_trigger_reserved2,
56291 {"Reserved", "wlan.trigger.eht.reserved2",
56292 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56293
56294 {&hf_ieee80211_eht_trigger_num_he_eht_ltf_syms_etc,
56295 {"Number of HE/EHT-LTF Symbols",
56296 "wlan.trigger.eht.num_ltf_eht_ltf_symbols",
56297 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000003800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56298
56299 {&hf_ieee80211_eht_trigger_reserved3,
56300 {"Reserved", "wlan.trigger.eht.reserved3",
56301 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000004000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56302
56303 {&hf_ieee80211_eht_trigger_ldpc_extra_sym_seg,
56304 {"LDPC Extra Symbol Segment", "wlan.trigger.eht.ldpc_extra_symbol_segment",
56305 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000008000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56306
56307 {&hf_ieee80211_eht_trigger_ap_tx_power,
56308 {"AP Tx Power", "wlan.trigger.eht.ap_tx_power",
56309 FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom)((const void *) (size_t) (ap_tx_power_custom)),
56310 0x00000003F0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56311
56312 {&hf_ieee80211_eht_trigger_pre_fec_padding_factor,
56313 {"Pre-FEC Padding Factor",
56314 "wlan.trigger.eht.ul_packet_extension.pre_fec_padding_factor",
56315 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400,
56316 VALS64(pre_fec_padding_factor_vals)((0 ? (const struct _val64_string*)0 : ((pre_fec_padding_factor_vals
))))
,
56317 0x0000000c00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56318
56319 {&hf_ieee80211_eht_trigger_pe_disambiguity,
56320 {"PE Disambiguity",
56321 "wlan.trigger.eht.ul_packet_extension.pe_disambiguity",
56322 FT_BOOLEAN, 64, TFS(&pe_disambiguity_tfs)((0 ? (const struct true_false_string*)0 : ((&pe_disambiguity_tfs
))))
,
56323 0x0000001000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56324
56325 {&hf_ieee80211_eht_trigger_ul_spatial_reuse,
56326 {"Spatial Reuse", "wlan.trigger.eht.spatial_reuse",
56327 FT_UINT64, BASE_HEX, NULL((void*)0), 0x001FFFE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56328
56329 {&hf_ieee80211_eht_trigger_reserved4,
56330 {"Reserved", "wlan.trigger.eht.reserved4",
56331 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0020000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56332
56333 {&hf_ieee80211_eht_trigger_he_eht_p160,
56334 {"HE/EHT P160", "wlan.trigger.eht.he_eht_p160",
56335 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0040000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56336
56337 {&hf_ieee80211_eht_trigger_special_user_info_flag,
56338 {"Special User Info Field Flag",
56339 "wlan.trigger.eht.special_user_info_flag",
56340 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0080000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56341
56342 {&hf_ieee80211_eht_trigger_eht_reserved,
56343 {"EHT Reserved", "wlan.trigger.eht.eht_reserved",
56344 FT_UINT64, BASE_HEX, NULL((void*)0), 0x7f00000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56345
56346 {&hf_ieee80211_eht_trigger_reserved,
56347 {"Reserved", "wlan.trigger.eht.reserved",
56348 FT_UINT64, BASE_HEX, NULL((void*)0), 0x8000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56349
56350 {&hf_ieee80211_eht_trigger_user_info,
56351 {"EHT User Info", "wlan.trigger.eht.user_info",
56352 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56353
56354 {&hf_ieee80211_eht_trigger_aid12,
56355 {"AID12", "wlan.trigger.eht.user_info.aid12",
56356 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56357
56358 {&hf_ieee80211_eht_trigger_ru_allocation_region,
56359 {"RU Allocation Region", "wlan.trigger.eht.user_info.ru_allocation_region",
56360 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56361
56362 {&hf_ieee80211_eht_trigger_ru_allocation,
56363 {"RU Allocation", "wlan.trigger.eht.user_info.ru_allocation",
56364 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) }},
56365
56366 {&hf_ieee80211_eht_trigger_ul_fec_coding_type,
56367 {"UL FEC Coding Type", "wlan.trigger.eht.user_info.ul_fec_coding_type",
56368 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56369
56370 {&hf_ieee80211_eht_trigger_ul_eht_mcs,
56371 {"UL EHT MCS", "wlan.trigger.eht.user_info.ul_eht_mcs",
56372 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56373
56374 {&hf_ieee80211_eht_trigger_user_info_reserved,
56375 {"Reserved", "wlan.trigger.eht.user_info.reserved",
56376 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56377
56378 {&hf_ieee80211_eht_trigger_ru_starting_spatial_stream,
56379 {"Starting Spatial Stream",
56380 "wlan.trigger.eht.user_info.ru_starting_spatial_stream",
56381 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56382 0x003C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56383
56384 {&hf_ieee80211_eht_trigger_ru_number_spatial_streams,
56385 {"Number Of Spatial Streams",
56386 "wlan.trigger.eht.user_info.ru_number_spatial_streams",
56387 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56388 0x00C0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56389
56390 {&hf_ieee80211_eht_trigger_ul_target_recv_power,
56391 {"UL Target Receive Power",
56392 "wlan.trigger.eht.user_info.ul_target_receive_power",
56393 FT_UINT40, BASE_HEX, NULL((void*)0), 0x7F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56394
56395 {&hf_ieee80211_eht_trigger_ps160,
56396 {"PS160", "wlan.trigger.eht.user_info.ps160",
56397 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56398
56399 {&hf_ieee80211_eht_trigger_special_user_info,
56400 {"Special User Info",
56401 "wlan.trigger.eht.special_user_info",
56402 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56403
56404 {&hf_ieee80211_eht_trigger_phy_version_identifier,
56405 {"Phy Version Identifier",
56406 "wlan.trigger.eht.user_info.phy_version_identifier",
56407 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000007000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56408
56409 {&hf_ieee80211_eht_trigger_ul_bw_extenstion,
56410 {"UL BW Extension", "wlan.trigger.eht.user_info.ul_bw_extension",
56411 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000018000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56412
56413 {&hf_ieee80211_eht_trigger_eht_spatial_reuse_1,
56414 {"EHT/UHR Spatial Reuse 1", "wlan.trigger.eht.user_info.eht_spatial_reuse_1",
56415 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56416
56417 {&hf_ieee80211_eht_trigger_eht_spatial_reuse_2,
56418 {"EHT/UHR Spatial Reuse 2", "wlan.trigger.eht.user_info.eht_spatial_reuse_2",
56419 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56420
56421 {&hf_ieee80211_eht_trigger_disregard_u_sig_1,
56422 {"Disregard In U-SIG-1",
56423 "wlan.trigger.eht.user_info.disregard_u_sig_1",
56424 FT_UINT40, BASE_HEX, NULL((void*)0), 0x007E000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56425
56426 {&hf_ieee80211_eht_trigger_validate_u_sig_2,
56427 {"Validate In U-SIG-2",
56428 "wlan.trigger.eht.user_info.validate_u_sig_2",
56429 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0080000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56430
56431 {&hf_ieee80211_eht_trigger_disregard_u_sig_2_4lsb,
56432 {"four LSBs of Disregard In U-SIG-2",
56433 "wlan.trigger.eht.user_info.disregard_u_sig_2_4lsb",
56434 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56435
56436 {&hf_ieee80211_eht_trigger_disregard_u_sig_2_msb,
56437 {"MSB of Disregard In U-SIG-2",
56438 "wlan.trigger.eht.user_info.disregard_u_sig_2_msb",
56439 FT_UINT40, BASE_HEX, NULL((void*)0), 0x1000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56440
56441 {&hf_ieee80211_eht_trigger_special_reserved,
56442 {"Reserved", "wlan.trigger.eht.user_info.special_reserved",
56443 FT_UINT40, BASE_HEX, NULL((void*)0), 0xE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56444
56445 { &hf_ieee80211_uhr_trigger_common_info,
56446 {"UHR Trigger Common Info", "wlan.trigger.uhr.common_info",
56447 FT_UINT64, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56448
56449 { &hf_ieee80211_uhr_trigger_type,
56450 {"Trigger Type", "wlan.trigger.uhr.trigger_type",
56451 FT_UINT64, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(trigger_type_vals)((0 ? (const struct _val64_string*)0 : ((trigger_type_vals)))
)
,
56452 0x000000000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56453
56454 { &hf_ieee80211_uhr_trigger_ul_length,
56455 {"UL Length", "wlan.trigger.uhr.ul_length",
56456 FT_UINT64, BASE_DEC, NULL((void*)0), 0x000000000000FFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56457
56458 { &hf_ieee80211_uhr_trigger_more_tf,
56459 {"More TF", "wlan.trigger.uhr.more_tf",
56460 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56461
56462 { &hf_ieee80211_uhr_trigger_cs_required,
56463 {"CS Required", "wlan.trigger.uhr.cs_required",
56464 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56465
56466 { &hf_ieee80211_uhr_trigger_ul_bw,
56467 {"UL BW", "wlan.trigger.uhr.ul_bw",
56468 FT_UINT64, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(bw_subfield_vals)((0 ? (const struct _val64_string*)0 : ((bw_subfield_vals)))),
56469 0x00000000000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56470
56471 { &hf_ieee80211_uhr_trigger_gi_and_he_uhr_ltf_type,
56472 {"GI And HE/UHR-LTF Type/Triggered TXOP Sharing Mode",
56473 "wlan.trigger.uhr.gi_and_he_uhr_ltf_type_triggered_txop_sharing_mode",
56474 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000300000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56475
56476 { &hf_ieee80211_uhr_trigger_reserved2,
56477 {"Reserved", "wlan.trigger.uhr.reserved2",
56478 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56479
56480 { &hf_ieee80211_uhr_trigger_num_he_uhr_ltf_syms_etc,
56481 {"Number of HE/UHR-LTF Symbols",
56482 "wlan.trigger.uhr.num_he_uhr_ltf_symbols",
56483 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000003800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56484
56485 { &hf_ieee80211_uhr_trigger_reserved3,
56486 {"Reserved", "wlan.trigger.uhr.reserved3",
56487 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000004000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56488
56489 { &hf_ieee80211_uhr_trigger_ldpc_extra_sym_seg,
56490 {"LDPC Extra Symbol Segment", "wlan.trigger.uhr.ldpc_extra_symbol_segment",
56491 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000008000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56492
56493 { &hf_ieee80211_uhr_trigger_ap_tx_power,
56494 {"AP Tx Power", "wlan.trigger.uhr.ap_tx_power",
56495 FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom)((const void *) (size_t) (ap_tx_power_custom)),
56496 0x00000003F0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56497
56498 { &hf_ieee80211_uhr_trigger_pre_fec_padding_factor,
56499 {"Pre-FEC Padding Factor",
56500 "wlan.trigger.uhr.ul_packet_extension.pre_fec_padding_factor",
56501 FT_UINT64, BASE_DEC | BASE_VAL64_STRING0x00000400,
56502 VALS64(pre_fec_padding_factor_vals)((0 ? (const struct _val64_string*)0 : ((pre_fec_padding_factor_vals
))))
,
56503 0x0000000c00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56504
56505 { &hf_ieee80211_uhr_trigger_pe_disambiguity,
56506 {"PE Disambiguity",
56507 "wlan.trigger.uhr.ul_packet_extension.pe_disambiguity",
56508 FT_BOOLEAN, 64, TFS(&pe_disambiguity_tfs)((0 ? (const struct true_false_string*)0 : ((&pe_disambiguity_tfs
))))
,
56509 0x0000001000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56510
56511 { &hf_ieee80211_uhr_trigger_ul_spatial_reuse,
56512 {"Spatial Reuse", "wlan.trigger.uhr.spatial_reuse",
56513 FT_UINT64, BASE_HEX, NULL((void*)0), 0x001FFFE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56514
56515 { &hf_ieee80211_uhr_trigger_reserved4,
56516 {"Reserved", "wlan.trigger.uhr.reserved4",
56517 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0020000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56518
56519 { &hf_ieee80211_uhr_trigger_he_uhr_p160,
56520 {"HE/UHR P160", "wlan.trigger.uhr.he_uhr_p160",
56521 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0040000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56522
56523 { &hf_ieee80211_uhr_trigger_special_user_info_flag,
56524 {"Special User Info Field Flag",
56525 "wlan.trigger.uhr.special_user_info_flag",
56526 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0080000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56527
56528 { &hf_ieee80211_uhr_trigger_dru_rru,
56529 {"DRU/RRU Indication", "wlan.trigger.uhr.dru_rru",
56530 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0f00000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56531
56532 { &hf_ieee80211_uhr_trigger_ifcs,
56533 {"IFCS Present Flag", "wlan.trigger.uhr.ifcs",
56534 FT_UINT64, BASE_HEX, NULL((void*)0), 0x1000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56535
56536 { &hf_ieee80211_uhr_trigger_uhr_reserved,
56537 {"UHR Reserved", "wlan.trigger.uhr.uhr_reserved",
56538 FT_UINT64, BASE_HEX, NULL((void*)0), 0x2000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56539
56540 { &hf_ieee80211_uhr_trigger_reserved,
56541 {"Reserved", "wlan.trigger.uhr.reserved",
56542 FT_UINT64, BASE_HEX, NULL((void*)0), 0x4000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56543
56544 { &hf_ieee80211_uhr_trigger_user_info,
56545 {"UHR User Info", "wlan.trigger.uhr.user_info",
56546 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56547
56548 { &hf_ieee80211_uhr_trigger_aid12,
56549 {"AID12", "wlan.trigger.uhr.user_info.aid12",
56550 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56551
56552 { &hf_ieee80211_uhr_trigger_ru_allocation_region,
56553 {"RU Allocation Region", "wlan.trigger.uhr.user_info.ru_allocation_region",
56554 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56555
56556 { &hf_ieee80211_uhr_trigger_ru_allocation,
56557 {"RU Allocation", "wlan.trigger.uhr.user_info.ru_allocation",
56558 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000FE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56559
56560 { &hf_ieee80211_uhr_trigger_ul_fec_coding_type,
56561 {"UL FEC Coding Type", "wlan.trigger.uhr.user_info.ul_fec_coding_type",
56562 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56563
56564 { &hf_ieee80211_uhr_trigger_ul_uhr_mcs,
56565 {"UL UHR MCS", "wlan.trigger.uhr.user_info.ul_uhr_mcs",
56566 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56567
56568 { &hf_ieee80211_uhr_trigger_2xldpc,
56569 {"2xLDPC", "wlan.trigger.uhr.user_info.2xldpc",
56570 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56571
56572 { &hf_ieee80211_uhr_trigger_ru_starting_spatial_stream,
56573 {"Starting Spatial Stream",
56574 "wlan.trigger.uhr.user_info.ru_starting_spatial_stream",
56575 FT_UINT40, BASE_DEC, NULL((void*)0),
56576 0x003C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56577
56578 { &hf_ieee80211_uhr_trigger_dru_distribution_bw,
56579 {"DRU Distribution BW",
56580 "wlan.trigger.uhr.user_info.dru_distribution_bw",
56581 FT_UINT40, BASE_DEC, NULL((void*)0),
56582 0x000C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56583
56584 { &hf_ieee80211_uhr_trigger_dru_reserved,
56585 {"DRU reserved",
56586 "wlan.trigger.uhr.user_info.dru_reserved",
56587 FT_UINT40, BASE_DEC, NULL((void*)0),
56588 0x0030000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56589
56590 { &hf_ieee80211_uhr_trigger_ru_number_spatial_streams,
56591 {"Number Of Spatial Streams",
56592 "wlan.trigger.uhr.user_info.ru_number_spatial_streams",
56593 FT_UINT40, BASE_DEC, NULL((void*)0),
56594 0x00C0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56595
56596 { &hf_ieee80211_uhr_trigger_ul_target_recv_power,
56597 {"UL Target Receive Power",
56598 "wlan.trigger.uhr.user_info.ul_target_receive_power",
56599 FT_UINT40, BASE_HEX, NULL((void*)0), 0x7F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56600
56601 { &hf_ieee80211_uhr_trigger_ps160,
56602 {"PS160", "wlan.trigger.uhr.user_info.ps160",
56603 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56604
56605 {&hf_ieee80211_ranging_trigger_subtype1,
56606 {"Ranging Trigger Subtype",
56607 "wlan.trigger.he.ranging.ranging_trigger_subtype",
56608 FT_UINT8, BASE_RANGE_STRING0x00000100|BASE_HEX, RVALS(ranging_trigger_subtype_vals)((0 ? (const struct _range_string*)0 : ((ranging_trigger_subtype_vals
))))
,
56609 0x0f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56610
56611 {&hf_ieee80211_ranging_trigger_reserved1,
56612 {"Reserved", "wlan.trigger.he.ranging.reserved",
56613 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56614
56615 {&hf_ieee80211_ranging_trigger_token,
56616 {"Token", "wlan.trigger.he.ranging.token",
56617 FT_UINT8, BASE_HEX, NULL((void*)0), 0xe0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56618
56619 {&hf_ieee80211_ranging_trigger_subtype2,
56620 {"Ranging Trigger Subtype",
56621 "wlan.trigger.he.ranging.ranging_trigger_subtype",
56622 FT_UINT16, BASE_RANGE_STRING0x00000100|BASE_HEX,
56623 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) }},
56624
56625 {&hf_ieee80211_ranging_trigger_reserved2,
56626 {"Reserved", "wlan.trigger.he.ranging.reserved2",
56627 FT_UINT16, BASE_HEX, NULL((void*)0), 0x03f0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56628
56629 {&hf_ieee80211_ranging_trigger_sounding_dialog_token,
56630 {"Sounding Dialog Token Number",
56631 "wlan.trigger.he.ranging.sounding_dialog_token",
56632 FT_UINT16, BASE_HEX, NULL((void*)0), 0xfc00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56633
56634 {&hf_ieee80211_he_trigger_ranging_trigger_poll_rpt,
56635 {"Ranging Trigger Poll/Rpt", "wlan.trigger.he.ranging.poll_rpt",
56636 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56637
56638 {&hf_ieee80211_ranging_pol_rpt_aid12_rsid12,
56639 {"AID12/RSID12", "wlan.trigger.he.ranging.poll_rpt.aid12_rsid12",
56640 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56641
56642 {&hf_ieee80211_ranging_pol_rpt_ru_alloc_region,
56643 {"RU Allocation Region", "wlan.trigger.he.ranging.poll_rpt.ru_allocation_region",
56644 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_ru_allocation_region_custom)((const void *) (size_t) (he_trigger_ru_allocation_region_custom
))
,
56645 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56646
56647 {&hf_ieee80211_ranging_pol_rpt_ru_alloc,
56648 {"RU Allocation", "wlan.trigger.he.ranging.poll_rpt.ru_allocation",
56649 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) }},
56650
56651 {&hf_ieee80211_ranging_pol_rpt_ul_fec_coding_type,
56652 {"UL FEC Coding Type",
56653 "wlan.trigger.he.ranging.poll_rpt.ul_fec_coding_type",
56654 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) }},
56655
56656 {&hf_ieee80211_ranging_pol_rpt_ulmcs,
56657 {"UL MCS", "wlan.trigger.he.ranging.poll_rpt.ul_mcs",
56658 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56659
56660 {&hf_ieee80211_ranging_pol_rpt_uldcm,
56661 {"UL DCM", "wlan.trigger.he.ranging.poll_rpt.ul_dcm",
56662 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56663
56664 {&hf_ieee80211_ranging_pol_rpt_starting_spatial_stream,
56665 {"Starting Spatial Stream",
56666 "wlan.trigger.he.ranging.poll_rpt.starting_spatial_stream",
56667 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56668 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56669
56670 {&hf_ieee80211_ranging_pol_rpt_number_spatial_streams,
56671 {"Number Of Spatial Streams",
56672 "wlan.trigger.he.ranging.poll_rpt.number_spatial_streams",
56673 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56674 0x00e0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56675
56676 {&hf_ieee80211_ranging_pol_rpt_ul_target_rssi,
56677 {"UL Target RSSI", "wlan.trigger.he.ranging.poll_rpt.ul_target_rssi",
56678 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) }},
56679
56680 {&hf_ieee80211_ranging_pol_rpt_reserved,
56681 {"Reserved", "wlan.trigger.he.ranging.poll_rpt.reserved",
56682 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56683
56684 {&hf_ieee80211_he_trigger_ranging_trigger_sounding,
56685 {"Ranging Trigger Sounding", "wlan.trigger.he.ranging.sounding",
56686 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56687
56688 {&hf_ieee80211_ranging_sounding_aid12_rsid12,
56689 {"AID12/RSID12", "wlan.trigger.he.ranging.sounding.aid12_rsid12",
56690 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56691
56692 {&hf_ieee80211_ranging_sounding_reserved1,
56693 {"Reserved", "wlan.trigger.he.ranging.sounding.reserved1",
56694 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001ff000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56695
56696 {&hf_ieee80211_ranging_sounding_i2r_rep,
56697 {"I2R Rep", "wlan.trigger.he.ranging.sounding.i2r_rep",
56698 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56699
56700 {&hf_ieee80211_ranging_sounding_reserved2,
56701 {"Reserved", "wlan.trigger.he.ranging.sounding.reserved2",
56702 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0003000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56703
56704 {&hf_ieee80211_ranging_sounding_starting_spatial_stream,
56705 {"Starting Spatial Stream",
56706 "wlan.trigger.he.ranging.sounding.starting_spatial_stream",
56707 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56708 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56709
56710 {&hf_ieee80211_ranging_sounding_number_spatial_streams,
56711 {"Number of Spatial Streams",
56712 "wlan.trigger.he.ranging.sounding.number_spatial_streams",
56713 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56714 0x00e0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56715
56716 {&hf_ieee80211_ranging_sounding_ul_target_rssi,
56717 {"UL Target RSSI", "wlan.trigger.he.ranging.sounding.ul_target_rssi",
56718 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) }},
56719
56720 {&hf_ieee80211_ranging_sounding_reserved3,
56721 {"Reserved", "wlan.trigger.he.ranging.sounding.reserved3",
56722 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56723
56724 {&hf_ieee80211_he_trigger_ranging_trigger_sec_sound,
56725 {"Secured Sounding", "wlan.trigger.he.ranging.secured_sounding",
56726 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56727
56728 {&hf_ieee80211_ranging_sec_sound_aid12_rsid12,
56729 {"AID12/RSID12", "wlan.trigger.he.ranging.secured_sounding.aid12_rsid12",
56730 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56731
56732 {&hf_ieee80211_ranging_sec_sound_reserved1,
56733 {"Reserved", "wlan.trigger.he.ranging.secured_sounding.reserved1",
56734 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001ff000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56735
56736 {&hf_ieee80211_ranging_sec_sound_i2r_rep,
56737 {"I2R Rep", "wlan.trigger.he.ranging.secured_sounding.i2r_rep",
56738 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56739
56740 {&hf_ieee80211_ranging_sec_sound_reserved2,
56741 {"Reserved", "wlan.trigger.he.ranging.secured_sounding.reserved2",
56742 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0003000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56743
56744 {&hf_ieee80211_ranging_sec_sound_starting_spatial_stream,
56745 {"Starting Spatial Stream",
56746 "wlan.trigger.he.ranging.secured_sounding.starting_spatial_stream",
56747 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56748 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56749
56750 {&hf_ieee80211_ranging_sec_sound_number_spatial_streams,
56751 {"Number of Spatial Streams",
56752 "wlan.trigger.he.ranging.secured_sounding.number_spatial_streams",
56753 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56754 0x00e0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56755
56756 {&hf_ieee80211_ranging_sec_sound_ul_target_rssi,
56757 {"UL Target RSSI",
56758 "wlan.trigger.he.ranging.secured_sounding.ul_target_rssi",
56759 FT_UINT40, BASE_HEX, NULL((void*)0), 0x7f00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56760
56761 {&hf_ieee80211_ranging_sec_sound_reserved3,
56762 {"Reserved", "wlan.trigger.he.ranging.secured_sounding.reserved3",
56763 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56764
56765 {&hf_ieee80211_he_trigger_ranging_user_info_sac,
56766 {"SAC", "wlan.trigger.he.ranging.user_info.sac",
56767 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56768
56769 {&hf_ieee80211_he_qtp_control,
56770 {"Control", "wlan.ext_tag.quiet_time_period.control",
56771 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,
56772 "Type of Quiet Time Period Element", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56773
56774 {&hf_ieee80211_he_qtp_setup_quiet_period_duration,
56775 {"Quiet Period Duration", "wlan.ext_tag.quiet_time_period.setup.duration",
56776 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56777 "Quiet Period Duration in units of 32us", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56778
56779 {&hf_ieee80211_he_qtp_setup_srv_specific_identif,
56780 {"Service Specific Identifier", "wlan.ext_tag.quiet_time_period.setup.srv_specific_identif",
56781 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56782 "Service Specific peer-to-peer operation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56783
56784 {&hf_ieee80211_he_qtp_request_dialog_token,
56785 {"Dialog Token", "wlan.ext_tag.quiet_time_period.request.dialog_token",
56786 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56787 "Quiet Time Periods Response suptype to which request subtype corresponds",
56788 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56789
56790 {&hf_ieee80211_he_qtp_request_quiet_period_offset,
56791 {"Quiet Period Offset", "wlan.ext_tag.quiet_time_period.request.offset",
56792 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56793 "Offset of the first quiet period from the TBTT in TUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56794
56795 {&hf_ieee80211_he_qtp_request_quiet_period_duration,
56796 {"Quiet Period Duration", "wlan.ext_tag.quiet_time_period.request.duration",
56797 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56798 "Quiet Period Duration in units of 32us", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56799
56800 {&hf_ieee80211_he_qtp_request_quiet_period_interval,
56801 {"Quiet Period Interval", "wlan.ext_tag.quiet_time_period.request.interval",
56802 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56803 "Interval between the start of two consecutive quite time periods, in TUs",
56804 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56805
56806 {&hf_ieee80211_he_qtp_request_repetition_count,
56807 {"Repetition Count", "wlan.ext_tag.quiet_time_period.request.repetition_count",
56808 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56809 "Number of requested quiet time periods", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56810
56811 {&hf_ieee80211_he_qtp_request_srv_specific_identif,
56812 {"Service Specific Identifier", "wlan.ext_tag.quiet_time_period.request.srv_specific_identif",
56813 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56814 "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) } },
56815
56816 {&hf_ieee80211_he_qtp_response_dialog_token,
56817 {"Dialog Token", "wlan.ext_tag.quiet_time_period.response.dialog_token",
56818 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56819 "The quiet time period request subtype to which this response corresponds",
56820 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56821
56822 {&hf_ieee80211_he_qtp_response_status_code,
56823 {"Status Code", "wlan.ext_tag.quiet_time_period.response.status_code",
56824 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56825 "Status of the requested operation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56826
56827 {&hf_ieee80211_he_qtp_response_quiet_period_offset,
56828 {"Quiet Period Offset", "wlan.ext_tag.quiet_time_period.response.offset",
56829 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56830 "Offset of the start of the first quiet time period", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56831
56832 {&hf_ieee80211_he_qtp_response_quiet_period_duration,
56833 {"Quiet Period Duration", "wlan.ext_tag.quiet_time_period.response.duration",
56834 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56835 "Quiet Period Duration in units of 32us", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56836
56837 {&hf_ieee80211_he_qtp_response_quiet_period_interval,
56838 {"Quiet Period Interval", "wlan.ext_tag.quiet_time_period.response.interval",
56839 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56840 "Interval between the start of two consecutive quiet time periods", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56841
56842 {&hf_ieee80211_he_qtp_response_repetition_count,
56843 {"Repetition Count", "wlan.ext_tag.quiet_time_period.response.repetition_count",
56844 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56845 "Number of requested quiet time periods", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56846
56847 {&hf_ieee80211_he_qtp_response_srv_specific_identif,
56848 {"Service Specific Identifier", "wlan.ext_tag.quiet_time_period.response.srv_specific_identif",
56849 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56850 "Identifier of a peer-to-peer operation for which participating HE STAs might transmit frames",
56851 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56852
56853 {&hf_ieee80211_he_ndp_annc_sta,
56854 {"STA Info", "wlan.he_ndp.sta_info",
56855 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56856
56857 {&hf_ieee80211_he_ndp_annc_aid11,
56858 {"AID11", "wlan.he_ndp.sta_info.aid11",
56859 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000007FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56860
56861 {&hf_ieee80211_he_ndp_annc_ru_start,
56862 {"RU Start Index", "wlan.he_ndp.sta_info.ru_start",
56863 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0003F800,
56864 "26-tone RU start index of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56865
56866 {&hf_ieee80211_he_ndp_annc_ru_end,
56867 {"RU End Index", "wlan.he_ndp.sta_info.ru_end",
56868 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01FC0000,
56869 "26-tone RU end index of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56870
56871 {&hf_ieee80211_he_ndp_annc_feedback_type_and_ng,
56872 {"Feedback Type and Ng", "wlan.he_ndp.sta_info.feedback_type_and_ng",
56873 FT_UINT32, BASE_HEX, NULL((void*)0), 0x06000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56874
56875 {&hf_ieee80211_he_ndp_annc_disambiguation,
56876 {"Disambiguation", "wlan.he_ndp.sta_info.disambiguation",
56877 FT_UINT32, BASE_HEX, NULL((void*)0), 0x08000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56878
56879 {&hf_ieee80211_he_ndp_annc_codebook_size,
56880 {"Codebook Size", "wlan.he_ndp.sta_info.codebook_size",
56881 FT_UINT32, BASE_HEX, NULL((void*)0), 0x10000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56882
56883 {&hf_ieee80211_he_ndp_annc_nc,
56884 {"Nc", "wlan.he_ndp.sta_info.nc",
56885 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56886
56887 {&hf_ieee80211_he_ndp_annc_disallowed_bitmap,
56888 {"Disallowed Subchannel Bitmap",
56889 "wlan.he_ndp.sta_info.disallowed_subchannel_bitmap",
56890 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0007f800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56891
56892 {&hf_ieee80211_he_ndp_annc_reserved1,
56893 {"Reserved", "wlan.he_ndp.sta_info.reserved1",
56894 FT_UINT32, BASE_HEX, NULL((void*)0), 0x07f80000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56895
56896 {&hf_ieee80211_he_ndp_annc_reserved2,
56897 {"Reserved", "wlan.he_ndp.sta_info.reserved2",
56898 FT_UINT32, BASE_HEX, NULL((void*)0), 0xf0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56899
56900 {&hf_ieee80211_htc_ht_lac,
56901 {"Link Adaptation Control (LAC)", "wlan.htc.lac",
56902 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FFFE,
56903 "High Throughput Control Link Adaptation Control (LAC)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56904
56905 {&hf_ieee80211_htc_lac_trq,
56906 {"Training Request (TRQ)", "wlan.htc.lac.trq",
56907 FT_BOOLEAN, 16, TFS(&htc_lac_trq_flag)((0 ? (const struct true_false_string*)0 : ((&htc_lac_trq_flag
))))
, 0x0002,
56908 "High Throughput Control Link Adaptation Control Training Request (TRQ)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56909
56910 {&hf_ieee80211_htc_lac_mai_aseli,
56911 {"Antenna Selection Indication (ASELI)", "wlan.htc.lac.mai.aseli",
56912 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C,
56913 "High Throughput Control Link Adaptation Control MAI Antenna Selection Indication", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56914
56915 {&hf_ieee80211_htc_lac_mai_mrq,
56916 {"MCS Request (MRQ)", "wlan.htc.lac.mai.mrq",
56917 FT_BOOLEAN, 16, TFS(&htc_lac_mai_mrq_flag)((0 ? (const struct true_false_string*)0 : ((&htc_lac_mai_mrq_flag
))))
, 0x0004,
56918 "High Throughput Control Link Adaptation Control MAI MCS Request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56919
56920 {&hf_ieee80211_htc_lac_mai_msi,
56921 {"MCS Request Sequence Identifier (MSI)", "wlan.htc.lac.mai.msi",
56922 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038,
56923 "High Throughput Control Link Adaptation Control MAI MCS Request Sequence Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56924
56925 {&hf_ieee80211_htc_lac_mai_reserved,
56926 {"Reserved", "wlan.htc.lac.mai.reserved",
56927 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038,
56928 "High Throughput Control Link Adaptation Control MAI Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56929
56930 {&hf_ieee80211_htc_lac_mfsi,
56931 {"MCS Feedback Sequence Identifier (MFSI)", "wlan.htc.lac.mfsi",
56932 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01C0,
56933 "High Throughput Control Link Adaptation Control MCS Feedback Sequence Identifier (MSI)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56934
56935 {&hf_ieee80211_htc_lac_asel_command,
56936 {"Antenna Selection (ASEL) Command", "wlan.htc.lac.asel.command",
56937 FT_UINT16, BASE_HEX, VALS(ieee80211_htc_lac_asel_command_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_lac_asel_command_flags
))))
, 0x0E00,
56938 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Command", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56939
56940 {&hf_ieee80211_htc_lac_asel_data,
56941 {"Antenna Selection (ASEL) Data", "wlan.htc.lac.asel.data",
56942 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
56943 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56944
56945 {&hf_ieee80211_htc_lac_mfb,
56946 {"MCS Feedback (MFB)", "wlan.htc.lac.mfb",
56947 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00,
56948 "High Throughput Control Link Adaptation Control MCS Feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56949
56950 {&hf_ieee80211_htc_cal_pos,
56951 {"Calibration Position", "wlan.htc.cal.pos",
56952 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_cal_pos_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_cal_pos_flags
))))
, 0x00030000,
56953 "High Throughput Control Calibration Position", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56954
56955 {&hf_ieee80211_htc_cal_seq,
56956 {"Calibration Sequence Identifier", "wlan.htc.cal.seq",
56957 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000C0000,
56958 "High Throughput Control Calibration Sequence Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56959
56960 {&hf_ieee80211_htc_reserved1,
56961 {"Reserved", "wlan.htc.reserved1",
56962 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00300000,
56963 "High Throughput Control Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56964
56965 {&hf_ieee80211_htc_csi_steering,
56966 {"CSI/Steering", "wlan.htc.csi_steering",
56967 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_csi_steering_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_csi_steering_flags
))))
, 0x00C00000,
56968 "High Throughput Control CSI/Steering", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56969
56970 {&hf_ieee80211_htc_ndp_announcement,
56971 {"NDP Announcement", "wlan.htc.ndp_announcement",
56972 FT_BOOLEAN, 32, TFS(&ieee80211_htc_ndp_announcement_flag)((0 ? (const struct true_false_string*)0 : ((&ieee80211_htc_ndp_announcement_flag
))))
, 0x01000000,
56973 "High Throughput Control NDP Announcement", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56974
56975 {&hf_ieee80211_htc_reserved2,
56976 {"Reserved", "wlan.htc.reserved2",
56977 FT_UINT32, BASE_HEX, NULL((void*)0), 0x3E000000,
56978 "High Throughput Control Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56979
56980 {&hf_ieee80211_htc_mrq,
56981 {"MRQ", "wlan.htc.mrq",
56982 FT_BOOLEAN, 32, NULL((void*)0), HTC_MRQ0x00000004,
56983 "VHT-MCS feedback request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56984
56985 {&hf_ieee80211_htc_msi,
56986 {"MSI", "wlan.htc.msi",
56987 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000038,
56988 "MRQ sequence number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56989
56990 {&hf_ieee80211_htc_msi_stbc_reserved,
56991 {"Reserved", "wlan.htc.msi_stbc_reserved",
56992 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000038,
56993 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56994
56995 {&hf_ieee80211_htc_compressed_msi,
56996 {"Compressed MSI", "wlan.htc.compressed_msi",
56997 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000018,
56998 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56999
57000 {&hf_ieee80211_htc_ppdu_stbc_encoded,
57001 {"PPDU was STBC encoded", "wlan.htc.ppdu_stbc_encoded",
57002 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
57003 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57004
57005 {&hf_ieee80211_htc_mfsi,
57006 {"MFSI", "wlan.htc.mfsi",
57007 FT_BOOLEAN, 32, NULL((void*)0), 0x000001C0,
57008 "MFB sequence identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57009
57010 {&hf_ieee80211_htc_gid_l,
57011 {"GID-L", "wlan.htc.gid_l",
57012 FT_BOOLEAN, 32, NULL((void*)0), 0x000001C0,
57013 "LSBs of group ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57014
57015 {&hf_ieee80211_htc_mfb,
57016 {"MFB", "wlan.htc.mfb",
57017 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00FFFE00,
57018 "Recommended MFB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57019
57020 {&hf_ieee80211_htc_num_sts,
57021 {"NUM_STS", "wlan.htc.num_sts",
57022 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000E00,
57023 "Recommended NUM_STS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57024
57025 {&hf_ieee80211_htc_vht_mcs,
57026 {"VHT-MCS", "wlan.htc.vht_mcs",
57027 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000F000,
57028 "Recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57029
57030 {&hf_ieee80211_htc_bw,
57031 {"BW", "wlan.htc.bw",
57032 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,
57033 "Bandwidth for recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57034
57035 {&hf_ieee80211_htc_s1g_num_sts,
57036 {"NUM_STS", "wlan.htc.num_sts",
57037 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000600,
57038 "Recommended NUM_STS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57039
57040 {&hf_ieee80211_htc_s1g_vht_mcs,
57041 {"VHT-MCS", "wlan.htc.vht_mcs",
57042 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00007800,
57043 "Recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57044
57045 {&hf_ieee80211_htc_s1g_bw,
57046 {"BW", "wlan.htc.bw",
57047 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,
57048 "Bandwidth for recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57049
57050 {&hf_ieee80211_htc_snr,
57051 {"SNR", "wlan.htc.snr",
57052 FT_INT32, BASE_DEC, NULL((void*)0), 0x00FC0000,
57053 "Average SNR + 22", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57054
57055 {&hf_ieee80211_htc_reserved3,
57056 {"Reserved", "wlan.htc.reserved3",
57057 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1F000000,
57058 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57059
57060 {&hf_ieee80211_htc_gid_h,
57061 {"GID-H", "wlan.htc.gid_h",
57062 FT_UINT32, BASE_DEC, NULL((void*)0), 0x07000000,
57063 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57064
57065 {&hf_ieee80211_htc_coding_type,
57066 {"Coding type", "wlan.htc.coding_type",
57067 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_coding_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_coding_type_vals
))))
, 0x08000000,
57068 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57069
57070 {&hf_ieee80211_htc_fb_tx_type,
57071 {"FB Tx type", "wlan.htc.fb_tx_type",
57072 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_fb_tx_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_fb_tx_type_vals
))))
, 0x10000000,
57073 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57074
57075 {&hf_ieee80211_htc_unsolicited_mfb,
57076 {"Unsolicited MFB", "wlan.htc.unsolicited_mfb",
57077 FT_BOOLEAN, 32, NULL((void*)0), HTC_UNSOLICITED_MFB0x20000000,
57078 "High Throughput Control Unsolicited MFB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57079
57080 {&hf_ieee80211_htc_ac_constraint,
57081 {"AC Constraint", "wlan.htc.ac_constraint",
57082 FT_BOOLEAN, 32, NULL((void*)0), 0x40000000,
57083 "High Throughput Control AC Constraint", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57084
57085 {&hf_ieee80211_htc_rdg_more_ppdu,
57086 {"RDG/More PPDU", "wlan.htc.rdg_more_ppdu",
57087 FT_BOOLEAN, 32, NULL((void*)0), 0x80000000,
57088 "High Throughput Control RDG/More PPDU", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57089 /* End: HT Control (+HTC) */
57090
57091 /* MDIE */
57092 {&hf_ieee80211_tag_mobility_domain_mdid,
57093 {"Mobility Domain Identifier", "wlan.mobility_domain.mdid",
57094 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57096
57097 {&hf_ieee80211_tag_mobility_domain_ft_capab,
57098 {"FT Capability and Policy", "wlan.mobility_domain.ft_capab",
57099 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57101
57102 {&hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
57103 {"Fast BSS Transition over DS",
57104 "wlan.mobility_domain.ft_capab.ft_over_ds",
57105 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
57106 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57107
57108 {&hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
57109 {"Resource Request Protocol Capability",
57110 "wlan.mobility_domain.ft_capab.resource_req",
57111 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
57112 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57113
57114 {&hf_ieee80211_tag_mobility_domain_ft_capab_reserved,
57115 {"Reserved",
57116 "wlan.mobility_domain.ft_capab.reserved",
57117 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc,
57118 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57119
57120 /* FTIE */
57121 {&hf_ieee80211_tag_ft_mic_control,
57122 {"MIC Control", "wlan.ft.mic_control",
57123 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57125
57126 {&hf_ieee80211_tag_ft_mic_control_rsnxe_used,
57127 {"RSNXE Used", "wlan.ft.mic_control.rsnxe_used",
57128 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) }},
57129
57130 {&hf_ieee80211_tag_ft_mic_control_mic_length,
57131 {"MIC Length", "wlan.ft.mic_control.mic_length",
57132 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000e, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57133
57134 {&hf_ieee80211_tag_ft_mic_control_reserved,
57135 {"Reserved", "wlan.ft.mic_control.reserved",
57136 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00f0,
57137 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57138
57139 {&hf_ieee80211_tag_ft_mic_control_element_count,
57140 {"Element Count", "wlan.ft.mic_control.element_count",
57141 FT_UINT16, BASE_DEC, NULL((void*)0), 0xff00,
57142 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57143
57144 {&hf_ieee80211_tag_ft_mic,
57145 {"MIC", "wlan.ft.mic",
57146 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57147 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57148
57149 {&hf_ieee80211_tag_ft_anonce,
57150 {"ANonce", "wlan.ft.anonce",
57151 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57152 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57153
57154 {&hf_ieee80211_tag_ft_snonce,
57155 {"SNonce", "wlan.ft.snonce",
57156 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57157 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57158
57159 {&hf_ieee80211_tag_ft_subelem_id,
57160 {"Subelement ID", "wlan.ft.subelem.id",
57161 FT_UINT8, BASE_DEC, VALS(ft_subelem_id_vals)((0 ? (const struct _value_string*)0 : ((ft_subelem_id_vals))
))
, 0,
57162 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57163
57164 {&hf_ieee80211_tag_ft_subelem_len,
57165 {"Length", "wlan.ft.subelem.len",
57166 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57167 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57168
57169 {&hf_ieee80211_tag_ft_subelem_data,
57170 {"Data", "wlan.ft.subelem.data",
57171 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57172 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57173
57174 {&hf_ieee80211_tag_ft_subelem_r1kh_id,
57175 {"PMK-R1 key holder identifier (R1KH-ID)", "wlan.ft.subelem.r1kh_id",
57176 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57177 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57178
57179 {&hf_ieee80211_tag_ft_subelem_gtk_key_info,
57180 {"Key Info", "wlan.ft.subelem.gtk.key_info",
57181 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57182 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57183
57184 {&hf_ieee80211_tag_ft_subelem_gtk_key_id,
57185 {"Key ID", "wlan.ft.subelem.gtk.key_id",
57186 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
57187 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57188
57189 {&hf_ieee80211_tag_ft_subelem_gtk_key_length,
57190 {"Key Length", "wlan.ft.subelem.gtk.key_length",
57191 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57192 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57193
57194 {&hf_ieee80211_tag_ft_subelem_gtk_rsc,
57195 {"RSC", "wlan.ft.subelem.gtk.rsc",
57196 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57197 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57198
57199 {&hf_ieee80211_tag_ft_subelem_gtk_key,
57200 {"GTK", "wlan.ft.subelem.gtk.key",
57201 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57202 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57203
57204 {&hf_ieee80211_tag_ft_subelem_gtk_key_encrypted,
57205 {"GTK (encrypted)", "wlan.ft.subelem.gtk.key_encrypted",
57206 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57207 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57208
57209 {&hf_ieee80211_tag_ft_subelem_r0kh_id,
57210 {"PMK-R0 key holder identifier (R0KH-ID)", "wlan.ft.subelem.r0kh_id",
57211 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57212 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57213
57214 {&hf_ieee80211_tag_ft_subelem_igtk_key_id,
57215 {"Key ID", "wlan.ft.subelem.igtk.key_id",
57216 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57217 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57218
57219 {&hf_ieee80211_tag_ft_subelem_igtk_ipn,
57220 {"IPN", "wlan.ft.subelem.igtk.ipn",
57221 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57222 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57223
57224 {&hf_ieee80211_tag_ft_subelem_igtk_key_length,
57225 {"Key Length", "wlan.ft.subelem.igtk.key_length",
57226 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57227 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57228
57229 {&hf_ieee80211_tag_ft_subelem_igtk_key,
57230 {"Wrapped Key (IGTK)", "wlan.ft.subelem.igtk.key",
57231 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57232
57233 {&hf_ieee80211_tag_ft_subelem_oci_op_class,
57234 {"Operating Class", "wlan.ft.subelem.oci.operating_class",
57235 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57236
57237 {&hf_ieee80211_tag_ft_subelem_oci_prim_chan_num,
57238 {"Primary Channel Number", "wlan.ft.subelem.oci.primary_channel_number",
57239 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57240
57241 {&hf_ieee80211_tag_ft_subelem_oci_freq_seg_1,
57242 {"Frequency Segment 1 Channel Number",
57243 "wlan.ft.subelem.oci.frequency_segment_1_channel_number",
57244 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57245
57246 {&hf_ieee80211_tag_ft_subelem_oci_oct_op_class,
57247 {"OCT Operating Class", "wlan.ft.subelem.oci.oct_operating_class",
57248 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57249
57250 {&hf_ieee80211_tag_ft_subelem_oci_oct_prim_chan_num,
57251 {"OCT Primary Channel Number",
57252 "wlan.ft.subelem.oci.oct_primary_channel_number",
57253 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57254
57255 {&hf_ieee80211_tag_ft_subelem_oci_oct_freq_seg_1,
57256 {"OCT Frequency Segment 1 Channel Number",
57257 "wlan.ft.subelem.oci.oct_frequency_segment_1_channel_number",
57258 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57259
57260 {&hf_ieee80211_tag_ft_subelem_bigtk_key_id,
57261 {"Key ID", "wlan.ft.subelem.bigtk.key_id",
57262 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57263 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57264
57265 {&hf_ieee80211_tag_ft_subelem_bigtk_bipn,
57266 {"BIPN", "wlan.ft.subelem.bigtk.bipn",
57267 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57268 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57269
57270 {&hf_ieee80211_tag_ft_subelem_bigtk_key_length,
57271 {"Key Length", "wlan.ft.subelem.bigtk.key_length",
57272 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57273 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57274
57275 {&hf_ieee80211_tag_ft_subelem_bigtk_key,
57276 {"Wrapped Key (BIGTK)", "wlan.ft.subelem.bigtk.key",
57277 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57278
57279 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key_info,
57280 {"Key Info", "wlan.ft.subelem.mlo_gtk.key_info",
57281 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57282 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57283
57284 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key_id,
57285 {"Key ID", "wlan.ft.subelem.mlo_gtk.key_id",
57286 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
57287 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57288
57289 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id_info,
57290 {"Link ID Info", "wlan.ft.subelem.mlo_gtk.link_id_info",
57291 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57292 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57293
57294 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id,
57295 {"Link ID", "wlan.ft.subelem.mlo_gtk.link_id",
57296 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57297 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57298
57299 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key_length,
57300 {"Key Length", "wlan.ft.subelem.mlo_gtk.key_length",
57301 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57302 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57303
57304 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_rsc,
57305 {"RSC", "wlan.ft.subelem.mlo_gtk.rsc",
57306 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57308
57309 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key,
57310 {"Wrapped Key (MLO GTK)", "wlan.ft.subelem.mlo_gtk.key",
57311 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57313
57314 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_key_id,
57315 {"Key ID", "wlan.ft.subelem.mlo_igtk.key_id",
57316 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57317 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57318
57319 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_ipn,
57320 {"IPN", "wlan.ft.subelem.mlo_igtk.ipn",
57321 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57323
57324 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id_info,
57325 {"Link ID Info", "wlan.ft.subelem.mlo_igtk.link_id_info",
57326 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57328
57329 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id,
57330 {"Link ID", "wlan.ft.subelem.mlo_igtk.link_id",
57331 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57333
57334 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_key_length,
57335 {"Key Length", "wlan.ft.subelem.mlo_igtk.key_length",
57336 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57338
57339 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_key,
57340 {"Wrapped Key (MLO IGTK)", "wlan.ft.subelem.mlo_igtk.key",
57341 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57342
57343 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_id,
57344 {"Key ID", "wlan.ft.subelem.mlo_bigtk.key_id",
57345 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57346 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57347
57348 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_bipn,
57349 {"BIPN", "wlan.ft.subelem.mlo_bigtk.bipn",
57350 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57352
57353 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id,
57354 {"Link ID", "wlan.ft.subelem.mlo_bigtk.link_id",
57355 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57357
57358 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id_info,
57359 {"Link ID Info", "wlan.ft.subelem.mlo_bigtk.link_id_info",
57360 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57361 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57362
57363 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_length,
57364 {"Key Length", "wlan.ft.subelem.mlo_bigtk.key_length",
57365 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57366 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57367
57368 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_key,
57369 {"Wrapped Key (MLO BIGTK)", "wlan.ft.subelem.mlo_bigtk.key",
57370 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57371
57372 /* RIC Data IE: 802.11-2012: 8.4.2.52 */
57373 {&hf_ieee80211_tag_ric_data_id,
57374 {"Resource Handshake Identifier", "wlan.ric_data.id",
57375 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57376
57377 {&hf_ieee80211_tag_ric_data_desc_cnt,
57378 {"Resource Descriptor Count", "wlan.ric_data.desc_cnt",
57379 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57380
57381 {&hf_ieee80211_tag_ric_data_status_code,
57382 {"Status Code", "wlan.ric_data.status_code",
57383 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
57384 "Status of requested Resource", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57385
57386 /* OBSS IE: 802.11-2012: 8.4.2.61 */
57387 {&hf_ieee80211_tag_obss_spd,
57388 {"Scan Passive Dwell", "wlan.obss.spd",
57389 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57390
57391 {&hf_ieee80211_tag_obss_sad,
57392 {"Scan Active Dwell", "wlan.obss.sad",
57393 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57394
57395 {&hf_ieee80211_tag_obss_cwtsi,
57396 {"Channel Width Trigger Scan Interval", "wlan.obss.cwtsi",
57397 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57398
57399 {&hf_ieee80211_tag_obss_sptpc,
57400 {"Scan Passive Total Per Channel", "wlan.obss.sptpc",
57401 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57402
57403 {&hf_ieee80211_tag_obss_satpc,
57404 {"Scan Active Total Per Channel", "wlan.obss.satpc",
57405 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57406
57407 {&hf_ieee80211_tag_obss_wctdf,
57408 {"Width Channel Transition Delay Factor", "wlan.obss.wctdf",
57409 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57410
57411 {&hf_ieee80211_tag_obss_sat,
57412 {"Scan Activity Threshold", "wlan.obss.sat",
57413 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57414
57415 /* Group Data Cypher Suite: 802.11-2012: 8.4.2.25.1 */
57416 {&hf_ieee80211_group_data_cipher_suite_oui,
57417 {"Group Data Cypher Suite OUI", "wlan.osen.gdcs.oui",
57418 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57419
57420 /* TODO: List the suite names ... */
57421 {&hf_ieee80211_group_data_cipher_suite_type,
57422 {"Group Data Cypher Suite type", "wlan.osen.gdcs.type",
57423 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57424
57425 {&hf_ieee80211_osen_pcs_count,
57426 {"OSEN Pairwise Cipher Suite Count", "wlan.osen.pwcs.count",
57427 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57428
57429 {&hf_ieee80211_osen_pairwise_cipher_suite_oui,
57430 {"OSEN Pairwise Cypher Suite OUI", "wlan.osen.pwcs.oui",
57431 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57432
57433 {&hf_ieee80211_osen_pairwise_cipher_suite_type,
57434 {"OSEN Pairwise Cypher Suite type", "wlan.osen.pwcs.type",
57435 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57436
57437 {&hf_ieee80211_osen_akm_count,
57438 {"OSEN AKM Cipher Suite Count", "wlan.osen.akms.count",
57439 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57440
57441 {&hf_ieee80211_osen_akm_cipher_suite_oui,
57442 {"OSEN AKM Cipher Suite OUI", "wlan.osen.akms.oui",
57443 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57444
57445 {&hf_ieee80211_osen_akm_cipher_suite_type,
57446 {"OSEN AKM Cipher Suite Type", "wlan.osen.akms.type",
57447 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57448
57449 {&hf_ieee80211_osen_rsn_cap_preauth,
57450 {"RSN Pre-Auth capabilities", "wlan.osen.rsn.capabilities.preauth",
57451 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) }},
57452
57453 {&hf_ieee80211_osen_rsn_cap_no_pairwise,
57454 {"RSN No Pairwise capabilities", "wlan.osen.rsn.capabilities.no_pairwise",
57455 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) }},
57456
57457 {&hf_ieee80211_osen_rsn_cap_ptksa_replay_counter,
57458 {"RSN PTKSA Replay Counter capabilities",
57459 "wlan.osen.rsn.capabilities.ptksa_replay_counter",
57460 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) }},
57461
57462 {&hf_ieee80211_osen_rsn_cap_gtksa_replay_counter,
57463 {"RSN GTKSA Replay Counter capabilities",
57464 "wlan.osen.rsn.capabilities.gtksa_replay_counter",
57465 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) }},
57466
57467 {&hf_ieee80211_osen_group_management_cipher_suite_oui,
57468 {"OSEN Group Management Cipher Suite OUI", "wlan.osen.gmcs.oui",
57469 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57470
57471 {&hf_ieee80211_osen_group_management_cipher_suite_type,
57472 {"OSEN Group Management Cipher Suite Type", "wlan.osen.gmcs.type",
57473 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57474
57475 {&hf_ieee80211_osen_rsn_cap_mfpr,
57476 {"Management Frame Protection Required", "wlan.osen.rsn.capabilities.mfpr",
57477 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) }},
57478
57479 {&hf_ieee80211_osen_rsn_cap_mfpc,
57480 {"Management Frame Protection Capable", "wlan.osen.rsn.capabilities.mfpc",
57481 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) }},
57482
57483 {&hf_ieee80211_osen_rsn_cap_jmr,
57484 {"Joint Multi-band RSNA", "wlan.osen.rsn.capabilities.jmr",
57485 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) }},
57486
57487 {&hf_ieee80211_osen_rsn_cap_peerkey,
57488 {"PeerKey Enabled", "wlan.osen.rsn.capabilities.peerkey",
57489 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) }},
57490
57491 {&hf_ieee80211_osen_rsn_cap_flags,
57492 {"RSN Capability Flags", "wlan.osen.rsn.capabilities.flags",
57493 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57494
57495 {&hf_ieee80211_osen_rsn_spp_a_msdu_capable,
57496 {"SPP A-MSDU Capable", "wlan.osen.rsn.capabilities.spp_a_msdu_cap",
57497 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) }},
57498
57499 {&hf_ieee80211_osen_rsn_spp_a_msdu_required,
57500 {"SPP A-MSDU Required", "wlan.osen.rsn.capabilities.spp_a_msdu_req",
57501 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) }},
57502
57503 {&hf_ieee80211_osen_rsn_pbac,
57504 {"Protected Block Ack Agreement Capable", "wlan.osen.rsn.capabilities.pbac",
57505 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) }},
57506
57507 {&hf_ieee80211_osen_extended_key_id_iaf,
57508 {"Extended Key ID for Individually Addressed Frames",
57509 "wlan.osn.rsn.extended_key_id_iaf",
57510 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) }},
57511
57512 {&hf_ieee80211_osen_reserved,
57513 {"Reserved", "wlan.osen.rsn.capabilities.reserved",
57514 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57515
57516 {&hf_ieee80211_osen_pmkid_count,
57517 {"OSEN PMKID Count", "wlan.osen.pmkid.count",
57518 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57519
57520 {&hf_ieee80211_osen_pmkid,
57521 {"OSEN PKMID", "wlan.osen.pmkid.bytes",
57522 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57523
57524 /* RIC Descriptor IE: 802.11-2012: 8.4.2.53 */
57525 {&hf_ieee80211_tag_ric_desc_rsrc_type,
57526 {"Resource Type", "wlan.ric_desc.rsrc_type",
57527 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57528
57529 {&hf_ieee80211_tag_ric_desc_var_params,
57530 {"Variable Params", "wlan.ric_desc.var_params",
57531 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57532
57533 /* MMIE */
57534 {&hf_ieee80211_tag_mmie_keyid,
57535 {"KeyID", "wlan.mmie.keyid",
57536 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57537
57538 {&hf_ieee80211_tag_mmie_ipn,
57539 {"IPN", "wlan.mmie.ipn",
57540 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57541
57542 {&hf_ieee80211_tag_mmie_mic,
57543 {"MIC", "wlan.mmie.mic",
57544 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57545
57546 /* Non Transmitted BSSID Capability */
57547 {&hf_ieee80211_tag_no_bssid_capability_dmg_bss_control,
57548 {"DMG BSS Control", "wlan.no_bssid_capability.dmg_bss_control",
57549 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57550
57551 {&hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_type,
57552 {"Type", "wlan.no_bssid_capability.dmg_bss_control.type",
57553 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57554
57555 {&hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_reserved,
57556 {"Reserved", "wlan.no_bssid_capability.dmg_bss_control.reserved",
57557 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57558
57559 /* Multiple BSSID Index */
57560 {&hf_ieee80211_tag_multiple_bssid_index_bssid_index,
57561 {"BSSID Index", "wlan.multiple_bssid_index.bssid_index",
57562 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57563
57564 {&hf_ieee80211_tag_multiple_bssid_index_dtim_period,
57565 {"DTIM Period", "wlan.multiple_bssid_index.dtim_period",
57566 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57567
57568 {&hf_ieee80211_tag_multiple_bssid_index_dtim_count,
57569 {"DTIM Count", "wlan.multiple_bssid_index.dtim_count",
57570 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57571
57572 /* WAPI Parameter Set*/
57573 {&hf_ieee80211_tag_wapi_param_set_version,
57574 {"Version", "wlan.wapi.version",
57575 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57576 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57577
57578 {&hf_ieee80211_tag_wapi_param_set_akm_suite_count,
57579 {"AKM Suite Count", "wlan.wapi.akm_suite.count",
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_wapi_param_set_akm_suite_oui,
57584 {"AKM Suite OUI", "wlan.wapi.akm_suite.oui",
57585 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
57586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57587
57588 {&hf_ieee80211_tag_wapi_param_set_akm_suite_type,
57589 {"AKM Suite Type", "wlan.wapi.akm_suite.type",
57590 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_suite_type)((0 ? (const struct _value_string*)0 : ((ieee80211_wapi_suite_type
))))
, 0,
57591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57592
57593 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
57594 {"Unicast Cipher Suite Count", "wlan.wapi.unicast_cipher.suite.count",
57595 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57597
57598 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui,
57599 {"Unicast Cipher Suite OUI", "wlan.wapi.unicast_cipher.suite.oui",
57600 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
57601 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57602
57603 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type,
57604 {"Unicast Cipher Suite Type", "wlan.wapi.unicast_cipher.suite.type",
57605 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type)((0 ? (const struct _value_string*)0 : ((ieee80211_wapi_cipher_type
))))
, 0,
57606 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57607
57608 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui,
57609 {"Multicast Cipher Suite OUI", "wlan.wapi.multicast_cipher.suite.oui",
57610 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
57611 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57612
57613 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type,
57614 {"Multicast Cipher Suite Type", "wlan.wapi.multicast_cipher.suite.type",
57615 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type)((0 ? (const struct _value_string*)0 : ((ieee80211_wapi_cipher_type
))))
, 0,
57616 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57617
57618 {&hf_ieee80211_tag_wapi_param_set_capab,
57619 {"WAPI Capability Info", "wlan.wapi.capab",
57620 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57621 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57622
57623 {&hf_ieee80211_tag_wapi_param_set_capab_preauth,
57624 {"Supports Preauthentication?", "wlan.wapi.capab.preauth",
57625 FT_BOOLEAN, 16 , NULL((void*)0), 0x0001,
57626 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57627
57628 {&hf_ieee80211_tag_wapi_param_set_capab_rsvd,
57629 {"Reserved", "wlan.wapi.capab.rsvd",
57630 FT_UINT16, BASE_DEC , NULL((void*)0), 0xFFFE,
57631 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57632
57633 {&hf_ieee80211_tag_wapi_param_set_bkid_count,
57634 {"No of BKID's", "wlan.wapi.bkid.count",
57635 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57637
57638 {&hf_ieee80211_tag_wapi_param_set_bkid_list,
57639 {"BKID", "wlan.wapi.bkid",
57640 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57642
57643 /* BSS Max Idle Period */
57644 {&hf_ieee80211_tag_bss_max_idle_period,
57645 {"Max Idle Period (1000 TUs)", "wlan.bss_max_idle.period",
57646 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57647
57648 {&hf_ieee80211_tag_bss_max_idle_options,
57649 {"Idle Options", "wlan.bss_max_idle.options",
57650 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57651
57652 {&hf_ieee80211_tag_bss_max_idle_options_protected,
57653 {"Protected Keep-Alive Required",
57654 "wlan.bss_max_idle.options.protected",
57655 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57656
57657 {&hf_ieee80211_tag_bss_idle_options_reserved,
57658 {"Reserved", "wlan.bss_max_idle.options.reserved",
57659 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57660
57661 /* TFS Request */
57662 {&hf_ieee80211_tag_tfs_request_id,
57663 {"TFS ID", "wlan.tfs_request.id",
57664 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57665
57666 {&hf_ieee80211_tag_tfs_request_ac_delete_after_match,
57667 {"TFS Action Code - Delete after match",
57668 "wlan.tfs_request.action_code.delete_after_match",
57669 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57670
57671 {&hf_ieee80211_tag_tfs_request_ac_notify,
57672 {"TFS Action Code - Notify",
57673 "wlan.tfs_request.action_code.notify",
57674 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57675
57676 {&hf_ieee80211_tag_tfs_request_subelem_id,
57677 {"Subelement ID", "wlan.tfs_request.subelem.id",
57678 FT_UINT8, BASE_DEC, VALS(tfs_request_subelem_ids)((0 ? (const struct _value_string*)0 : ((tfs_request_subelem_ids
))))
, 0,
57679 "TFS Request Subelement ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57680
57681 {&hf_ieee80211_tag_tfs_request_subelem_len,
57682 {"Length", "wlan.tfs_request.subelem.len",
57683 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57684 "TFS Request Subelement Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57685
57686 {&hf_ieee80211_tag_tfs_request_subelem,
57687 {"Subelement Data", "wlan.tfs_request.subelem",
57688 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57689 "TFS Request Subelement Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57690
57691 /* TFS Response */
57692 {&hf_ieee80211_tag_tfs_response_subelem_id,
57693 {"Subelement ID", "wlan.tfs_response.subelem.id",
57694 FT_UINT8, BASE_DEC, VALS(tfs_response_subelem_ids)((0 ? (const struct _value_string*)0 : ((tfs_response_subelem_ids
))))
, 0,
57695 "TFS Response Subelement ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57696
57697 {&hf_ieee80211_tag_tfs_response_subelem_len,
57698 {"Length", "wlan.tfs_response.subelem.len",
57699 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57700 "TFS Response Subelement Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57701
57702 {&hf_ieee80211_tag_tfs_response_subelem,
57703 {"Subelement Data", "wlan.tfs_response.subelem",
57704 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57705 "TFS Response Subelement Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57706
57707 {&hf_ieee80211_tag_tfs_response_status,
57708 {"TFS Response Status", "wlan.tfs_response.status",
57709 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57710
57711 {&hf_ieee80211_tag_tfs_response_id,
57712 {"TFS ID", "wlan.tfs_response.tfs_id",
57713 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57714
57715 /* WNM-Sleep Mode */
57716 {&hf_ieee80211_tag_wnm_sleep_mode_action_type,
57717 {"Action Type", "wlan.wnm_sleep_mode.action_type",
57718 FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_action_types)((0 ? (const struct _value_string*)0 : ((wnm_sleep_mode_action_types
))))
, 0,
57719 "WNM-Sleep Mode Action Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57720
57721 {&hf_ieee80211_tag_wnm_sleep_mode_response_status,
57722 {"WNM-Sleep Mode Response Status",
57723 "wlan.wnm_sleep_mode.response_status",
57724 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),
57725 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57726
57727 {&hf_ieee80211_tag_wnm_sleep_mode_interval,
57728 {"WNM-Sleep Interval", "wlan.wnm_sleep_mode.interval",
57729 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57730
57731 {&hf_ieee80211_wnm_sub_elt_id,
57732 {"Subelement ID", "wlan.wnm_subelt.id",
57733 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57734
57735 {&hf_ieee80211_wnm_sub_elt_len,
57736 {"Subelement len", "wlan.wnm_subelt.len",
57737 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57738
57739 /* Time Advertisement */
57740 {&hf_ieee80211_tag_time_adv_timing_capab,
57741 {"Timing capabilities", "wlan.time_adv.timing_capab",
57742 FT_UINT8, BASE_DEC, VALS(time_adv_timing_capab_vals)((0 ? (const struct _value_string*)0 : ((time_adv_timing_capab_vals
))))
, 0,
57743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57744
57745 {&hf_ieee80211_tag_time_adv_time_value,
57746 {"Time Value", "wlan.time_adv.time_value",
57747 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57748 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57749
57750 {&hf_ieee80211_tag_time_adv_time_value_year,
57751 {"Time Value: Year", "wlan.time_adv.time_value.year",
57752 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57753 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57754
57755 {&hf_ieee80211_tag_time_adv_time_value_month,
57756 {"Time Value: Month", "wlan.time_adv.time_value.month",
57757 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57758 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57759
57760 {&hf_ieee80211_tag_time_adv_time_value_day,
57761 {"Time Value: Day", "wlan.time_adv.time_value.day",
57762 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57763 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57764
57765 {&hf_ieee80211_tag_time_adv_time_value_hours,
57766 {"Time Value: Hours", "wlan.time_adv.time_value.hours",
57767 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57768 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57769
57770 {&hf_ieee80211_tag_time_adv_time_value_minutes,
57771 {"Time Value: Minutes", "wlan.time_adv.time_value.minutes",
57772 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57773 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57774
57775 {&hf_ieee80211_tag_time_adv_time_value_seconds,
57776 {"Time Value: Seconds", "wlan.time_adv.time_value.seconds",
57777 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57778 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57779
57780 {&hf_ieee80211_tag_time_adv_time_value_milliseconds,
57781 {"Time Value: Milliseconds", "wlan.time_adv.time_value.milliseconds",
57782 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57783 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57784
57785 {&hf_ieee80211_tag_time_adv_time_value_reserved,
57786 {"Time Value: Reserved", "wlan.time_adv.time_value.reserved",
57787 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57788 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57789
57790 {&hf_ieee80211_tag_time_adv_time_error,
57791 {"Time Error", "wlan.time_adv.time_error",
57792 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57793 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57794
57795 {&hf_ieee80211_tag_time_adv_time_update_counter,
57796 {"Time Update Counter", "wlan.time_adv.time_update_counter",
57797 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57798 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57799
57800 /* Time Zone */
57801 {&hf_ieee80211_tag_time_zone,
57802 {"Time Zone", "wlan.time_zone",
57803 FT_STRING, BASE_NONE, NULL((void*)0), 0,
57804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57805
57806 /* Interworking */
57807 {&hf_ieee80211_tag_interworking_access_network_type,
57808 {"Access Network Type", "wlan.interworking.access_network_type",
57809 FT_UINT8, BASE_DEC, VALS(access_network_type_vals)((0 ? (const struct _value_string*)0 : ((access_network_type_vals
))))
, 0x0f,
57810 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57811
57812 {&hf_ieee80211_tag_interworking_internet,
57813 {"Internet", "wlan.interworking.internet",
57814 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
57815 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57816
57817 {&hf_ieee80211_tag_interworking_asra,
57818 {"ASRA", "wlan.interworking.asra",
57819 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
57820 "Additional Step Required for Access", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57821
57822 {&hf_ieee80211_tag_interworking_esr,
57823 {"ESR", "wlan.interworking.esr",
57824 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
57825 "Emergency services reachable", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57826
57827 {&hf_ieee80211_tag_interworking_uesa,
57828 {"UESA", "wlan.interworking.uesa",
57829 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
57830 "Unauthenticated emergency service accessible", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57831
57832 {&hf_ieee80211_tag_interworking_hessid,
57833 {"HESSID", "wlan.interworking.hessid",
57834 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
57835 "Homogeneous ESS identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57836
57837 /* QoS Map Set element */
57838 {&hf_ieee80211_tag_qos_map_set_dscp_exc,
57839 {"DSCP Exception", "wlan.qos_map_set.dscp_exception",
57840 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57841
57842 {&hf_ieee80211_tag_qos_map_set_dscp_exc_val,
57843 {"DSCP Value", "wlan.qos_map_set.dscp_value",
57844 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57845 "DSCP Exception - DSCP Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57846
57847 {&hf_ieee80211_tag_qos_map_set_dscp_exc_up,
57848 {"User Priority", "wlan.qos_map_set.up",
57849 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57850 "DSCP Exception - User Priority", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57851
57852 {&hf_ieee80211_tag_qos_map_set_range,
57853 {"DSCP Range description", "wlan.qos_map_set.range",
57854 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57855
57856 {&hf_ieee80211_tag_qos_map_set_low,
57857 {"DSCP Low Value", "wlan.qos_map_set.dscp_low_value",
57858 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57859 "DSCP Range description - DSCP Low Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57860
57861 {&hf_ieee80211_tag_qos_map_set_high,
57862 {"DSCP High Value", "wlan.qos_map_set.dscp_high_value",
57863 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57864 "DSCP Range description - DSCP High Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57865
57866 /* Advertisement Protocol */
57867 {&hf_ieee80211_tag_adv_proto_resp_len_limit,
57868 {"Query Response Length Limit", "wlan.adv_proto.resp_len_limit",
57869 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7f,
57870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57871
57872 {&hf_ieee80211_tag_adv_proto_pame_bi,
57873 {"PAME-BI", "wlan.adv_proto.pame_bi",
57874 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
57875 "Pre-Association Message Xchange BSSID Independent (PAME-BI)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57876
57877 {&hf_ieee80211_tag_adv_proto_id,
57878 {"Advertisement Protocol ID", "wlan.adv_proto.id",
57879 FT_UINT8, BASE_DEC, VALS(adv_proto_id_vals)((0 ? (const struct _value_string*)0 : ((adv_proto_id_vals)))
)
, 0,
57880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57881
57882 {&hf_ieee80211_tag_adv_vs_len,
57883 {"Advertisement Protocol Vendor Specific length", "wlan.adv_proto.vs_len",
57884 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
57886#if 0
57887 {&hf_ieee80211_tag_adv_proto_vs_info,
57888 {"Advertisement Protocol Vendor Specific info", "wlan.adv_proto.vs_info",
57889 FT_NONE, BASE_NONE, NULL((void*)0), 0,
57890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57891#endif
57892
57893 /* Roaming Consortium */
57894 {&hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
57895 {"Number of ANQP OIs", "wlan.roaming_consortium.num_anqp_oi",
57896 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57897 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57898
57899 {&hf_ieee80211_tag_roaming_consortium_oi1_len,
57900 {"OI #1 Length", "wlan.roaming_consortium.oi1_len",
57901 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57902 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57903
57904 {&hf_ieee80211_tag_roaming_consortium_oi2_len,
57905 {"OI #2 Length", "wlan.roaming_consortium.oi2_len",
57906 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
57907 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57908
57909 {&hf_ieee80211_tag_roaming_consortium_oi1,
57910 {"OI #1", "wlan.roaming_consortium.oi1",
57911 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57913
57914 {&hf_ieee80211_tag_roaming_consortium_oi2,
57915 {"OI #2", "wlan.roaming_consortium.oi2",
57916 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57918
57919 {&hf_ieee80211_tag_roaming_consortium_oi3,
57920 {"OI #3", "wlan.roaming_consortium.oi3",
57921 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57923
57924 /* Timeout Interval */
57925 {&hf_ieee80211_tag_timeout_int_type,
57926 {"Timeout Interval Type", "wlan.timeout_int.type",
57927 FT_UINT8, BASE_DEC, VALS(timeout_int_types)((0 ? (const struct _value_string*)0 : ((timeout_int_types)))
)
, 0,
57928 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57929
57930 {&hf_ieee80211_tag_timeout_int_value,
57931 {"Timeout Interval Value", "wlan.timeout_int.value",
57932 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57933 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57934
57935 /* Link Identifier */
57936 {&hf_ieee80211_tag_link_id_bssid,
57937 {"BSSID", "wlan.link_id.bssid",
57938 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
57939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57940
57941 {&hf_ieee80211_tag_link_id_init_sta,
57942 {"TDLS initiator STA Address", "wlan.link_id.init_sta",
57943 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
57944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57945
57946 {&hf_ieee80211_tag_link_id_resp_sta,
57947 {"TDLS responder STA Address", "wlan.link_id.resp_sta",
57948 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
57949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57950
57951 /* Wakeup Schedule */
57952 {&hf_ieee80211_tag_wakeup_schedule_offset,
57953 {"Offset", "wlan.wakeup_schedule.offset",
57954 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57956
57957 {&hf_ieee80211_tag_wakeup_schedule_interval,
57958 {"Interval", "wlan.wakeup_schedule.interval",
57959 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57961
57962 {&hf_ieee80211_tag_wakeup_schedule_awake_window_slots,
57963 {"Awake Window Slots", "wlan.wakeup_schedule.awake_window_slots",
57964 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57966
57967 {&hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
57968 {"Maximum Awake Window Duration", "wlan.wakeup_schedule.max_awake_dur",
57969 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57971
57972 {&hf_ieee80211_tag_wakeup_schedule_idle_count,
57973 {"Idle Count", "wlan.wakeup_schedule.idle_count",
57974 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57976
57977 /* Channel Switch Timing */
57978 {&hf_ieee80211_tag_channel_switch_timing_switch_time,
57979 {"Switch Time", "wlan.channel_switch_timing.switch_time",
57980 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57981 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57982
57983 {&hf_ieee80211_tag_channel_switch_timing_switch_timeout,
57984 {"Switch Timeout", "wlan.channel_switch_timing.switch_timeout",
57985 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57986 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57987
57988 /* PTI Control */
57989 {&hf_ieee80211_tag_pti_control_tid,
57990 {"TID", "wlan.pti_control.tid",
57991 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57993
57994 {&hf_ieee80211_tag_pti_control_sequence_control,
57995 {"Sequence Control", "wlan.pti_control.sequence_control",
57996 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57998
57999 /* PU Buffer Status */
58000 {&hf_ieee80211_tag_pu_buffer_status_ac_bk,
58001 {"AC_BK traffic available", "wlan.pu_buffer_status.ac_bk",
58002 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
58003 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58004
58005 {&hf_ieee80211_tag_pu_buffer_status_ac_be,
58006 {"AC_BE traffic available", "wlan.pu_buffer_status.ac_be",
58007 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
58008 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58009
58010 {&hf_ieee80211_tag_pu_buffer_status_ac_vi,
58011 {"AC_VI traffic available", "wlan.pu_buffer_status.ac_vi",
58012 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
58013 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58014
58015 {&hf_ieee80211_tag_pu_buffer_status_ac_vo,
58016 {"AC_VO traffic available", "wlan.pu_buffer_status.ac_vo",
58017 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
58018 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58019
58020 /* 60g ie */
58021 {&hf_ieee80211_wfa_60g_attr,
58022 {"Attribute", "wlan.60g.attr",
58023 FT_NONE, BASE_NONE, NULL((void*)0), 0,
58024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58025
58026 {&hf_ieee80211_wfa_60g_attr_id,
58027 {"Attribute ID", "wlan.60g.attr.id",
58028 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_60g_attr_ids)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_60g_attr_ids
))))
, 0x0,
58029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58030
58031 {&hf_ieee80211_wfa_60g_attr_len,
58032 {"Attribute Length", "wlan.60g.attr.length",
58033 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
58034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58035
58036 {&hf_ieee80211_wfa_60g_attr_cap_sta_mac_addr,
58037 {"STA Address", "wlan.60g.attr.60g_cap.sta_mac_addr",
58038 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0,
58039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58040
58041 {&hf_ieee80211_wfa_60g_attr_cap_recv_amsdu_frames,
58042 {"Receive Capability AMSDU", "wlan.60g.attr.60g_cap.recv_amsdu",
58043 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
58044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58045
58046 {&hf_ieee80211_wfa_60g_attr_cap_reserved,
58047 {"Reserved", "wlan.60g.attr.60g_cap.reserved",
58048 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfe,
58049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58050
58051 {&hf_ieee80211_mysterious_extra_stuff,
58052 {"Mysterious extra OLPC/Ruckus/Atheros/Vector/??? stuff", "wlan.mysterious_extra_stuff",
58053 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
58054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58055
58056 {&hf_ieee80211_mscs_descriptor_type,
58057 {"Request Type", "wlan.ext_tag.mscs_descriptor.request_type",
58058 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(scs_request_type_rvals)((0 ? (const struct _range_string*)0 : ((scs_request_type_rvals
))))
,
58059 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58060
58061 {&hf_ieee80211_mscs_user_prio_control_reserved,
58062 {"Reserved", "wlan.ext_tag.mscs_descriptor.reserved1",
58063 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58064
58065 {&hf_ieee80211_user_prio_bitmap,
58066 {"User Priority Bitmap",
58067 "wlan.ext_tag.mscs_descriptor.user_prio_control.upbm",
58068 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58069
58070 {&hf_ieee80211_user_prio_bitmap_bit0,
58071 {"User Priority 0",
58072 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_0",
58073 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) }},
58074
58075 {&hf_ieee80211_user_prio_bitmap_bit1,
58076 {"User Priority 1",
58077 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_1",
58078 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) }},
58079
58080 {&hf_ieee80211_user_prio_bitmap_bit2,
58081 {"User Priority 2",
58082 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_2",
58083 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) }},
58084
58085 {&hf_ieee80211_user_prio_bitmap_bit3,
58086 {"User Priority 3",
58087 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_3",
58088 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) }},
58089
58090 {&hf_ieee80211_user_prio_bitmap_bit4,
58091 {"User Priority 4",
58092 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_4",
58093 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) }},
58094
58095 {&hf_ieee80211_user_prio_bitmap_bit5,
58096 {"User Priority 5",
58097 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_5",
58098 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) }},
58099
58100 {&hf_ieee80211_user_prio_bitmap_bit6,
58101 {"User Priority 6",
58102 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_6",
58103 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) }},
58104
58105 {&hf_ieee80211_user_prio_bitmap_bit7,
58106 {"User Priority 7",
58107 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_7",
58108 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) }},
58109
58110 {&hf_ieee80211_user_prio_limit,
58111 {"User Priority Limit",
58112 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_limit",
58113 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58114
58115 {&hf_ieee80211_user_prio_reserved,
58116 {"Reserved", "wlan.ext_tag.mscs_descriptor.user_prio_control.reserved",
58117 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58118
58119 {&hf_ieee80211_stream_timeout_reserved,
58120 {"Reserved", "wlan.ext_tag.mscs_descriptor.reserved2",
58121 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58122
58123 {&hf_ieee80211_stream_timeout,
58124 {"Stream Timeout", "wlan.ext_tag.mscs_descriptor.stream_timeout",
58125 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) }},
58126
58127 {&hf_ieee80211_mscs_subelement_id,
58128 {"MSCS Subelement ID", "wlan.ext_tag.mscs_descriptor.subelement_id",
58129 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58130
58131 {&hf_ieee80211_mscs_subelement_len,
58132 {"MSCS Subelement Length", "wlan.ext_tag.mscs_descriptor.subelement_len",
58133 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58134
58135 {&hf_ieee80211_mscs_subelement_data,
58136 {"MSCS Subelement Data", "wlan.ext_tag.mscs_descriptor.subelement_data",
58137 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58138
58139 {&hf_ieee80211_intra_access_prio,
58140 {"Intra-Access Priority", "wlan.tag.scs_intra_access_prio",
58141 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58142
58143 {&hf_ieee80211_intra_access_prio_user_prio,
58144 {"User Priority", "wlan.tag.scs_intra_access_prio.user_prio",
58145 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58146
58147 {&hf_ieee80211_intra_access_prio_alt_queue,
58148 {"Alternate Queue", "wlan.tag.scs_intra_access_prio.alt_queue",
58149 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58150
58151 {&hf_ieee80211_intra_access_prio_drop_elig,
58152 {"Drop Eligibility", "wlan.tag.scs_intra_access_prio.drop_elig",
58153 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58154
58155 {&hf_ieee80211_intra_access_prio_reserved,
58156 {"Reserved", "wlan.tag.scs_intra_access_prio.reserved",
58157 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58158
58159 {&hf_ieee80211_scs_descriptor_scsid,
58160 {"SCSID", "wlan.tag.scs_descriptor.scsid",
58161 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58162
58163 {&hf_ieee80211_scs_descriptor_type,
58164 {"Request Type", "wlan.tag.scs_descriptor.request_type",
58165 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(scs_request_type_rvals)((0 ? (const struct _range_string*)0 : ((scs_request_type_rvals
))))
,
58166 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58167
58168 {&hf_ieee80211_estimated_service_params,
58169 {"Estimated Service Parameters", "wlan.ext_tag.estimated_service_params",
58170 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58171
58172 {&hf_ieee80211_esp_access_category,
58173 {"Access Category", "wlan.ext_tag.estimated_service_params.access_category",
58174 FT_UINT24, BASE_DEC, VALS(esp_access_category_vals)((0 ? (const struct _value_string*)0 : ((esp_access_category_vals
))))
, 0x000003,
58175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58176
58177 {&hf_ieee80211_esp_reserved,
58178 {"Reserved", "wlan.ext_tag.estimated_service_params.reserved",
58179 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58180
58181 {&hf_ieee80211_esp_data_format,
58182 {"Data Format", "wlan.ext_tag.estimated_service_params.data_format",
58183 FT_UINT24, BASE_DEC, VALS(esp_data_format_vals)((0 ? (const struct _value_string*)0 : ((esp_data_format_vals
))))
, 0x000018,
58184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58185
58186 {&hf_ieee80211_esp_ba_windows_size,
58187 {"BA Window Size", "wlan.ext_tag.estimated_service_params.ba_window_size",
58188 FT_UINT24, BASE_DEC, VALS(esp_ba_window_size_vals)((0 ? (const struct _value_string*)0 : ((esp_ba_window_size_vals
))))
, 0x0000E0,
58189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58190
58191 {&hf_ieee80211_esp_est_air_time_frac,
58192 {"Estimated Air Time Fraction", "wlan.ext_tag.estimated_service_params.air_time_frac",
58193 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00FF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58194
58195 {&hf_ieee80211_esp_data_ppdu_duration_target,
58196 {"Data PPDU Duration Target", "wlan.ext_tag.estimated_service_params.data_ppdu_dur_target",
58197 FT_UINT24, BASE_DEC, NULL((void*)0), 0xFF0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58198
58199 {&hf_ieee80211_fcg_new_channel_number,
58200 {"New Channel Number", "wlan.ext_tag.future_channel_guidance.new_chan_num",
58201 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58202
58203 {&hf_ieee80211_fcg_extra_info,
58204 {"Extra bytes", "wlan.ext_tag.future_channel_guidance.extra_bytes",
58205 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58206
58207 {&hf_ieee80211_sae_password_identifier,
58208 {"Password Identifier", "wlan.ext_tag.sae.password_identifier",
58209 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58210
58211 {&hf_ieee80211_sae_anti_clogging_token,
58212 {"Anti-Clogging Token", "wlan.ext_tag.sae.anti_clogging_token",
58213 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
58214 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58215
58216 {&hf_ieee80211_tag_fils_indication_info_nr_pk,
58217 {"Number of Public Key Identifiers", "wlan.fils_indication.info.nr_pk",
58218 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) }},
58219
58220 {&hf_ieee80211_tag_fils_indication_info_nr_realm,
58221 {"Number of Realm Identifiers", "wlan.fils_indication.info.nr_realm",
58222 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) }},
58223
58224 {&hf_ieee80211_tag_fils_indication_info_ip_config,
58225 {"FILS IP Address Configuration", "wlan.fils_indication.info.ip_config",
58226 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) }},
58227
58228 {&hf_ieee80211_tag_fils_indication_info_cache_id_included,
58229 {"Cache Identifier", "wlan.fils_indication.info.cache_id_included",
58230 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) }},
58231
58232 {&hf_ieee80211_tag_fils_indication_info_hessid_included,
58233 {"HESSID", "wlan.fils_indication.info.hessid_included",
58234 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) }},
58235
58236 {&hf_ieee80211_tag_fils_indication_info_ska_without_pfs,
58237 {"FILS Shared Key Authentication without PFS", "wlan.fils_indication.info.ska_without_pfs",
58238 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) }},
58239
58240 {&hf_ieee80211_tag_fils_indication_info_ska_with_pfs,
58241 {"FILS Shared Key Authentication with PFS", "wlan.fils_indication.info.ska_with_pfs",
58242 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) }},
58243
58244 {&hf_ieee80211_tag_fils_indication_info_pka,
58245 {"FILS Public Key Authentication", "wlan.fils_indication.info.pka",
58246 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) }},
58247
58248 {&hf_ieee80211_tag_fils_indication_info_reserved,
58249 {"Reserved", "wlan.fils_indication.info.reserved",
58250 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) }},
58251
58252 {&hf_ieee80211_tag_fils_indication_cache_identifier,
58253 {"Cache Identifier", "wlan.fils_indication.cache_identifier",
58254 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58255
58256 {&hf_ieee80211_tag_fils_indication_hessid,
58257 {"HESSID", "wlan.fils_indication.hessid",
58258 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58259
58260 {&hf_ieee80211_tag_fils_indication_realm_list,
58261 {"Realm Identifiers", "wlan.fils_indication.realms",
58262 FT_NONE, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58263
58264 {&hf_ieee80211_tag_fils_indication_realm_identifier,
58265 {"Realm Identifier", "wlan.fils_indication.realms.identifier",
58266 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58267
58268 {&hf_ieee80211_tag_fils_indication_public_key_list,
58269 {"Public Keys", "wlan.fils_indication.public_keys",
58270 FT_NONE, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58271
58272 {&hf_ieee80211_tag_fils_indication_public_key_type,
58273 {"Key Type", "wlan.fils_indication.public_keys.key_type",
58274 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58275
58276 {&hf_ieee80211_tag_fils_indication_public_key_length,
58277 {"Length", "wlan.fils_indication.public_keys.length",
58278 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58279
58280 {&hf_ieee80211_tag_fils_indication_public_key_indicator,
58281 {"Public Key Indicator", "wlan.fils_indication.public_keys.indicator",
58282 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58283
58284 {&hf_ieee80211_qos_mgmt_attribute_id,
58285 {"Attribute ID", "wlan.qos_mgmt.ie.attribute_id",
58286 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(qos_mgmt_attributes)((0 ? (const struct _range_string*)0 : ((qos_mgmt_attributes)
)))
, 0,
58287 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58288
58289 {&hf_ieee80211_qos_mgmt_attribute_len,
58290 {"Length", "wlan.qos_mgmt.ie.length",
58291 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58292
58293 {&hf_ieee80211_qos_mgmt_start_port_range,
58294 {"Start Port", "wlan.qos_mgmt.ie.start_port",
58295 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58296
58297 {&hf_ieee80211_qos_mgmt_end_port_range,
58298 {"End Port", "wlan.qos_mgmt.ie.end_port",
58299 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58300
58301 {&hf_ieee80211_qos_mgmt_dscp_pol_id,
58302 {"Policy ID", "wlan.qos_mgmt.ie.dscp_policy.policy_id",
58303 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58304
58305 {&hf_ieee80211_qos_mgmt_dscp_pol_req_type,
58306 {"Request Type", "wlan.qos_mgmt.ie.dscp_policy.request_type",
58307 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58308
58309 {&hf_ieee80211_qos_mgmt_dscp_pol_dscp,
58310 {"DSCP", "wlan.qos_mgmt.ie.dscp_policy.dscp",
58311 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58312
58313 {&hf_ieee80211_qos_mgmt_domain_name,
58314 {"Domain Name", "wlan.qos_mgmt.ie.domain_name",
58315 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58316
58317 {&hf_ieee80211_qos_mgmt_unknown_attr,
58318 {"Unknown attribute", "wlan.qos_mgmt.ie.unknown_attribute",
58319 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58320
58321 {&hf_ieee80211_wfa_capa_tag_data,
58322 {"WFA Capabilities Data", "wlan.wfa_capa.ie.data",
58323 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58324
58325 {&hf_ieee80211_wfa_capa_tag_len,
58326 {"Capabilities Length", "wlan.wfa_capa.ie.capabilities_length",
58327 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58328
58329 {&hf_ieee80211_wfa_capa_tag_capabilities,
58330 {"Capabilities", "wlan.wfa_capa.ie.capabilities",
58331 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58332
58333 {&hf_ieee80211_wfa_capa_mgmt_dscp_policy,
58334 {"QoS Management DSCP Policy",
58335 "wlan.wfa_capa.ie.capabilities.b0",
58336 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58337
58338 {&hf_ieee80211_wfa_capa_mgmt_unsol_dscp_policy,
58339 {"QoS Management Unsolicited DSCP Policy At Association",
58340 "wlan.wfa_capa.ie.capabilities.b1",
58341 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58342
58343 {&hf_ieee80211_wfa_capa_mgmt_scs_traffic_desc,
58344 {"QoS Management SCS Traffic Description",
58345 "wlan.wfa_capa.ie.capabilities.b2",
58346 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58347
58348 {&hf_ieee80211_wfa_capa_5g_wifi_qos_mapping,
58349 {"5G QoS to Wi-Fi QoS Mapping",
58350 "wlan.wfa_capa.ie.capabilities.b3",
58351 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58352
58353 {&hf_ieee80211_wfa_capa_data_plane_stat_report,
58354 {"Data Plane Statistics Reporting Support",
58355 "wlan.wfa_capa.ie.capabilities.b4",
58356 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58357
58358 {&hf_ieee80211_wfa_capa_radio_counters_stat_support,
58359 {"Radio Counters Statistics Support",
58360 "wlan.wfa_capa.ie.capabilities.b5",
58361 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58362
58363 {&hf_ieee80211_wfa_capa_control_plane_stat_report,
58364 {"Control Plane Statistics Reporting Support",
58365 "wlan.wfa_capa.ie.capabilities.b6",
58366 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58367
58368 {&hf_ieee80211_wfa_capa_unsolicited_report_support,
58369 {"Unsolicited Report Support",
58370 "wlan.wfa_capa.ie.capabilities.b7",
58371 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58372
58373 {&hf_ieee80211_wfa_capa_attr_id,
58374 {"Attribute ID", "wlan.wfa_capa.ie.attribute_id",
58375 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(wfa_capa_attr_id)((0 ? (const struct _range_string*)0 : ((wfa_capa_attr_id)))),
58376 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58377
58378 {&hf_ieee80211_wfa_capa_attr_len,
58379 {"Attribute Length", "wlan.wfa_capa.ie.attribute_length",
58380 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58381
58382 {&hf_ieee80211_wfa_capa_attr_field,
58383 {"Attribute Body Field", "wlan.wfa_capa.ie.attribute_body_field",
58384 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58385
58386 {&hf_ieee80211_wfa_capa_attr_supp_gene_length,
58387 {"Supported Generations Length", "wlan.wfa_capa.ie.supported_generations_length",
58388 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58389
58390 {&hf_ieee80211_wfa_capa_attr_supp_generations,
58391 {"Supported Generations", "wlan.wfa_capa.ie.supported_generations",
58392 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58393
58394 {&hf_ieee80211_wfa_capa_attr_supp_generations_b0,
58395 {"Wi-Fi 4 Supported", "wlan.wfa_capa.ie.supported_generations.b0",
58396 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58397
58398 {&hf_ieee80211_wfa_capa_attr_supp_generations_b1,
58399 {"Wi-Fi 5 Supported", "wlan.wfa_capa.ie.supported_generations.b1",
58400 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58401
58402 {&hf_ieee80211_wfa_capa_attr_supp_generations_b2,
58403 {"Wi-Fi 6 Supported", "wlan.wfa_capa.ie.supported_generations.b2",
58404 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58405
58406 {&hf_ieee80211_wfa_capa_attr_supp_generations_b3,
58407 {"Wi-Fi 7 Supported", "wlan.wfa_capa.ie.supported_generations.b3",
58408 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58409
58410 {&hf_ieee80211_wfa_capa_attr_supp_generations_reserved,
58411 {"Reserved", "wlan.wfa_capa.ie.supported_generations.reserved",
58412 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58413
58414 {&hf_ieee80211_wfa_capa_attr_cert_gene_length,
58415 {"Certified Generations Length", "wlan.wfa_capa.ie.certified_generations_length",
58416 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58417
58418 {&hf_ieee80211_wfa_capa_attr_cert_generations,
58419 {"Certified Generations", "wlan.wfa_capa.ie.certified_generations",
58420 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58421
58422 {&hf_ieee80211_wfa_capa_attr_cert_generations_b0,
58423 {"Wi-Fi CERTIFIED n", "wlan.wfa_capa.ie.certified_generations.b0",
58424 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58425
58426 {&hf_ieee80211_wfa_capa_attr_cert_generations_b1,
58427 {"Wi-Fi CERTIFIED ac", "wlan.wfa_capa.ie.certified_generations.b1",
58428 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58429
58430 {&hf_ieee80211_wfa_capa_attr_cert_generations_b2,
58431 {"Wi-Fi CERTIFIED 6", "wlan.wfa_capa.ie.certified_generations.b2",
58432 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58433
58434 {&hf_ieee80211_wfa_capa_attr_cert_generations_b3,
58435 {"Wi-Fi CERTIFIED 7", "wlan.wfa_capa.ie.certified_generations.b3",
58436 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58437
58438 {&hf_ieee80211_wfa_capa_attr_cert_generations_reserved,
58439 {"Reserved", "wlan.wfa_capa.ie.certified_generations.reserved",
58440 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58441
58442 {&hf_ieee80211_ext_tag,
58443 {"Ext Tag", "wlan.ext_tag",
58444 FT_NONE, BASE_NONE, NULL((void*)0), 0,
58445 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58446
58447 {&hf_ieee80211_ext_tag_number,
58448 {"Ext Tag Number", "wlan.ext_tag.number",
58449 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_eid_ext_ext, 0,
58450 "Element ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58451
58452 {&hf_ieee80211_ext_tag_length,
58453 {"Ext Tag length", "wlan.ext_tag.length",
58454 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
58455 "Length of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58456
58457 {&hf_ieee80211_ext_tag_data,
58458 {"Ext Tag Data", "wlan.ext_tag.data",
58459 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
58460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58461
58462 {&hf_ieee80211_fils_req_params_parameter_control_bitmap,
58463 {"Parameter Control Bitmap", "wlan.ext_tag.fils.req_params.parameter_control_bitmap",
58464 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58465 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58466
58467 {&hf_ieee80211_fils_req_params_fils_criteria_present,
58468 {"FILS Criteria Present", "wlan.ext_tag.fils.req_params.fils_criteria_present",
58469 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA0x01,
58470 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58471
58472 {&hf_ieee80211_fils_req_params_max_delay_limit_present,
58473 {"Max Delay Limit Present", "wlan.ext_tag.fils.req_params.max_delay_limit_present",
58474 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_MAX_DELAY_LIMIT0x02,
58475 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58476
58477 {&hf_ieee80211_fils_req_params_minimum_data_rate_present,
58478 {"Minimum Data Rate Present", "wlan.ext_tag.fils.req_params.minimum_data_rate_present",
58479 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_MINIMUM_DATA_RATE0x04,
58480 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58481
58482 {&hf_ieee80211_fils_req_params_rcpi_limit_present,
58483 {"RCPI Limit Present", "wlan.ext_tag.fils.req_params.rcpi_limit_present",
58484 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_RCPI_LIMIT0x08,
58485 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58486
58487 {&hf_ieee80211_fils_req_params_oui_response_criteria_present,
58488 {"OUI Response Criteria Present", "wlan.ext_tag.fils.req_params.oui_response_criteria_present",
58489 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_OUI_RESPONSE_CRITERIA0x10,
58490 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58491
58492 {&hf_ieee80211_fils_req_params_reserved,
58493 {"Reserved", "wlan.ext_tag.fils.req_params.reserved",
58494 FT_UINT8, BASE_HEX, NULL((void*)0), FILS_REQ_PARAMS_RESERVED0xE0,
58495 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58496
58497 {&hf_ieee80211_fils_req_params_max_channel_time,
58498 {"Max Channel Time", "wlan.ext_tag.fils.req_params.max_channel_time",
58499 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58501
58502 {&hf_ieee80211_fils_req_params_fils_criteria,
58503 {"FILS Criteria", "wlan.ext_tag.fils.req_params.fils_criteria",
58504 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58505 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58506
58507 {&hf_ieee80211_fils_req_params_fils_criteria_bss_delay,
58508 {"BSS Delay", "wlan.ext_tag.fils.req_params.fils_criteria.bss_delay",
58509 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA_BSS_DELAY0x07,
58510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58511
58512 {&hf_ieee80211_fils_req_params_fils_criteria_phy_support,
58513 {"PHY Support", "wlan.ext_tag.fils.req_params.fils_criteria.phy_support",
58514 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA_PHY_SUPPORT0x38,
58515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58516
58517 {&hf_ieee80211_fils_req_params_fils_criteria_reserved,
58518 {"Reserved", "wlan.ext_tag.fils.req_params.fils_criteria.reserved",
58519 FT_UINT8, BASE_HEX, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA_RESERVED0xC0,
58520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58521
58522 {&hf_ieee80211_fils_req_params_max_delay_limit,
58523 {"Max Delay Limit", "wlan.ext_tag.fils.req_params.max_delay_limit",
58524 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58526
58527 {&hf_ieee80211_fils_req_params_minimum_data_rate,
58528 {"Minimum Data Rate", "wlan.ext_tag.fils.req_params.minimum_data_rate",
58529 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
58530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58531
58532 {&hf_ieee80211_fils_req_params_rcpi_limit,
58533 {"RCPI Limit", "wlan.ext_tag.fils.req_params.rcpi_limit",
58534 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58536
58537 {&hf_ieee80211_fils_req_params_oui_response_criteria,
58538 {"OUI Response Criteria", "wlan.ext_tag.fils.req_params.oui_response_criteria",
58539 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
58540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58541
58542 {&hf_ieee80211_fils_session,
58543 {"FILS Session", "wlan.ext_tag.fils.session",
58544 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
58545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58546
58547 {&hf_ieee80211_fils_encrypted_data,
58548 {"FILS Encrypted Data", "wlan.ext_tag.fils.encrypted_data",
58549 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
58550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58551
58552 {&hf_ieee80211_fils_nonce,
58553 {"FILS Nonce", "wlan.ext_tag.fils.nonce",
58554 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
58555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58556
58557 {&hf_ieee80211_he_mac_capabilities,
58558 {"HE MAC Capabilities Information", "wlan.ext_tag.he_mac_caps",
58559 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58560
58561 {&hf_ieee80211_he_htc_he_support,
58562 {"+HTC HE Support", "wlan.ext_tag.he_mac_cap.htc_he_support",
58563 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000000001,
58564 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58565
58566 {&hf_ieee80211_he_twt_requester_support,
58567 {"TWT Requester Support", "wlan.ext_tag.he_mac_cap.twt_req_support",
58568 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000000002,
58569 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58570
58571 {&hf_ieee80211_he_twt_responder_support,
58572 {"TWT Responder Support", "wlan.ext_tag.he_mac_cap.twt_rsp_support",
58573 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000000004,
58574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58575
58576 {&hf_ieee80211_he_dynamic_fragmentation_support,
58577 {"Dynamic Fragmentation Support", "wlan.ext_tag.he_mac_cap.dynamic_fragmentation_support",
58578 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400,
58579 VALS64(he_dynamic_fragmentation_support_vals)((0 ? (const struct _val64_string*)0 : ((he_dynamic_fragmentation_support_vals
))))
, 0x000000000018,
58580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58581
58582 {&hf_ieee80211_he_max_number_fragmented_msdus,
58583 {"Maximum Number of Fragmented MSDUs", "wlan.ext_tag.he_mac_cap.max_frag_msdus",
58584 FT_UINT48, BASE_CUSTOM, CF_FUNC(max_frag_msdus_base_custom)((const void *) (size_t) (max_frag_msdus_base_custom)), 0x0000000000E0,
58585 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58586
58587 {&hf_ieee80211_he_min_fragment_size,
58588 {"Minimum Fragment Size", "wlan.ext_tag.he_mac_cap.min_frag_size",
58589 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400,
58590 VALS64(he_minimum_fragmentation_size_vals)((0 ? (const struct _val64_string*)0 : ((he_minimum_fragmentation_size_vals
))))
, 0x000000000300,
58591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58592
58593 {&hf_ieee80211_he_trigger_frame_mac_padding_dur,
58594 {"Trigger Frame MAC Padding Duration", "wlan.ext_tag.he_mac_cap.trig_frm_mac_padding_dur",
58595 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) }},
58596
58597 {&hf_ieee80211_he_multi_tid_aggregation_rx_support,
58598 {"Multi-TID Aggregation Rx Support", "wlan.ext_tag.he_mac_cap.multi_tid_agg_rx_support",
58599 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000007000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58600
58601 {&hf_ieee80211_he_he_link_adaptation_support,
58602 {"HE Link Adaptation Support", "wlan.ext_tag.he_mac_cap.he_link_adaptation_support",
58603 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400,
58604 VALS64(he_link_adaptation_support_vals)((0 ? (const struct _val64_string*)0 : ((he_link_adaptation_support_vals
))))
, 0x000000018000,
58605 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58606
58607 {&hf_ieee80211_he_all_ack_support,
58608 {"All Ack Support", "wlan.ext_tag.he_mac_cap.all_ack_support",
58609 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000020000,
58610 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58611
58612 {&hf_ieee80211_he_trs_support,
58613 {"TRS Support", "wlan.ext_tag.he_mac_cap.trs_support",
58614 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000040000,
58615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58616
58617 {&hf_ieee80211_he_bsr_support,
58618 {"BSR Support", "wlan.ext_tag.he_mac_cap.bsr_support",
58619 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000080000,
58620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58621
58622 {&hf_ieee80211_he_broadcast_twt_support,
58623 {"Broadcast TWT Support", "wlan.ext_tag.he_mac_cap.broadcast_twt_support",
58624 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000100000,
58625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58626
58627 {&hf_ieee80211_he_32_bit_ba_bitmap_support,
58628 {"32-bit BA Bitmap Support", "wlan.ext_tag.he_mac_cap.32_bit_ba_bitmap_support",
58629 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000200000,
58630 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58631
58632 {&hf_ieee80211_he_mu_cascading_support,
58633 {"MU Cascading Support", "wlan.ext_tag.he_mac_cap.mu_cascading_support",
58634 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000400000,
58635 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58636
58637 {&hf_ieee80211_he_ack_enabled_aggregation_support,
58638 {"Ack-Enabled Aggregation Support", "wlan.ext_tag.he_mac_cap.ack_enabled_agg_support",
58639 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000800000,
58640 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58641
58642 {&hf_ieee80211_he_reserved_b24,
58643 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_b24",
58644 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000001000000,
58645 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58646
58647 {&hf_ieee80211_he_om_control_support,
58648 {"OM Control Support", "wlan.ext_tag.he_mac_cap.om_control_support",
58649 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000002000000,
58650 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58651
58652 {&hf_ieee80211_he_ofdma_ra_support,
58653 {"OFDMA RA Support", "wlan.ext_tag.he_mac_cap.ofdma_ra_support",
58654 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000004000000,
58655 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58656
58657 {&hf_ieee80211_he_max_a_mpdu_length_exponent_ext,
58658 {"Maximum A-MPDU Length Exponent Extension",
58659 "wlan.ext_tag.he_mac_cap.max_a_mpdu_len_exp_ext",
58660 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000018000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58661
58662 {&hf_ieee80211_he_a_msdu_fragmentation_support,
58663 {"A-MSDU Fragmentation Support", "wlan.ext_tag.he_mac_cap.a_msdu_frag_support",
58664 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000020000000,
58665 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58666
58667 {&hf_ieee80211_he_flexible_twt_schedule_support,
58668 {"Flexible TWT Schedule Support", "wlan.ext_tag.he_mac_cap.flexible_twt_sched_support",
58669 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000040000000,
58670 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58671
58672 {&hf_ieee80211_he_rx_control_frame_to_multibss,
58673 {"Rx Control Frame to MultiBSS", "wlan.ext_tag.he_mac_cap.rx_ctl_frm_multibss",
58674 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000080000000,
58675 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58676
58677 {&hf_ieee80211_he_bsrp_bqrp_a_mpdu_aggregation,
58678 {"BSRP BQRP A-MPDU Aggregation", "wlan.ext_tag.he_mac_cap.bsrp_bqrp_a_mpdu_agg",
58679 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000100000000,
58680 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58681
58682 {&hf_ieee80211_he_qtp_support,
58683 {"QTP Support", "wlan.ext_tag.he_mac_cap.qtp_support",
58684 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000200000000,
58685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58686
58687 {&hf_ieee80211_he_bqr_support,
58688 {"BQR Support", "wlan.ext_tag.he_mac_cap.bqr_support",
58689 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000400000000,
58690 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58691
58692 {&hf_ieee80211_he_psr_responder,
58693 {"PSR Responder", "wlan.ext_tag.he_mac_cap.psr_responder",
58694 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000800000000,
58695 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58696
58697 {&hf_ieee80211_he_ndp_feedback_report_support,
58698 {"NDP Feedback Report Support", "wlan.ext_tag.he_mac_cap.ndp_feedback_report_support",
58699 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x001000000000,
58700 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58701
58702 {&hf_ieee80211_he_ops_support,
58703 {"OPS Support", "wlan.ext_tag.he_mac_cap.ops_support",
58704 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x002000000000,
58705 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58706
58707 {&hf_ieee80211_he_a_msdu_in_a_mpdu_support,
58708 {"A-MSDU Not Under BA in Ack-Enabled A-MPDU Support", "wlan.ext_tag.he_mac_cap.a_msdu_in_a_mpdu_support",
58709 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x004000000000,
58710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58711
58712 {&hf_ieee80211_he_multi_tid_aggregation_tx_support,
58713 {"Multi-TID Aggregation Tx Support", "wlan.ext_tag.he_mac_cap.multi_tid_agg_tx_support",
58714 FT_UINT48, BASE_DEC, NULL((void*)0), 0x038000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58715
58716 {&hf_ieee80211_he_subchannel_selective_trans_support,
58717 {"HE Subchannel Selective Transmission Support", "wlan.ext_tag.he_mac_cap.subchannel_selective_xmit_support",
58718 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58719 0x040000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58720
58721 {&hf_ieee80211_he_2_996_tone_ru_support,
58722 {"UL 2x996-tone RU Support", "wlan.ext_tag.he_mac_cap.ul_2_996_tone_ru_support",
58723 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58724 0x080000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58725
58726 {&hf_ieee80211_he_om_control_ul_mu_data_disable_rx_support,
58727 {"OM Control UL MU Data Disable RX Support", "wlan.ext_tag.he_mac_cap.om_cntl_ul_mu_data_disable_rx_support",
58728 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58729 0x100000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58730
58731 {&hf_ieee80211_he_dynamic_sm_power_save,
58732 {"HE Dynamic SM Power Save", "wlan.ext_tag.he_mac_cap.dynamic_sm_power_save",
58733 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58734 0x200000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58735
58736 {&hf_ieee80211_he_punctured_sounding_support,
58737 {"Punctured Sounding Support", "wlan.ext_tag.he_mac_cap.punctured_sounding_support",
58738 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58739 0x400000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58740
58741 {&hf_ieee80211_he_ht_and_vht_trigger_frame_rx_support,
58742 {"HT And VHT Trigger Frame RX Support", "wlan.ext_tag.he_mac_cap.ht_and_vht_trigger_frame_rx_support",
58743 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58744 0x800000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58745
58746 {&hf_ieee80211_he_reserved_bits_5_7,
58747 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bits_5_7",
58748 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0000000000E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58749
58750 {&hf_ieee80211_he_reserved_bits_8_9,
58751 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bits_8_9",
58752 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58753
58754 {&hf_ieee80211_he_reserved_bits_15_16,
58755 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bits_15_16",
58756 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000018000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58757
58758 {&hf_ieee80211_he_reserved_bit_18,
58759 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_18",
58760 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000040000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58761
58762 {&hf_ieee80211_he_reserved_bit_19,
58763 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_19",
58764 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000080000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58765
58766 {&hf_ieee80211_he_reserved_bit_25,
58767 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_25",
58768 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58769
58770 {&hf_ieee80211_he_reserved_bit_29,
58771 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_29",
58772 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000020000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58773
58774 {&hf_ieee80211_he_reserved_bit_34,
58775 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_34",
58776 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000400000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58777
58778 {&hf_ieee80211_he_phy_reserved_b0,
58779 {"Reserved", "wlan.ext_tag.he_phy_cap.reserved_b0",
58780 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58781
58782 {&hf_ieee80211_he_phy_cap_reserved_b0,
58783 {"Reserved", "wlan.ext_tag.he_phy_cap.fbyte.reserved_b0",
58784 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
58785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58786
58787 {&hf_ieee80211_he_phy_chan_width_set,
58788 {"Channel Width Set", "wlan.ext_tag.he_phy_cap.fbytes",
58789 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58790
58791 {&hf_ieee80211_he_40mhz_channel_2_4ghz,
58792 {"40 MHz in 2.4 GHz band", "wlan.ext_tag.he_phy_cap.chan_width_set.40mhz_in_2_4ghz",
58793 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) }},
58794
58795 {&hf_ieee80211_he_40_and_80_mhz_5ghz,
58796 {"40 & 80 MHz in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.40_80_in_5ghz",
58797 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) }},
58798
58799 {&hf_ieee80211_he_160_mhz_5ghz,
58800 {"160 MHz in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.160_in_5ghz",
58801 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) }},
58802
58803 {&hf_ieee80211_he_160_80_plus_80_mhz_5ghz,
58804 {"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",
58805 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) }},
58806
58807 {&hf_ieee80211_he_242_tone_rus_in_2_4ghz,
58808 {"242 tone RUs in the 2.4 GHz band", "wlan.ext_tag.he_phy_cap.chan_width_set.242_tone_in_2_4ghz",
58809 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) }},
58810
58811 {&hf_ieee80211_he_242_tone_rus_in_5ghz,
58812 {"242 tone RUs in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.242_tone_in_5ghz",
58813 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) }},
58814
58815 {&hf_ieee80211_he_chan_width_reserved,
58816 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width_set.reserved",
58817 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58818
58819 {&hf_ieee80211_he_phy_b8_to_b23,
58820 {"Bits 8 to 23", "wlan.ext_tag.he_phy_cap.bits_8_to_23",
58821 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58822
58823 {&hf_ieee80211_he_5ghz_b0_reserved,
58824 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.5GHz_b0_reserved",
58825 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58826
58827 {&hf_ieee80211_he_5ghz_b4_reserved,
58828 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.5GHz_b4_reserved",
58829 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58830
58831 {&hf_ieee80211_he_24ghz_b1_reserved,
58832 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b1_reserved",
58833 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58834
58835 {&hf_ieee80211_he_24ghz_b2_reserved,
58836 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b2_reserved",
58837 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58838
58839 {&hf_ieee80211_he_24ghz_b3_reserved,
58840 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b3_reserved",
58841 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58842
58843 {&hf_ieee80211_he_24ghz_b5_reserved,
58844 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b5_reserved",
58845 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58846
58847 {&hf_ieee80211_he_phy_cap_punctured_preamble_rx,
58848 {"Punctured Preamble Rx", "wlan.ext_tag.he_phy_cap.punc_preamble_rx",
58849 FT_UINT16, BASE_HEX, NULL((void*)0), 0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58850
58851 {&hf_ieee80211_he_phy_cap_device_class,
58852 {"Device Class", "wlan.ext_tag.he_phy_cap.device_class",
58853 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) }},
58854
58855 {&hf_ieee80211_he_phy_cap_ldpc_coding_in_payload,
58856 {"LDPC Coding In Payload", "wlan.ext_tag.he_phy_cap.ldpc_coding_in_payload",
58857 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) }},
58858
58859 {&hf_ieee80211_he_phy_cap_he_su_ppdu_1x_he_ltf_08us,
58860 {"HE SU PPDU With 1x HE-LTF And 0.8us GI",
58861 "wlan.ext_tag.he_phy_cap.he_su_ppdu_with_1x_he_ltf_08us",
58862 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) }},
58863
58864 {&hf_ieee80211_he_phy_cap_midamble_tx_rx_max_nsts,
58865 {"Midamble Tx/Rx Max NSTS", "wlan.ext_tag.he_phy_cap.midamble_tx_rx_max_nsts",
58866 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) }},
58867
58868 {&hf_ieee80211_he_phy_cap_ndp_with_4x_he_ltf_32us,
58869 {"NDP With 4x HE-LTF and 3.2us GI",
58870 "wlan.ext_tag.he_phy_cap.ndp_with_4x_he_ltf_4x_3.2us",
58871 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) }},
58872
58873 {&hf_ieee80211_he_phy_cap_stbc_tx_lt_80mhz,
58874 {"STBC Tx <= 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_tx_lt_80mhz",
58875 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) }},
58876
58877 {&hf_ieee80211_he_phy_cap_stbc_rx_lt_80mhz,
58878 {"STBC Rx <= 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_rx_lt_80mhz",
58879 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) }},
58880
58881 {&hf_ieee80211_he_phy_cap_doppler_tx,
58882 {"Doppler Tx", "wlan.ext_tag.he_phy_cap.doppler_tx",
58883 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) }},
58884
58885 {&hf_ieee80211_he_phy_cap_doppler_rx,
58886 {"Doppler Rx", "wlan.ext_tag.he_phy_cap.doppler_rx",
58887 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) }},
58888
58889 {&hf_ieee80211_he_phy_cap_full_bw_ul_mu_mimo,
58890 {"Full Bandwidth UL MU-MIMO", "wlan.ext_tag.he_phy_cap.full_bw_ul_mu_mimo",
58891 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) }},
58892
58893 {&hf_ieee80211_he_phy_cap_partial_bw_ul_mu_mimo,
58894 {"Partial Bandwidth UL MU-MIMO", "wlan.ext_tag.he_phy_cap.partial_bw_ul_mu_mimo",
58895 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) }},
58896
58897 {&hf_ieee80211_he_phy_b24_to_b39,
58898 {"Bits 24 to 39", "wlan.ext_tag.he_phy_cap.bits_24_to_39",
58899 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58900
58901 {&hf_ieee80211_he_phy_cap_dcm_max_constellation_tx,
58902 {"DCM Max Constellation Tx", "wlan.ext_tag.he_phy_cap.dcm_max_const_tx",
58903 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) }},
58904
58905 {&hf_ieee80211_he_phy_cap_dcm_max_nss_tx,
58906 {"DCM Max NSS Tx", "wlan.ext_tag.he_phy_cap.dcm_max_nss_tx",
58907 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) }},
58908
58909 {&hf_ieee80211_he_phy_cap_dcm_max_constellation_rx,
58910 {"DCM Max Constellation Rx", "wlan.ext_tag.he_phy_cap.dcm_max_const_rx",
58911 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) }},
58912
58913 {&hf_ieee80211_he_phy_cap_dcm_max_nss_rx,
58914 {"DCM Max NSS Rx", "wlan.ext_tag.he_phy_cap.dcm_max_nss_rx",
58915 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) }},
58916
58917 {&hf_ieee80211_he_phy_cap_rx_partial_bw_su_20mhz_he_mu_ppdu,
58918 {"Rx Partial BW SU In 20 MHz HE MU PPDU", "wlan.ext_tag.he_phy_cap.rx_partial_bw_su_20mhz_he_mu_ppdu",
58919 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) }},
58920
58921 {&hf_ieee80211_he_phy_cap_su_beamformer,
58922 {"SU Beamformer", "wlan.ext_tag.he_phy_cap.su_beamformer",
58923 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) }},
58924
58925 {&hf_ieee80211_he_phy_cap_su_beamformee,
58926 {"SU Beamformee", "wlan.ext_tag.he_phy_cap.su_beamformee",
58927 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) }},
58928
58929 {&hf_ieee80211_he_phy_cap_mu_beamformer,
58930 {"MU Beamformer", "wlan.ext_tag.he_phy_cap.mu_beamformer",
58931 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) }},
58932
58933 {&hf_ieee80211_he_phy_cap_beamformee_sts_lte_80mhz,
58934 {"Beamformee STS <= 80 MHz", "wlan.ext_tag.he_phy_cap.beamformee_sts_lte_80mhz",
58935 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58936
58937 {&hf_ieee80211_he_phy_cap_beamformee_sts_gt_80mhz,
58938 {"Beamformee STS > 80 MHz", "wlan.ext_tag.he_phy_cap.beamformee_sts_gt_80mhz",
58939 FT_UINT16, BASE_HEX, NULL((void*)0), 0xE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58940
58941 {&hf_ieee80211_he_phy_b40_to_b55,
58942 {"Bits 40 to 55", "wlan.ext_tag.he_phy_cap.bits_40_to_55",
58943 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58944
58945 {&hf_ieee80211_he_phy_cap_number_of_sounding_dims_lte_80,
58946 {"Number Of Sounding Dimensions <= 80 MHz", "wlan.ext_tag.he_phy_cap.no_sounding_dims_lte_80",
58947 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58948
58949 {&hf_ieee80211_he_phy_cap_number_of_sounding_dims_gt_80,
58950 {"Number Of Sounding Dimensions > 80 MHz", "wlan.ext_tag.he_phy_cap.no_sounding_dims_gt_80",
58951 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58952
58953 {&hf_ieee80211_he_phy_cap_ng_eq_16_su_fb,
58954 {"Ng = 16 SU Feedback", "wlan.ext_tag.he_phy_cap.ng_eq_16_su_fb",
58955 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) }},
58956
58957 {&hf_ieee80211_he_phy_cap_ng_eq_16_mu_fb,
58958 {"Ng = 16 MU Feedback", "wlan.ext_tag.he_phy_cap.ng_eq_16_mu_fb",
58959 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) }},
58960
58961 {&hf_ieee80211_he_phy_cap_codebook_size_eq_4_2_fb,
58962 {"Codebook Size SU Feedback", "wlan.ext_tag.he_phy_cap.codebook_size_su_fb",
58963 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) }},
58964
58965 {&hf_ieee80211_he_phy_cap_codebook_size_eq_7_5_fb,
58966 {"Codebook Size MU Feedback", "wlan.ext_tag.he_phy_cap.codebook_size_mu_fb",
58967 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) }},
58968
58969 {&hf_ieee80211_he_phy_cap_triggered_su_beamforming_fb,
58970 {"Triggered SU Beamforming Feedback", "wlan.ext_tag.he_phy_cap.trig_su_bf_fb",
58971 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) }},
58972
58973 {&hf_ieee80211_he_phy_cap_triggered_mu_beamforming_fb,
58974 {"Triggered MU Beamforming Feedback", "wlan.ext_tag.he_phy_cap.trig_mu_bf_fb",
58975 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) }},
58976
58977 {&hf_ieee80211_he_phy_cap_triggered_cqi_fb,
58978 {"Triggered CQI Feedback", "wlan.ext_tag.he_phy_cap.trig_cqi_fb",
58979 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) }},
58980
58981 {&hf_ieee80211_he_phy_cap_partial_bw_extended_range,
58982 {"Partial Bandwidth Extended Range", "wlan.ext_tag.he_phy_cap.partial_bw_er",
58983 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) }},
58984
58985 {&hf_ieee80211_he_phy_cap_partial_bw_dl_mu_mimo,
58986 {"Partial Bandwidth DL MU-MIMO", "wlan.ext_tag.he_phy_cap.partial_bw_dl_mu_mimo",
58987 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) }},
58988
58989 {&hf_ieee80211_he_phy_cap_ppe_threshold_present,
58990 {"PPE Thresholds Present", "wlan.ext_tag.he_phy_cap.ppe_thres_present",
58991 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58992
58993 {&hf_ieee80211_he_phy_b56_to_b71,
58994 {"Bits 56 to 71", "wlan.ext_tag.he_phy_cap.bits_56_to_71",
58995 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58996
58997 {&hf_ieee80211_he_phy_cap_psr_based_sr_support,
58998 {"PSR-based SR Support", "wlan.ext_tag.he_phy_cap.psr_based_sr_sup",
58999 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) }},
59000
59001 {&hf_ieee80211_he_phy_cap_power_boost_factor_ar_support,
59002 {"Power Boost Factor ar Support", "wlan.ext_tag.he_phy_cap.pwr_bst_factor_ar_sup",
59003 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) }},
59004
59005 {&hf_ieee80211_he_phy_cap_he_su_ppdu_etc_gi,
59006 {"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",
59007 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) }},
59008
59009 {&hf_ieee80211_he_phy_cap_max_nc,
59010 {"Max Nc", "wlan.ext_tag.he_phy_cap.max_nc",
59011 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) }},
59012
59013 {&hf_ieee80211_he_phy_cap_stbc_tx_gt_80_mhz,
59014 {"STBC Tx > 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_tx_gt_80_mhz",
59015 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) }},
59016
59017 {&hf_ieee80211_he_phy_cap_stbc_rx_gt_80_mhz,
59018 {"STBC Rx > 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_rx_gt_80_mhz",
59019 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) }},
59020
59021 {&hf_ieee80211_he_phy_cap_he_er_su_ppdu_4xxx_gi,
59022 {"HE ER SU PPDU With 4x HE-LTF And 0.8us GI", "wlan.ext_tag.he_phy_cap.he_er_su_ppdu_4xxx_gi",
59023 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) }},
59024
59025 {&hf_ieee80211_he_phy_cap_20mhz_in_40mhz_24ghz_band,
59026 {"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",
59027 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) }},
59028
59029 {&hf_ieee80211_he_phy_cap_20mhz_in_160_80p80_ppdu,
59030 {"20 MHz In 160/80+80 MHz HE PPDU", "wlan.ext_tag.he_phy_cap.20_mhz_in_160_80p80_ppdu",
59031 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) }},
59032
59033 {&hf_ieee80211_he_phy_cap_80mgz_in_160_80p80_ppdu,
59034 {"80 MHz In 160/80+80 MHz HE PPDU", "wlan.ext_tag.he_phy_cap.80_mhz_in_160_80p80_ppdu",
59035 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) }},
59036
59037 {&hf_ieee80211_he_phy_cap_he_er_su_ppdu_1xxx_gi,
59038 {"HE ER SU PPDU With 1x HE-LTF And 0.8us GI", "wlan.ext_tag.he_phy_cap.he_er_su_ppdu_1xxx_gi",
59039 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) }},
59040
59041 {&hf_ieee80211_he_phy_cap_midamble_tx_rx_2x_xxx_ltf,
59042 {"Midamble Tx/Rx 2x And 1x HE-LTF", "wlan.ext_tag.he_phy_cap.midamble_tx_rx_2x_1x_he_ltf",
59043 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) }},
59044
59045 {&hf_ieee80211_he_phy_b72_to_b87,
59046 {"Bits 72 to 87", "wlan.ext_tag.he_phy_cap.bits_72_to_87",
59047 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59048
59049 {&hf_ieee80211_he_phy_cap_dcm_max_ru,
59050 {"DCM Max RU", "wlan.ext_tag.he_phy_cap.dcm_max_ru",
59051 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) }},
59052
59053 {&hf_ieee80211_he_phy_cap_longer_than_16_he_sigb_ofdm_symbol_support,
59054 {"Longer Than 16 HE SIG-B OFDM Symbols Support", "wlan.ext_tag.he_phy_cap.longer_than_16_he_sigb_ofdm_sym_support",
59055 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) }},
59056
59057 {&hf_ieee80211_he_phy_cap_non_triggered_cqi_feedback,
59058 {"Non-Triggered CQI Feedback", "wlan.ext_tag.he_phy_cap.non_triggered_feedback",
59059 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) }},
59060
59061 {&hf_ieee80211_he_phy_cap_tx_1024_qam_242_tone_ru_support,
59062 {"Tx 1024-QAM Support < 242-tone RU Support", "wlan.ext_tag.he_phy_cap.tx_1024_qam_support_lt_242_tone_ru",
59063 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) }},
59064
59065 {&hf_ieee80211_he_phy_cap_rx_1024_qam_242_tone_ru_support,
59066 {"Rx 1024-QAM Support < 242-tone RU Support", "wlan.ext_tag.he_phy_cap.rx_1024_qam_support_lt_242_tone_ru",
59067 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) }},
59068
59069 {&hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_compressed_sigb,
59070 {"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",
59071 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) }},
59072
59073 {&hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_non_compressed_sigb,
59074 {"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",
59075 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) }},
59076
59077 {&hf_ieee80211_he_phy_cap_nominal_packet_padding,
59078 {"Nominal Packet Padding", "wlan.ext_tag.he_phy_cap.nominal_packet_padding",
59079 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) }},
59080
59081 {&hf_ieee80211_he_phy_cap_he_mu_ppdu_ru_rx_max,
59082 {"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",
59083 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59084
59085 {&hf_ieee80211_he_phy_cap_b81_b87_reserved,
59086 {"Reserved", "wlan.ext_tag.he_phy_cap.reserved_b81_b87",
59087 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59088
59089 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_1_ss,
59090 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_1_ss",
59091 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) }},
59092
59093 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_2_ss,
59094 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_2_ss",
59095 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) }},
59096
59097 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_3_ss,
59098 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_3_ss",
59099 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) }},
59100
59101 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_4_ss,
59102 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_4_ss",
59103 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) }},
59104
59105 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_5_ss,
59106 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_5_ss",
59107 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) }},
59108
59109 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_6_ss,
59110 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_6_ss",
59111 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) }},
59112
59113 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_7_ss,
59114 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_7_ss",
59115 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) }},
59116
59117 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_8_ss,
59118 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_8_ss",
59119 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) }},
59120
59121 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_1_ss,
59122 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_1_ss",
59123 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) }},
59124
59125 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_2_ss,
59126 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_2_ss",
59127 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) }},
59128
59129 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_3_ss,
59130 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_3_ss",
59131 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) }},
59132
59133 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_4_ss,
59134 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_4_ss",
59135 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) }},
59136
59137 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_5_ss,
59138 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_5_ss",
59139 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) }},
59140
59141 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_6_ss,
59142 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_6_ss",
59143 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) }},
59144
59145 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_7_ss,
59146 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_7_ss",
59147 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) }},
59148
59149 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_8_ss,
59150 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_8_ss",
59151 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) }},
59152
59153 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_1_ss,
59154 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_1_ss",
59155 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) }},
59156
59157 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_2_ss,
59158 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_2_ss",
59159 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) }},
59160
59161 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_3_ss,
59162 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_3_ss",
59163 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) }},
59164
59165 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_4_ss,
59166 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_4_ss",
59167 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) }},
59168
59169 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_5_ss,
59170 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_5_ss",
59171 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) }},
59172
59173 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_6_ss,
59174 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_6_ss",
59175 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) }},
59176
59177 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_7_ss,
59178 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_7_ss",
59179 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) }},
59180
59181 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_8_ss,
59182 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_8_ss",
59183 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) }},
59184
59185 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_1_ss,
59186 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_1_ss",
59187 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) }},
59188
59189 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_2_ss,
59190 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_2_ss",
59191 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) }},
59192
59193 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_3_ss,
59194 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_3_ss",
59195 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) }},
59196
59197 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_4_ss,
59198 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_4_ss",
59199 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) }},
59200
59201 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_5_ss,
59202 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_5_ss",
59203 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) }},
59204
59205 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_6_ss,
59206 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_6_ss",
59207 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) }},
59208
59209 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_7_ss,
59210 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_7_ss",
59211 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) }},
59212
59213 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_8_ss,
59214 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_8_ss",
59215 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) }},
59216
59217 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_1_ss,
59218 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_1_ss",
59219 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) }},
59220
59221 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_2_ss,
59222 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_2_ss",
59223 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) }},
59224
59225 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_3_ss,
59226 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_3_ss",
59227 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) }},
59228
59229 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_4_ss,
59230 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_4_ss",
59231 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) }},
59232
59233 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_5_ss,
59234 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_5_ss",
59235 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) }},
59236
59237 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_6_ss,
59238 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_6_ss",
59239 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) }},
59240
59241 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_7_ss,
59242 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_7_ss",
59243 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) }},
59244
59245 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_8_ss,
59246 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_8_ss",
59247 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) }},
59248
59249 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_1_ss,
59250 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_1_ss",
59251 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) }},
59252
59253 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_2_ss,
59254 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_2_ss",
59255 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) }},
59256
59257 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_3_ss,
59258 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_3_ss",
59259 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) }},
59260
59261 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_4_ss,
59262 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_4_ss",
59263 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) }},
59264
59265 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_5_ss,
59266 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_5_ss",
59267 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) }},
59268
59269 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_6_ss,
59270 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_6_ss",
59271 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) }},
59272
59273 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_7_ss,
59274 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_7_ss",
59275 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) }},
59276
59277 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_8_ss,
59278 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_8_ss",
59279 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) }},
59280
59281 {&hf_ieee80211_he_rx_he_mcs_map_lte_80,
59282 {"Rx HE-MCS Map <= 80 MHz", "wlan.ext_tag.he_mcs_map.rx_he_mcs_map_lte_80",
59283 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59284
59285 {&hf_ieee80211_he_tx_he_mcs_map_lte_80,
59286 {"Tx HE-MCS Map <= 80 MHz", "wlan.ext_tag.he_mcs_map.tx_he_mcs_map_lte_80",
59287 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59288
59289 {&hf_ieee80211_he_rx_he_mcs_map_160,
59290 {"Rx HE-MCS Map 160 MHz", "wlan.ext_tag.he_mcs_map.rx_he_mcs_map_160",
59291 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59292
59293 {&hf_ieee80211_he_tx_he_mcs_map_160,
59294 {"Tx HE-MCS Map 160 MHz", "wlan.ext_tag.he_mcs_map.tx_he_mcs_map_160",
59295 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59296
59297 {&hf_ieee80211_he_rx_he_mcs_map_80_80,
59298 {"Rx HE-MCS Map 80+80 MHz", "wlan.ext_tag.he_mcs_map.rx_he_mcs_map_80_80",
59299 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59300
59301 {&hf_ieee80211_he_tx_he_mcs_map_80_80,
59302 {"Tx HE-MCS Map 80+80 MHz", "wlan.ext_tag.he_mcs_map.tx_he_mcs_map_80_80",
59303 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59304
59305 {&hf_ieee80211_he_ppe_thresholds_nss,
59306 {"NSS", "wlan.ext_tag.he_ppe_thresholds.nss",
59307 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59308
59309 {&hf_ieee80211_he_ppe_thresholds_ru_index_bitmask,
59310 {"RU Index Bitmask", "wlan.ext_tag.he_ppe_thresholds.ru_index_bitmask",
59311 FT_UINT8, BASE_HEX, NULL((void*)0), 0x78, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59312
59313 {&hf_ieee80211_he_ppe_ppet16,
59314 {"PPET16","wlan.ext_tag.he_ppe_thresholds.ppet16",
59315 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) }},
59316
59317 {&hf_ieee80211_he_ppe_ppet8,
59318 {"PPET8","wlan.ext_tag.he_ppe_thresholds.ppet8",
59319 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) }},
59320
59321 {&hf_ieee80211_he_operation_parameter,
59322 {"HE Operation Parameters", "wlan.ext_tag.he_operation.params",
59323 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59324
59325 {&hf_ieee80211_he_operation_default_pe_duration,
59326 {"Default PE Duration", "wlan.ext_tag.he_operation.default_pe_duration",
59327 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59328
59329 {&hf_ieee80211_he_operation_twt_required,
59330 {"TWT Required", "wlan.ext_tag.he_operation.twt_required",
59331 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) }},
59332
59333 {&hf_ieee80211_he_operation_txop_duration_rts_threshold,
59334 {"TXOP Duration RTS Threshold", "wlan.ext_tag.he_operation.txop_duration_rts_thresh",
59335 FT_UINT24, BASE_DEC, NULL((void*)0), 0x003FF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59336
59337 {&hf_ieee80211_he_operation_vht_operation_information_present,
59338 {"VHT Operation Information Present", "wlan.ext_tag.he_operation.vht_op_info_present",
59339 FT_BOOLEAN, 24, NULL((void*)0), 0x004000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59340
59341 {&hf_ieee80211_he_operation_co_hosted_bss,
59342 {"Co-Hosted BSS", "wlan.ext_tag.he_operation.co_hosted_bss",
59343 FT_BOOLEAN, 24, NULL((void*)0), 0x008000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59344
59345 {&hf_ieee80211_he_operation_er_su_disable,
59346 {"ER SU Disable", "wlan.ext_tag.he_operation.er_su_disable",
59347 FT_BOOLEAN, 24, NULL((void*)0), 0x010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59348
59349 {&hf_ieee80211_he_operation_6ghz_operation_information_present,
59350 {"6 GHz Operation Information Present", "wlan.ext_tag.he_operation.6ghz_operation_information_present",
59351 FT_BOOLEAN, 24, NULL((void*)0), 0x020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59352
59353 {&hf_ieee80211_he_operation_reserved_b16_b23,
59354 {"Reserved", "wlan.ext_tag.he_operation.reserved_b16_b32",
59355 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFC0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59356
59357 {&hf_ieee80211_he_bss_color_information,
59358 {"BSS Color Information", "wlan.ext_tag.bss_color_information",
59359 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59360
59361 {&hf_ieee80211_he_bss_color_info_bss_color,
59362 {"BSS Color", "wlan.ext_tag.bss_color_information.bss_color",
59363 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59364
59365 {&hf_ieee80211_he_bss_color_partial_bss_color,
59366 {"Partial BSS Color", "wlan.ext_tag.bss_color_information.partial_bss_color",
59367 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59368
59369 {&hf_ieee80211_he_bss_color_bss_color_disabled,
59370 {"BSS Color Disabled", "wlan.ext_tag.bss_color_information.bss_color_disabled",
59371 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59372
59373 {&hf_ieee80211_he_operation_basic_mcs,
59374 {"Basic HE-MCS and NSS Set", "wlan.ext_tag.he_operation.basic_he_mcs_and_nss",
59375 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59376
59377 {&hf_ieee80211_he_oper_max_he_mcs_for_1_ss,
59378 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_1_ss",
59379 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) }},
59380
59381 {&hf_ieee80211_he_oper_max_he_mcs_for_2_ss,
59382 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_2_ss",
59383 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) }},
59384
59385 {&hf_ieee80211_he_oper_max_he_mcs_for_3_ss,
59386 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_3_ss",
59387 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) }},
59388
59389 {&hf_ieee80211_he_oper_max_he_mcs_for_4_ss,
59390 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_4_ss",
59391 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) }},
59392
59393 {&hf_ieee80211_he_oper_max_he_mcs_for_5_ss,
59394 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_5_ss",
59395 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) }},
59396
59397 {&hf_ieee80211_he_oper_max_he_mcs_for_6_ss,
59398 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_6_ss",
59399 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) }},
59400
59401 {&hf_ieee80211_he_oper_max_he_mcs_for_7_ss,
59402 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_7_ss",
59403 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) }},
59404
59405 {&hf_ieee80211_he_oper_max_he_mcs_for_8_ss,
59406 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_8_ss",
59407 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) }},
59408
59409 {&hf_ieee80211_he_operation_channel_width,
59410 {"Channel Width", "wlan.ext_tag.he_operation.vht_op_info.channel_width",
59411 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) }},
59412
59413 {&hf_ieee80211_he_operation_channel_center_freq_0,
59414 {"Channel Center Frequency Segment 0", "wlan.ext_tag.he_operation.vht_op_info.chan_center_freq_seg_0",
59415 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59416
59417 {&hf_ieee80211_he_operation_channel_center_freq_1,
59418 {"Channel Center Frequency Segment 1", "wlan.ext_tag.he_operation.vht_op_info.chan_center_freq_seg_1",
59419 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59420
59421 {&hf_ieee80211_he_operation_max_co_hosted_bssid_indicator,
59422 {"Max Co-Hosted BSSID Indicator", "wlan.ext_tag.he_operation.max_co_hosted_bssid_indicator",
59423 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59424
59425 {&hf_ieee80211_he_operation_6ghz_primary_channel,
59426 {"Primary Channel", "wlan.ext_tag.he_operation.6ghz.primary_channel",
59427 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59428
59429 {&hf_ieee80211_he_operation_6ghz_control,
59430 {"Control", "wlan.ext_tag.he_operation.6ghz.control",
59431 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59432
59433 {&hf_ieee80211_he_operation_6ghz_control_channel_width,
59434 {"Channel Width", "wlan.ext_tag.he_operation.6ghz.control.channel_width",
59435 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) }},
59436
59437 {&hf_ieee80211_he_operation_6ghz_control_duplicate_beacon,
59438 {"Duplicate Beacon", "wlan.ext_tag.he_operation.6ghz.control.duplicate_beacon",
59439 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59440
59441 {&hf_ieee80211_he_operation_6ghz_control_regulatory_info,
59442 {"Regulatory Info", "wlan.ext_tag.he_operation.6ghz.control.regulatory_info",
59443 FT_UINT8, BASE_DEC, NULL((void*)0), 0x78, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59444
59445 {&hf_ieee80211_he_operation_6ghz_control_reserved,
59446 {"Reserved", "wlan.ext_tag.he_operation.6ghz.control.reserved",
59447 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59448
59449 {&hf_ieee80211_he_operation_6ghz_channel_center_freq_0,
59450 {"Channel Center Frequency Segment 0", "wlan.ext_tag.he_operation.6ghz.chan_center_freq_seg_0",
59451 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59452
59453 {&hf_ieee80211_he_operation_6ghz_channel_center_freq_1,
59454 {"Channel Center Frequency Segment 1", "wlan.ext_tag.he_operation.6ghz.chan_center_freq_seg_1",
59455 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59456
59457 {&hf_ieee80211_he_operation_6ghz_minimum_rate,
59458 {"Minimum Rate", "wlan.ext_tag.he_operation.6ghz.minimum_rate",
59459 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59460
59461 {&hf_ieee80211_he_muac_aci_aifsn,
59462 {"AIC/AIFSN","wlan.ext_tag.mu_edca_parameter_set.aic_aifsn",
59463 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59464
59465 {&hf_ieee80211_he_muac_aifsn,
59466 {"AIFSN", "wlan.ext_tag.mu_edca_parameter_set.aifsn",
59467 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
59468 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59469
59470 {&hf_ieee80211_he_muac_acm,
59471 {"Admission Control Mandatory", "wlan.ext_tag.mu_edca_parameter_set.acm",
59472 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
59473 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59474
59475 {&hf_ieee80211_he_muac_aci,
59476 {"ACI", "wlan.ext_tag.mu_edca_parameter_set.aci",
59477 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
59478 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59479
59480 {&hf_ieee80211_he_muac_reserved,
59481 {"Reserved", "wlan.ext_tag.mu_edca_parameter_set.reserved",
59482 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
59483 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59484
59485 {&hf_ieee80211_he_mu_edca_timer,
59486 {"MU EDCA Timer","wlan.ext_tag.mu_edca_parameter_set.mu_edca_timer",
59487 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59488
59489 {&hf_ieee80211_he_muac_ecwmin_ecwmax,
59490 {"ECWmin/ECWmax","wlan.ext_tag.mu_edca_parameter_set.ecwmin_ecwmax",
59491 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59492
59493 {&hf_ieee80211_he_spatial_reuse_sr_control,
59494 {"SR Control", "wlan.ext_tag.spatial_reuse.sr_control",
59495 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59496
59497 {&hf_ieee80211_he_srp_disallowed,
59498 {"SRP Disallowed", "wlan.ext_tag.spatial_reuse.sr_control.srp_dis",
59499 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59500
59501 {&hf_ieee80211_he_non_srg_obss_pd_sr_disallowed,
59502 {"NON-SRG OBSS PD SR Disallowed", "wlan.ext_tag.spatial_reuse.sr_control.non_srg_obss_pd_sr_dis",
59503 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59504
59505 {&hf_ieee80211_he_non_srg_offset_present,
59506 {"Non-SRG Offset Present", "wlan.ext_tag.spatial_reuse.sr_control.non_srg_ofs_present",
59507 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59508
59509 {&hf_ieee80211_he_srg_information_present,
59510 {"SRG Information Present", "wlan.ext_tag.spatial_reuse.sr_control.srg_info_present",
59511 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59512
59513 {&hf_ieee80211_he_hesiga_spatial_reuse_value15_allowed,
59514 {"HESIGA Spatial Reuse value 15 allowed", "wlan.ext_tag.spatial_reuse.sr_control.hesiga_val_15_allowed",
59515 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59516
59517 {&hf_ieee80211_he_sr_control_reserved,
59518 {"Reserved", "wlan.ext_tag.spatial_reuse.sr_control.reserved",
59519 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59520
59521 {&hf_ieee80211_he_spatial_non_srg_obss_pd_max_offset,
59522 {"Non-SRG OBSS PD Max Offset", "wlan.ext_tag.spatial_reuse.non_srg_obss_pd_max_offset",
59523 FT_INT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59524
59525 {&hf_ieee80211_he_spatial_srg_obss_pd_min_offset,
59526 {"SRG OBSS PD Min Offset", "wlan.ext_tag.spatial_reuse.srg_obss_pd_min_offset",
59527 FT_INT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59528
59529 {&hf_ieee80211_he_spatial_srg_obss_pd_max_offset,
59530 {"SRG OBSS PD Max Offset", "wlan.ext_tag.spatial_reuse.srg_obss_pd_max_offset",
59531 FT_INT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59532
59533 {&hf_ieee80211_he_spatial_srg_bss_color_bitmap,
59534 {"SRG BSS Color Bitmap", "wlan.ext_tag.spatial_reuse.srg_bss_color_bitmap",
59535 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59536
59537 {&hf_ieee80211_he_spatial_srg_partial_bssid_bitmap,
59538 {"SRG Partial BSSID Bitmap", "wlan.ext_tag.spatial_reuse.srg_partial_bssid_bitmap",
59539 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59540
59541 {&hf_ieee80211_he_resource_request_buffer_thresh,
59542 {"Resource Request Buffer Threshold Exponent", "wlan.ext_tag.ndp_feedback.res_req_buf_thresh_exp",
59543 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59544
59545 {&hf_ieee80211_he_bss_color_change_new_color_info,
59546 {"New BSS Color Info", "wlan.ext_tag.bss_color_change.new_color_info",
59547 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59548
59549 {&hf_ieee80211_he_new_bss_color_info_color,
59550 {"New BSS Color", "wlan.ext_tag.bss_color_change.new_bss_color",
59551 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59552
59553 {&hf_ieee80211_he_new_bss_color_info_reserved,
59554 {"Reserved", "wlan.ext_tag.bss_color_change.new_color_reserved",
59555 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59556
59557 {&hf_ieee80211_he_bss_color_change_switch_countdown,
59558 {"BSS Color Switch Countdown", "wlan.ext_tag.bss_color_change.color_switch_countdown",
59559 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59560
59561 {&hf_ieee80211_he_ess_report_planned_ess,
59562 {"Planned ESS", "wlan.ext_tag.ess_report.ess_info.planned_ess",
59563 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59564
59565 {&hf_ieee80211_he_ess_report_edge_of_ess,
59566 {"Edge of ESS", "wlan.ext_tag.ess_report.ess_info.edge_of_ess",
59567 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59568
59569 {&hf_ieee80211_he_ess_report_info_field,
59570 {"ESS Information field", "wlan.ext_tag.ess_report.ess_info.field",
59571 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59572
59573 {&hf_ieee80211_he_ess_report_recommend_transition_thresh,
59574 {"Recommended BSS Transition Threshold", "wlan.ext_tag.ess_report.ess_info.thresh",
59575 FT_INT8, BASE_DEC, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59576
59577 {&hf_ieee80211_he_ops_duration,
59578 {"OPS Duration", "wlan.ext_tag.ops.ops_duration",
59579 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) }},
59580
59581 {&hf_ieee80211_he_uora_field,
59582 {"UL OFDMA-based Random Access Parameter SET", "wlan.ext_tag.uora_parameter_set.field",
59583 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59584
59585 {&hf_ieee80211_he_uora_eocwmin,
59586 {"EOCWmin", "wlan.ext_tag.uora_parameter_set.eocwmin",
59587 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59588
59589 {&hf_ieee80211_he_uora_owcwmax,
59590 {"EOCWmax", "wlan.ext_tag.uora_parameter_set.eocwmax",
59591 FT_UINT8, BASE_DEC, NULL((void*)0), 0x38, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59592
59593 {&hf_ieee80211_he_uora_reserved,
59594 {"Reserved", "wlan.ext_tag.uora_parameter_set.reserved",
59595 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59596
59597 {&hf_ieee80211_max_channel_switch_time,
59598 {"Max Channel Switch Time",
59599 "wlan.ext_tag.max_channel_switch_time.switch_time",
59600 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) }},
59601
59602 {&hf_ieee80211_oci_operating_class,
59603 {"Operating Class", "wlan.ext_tag.oci.operating_class",
59604 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59605
59606 {&hf_ieee80211_oci_primary_channel_number,
59607 {"Primary Channel Number", "wlan.ext_tag.oci.primary_channel_number",
59608 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59609
59610 {&hf_ieee80211_oci_frequency_segment_1,
59611 {"Frequency Segment 1 Channel Number",
59612 "wlan.ext_tag.oci.frequency_segment_1_channel_number",
59613 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59614
59615 {&hf_ieee80211_oci_oct_operating_class,
59616 {"OCT Operating Class", "wlan.ext_tag.oci.oct_operating_class",
59617 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59618
59619 {&hf_ieee80211_oci_oct_primary_channel_number,
59620 {"OCT Primary Channel Number",
59621 "wlan.ext_tag.oci.oct_primary_channel_number",
59622 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59623
59624 {&hf_ieee80211_oci_oct_frequency_segment_1,
59625 {"OCT Frequency Segment 1 Channel Number",
59626 "wlan.ext_tag.oci.oct_frequency_segment_1_channel_number",
59627 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59628
59629 {&hf_ieee80211_multiple_bssid_configuration_bssid_count,
59630 {"BSSID Count", "wlan.ext_tag.multiple_bssid_configuration.bssid_count",
59631 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59632
59633 {&hf_ieee80211_non_inheritance_element_id_list_length,
59634 {"Length", "wlan.ext_tag.non_inheritance.element_id_list.length",
59635 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59636
59637 {&hf_ieee80211_non_inheritance_element_id_list_element_id,
59638 {"Element ID", "wlan.ext_tag.non_inheritance.element_id_list.element_id",
59639 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59640
59641 {&hf_ieee80211_non_inheritance_element_id_ext_list_length,
59642 {"Length", "wlan.ext_tag.non_inheritance.element_id_ext_list.length",
59643 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59644
59645 {&hf_ieee80211_non_inheritance_element_id_ext_list_element_id_ext,
59646 {"Element ID Extension", "wlan.ext_tag.non_inheritance.element_id_ext_list.element_id_ext",
59647 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59648
59649 {&hf_ieee80211_multiple_bssid_configuration_full_set_rx_periodicity,
59650 {"Full Set Rx Periodicity", "wlan.ext_tag.multiple_bssid_configuration.full_set_rx_periodicity",
59651 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59652
59653 {&hf_ieee80211_known_bssid_bitmap,
59654 {"Bitmap", "wlan.ext_tag.known_bssid.bitmap",
59655 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59656
59657 {&hf_ieee80211_short_ssid,
59658 {"Short SSID", "wlan.ext_tag.short_ssid",
59659 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59660
59661 {&hf_ieee80211_rejected_groups_group,
59662 {"Rejected Finite Cyclic Group", "wlan.ext_tag.rejected_groups.group",
59663 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59664
59665 {&hf_ieee80211_ff_s1g_action,
59666 {"S1G Action", "wlan.s1g.action",
59667 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) }},
59668
59669 {&hf_ieee80211_ff_prot_s1g_action,
59670 {"Protected S1G Action", "wlan.s1g.prot_action",
59671 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) }},
59672
59673 {&hf_ieee80211_ff_s1g_timestamp,
59674 {"Timestamp", "wlan.s1g.timestamp",
59675 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59676
59677 {&hf_ieee80211_ff_s1g_change_sequence,
59678 {"Change Sequence", "wlan.s1g.change_sequence",
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_ff_s1g_next_tbtt,
59682 {"Next TBTT", "wlan.s1g.next_tbtt",
59683 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59684
59685 {&hf_ieee80211_ff_s1g_compressed_ssid,
59686 {"Compressed SSID", "wlan.s1g.compressed_ssid",
59687 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59688
59689 {&hf_ieee80211_ff_s1g_access_network_options,
59690 {"Access Network Options", "wlan.s1g.access_network_options",
59691 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59692
59693 {&hf_ieee80211_s1g_sync_control,
59694 {"Sync Control", "wlan.s1g.sync_control",
59695 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59696
59697 {&hf_ieee80211_s1g_sync_control_uplink_sync_request,
59698 {"Uplink Sync Request", "wlan.s1g.sync_control.uplink_sync_request",
59699 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59700
59701 {&hf_ieee80211_s1g_sync_control_time_slot_protection_request,
59702 {"Time Slot Protection request",
59703 "wlan.s1g.sync_control.time_slot_protection_request",
59704 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59705
59706 {&hf_ieee80211_s1g_sync_control_reserved,
59707 {"Reserved", "wlan.s1g.sync_control.reserved",
59708 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59709
59710 {&hf_ieee80211_s1g_sector_id_index,
59711 {"Sector ID Index", "wlan.s1g.sector_id_index",
59712 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59713
59714 {&hf_ieee80211_s1g_sector_id_preferred_sector_id,
59715 {"Preferred Sector ID", "wlan.s1g.sector_id_index.preferred_sector_id",
59716 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59717
59718 {&hf_ieee80211_s1g_sector_id_snr,
59719 {"SNR", "wlan.s1g.sector_id_index.snr",
59720 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_sector_id_index_snr_custom)((const void *) (size_t) (s1g_sector_id_index_snr_custom)),
59721 0x00F8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59722
59723 {&hf_ieee80211_s1g_sector_id_receive_sector_bitmap,
59724 {"Receive Sector Bitmap", "wlan.s1g.sector_id_index.receive_sector_bitmap",
59725 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59726
59727 {&hf_ieee80211_s1g_twt_information_control,
59728 {"TWT Information Control", "wlan.s1g.twt_information.control",
59729 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59730
59731 {&hf_ieee80211_s1g_twt_next_twt_32,
59732 {"Next TWT", "wlan.s1g.twt_information.next_twt32",
59733 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59734
59735 {&hf_ieee80211_s1g_twt_next_twt_48,
59736 {"Next TWT", "wlan.s1g.twt_information.next_twt48",
59737 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59738
59739 {&hf_ieee80211_s1g_twt_next_twt_64,
59740 {"Next TWT", "wlan.s1g.twt_information.next_twt64",
59741 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59742
59743 {&hf_ieee80211_s1g_twt_flow_identifier,
59744 {"TWT Flow Identifier",
59745 "wlan.s1g.twt_information.control.twt_flow_identifier",
59746 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59747
59748 {&hf_ieee80211_s1g_twt_response_required,
59749 {"Response Requested",
59750 "wlan.s1g.twt_information.control.response_requested",
59751 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59752
59753 {&hf_ieee80211_s1g_twt_next_twt_request,
59754 {"Next TWT Request", "wlan.s1g.twt_information.control.next_twt_request",
59755 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59756
59757 {&hf_ieee80211_s1g_twt_next_twt_subfield_size,
59758 {"Next TWT Subfield Size",
59759 "wlan.s1g.twt_information.control.next_twt_subfield_size",
59760 FT_UINT8, BASE_HEX, NULL((void*)0), 0x60, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59761
59762 {&hf_ieee80211_s1g_twt_reserved,
59763 {"Reserved", "wlan.s1g.twt_information.control.reserved",
59764 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59765
59766 {&hf_ieee80211_s1g_update_edca_info,
59767 {"Update EDCA Info", "wlan.s1g.edca_param_set.update_edca_info",
59768 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59769
59770 {&hf_ieee80211_s1g_update_edca_override,
59771 {"Override", "wlan.s1g.edca_param_set.update_edca_info.override",
59772 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
59773 "Overrides the previously stored EDCAL parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59774
59775 {&hf_ieee80211_s1g_update_edca_ps_poll_aci,
59776 {"PS-Poll ACI", "wlan.s1g.edca_param_set.update_edca_info.pd_poll_aci",
59777 FT_UINT8, BASE_HEX, NULL((void*)0), 0x06, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59778
59779 {&hf_ieee80211_s1g_update_edca_raw_aci,
59780 {"RAW ACI", "wlan.s1g.edca_param_set.update_edca_info.raw_aci",
59781 FT_UINT8, BASE_HEX, NULL((void*)0), 0x18, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59782
59783 {&hf_ieee80211_s1g_update_edca_sta_type,
59784 {"STA Type", "wlan.s1g.edca_param_set.update_edca_info.sta_type",
59785 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) }},
59786
59787 {&hf_ieee80211_s1g_update_edca_reserved,
59788 {"Reserved", "wlan.s1g.edca_param_set.update_edca_info.reserved",
59789 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59790
59791 {&hf_ieee80211_twt_bcast_flow,
59792 {"TWT Flow", "wlan.twt.bcast_flow",
59793 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59794
59795 {&hf_ieee80211_twt_individual_flow,
59796 {"TWT Flow", "wlan.twt.individual_flow",
59797 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59798
59799 {&hf_ieee80211_twt_individual_flow_id,
59800 {"Individual TWT Flow Id", "wlan.twt.individual_flow_id",
59801 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59802
59803 {&hf_ieee80211_twt_individual_reserved,
59804 {"Reserved", "wlan.twt.individual_reserved",
59805 FT_UINT8, BASE_HEX, NULL((void*)0), 0x18, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59806
59807 {&hf_ieee80211_twt_bcast_id,
59808 {"Broadcast TWT Id", "wlan.twt.bcast_flow_id",
59809 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59810
59811 {&hf_ieee80211_twt_neg_type,
59812 {"TWT Negotiation type", "wlan.twt.neg_type",
59813 FT_UINT8, BASE_DEC, VALS(twt_neg_type_vals)((0 ? (const struct _value_string*)0 : ((twt_neg_type_vals)))
)
, 0x60,
59814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59815
59816 {&hf_ieee80211_twt_neg_type2_reserved1,
59817 {"Reserved", "wlan.twt.flow_id_reserved1",
59818 FT_UINT8, BASE_HEX, NULL((void*)0), 0x1f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59819
59820 {&hf_ieee80211_twt_neg_type2_reserved2,
59821 {"Reserved", "wlan.twt.flow_id_reserved2",
59822 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59823
59824 {&hf_ieee80211_twt_bcast_teardown_all,
59825 {"TWT Flow", "wlan.twt.bcast_flow",
59826 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59827
59828 {&hf_ieee80211_twt_bcast_twt_id_reserved,
59829 {"Reserved", "wlan.twt.bcast_flow.twt_id_reserved",
59830 FT_UINT8, BASE_HEX, NULL((void*)0), 0x1F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59831
59832 {&hf_ieee80211_twt_bcast_neg_type_reserved,
59833 {"Reserved", "wlan.twt.bcast_flow.negotiation_type_reserved",
59834 FT_UINT8, BASE_HEX, NULL((void*)0), 0x60, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59835
59836 {&hf_ieee80211_twt_bcast_teardown_all_twt,
59837 {"Teardown All TWT", "wlan.twt.bcast_flow.teardown_all_twt",
59838 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59839
59840 {&hf_ieee80211_tag_twt_control_field,
59841 {"Control Field", "wlan.twt.control_field",
59842 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59843
59844 {&hf_ieee80211_tag_twt_ndp_paging_indicator,
59845 {"NDP Paging Indicator", "wlan.twt.ndp_paging_indicator",
59846 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) }},
59847
59848 {&hf_ieee80211_tag_twt_responder_pm_mode,
59849 {"Responder PM Mode", "wlan.twt.resp_pm",
59850 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) }},
59851
59852 {&hf_ieee80211_tag_twt_neg_type,
59853 {"Negotiation type", "wlan.twt.neg_type",
59854 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) }},
59855
59856 {&hf_ieee80211_tag_twt_info_frame_disabled,
59857 {"TWT Information Frame Disabled", "wlan.twt.info_frame_disabled",
59858 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) }},
59859
59860 {&hf_ieee80211_tag_twt_wake_duration_unit,
59861 {"Wake Duration Unit", "wlan.twt.wake_duration_unit",
59862 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) }},
59863
59864 {&hf_ieee80211_tag_twt_link_id_bitmap_present,
59865 {"Link ID Bitmap Present", "wlan.twt.link_id_bitmap_present",
59866 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59867
59868 {&hf_ieee80211_tag_twt_aligned_twt,
59869 {"Aligned TWT", "wlan.twt.aligned_twt",
59870 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59871
59872 {&hf_ieee80211_tag_twt_req_type_field,
59873 {"Request Type", "wlan.twt.request_type",
59874 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59875
59876 {&hf_ieee80211_tag_twt_req_type_req,
59877 {"Requester", "wlan.twt.requester",
59878 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) }},
59879
59880 {&hf_ieee80211_tag_twt_req_type_setup_cmd,
59881 {"Setup Command", "wlan.twt.setup_cmd",
59882 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) }},
59883
59884 {&hf_ieee80211_tag_twt_req_type_trigger,
59885 {"Trigger", "wlan.twt.trigger",
59886 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) }},
59887
59888 {&hf_ieee80211_tag_twt_req_type_implicit,
59889 {"Implicit", "wlan.twt.implicit",
59890 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) }},
59891
59892 {&hf_ieee80211_tag_twt_req_type_flow_type,
59893 {"Flow type", "wlan.twt.flow_type",
59894 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) }},
59895
59896 {&hf_ieee80211_tag_twt_req_type_flow_id,
59897 {"Flow ID", "wlan.twt.flow_id",
59898 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0380, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59899
59900 {&hf_ieee80211_tag_twt_req_type_wake_int_exp,
59901 {"Wake Interval Exponent", "wlan.twt.wake_interval_exp",
59902 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7c00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59903
59904 {&hf_ieee80211_tag_twt_req_type_prot,
59905 {"Protection", "wlan.twt.prot",
59906 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59907
59908 {&hf_ieee80211_tag_twt_req_type_last_bcst_parm_set,
59909 {"Last Broadcast Parameter Set",
59910 "wlan.twt.last_broadcast_parameter_set",
59911 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59912
59913 {&hf_ieee80211_tag_twt_req_type_bcst_twt_recom,
59914 {"Broadcast TWT Recommendation", "wlan.twt.broadcast_twt_recommendation",
59915 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0380, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59916
59917 {&hf_ieee80211_tag_twt_req_type_aligned,
59918 {"Aligned", "wlan.twt.aligned",
59919 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59920
59921 {&hf_ieee80211_tag_twt_ndp_paging_field,
59922 {"NDP Paging", "wlan.twt.ndp_paging",
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_tag_twt_ndp_paging_p_id,
59926 {"P-ID", "wlan.twt.ndp_paging.p_id",
59927 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59928
59929 {&hf_ieee80211_tag_twt_ndp_max_ndp_paging_period,
59930 {"Max NDP Paging Period", "wlan.twt.ndp_paging.max_ndp_paging_period",
59931 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0001FE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59932
59933 {&hf_ieee80211_tag_twt_ndp_partial_tsf_offset,
59934 {"Partial TSF Offset", "wlan.twt.ndp_paging.partial_tsf_offset",
59935 FT_UINT32, BASE_DEC, NULL((void*)0), 0x001E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59936
59937 {&hf_ieee80211_tag_twt_ndp_action,
59938 {"Action", "wlan.twt.ndp_paging.action",
59939 FT_UINT32, BASE_DEC, VALS(twt_ndp_action_vals)((0 ? (const struct _value_string*)0 : ((twt_ndp_action_vals)
)))
,
59940 0x00E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59941
59942 {&hf_ieee80211_tag_twt_ndp_min_sleep_duration,
59943 {"Min Sleep Duration", "wlan.twt.ndp_paging.min_sleep_duration",
59944 FT_UINT32, BASE_DEC, NULL((void*)0), 0x3C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59945
59946 {&hf_ieee80211_tag_twt_ndp_reserved,
59947 {"Reserved", "wlan.twt.ndp_paging.reserved",
59948 FT_UINT32, BASE_HEX, NULL((void*)0), 0xC0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59949
59950 {&hf_ieee80211_tag_twt_link_id_bitmap,
59951 {"Link ID Bitmap", "wlan.twt.link_id_bitmap",
59952 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59953
59954 {&hf_ieee80211_tag_twt_aligned_twt_link_bitmap,
59955 {"Aligned TWT Link Bitmap", "wlan.twt.aligned_twt_link_bitmap",
59956 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59957
59958 {&hf_ieee80211_tag_twt_broadcast_info,
59959 {"Broadcast TWT Info", "wlan.twt.broadcast_twt_info",
59960 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59961
59962 {&hf_ieee80211_tag_twt_bcast_info_persistence,
59963 {"Broadcast TWT Persistence",
59964 "wlan.twt.bcast_twt_info.broadcast_twt_persistence",
59965 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59966
59967 {&hf_ieee80211_tag_twt_bcast_info_id,
59968 {"Broadcast TWT ID", "wlan.twt.bcast_twt_info.broadcast_twt_id",
59969 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00F8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59970
59971 {&hf_ieee80211_tag_twt_bcast_info_rtwt_sche_info,
59972 {"Restricted TWT Schedule Info", "wlan.twt.bcast_twt_info.rtwt_schedule_info",
59973 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0006, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59974
59975 {&hf_ieee80211_tag_twt_bcast_info_rtwt_traffic_present,
59976 {"Restricted TWT Traffic Info Present", "wlan.twt.bcast_twt_info.rtwt_traffic_info_present",
59977 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59978
59979 {&hf_ieee80211_tag_twt_traffic_info_control,
59980 {"Traffic Info Control", "wlan.twt.traffic_info.control",
59981 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59982
59983 {&hf_ieee80211_tag_twt_traffic_info_dl_bitmap_valid,
59984 {"DL TID Bitmap Valid", "wlan.twt.traffic_info.dl_tid_bitmap_valid",
59985 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59986
59987 {&hf_ieee80211_tag_twt_traffic_info_ul_bitmap_valid,
59988 {"UL TID Bitmap Valid", "wlan.twt.traffic_info.ul_tid_bitmap_valid",
59989 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59990
59991 {&hf_ieee80211_tag_twt_traffic_info_reserved,
59992 {"Reserved", "wlan.twt.traffic_info.reserved",
59993 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59994
59995 {&hf_ieee80211_tag_twt_traffic_info_rtwt_dl_bitmap,
59996 {"Restricted TWT DL TID Bitmap", "wlan.twt.traffic_info.dl_tid_bitmap",
59997 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59998
59999 {&hf_ieee80211_tag_twt_traffic_info_rtwt_ul_bitmap,
60000 {"Restricted TWT UL TID Bitmap", "wlan.twt.traffic_info.ul_tid_bitmap",
60001 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60002
60003 {&hf_ieee80211_tag_twt_target_wake_time,
60004 {"Target Wake Time", "wlan.twt.target_wake_time",
60005 FT_UINT64, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60006
60007 {&hf_ieee80211_tag_twt_target_wake_time_short,
60008 {"Target Wake Time", "wlan.twt.target_wake_time_short",
60009 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60010
60011 {&hf_ieee80211_tag_twt_nom_min_twt_wake_dur,
60012 {"Nominal Minimum TWT Wake duration", "wlan.twt.nom_min_twt_wake_duration",
60013 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60014
60015 {&hf_ieee80211_tag_twt_wake_interval_mantissa,
60016 {"TWT Wake Interval Mantissa", "wlan.twt.wake_interval_mantissa",
60017 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60018
60019 {&hf_ieee80211_tag_twt_channel,
60020 {"TWT Channel", "wlan.twt.channel",
60021 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60022
60023 {&hf_ieee80211_tag_rsnx,
60024 {"RSNX", "wlan.rsnx",
60025 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60026
60027 {&hf_ieee80211_wfa_ie_transition_disable_bitmap,
60028 {"Transition Disable Bitmap", "wlan.transition_disable_bitmap",
60029 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60030
60031 {&hf_ieee80211_wfa_ie_transition_disable_wpa3_personal,
60032 {"WPA3-Personal", "wlan.transition_disable.wpa3_personal",
60033 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) }},
60034
60035 {&hf_ieee80211_wfa_ie_transition_disable_sae_pk,
60036 {"SAE-PK", "wlan.transition_disable.sae_pk",
60037 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) }},
60038
60039 {&hf_ieee80211_wfa_ie_transition_disable_wpa3_enterprise,
60040 {"WPA3-Enterprise", "wlan.transition_disable.wpa3_enterprise",
60041 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) }},
60042
60043 {&hf_ieee80211_wfa_ie_transition_disable_enhanced_open,
60044 {"Wi-Fi Enhanced Open", "wlan.transition_disable.enhanced_open",
60045 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) }},
60046
60047 {&hf_ieee80211_wfa_ie_transition_disable_reserved_b4thru7,
60048 {"Reserved", "wlan.transition_disable.reserved.b4thru7",
60049 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) }},
60050
60051 {&hf_ieee80211_wfa_ie_transition_disable_reserved,
60052 {"Reserved", "wlan.transition_disable.reserved",
60053 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60054
60055 {&hf_ieee80211_tag_rsnx_length,
60056 {"RSNX Length", "wlan.rsnx.length",
60057 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60058
60059 {&hf_ieee80211_tag_rsnx_protected_twt_operations_support,
60060 {"Protected TWT Operations Support", "wlan.rsnx.protected_twt_operations_support",
60061 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60062
60063 {&hf_ieee80211_tag_rsnx_sae_hash_to_element,
60064 {"SAE Hash to element", "wlan.rsnx.sae_hash_to_element",
60065 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60066
60067 {&hf_ieee80211_tag_rsnx_sae_pk,
60068 {"SAE-PK", "wlan.rsnx.sae_pk",
60069 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60070
60071 {&hf_ieee80211_tag_rsnx_protected_wur_frame_support,
60072 {"Protected WUR Frame Support", "wlan.rsnx.protected_wur_frame_support",
60073 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60074
60075 {&hf_ieee80211_tag_rsnx_secure_ltf_support,
60076 {"Secure LTF Support", "wlan.rsnx.secure_ltf_support",
60077 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) }},
60078
60079 {&hf_ieee80211_tag_rsnx_secure_rtt_supported,
60080 {"Secure RTT Supported", "wlan.rsnx.secure_rtt_supported",
60081 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) }},
60082
60083 {&hf_ieee80211_tag_rsnx_urnm_mfpr_x20,
60084 {"URNM-MFPR-X20", "wlan.rsnx.urnm_mfpr_x20",
60085 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60086
60087 {&hf_ieee80211_tag_rsnx_protected_announce_support,
60088 {"Protected Announce Support", "wlan.rsnx.protected_announce_support",
60089 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60090
60091 {&hf_ieee80211_tag_rsnx_pbac,
60092 {"PBAC", "wlan.rsnx.pbac",
60093 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60094
60095 {&hf_ieee80211_tag_rsnx_extended_s1g_action_protection,
60096 {"Extended S1G Action Protection", "wlan.rsnx.extended_s1g_action_protection",
60097 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60098
60099 {&hf_ieee80211_tag_rsnx_spp_amsdu_capable,
60100 {"SPP AMSDU Capable", "wlan.rsnx.spp_amsdu_capable",
60101 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60102
60103 {&hf_ieee80211_tag_rsnx_urnm_mfpr,
60104 {"URNM-MFPR", "wlan.rsnx.urnm_mfpr",
60105 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60106
60107 {&hf_ieee80211_tag_rsnx_reserved,
60108 {"Reserved", "wlan.rsnx.reserved",
60109 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60110
60111 {&hf_ieee80211_owe_dh_parameter_group,
60112 {"Group", "wlan.ext_tag.owe_dh_parameter.group",
60113 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) }},
60114
60115 {&hf_ieee80211_owe_dh_parameter_public_key,
60116 {"Public Key", "wlan.ext_tag.owe_dh_parameter.public_key",
60117 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60118
60119 {&hf_ieee80211_tag_pasn_parameters_control,
60120 {"Control", "wlan.etag.pasn_params.control",
60121 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60122
60123 {&hf_ieee80211_tag_pasn_params_comeback_info_present,
60124 {"Comeback Info Present", "wlan.etag.pasn_params.comeback_info_present",
60125 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60126
60127 {&hf_ieee80211_tag_pasn_params_group_and_key_present,
60128 {"Group and Key Present", "wlan.etag.pasn_params.group_and_key_present",
60129 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60130
60131 {&hf_ieee80211_tag_pasn_parameters_reserved,
60132 {"Reserved", "wlan.etag.pasn_parameters.reserved",
60133 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60134
60135 {&hf_ieee80211_tag_pasn_parameters_wrapped_fmt,
60136 {"Wrapped Data Format", "wlan.etag.pasn_parameters.wrapped_data_format",
60137 FT_UINT8, BASE_HEX|BASE_RANGE_STRING0x00000100, RVALS(wrapped_data_fmt_rvals)((0 ? (const struct _range_string*)0 : ((wrapped_data_fmt_rvals
))))
,
60138 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60139
60140 {&hf_ieee80211_tag_pasn_comeback_after,
60141 {"Comeback After", "wlan.etag.pasn_parameters.comeback_after",
60142 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) }},
60143
60144 {&hf_ieee80211_tag_pasn_cookie_length,
60145 {"Cookie length", "wlan.etag.pasn_parameters.cookie_length",
60146 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60147
60148 {&hf_ieee80211_tag_pasn_cookie,
60149 {"Cookie", "wlan.etag.pasn_parameters.cookie",
60150 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60151
60152 {&hf_ieee80211_tag_pasn_finite_cyclic_group_id,
60153 {"Finite Cyclic Group ID",
60154 "wlan.etag.pasn_parameters.finite_cyclic_group_id",
60155 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60156
60157 {&hf_ieee80211_tag_pasn_ephemeral_public_key_len,
60158 {"Ephemeral Public Key Length",
60159 "wlan.etag.pasn_parameters.ephemeral_public_key_len",
60160 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60161
60162 {&hf_ieee80211_tag_pasn_ephemeral_public_key,
60163 {"Ephemeral Public Key",
60164 "wlan.etag.pasn_parameters.ephemeral_public_key",
60165 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60166
60167 {&hf_ieee80211_pasn_auth1_frame_len,
60168 {"Auth Frame 1 Length", "wlan.pasn_wrapped_data.auth_frame_1_len",
60169 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60170
60171 {&hf_ieee80211_pasn_auth2_frame_len,
60172 {"Auth Frame 2 Length", "wlan.pasn_wrapped_data.auth_frame_2_len",
60173 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60174
60175 {&hf_ieee80211_eht_eml_control_field,
60176 {"EML Control Field", "wlan.eht.eml_control",
60177 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60178
60179 {&hf_ieee80211_eht_eml_control_emlsr_mode,
60180 {"EMLSR Mode", "wlan.eht.eml_control.emlsr_mode",
60181 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60182
60183 {&hf_ieee80211_eht_eml_control_emlmr_mode,
60184 {"EMLMR Mode", "wlan.eht.eml_control.emlmr_mode",
60185 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60186
60187 {&hf_ieee80211_eht_eml_control_emlsr_para_update_control,
60188 {"EMLSR Parameter Update Control", "wlan.eht.eml_control.emlsr_para_update_control",
60189 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60190
60191 {&hf_ieee80211_eht_eml_control_device_coexist_activities,
60192 {"In-Device Coexistence Activities",
60193 "wlan.eht.eml_control.in_device_coexist_activities",
60194 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60195
60196 {&hf_ieee80211_eht_eml_control_reserved,
60197 {"Reserved", "wlan.eht.eml_control.reserved",
60198 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60199
60200 {&hf_ieee80211_eht_eml_control_link_bitmap,
60201 {"Link Bitmap", "wlan.eht.eml_control.link_bitmap",
60202 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60203
60204 {&hf_ieee80211_eht_eml_control_link_enable_id,
60205 {"Enable Link ID",
60206 "wlan.eht.eml_control.link_map.enable_id",
60207 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60208
60209 {&hf_ieee80211_eht_eml_control_mcs_map_count,
60210 {"MCS Map Count Control", "wlan.eht.eml_control.mcs_map_count",
60211 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60212
60213 {&hf_ieee80211_eht_eml_control_mcs_map_count_bw,
60214 {"MCS Map Count Control BW", "wlan.eht.eml_control.mcs_map_count.bw",
60215 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) }},
60216
60217 {&hf_ieee80211_eht_eml_control_mcs_map_count_reserved,
60218 {"Reserved", "wlan.eht.eml_control.mcs_map_count.reserved",
60219 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60220
60221 {&hf_ieee80211_eht_emlsr_para_update,
60222 {"EMLSR Parameter Update", "wlan.eht.emlsr_parameter_update",
60223 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60224
60225 {&hf_ieee80211_eht_emlsr_para_update_padding_delay,
60226 {"EMLSR Padding Delay", "wlan.eht.emlsr_parameter_update.padding_delay",
60227 FT_UINT8, BASE_HEX, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60228
60229 {&hf_ieee80211_eht_emlsr_para_update_tran_delay,
60230 {"EMLSR Transition Delay", "wlan.eht.emlsr_parameter_update.transition_delay",
60231 FT_UINT8, BASE_HEX, NULL((void*)0), 0x38, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60232
60233 {&hf_ieee80211_eht_emlsr_para_update_reserved,
60234 {"Reserved", "wlan.eht.emlsr_parameter_update.reserved",
60235 FT_UINT8, BASE_HEX, NULL((void*)0), 0xc0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60236
60237 {&hf_ieee80211_eht_multi_link_control,
60238 {"Multi-Link Control", "wlan.eht.multi_link.control",
60239 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60240
60241 {&hf_ieee80211_eht_multi_link_control_type,
60242 {"Type", "wlan.eht.multi_link.control.type",
60243 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) }},
60244
60245 {&hf_ieee80211_eht_multi_link_control_reserved,
60246 {"Reserved", "wlan.eht.multi_link.control.reserved",
60247 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60248
60249 {&hf_ieee80211_eht_multi_link_control_link_id_present,
60250 {"Link ID Info Present",
60251 "wlan.eht.multi_link.control.basic.link_id_info_present",
60252 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60253
60254 {&hf_ieee80211_eht_multi_link_control_bss_parms_ch_count,
60255 {"BSS Parameters Change Count Present",
60256 "wlan.eht.multi_link.control.basic.bss_parameters_change_count_present",
60257 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60258
60259 {&hf_ieee80211_eht_multi_link_control_medium_sync_delay,
60260 {"Medium Synchronization Delay Info Present",
60261 "wlan.eht.multi_link.control.basic.medium_sync_delayinfo_present",
60262 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60263
60264 {&hf_ieee80211_eht_multi_link_control_eml_capa,
60265 {"EML Capabilities Present",
60266 "wlan.eht.multi_link.control.basic.eml_capabilities_present",
60267 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60268
60269 {&hf_ieee80211_eht_multi_link_control_mld_capa,
60270 {"MLD Capabilities Present",
60271 "wlan.eht.multi_link.control.basic.mld_capabilities_present",
60272 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60273
60274 {&hf_ieee80211_eht_multi_link_control_basic_mld_id_present,
60275 {"AP MLD ID Present",
60276 "wlan.eht.multi_link.control.basic.mld_id_present",
60277 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60278
60279 {&hf_ieee80211_eht_multi_link_control_ext_mld_capa,
60280 {"Extended MLD Capabilities and Operations Present",
60281 "wlan.eht.multi_link.control.basic.ext_mld_capabilities_present",
60282 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60283
60284 {&hf_ieee80211_eht_multi_link_control_bitmap_reserved,
60285 {"Reserved", "wlan.eht.multi_link.control.basic.reserved",
60286 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60287
60288 {&hf_ieee80211_eht_multi_link_control_probe_mld_id_present,
60289 {"AP MLD ID Present",
60290 "wlan.eht.multi_link.control.probe.mld_id_present",
60291 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60292
60293 {&hf_ieee80211_eht_multi_link_control_probe_mld_mac_addr_present,
60294 {"MLD MAC Address Present",
60295 "wlan.eht.multi_link.control.probe.mld_mac_addr_present",
60296 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60297
60298 {&hf_ieee80211_eht_multi_link_control_probe_reserved,
60299 {"Reserved", "wlan.eht.multi_link.control.probe.reserved",
60300 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60301
60302 {&hf_ieee80211_eht_multi_link_control_tdls_reserved,
60303 {"Reserved", "wlan.eht.multi_link.control.tdls.reserved",
60304 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60305
60306 {&hf_ieee80211_eht_multi_link_control_prio_access_reserved,
60307 {"Reserved", "wlan.eht.multi_link.control.prio_access.reserved",
60308 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60309
60310 {&hf_ieee80211_eht_multi_link_control_reconfig_mld_mac,
60311 {"MLD MAC Address Present",
60312 "wlan.eht.multi_link.control.reconfig.mld_mac_addr_present",
60313 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60314
60315 {&hf_ieee80211_eht_multi_link_control_reconfig_eml_capa,
60316 {"EML Capabilities Present",
60317 "wlan.eht.multi_link.control.reconfig.eml_capabilities_present",
60318 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60319
60320 {&hf_ieee80211_eht_multi_link_control_reconfig_mld_capa_oper,
60321 {"MLD Capabilities And Operations Present",
60322 "wlan.eht.multi_link.control.reconfig.mld_capabilities_present",
60323 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60324
60325 {&hf_ieee80211_eht_multi_link_control_reconfig_ext_mld_capa_oper,
60326 {"Extended MLD Capabilities And Operations Present",
60327 "wlan.eht.multi_link.control.reconfig.ext_mld_capa_oper_present",
60328 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60329
60330 {&hf_ieee80211_eht_multi_link_control_reconfig_reserved,
60331 {"Reserved",
60332 "wlan.eht.multi_link.control.reconfig.reserved",
60333 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60334
60335 {&hf_ieee80211_eht_common_field_length,
60336 {"Common Info Length", "wlan.eht.multi_link.common_info.length",
60337 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60338
60339 {&hf_ieee80211_eht_common_field_mld_mac,
60340 {"MLD MAC Address", "wlan.eht.multi_link.common_info.mld_mac_address",
60341 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60342
60343 {&hf_ieee80211_eht_common_field_link_id_field,
60344 {"Link ID subfield", "wlan.eht.multi_link.common_info.link_id_subfield",
60345 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60346
60347 {&hf_ieee80211_eht_common_info_link_id,
60348 {"Link ID", "wlan.eht.multi_link.common_info.link_id_subfield.link_id",
60349 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60350
60351 {&hf_ieee80211_eht_common_info_link_id_reserved,
60352 {"Reserved", "wlan.eht.multi_link.common_info.link_id_subfield.reserved",
60353 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60354
60355 {&hf_ieee80211_eht_common_field_bss_param_change_count,
60356 {"BSS Parameters Change Count",
60357 "wlan.eht.multi_link.common_info.bss_parameters_change_count",
60358 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60359
60360 {&hf_ieee80211_eht_common_field_medium_sync_field,
60361 {"Medium Sync Field", "wlan.eht.multi_link.common_info.medium_sync_field",
60362 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60363
60364 {&hf_ieee80211_eht_common_info_medium_sync_duration,
60365 {"Medium Synchronization Duration",
60366 "wlan.eht.multi_link.common_info.medium_sync.sync_duration",
60367 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60368
60369 {&hf_ieee80211_eht_common_info_medium_sync_threshold,
60370 {"Medium Synchronization OFDM ED Threshold",
60371 "wlan.eht.multi_link.common_info.medium_sync.ofdm_ed_threshold",
60372 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60373
60374 {&hf_ieee80211_eht_common_info_medium_sync_max_txops,
60375 {"Medium Synchronization Maximum Number of TXOPs",
60376 "wlan.eht.multi_link.common_info.medium_sync.max_number_of_txops",
60377 FT_UINT16, BASE_DEC, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60378
60379 {&hf_ieee80211_eht_common_field_eml_capabilities,
60380 {"EML Capabilities", "wlan.eht.multi_link.common_info.eml_capabilities",
60381 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60382
60383 {&hf_ieee80211_eht_common_info_eml_capa_emlsr_support,
60384 {"EMLSR Support",
60385 "wlan.eht.multi_link.common_info.eml_capabilities.emlsr_support",
60386 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60387
60388 {&hf_ieee80211_eht_common_info_eml_capa_emlsr_padding_delay,
60389 {"EMLSR Padding Delay",
60390 "wlan.eht.multi_link.common_info.eml_capabilities.emlsr_padding_delay",
60391 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60392
60393 {&hf_ieee80211_eht_common_info_eml_capa_emlsr_transition_delay,
60394 {"EMLSR Transition Delay",
60395 "wlan.eht.multi_link.common_info.eml_capabilities.emlsr_transition_delay",
60396 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0070, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60397
60398 {&hf_ieee80211_eht_common_info_eml_capa_emlmr_support,
60399 {"EMLMR Support",
60400 "wlan.eht.multi_link.common_info.eml_capabilities.emlmr_support",
60401 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60402
60403 {&hf_ieee80211_eht_common_info_eml_capa_emlmr_delay,
60404 {"EMLMR Delay",
60405 "wlan.eht.multi_link.common_info.eml_capabilities.emlmr_delay",
60406 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0700, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60407
60408 {&hf_ieee80211_eht_common_info_eml_capa_transition_timeout,
60409 {"Transition Timeout",
60410 "wlan.eht.multi_link.common_info.eml_capabilities.transition_timeout",
60411 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60412
60413 {&hf_ieee80211_eht_common_info_eml_capa_reserved,
60414 {"Reserved",
60415 "wlan.eht.multi_link.common_info.eml_capabilities.capa_reserved",
60416 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60417
60418 {&hf_ieee80211_eht_common_field_mld_capabilities,
60419 {"MLD Capabilities", "wlan.eht.multi_link.common_info.mld_capabilities",
60420 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60421
60422 {&hf_ieee80211_eht_common_info_mld_max_simul_links,
60423 {"Maximum Number of Simultaneous Links",
60424 "wlan.eht.multi_link.common_info.mld_capabilities.max_simultaneous_links",
60425 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60426
60427 {&hf_ieee80211_eht_common_info_mld_srs_support,
60428 {"SRS Support",
60429 "wlan.eht.multi_link.common_info.mld_capabilities.srs_support",
60430 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60431
60432 {&hf_ieee80211_eht_common_info_mld_tid_to_link_map_neg,
60433 {"TID-To-Link Mapping Negotiation Support",
60434 "wlan.eht.multi_link.common_info.mld_capabilities.tid_to_link_neg_sup",
60435 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0060, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60436
60437 {&hf_ieee80211_eht_common_info_mld_freq_sep_for_str,
60438 {"Frequency Separation For STR/AP MLD Type Indication",
60439 "wlan.eht.multi_link.common_info.mld_capabilities.freq_sep_for_str",
60440 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0F80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60441
60442 {&hf_ieee80211_eht_common_info_mld_aar_support,
60443 {"AAR Support",
60444 "wlan.eht.multi_link.common_info.mld_capabilities.aar_support",
60445 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60446
60447 {&hf_ieee80211_eht_common_info_mld_link_reconf_op_support,
60448 {"Link Reconfiguration Operation Support",
60449 "wlan.eht.multi_link.common_info.mld_capabilities.link_reconfig_op_support",
60450 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60451
60452 {&hf_ieee80211_eht_common_info_mld_aligned_twt_support,
60453 {"Aligned TWT Support",
60454 "wlan.eht.multi_link.common_info.mld_capabilities.aligned_twt_support",
60455 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60456
60457 {&hf_ieee80211_eht_common_info_mld_reserved,
60458 {"Reserved", "wlan.eht.multi_link.common_info.mld_capabilities.reserved",
60459 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60460
60461 {&hf_ieee80211_eht_common_field_ap_mld_mac,
60462 {"AP MLD MAC Address",
60463 "wlan.eht.multi_link.common_info.ap_mld_mac_address",
60464 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60465
60466 {&hf_ieee80211_eht_common_field_mld_id,
60467 {"AP MLD ID", "wlan.eht.multi_link.common_info.mld_id",
60468 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60469
60470 {&hf_ieee80211_eht_common_field_ext_mld_capabilities,
60471 {"Extended MLD Capabilities and Operations",
60472 "wlan.eht.multi_link.common_info.ext_mld_capabilities",
60473 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60474
60475 {&hf_ieee80211_eht_common_info_ext_mld_op_update_support,
60476 {"Operation Parameter Update Support",
60477 "wlan.eht.multi_link.common_info.ext_mld_capabilities.op_param_update_support",
60478 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60479
60480 {&hf_ieee80211_eht_common_info_ext_mld_max_simul_links,
60481 {"Recommended Max Simultaneous Links",
60482 "wlan.eht.multi_link.common_info.ext_mld_capabilities.max_simultaneous_links",
60483 FT_UINT16, BASE_DEC, NULL((void*)0), 0x001E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60484
60485 {&hf_ieee80211_eht_common_info_ext_mld_nstr_status_support,
60486 {"NSTR Status Update Support",
60487 "wlan.eht.multi_link.common_info.ext_mld_capabilities.nstr_status_update_support",
60488 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60489
60490 {&hf_ieee80211_eht_common_info_ext_mld_emlsr_enable_one_link_support,
60491 {"EMLSR Enablement On One Link Support",
60492 "wlan.eht.multi_link.common_info.ext_mld_capabilities.emlsr_enable_one_link_support",
60493 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60494
60495 {&hf_ieee80211_eht_common_info_ext_mld_btm_mld_recom_aps_support,
60496 {"BTM MLD Recommendation For Multiple APs Support",
60497 "wlan.eht.multi_link.common_info.ext_mld_capabilities.btm_mld_recom_multiple_aps_support",
60498 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60499
60500 {&hf_ieee80211_eht_common_info_ext_mld_reserved,
60501 {"Reserved", "wlan.eht.multi_link.common_info.ext_mld_capabilities.reserved",
60502 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60503
60504 {&hf_ieee80211_eht_profile_sta_control,
60505 {"STA Control", "wlan.eht.multi_link.sta_profile.sta_control",
60506 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60507
60508 {&hf_ieee80211_eht_multi_link_subelt_tag,
60509 {"Subelement ID", "wlan.eht.multi_link.sta_profile.subelt_id",
60510 FT_UINT8, BASE_HEX | BASE_RANGE_STRING0x00000100, RVALS(multi_link_sub_elt_string)((0 ? (const struct _range_string*)0 : ((multi_link_sub_elt_string
))))
,
60511 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60512
60513 {&hf_ieee80211_eht_multi_link_subelt_len,
60514 {"Subelement Length", "wlan.eht.multi_link.sta_profile.subelt_len",
60515 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60516
60517 {&hf_ieee80211_eht_multi_link_type_0_link_count,
60518 {"Basic STA Profile Count", "wlan.eht.multi_link.type_0.sta_profile_count",
60519 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60520
60521 {&hf_ieee80211_eht_multi_link_type_1_link_count,
60522 {"Probe Request STA Profile Count", "wlan.eht.multi_link.type_1.sta_profile_count",
60523 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60524
60525 {&hf_ieee80211_eht_multi_link_type_2_link_count,
60526 {"Reconfiguration STA Profile Count", "wlan.eht.multi_link.type_2.sta_profile_count",
60527 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60528
60529 {&hf_ieee80211_eht_multi_link_type_3_link_count,
60530 {"TDLS STA Profile Count", "wlan.eht.multi_link.type_3.sta_profile_count",
60531 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60532
60533 {&hf_ieee80211_eht_multi_link_type_4_link_count,
60534 {"Priority Access STA Profile Count", "wlan.eht.multi_link.type_4.sta_profile_count",
60535 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60536
60537 {&hf_ieee80211_eht_multi_link_link_id_list,
60538 {"STA Profiles LinkIds", "wlan.eht.multi_link.sta_profile_id_list",
60539 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60540
60541 {&hf_ieee80211_eht_profile_link_id,
60542 {"Link ID", "wlan.eht.multi_link.sta_profile.sta_control.link_id",
60543 FT_UINT16, BASE_HEX, NULL((void*)0), STA_CTRL_LINK_ID0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60544
60545 {&hf_ieee80211_eht_profile_complete_profile,
60546 {"Complete Profile",
60547 "wlan.eht.multi_link.sta_profile.sta_control.complete_profile",
60548 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_COMPLETE_PROFILE0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60549
60550 {&hf_ieee80211_eht_profile_mac_address_present,
60551 {"MAC Address Present",
60552 "wlan.eht.multi_link.sta_profile.sta_control.mac_address_present",
60553 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_MAC_ADDR_PRESENT0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60554
60555 {&hf_ieee80211_eht_profile_beacon_interval_present,
60556 {"Beacon Interval Present",
60557 "wlan.eht.multi_link.sta_profile.sta_control.beacon_interval_present",
60558 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_BEACON_INT_PRESENT0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60559
60560 {&hf_ieee80211_eht_profile_tsf_offset_present,
60561 {"TSF Offset Present",
60562 "wlan.eht.multi_link.sta_profile.sta_control.tsf_offset_present",
60563 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_TSF_OFFSET_PRESENT0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60564
60565 {&hf_ieee80211_eht_profile_dtim_info_present,
60566 {"DTIM Info Present",
60567 "wlan.eht.multi_link.sta_profile.sta_control.dtim_info_present",
60568 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_DTIM_INFO_PRESENT0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60569
60570 {&hf_ieee80211_eht_profile_nstr_link_pair_present,
60571 {"NSTR Link Pair Present",
60572 "wlan.eht.multi_link.sta_profile.sta_control.nstr_link_pair_present",
60573 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) }},
60574
60575 {&hf_ieee80211_eht_profile_nstr_bitmap_size,
60576 {"NSTR Bitmap Size",
60577 "wlan.eht.multi_link.sta_profile.sta_control.nstr_bitmap_size",
60578 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) }},
60579
60580 {&hf_ieee80211_eht_profile_bss_params_change_count_present,
60581 {"BSS Parameters Change Count Present",
60582 "wlan.eht.multi_link.sta_profile.sta_control.bss_params_change_count_present",
60583 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) }},
60584
60585 {&hf_ieee80211_eht_profile_reserved,
60586 {"Reserved", "wlan.eht.multi_link.sta_profile.sta_control.reserved",
60587 FT_UINT16, BASE_HEX, NULL((void*)0), STA_CTRL_RESERVED0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60588
60589 {&hf_ieee80211_eht_profile_probe_reserved,
60590 {"Reserved", "wlan.eht.multi_link.sta_profile.sta_control.probe_reserved",
60591 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60592
60593 {&hf_ieee80211_eht_profile_removal_timer_present,
60594 {"AP Removal Timer Present",
60595 "wlan.eht.multi_link.sta_profile.sta_control.ap_removal_timer_present",
60596 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60597
60598 {&hf_ieee80211_eht_profile_reconfig_operation_type,
60599 {"Reconfiguration Operation Type",
60600 "wlan.eht.multi_link.sta_profile.sta_control.reconfig_operation_type",
60601 FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(eht_reconfig_op_type_rvals)((0 ? (const struct _range_string*)0 : ((eht_reconfig_op_type_rvals
))))
,
60602 0x0780, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60603
60604 {&hf_ieee80211_eht_profile_operation_para_present,
60605 {"Operation Parameters Present",
60606 "wlan.eht.multi_link.sta_profile.sta_control.operation_parameters_present",
60607 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60608
60609 {&hf_ieee80211_eht_profile_reconfig_nstr_bitmap_size,
60610 {"NSTR Bitmap Size",
60611 "wlan.eht.multi_link.sta_profile.sta_control.reconfig_nstr_bitmap_size",
60612 FT_UINT16, BASE_DEC, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60613
60614 {&hf_ieee80211_eht_profile_reconfig_nstr_bitmap_present,
60615 {"NSTR Indication Bitmap Present",
60616 "wlan.eht.multi_link.sta_control.reconfig_nstr_bitmap_present",
60617 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60618
60619 {&hf_ieee80211_eht_profile_reconfig_reserved,
60620 {"Reserved", "wlan.eht.multi_link.sta_profile.sta_control.reconfig_reserved",
60621 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60622
60623 {&hf_ieee80211_eht_profile_prio_acc_reserved,
60624 {"Reserved",
60625 "wlan.eht.multi_link.sta_profile.sta_control.priority_access_reserved",
60626 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60627
60628 {&hf_ieee80211_eht_sta_profile_info_len,
60629 {"STA Info Length",
60630 "wlan.eht.multi_link.sta_profile.sta_info.len",
60631 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60632
60633 {&hf_ieee80211_eht_sta_profile_info_mac,
60634 {"STA MAC Address",
60635 "wlan.eht.multi_link.sta_profile.sta_info.sta_mac_addr",
60636 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60637
60638 {&hf_ieee80211_eht_sta_profile_info_beacon,
60639 {"Beacon Interval",
60640 "wlan.eht.multi_link.sta_profile.sta_info.beacon_interval",
60641 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60642
60643 {&hf_ieee80211_eht_sta_profile_info_tsf_offset,
60644 {"TSF Offset",
60645 "wlan.eht.multi_link.sta_profile.sta_info.tsf_offset",
60646 FT_INT64, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60647
60648 {&hf_ieee80211_eht_sta_profile_info_dtim_count,
60649 {"DTIM Count",
60650 "wlan.eht.multi_link.sta_profile.sta_info.dtim_count",
60651 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60652
60653 {&hf_ieee80211_eht_sta_profile_info_dtim_period,
60654 {"DTIM Period",
60655 "wlan.eht.multi_link.sta_profile.sta_info.dtim_period",
60656 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60657
60658 {&hf_ieee80211_eht_sta_profile_info_bitmap,
60659 {"NSTR Indication Bitmap",
60660 "wlan.eht.multi_link.sta_profile.sta_info.nstr_bitmap",
60661 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60662
60663 {&hf_ieee80211_eht_sta_profile_bss_params_change_count,
60664 {"BSS Parameters Change Count",
60665 "wlan.eht.multi_link.sta_profile.sta_info.bss_params_change_count",
60666 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60667
60668 {&hf_ieee80211_eht_sta_profile_removal_timer,
60669 {"AP Removal Timer",
60670 "wlan.eht.multi_link.sta_profile.sta_info.ap_removal_timer",
60671 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60672
60673 {&hf_ieee80211_eht_sta_profile_presence_indi,
60674 {"Presence Indication",
60675 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication",
60676 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60677
60678 {&hf_ieee80211_eht_sta_profile_presence_indi_max_mpdu_length_present,
60679 {"Maximum MPDU Length Present",
60680 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication.max_mpdu_length_present",
60681 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60682
60683 {&hf_ieee80211_eht_sta_profile_presence_indi_max_amsdu_length_present,
60684 {"Maximum A-MSDU Length Present",
60685 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication.max_amsdu_length_present",
60686 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60687
60688 {&hf_ieee80211_eht_sta_profile_presence_indi_reserved,
60689 {"Reserved",
60690 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication.reserved",
60691 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60692
60693 {&hf_ieee80211_eht_sta_profile_operation_para_info,
60694 {"Operation Parameter Info",
60695 "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info",
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_sta_profile_operation_para_info_max_mpdu_length,
60699 {"Maximum MPDU Length",
60700 "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info.max_mpdu_length",
60701 FT_UINT16, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x0003,
60702 "In Octets unit", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60703
60704 {&hf_ieee80211_eht_sta_profile_operation_para_info_amsdu_length,
60705 {"A-MSDU length",
60706 "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info.amsdu_length",
60707 FT_BOOLEAN, 16, TFS(&ht_max_amsdu_flag)((0 ? (const struct true_false_string*)0 : ((&ht_max_amsdu_flag
))))
, 0x0004,
60708 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60709
60710 {&hf_ieee80211_eht_sta_profile_operation_para_info_pad,
60711 {"Pad", "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info.pad",
60712 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF8,
60713 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60714
60715 {&hf_ieee80211_eht_operation_parameters,
60716 {"EHT Operation Parameters",
60717 "wlan.eht.eht_operation_parameters",
60718 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60719
60720 {&hf_ieee80211_eht_basic_eht_mcs_nss_set,
60721 {"Basic EHT-MCS And Nss Set",
60722 "wlan.eht.basic_eht_mcs_and_nss_set",
60723 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60724
60725 {&hf_ieee80211_eht_operation_control_chan_width,
60726 {"Channel Width",
60727 "wlan.eht.eht_operation_information.control.channel_width",
60728 FT_UINT8, BASE_DEC, VALS(eht_operation_control_chan_wid_vals)((0 ? (const struct _value_string*)0 : ((eht_operation_control_chan_wid_vals
))))
,
60729 0x7, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60730
60731 {&hf_ieee80211_eht_operation_control_reserved,
60732 {"Reserved", "wlan.eht.eht_operation_information.control.reserved",
60733 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60734
60735 {&hf_ieee80211_eht_operation_info_present,
60736 {"EHT Operation Information Present",
60737 "wlan.eht.eht_operation_parameters.eht_operation_information_present",
60738 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60739
60740 {&hf_ieee80211_eht_operation_subchannel_bitmap_present,
60741 {"Disabled Subchannel Bitmap Present",
60742 "wlan.eht.eht_operation_parameters.disabled_subchannel_bitmap_present",
60743 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60744
60745 {&hf_ieee80211_eht_operation_default_pe_duration,
60746 {"EHT Default PE Duration",
60747 "wlan.eht.eht_operation_parameters.eht_default_pe_duration",
60748 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60749
60750 {&hf_ieee80211_eht_operation_group_addressed_bu_indication_limit,
60751 {"Group Addressed BU Indication Limit",
60752 "wlan.eht.eht_operation_parameters.group_addressed_bu_indication_limit",
60753 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60754
60755 {&hf_ieee80211_eht_operation_group_addressed_bu_indication_exp,
60756 {"Group Addressed BU Indication Exponent",
60757 "wlan.eht.eht_operation_parameters.group_addressed_bu_indication_exponent",
60758 FT_UINT8, BASE_DEC, NULL((void*)0), 0x30, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60759
60760 {&hf_ieee80211_eht_operation_mcs15_disable,
60761 {"MCS15 Disable",
60762 "wlan.eht.eht_operation_parameters.mcs_15_disable",
60763 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60764
60765 {&hf_ieee80211_eht_operation_reserved,
60766 {"Reserved", "wlan.eht.eht_operation_parameters.reserved",
60767 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60768
60769 {&hf_ieee80211_eht_operation_control,
60770 {"Control", "wlan.eht.eht_operation_information.control",
60771 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60772
60773 {&hf_ieee80211_eht_operation_ccfs0,
60774 {"CCFS0", "wlan.eht.eht_operation_information.ccfs0",
60775 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60776
60777 {&hf_ieee80211_eht_operation_ccfs1,
60778 {"CCFS1", "wlan.eht.eht_operation_information.ccfs1",
60779 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60780
60781 {&hf_ieee80211_eht_operation_disabled_bitmap,
60782 {"Disabled Subchannel Bitmap",
60783 "wlan.eht.eht_operation_information.disabled_subchannel_bitmap",
60784 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60785
60786 {&hf_ieee80211_eht_mac_capabilities,
60787 {"EHT MAC Capabilities Information", "wlan.eht.mac_capabilities_info",
60788 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60789
60790 {&hf_ieee80211_eht_mac_capa_epcs_prio_access_support,
60791 {"EPCS Priority Access Support",
60792 "wlan.eht.mac_capabilities.epcs_priority_access_support",
60793 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) }},
60794
60795 {&hf_ieee80211_eht_mac_capa_eht_om_control_support,
60796 {"EHT OM Control Support",
60797 "wlan.eht.mac_capabilities.eht_om_control_support",
60798 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) }},
60799
60800 {&hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_1_support,
60801 {"Triggered TXOP Sharing Mode 1 Support",
60802 "wlan.eht.mac_capabilities.triggered_txop_sharing_mode_1_support",
60803 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) }},
60804
60805 {&hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_2_support,
60806 {"Triggered TXOP Sharing Mode 2 Support",
60807 "wlan.eht.mac_capabilities.triggered_txop_sharing_mode_2_support",
60808 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) }},
60809
60810 {&hf_ieee80211_eht_mac_capa_restricted_twt_support,
60811 {"Restricted TWT Support",
60812 "wlan.eht.mac_capabilities.restricted_twt_support",
60813 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) }},
60814
60815 {&hf_ieee80211_eht_mac_capa_scs_traffic_description_support,
60816 {"SCS Traffic Description Support",
60817 "wlan.eht.mac_capabilities.scs_traffic_description_support",
60818 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) }},
60819
60820 {&hf_ieee80211_eht_mac_capa_maximum_mpdu_length,
60821 {"Maximum MPDU Length",
60822 "wlan.eht.mac_capabilities.maximum_mpdu_length",
60823 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) }},
60824
60825 {&hf_ieee80211_eht_mac_capa_maximum_ampdu_length_exp_ext,
60826 {"Maximum A-MPDU Length Exponent Extension",
60827 "wlan.eht.mac_capabilities.maximum_a_mpdu_length_exponent_extension",
60828 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60829
60830 {&hf_ieee80211_eht_mac_capa_eht_trs_support,
60831 {"EHT TRS Support",
60832 "wlan.eht.mac_capabilities.eht_trs_support",
60833 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) }},
60834
60835 {&hf_ieee80211_eht_mac_capa_txop_return_support_txop_sha_mode,
60836 {"TXOP Return Support In TXOP Sharing Mode 2",
60837 "wlan.eht.mac_capabilities.txop_return_support_in_txop_sharing_mode_2",
60838 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) }},
60839
60840 {&hf_ieee80211_eht_mac_capa_two_bqrs_support,
60841 {"Two BQRs Support",
60842 "wlan.eht.mac_capabilities.two_bqrs_support",
60843 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) }},
60844
60845 {&hf_ieee80211_eht_mac_capa_eht_link_adaptation_support,
60846 {"EHT Link Adaptation Support",
60847 "wlan.eht.mac_capabilities.eht_link_adaptation_support",
60848 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) }},
60849
60850 {&hf_ieee80211_eht_mac_capa_unsolicited_epcs_update,
60851 {"Unsolicited EPCS Priority Access Parameter Update",
60852 "wlan.eht.mac_capabilities.unsolicited_epcs_prio_access_para_update",
60853 FT_UINT16, BASE_DEC, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60854
60855 {&hf_ieee80211_eht_mac_capa_reserved,
60856 {"Reserved",
60857 "wlan.eht.mac_capabilities.reserved",
60858 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60859
60860 {&hf_ieee80211_eht_phy_bits_0_15,
60861 {"EHT PHY Bits 0-15", "wlan.eht.phy_capabilities.bits_0_15",
60862 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60863
60864 {&hf_ieee80211_eht_phy_bits_0_15_reserved,
60865 {"Reserved", "wlan.eht.phy_capabilities.bits_0_15.reserved",
60866 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60867
60868 {&hf_ieee80211_eht_phy_bits_0_15_320_mhz_in_6ghz,
60869 {"Support For 320 MHz in 6 GHz",
60870 "wlan.eht.phy_capabilities.bits_0_15.support_for_320mhz_in_6ghz",
60871 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) }},
60872
60873 {&hf_ieee80211_eht_phy_bits_0_15_242_tone_ru_bw_wider_20mhz,
60874 {"Support for 242-tone RU in BW Wider than 20 MHz",
60875 "wlan.eht.phy_capabilities.bits_0_15.support_for_242_tone_ru_in_bw_wider_20mhz",
60876 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) }},
60877
60878 {&hf_ieee80211_eht_phy_bits_0_15_ndp_and_3_2_us_gi,
60879 {"NDP With 4x EHT-LTF And 3.2 us GI",
60880 "wlan.eht.phy_capabilities.bits_0_15.ndp_with_4x_eht_ltf_and_3_2_us_gi",
60881 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) }},
60882
60883 {&hf_ieee80211_eht_phy_bits_0_15_partial_bw_ul_mu_mimo,
60884 {"Partial Bandwidth UL MU-MIMO",
60885 "wlan.eht.phy_capabilities.bits_0_15.partial_bandwidth_ul_mu_mimo",
60886 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) }},
60887
60888 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformer,
60889 {"SU Beamformer", "wlan.eht.phy_capabilities.bits_0_15.su_beamformer",
60890 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) }},
60891
60892 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee,
60893 {"SU Beamformee", "wlan.eht.phy_capabilities.bits_0_15.su_beamformee",
60894 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) }},
60895
60896 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee_le_80mhz,
60897 {"Beamformee SS (<= 80 MHz)",
60898 "wlan.eht.phy_capabilities.bits_0_15.beamformee_ss_le_80mhz",
60899 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0380, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60900
60901 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_160mhz,
60902 {"Beamformee SS (= 160 MHz)",
60903 "wlan.eht.phy_capabilities.bits_0_15.beamformee_ss_eq_160mhz",
60904 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1c00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60905
60906 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_320mhz,
60907 {"Beamformee SS (= 320 MHz)",
60908 "wlan.eht.phy_capabilities.bits_0_15.beamformee_ss_eq_320_mhz",
60909 FT_UINT16, BASE_HEX, NULL((void*)0), 0xe000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60910
60911 {&hf_ieee80211_eht_phy_bits_16_31,
60912 {"EHT PHY Bits 16-31", "wlan.eht.phy_capabilities.bits_16_31",
60913 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60914
60915 {&hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_lt_80mhz,
60916 {"Number Of Sounding Dimensions (<= 80 MHz)",
60917 "wlan.eht.phy_capabilities.bits_16_31.number_of_sounding_dims_le_80_mhz",
60918 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60919
60920 {&hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_160mhz,
60921 {"Number Of Sounding Dimensions (= 160 MHz)",
60922 "wlan.eht.phy_capabilities.bits_16_31.number_of_sounding_dims_eq_160_mhz",
60923 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60924
60925 {&hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_320mhz,
60926 {"Number Of Sounding Dimensions (= 320 MHz)",
60927 "wlan.eht.phy_capabilities.bits_16_31.number_of_sounding_dims_eq_320_mhz",
60928 FT_UINT16, BASE_HEX, NULL((void*)0), 0x01c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60929
60930 {&hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_su_feedback,
60931 {"Ng = 16 SU Feedback",
60932 "wlan.eht.phy_capabilities.bits_16_31.ng_eq_16_su_fbck",
60933 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) }},
60934
60935 {&hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_mu_feedback,
60936 {"Ng = 16 MU Feedback",
60937 "wlan.eht.phy_capabilities.bits_16_31.ng_eq_16_mu_fbck",
60938 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) }},
60939
60940 {&hf_ieee80211_eht_phy_bits_16_31_codebook_size_4_2_su_fbck,
60941 {"Codebook Size = (4,2) SU Feedback",
60942 "wlan.eht.phy_capabilities.bits_16_31.codebook_size_eq_4_2_su_fbck",
60943 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) }},
60944
60945 {&hf_ieee80211_eht_phy_bits_16_31_codebook_size_7_5_mu_fbck,
60946 {"Codebook Size = (7,5) MU Feedback",
60947 "wlan.eht.phy_capabilities.bits_16_31.codebook_size_eq_7_5_mu_fbck",
60948 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) }},
60949
60950 {&hf_ieee80211_eht_phy_bits_16_31_triggered_su_beemform_fbck,
60951 {"Triggered SU Beamforming Feedback",
60952 "wlan.eht.phy_capabilities.bits_16_31.triggered_su_beamforming_fbck",
60953 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) }},
60954
60955 {&hf_ieee80211_eht_phy_bits_16_31_triggered_mu_beemform_p_bw_fbck,
60956 {"Triggered MU Beamforming Partial BW Feedback",
60957 "wlan.eht.phy_capabilities.bits_16_31.triggered_mu_beamforming_partial_fbck",
60958 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) }},
60959
60960 {&hf_ieee80211_eht_phy_bits_16_31_triggered_cqi_feedback,
60961 {"Triggered CQI Feedback",
60962 "wlan.eht.phy_capabilities.bits_16_31.triggered_cqi_fbck",
60963 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) }},
60964
60965 {&hf_ieee80211_eht_phy_bits_32_39,
60966 {"EHT PHY Bits 32-39", "wlan.eht.phy_capabilities.bits_32_39",
60967 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60968
60969 {&hf_ieee80211_eht_phy_bits_32_39_partial_bw_dl_mu_mimo,
60970 {"Partial Bandwidth DL MU-MIMO",
60971 "wlan.eht.phy_capabilities.bits_32_39.partial_bw_dl_mu_mimo",
60972 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) }},
60973
60974 {&hf_ieee80211_eht_phy_bits_32_39_eht_psr_based_sr_support,
60975 {"EHT PSR-Based SR support",
60976 "wlan.eht.phy_capabilities.bits_32_39.eht_psr_based_sr_support",
60977 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) }},
60978
60979 {&hf_ieee80211_eht_phy_bits_32_39_power_boost_factor_support,
60980 {"Power Boost Factor Support",
60981 "wlan.eht.phy_capabilities.bits_32_39.power_boost_factor_support",
60982 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) }},
60983
60984 {&hf_ieee80211_eht_phy_bits_32_39_eht_mu_ppdu_w_4x_eht_ltf_08_gi,
60985 {"EHT MU PPDU With 4x EHT-LTF and 0.8 us GI",
60986 "wlan.eht.phy_capabilities.bits_32_39.eht_mu_ppdu_w_4x_eht_ltf_08_us_gi",
60987 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) }},
60988
60989 {&hf_ieee80211_eht_phy_bits_32_39_max_nc,
60990 {"Max Nc", "wlan.eht.phy_capabilities.bits_32_39.max_nc",
60991 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60992
60993 {&hf_ieee80211_eht_phy_bits_40_63,
60994 {"EHT PHY Bits 40-63", "wlan.eht.phy_capabilities.bits_40_63",
60995 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60996
60997 {&hf_ieee80211_eht_phy_bits_40_63_non_triggered_cqi_fbck,
60998 {"Non-Triggered CQI Feedback",
60999 "wlan.eht.phy_capabilities.bits_40_63.non_triggered_cqi_fbck",
61000 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61001 0x000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61002
61003 {&hf_ieee80211_eht_phy_bits_40_63_tx_1024_4096_qam_lt_242_ru_support,
61004 {"Tx 1024-QAM & 4096-QAM < 242-tone RU Support",
61005 "wlan.eht.phy_capabilities.bits_40_63.tx_1024_4096_qam_lt_242_ru_support",
61006 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61007 0x000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61008
61009 {&hf_ieee80211_eht_phy_bits_40_63_rx_1024_4096_qam_lt_242_ru_support,
61010 {"Rx 1024-QAM & 4096-QAM < 242-tone-RU Support",
61011 "wlan.eht.phy_capabilities.bits_40_63.rx_1024_4096_qam_lt_242_ru_support",
61012 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61013 0x000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61014
61015 {&hf_ieee80211_eht_phy_bits_40_63_ppe_thresholds_present,
61016 {"PPE Thresholds Present",
61017 "wlan.eht.phy_capabilities.bits_40_63.ppe_thresholds_present",
61018 FT_BOOLEAN, 24, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
,
61019 0x000008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61020
61021 {&hf_ieee80211_eht_phy_bits_40_63_common_nominal_packet_padding,
61022 {"Common Nominal Packet Padding",
61023 "wlan.eht.phy_capabilities.bits_40_63.common_nominal_packet_padding",
61024 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61025
61026 {&hf_ieee80211_eht_phy_bits_40_63_max_num_supported_eht_ltfs,
61027 {"Maximum Number Of Supported EHT-LTFs",
61028 "wlan.eht.phy_capabilities.bits_40_63.max_num_supported_eht_ltfs",
61029 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0007c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61030
61031 {&hf_ieee80211_eht_phy_bits_40_63_support_of_mcx_15,
61032 {"Support Of MCS 15",
61033 "wlan.eht.phy_capabilities.bits_40_63.support_of_mcs_15",
61034 FT_UINT24, BASE_DEC, NULL((void*)0), 0x007800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61035
61036 {&hf_ieee80211_eht_phy_bits_40_63_support_of_eht_dup_in_6_ghz,
61037 {"Support Of EHT DUP (MCS 14) in 6 GHz",
61038 "wlan.eht.phy_capabilities.bits_40_63.support_eht_dup_6_ghz",
61039 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61040 0x008000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61041 {&hf_ieee80211_eht_phy_bits_40_63_support_20_mhz_sta_ndp_wide_bw,
61042 {"Support For 20 MHz Operating STA Receiving NDP With Wider BW",
61043 "wlan.eht.phy_capabilities.bits_40_63.support_20_mhz_sta_recv_ndp_wider_bw",
61044 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61045 0x010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61046
61047 {&hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_le_80_mhz,
61048 {"Non-OFDMA UL MU-MIMO (BW <= 80 MHz)",
61049 "wlan.eht.phy_capabilities.bits_40_63.non_ofdma_ul_mu_mimo_bw_lt_80_mhz",
61050 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61051 0x020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61052
61053 {&hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_160_mhz,
61054 {"Non-OFDMA UL MU-MIMO (BW = 160 MHz)",
61055 "wlan.eht.phy_capabilities.bits_40_63.non_ofdma_ul_mu_mimo_bw_eq_160_mhz",
61056 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61057 0x040000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61058
61059 {&hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_320_mhz,
61060 {"Non-OFDMA UL MU-MIMO (BW = 320 MHz)",
61061 "wlan.eht.phy_capabilities.bits_40_63.non_ofdma_ul_mu_mimo_bw_eq_320_mhz",
61062 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61063 0x080000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61064
61065 {&hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_le_80_mhz,
61066 {"MU Beamformer (BW <= 80 MHz)",
61067 "wlan.eht.phy_capabilities.bits_40_63.mu_beamformer_bw_le_80_mhz",
61068 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61069 0x100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61070
61071 {&hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_160_mhz,
61072 {"MU Beamformer (BW = 160 MHz)",
61073 "wlan.eht.phy_capabilities.bits_40_63.mu_beamformer_bw_eq_160_mhz",
61074 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61075 0x200000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61076
61077 {&hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_320_mhz,
61078 {"MU Beamformer (BW = 320 MHz)",
61079 "wlan.eht.phy_capabilities.bits_40_63.mu_beamformer_bw_eq_320_mhz",
61080 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61081 0x400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61082
61083 {&hf_ieee80211_eht_phy_bits_40_63_tb_sounding_feedback_rate_limit,
61084 {"TB Sounding Feedback Rate Limit",
61085 "wlan.eht.phy_capabilities.bits_40_63.tb_sounding_fbck_rate_limit",
61086 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61087 0x800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61088
61089 {&hf_ieee80211_eht_phy_bits_64_71,
61090 {"EHT PHY Bits 64-71", "wlan.eht.phy_capabilities.bits_64_71",
61091 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61092
61093 {&hf_ieee80211_eht_phy_bits_64_71_rx_1024_qam_wid_bw_dl_ofdma_sup,
61094 {"Rx 1024-QAM In Wider Bandwidth DL OFDMA Support",
61095 "wlan.eht.phy_capabilities.bits_64_71.rx_1024_qam_in_wider_bw_dl_ofdma",
61096 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61097 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61098
61099 {&hf_ieee80211_eht_phy_bits_64_71_rx_4096_qam_wid_bw_dl_ofdma_sup,
61100 {"Rx 4096-QAM In Wider Bandwidth DL OFDMA SUpport",
61101 "wlan.eht.phy_capabilities.bits_64_71.rx_4096_qam_in_wider_bw_dl_ofdma",
61102 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61103 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61104
61105 {&hf_ieee80211_eht_phy_bits_64_71_20m_limit_capa_support,
61106 {"20 MHz-Only Limited Capabilities Support",
61107 "wlan.eht.phy_capabilities.bits_64_71.20m_only_limited_capabilities",
61108 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61109 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61110
61111 {&hf_ieee80211_eht_phy_bits_64_71_20m_mu_beam_feedback_dl_mu_mimo,
61112 {"20 MHz-Only Triggered MU Beamforming Full BW Feedback And DL MU-MIMO",
61113 "wlan.eht.phy_capabilities.bits_64_71.20m_only_trig_mu_beamforming_dl_mu_mimo",
61114 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61115 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61116
61117 {&hf_ieee80211_eht_phy_bits_64_71_20m_mru_support,
61118 {"20 MHz-Only MRU Support",
61119 "wlan.eht.phy_capabilities.bits_64_71.20m_only_mru_support",
61120 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61121 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61122
61123 {&hf_ieee80211_eht_phy_bits_64_71_reserved,
61124 {"Reserved", "wlan.eht.phy_capabilities.bits_64_71.reserved",
61125 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61126
61127 {&hf_ieee80211_eht_mcs_and_nss_non_ap,
61128 {"EHT-MCS Map (20 MHz-Only Non-AP STA)",
61129 "wlan.eht.supported_eht_mcs_bss_set.20_mhz_only_non_sta",
61130 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61131
61132 {&hf_ieee80211_eht_rx_max_nss_20mhz_0_7,
61133 {"RX Max NSS That Supports EHt-MCS 0-7",
61134 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_0_7",
61135 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61136
61137 {&hf_ieee80211_eht_tx_max_nss_20mhz_0_7,
61138 {"TX Max NSS That Supports EHt-MCS 0-7",
61139 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_0_7",
61140 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61141
61142 {&hf_ieee80211_eht_rx_max_nss_20mhz_8_9,
61143 {"RX Max NSS That Supports EHt-MCS 8-9",
61144 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_8_9",
61145 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61146
61147 {&hf_ieee80211_eht_tx_max_nss_20mhz_8_9,
61148 {"TX Max NSS That Supports EHt-MCS 8-9",
61149 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_8_9",
61150 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61151
61152 {&hf_ieee80211_eht_rx_max_nss_20mhz_10_11,
61153 {"RX Max NSS That Supports EHt-MCS 10-11",
61154 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_10_11",
61155 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61156
61157 {&hf_ieee80211_eht_tx_max_nss_20mhz_10_11,
61158 {"TX Max NSS That Supports EHt-MCS 10-11",
61159 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_10_11",
61160 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00F00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61161
61162 {&hf_ieee80211_eht_rx_max_nss_20mhz_12_13,
61163 {"RX Max NSS That Supports EHt-MCS 12-13",
61164 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_12_13",
61165 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0F000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61166
61167 {&hf_ieee80211_eht_tx_max_nss_20mhz_12_13,
61168 {"TX Max NSS That Supports EHt-MCS 12-13",
61169 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_12_13",
61170 FT_UINT32, BASE_HEX, NULL((void*)0), 0xF0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61171
61172 {&hf_ieee80211_eht_mcs_and_nss_le_80mhz,
61173 {"EHT-MCS Map (BW <= 80MHz)",
61174 "wlan.eht.supported_eht_mcs_bss_set.eht_mcs_map_bw_le_80_mhz",
61175 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61176
61177 {&hf_ieee80211_eht_le_80_rx_max_nss_0_9,
61178 {"Rx Max Nss That Supports EHT-MCS 0-9",
61179 "wlan.eht.supported_eht_mcs_bss_set.le_80.rx_max_nss_supports_eht_mcs_0_9",
61180 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61181
61182 {&hf_ieee80211_eht_le_80_tx_max_nss_0_9,
61183 {"Tx Max Nss That Supports EHT-MCS 0-9",
61184 "wlan.eht.supported_eht_mcs_bss_set.le_80.tx_max_nss_supports_eht_mcs_0_9",
61185 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61186
61187 {&hf_ieee80211_eht_le_80_rx_max_nss_10_11,
61188 {"Rx Max Nss That Supports EHT-MCS 10-11",
61189 "wlan.eht.supported_eht_mcs_bss_set.le_80.rx_max_nss_supports_eht_mcs_10_11",
61190 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61191
61192 {&hf_ieee80211_eht_le_80_tx_max_nss_10_11,
61193 {"Tx Max Nss That Supports EHT-MCS 10-11",
61194 "wlan.eht.supported_eht_mcs_bss_set.le_80.tx_max_nss_supports_eht_mcs_10_11",
61195 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61196
61197 {&hf_ieee80211_eht_le_80_rx_max_nss_12_13,
61198 {"Rx Max Nss That Supports EHT-MCS 12-13",
61199 "wlan.eht.supported_eht_mcs_bss_set.le_80.rx_max_nss_supports_eht_mcs_12_13",
61200 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61201
61202 {&hf_ieee80211_eht_le_80_tx_max_nss_12_13,
61203 {"Tx Max Nss That Supports EHT-MCS 12-13",
61204 "wlan.eht.supported_eht_mcs_bss_set.le_80.tx_max_nss_supports_eht_mcs_12_13",
61205 FT_UINT24, BASE_DEC, NULL((void*)0), 0xF00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61206
61207 {&hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
61208 {"EHT-MCS Map (BW = 160MHz)",
61209 "wlan.eht.supported_eht_mcs_bss_set.eht_mcs_map_bw_eq_160_mhz",
61210 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61211
61212 {&hf_ieee80211_eht_160_rx_max_nss_0_9,
61213 {"Rx Max Nss That Supports EHT-MCS 0-9",
61214 "wlan.eht.supported_eht_mcs_bss_set.160.rx_max_nss_supports_eht_mcs_0_9",
61215 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61216
61217 {&hf_ieee80211_eht_160_tx_max_nss_0_9,
61218 {"Tx Max Nss That Supports EHT-MCS 0-9",
61219 "wlan.eht.supported_eht_mcs_bss_set.160.tx_max_nss_supports_eht_mcs_0_9",
61220 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61221
61222 {&hf_ieee80211_eht_160_rx_max_nss_10_11,
61223 {"Rx Max Nss That Supports EHT-MCS 10-11",
61224 "wlan.eht.supported_eht_mcs_bss_set.160.rx_max_nss_supports_eht_mcs_10_11",
61225 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61226
61227 {&hf_ieee80211_eht_160_tx_max_nss_10_11,
61228 {"Tx Max Nss That Supports EHT-MCS 10-11",
61229 "wlan.eht.supported_eht_mcs_bss_set.160.tx_max_nss_supports_eht_mcs_10_11",
61230 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61231
61232 {&hf_ieee80211_eht_160_rx_max_nss_12_13,
61233 {"Rx Max Nss That Supports EHT-MCS 12-13",
61234 "wlan.eht.supported_eht_mcs_bss_set.160.rx_max_nss_supports_eht_mcs_12_13",
61235 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61236
61237 {&hf_ieee80211_eht_160_tx_max_nss_12_13,
61238 {"Tx Max Nss That Supports EHT-MCS 12-13",
61239 "wlan.eht.supported_eht_mcs_bss_set.160.tx_max_nss_supports_eht_mcs_12_13",
61240 FT_UINT24, BASE_DEC, NULL((void*)0), 0xF00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61241
61242 {&hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
61243 {"EHT-MCS Map (BW = 320MHz)",
61244 "wlan.eht.supported_eht_mcs_bss_set.eht_mcs_map_bw_eq_320_mhz",
61245 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61246
61247 {&hf_ieee80211_eht_320_rx_max_nss_0_9,
61248 {"Rx Max Nss That Supports EHT-MCS 0-9",
61249 "wlan.eht.supported_eht_mcs_bss_set.320.rx_max_nss_supports_eht_mcs_0_9",
61250 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61251
61252 {&hf_ieee80211_eht_320_tx_max_nss_0_9,
61253 {"Tx Max Nss That Supports EHT-MCS 0-9",
61254 "wlan.eht.supported_eht_mcs_bss_set.320.tx_max_nss_supports_eht_mcs_0_9",
61255 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61256
61257 {&hf_ieee80211_eht_320_rx_max_nss_10_11,
61258 {"Rx Max Nss That Supports EHT-MCS 10-11",
61259 "wlan.eht.supported_eht_mcs_bss_set.320.rx_max_nss_supports_eht_mcs_10_11",
61260 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61261
61262 {&hf_ieee80211_eht_320_tx_max_nss_10_11,
61263 {"Tx Max Nss That Supports EHT-MCS 10-11",
61264 "wlan.eht.supported_eht_mcs_bss_set.320.tx_max_nss_supports_eht_mcs_10_11",
61265 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61266
61267 {&hf_ieee80211_eht_320_rx_max_nss_12_13,
61268 {"Rx Max Nss That Supports EHT-MCS 12-13",
61269 "wlan.eht.supported_eht_mcs_bss_set.320.rx_max_nss_supports_eht_mcs_12_13",
61270 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61271
61272 {&hf_ieee80211_eht_320_tx_max_nss_12_13,
61273 {"Tx Max Nss That Supports EHT-MCS 12-13",
61274 "wlan.eht.supported_eht_mcs_bss_set.320.tx_max_nss_supports_eht_mcs_12_13",
61275 FT_UINT24, BASE_DEC, NULL((void*)0), 0xF00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61276
61277 {&hf_ieee80211_eht_supported_mcs_nss_bytes,
61278 {"Supported EHT-MCS and NSS Set bytes",
61279 "wlan.eht.supported_eht_mcs_nss_set.bytes",
61280 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61281
61282 {&hf_ieee80211_eht_ppe_thresholds,
61283 {"EHT PPE Thresholds", "wlan.eht.ppe_thresholds",
61284 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61285
61286 {&hf_ieee80211_eht_ttl_mapping_control,
61287 {"TID-To-Link Mapping Control",
61288 "wlan.eht.tid_to_link_mapping.control",
61289 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61290
61291 {&hf_ieee80211_eht_ttl_mapping_direction,
61292 {"Direction", "wlan.eht.tid_to_link_mapping.control.direction",
61293 FT_UINT8, BASE_HEX, VALS(tid_to_link_mapping_dirn_vals)((0 ? (const struct _value_string*)0 : ((tid_to_link_mapping_dirn_vals
))))
, 0x03,
61294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61295
61296 {&hf_ieee80211_eht_ttl_default_link_mapping,
61297 {"Default Link Mapping",
61298 "wlan.eht.tid_to_link_mapping.control.default_link_mapping",
61299 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61300
61301 {&hf_ieee80211_eht_ttl_mapping_switch_time_pres,
61302 {"Mapping Switch Time Present",
61303 "wlan.eht.tid_to_link_mapping.control.mapping_switch_time",
61304 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61305
61306 {&hf_ieee80211_eht_ttl_expected_dura_pres,
61307 {"Expected Duration Present",
61308 "wlan.eht.tid_to_link_mapping.control.expected_duration",
61309 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61310
61311 {&hf_ieee80211_eht_ttl_link_mapping_size,
61312 {"Link Mapping Size",
61313 "wlan.eht.tid_to_link_mapping.control.link_mapping_size",
61314 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) }},
61315
61316 {&hf_ieee80211_eht_ttl_mapping_reserved,
61317 {"Reserved", "wlan.eht.tid_to_link_mapping.control.reserved",
61318 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61319
61320 {&hf_ieee80211_eht_ttl_mapping_presence,
61321 {"Link Mapping Presence Indicator",
61322 "wlan.eht.tid_to_link_mapping.control.link_mapping_presence_indicator",
61323 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61324
61325 {&hf_ieee80211_eht_ttl_mapping_switch_time,
61326 {"Mapping Switch Time", "wlan.eht.tid_to_link_mapping.switch_time",
61327 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61328
61329 {&hf_ieee80211_eht_ttl_mapping_expected_duration,
61330 {"Expected Duration", "wlan.eht.tid_to_link_mapping.expected_duration",
61331 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61332
61333 {&hf_ieee80211_eht_ttl_mapping_tid_0_link_mapping,
61334 {"Link Mapping Of TID 0", "wlan.eht.tid_to_link_mapping.tid_0.link_mapping",
61335 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61336
61337 {&hf_ieee80211_eht_ttl_mapping_tid_1_link_mapping,
61338 {"Link Mapping Of TID 1", "wlan.eht.tid_to_link_mapping.tid_1.link_mapping",
61339 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61340
61341 {&hf_ieee80211_eht_ttl_mapping_tid_2_link_mapping,
61342 {"Link Mapping Of TID 2", "wlan.eht.tid_to_link_mapping.tid_2.link_mapping",
61343 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61344
61345 {&hf_ieee80211_eht_ttl_mapping_tid_3_link_mapping,
61346 {"Link Mapping Of TID 3", "wlan.eht.tid_to_link_mapping.tid_3.link_mapping",
61347 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61348
61349 {&hf_ieee80211_eht_ttl_mapping_tid_4_link_mapping,
61350 {"Link Mapping Of TID 4", "wlan.eht.tid_to_link_mapping.tid_4.link_mapping",
61351 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61352
61353 {&hf_ieee80211_eht_ttl_mapping_tid_5_link_mapping,
61354 {"Link Mapping Of TID 5", "wlan.eht.tid_to_link_mapping.tid_5.link_mapping",
61355 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61356
61357 {&hf_ieee80211_eht_ttl_mapping_tid_6_link_mapping,
61358 {"Link Mapping Of TID 6", "wlan.eht.tid_to_link_mapping.tid_6.link_mapping",
61359 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61360
61361 {&hf_ieee80211_eht_ttl_mapping_tid_7_link_mapping,
61362 {"Link Mapping Of TID 7", "wlan.eht.tid_to_link_mapping.tid_7.link_mapping",
61363 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61364
61365 {&hf_ieee80211_eht_multi_link_traffic_control,
61366 {"Multi-Link Traffic Control",
61367 "wlan.eht.multi_link_traffic.traffic_control",
61368 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61369
61370 {&hf_ieee80211_eht_multi_link_tc_bitmap_size,
61371 {"Bitmap Size", "wlan.eht.multi_link_traffic.traffic_control.bitmap_size",
61372 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) }},
61373
61374 {&hf_ieee80211_eht_multi_link_tc_aid_offset,
61375 {"AID Offset", "wlan.eht.multi_link_traffic.traffic_control.aid_offset",
61376 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7FF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61377
61378 {&hf_ieee80211_eht_multi_link_tc_reserved,
61379 {"Reserved", "wlan.eht.multi_link_traffic.traffic_control.reserved",
61380 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61381
61382 {&hf_ieee80211_eht_multi_link_traffic_indication,
61383 {"Traffic Indication List",
61384 "wlan.eht.multi_link_traffic.traffic_indication_list",
61385 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61386
61387 {&hf_ieee80211_eht_qos_chars_dirn,
61388 {"Direction", "wlan.eht.qos_characteristics.control.direction",
61389 FT_UINT32, BASE_HEX, VALS(qos_chars_dirn_vals)((0 ? (const struct _value_string*)0 : ((qos_chars_dirn_vals)
)))
,
61390 0x00000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61391
61392 {&hf_ieee80211_eht_qos_chars_tid,
61393 {"TID", "wlan.eht.qos_characteristics.control.tid",
61394 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000003C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61395
61396 {&hf_ieee80211_eht_qos_chars_user_prio,
61397 {"User Priority", "wlan.eht.qos_characteristics.control.user_priority",
61398 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61399
61400 {&hf_ieee80211_eht_qos_chars_bitmap,
61401 {"Presence Bitmap of Additional Parameters",
61402 "wlan.eht.qos_characteristics.control.presence_bitmap",
61403 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01FFFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61404
61405 {&hf_ieee80211_eht_qos_chars_linkid,
61406 {"LinkID", "wlan.eht.qos_characteristics.control.linkid",
61407 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1E000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61408
61409 {&hf_ieee80211_eht_qos_chars_resrvd,
61410 {"Reserved", "wlan.eht.qos_characteristics.control.reserved",
61411 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61412
61413 {&hf_ieee80211_eht_qos_chars_min_svc_interval,
61414 {"Minimum Service Interval",
61415 "wlan.eht.qos_characteristics.minimum_service_interval",
61416 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61417
61418 {&hf_ieee80211_eht_qos_chars_max_svc_interval,
61419 {"Maximum Service Interval",
61420 "wlan.eht.qos_characteristics.maximum_service_interval",
61421 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61422
61423 {&hf_ieee80211_eht_qos_chars_min_data_rate,
61424 {"Minimum Data Rate",
61425 "wlan.eht.qos_characteristics.minimal_data_rate",
61426 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61427
61428 {&hf_ieee80211_eht_qos_chars_delay_bound,
61429 {"Delay Bound",
61430 "wlan.eht.qos_characteristics.delay_bound",
61431 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61432
61433 {&hf_ieee80211_eht_qos_chars_max_msdu_size,
61434 {"Maximum MSDU Size", "wlan.eht.qos_characteristics.max_msdu_size",
61435 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61436
61437 {&hf_ieee80211_eht_qos_chars_service_start_time,
61438 {"Service Start Time", "wlan.eht.qos_characteristics.service_start_time",
61439 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61440
61441 {&hf_ieee80211_eht_qos_chars_service_start_time_linkid,
61442 {"Service Start Time LinkID", "wlan.eht.qos_characteristics.service_start_time_linkid",
61443 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61444
61445 {&hf_ieee80211_eht_qos_chars_mean_data_rate,
61446 {"Mean Data Rate", "wlan.eht.qos_characteristics.mean_data_rate",
61447 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61448
61449 {&hf_ieee80211_eht_qos_chars_burst_size,
61450 {"Burst Size", "wlan.eht.qos_characteristics.burst_size",
61451 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61452
61453 {&hf_ieee80211_eht_qos_chars_msdu_lifetime,
61454 {"MSDU Lifetime", "wlan.eht.qos_characteristics.msdu_lifetime",
61455 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61456
61457 {&hf_ieee80211_eht_qos_chars_msdu_delivery_ratio,
61458 {"MSDU Delivery Ratio", "wlan.eht.qos_characteristics.msdu_delivery_ratio",
61459 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61460
61461 {&hf_ieee80211_eht_qos_chars_msdu_count_exponent,
61462 {"MSDU Count Exponent", "wlan.eht.qos_characteristics.msdu_count_exponent",
61463 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61464
61465 {&hf_ieee80211_eht_qos_chars_medium_time,
61466 {"Medium Time", "wlan.eht.qos_characteristics.medium_time",
61467 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61468
61469 {&hf_ieee80211_eht_link_id_bitmap,
61470 {"Link ID Bitmap", "wlan.eht.link_id_bitmap",
61471 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61472
61473 {&hf_ieee80211_eht_aid_bitmap_length,
61474 {"Partial AID Bitmap Length", "wlan.eht.aid_bitmap.length",
61475 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61476
61477 {&hf_ieee80211_eht_aid_bitmap_control,
61478 {"Bitmap Control", "wlan.eht.aid_bitmap.control",
61479 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61480
61481 {&hf_ieee80211_eht_aid_bitmap_control_offset,
61482 {"Bitmap Offset", "wlan.eht.aid_bitmap.control.offset",
61483 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfe, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61484
61485 {&hf_ieee80211_eht_aid_bitmap_control_reserved,
61486 {"Reserved", "wlan.eht.aid_bitmap.control.reserved",
61487 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61488
61489 {&hf_ieee80211_eht_aid_bitmap_partial_aid_bitmap,
61490 {"Partial AID Bitmap", "wlan.eht.aid_bitmap.partial_aid_bitmap",
61491 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61492
61493 {&hf_ieee80211_eht_aid_bitmap_aid,
61494 {"Association ID", "wlan.eht.aid_bitmap.aid",
61495 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61496
61497 {&hf_ieee80211_eht_bw_indi_param,
61498 {"Bandwidth Indication Parameters", "wlan.eht.bw_indication_params",
61499 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61500
61501 {&hf_ieee80211_eht_bw_indi_param_reserved,
61502 {"Reserved", "wlan.eht.bw_indication_params.reserved",
61503 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61504
61505 {&hf_ieee80211_eht_bw_indi_param_disabled_subchan_bitmap,
61506 {"Disabled Subchannel Bitmap Present", "wlan.eht.bw_indication_params.disabled_subchan_bitmap",
61507 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61508
61509 {&hf_ieee80211_eht_bw_indi_param_reserved1,
61510 {"Reserved", "wlan.eht.bw_indication_params.reserved1",
61511 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61512
61513 {&hf_ieee80211_eht_bw_indi_diabled_bitmap,
61514 {"Disabled Subchannel Bitmap",
61515 "wlan.eht.bw_indication.disabled_subchannel_bitmap",
61516 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61517
61518 {&hf_ieee80211_eht_mimo_ctrl_field,
61519 {"EHT MIMO Control", "wlan.eht.mimo.control",
61520 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61521
61522 {&hf_ieee80211_eht_mimo_ctrl_nc_index,
61523 {"Nc Index", "wlan.eht.mimo.control.nc_index",
61524 FT_UINT40, BASE_DEC, NULL((void*)0), 0x000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61525
61526 {&hf_ieee80211_eht_mimo_ctrl_nr_index,
61527 {"Nr Index", "wlan.eht.mimo.control.nr_index",
61528 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61529
61530 {&hf_ieee80211_eht_mimo_ctrl_bw,
61531 {"BW", "wlan.eht.mimo.control.bw",
61532 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(eht_mimo_bw_vals)((0 ? (const struct _val64_string*)0 : ((eht_mimo_bw_vals)))),
61533 0x0000000700, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61534
61535 {&hf_ieee80211_eht_mimo_ctrl_grouping,
61536 {"Grouping", "wlan.eht.mimo.control.grouping",
61537 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(eht_mimo_grouping_vals)((0 ? (const struct _val64_string*)0 : ((eht_mimo_grouping_vals
))))
,
61538 0x0000000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61539
61540 {&hf_ieee80211_eht_mimo_ctrl_feedback_type,
61541 {"Feedback Type", "wlan.eht.mimo.control.feedback_type",
61542 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(eht_feedback_type_vals)((0 ? (const struct _val64_string*)0 : ((eht_feedback_type_vals
))))
,
61543 0x0000003000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61544
61545 {&hf_ieee80211_eht_mimo_ctrl_reserved1,
61546 {"Reserved", "wlan.eht.mimo.control.reserved1",
61547 FT_UINT40, BASE_HEX, NULL((void*)0), 0x000001C000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61548
61549 {&hf_ieee80211_eht_mimo_ctrl_remaining_feedback_segments,
61550 {"Remaining Feedback Segments",
61551 "wlan.eht.mimo.control.remaining_feedback_segments",
61552 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61553
61554 {&hf_ieee80211_eht_mimo_ctrl_first_feedback_segment,
61555 {"First Feedback Segment", "wlan.eht.mimo.control.first_feedback_segment",
61556 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61557
61558 {&hf_ieee80211_eht_mimo_ctrl_partial_bw_info,
61559 {"Partial BW Info", "wlan.eht.mimo.control.partial_bw_info",
61560 FT_UINT40, BASE_HEX, NULL((void*)0), 0x003FE00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61561
61562 {&hf_ieee80211_eht_mimo_ctrl_sounding_dialog_token_number,
61563 {"Sounding Dialog Token Number",
61564 "wlan.eht.mimo.control.sounding_dialog_token_number",
61565 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0FC0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61566
61567 {&hf_ieee80211_eht_mimo_ctrl_codebook_info,
61568 {"Codebook Information", "wlan.eht.mimo.control.codebook_info",
61569 FT_UINT40, BASE_DEC, NULL((void*)0), 0x1000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61570
61571 {&hf_ieee80211_eht_mimo_ctrl_reserved2,
61572 {"Reserved", "wlan.eht.mimo.control.reserved2",
61573 FT_UINT40, BASE_HEX, NULL((void*)0), 0xE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61574
61575 {&hf_ieee80211_eht_compressed_beamforming_report_snr,
61576 {"AgvSNR", "wlan.eht.mimo.beamforming_report.avgsnr",
61577 FT_INT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61578
61579 {&hf_ieee80211_eht_compressed_beamform_scidx,
61580 {"SCIDX", "wlan.eht.mimo.beamforming_report.scidx",
61581 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61582
61583 {&hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
61584 {"Delta SNR", "wlan.eht.mu.exclusive_beamforming_report.delta_snr",
61585 FT_INT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61586
61587 {&hf_ieee80211_eht_group_key_data_length,
61588 {"Key Data Length", "wlan.eht.group_key_data.length",
61589 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61590
61591 {&hf_ieee80211_eht_reconfig_link_id_info,
61592 {"Link ID Info", "wlan.eht.reconfig.link_id_info",
61593 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61594
61595 {&hf_ieee80211_eht_reconfig_link_id,
61596 {"Link ID", "wlan.eht.reconfig.link_id_info.link_id",
61597 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61598
61599 {&hf_ieee80211_eht_reconfig_link_id_reserved,
61600 {"Reserved", "wlan.eht.reconfig.link_id_info.reserved",
61601 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61602
61603 {&hf_ieee80211_eht_reconfig_status_code,
61604 {"Status code", "wlan.eht.reconfig.status_code",
61605 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
61606 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61607
61608 {&hf_ieee80211_wfa_rsn_selection,
61609 {"RSNE Variant", "wlan.wfa_rsn_selection.variant",
61610 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) }},
61611
61612 {&hf_ieee80211_wfa_rsn_or_link_kde_link_id,
61613 {"Link ID", "wlan.wfa_rsn_or_link_kde.link_id",
61614 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61615
61616 {&hf_ieee80211_nonap_sta_regulatory_conn,
61617 {"Regulatory Connectivity", "wlan.nonap_sta_regulatory_connect",
61618 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61619
61620 {&hf_ieee80211_nonap_sta_regu_conn_indoor_ap_valid,
61621 {"Connectivity With Indoor AP Valid", "wlan.nonap_sta_regulatory_connect.indoor_ap_valid",
61622 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61623
61624 {&hf_ieee80211_nonap_sta_regu_conn_indoor_ap,
61625 {"Connectivity With Indoor AP", "wlan.nonap_sta_regulatory_connect.indoor_ap",
61626 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61627
61628 {&hf_ieee80211_nonap_sta_regu_conn_sp_ap_valid,
61629 {"Connectivity With SP AP Valid", "wlan.nonap_sta_regulatory_connect.sp_ap_valid",
61630 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61631
61632 {&hf_ieee80211_nonap_sta_regu_conn_sp_ap,
61633 {"Connectivity With SP AP", "wlan.nonap_sta_regulatory_connect.sp_ap",
61634 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61635
61636 {&hf_ieee80211_nonap_sta_regu_conn_reserved,
61637 {"Reserved", "wlan.nonap_sta_regulatory_connect.reserved",
61638 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61639
61640 {&hf_ieee80211_tag_channel_usage_mode,
61641 {"Usage Mode", "wlan.channel_usage.mode",
61642 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100,
61643 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) }},
61644
61645 {&hf_ieee80211_ff_count,
61646 {"Count", "wlan.fixed.count",
61647 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61648
61649 {&hf_ieee80211_tag_dms_id,
61650 {"DMS ID", "wlan.dms.id",
61651 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61652
61653 {&hf_ieee80211_tag_dms_length,
61654 {"DMS Length", "wlan.dms.length",
61655 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61656
61657 {&hf_ieee80211_tag_dms_req_type,
61658 {"Request Type", "wlan.dms.request_type",
61659 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100,
61660 RVALS(dms_req_type)((0 ? (const struct _range_string*)0 : ((dms_req_type)))), 0,
61661 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61662
61663 {&hf_ieee80211_tag_dms_resp_type,
61664 {"Response Type", "wlan.dms.response_type",
61665 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100,
61666 RVALS(dms_resp_type)((0 ? (const struct _range_string*)0 : ((dms_resp_type)))), 0,
61667 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61668
61669 {&hf_ieee80211_tag_dms_last_seq_control,
61670 {"Last Sequence Control", "wlan.dms.last_sequence_control",
61671 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61672 };
61673
61674 static hf_register_info aggregate_fields[] = {
61675 {&hf_ieee80211_amsdu_subframe,
61676 {"A-MSDU Subframe", "wlan_aggregate.a_msdu.subframe",
61677 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
61678 "Aggregate MAC Service Data Unit (MSDU) Subframe", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61679
61680 {&hf_ieee80211_amsdu_length,
61681 {"A-MSDU Length", "wlan_aggregate.a_msdu.length",
61682 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
61683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61684
61685 {&hf_ieee80211_amsdu_padding,
61686 {"A-MSDU Padding", "wlan_aggregate.a_msdu.padding",
61687 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
61688 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61689 };
61690
61691 static uat_field_t wep_uat_flds[] = {
61692
61693 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)}
61694 "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)}
,
61695 UAT_FLD_CSTRING(uat_wep_key_records, string, "Key",{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>\n"
"tk:<hexadecimal key>\n" "msk:<hexadecimal key>\n"
,((void*)0)}
61696 "wep:<wep hexadecimal key>\n"{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>\n"
"tk:<hexadecimal key>\n" "msk:<hexadecimal key>\n"
,((void*)0)}
61697 "wpa-pwd:<passphrase>[:<ssid>]\n"{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>\n"
"tk:<hexadecimal key>\n" "msk:<hexadecimal key>\n"
,((void*)0)}
61698 "wpa-psk:<wpa hexadecimal key>\n"{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>\n"
"tk:<hexadecimal key>\n" "msk:<hexadecimal key>\n"
,((void*)0)}
61699 "tk:<hexadecimal key>\n"{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>\n"
"tk:<hexadecimal key>\n" "msk:<hexadecimal key>\n"
,((void*)0)}
61700 "msk:<hexadecimal key>\n"){"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>\n"
"tk:<hexadecimal key>\n" "msk:<hexadecimal key>\n"
,((void*)0)}
,
61701 UAT_END_FIELDS{((void*)0),((void*)0),PT_TXTMOD_NONE,{0,0,0},{0,0,0},0,0,((void
*)0)}
61702 };
61703
61704 static int *ett[] = {
61705 &ett_80211,
61706 &ett_proto_flags,
61707 &ett_cap_tree,
61708 &ett_fc_tree,
61709 &ett_cntrl_wrapper_fc,
61710 &ett_cntrl_wrapper_payload,
61711 &ett_fragments,
61712 &ett_fragment,
61713 &ett_block_ack,
61714 &ett_block_ack_tid,
61715 &ett_block_ack_request_control,
61716 &ett_block_ack_bitmap,
61717 &ett_block_ack_request_multi_sta_aid_tid,
61718 &ett_multi_sta_block_ack,
61719 &ett_ath_cap_tree,
61720 &ett_extreme_mesh_services_tree,
61721 &ett_addr,
61722
61723 &ett_80211_mgt,
61724 &ett_fixed_parameters,
61725 &ett_tagged_parameters,
61726 &ett_tag_bmapctl_tree,
61727 &ett_s1g_pvb_tree,
61728 &ett_s1g_pvb_eb_tree,
61729 &ett_s1g_pvb_block_control_byte,
61730 &ett_s1g_pvb_block_bitmap_tree,
61731 &ett_s1g_pvb_subblock_tree,
61732 &ett_s1g_pvb_olb_tree,
61733 &ett_s1g_pvb_ade_control,
61734 &ett_s1g_pvb_ade_tree,
61735 &ett_s1g_pvb_olb_subblock,
61736 &ett_tag_country_fnm_tree,
61737 &ett_tag_country_rcc_tree,
61738 &ett_qos_parameters,
61739 &ett_qos_ps_buf_state,
61740 &ett_wep_parameters,
61741 &ett_msh_control,
61742 &ett_hwmp_targ_flags_tree,
61743 &ett_mesh_chswitch_flag_tree,
61744 &ett_mesh_config_cap_tree,
61745 &ett_mesh_formation_info_tree,
61746 &ett_bcn_timing_rctrl_tree,
61747 &ett_bcn_timing_info_tree,
61748 &ett_gann_flags_tree,
61749 &ett_pxu_proxy_info_tree,
61750 &ett_pxu_proxy_info_flags_tree,
61751
61752 &ett_rsn_gcs_tree,
61753 &ett_rsn_pcs_tree,
61754 &ett_rsn_sub_pcs_tree,
61755 &ett_rsn_akms_tree,
61756 &ett_rsn_sub_akms_tree,
61757 &ett_rsn_cap_tree,
61758 &ett_rsn_pmkid_tree,
61759 &ett_rsn_gmcs_tree,
61760
61761 &ett_kde_mlo_link_info,
61762
61763 &ett_wpa_mcs_tree,
61764 &ett_wpa_ucs_tree,
61765 &ett_wpa_sub_ucs_tree,
61766 &ett_wpa_akms_tree,
61767 &ett_wpa_sub_akms_tree,
61768 &ett_wme_ac,
61769 &ett_wme_aci_aifsn,
61770 &ett_wme_ecw,
61771 &ett_wme_qos_info,
61772
61773 &ett_update_edca_info,
61774
61775 &ett_ht_cap_tree,
61776 &ett_ampduparam_tree,
61777 &ett_mcsset_tree,
61778 &ett_mcsbit_tree,
61779 &ett_htex_cap_tree,
61780 &ett_txbf_tree,
61781 &ett_antsel_tree,
61782 &ett_hta_cap_tree,
61783 &ett_hta_cap1_tree,
61784 &ett_hta_cap2_tree,
61785
61786 &ett_s1g_ndp,
61787 &ett_s1g_ndp_ack,
61788 &ett_s1g_ndp_cts,
61789 &ett_s1g_ndp_cf_end,
61790 &ett_s1g_ndp_ps_poll,
61791 &ett_s1g_ndp_ps_poll_ack,
61792 &ett_s1g_ndp_block_ack,
61793 &ett_s1g_ndp_beamforming_report_poll,
61794 &ett_s1g_ndp_paging,
61795 &ett_s1g_ndp_probe,
61796 &ett_pv1_sid,
61797 &ett_pv1_sid_field,
61798 &ett_pv1_seq_control,
61799 &ett_ieee80211_s1g_capabilities_info,
61800 &ett_ieee80211_s1g_capabilities,
61801 &ett_s1g_cap_byte1,
61802 &ett_s1g_cap_byte2,
61803 &ett_s1g_cap_byte3,
61804 &ett_s1g_cap_byte4,
61805 &ett_s1g_cap_byte5,
61806 &ett_s1g_cap_byte6,
61807 &ett_s1g_cap_byte7,
61808 &ett_s1g_cap_byte8,
61809 &ett_s1g_cap_byte9,
61810 &ett_s1g_cap_byte10,
61811 &ett_ieee80211_s1g_sup_mcs_and_nss_set,
61812 &ett_s1g_mcs_and_mcs_set,
61813 &ett_s1g_operation_info,
61814 &ett_s1g_channel_width,
61815 &ett_s1g_subchannel_selective_transmission,
61816 &ett_s1g_raw_assignment,
61817 &ett_s1g_raw_assn_tree,
61818 &ett_s1g_raw_control,
61819 &ett_s1g_raw_slot_def,
61820 &ett_s1g_raw_group_subfield,
61821 &ett_s1g_raw_channel_indication,
61822 &ett_s1g_page_slice_control,
61823 &ett_s1g_aid_request_mode,
61824 &ett_s1g_aid_characteristic,
61825 &ett_s1g_sector_operation,
61826 &ett_tack_info,
61827 &ett_ieee80211_s1g_auth_control,
61828 &ett_s1g_relay_control,
61829 &ett_s1g_relay_function,
61830 &ett_ieee80211_s1g_addr_list,
61831 &ett_ieee80211_s1g_reach_addr,
61832 &ett_s1g_relay_discovery_control,
61833 &ett_ieee80211_s1g_aid_entry,
61834 &ett_s1g_probe_resp_subfield_0,
61835 &ett_s1g_header_comp_control,
61836 &ett_pv1_mgmt_action,
61837 &ett_pv1_mgmt_action_no_ack,
61838 &ett_pv1_cntl_stack,
61839 &ett_pv1_cntl_bat,
61840
61841 &ett_htc_tree,
61842 &ett_htc_he_a_control,
61843 &ett_mfb_subtree,
61844 &ett_lac_subtree,
61845 &ett_ieee80211_a_control_padding,
61846 &ett_ieee80211_a_control_ones,
61847 &ett_ieee80211_triggered_response_schedule,
61848 &ett_ieee80211_control_om,
61849 &ett_ieee80211_hla_control,
61850 &ett_ieee80211_buffer_status_report,
61851 &ett_ieee80211_control_uph,
61852 &ett_ieee80211_buffer_control_bqr,
61853 &ett_ieee80211_control_cci,
61854 &ett_ieee80211_control_eht_om,
61855 &ett_ieee80211_control_srs,
61856 &ett_ieee80211_control_aar,
61857
61858 &ett_vht_cap_tree,
61859 &ett_vht_mcsset_tree,
61860 &ett_vht_rx_mcsbit_tree,
61861 &ett_vht_tx_mcsbit_tree,
61862 &ett_vht_basic_mcsbit_tree,
61863 &ett_vht_op_tree,
61864 &ett_vht_tpe_info_tree,
61865 &ett_tpe_psd,
61866
61867 &ett_vht_ranging_annc,
61868
61869 &ett_ff_he_action,
61870 &ett_ff_protected_he_action,
61871 &ett_ff_protected_eht_action,
61872 &ett_ff_he_mimo_control,
61873 &ett_ff_he_mimo_beamforming_report_snr,
61874 &ett_ff_he_mimo_feedback_matrices,
61875
61876 &ett_ff_vhtmimo_cntrl,
61877 &ett_ff_vhtmimo_beamforming_report,
61878 &ett_ff_vhtmimo_beamforming_report_snr,
61879 &ett_ff_vhtmimo_beamforming_angle,
61880 &ett_ff_vhtmimo_beamforming_report_feedback_matrices,
61881 &ett_ff_vhtmu_exclusive_beamforming_report_matrices,
61882
61883 &ett_vht_grpidmgmt,
61884 &ett_vht_msa,
61885 &ett_vht_upa,
61886
61887 &ett_ht_operation_info_delimiter1_tree,
61888 &ett_ht_operation_info_delimiter2_tree,
61889 &ett_ht_operation_info_delimiter3_tree,
61890
61891 &ett_ff_ftm_param_delim1,
61892 &ett_ff_ftm_param_delim2,
61893 &ett_ff_ftm_param_delim3,
61894 &ett_ff_ftm_tod_err1,
61895 &ett_ff_ftm_toa_err1,
61896 &ett_tag_ranging,
61897 &ett_tag_ranging_ntb,
61898 &ett_tag_ranging_secure_he_ltf,
61899
61900 &ett_ranging_subelement_tree,
61901
61902 &ett_tag_direct_meas_results,
61903
61904 &ett_rsta_avail_header,
61905 &ett_rsta_avail_tree,
61906 &ett_rsta_avail_subfield,
61907
61908 &ett_pasn_parameters,
61909 &ett_pasn_comeback_tree,
61910 &ett_pasn_auth_frame,
61911
61912 /* 802.11be tree */
61913 &ett_eht_multi_link_control,
61914 &ett_eht_multi_link_common_info,
61915 &ett_eht_multi_link_common_info_link_id,
61916 &ett_eht_multi_link_common_info_medium_sync,
61917 &ett_eht_multi_link_common_info_eml_capa,
61918 &ett_eht_multi_link_common_info_mld_capa,
61919 &ett_eht_multi_link_common_info_ext_mld_capa,
61920 &ett_eht_multi_link_per_sta,
61921 &ett_eht_multi_link_subelt,
61922 &ett_eht_multi_link_sta_control,
61923 &ett_eht_multi_link_per_sta_info,
61924 &ett_eht_multi_link_sta_dtim,
61925 &ett_eht_multi_link_reconf_oper_param,
61926 &ett_eht_multi_link_reconfig_presence_indi,
61927 &ett_eht_multi_link_reconfig_operation_para_info,
61928 &ett_eht_operation_params,
61929 &ett_eht_operation_control,
61930 &ett_eht_mac_capa,
61931 &ett_eht_phy_capa,
61932 &ett_eht_phy_bits_0_15,
61933 &ett_eht_phy_bits_16_31,
61934 &ett_eht_phy_bits_32_39,
61935 &ett_eht_phy_bits_40_63,
61936 &ett_eht_phy_bits_64_71,
61937 &ett_eht_phy_mcs_nss,
61938 &ett_eht_phy_mcs_nss_set,
61939 &ett_eht_ttl_mapping,
61940 &ett_eht_ttl_mapping_link_mapping,
61941 &ett_eht_eht_multi_link_tc,
61942 &ett_eht_qos_characteristics,
61943 &ett_eht_aid_bmapctl_tree,
61944 &ett_eht_bw_indication_param,
61945 &ett_eht_eml_control,
61946 &ett_eht_eml_control_link_map,
61947 &ett_eht_eml_control_mcs_map_count,
61948 &ett_eht_emlsr_para_update,
61949 &ett_eht_mimo_ctrl,
61950 &ett_eht_beamforming_rpt_ru_index,
61951 &ett_eht_beamforming_feedback_tree,
61952 &ett_ff_eht_mimo_beamforming_report_snr,
61953 &ett_ff_eht_mimo_mu_exclusive_report,
61954 &ett_eht_mu_exclusive_beamforming_rpt_ru_index,
61955 &ett_eht_reconfig_status_list,
61956 &ett_eht_group_key_data,
61957
61958 &ett_tag_measure_request_mode_tree,
61959 &ett_tag_measure_request_type_tree,
61960 &ett_tag_measure_request_sub_element_tree,
61961 &ett_tag_measure_report_mode_tree,
61962 &ett_tag_measure_report_type_tree,
61963 &ett_tag_measure_report_basic_map_tree,
61964 &ett_tag_measure_report_rpi_tree,
61965 &ett_tag_measure_report_frame_tree,
61966 &ett_tag_measure_report_sub_element_tree,
61967 &ett_tag_measure_reported_frame_tree,
61968 &ett_tag_measure_reported_frame_frag_id_tree,
61969 &ett_tag_measure_reported_lci_z_tree,
61970 &ett_tag_measure_reported_lci_urp_tree,
61971 &ett_tag_bss_bitmask_tree,
61972 &ett_tag_dfs_map_tree,
61973 &ett_tag_dfs_map_flags_tree,
61974 &ett_tag_erp_info_tree,
61975 &ett_tag_ex_cap1,
61976 &ett_tag_ex_cap2,
61977 &ett_tag_ex_cap3,
61978 &ett_tag_ex_cap4,
61979 &ett_tag_ex_cap5,
61980 &ett_tag_ex_cap6,
61981 &ett_tag_ex_cap7,
61982 &ett_tag_ex_cap8,
61983 &ett_tag_ex_cap89,
61984 &ett_tag_ex_cap10,
61985 &ett_tag_ex_cap11,
61986 &ett_tag_ex_cap12,
61987 &ett_tag_ex_cap13,
61988 &ett_tag_ex_cap14,
61989
61990 &ett_tag_rm_cap1,
61991 &ett_tag_rm_cap2,
61992 &ett_tag_rm_cap3,
61993 &ett_tag_rm_cap4,
61994 &ett_tag_rm_cap5,
61995
61996 &ett_tag_rsnx_octet1,
61997 &ett_tag_rsnx_octet2,
61998
61999 &ett_tag_multiple_bssid_subelem_tree,
62000
62001 &ett_tag_20_40_bc,
62002
62003 &ett_tag_intolerant_tree,
62004
62005 &ett_tag_tclas_mask_tree,
62006
62007 &ett_tag_supported_channels,
62008
62009 &ett_tag_neighbor_report_bssid_info_tree,
62010 &ett_tag_neighbor_report_bssid_info_capability_tree,
62011 &ett_tag_neighbor_report_subelement_tree,
62012 &ett_tag_neighbor_report_sub_tag_tree,
62013
62014 &ett_tag_wapi_param_set_akm_tree,
62015 &ett_tag_wapi_param_set_ucast_tree,
62016 &ett_tag_wapi_param_set_mcast_tree,
62017 &ett_tag_wapi_param_set_preauth_tree,
62018
62019 &ett_max_idle_period_options,
62020
62021 &ett_tag_time_adv_tree,
62022
62023 &ett_tag_he_6ghz_cap_inf_tree,
62024
62025 &ett_ff_ba_param_tree,
62026 &ett_ff_ba_ssc_tree,
62027 &ett_ff_delba_param_tree,
62028 &ett_ff_qos_info,
62029 &ett_ff_psmp_param_set,
62030 &ett_ff_mimo_cntrl,
62031 &ett_ff_ant_sel,
62032 &ett_mimo_report,
62033 &ett_ff_sm_pwr_save,
62034 &ett_ff_chan_switch_announce,
62035 &ett_ff_ht_info,
62036 &ett_ff_psmp_sta_info,
62037
62038 &ett_tpc,
62039
62040 &ett_msdu_aggregation_parent_tree,
62041 &ett_msdu_aggregation_subframe_tree,
62042
62043 &ett_80211_mgt_ie,
62044 &ett_tsinfo_tree,
62045 &ett_sched_tree,
62046
62047 &ett_fcs,
62048
62049 &ett_hs20_osu_providers_list,
62050 &ett_hs20_osu_provider_tree,
62051 &ett_hs20_friendly_names_list,
62052 &ett_hs20_friendly_name_tree,
62053 &ett_hs20_osu_provider_method_list,
62054 &ett_osu_icons_avail_list,
62055 &ett_hs20_osu_icon_tree,
62056 &ett_hs20_osu_service_desc_list,
62057 &ett_hs20_osu_service_desc_tree,
62058 &ett_hs20_venue_url,
62059 &ett_hs20_advice_of_charge,
62060 &ett_hs20_aoc_plan,
62061
62062 &ett_hs20_ofn_tree,
62063
62064 &ett_adv_proto,
62065 &ett_adv_proto_tuple,
62066 &ett_gas_query,
62067 &ett_gas_anqp,
62068 &ett_nai_realm,
62069 &ett_nai_realm_eap,
62070 &ett_tag_ric_data_desc_ie,
62071 &ett_anqp_vendor_capab,
62072
62073 &ett_osen_group_data_cipher_suite,
62074 &ett_osen_pairwise_cipher_suites,
62075 &ett_osen_pairwise_cipher_suite,
62076 &ett_osen_akm_cipher_suites,
62077 &ett_osen_akm_cipher_suite,
62078 &ett_osen_rsn_cap_tree,
62079 &ett_osen_pmkid_list,
62080 &ett_osen_pmkid_tree,
62081 &ett_osen_group_management_cipher_suite,
62082
62083 &ett_hs20_cc_proto_port_tuple,
62084
62085 &ett_tag_no_bssid_capability_dmg_bss_control_tree,
62086 &ett_ssid_list,
62087
62088 &ett_sgdsn,
62089 &ett_nintendo,
62090
62091 &ett_routerboard,
62092
62093 &ett_meru,
62094
62095 &ett_wisun_gtkl,
62096 &ett_wisun_lgtkl,
62097
62098 &ett_qos_map_set_exception,
62099 &ett_qos_map_set_range,
62100
62101 &ett_wnm_notif_subelt,
62102
62103 &ett_tag_mobility_domain_ft_capab_tree,
62104
62105 &ett_tag_ft_mic_control_tree,
62106 &ett_tag_ft_subelem_tree,
62107
62108 /* 802.11ad trees */
62109 &ett_dynamic_alloc_tree,
62110 &ett_ssw_tree,
62111 &ett_bf_tree,
62112 &ett_sswf_tree,
62113 &ett_brp_tree,
62114 &ett_blm_tree,
62115 &ett_bic_tree,
62116 &ett_dmg_params_tree,
62117 &ett_cc_tree,
62118 &ett_rcsi_tree,
62119 &ett_80211_ext,
62120 &ett_allocation_tree,
62121 &ett_sta_info,
62122
62123 &ett_ieee80211_esp,
62124 &ett_ieee80211_wfa_60g_attr,
62125 &ett_ieee80211_wfa_transition_disable_tree,
62126 &ett_gas_resp_fragment,
62127 &ett_gas_resp_fragments,
62128
62129 &ett_mbo_oce_attr,
62130 &ett_mbo_ap_cap,
62131 &ett_oce_cap,
62132 &ett_oce_metrics_cap,
62133
62134 /* 802.11 ah trees */
62135 &ett_s1g_sync_control_tree,
62136 &ett_s1g_twt_information_control,
62137 &ett_s1g_sector_id_index,
62138 &ett_twt_tear_down_tree,
62139 &ett_twt_control_field_tree,
62140 &ett_twt_req_type_tree,
62141 &ett_twt_ndp_paging_field_tree,
62142 &ett_twt_broadcast_info_tree,
62143 &ett_twt_traffic_info_tree,
62144 &ett_twt_traffic_info_control_tree,
62145
62146 /* 802.11ax trees */
62147 &ett_he_mac_capabilities,
62148 &ett_he_phy_capabilities,
62149 &ett_he_phy_cap_first_byte,
62150 &ett_he_phy_cap_chan_width_set,
62151 &ett_he_phy_cap_b8_to_b23,
62152 &ett_he_phy_cap_b24_to_b39,
62153 &ett_he_phy_cap_b40_to_b55,
62154 &ett_he_phy_cap_b56_to_b71,
62155 &ett_he_phy_cap_b72_to_b87,
62156 &ett_he_mcs_and_nss_set,
62157 &ett_he_rx_tx_he_mcs_map_lte_80,
62158 &ett_he_rx_mcs_map_lte_80,
62159 &ett_he_tx_mcs_map_lte_80,
62160 &ett_he_rx_tx_he_mcs_map_160,
62161 &ett_he_rx_mcs_map_160,
62162 &ett_he_tx_mcs_map_160,
62163 &ett_he_rx_tx_he_mcs_map_80_80,
62164 &ett_he_rx_mcs_map_80_80,
62165 &ett_he_tx_mcs_map_80_80,
62166 &ett_he_ppe_threshold,
62167 &ett_he_ppe_nss,
62168 &ett_he_ppe_ru_alloc,
62169 &ett_he_operation_params,
62170 &ett_he_bss_color_information,
62171 &ett_he_oper_basic_mcs,
62172 &ett_he_operation_vht_op_info,
62173 &ett_he_operation_6ghz,
62174 &ett_he_operation_6ghz_control,
62175 &ett_he_mu_edca_param,
62176 &ett_he_uora_tree,
62177 &ett_he_aic_aifsn,
62178 &ett_he_spatial_reuse_control,
62179 &ett_he_ess_report_info_field,
62180 &ett_he_bss_new_color_info,
62181 &ett_he_trigger_common_info,
62182 &ett_he_trigger_ranging,
62183 &ett_he_trigger_ranging_poll,
62184 &ett_he_trigger_packet_extension,
62185 &ett_he_trigger_base_common_info,
62186 &ett_he_trigger_bar_ctrl,
62187 &ett_he_trigger_bar_info,
62188 &ett_he_trigger_user_info,
62189 &ett_he_trigger_base_user_info,
62190 &ett_he_trigger_dep_basic_user_info,
62191 &ett_he_trigger_dep_nfrp_user_info,
62192 &ett_ndp_annc,
62193 &ett_ndp_vht_annc_sta_list,
62194 &ett_ndp_vht_annc_sta_info_tree,
62195 &ett_ndp_he_annc_sta_list,
62196 &ett_ndp_he_annc_sta_item,
62197 &ett_ndp_he_annc_sta_info,
62198 &ett_ndp_eht_annc_sta_list,
62199 &ett_ndp_eht_annc_sta_info,
62200 &ett_ndp_ranging_annc_sta_list,
62201 &ett_ndp_ranging_annc_sta_info,
62202 &ett_non_inheritance_element_id_list,
62203 &ett_non_inheritance_element_id_ext_list,
62204 &ett_mscs_user_prio,
62205 &ett_ieee80211_user_prio_bitmap,
62206 &ett_ieee80211_intra_access_prio,
62207
62208 &ett_ieee80211_3gpp_plmn,
62209
62210 /* 802.11ai trees */
62211 &ett_fils_indication_realm_list,
62212 &ett_fils_indication_public_key_list,
62213
62214 &ett_neighbor_ap_info,
62215 &ett_tbtt_infos,
62216 &ett_rnr_bss_params_tree,
62217 &ett_rnr_mld_params_tree,
62218
62219 &ett_qos_mgmt_dscp_policy_capabilities,
62220 &ett_qos_mgmt_pol_capa,
62221 &ett_qos_mgmt_attributes,
62222 &ett_qos_mgmt_dscp_policy,
62223 &ett_qos_mgmt_tclas,
62224 &ett_qos_mgmt_domain_name,
62225 &ett_qos_mgmt_unknown_attribute,
62226 &ett_dscp_policy_status_list,
62227 &ett_pol_rqst_cont_tree,
62228 &ett_pol_resp_cont_tree,
62229
62230 &ett_ff_fils_discovery_frame_control,
62231 &ett_ff_fils_discovery_capability,
62232
62233 &ett_ff_fils_req_params,
62234 &ett_ff_fils_req_params_fils_criteria,
62235
62236 &ett_nonap_sta_regulatory_conn,
62237
62238 &ett_chan_usage,
62239
62240 &ett_wfa_capa,
62241 &ett_wfa_capa_attributes,
62242 &ett_wfa_capa_supp_gene,
62243 &ett_wfa_capa_cert_gene,
62244 };
62245
62246 static ei_register_info ei[] = {
62247 { &ei_ieee80211_bad_length,
62248 { "ieee80211.bad_length", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62249 "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)}}
}},
62250
62251 { &ei_ieee80211_inv_val,
62252 { "ieee80211.invalid_value", PI_MALFORMED0x07000000, PI_WARN0x00600000,
62253 "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)}}
}},
62254
62255 { &ei_ieee80211_tag_number,
62256 { "wlan.tag.number.unexpected_ie", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62257 "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)}}
}},
62258
62259 { &ei_ieee80211_tag_length,
62260 { "wlan.tag.length.bad", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62261 "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)}}
}},
62262
62263 { &ei_ieee80211_extra_data,
62264 { "ieee80211.extra_data", PI_MALFORMED0x07000000, PI_WARN0x00600000,
62265 "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)}}
}},
62266
62267 { &ei_ieee80211_ff_anqp_capability,
62268 { "wlan.fixed.anqp.capability.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62269 "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)}}
}},
62270
62271 { &ei_ieee80211_ff_anqp_venue_length,
62272 { "wlan.fixed.anqp.venue.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62273 "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)}}
}},
62274
62275 { &ei_ieee80211_ff_anqp_roaming_consortium_oi_len,
62276 { "wlan.fixed.anqp.roaming_consortium.oi_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62277 "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)}}
}},
62278
62279 { &ei_ieee80211_ff_anqp_nai_field_len,
62280 { "wlan.fixed.anqp.nai_realm_list.field_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62281 "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)}}
}},
62282
62283 { &ei_ieee80211_ff_anqp_nai_realm_eap_len,
62284 { "wlan.fixed.anqp_nai_realm_list.eap_method_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62285 "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)}}
}},
62286
62287 { &ei_hs20_anqp_ofn_length,
62288 { "wlan.hs20.anqp.ofn.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62289 "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)}}
}},
62290
62291 { &ei_hs20_anqp_nai_hrq_length,
62292 { "wlan.hs20.anqp.nai_hrq.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62293 "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)}}
}},
62294
62295 { &ei_ieee80211_ff_anqp_info_length,
62296 { "wlan.fixed.anqp.info_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62297 "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)}}
}},
62298
62299 { &ei_ieee80211_not_enough_room_for_anqp_header,
62300 { "wlan.fixed.query_length_invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62301 "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)}}
}},
62302
62303 { &ei_ieee80211_ff_query_request_length,
62304 { "wlan.fixed.query_request_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62305 "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)}}
}},
62306
62307 { &ei_ieee80211_ff_query_response_length,
62308 { "wlan.fixed.query_response_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62309 "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)}}
}},
62310
62311 { &ei_ieee80211_tag_wnm_sleep_mode_no_key_data,
62312 { "wlan.wnm_sleep_mode.no_key_data", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62313 "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)}}
}},
62314
62315 { &ei_ieee80211_tdls_setup_response_malformed,
62316 { "wlan.tdls_setup_response_malformed", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62317 "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)}}
}},
62318
62319 { &ei_ieee80211_tdls_setup_confirm_malformed,
62320 { "wlan.tdls_setup_confirm_malformed", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62321 "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)}}
}},
62322
62323 { &ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype,
62324 { "wlan.wfa.ie.wme.qos_info.bad_ftype", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62325 "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)}}
}},
62326
62327 { &ei_ieee80211_qos_info_bad_ftype,
62328 { "wlan.qos_info.bad_ftype", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62329 "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)}}
}},
62330
62331 { &ei_ieee80211_qos_bad_aifsn,
62332 { "wlan.qos_info.bad_aifsn", PI_MALFORMED0x07000000, PI_WARN0x00600000,
62333 "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)}}
}},
62334
62335 { &ei_ieee80211_rsn_pcs_count,
62336 { "wlan.rsn.pcs.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62337 "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)}}
}},
62338
62339 { &ei_ieee80211_rsn_pmkid_count,
62340 { "wlan.rsn.akms.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62341 "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)}}
}},
62342
62343 { &ei_ieee80211_pmkid_count_too_large,
62344 { "wlan.rsn.pmkid.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62345 "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)}}
}},
62346
62347 { &ei_ieee80211_vht_tpe_pwr_info_count,
62348 { "wlan.vht.tpe.pwr_info.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62349 "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)}}
}},
62350
62351 { &ei_ieee80211_vht_tpe_pwr_info_unit,
62352 { "wlan.vht.tpe.pwr_info.unit.unknown", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62353 "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)}}
}},
62354
62355 { &ei_ieee80211_missing_data,
62356 { "ieee80211.missing_data", PI_MALFORMED0x07000000, PI_WARN0x00600000,
62357 "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)}}
}},
62358
62359 { &ei_ieee80211_fc_retry,
62360 { "wlan.fc.retry.expert", PI_SEQUENCE0x02000000, PI_NOTE0x00400000,
62361 "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)}}
}},
62362
62363 { &ei_ieee80211_tag_measure_request_unknown,
62364 { "wlan.measure.req.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62365 "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)}}
}},
62366
62367 { &ei_ieee80211_tag_measure_request_beacon_unknown,
62368 { "wlan.measure.req.beacon.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62369 "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)}}
}},
62370
62371 { &ei_ieee80211_tag_measure_report_unknown,
62372 { "wlan.measure.rep.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62373 "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)}}
}},
62374
62375 { &ei_ieee80211_tag_measure_report_beacon_unknown,
62376 { "wlan.measure.rep.beacon.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62377 "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)}}
}},
62378
62379 { &ei_ieee80211_tag_measure_report_lci_unknown,
62380 { "wlan.measure.rep.lci.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62381 "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)}}
}},
62382
62383 { &ei_ieee80211_tag_data,
62384 { "wlan.tag.data.undecoded", PI_UNDECODED0x05000000, PI_NOTE0x00400000,
62385 "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)}}
}},
62386
62387 { &ei_ieee80211_dmg_subtype,
62388 { "wlan.dmg_subtype.bad", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62389 "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)}}
}},
62390
62391 { &ei_ieee80211_wfa_60g_attr_len_invalid,
62392 { "wlan.60g.attr.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62393 "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)}}
}},
62394
62395 { &ei_ieee80211_vht_action,
62396 { "wlan.vht.action.undecoded", PI_UNDECODED0x05000000, PI_NOTE0x00400000,
62397 "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)}}
}},
62398
62399 { &ei_ieee80211_mesh_peering_unexpected,
62400 { "wlan.peering.unexpected", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62401 "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)}}
}},
62402
62403 { &ei_ieee80211_wfa_60g_unknown_attribute,
62404 { "wlan.attr.unknown", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62405 "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)}}
}},
62406
62407 { &ei_ieee80211_fcs,
62408 { "wlan.fcs.bad_checksum", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62409 "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)}}
}},
62410
62411 { &ei_ieee80211_mismatched_akm_suite,
62412 { "wlan.rsn.akms.mismatched", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62413 "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)}}
}},
62414
62415 { &ei_ieee80211_vs_routerboard_unexpected_len,
62416 { "wlan.vs.routerboard.unexpected_len", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
62417 "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)}}
}},
62418
62419 { &ei_ieee80211_vs_sgdsn_serialnumber_invalid_len_val,
62420 { "wlan.vs.sgdsn.tag.serialnumber.invalid_len_val", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62421 "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)}}
}},
62422
62423 { &ei_ieee80211_vs_sgdsn_serialnumber_unexpected_len_val,
62424 { "wlan.vs.sgdsn.tag.serialnumber.unexpected_len_val", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
62425 "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)}}
}},
62426
62427 { &ei_ieee80211_twt_tear_down_bad_neg_type,
62428 { "wlan.twt.tear_down_bad_neg_type", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62429 "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)}}
}},
62430
62431 { &ei_ieee80211_twt_setup_bad_command,
62432 { "wlan.twt.setup_bad_command", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62433 "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)}}
}},
62434
62435 { &ei_ieee80211_twt_bcast_info_no_term,
62436 { "wlan.twt.incorrect_length", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62437 "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)}}
}},
62438
62439 { &ei_ieee80211_invalid_control_word,
62440 { "wlan.htc.he.a_control.invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62441 "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)}}
}},
62442
62443 { &ei_ieee80211_invalid_control_id,
62444 { "wlan.htc.he.a_control.ctrl_id.invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62445 "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)}}
}},
62446
62447 { &ei_ieee80211_invalid_control_length,
62448 { "wlan.htc.he.a_control.ctrl_length.invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62449 "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)}}
}},
62450
62451 { &ei_ieee80211_htc_in_dmg_packet,
62452 { "wlan.htc_in_dmg_packet", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62453 "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)}}
}},
62454
62455 { &ei_ieee80211_eht_invalid_subelement,
62456 { "wlan.eht.invalid_subelement", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62457 "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)}}
}},
62458
62459 { &ei_ieee80211_eht_invalid_action,
62460 { "wlan.eht.invalid_action", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62461 "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)}}
}},
62462
62463 { &ei_ieee80211_eht_invalid_multi_link,
62464 { "wlan.eht.invalid_multi_link", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62465 "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)}}
}},
62466
62467 {&ei_ieee80211_eht_invalid_nc_nr,
62468 { "wlan.eht.invalid_nc_nr", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
62469 "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)}}
}},
62470 };
62471
62472 expert_module_t *expert_ieee80211;
62473
62474 module_t *wlan_module;
62475
62476 memset(&wlan_stats, 0, sizeof wlan_stats);
62477
62478 proto_aggregate = proto_register_protocol("IEEE 802.11 wireless LAN aggregate frame",
62479 "IEEE 802.11 Aggregate Data", "wlan_aggregate");
62480 proto_register_field_array(proto_aggregate, aggregate_fields, array_length(aggregate_fields)(sizeof (aggregate_fields) / sizeof (aggregate_fields)[0]));
62481
62482 proto_wlan = proto_register_protocol("IEEE 802.11 wireless LAN", "IEEE 802.11", "wlan");
62483
62484 heur_subdissector_list = register_heur_dissector_list_with_description("wlan_data", "IEEE 802.11 WLAN v0 data", proto_wlan);
62485
62486 /* Created to remove Decode As confusion */
62487 proto_centrino = proto_register_protocol("IEEE 802.11 wireless LAN (Centrino)", "IEEE 802.11 (Centrino)", "wlan_centrino");
62488 proto_register_field_array(proto_wlan, hf, array_length(hf)(sizeof (hf) / sizeof (hf)[0]));
62489 centrino_handle = register_dissector("wlan_centrino", dissect_ieee80211_centrino, proto_centrino );
62490
62491 proto_wlan_ext = proto_register_protocol("IEEE 802.11 wireless LAN extension frame",
62492 "IEEE 802.11 EXT", "wlan_ext");
62493
62494 proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
62495
62496 expert_ieee80211 = expert_register_protocol(proto_wlan);
62497 expert_register_field_array(expert_ieee80211, ei, array_length(ei)(sizeof (ei) / sizeof (ei)[0]));
62498
62499 /*
62500 * Create the hash table we will use for holding STA properties that
62501 * track newer protocol variants like S1G, DMG, etc. Use the existing
62502 * retransmit hash and equal functions.
62503 */
62504 sta_prop_hash = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(),
62505 sta_prop_hash_fn, sta_prop_equal_fn);
62506
62507 ieee80211_handle = register_dissector("wlan", dissect_ieee80211, proto_wlan);
62508 register_dissector("wlan_withfcs", dissect_ieee80211_withfcs, proto_wlan);
62509 wlan_withoutfcs_handle = register_dissector("wlan_withoutfcs", dissect_ieee80211_withoutfcs, proto_wlan);
62510 register_dissector("wlan_bsfc", dissect_ieee80211_bsfc, proto_wlan);
62511 register_dissector("wlan_noqos", dissect_ieee80211_noqos, proto_wlan);
62512
62513 register_capture_dissector("ieee80211", capture_ieee80211, proto_wlan);
62514 register_capture_dissector("ieee80211_datapad", capture_ieee80211_datapad, proto_wlan);
62515
62516 reassembly_table_register(&wlan_reassembly_table,
62517 &addresses_reassembly_table_functions);
62518 register_init_routine(wlan_retransmit_init);
62519 reassembly_table_register(&gas_reassembly_table,
62520 &addresses_reassembly_table_functions);
62521
62522 wlan_tap = register_tap("wlan");
62523 register_conversation_table(proto_wlan, true1, wlan_conversation_packet, wlan_endpoint_packet);
62524
62525 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,
62526 ether_len, ether_name_resolution_str, ether_name_resolution_len);
62527 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,
62528 ether_len, ether_name_resolution_str, ether_name_resolution_len);
62529
62530 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,
62531 ether_len, ether_name_resolution_str, ether_name_resolution_len);
62532
62533 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));
62534
62535 tagged_field_table = register_dissector_table("wlan.tag.number", "IEEE 802.11 Fields", proto_wlan, FT_UINT8, BASE_DEC);
62536 vendor_specific_action_table = register_dissector_table("wlan.action.vendor_specific", "IEEE802.11 Vendor Specific Action", proto_wlan, FT_UINT24, BASE_HEX);
62537 wifi_alliance_action_subtype_table = register_dissector_table("wlan.action.wifi_alliance.subtype", "Wi-Fi Alliance Action Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62538 vendor_specific_anqp_info_table = register_dissector_table("wlan.anqp.vendor_specific", "IEEE802.11 ANQP information Vendor Specific", proto_wlan, FT_UINT24, BASE_HEX);
62539 wifi_alliance_anqp_info_table = register_dissector_table("wlan.anqp.wifi_alliance.subtype", "Wi-Fi Alliance ANQP Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62540 wifi_alliance_ie_table = register_dissector_table("wlan.ie.wifi_alliance.subtype", "Wi-Fi Alliance IE Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62541 wifi_alliance_public_action_table = register_dissector_table("wlan.pa.wifi_alliance.subtype", "Wi-Fi Alliance PA Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62542
62543 /* Register configuration options */
62544 wlan_module = prefs_register_protocol(proto_wlan, init_wepkeys);
62545 prefs_register_bool_preference(wlan_module, "defragment",
62546 "Reassemble fragmented 802.11 datagrams",
62547 "Whether fragmented 802.11 datagrams should be reassembled",
62548 &wlan_defragment);
62549
62550 prefs_register_bool_preference(wlan_module, "ignore_draft_ht",
62551 "Ignore vendor-specific HT elements",
62552 "Don't dissect 802.11n draft HT elements (which might contain duplicate information).",
62553 &wlan_ignore_draft_ht);
62554
62555 prefs_register_bool_preference(wlan_module, "retransmitted",
62556 "Call subdissector for retransmitted 802.11 frames",
62557 "Whether retransmitted 802.11 frames should be subdissected",
62558 &wlan_subdissector);
62559
62560 prefs_register_bool_preference(wlan_module, "check_fcs",
62561 "Assume packets have FCS",
62562 "Some 802.11 cards include the FCS at the end of a packet, others do not.",
62563 &wlan_check_fcs);
62564
62565 prefs_register_bool_preference(wlan_module, "check_checksum",
62566 "Validate the FCS checksum if possible",
62567 "Whether to validate the FCS checksum or not.",
62568 &wlan_check_checksum);
62569
62570 prefs_register_enum_preference(wlan_module, "ignore_wep",
62571 "Ignore the Protection bit",
62572 "Some 802.11 cards leave the Protection bit set even though the packet is decrypted, "
62573 "and some also leave the IV (initialization vector).",
62574 &wlan_ignore_prot, wlan_ignore_prot_options, true1);
62575
62576 prefs_register_bool_preference(wlan_module, "wpa_key_mic_len_enable",
62577 "Enable WPA Key MIC Length override",
62578 "Whether to enable MIC Length override or not.",
62579 &wlan_key_mic_len_enable);
62580
62581 prefs_register_uint_preference(wlan_module, "wpa_key_mic_len",
62582 "WPA Key MIC Length override",
62583 "Some Key MIC lengths are greater than 16 bytes, so set the length you require",
62584 10, &wlan_key_mic_len);
62585
62586 prefs_register_bool_preference(wlan_module, "treat_as_s1g",
62587 "Treat as S1G", "Treat all WiFi packets as S1G",
62588 &treat_as_s1g);
62589
62590 prefs_register_obsolete_preference(wlan_module, "wep_keys");
62591
62592 prefs_register_bool_preference(wlan_module, "enable_decryption",
62593 "Enable decryption", "Enable WEP and WPA/WPA2 decryption",
62594 &enable_decryption);
62595
62596 wep_uat = uat_new("WEP and WPA Decryption Keys",
62597 sizeof(uat_wep_key_record_t), /* record size */
62598 "80211_keys", /* filename */
62599 true1, /* from_profile */
62600 &uat_wep_key_records, /* data_ptr */
62601 &num_wepkeys_uat, /* numitems_ptr */
62602 UAT_AFFECTS_DISSECTION0x00000001, /* affects dissection of packets, but not set of named fields */
62603 "Ch80211Keys", /* help */
62604 uat_wep_key_record_copy_cb, /* copy callback */
62605 uat_wep_key_record_update_cb, /* update callback */
62606 uat_wep_key_record_free_cb, /* free callback */
62607 init_wepkeys, /* post update callback - update the WEP/WPA keys */
62608 NULL((void*)0), /* reset callback */
62609 wep_uat_flds); /* UAT field definitions */
62610
62611 prefs_register_uat_preference(wlan_module,
62612 "wep_key_table",
62613 "Decryption keys",
62614 "WEP and pre-shared WPA keys\n"
62615 "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
62616 "010203040506070809101111213 (104/128-bit WEP),\n"
62617 "MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
62618 "0102030405...6061626364 (WPA + 256-bit key)."
62619 "Invalid keys will be ignored.",
62620 wep_uat);
62621}
62622
62623void
62624proto_register_wlan_rsna_eapol(void)
62625{
62626
62627 static hf_register_info hf[] = {
62628 {&hf_wlan_rsna_eapol_wpa_keydes_msgnr,
62629 {"Message number", "wlan_rsna_eapol.keydes.msgnr",
62630 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
62631 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62632
62633 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo,
62634 {"Key Information", "wlan_rsna_eapol.keydes.key_info",
62635 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
62636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62637
62638 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version,
62639 {"Key Descriptor Version", "wlan_rsna_eapol.keydes.key_info.keydes_version",
62640 FT_UINT16, BASE_DEC, VALS(keydes_version_vals)((0 ? (const struct _value_string*)0 : ((keydes_version_vals)
)))
, KEY_INFO_KEYDES_VERSION_MASK0x0007,
62641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62642
62643 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type,
62644 {"Key Type", "wlan_rsna_eapol.keydes.key_info.key_type",
62645 FT_BOOLEAN, 16, TFS(&keyinfo_key_type_tfs)((0 ? (const struct true_false_string*)0 : ((&keyinfo_key_type_tfs
))))
, KEY_INFO_KEY_TYPE_MASK0x0008,
62646 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62647
62648 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index,
62649 {"Key Index", "wlan_rsna_eapol.keydes.key_info.key_index",
62650 FT_UINT16, BASE_DEC, NULL((void*)0), KEY_INFO_KEY_INDEX_MASK0x0030,
62651 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62652
62653 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install,
62654 {"Install", "wlan_rsna_eapol.keydes.key_info.install",
62655 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_INSTALL_MASK0x0040,
62656 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62657
62658 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack,
62659 {"Key ACK", "wlan_rsna_eapol.keydes.key_info.key_ack",
62660 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_KEY_ACK_MASK0x0080,
62661 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62662
62663 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic,
62664 {"Key MIC", "wlan_rsna_eapol.keydes.key_info.key_mic",
62665 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_KEY_MIC_MASK0x0100,
62666 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62667
62668 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure,
62669 {"Secure", "wlan_rsna_eapol.keydes.key_info.secure",
62670 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_SECURE_MASK0x0200,
62671 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62672
62673 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error,
62674 {"Error", "wlan_rsna_eapol.keydes.key_info.error",
62675 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_ERROR_MASK0x0400,
62676 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62677
62678 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request,
62679 {"Request", "wlan_rsna_eapol.keydes.key_info.request",
62680 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_REQUEST_MASK0x0800,
62681 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62682
62683 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data,
62684 {"Encrypted Key Data", "wlan_rsna_eapol.keydes.key_info.encrypted_key_data",
62685 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000,
62686 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62687
62688 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message,
62689 {"SMK Message", "wlan_rsna_eapol.keydes.key_info.smk_message",
62690 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_SMK_MESSAGE_MASK0x2000,
62691 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62692
62693 {&hf_wlan_rsna_eapol_keydes_key_len,
62694 {"Key Length", "eapol.keydes.key_len",
62695 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
62696 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62697
62698 {&hf_wlan_rsna_eapol_keydes_replay_counter,
62699 {"Replay Counter", "eapol.keydes.replay_counter",
62700 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
62701 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62702
62703 {&hf_wlan_rsna_eapol_keydes_key_iv,
62704 {"Key IV", "eapol.keydes.key_iv",
62705 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62706 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62707
62708 {&hf_wlan_rsna_eapol_wpa_keydes_nonce,
62709 {"WPA Key Nonce", "wlan_rsna_eapol.keydes.nonce",
62710 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62711 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62712
62713 {&hf_wlan_rsna_eapol_wpa_keydes_rsc,
62714 {"WPA Key RSC", "wlan_rsna_eapol.keydes.rsc",
62715 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62716 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62717
62718 {&hf_wlan_rsna_eapol_wpa_keydes_id,
62719 {"WPA Key ID", "wlan_rsna_eapol.keydes.id",
62720 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62721 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62722
62723 {&hf_wlan_rsna_eapol_wpa_keydes_mic,
62724 {"WPA Key MIC", "wlan_rsna_eapol.keydes.mic",
62725 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62726 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62727
62728 {&hf_wlan_rsna_eapol_wpa_keydes_data_len,
62729 {"WPA Key Data Length", "wlan_rsna_eapol.keydes.data_len",
62730 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
62731 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62732
62733 {&hf_wlan_rsna_eapol_wpa_keydes_data,
62734 {"WPA Key Data", "wlan_rsna_eapol.keydes.data",
62735 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62736 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62737
62738 {&hf_wlan_rsna_eapol_wpa_keydes_padding,
62739 {"WPA Key Data Padding", "wlan_rsna_eapol.keydes.padding",
62740 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62741 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62742
62743 {&hf_wlan_rsna_eapol_wpa_extraneous,
62744 {"WPA EAPOL Extraneous Data", "wlan_rsna_eapol.extraneous",
62745 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62746 };
62747
62748 static int *ett[] = {
62749 &ett_keyinfo,
62750 &ett_wlan_rsna_eapol_keydes_data,
62751 };
62752
62753 proto_wlan_rsna_eapol = proto_register_protocol("IEEE 802.11 RSNA EAPOL key",
62754 "802.11 RSNA EAPOL", "wlan_rsna_eapol");
62755 proto_register_field_array(proto_wlan_rsna_eapol, hf, array_length(hf)(sizeof (hf) / sizeof (hf)[0]));
62756
62757 proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
62758}
62759
62760void
62761proto_reg_handoff_ieee80211(void)
62762{
62763 dissector_handle_t data_encap_handle;
62764 dissector_handle_t wlan_rsna_eapol_wpa_key_handle, wlan_rsna_eapol_rsn_key_handle;
62765 capture_dissector_handle_t ieee80211_cap_handle;
62766
62767 dissector_add_for_decode_as_with_preference("udp.port", ieee80211_handle);
62768 /*
62769 * Get handles for the 802.2 (LPD) LLC, EPD LLC, IPX and Ethernet
62770 * dissectors.
62771 */
62772 llc_handle = find_dissector_add_dependency("llc", proto_wlan);
62773 epd_llc_handle = find_dissector_add_dependency("epd_llc", proto_wlan);
62774 ipx_handle = find_dissector_add_dependency("ipx", proto_wlan);
62775 eth_withoutfcs_handle = find_dissector_add_dependency("eth_withoutfcs", proto_wlan);
62776
62777 proto_eapol = proto_get_id_by_filter_name("eapol");
62778
62779 /*
62780 * Get the Ethertype dissector table.
62781 */
62782 ethertype_subdissector_table = find_dissector_table("ethertype");
62783
62784 llc_cap_handle = find_capture_dissector("llc");
62785 ipx_cap_handle = find_capture_dissector("ipx");
62786
62787 dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_1120, ieee80211_handle);
62788
62789 dissector_add_uint("ethertype", ETHERTYPE_CENTRINO_PROMISC0x2452, centrino_handle);
62790
62791 ieee80211_cap_handle = find_capture_dissector("ieee80211");
62792 capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_1120, ieee80211_cap_handle);
62793 capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11_WITH_RADIO22, ieee80211_cap_handle);
62794 capture_dissector_add_uint("ppi", 105 /* DLT_DLT_IEEE802_11 */, ieee80211_cap_handle);
62795
62796 /* Register handoff to Aruba GRE */
62797 dissector_add_uint("gre.proto", GRE_ARUBA_82000x8200, wlan_withoutfcs_handle);
62798 dissector_add_uint("gre.proto", GRE_ARUBA_82100x8210, wlan_withoutfcs_handle);
62799 dissector_add_uint("gre.proto", GRE_ARUBA_82200x8220, wlan_withoutfcs_handle);
62800 dissector_add_uint("gre.proto", GRE_ARUBA_82300x8230, wlan_withoutfcs_handle);
62801 dissector_add_uint("gre.proto", GRE_ARUBA_82400x8240, wlan_withoutfcs_handle);
62802 dissector_add_uint("gre.proto", GRE_ARUBA_82500x8250, wlan_withoutfcs_handle);
62803 dissector_add_uint("gre.proto", GRE_ARUBA_82600x8260, wlan_withoutfcs_handle);
62804 dissector_add_uint("gre.proto", GRE_ARUBA_82700x8270, wlan_withoutfcs_handle);
62805 dissector_add_uint("gre.proto", GRE_ARUBA_82800x8280, wlan_withoutfcs_handle);
62806 dissector_add_uint("gre.proto", GRE_ARUBA_82900x8290, wlan_withoutfcs_handle);
62807 dissector_add_uint("gre.proto", GRE_ARUBA_82A00x82A0, wlan_withoutfcs_handle);
62808 dissector_add_uint("gre.proto", GRE_ARUBA_82B00x82B0, wlan_withoutfcs_handle);
62809 dissector_add_uint("gre.proto", GRE_ARUBA_82C00x82C0, wlan_withoutfcs_handle);
62810 dissector_add_uint("gre.proto", GRE_ARUBA_82D00x82D0, wlan_withoutfcs_handle);
62811 dissector_add_uint("gre.proto", GRE_ARUBA_82E00x82E0, wlan_withoutfcs_handle);
62812 dissector_add_uint("gre.proto", GRE_ARUBA_82F00x82F0, wlan_withoutfcs_handle);
62813 dissector_add_uint("gre.proto", GRE_ARUBA_83000x8300, wlan_withoutfcs_handle);
62814 dissector_add_uint("gre.proto", GRE_ARUBA_83100x8310, wlan_withoutfcs_handle);
62815 dissector_add_uint("gre.proto", GRE_ARUBA_83200x8320, wlan_withoutfcs_handle);
62816 dissector_add_uint("gre.proto", GRE_ARUBA_83300x8330, wlan_withoutfcs_handle);
62817 dissector_add_uint("gre.proto", GRE_ARUBA_83400x8340, wlan_withoutfcs_handle);
62818 dissector_add_uint("gre.proto", GRE_ARUBA_83500x8350, wlan_withoutfcs_handle);
62819 dissector_add_uint("gre.proto", GRE_ARUBA_83600x8360, wlan_withoutfcs_handle);
62820 dissector_add_uint("gre.proto", GRE_ARUBA_83700x8370, wlan_withoutfcs_handle);
62821 dissector_add_uint("gre.proto", GRE_ARUBA_91000x9100, wlan_withoutfcs_handle);
62822 dissector_add_uint("gre.proto", GRE_ARUBA_91100x9110, wlan_withoutfcs_handle);
62823 dissector_add_uint("gre.proto", GRE_ARUBA_91200x9120, wlan_withoutfcs_handle);
62824 dissector_add_uint("gre.proto", GRE_ARUBA_91300x9130, wlan_withoutfcs_handle);
62825 dissector_add_uint("gre.proto", GRE_ARUBA_91400x9140, wlan_withoutfcs_handle);
62826 dissector_add_uint("gre.proto", GRE_ARUBA_91500x9150, wlan_withoutfcs_handle);
62827 dissector_add_uint("gre.proto", GRE_ARUBA_91600x9160, wlan_withoutfcs_handle);
62828 dissector_add_uint("gre.proto", GRE_ARUBA_91700x9170, wlan_withoutfcs_handle);
62829 dissector_add_uint("gre.proto", GRE_ARUBA_91800x9180, wlan_withoutfcs_handle);
62830 dissector_add_uint("gre.proto", GRE_ARUBA_91900x9190, wlan_withoutfcs_handle);
62831 dissector_add_uint("gre.proto", GRE_ARUBA_91A00x91A0, wlan_withoutfcs_handle);
62832 dissector_add_uint("gre.proto", GRE_ARUBA_91B00x91B0, wlan_withoutfcs_handle);
62833 dissector_add_uint("gre.proto", GRE_ARUBA_91C00x91C0, wlan_withoutfcs_handle);
62834 dissector_add_uint("gre.proto", GRE_ARUBA_91D00x91D0, wlan_withoutfcs_handle);
62835 dissector_add_uint("gre.proto", GRE_ARUBA_91E00x91E0, wlan_withoutfcs_handle);
62836 dissector_add_uint("gre.proto", GRE_ARUBA_91F00x91F0, wlan_withoutfcs_handle);
62837
62838 data_encap_handle = create_dissector_handle(dissect_data_encap, proto_wlan);
62839 dissector_add_uint("ethertype", ETHERTYPE_IEEE80211_DATA_ENCAP0x890d,
62840 data_encap_handle);
62841
62842 /*
62843 * EAPOL key descriptor types.
62844 */
62845 wlan_rsna_eapol_wpa_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
62846 proto_wlan_rsna_eapol);
62847 dissector_add_uint("eapol.keydes.type", EAPOL_WPA_KEY254, wlan_rsna_eapol_wpa_key_handle);
62848 wlan_rsna_eapol_rsn_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
62849 proto_wlan_rsna_eapol);
62850 dissector_add_uint("eapol.keydes.type", EAPOL_RSN_KEY2, wlan_rsna_eapol_rsn_key_handle);
62851
62852 dissector_add_uint("sflow_245.header_protocol", SFLOW_5_HEADER_80211_MAC15, wlan_withoutfcs_handle);
62853
62854 /* Tagged fields */
62855 /* XXX - for now, do it without pinos so the protocol is -1 */
62856 dissector_add_uint("wlan.tag.number", TAG_SSID0, create_dissector_handle(ieee80211_tag_ssid, -1));
62857 dissector_add_uint("wlan.tag.number", TAG_SUPP_RATES1, create_dissector_handle(ieee80211_tag_supp_rates, -1));
62858 dissector_add_uint("wlan.tag.number", TAG_FH_PARAMETER2, create_dissector_handle(ieee80211_tag_fh_parameter, -1));
62859 dissector_add_uint("wlan.tag.number", TAG_DS_PARAMETER3, create_dissector_handle(ieee80211_tag_ds_parameter, -1));
62860 dissector_add_uint("wlan.tag.number", TAG_CF_PARAMETER4, create_dissector_handle(ieee80211_tag_cf_parameter, -1));
62861 dissector_add_uint("wlan.tag.number", TAG_TIM5, create_dissector_handle(ieee80211_tag_tim, -1));
62862 dissector_add_uint("wlan.tag.number", TAG_IBSS_PARAMETER6, create_dissector_handle(ieee80211_tag_ibss_parameter, -1));
62863 dissector_add_uint("wlan.tag.number", TAG_COUNTRY_INFO7, create_dissector_handle(ieee80211_tag_country_info, -1));
62864 dissector_add_uint("wlan.tag.number", TAG_FH_HOPPING_PARAMETER8, create_dissector_handle(ieee80211_tag_fh_hopping_parameter, -1));
62865 dissector_add_uint("wlan.tag.number", TAG_FH_HOPPING_TABLE9, create_dissector_handle(ieee80211_tag_fh_hopping_table, -1));
62866 dissector_add_uint("wlan.tag.number", TAG_REQUEST10, create_dissector_handle(ieee80211_tag_request, -1));
62867 dissector_add_uint("wlan.tag.number", TAG_QBSS_LOAD11, create_dissector_handle(ieee80211_tag_qbss_load, -1));
62868 dissector_add_uint("wlan.tag.number", TAG_EDCA_PARAM_SET12, create_dissector_handle(ieee80211_tag_edca_param_set, -1));
62869 dissector_add_uint("wlan.tag.number", TAG_TSPEC13, create_dissector_handle(ieee80211_tag_tspec, -1));
62870 dissector_add_uint("wlan.tag.number", TAG_TCLAS14, create_dissector_handle(ieee80211_tag_tclas, -1));
62871 dissector_add_uint("wlan.tag.number", TAG_SCHEDULE15, create_dissector_handle(ieee80211_tag_schedule, -1));
62872 dissector_add_uint("wlan.tag.number", TAG_CHALLENGE_TEXT16, create_dissector_handle(ieee80211_tag_challenge_text, -1));
62873 dissector_add_uint("wlan.tag.number", TAG_POWER_CONSTRAINT32, create_dissector_handle(ieee80211_tag_power_constraint, -1));
62874 dissector_add_uint("wlan.tag.number", TAG_POWER_CAPABILITY33, create_dissector_handle(ieee80211_tag_power_capability, -1));
62875 dissector_add_uint("wlan.tag.number", TAG_TPC_REQUEST34, create_dissector_handle(ieee80211_tag_tpc_request, -1));
62876 dissector_add_uint("wlan.tag.number", TAG_TPC_REPORT35, create_dissector_handle(ieee80211_tag_tpc_report, -1));
62877 dissector_add_uint("wlan.tag.number", TAG_SUPPORTED_CHANNELS36, create_dissector_handle(ieee80211_tag_supported_channels, -1));
62878 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_ANN37, create_dissector_handle(ieee80211_tag_switch_ann, -1));
62879 dissector_add_uint("wlan.tag.number", TAG_MEASURE_REQ38, create_dissector_handle(ieee80211_tag_measure_req, -1));
62880 dissector_add_uint("wlan.tag.number", TAG_MEASURE_REP39, create_dissector_handle(ieee80211_tag_measure_rep, -1));
62881 dissector_add_uint("wlan.tag.number", TAG_QUIET40, create_dissector_handle(ieee80211_tag_quiet, -1));
62882 dissector_add_uint("wlan.tag.number", TAG_IBSS_DFS41, create_dissector_handle(ieee80211_tag_ibss_dfs, -1));
62883 dissector_add_uint("wlan.tag.number", TAG_ERP_INFO42, create_dissector_handle(ieee80211_tag_erp_info, -1));
62884 dissector_add_uint("wlan.tag.number", TAG_ERP_INFO_OLD47, create_dissector_handle(ieee80211_tag_erp_info, -1));
62885 dissector_add_uint("wlan.tag.number", TAG_TS_DELAY43, create_dissector_handle(ieee80211_tag_ts_delay, -1));
62886 dissector_add_uint("wlan.tag.number", TAG_TCLAS_PROCESS44, create_dissector_handle(ieee80211_tag_tclas_process, -1));
62887 dissector_add_uint("wlan.tag.number", TAG_QOS_CAPABILITY46, create_dissector_handle(ieee80211_tag_qos_capability, -1));
62888 dissector_add_uint("wlan.tag.number", TAG_RSN_IE48, create_dissector_handle(ieee80211_tag_rsn_ie, -1));
62889 dissector_add_uint("wlan.tag.number", TAG_EXT_SUPP_RATES50, create_dissector_handle(ieee80211_tag_ext_supp_rates, -1));
62890 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_CAPABILITIES127, create_dissector_handle(dissect_extended_capabilities_ie, -1));
62891 dissector_add_uint("wlan.tag.number", TAG_CISCO_CCX1_CKIP133, create_dissector_handle(ieee80211_tag_cisco_ccx1_ckip, -1));
62892 dissector_add_uint("wlan.tag.number", TAG_VHT_CAPABILITY191, create_dissector_handle(dissect_vht_capability_ie, -1));
62893 dissector_add_uint("wlan.tag.number", TAG_VHT_OPERATION192, create_dissector_handle(dissect_vht_operation_ie, -1));
62894 dissector_add_uint("wlan.tag.number", TAG_EXT_BSS_LOAD193, create_dissector_handle(dissect_ext_bss_load, -1));
62895 dissector_add_uint("wlan.tag.number", TAG_WIDE_BW_CHANNEL_SWITCH194, create_dissector_handle(dissect_wide_bw_channel_switch, -1));
62896 dissector_add_uint("wlan.tag.number", TAG_TX_PWR_ENVELOPE195, create_dissector_handle(dissect_vht_tx_pwr_envelope, -1));
62897 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_WRAPPER196, create_dissector_handle(dissect_channel_switch_wrapper, -1));
62898 dissector_add_uint("wlan.tag.number", TAG_OPERATING_MODE_NOTIFICATION199, create_dissector_handle(dissect_operating_mode_notification, -1));
62899 dissector_add_uint("wlan.tag.number", TAG_REDUCED_NEIGHBOR_REPORT201, create_dissector_handle(dissect_reduced_neighbor_report, -1));
62900 dissector_add_uint("wlan.tag.number", TAG_FINE_TIME_MEASUREMENT_PARAM206, create_dissector_handle(dissect_ftm_params, -1));
62901 dissector_add_uint("wlan.tag.number", TAG_S1G_CAPABILITIES217, create_dissector_handle(dissect_s1g_capabilities, -1));
62902 dissector_add_uint("wlan.tag.number", TAG_SUBCHANNEL_SELECTIVE_TRANSMISSION220, create_dissector_handle(dissect_subchannel_selective_transmission, -1));
62903 dissector_add_uint("wlan.tag.number", TAG_S1G_OPEN_LOOP_LINK_MARGIN_INDEX207, create_dissector_handle(dissect_s1g_open_loop_link_margin_index, -1));
62904 dissector_add_uint("wlan.tag.number", TAG_RPS208, create_dissector_handle(dissect_rps, -1));
62905 dissector_add_uint("wlan.tag.number", TAG_PAGE_SLICE209, create_dissector_handle(dissect_page_slice, -1));
62906 dissector_add_uint("wlan.tag.number", TAG_AID_REQUEST210, create_dissector_handle(dissect_aid_request, -1));
62907 dissector_add_uint("wlan.tag.number", TAG_AID_RESPONSE211, create_dissector_handle(dissect_aid_response, -1));
62908 dissector_add_uint("wlan.tag.number", TAG_S1G_SECTOR_OPERATION212, create_dissector_handle(dissect_s1g_sector_operation, -1));
62909 dissector_add_uint("wlan.tag.number", TAG_S1G_BEACON_COMPATIBILITY213, create_dissector_handle(dissect_s1g_beacon_compatibility, -1));
62910 dissector_add_uint("wlan.tag.number", TAG_SHORT_BEACON_INTERVAL214, create_dissector_handle(dissect_s1g_short_beacon_interval, -1));
62911 dissector_add_uint("wlan.tag.number", TAG_CHANGE_SEQUENCE215, create_dissector_handle(dissect_s1g_change_sequence, -1));
62912 /* 7.3.2.26 Vendor Specific information element (221) */
62913 dissector_add_uint("wlan.tag.number", TAG_VENDOR_SPECIFIC_IE221, create_dissector_handle(ieee80211_tag_vendor_specific_ie, -1));
62914 dissector_add_uint("wlan.tag.number", TAG_AUTHENTICATION_CONTROL222, create_dissector_handle(dissect_authentication_control, -1));
62915 dissector_add_uint("wlan.tag.number", TAG_TSF_TIMER_ACCURACY223, create_dissector_handle(dissect_tsf_timer_accuracy, -1));
62916 dissector_add_uint("wlan.tag.number", TAG_S1G_RELAY224, create_dissector_handle(dissect_s1g_relay, -1));
62917 dissector_add_uint("wlan.tag.number", TAG_REACHABLE_ADDRESS225, create_dissector_handle(dissect_reachable_address, -1));
62918 dissector_add_uint("wlan.tag.number", TAG_S1G_RELAY_DISCOVERY226, create_dissector_handle(dissect_s1g_relay_discovery, -1));
62919 dissector_add_uint("wlan.tag.number", TAG_S1G_RELAY_ACTIVATION236, create_dissector_handle(dissect_s1g_relay_activation, -1));
62920 dissector_add_uint("wlan.tag.number", TAG_AID_ANNOUNCEMENT228, create_dissector_handle(dissect_aid_announcement, -1));
62921 dissector_add_uint("wlan.tag.number", TAG_PV1_PROBE_RESPONSE_OPTION229, create_dissector_handle(dissect_pv1_probe_response_option, -1));
62922 dissector_add_uint("wlan.tag.number", TAG_EL_OPERATION230, create_dissector_handle(dissect_el_operation, -1));
62923 dissector_add_uint("wlan.tag.number", TAG_SECTORIZED_GROUP_ID_LIST231, create_dissector_handle(dissect_sectorized_group_id_list, -1));
62924 dissector_add_uint("wlan.tag.number", TAG_S1G_OPERATION232, create_dissector_handle(dissect_s1g_operation, -1));
62925 dissector_add_uint("wlan.tag.number", TAG_HEADER_COMPRESSION233, create_dissector_handle(dissect_header_compression, -1));
62926 dissector_add_uint("wlan.tag.number", TAG_SST_OPERATION234, create_dissector_handle(dissect_sst_operation, -1));
62927 dissector_add_uint("wlan.tag.number", TAG_MAD235, create_dissector_handle(dissect_max_away_duration, -1));
62928 /* This Cisco proprietary IE seems to mimic 221 */
62929 dissector_add_uint("wlan.tag.number", TAG_CISCO_VENDOR_SPECIFIC150, create_dissector_handle(ieee80211_tag_vendor_specific_ie, -1));
62930 dissector_add_uint("wlan.tag.number", TAG_SYMBOL_PROPRIETARY173, create_dissector_handle(ieee80211_tag_symbol_proprietary_ie, -1));
62931 dissector_add_uint("wlan.tag.number", TAG_MOBILITY_DOMAIN54, create_dissector_handle(dissect_mobility_domain, -1));
62932 dissector_add_uint("wlan.tag.number", TAG_FAST_BSS_TRANSITION55, create_dissector_handle(dissect_fast_bss_transition, -1));
62933 dissector_add_uint("wlan.tag.number", TAG_MMIE76, create_dissector_handle(dissect_mmie, -1));
62934 dissector_add_uint("wlan.tag.number", TAG_NO_BSSID_CAPABILITY83, create_dissector_handle(dissect_no_bssid_capability, -1));
62935 dissector_add_uint("wlan.tag.number", TAG_SSID_LIST84, create_dissector_handle(dissect_ssid_list, -1));
62936 dissector_add_uint("wlan.tag.number", TAG_MULTIPLE_BSSID_INDEX85, create_dissector_handle(dissect_multiple_bssid_index, -1));
62937 dissector_add_uint("wlan.tag.number", TAG_TIME_ZONE98, create_dissector_handle(dissect_time_zone, -1));
62938 dissector_add_uint("wlan.tag.number", TAG_TIMEOUT_INTERVAL56, create_dissector_handle(dissect_timeout_interval, -1));
62939 dissector_add_uint("wlan.tag.number", TAG_RIC_DATA57, create_dissector_handle(dissect_ric_data, -1));
62940 dissector_add_uint("wlan.tag.number", TAG_LINK_IDENTIFIER101, create_dissector_handle(dissect_link_identifier, -1));
62941 dissector_add_uint("wlan.tag.number", TAG_WAKEUP_SCHEDULE102, create_dissector_handle(dissect_wakeup_schedule, -1));
62942 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_TIMING104, create_dissector_handle(dissect_channel_switch_timing, -1));
62943 dissector_add_uint("wlan.tag.number", TAG_PTI_CONTROL105, create_dissector_handle(dissect_pti_control, -1));
62944 dissector_add_uint("wlan.tag.number", TAG_PU_BUFFER_STATUS106, create_dissector_handle(dissect_pu_buffer_status, -1));
62945 dissector_add_uint("wlan.tag.number", TAG_HT_CAPABILITY45, create_dissector_handle(dissect_ht_capability_ie, -1));
62946 dissector_add_uint("wlan.tag.number", TAG_HT_OPERATION61, create_dissector_handle(dissect_ht_operation_ie, -1));
62947 dissector_add_uint("wlan.tag.number", TAG_SECONDARY_CHANNEL_OFFSET62, create_dissector_handle(dissect_secondary_channel_offset_ie, -1));
62948 dissector_add_uint("wlan.tag.number", TAG_RCPI53, create_dissector_handle(dissect_rcpi_ie, -1));
62949 dissector_add_uint("wlan.tag.number", TAG_BSS_AVG_ACCESS_DELAY63, create_dissector_handle(dissect_bss_avg_access_delay_ie, -1));
62950 dissector_add_uint("wlan.tag.number", TAG_ANTENNA64, create_dissector_handle(dissect_antenna_ie, -1));
62951 dissector_add_uint("wlan.tag.number", TAG_RSNI65, create_dissector_handle(dissect_rsni_ie, -1));
62952 dissector_add_uint("wlan.tag.number", TAG_MEASURE_PILOT_TRANS66, create_dissector_handle(dissect_measurement_pilot_trans_ie, -1));
62953 dissector_add_uint("wlan.tag.number", TAG_BSS_AVB_ADM_CAPACITY67, create_dissector_handle(dissect_bss_available_admission_capacity_ie, -1));
62954 dissector_add_uint("wlan.tag.number", TAG_IE_68_CONFLICT68, create_dissector_handle(ieee80211_tag_ie_68_conflict, -1));
62955 dissector_add_uint("wlan.tag.number", TAG_BSS_MAX_IDLE_PERIOD90, create_dissector_handle(dissect_bss_max_idle_period, -1));
62956 dissector_add_uint("wlan.tag.number", TAG_TFS_REQUEST91, create_dissector_handle(dissect_tfs_request, -1));
62957 dissector_add_uint("wlan.tag.number", TAG_TFS_RESPONSE92, create_dissector_handle(dissect_tfs_response, -1));
62958 dissector_add_uint("wlan.tag.number", TAG_WNM_SLEEP_MODE93, create_dissector_handle(dissect_wnm_sleep_mode, -1));
62959 dissector_add_uint("wlan.tag.number", TAG_TIME_ADV69, create_dissector_handle(dissect_time_adv, -1));
62960 dissector_add_uint("wlan.tag.number", TAG_RM_ENABLED_CAPABILITY70, create_dissector_handle(dissect_rm_enabled_capabilities_ie, -1));
62961 dissector_add_uint("wlan.tag.number", TAG_MULTIPLE_BSSID71, create_dissector_handle(dissect_multiple_bssid_ie, -1));
62962 dissector_add_uint("wlan.tag.number", TAG_20_40_BSS_CO_EX72, create_dissector_handle(dissect_20_40_bss_coexistence, -1));
62963 dissector_add_uint("wlan.tag.number", TAG_20_40_BSS_INTOL_CH_REP73, create_dissector_handle(dissect_20_40_bss_intolerant, -1));
62964 dissector_add_uint("wlan.tag.number", TAG_OVERLAP_BSS_SCAN_PAR74, create_dissector_handle(dissect_overlap_bss_scan_par, -1));
62965 dissector_add_uint("wlan.tag.number", TAG_RIC_DESCRIPTOR75, create_dissector_handle(dissect_ric_descriptor, -1));
62966 dissector_add_uint("wlan.tag.number", TAG_MESH_PEERING_MGMT117, create_dissector_handle(ieee80211_tag_mesh_peering_mgmt, -1));
62967 dissector_add_uint("wlan.tag.number", TAG_MESH_CONFIGURATION113, create_dissector_handle(ieee80211_tag_mesh_configuration, -1));
62968 dissector_add_uint("wlan.tag.number", TAG_MESH_ID114, create_dissector_handle(ieee80211_tag_mesh_id, -1));
62969 dissector_add_uint("wlan.tag.number", TAG_BEACON_TIMING120, create_dissector_handle(ieee80211_tag_beacon_timing, -1));
62970 dissector_add_uint("wlan.tag.number", TAG_GANN125, create_dissector_handle(ieee80211_tag_gann, -1));
62971 dissector_add_uint("wlan.tag.number", TAG_MESH_PREQ130, create_dissector_handle(ieee80211_tag_mesh_preq, -1));
62972 dissector_add_uint("wlan.tag.number", TAG_MESH_PREP131, create_dissector_handle(ieee80211_tag_mesh_prep, -1));
62973 dissector_add_uint("wlan.tag.number", TAG_MESH_PERR132, create_dissector_handle(ieee80211_tag_mesh_perr, -1));
62974 dissector_add_uint("wlan.tag.number", TAG_PXU137, create_dissector_handle(ieee80211_tag_pxu, -1));
62975 dissector_add_uint("wlan.tag.number", TAG_PXUC138, create_dissector_handle(ieee80211_tag_pxuc, -1));
62976 dissector_add_uint("wlan.tag.number", TAG_MIC140, create_dissector_handle(ieee80211_tag_mic, -1));
62977 dissector_add_uint("wlan.tag.number", TAG_RANN126, create_dissector_handle(ieee80211_tag_rann, -1));
62978 dissector_add_uint("wlan.tag.number", TAG_MESH_CHANNEL_SWITCH118, create_dissector_handle(ieee80211_tag_mesh_channel_switch, -1));
62979 dissector_add_uint("wlan.tag.number", TAG_INTERWORKING107, create_dissector_handle(dissect_interworking, -1));
62980 dissector_add_uint("wlan.tag.number", TAG_ADVERTISEMENT_PROTOCOL108, create_dissector_handle(dissect_advertisement_protocol, -1));
62981 dissector_add_uint("wlan.tag.number", TAG_QOS_MAP_SET110, create_dissector_handle(dissect_qos_map_set, -1));
62982 dissector_add_uint("wlan.tag.number", TAG_ROAMING_CONSORTIUM111, create_dissector_handle(dissect_roaming_consortium, -1));
62983 dissector_add_uint("wlan.tag.number", TAG_AP_CHANNEL_REPORT51, create_dissector_handle(dissect_ap_channel_report, -1));
62984 dissector_add_uint("wlan.tag.number", TAG_NEIGHBOR_REPORT52, create_dissector_handle(dissect_neighbor_report, -1));
62985 dissector_add_uint("wlan.tag.number", TAG_MESH_AWAKE_WINDOW119, create_dissector_handle(ieee80211_tag_mesh_awake_window, -1));
62986 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60, create_dissector_handle(ieee80211_tag_channel_switch_announcement, -1));
62987 dissector_add_uint("wlan.tag.number", TAG_SUPPORTED_OPERATING_CLASSES59, create_dissector_handle(ieee80211_tag_supported_operating_classes, -1));
62988 dissector_add_uint("wlan.tag.number", TAG_RELAY_CAPABILITIES167, create_dissector_handle(add_tag_relay_capabilities, -1));
62989 dissector_add_uint("wlan.tag.number", TAG_DMG_BSS_PARAMETER_CHANGE152, create_dissector_handle(ieee80211_tag_bss_parameter_change, -1));
62990 dissector_add_uint("wlan.tag.number", TAG_DMG_CAPABILITIES148, create_dissector_handle(ieee80211_tag_dmg_capabilities, -1));
62991 dissector_add_uint("wlan.tag.number", TAG_DMG_OPERATION151, create_dissector_handle(ieee80211_tag_dmg_operation, -1));
62992 dissector_add_uint("wlan.tag.number", TAG_ANTENNA_SECTOR_ID190, create_dissector_handle(ieee80211_tag_antenna_section_id, -1));
62993 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_SCHEDULE144, create_dissector_handle(ieee80211_tag_extended_schedule, -1));
62994 dissector_add_uint("wlan.tag.number", TAG_STA_AVAILABILITY145, create_dissector_handle(ieee80211_tag_sta_availability, -1));
62995 dissector_add_uint("wlan.tag.number", TAG_NEXT_DMG_ATI147, create_dissector_handle(ieee80211_tag_next_dmg_ati, -1));
62996 dissector_add_uint("wlan.tag.number", TAG_NEXTPCP_LIST160, create_dissector_handle(ieee80211_tag_nextpcp_list, -1));
62997 dissector_add_uint("wlan.tag.number", TAG_PCP_HANDOVER161, create_dissector_handle(ieee80211_tag_pcp_handover, -1));
62998 dissector_add_uint("wlan.tag.number", TAG_BEAMLINK_MAINTENANCE169, create_dissector_handle(ieee80211_tag_beamlink_maintenance, -1));
62999 dissector_add_uint("wlan.tag.number", TAG_QUIET_PERIOD_RES177, create_dissector_handle(ieee80211_tag_quiet_period_res, -1));
63000 dissector_add_uint("wlan.tag.number", TAG_INTRA_ACCESS_CAT_PRIO184, create_dissector_handle(ieee80211_tag_intra_access_cat_prio, -1));
63001 dissector_add_uint("wlan.tag.number", TAG_SCS_DESCRIPTOR185, create_dissector_handle(ieee80211_tag_scs_descriptor, -1));
63002 dissector_add_uint("wlan.tag.number", TAG_RELAY_TRANSFER_PARAM168, create_dissector_handle(ieee80211_tag_relay_transfer_param, -1));
63003 dissector_add_uint("wlan.tag.number", TAG_DMG_BEAM_REFINEMENT153, create_dissector_handle(ieee80211_tag_dmg_beam_refinement, -1));
63004 dissector_add_uint("wlan.tag.number", TAG_WAKEUP_SCHEDULE_AD143, create_dissector_handle(ieee80211_tag_wakeup_schedule_ad, -1));
63005 dissector_add_uint("wlan.tag.number", TAG_DMG_TSPEC146, create_dissector_handle(ieee80211_tag_dmg_tspec, -1));
63006 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_MEASURMENT_FB154, create_dissector_handle(ieee80211_tag_channel_measurement_fb, -1));
63007 dissector_add_uint("wlan.tag.number", TAG_AWAKE_WINDOW157, create_dissector_handle(ieee80211_tag_awake_window, -1));
63008 dissector_add_uint("wlan.tag.number", TAG_ADDBA_EXT159, create_dissector_handle(ieee80211_tag_addba_ext, -1));
63009 dissector_add_uint("wlan.tag.number", TAG_MULTI_BAND158, create_dissector_handle(ieee80211_tag_multi_band, -1));
63010 dissector_add_uint("wlan.tag.number", TAG_DMG_LINK_MARGIN162, create_dissector_handle(ieee80211_tag_dmg_link_margin, -1));
63011 dissector_add_uint("wlan.tag.number", TAG_DMG_LINK_ADAPTION_ACK172, create_dissector_handle(ieee80211_tag_dmg_link_adaption_ack, -1));
63012 dissector_add_uint("wlan.tag.number", TAG_FILS_INDICATION240, create_dissector_handle(ieee80211_tag_fils_indication, -1));
63013 dissector_add_uint("wlan.tag.number", TAG_SWITCHING_STREAM163, create_dissector_handle(ieee80211_tag_switching_stream, -1));
63014 dissector_add_uint("wlan.tag.number", TAG_ELEMENT_ID_EXTENSION255, create_dissector_handle(ieee80211_tag_element_id_extension, -1));
63015 dissector_add_uint("wlan.tag.number", TAG_TWT216, create_dissector_handle(ieee80211_tag_twt, -1));
63016 dissector_add_uint("wlan.tag.number", TAG_RSNX244, create_dissector_handle(ieee80211_tag_rsnx, -1));
63017 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_USAGE97, create_dissector_handle(ieee80211_tag_channel_usage, -1));
63018 dissector_add_uint("wlan.tag.number", TAG_DMS_REQUEST99, create_dissector_handle(ieee80211_tag_dms_request, -1));
63019 dissector_add_uint("wlan.tag.number", TAG_DMS_RESPONSE100, create_dissector_handle(ieee80211_tag_dms_response, -1));
63020
63021 /* Vendor specific actions */
63022 dissector_add_uint("wlan.action.vendor_specific", OUI_MARVELL0x005043, create_dissector_handle(dissect_vendor_action_marvell, -1));
63023 dissector_add_uint("wlan.action.vendor_specific", OUI_WFA0x506F9A, create_dissector_handle(dissect_vendor_action_wifi_alliance, -1));
63024
63025 /* Protected action WFA ... */
63026 dissector_add_uint("wlan.action.wifi_alliance.subtype", WFA_SUBTYPE_ACTION_QOS_MGMT0x1A, create_dissector_handle(dissect_vendor_action_wfa_qos_mgmt, -1));
63027 dissector_add_uint("wlan.action.wifi_alliance.subtype", WFA_SUBTYPE_ACTION_CAPABILITIES0x1B, create_dissector_handle(dissect_wfa_capa, -1));
63028
63029 dissector_add_uint("wlan.anqp.vendor_specific", OUI_WFA0x506F9A, create_dissector_handle(dissect_vendor_wifi_alliance_anqp, -1));
63030 dissector_add_uint("wlan.anqp.wifi_alliance.subtype", WFA_ANQP_SUBTYPE_HS2017, create_dissector_handle(dissect_hs20_anqp, -1));
63031 dissector_add_uint("wlan.anqp.wifi_alliance.subtype", WFA_ANQP_SUBTYPE_MBO18, create_dissector_handle(dissect_mbo_anqp, -1));
63032 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_SUBSCRIPTION_REMEDIATION0, create_dissector_handle(dissect_hs20_subscription_remediation, -1));
63033 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_DEAUTHENTICATION_IMMINENT1, create_dissector_handle(dissect_hs20_deauthentication_imminent, -1));
63034 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_HS20_INDICATION16, create_dissector_handle(dissect_hs20_indication, -1));
63035 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_OSEN20, create_dissector_handle(dissect_hs20_osen, -1));
63036 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_OWE_TRANSITION_MODE28, create_dissector_handle(dissect_owe_transition_mode, -1));
63037 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_TRANSITION_DISABLE_KDE32, create_dissector_handle(dissect_transition_disable_kde, -1));
63038 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_WIFI_60G23, create_dissector_handle(dissect_wfa_60g_ie, -1));
63039 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_MBO_OCE22, create_dissector_handle(dissect_mbo_oce, -1));
63040 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));
63041 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_WNM_SUBTYPE_CELL_DATA_CAPABILITIES3, create_dissector_handle(dissect_wfa_wnm_cell_cap, -1));
63042 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_QOS_MGMT34, create_dissector_handle(dissect_qos_mgmt, -1));
63043 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_WFA_CAPA35, create_dissector_handle(dissect_wfa_capa, -1));
63044 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_OVERRIDE41, create_dissector_handle(dissect_wfa_rsn_override, -1));
63045 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_OVERRIDE_242, create_dissector_handle(dissect_wfa_rsn_override_2, -1));
63046 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSNX_OVERRIDE43, create_dissector_handle(dissect_wfa_rsnx_override, -1));
63047 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_SELECTION44, create_dissector_handle(dissect_wfa_rsn_selection, -1));
63048 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_OVERRIDE_LINK_KDE45, create_dissector_handle(dissect_wfa_rsn_override_link_kde, -1));
63049}
63050
63051/*
63052 * Editor modelines
63053 *
63054 * Local Variables:
63055 * c-basic-offset: 2
63056 * tab-width: 8
63057 * indent-tabs-mode: nil
63058 * End:
63059 *
63060 * ex: set shiftwidth=2 tabstop=8 expandtab:
63061 * :indentSize=2:tabSize=8:noTabs=true:
63062 */