Bug Summary

File:epan/dissectors/packet-ieee80211.c
Warning:line 37411, 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-07-100356-3573-1 -x c /builds/wireshark/wireshark/epan/dissectors/packet-ieee80211.c
1/* packet-ieee80211.c
2 * Routines for Wireless LAN (IEEE 802.11) dissection
3 * Copyright 2000, Axis Communications AB
4 *
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
8 *
9 * SPDX-License-Identifier: GPL-2.0-or-later
10 *
11 * Credits:
12 *
13 * The following people helped me by pointing out bugs etc. Thank you!
14 *
15 * Marco Molteni
16 * Lena-Marie Nilsson
17 * Magnus Hultman-Persson
18 */
19
20/*
21 * 10/24/2005 - Add dissection for 802.11e
22 * Zhu Yi <yi.zhu@intel.com>
23 *
24 * 04/21/2008 - Added dissection for 802.11p
25 * Arada Systems <http://www.aradasystems.com>
26 *
27 * 04/20/2013 - Added dissection of 802.11ad according to the 9th draft of the standard.
28 * Extended as a project in the Laboratory of Computer Communication & Networking (LCCN), Computer Science Department, Technion, Israel.
29 * Majd Omari <majd.omari@outlook.com>
30 * Jalil Moraney <moraney.jalil@outlook.com>
31 */
32
33/*
34 * Reference :
35 * The 802.11 standard is "free", 6 month after the publication.
36 *
37 * IEEE Std 802.11-2020: Revision of IEEE Std 802.11-2016
38 * include 5 amendments (802.11ai,ah,aj,ak,aq) 802.11-2016
39 * include 5 amendments (802.11ae,aa,ad,ac,af) 802.11-2012
40 * include 10 amendments (802.11k,r,y,w,n,p,z,v,u,s) 802.11-2007
41 * include 8 amendments (802.11a,b,d,e,g,h,i,j) 802.11-1999
42 * https://ieeexplore.ieee.org/document/9502043
43 *
44 * WAPI (IE 68)
45 * http://isotc.iso.org/livelink/livelink/fetch/-8913189/8913214/8913250/8913253/JTC001-N-9880.pdf?nodeid=8500308&vernum=-2
46 */
47
48#include "config.h"
49
50#include <math.h>
51
52#include <epan/packet.h>
53#include <epan/capture_dissectors.h>
54#include <epan/exceptions.h>
55#include <wsutil/pint.h>
56#include <wsutil/ws_roundup.h>
57#include <epan/addr_resolv.h>
58#include <epan/address_types.h>
59#include <epan/strutil.h>
60#include <epan/prefs.h>
61#include <epan/reassemble.h>
62#include "packet-eapol.h"
63#include "packet-ieee80211.h"
64#include <epan/etypes.h>
65#include <epan/oui.h>
66#include <epan/crc32-tvb.h>
67#include <epan/crypt/wep-wpadefs.h>
68#include <epan/expert.h>
69#include <epan/conversation_table.h>
70#include <epan/uat.h>
71#include <epan/proto_data.h>
72#include <epan/tfs.h>
73#include <epan/unit_strings.h>
74#include <wsutil/array.h>
75#include <wsutil/bits_ctz.h>
76
77#include "packet-wps.h"
78#include "packet-e212.h"
79#include "packet-sflow.h"
80#include "packet-gre.h"
81
82#include <epan/crypt/dot11decrypt_ws.h>
83
84void proto_register_ieee80211(void);
85void proto_reg_handoff_ieee80211(void);
86void proto_register_wlan_rsna_eapol(void);
87
88static dissector_handle_t centrino_handle;
89
90typedef struct {
91 DOT11DECRYPT_KEY_ITEM used_key;
92 unsigned keydata_len;
93 uint8_t *keydata;
94} proto_keydata_t;
95
96extern value_string_ext eap_type_vals_ext; /* from packet-eap.c */
97
98/* TUs are used a lot in 802.11 ... */
99static const unit_name_string units_tu_tus = { "TU", "TUs" };
100
101/* DIs are also used */
102static const unit_name_string units_di_dis = { "DI", "DIs" };
103
104/* az min/max time units */
105static const unit_name_string units_100_us = { " times 100 microseconds", NULL((void*)0) };
106static const unit_name_string units_10_ms = { " times 10 milliseconds", NULL((void*)0) };
107
108#define IS_2_4_GHZ(freq)(freq >= 2400 && freq <= 2500) (freq >= 2400 && freq <= 2500)
109#define IS_5PLUSGHZ(freq) (freq >= 5000) GHZ(freq) (freq >= 5000)
110#define IS_6_GHZ(freq)(freq >= 5955) (freq >= 5955)
111
112/*
113 * We keep STA properties here, like whether they are S1G STAs or DMG STAs.
114 * This is based on looking at BEACONs, or perhaps from the radiotap header
115 * if we get one.
116 */
117static wmem_map_t *sta_prop_hash;
118
119/*
120 * Not sure that they can be both, so are bit values wanted?
121 */
122#define STA_IS_S1G0x00000001 0x00000001
123#define STA_IS_DMG0x00000002 0x00000002
124
125/*
126 * Add the top three bytes of the STA address to the bottom three bytes
127 */
128static unsigned
129sta_prop_hash_fn(const void *k)
130{
131 return wmem_strong_hash((const uint8_t *)k, 6);
132}
133
134static gboolean
135sta_prop_equal_fn(const void *v, const void *w)
136{
137 const uint8_t *k1 = (const uint8_t *)v;
138 const uint8_t *k2 = (const uint8_t *)w;
139
140 return memcmp(k1, k2, 6) == 0; /* Compare each address for equality */
141}
142
143/* bitmask for bits [l..h]
144 * taken from kernel's include/linux/bitops.h
145 */
146#define GENMASK(h, l)(((1U << ((h) - (l) + 1)) - 1) << (l)) (((1U << ((h) - (l) + 1)) - 1) << (l))
147#define GENMASK64(h, l)(((1UL << ((h) - (l) + 1)) - 1) << (l)) (((UINT64_C(1)1UL << ((h) - (l) + 1)) - 1) << (l))
148
149/* Defragment fragmented 802.11 datagrams */
150static bool_Bool wlan_defragment = true1;
151
152/* call subdissector for retransmitted frames */
153static bool_Bool wlan_subdissector = true1;
154
155/* Check for the presence of the 802.11 FCS */
156static bool_Bool wlan_check_fcs;
157
158/* Check the FCS checksum */
159static bool_Bool wlan_check_checksum;
160
161/* Ignore vendor-specific HT elements */
162static bool_Bool wlan_ignore_draft_ht;
163
164/* Ignore the Protection bit; assume packet is decrypted */
165#define WLAN_IGNORE_PROT_NO0 0
166#define WLAN_IGNORE_PROT_WO_IV1 1
167#define WLAN_IGNORE_PROT_W_IV2 2
168static int wlan_ignore_prot = WLAN_IGNORE_PROT_NO0;
169
170/* The Key MIC len has been set by the user */
171static bool_Bool wlan_key_mic_len_enable;
172static unsigned wlan_key_mic_len;
173
174/* Counter incremented on each (re)association
175 * This value will be assigned to each packet's pinfo->srcport/pinfo->destport
176 * as a way to uniquely make a one to one mapping between conversations and
177 * associations
178 */
179static uint32_t association_counter;
180/* association_counter is assigned in authentication for AKM 24/MLD */
181static uint32_t assoc_counter_in_auth;
182
183/* Treat all Wi-Fi frames as being S1G frames where it is important */
184static bool_Bool treat_as_s1g;
185
186/* Table for reassembly of fragments. */
187static reassembly_table wlan_reassembly_table;
188
189/* Statistical data */
190static struct _wlan_stats wlan_stats;
191
192/*-------------------------------------
193 * UAT for WEP decoder
194 *-------------------------------------
195 */
196static uat_wep_key_record_t *uat_wep_key_records;
197static uat_t *wep_uat;
198static unsigned num_wepkeys_uat;
199
200static void *
201uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U___attribute__((unused)))
202{
203 uat_wep_key_record_t* new_key = (uat_wep_key_record_t *)n;
204 const uat_wep_key_record_t* old_key = (const uat_wep_key_record_t *)o;
205
206 new_key->string = g_strdup(old_key->string)g_strdup_inline (old_key->string);
207
208 return new_key;
209}
210
211static bool_Bool
212uat_wep_key_record_update_cb(void* r, char** err)
213{
214 uat_wep_key_record_t* rec = (uat_wep_key_record_t *)r;
215 decryption_key_t* dk;
216 unsigned dk_type;
217
218 if (rec->string == NULL((void*)0)) {
219 *err = g_strdup("Key can't be blank")g_strdup_inline ("Key can't be blank");
220 return false0;
221 }
222
223 *err = NULL((void*)0);
224 g_strstrip(rec->string)g_strchomp (g_strchug (rec->string));
225 dk = parse_key_string(rec->string, rec->key, err);
226
227 if (dk != NULL((void*)0)) {
228 dk_type = dk->type;
229 free_key_string(dk);
230 switch (dk_type) {
231 case DOT11DECRYPT_KEY_TYPE_WEP0:
232 case DOT11DECRYPT_KEY_TYPE_WEP_401:
233 case DOT11DECRYPT_KEY_TYPE_WEP_1042:
234 if (rec->key != DOT11DECRYPT_KEY_TYPE_WEP0) {
235 *err = g_strdup("Invalid WEP key format")g_strdup_inline ("Invalid WEP key format");
236 return false0;
237 }
238 break;
239 case DOT11DECRYPT_KEY_TYPE_WPA_PWD3:
240 if (rec->key != DOT11DECRYPT_KEY_TYPE_WPA_PWD3) {
241 *err = g_strdup("Invalid WPA_PWD key format")g_strdup_inline ("Invalid WPA_PWD key format");
242 return false0;
243 }
244 break;
245 case DOT11DECRYPT_KEY_TYPE_WPA_PSK4:
246 if (rec->key != DOT11DECRYPT_KEY_TYPE_WPA_PSK4) {
247 *err = g_strdup("Invalid WPA_PSK key format")g_strdup_inline ("Invalid WPA_PSK key format");
248 return false0;
249 }
250 break;
251 case DOT11DECRYPT_KEY_TYPE_TK6:
252 if (rec->key != DOT11DECRYPT_KEY_TYPE_TK6) {
253 *err = g_strdup("Invalid TK key format")g_strdup_inline ("Invalid TK key format");
254 return false0;
255 }
256 break;
257 case DOT11DECRYPT_KEY_TYPE_MSK7:
258 if (rec->key != DOT11DECRYPT_KEY_TYPE_MSK7) {
259 *err = g_strdup("Invalid MSK key format")g_strdup_inline ("Invalid MSK key format");
260 return false0;
261 }
262 break;
263 default:
264 *err = g_strdup("Invalid key format")g_strdup_inline ("Invalid key format");
265 return false0;
266 }
267 } else {
268 if (*err == NULL((void*)0)) {
269 *err = g_strdup("Invalid key format")g_strdup_inline ("Invalid key format");
270 }
271 return false0;
272 }
273 return true1;
274}
275
276static void
277uat_wep_key_record_free_cb(void*r)
278{
279 uat_wep_key_record_t* key = (uat_wep_key_record_t *)r;
280 g_free(key->string);
281}
282
283UAT_VS_DEF(uat_wep_key_records, key, uat_wep_key_record_t, uint8_t, 0, STRING_KEY_TYPE_WEP)static void uat_wep_key_records_key_set_cb(void* rec, const char
* buf, unsigned len, const void* vs, const void* u2 __attribute__
((unused))) { unsigned i; char* str = g_strndup(buf,len); const
char* cstr; ((uat_wep_key_record_t*)rec)->key = 0; for(i=
0; ( cstr = ((const value_string*)vs)[i].strptr ) ;i++) { if (
(strcmp ((const char *) (cstr), (const char *) (str)) == 0)) {
((uat_wep_key_record_t*)rec)->key = (uint8_t)((const value_string
*)vs)[i].value; g_free(str); return; } } g_free(str); } static
void uat_wep_key_records_key_tostr_cb(void* rec, char** out_ptr
, unsigned* out_len, const void* vs, const void* u2 __attribute__
((unused))) { unsigned i; for(i=0;((const value_string*)vs)[i
].strptr;i++) { if ( ((const value_string*)vs)[i].value == ((
uat_wep_key_record_t*)rec)->key ) { *out_ptr = g_strdup_inline
(((const value_string*)vs)[i].strptr); *out_len = (unsigned)
strlen(*out_ptr); return; } } *out_ptr = g_strdup_inline ("wep"
); *out_len = (unsigned)strlen("wep"); }
284UAT_CSTRING_CB_DEF(uat_wep_key_records, string, uat_wep_key_record_t)static void uat_wep_key_records_string_set_cb(void* rec, const
char* buf, unsigned len, const void* u1 __attribute__((unused
)), const void* u2 __attribute__((unused))) { char* new_buf =
g_strndup(buf,len); g_free((((uat_wep_key_record_t*)rec)->
string)); (((uat_wep_key_record_t*)rec)->string) = new_buf
; } static void uat_wep_key_records_string_tostr_cb(void* rec
, char** out_ptr, unsigned* out_len, const void* u1 __attribute__
((unused)), const void* u2 __attribute__((unused))) { if (((uat_wep_key_record_t
*)rec)->string ) { *out_ptr = g_strdup_inline ((((uat_wep_key_record_t
*)rec)->string)); *out_len = (unsigned)strlen((((uat_wep_key_record_t
*)rec)->string)); } else { *out_ptr = g_strdup_inline ("")
; *out_len = 0; } }
285
286/* Stuff for the WEP/WPA/WPA2 decoder */
287static bool_Bool enable_decryption = true1;
288
289static void
290ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
291 proto_tree *tree, int tagged_parameters_len, int ftype,
292 association_sanity_check_t *association_sanity_check);
293
294
295static void
296save_proto_data(tvbuff_t *tvb, packet_info *pinfo, int offset, size_t size, int key);
297
298static void
299save_proto_data_value(packet_info *pinfo, unsigned value, int key);
300
301static void try_scan_tdls_keys(tvbuff_t *tvb, packet_info *pinfo, int offset);
302
303static void try_scan_ft_assoc_keys(packet_info *pinfo, const wlan_hdr_t *whdr);
304
305static tvbuff_t *
306try_decrypt(tvbuff_t *tvb, packet_info *pinfo, unsigned offset, unsigned len,
307 uint8_t *algorithm, uint32_t *sec_trailer,
308 PDOT11DECRYPT_KEY_ITEM used_key);
309
310static int weak_iv(unsigned char *iv);
311
312typedef struct mimo_control
313{
314 uint8_t nc;
315 uint8_t nr;
316 bool_Bool chan_width;
317 uint8_t grouping;
318 uint8_t coefficient_size;
319 uint8_t codebook_info;
320 uint8_t remaining_matrix_segment;
321} mimo_control_t;
322
323/* ************************************************************************* */
324/* Miscellaneous Constants */
325/* ************************************************************************* */
326#define SHORT_STR256 256
327
328typedef enum {
329 IS_DMG_KEY = 1,
330 IS_AP_KEY,
331 IS_CTRL_GRANT_OR_GRANT_ACK_KEY,
332 IS_S1G_KEY,
333 DECRYPTED_EAPOL_KEY,
334 DECRYPTED_GTK_KEY,
335 PACKET_DATA_KEY,
336 ASSOC_COUNTER_KEY,
337 STA_KEY,
338 BSSID_KEY,
339 NONCE_KEY,
340 GROUP_CIPHER_KEY,
341 CIPHER_KEY,
342 AKM_KEY,
343 MIC_KEY,
344 MIC_LEN_KEY,
345 KEY_VERSION_KEY,
346 KEY_LEN_KEY,
347 KEY_IV_KEY,
348 KEY_DATA_KEY,
349 KEY_DATA_LEN_KEY,
350 GTK_KEY,
351 GTK_LEN_KEY,
352 MDID_KEY,
353 FTE_R0KH_ID_KEY,
354 FTE_R0KH_ID_LEN_KEY,
355 FTE_R1KH_ID_KEY,
356 FTE_R1KH_ID_LEN_KEY,
357 FTE_ANONCE_KEY,
358 FTE_SNONCE_KEY,
359 FTE_MIC_KEY,
360 FTE_MIC_LEN_KEY,
361 FTE_TAG_KEY,
362 MDE_TAG_KEY,
363 RSNE_TAG_KEY,
364 RSNXE_TAG_KEY,
365 RDE_TAG_KEY,
366 GTK_SUBELEM_KEY_LEN_KEY,
367 PASN_DATA_KEY,
368 HE_CHANNEL_WIDTH_KEY,
369 FRAME_TYPE_KEY,
370} wlan_proto_key_t;
371
372/* ************************************************************************* */
373/* Define some very useful macros that are used to analyze frame types etc. */
374/* ************************************************************************* */
375
376/*
377 * Fetch the frame control field and swap it if needed. "fcf" and "tvb"
378 * must be valid variables.
379 */
380#define FETCH_FCF(off)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, off)) >> 8) | (guint16) (
(guint16) (tvb_get_letohs(tvb, off)) << 8)))) : tvb_get_letohs
(tvb, off))
((option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001) ? \
381 GUINT16_SWAP_LE_BE(tvb_get_letohs(tvb, off))(((guint16) ( (guint16) ((guint16) (tvb_get_letohs(tvb, off))
>> 8) | (guint16) ((guint16) (tvb_get_letohs(tvb, off)
) << 8))))
: \
382 tvb_get_letohs(tvb, off))
383
384/*
385 * Extract the fragment number and sequence number from the sequence
386 * control field.
387 */
388#define SEQCTL_FRAGMENT_NUMBER(x)((x) & 0x000F) ((x) & 0x000F)
389#define SEQCTL_SEQUENCE_NUMBER(x)(((x) & 0xFFF0) >> 4) (((x) & 0xFFF0) >> 4)
390
391/*
392 * Extract subfields from the QoS control field.
393 */
394#define QOS_TID(x)((x) & 0x000F) ((x) & 0x000F)
395#define QOS_PRIORITY(x)((x) & 0x0007) ((x) & 0x0007)
396#define QOS_EOSP(x)(((x) & 0x0010) >> 4) (((x) & 0x0010) >> 4) /* end of service period */
397#define QOS_ACK_POLICY(x)(((x) & 0x0060) >> 5) (((x) & 0x0060) >> 5)
398#define QOS_AMSDU_PRESENT(x)(((x) & 0x0080) >> 6) (((x) & 0x0080) >> 6)
399#define QOS_FIELD_CONTENT(x)(((x) & 0xFF00) >> 8) (((x) & 0xFF00) >> 8)
400#define QOS_SCALING_FACTOR(x)(((x) & 0xD0) >> 6) (((x) & 0xD0) >> 6)
401#define QOS_UNSCALED_VALUE(x)((x) & 0x3F) ((x) & 0x3F)
402#define QOS_MESH_CONTROL_PRESENT(x)(((x) & 0x0100) >> 8) (((x) & 0x0100) >> 8)
403
404#define QOS_FLAG_EOSP0x0010 0x0010
405
406/*
407 * Extract subfields from the result of QOS_FIELD_CONTENT().
408 */
409#define QOS_PS_BUF_STATE_INDICATED(x)(((x) & 0x02) >> 1) (((x) & 0x02) >> 1)
410#define QOS_PS_HIGHEST_PRI_BUF_AC(x)(((x) & 0x0C) >> 2) (((x) & 0x0C) >> 2)
411#define QOS_PS_QAP_BUF_LOAD(x)(((x) & 0xF0) >> 4) (((x) & 0xF0) >> 4)
412
413/*
414 * Bits from the HT Control field.
415 * 802.11-2016 9.2.4.6, and 802.11ax draft, 32 bits.
416 */
417#define HTC_VHT0x00000001 0x00000001
418#define HTC_HE0x00000002 0x00000002
419#define HTC_MRQ0x00000004 0x00000004
420#define HTC_UNSOLICITED_MFB0x20000000 0x20000000
421
422/*
423 * Extract subfields from the HT Control field.
424 */
425#define HTC_LAC(htc)((htc) & 0xFE) ((htc) & 0xFE)
426#define HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) (((htc) >> 2) & 0xF)
427#define HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE) (HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) == 0xE)
428#define HTC_LAC_MAI_MRQ(htc)(((((htc) >> 2) & 0xF)) & 0x1) ((HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF)) & 0x1)
429#define HTC_LAC_MAI_MSI(htc)(((((htc) >> 2) & 0xF) >> 1) & 0x7) ((HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) >> 1) & 0x7)
430#define HTC_LAC_MFSI(htc)(((htc) >> 4) & 0x7) (((htc) >> 4) & 0x7)
431#define HTC_LAC_ASEL_CMD(htc)(((htc) >> 9) & 0x7) (((htc) >> 9) & 0x7)
432#define HTC_LAC_ASEL_DATA(htc)(((htc) >> 12) & 0xF) (((htc) >> 12) & 0xF)
433#define HTC_LAC_MFB(htc)(((htc) >> 9) & 0x7F) (((htc) >> 9) & 0x7F)
434#define HTC_CAL_POS(htc)(((htc) >> 16) & 0x3) (((htc) >> 16) & 0x3)
435#define HTC_CAL_SEQ(htc)(((htc) >> 18) & 0x3) (((htc) >> 18) & 0x3)
436#define HTC_CSI_STEERING(htc)(((htc) >> 22) & 0x3) (((htc) >> 22) & 0x3)
437#define HTC_NDP_ANN(htc)(((htc) >> 24) & 0x1) (((htc) >> 24) & 0x1)
438#define HTC_AC_CONSTRAINT(htc)(((htc) >> 30) & 0x1) (((htc) >> 30) & 0x1)
439#define HTC_RDG_MORE_PPDU(htc)(((htc) >> 31) & 0x1) (((htc) >> 31) & 0x1)
440
441#define HTC_MFB(htc)(((htc) >> 9) & 0x7FFF) (((htc) >> 9) & 0x7FFF)
442
443/* VHT-MCS = 15, NUM_STS = 7 */
444#define HTC_NO_FEEDBACK_PRESENT(mfb)(((mfb) & 0x7F) == 0x7F) (((mfb) & 0x7F) == 0x7F)
445
446/*
447 * Extract subfields from the key octet in WEP-encrypted frames.
448 */
449#define KEY_OCTET_WEP_KEY(x)(((x) & 0xC0) >> 6) (((x) & 0xC0) >> 6)
450
451#define KEY_EXTIV0x20 0x20
452#define EXTIV_LEN8 8
453
454/*
455 * Bits from the Mesh Flags field
456 */
457#define MESH_FLAGS_ADDRESS_EXTENSION0x3 0x3
458
459/* ************************************************************************* */
460/* Constants used to identify cooked frame types */
461/* ************************************************************************* */
462#define MGT_FRAME0x00 0x00 /* Frame type is management */
463#define CONTROL_FRAME0x01 0x01 /* Frame type is control */
464#define DATA_FRAME0x02 0x02 /* Frame type is Data */
465#define EXTENSION_FRAME0x03 0x03 /* Frame type is Extension */
466
467#define DATA_SHORT_HDR_LEN24 24
468#define DATA_LONG_HDR_LEN30 30
469#define MGT_FRAME_HDR_LEN24 24 /* Length of Management frame-headers */
470
471/* ************************************************************************* */
472/* Logical field codes (IEEE 802.11 encoding of tags) */
473/* ************************************************************************* */
474const value_string ie_tag_num_vals[] = {
475 { TAG_SSID0, "SSID parameter set" },
476 { TAG_SUPP_RATES1, "Supported Rates" },
477 { TAG_FH_PARAMETER2, "FH Parameter set" },
478 { TAG_DS_PARAMETER3, "DS Parameter set" },
479 { TAG_CF_PARAMETER4, "CF Parameter set" },
480 { TAG_TIM5, "Traffic Indication Map (TIM)" },
481 { TAG_IBSS_PARAMETER6, "IBSS Parameter set" },
482 { TAG_COUNTRY_INFO7, "Country Information" },
483 { TAG_FH_HOPPING_PARAMETER8, "Hopping Pattern Parameters" },
484 { TAG_FH_HOPPING_TABLE9, "Hopping Pattern Table" },
485 { TAG_REQUEST10, "Request" },
486 { TAG_QBSS_LOAD11, "QBSS Load Element" },
487 { TAG_EDCA_PARAM_SET12, "EDCA Parameter Set" },
488 { TAG_TSPEC13, "Traffic Specification" },
489 { TAG_TCLAS14, "Traffic Classification" },
490 { TAG_SCHEDULE15, "Schedule" },
491 { TAG_CHALLENGE_TEXT16, "Challenge text" },
492 { TAG_POWER_CONSTRAINT32, "Power Constraint" },
493 { TAG_POWER_CAPABILITY33, "Power Capability" },
494 { TAG_TPC_REQUEST34, "TPC Request" },
495 { TAG_TPC_REPORT35, "TPC Report" },
496 { TAG_SUPPORTED_CHANNELS36, "Supported Channels" },
497 { TAG_CHANNEL_SWITCH_ANN37, "Channel Switch Announcement" },
498 { TAG_MEASURE_REQ38, "Measurement Request" },
499 { TAG_MEASURE_REP39, "Measurement Report" },
500 { TAG_QUIET40, "Quiet" },
501 { TAG_IBSS_DFS41, "IBSS DFS" },
502 { TAG_ERP_INFO42, "ERP Information" },
503 { TAG_TS_DELAY43, "TS Delay" },
504 { TAG_TCLAS_PROCESS44, "TCLAS Processing" },
505 { TAG_HT_CAPABILITY45, "HT Capabilities" },
506 { TAG_QOS_CAPABILITY46, "QoS Capability" },
507 { TAG_ERP_INFO_OLD47, "ERP Information" }, /* Reserved... */
508 { TAG_RSN_IE48, "RSN Information" },
509 { TAG_EXT_SUPP_RATES50, "Extended Supported Rates" },
510 { TAG_AP_CHANNEL_REPORT51, "AP Channel Report" },
511 { TAG_NEIGHBOR_REPORT52, "Neighbor Report" },
512 { TAG_RCPI53, "RCPI" },
513 { TAG_MOBILITY_DOMAIN54, "Mobility Domain" },
514 { TAG_FAST_BSS_TRANSITION55, "Fast BSS Transition" },
515 { TAG_TIMEOUT_INTERVAL56, "Timeout Interval" },
516 { TAG_RIC_DATA57, "RIC Data" },
517 { TAG_DSE_REG_LOCATION58, "DSE Registered Location" },
518 { TAG_SUPPORTED_OPERATING_CLASSES59, "Supported Operating Classes" },
519 { TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60, "Extended Channel Switch Announcement" },
520 { TAG_HT_OPERATION61, "HT Operation" },
521 { TAG_SECONDARY_CHANNEL_OFFSET62, "Secondary Channel Offset (802.11n D1.10)" },
522 { TAG_BSS_AVG_ACCESS_DELAY63, "BSS Average Access Delay" },
523 { TAG_ANTENNA64, "Antenna" },
524 { TAG_RSNI65, "RSNI" },
525 { TAG_MEASURE_PILOT_TRANS66, "Measurement Pilot Transmission" },
526 { TAG_BSS_AVB_ADM_CAPACITY67, "BSS Available Admission Capacity" },
527 { TAG_IE_68_CONFLICT68, "BSS AC Access Delay/WAPI Parameter Set" },
528 { TAG_TIME_ADV69, "Time Advertisement" },
529 { TAG_RM_ENABLED_CAPABILITY70, "RM Enabled Capabilities" },
530 { TAG_MULTIPLE_BSSID71, "Multiple BSSID" },
531 { TAG_20_40_BSS_CO_EX72, "20/40 BSS Coexistence" },
532 { TAG_20_40_BSS_INTOL_CH_REP73, "20/40 BSS Intolerant Channel Report" }, /* IEEE P802.11n/D6.0 */
533 { TAG_OVERLAP_BSS_SCAN_PAR74, "Overlapping BSS Scan Parameters" }, /* IEEE P802.11n/D6.0 */
534 { TAG_RIC_DESCRIPTOR75, "RIC Descriptor" },
535 { TAG_MMIE76, "Management MIC" },
536 { TAG_EVENT_REQUEST78, "Event Request" },
537 { TAG_EVENT_REPORT79, "Event Report" },
538 { TAG_DIAGNOSTIC_REQUEST80, "Diagnostic Request" },
539 { TAG_DIAGNOSTIC_REPORT81, "Diagnostic Report" },
540 { TAG_LOCATION_PARAMETERS82, "Location Parameters" },
541 { TAG_NO_BSSID_CAPABILITY83, "Non Transmitted BSSID Capability" },
542 { TAG_SSID_LIST84, "SSID List" },
543 { TAG_MULTIPLE_BSSID_INDEX85, "Multiple BSSID Index" },
544 { TAG_FMS_DESCRIPTOR86, "FMS Descriptor" },
545 { TAG_FMS_REQUEST87, "FMS Request" },
546 { TAG_FMS_RESPONSE88, "FMS Response" },
547 { TAG_QOS_TRAFFIC_CAPABILITY89, "QoS Traffic Capability" },
548 { TAG_BSS_MAX_IDLE_PERIOD90, "BSS Max Idle Period" },
549 { TAG_TFS_REQUEST91, "TFS Request" },
550 { TAG_TFS_RESPONSE92, "TFS Response" },
551 { TAG_WNM_SLEEP_MODE93, "WNM-Sleep Mode" },
552 { TAG_TIM_BROADCAST_REQUEST94, "TIM Broadcast Request" },
553 { TAG_TIM_BROADCAST_RESPONSE95, "TIM Broadcast Response" },
554 { TAG_COLLOCATED_INTER_REPORT96, "Collocated Interference Report" },
555 { TAG_CHANNEL_USAGE97, "Channel Usage" },
556 { TAG_TIME_ZONE98, "Time Zone" },
557 { TAG_DMS_REQUEST99, "DMS Request" },
558 { TAG_DMS_RESPONSE100, "DMS Response" },
559 { TAG_LINK_IDENTIFIER101, "Link Identifier" },
560 { TAG_WAKEUP_SCHEDULE102, "Wakeup Schedule" },
561 { TAG_CHANNEL_SWITCH_TIMING104, "Channel Switch Timing" },
562 { TAG_PTI_CONTROL105, "PTI Control" },
563 { TAG_PU_BUFFER_STATUS106, "PU Buffer Status" },
564 { TAG_INTERWORKING107, "Interworking" },
565 { TAG_ADVERTISEMENT_PROTOCOL108, "Advertisement Protocol"},
566 { TAG_EXPIDITED_BANDWIDTH_REQ109, "Expedited Bandwidth Request" },
567 { TAG_QOS_MAP_SET110, "QoS Map Set" },
568 { TAG_ROAMING_CONSORTIUM111, "Roaming Consortium" },
569 { TAG_EMERGENCY_ALERT_ID112, "Emergency Alert Identifier" },
570 { TAG_MESH_CONFIGURATION113, "Mesh Configuration" },
571 { TAG_MESH_ID114, "Mesh ID" },
572 { TAG_MESH_LINK_METRIC_REPORT115, "Mesh Link Metric Report" },
573 { TAG_CONGESTION_NOTIFICATION116, "Congestion Notification" },
574 { TAG_MESH_PEERING_MGMT117, "Mesh Peering Management" },
575 { TAG_MESH_CHANNEL_SWITCH118, "Mesh Channel Switch Parameters" },
576 { TAG_MESH_AWAKE_WINDOW119, "Mesh Awake Window" },
577 { TAG_BEACON_TIMING120, "Beacon Timing" },
578 { TAG_MCCAOP_SETUP_REQUEST121, "MCCAOP Setup Request" },
579 { TAG_MCCAOP_SETUP_REPLY122, "MCCAOP SETUP Reply" },
580 { TAG_MCCAOP_ADVERTISEMENT123, "MCCAOP Advertisement" },
581 { TAG_MCCAOP_TEARDOWN124, "MCCAOP Teardown" },
582 { TAG_GANN125, "Gate Announcement" },
583 { TAG_RANN126, "Root Announcement" },
584 { TAG_EXTENDED_CAPABILITIES127, "Extended Capabilities" },
585 { TAG_AGERE_PROPRIETARY128, "Agere Proprietary" },
586 { TAG_MESH_PREQ130, "Path Request" },
587 { TAG_MESH_PREP131, "Path Reply" },
588 { TAG_MESH_PERR132, "Path Error" },
589 { TAG_CISCO_CCX1_CKIP133, "Cisco CCX1 CKIP + Device Name" },
590 { TAG_CISCO_CCX2136, "Cisco CCX2" },
591 { TAG_PXU137, "Proxy Update" },
592 { TAG_PXUC138, "Proxy Update Confirmation"},
593 { TAG_AUTH_MESH_PEERING_EXCH139, "Authenticated Mesh Peering Exchange" },
594 { TAG_MIC140, "MIC (Message Integrity Code)" },
595 { TAG_DESTINATION_URI141, "Destination URI" },
596 { TAG_U_APSD_COEX142, "U-APSD Coexistence" },
597 { TAG_WAKEUP_SCHEDULE_AD143, "Wakeup Schedule 802.11ad" },
598 { TAG_EXTENDED_SCHEDULE144, "Extended Schedule" },
599 { TAG_STA_AVAILABILITY145, "STA Availability" },
600 { TAG_DMG_TSPEC146, "DMG TSPEC" },
601 { TAG_NEXT_DMG_ATI147, "Next DMG ATI" },
602 { TAG_DMG_CAPABILITIES148, "DMG Capabilities" },
603 { TAG_CISCO_CCX3149, "Cisco Unknown 95" },
604 { TAG_CISCO_VENDOR_SPECIFIC150, "Vendor Specific" },
605 { TAG_DMG_OPERATION151, "DMG Operating" },
606 { TAG_DMG_BSS_PARAMETER_CHANGE152, "DMG BSS Parameter Change" },
607 { TAG_DMG_BEAM_REFINEMENT153, "DMG Beam Refinement" },
608 { TAG_CHANNEL_MEASURMENT_FB154, "Channel Measurement Feedback" },
609 { TAG_AWAKE_WINDOW157, "Awake Window" },
610 { TAG_MULTI_BAND158, "Multi Band" },
611 { TAG_ADDBA_EXT159, "ADDBA Extension" },
612 { TAG_NEXTPCP_LIST160, "NEXTPCP List" },
613 { TAG_PCP_HANDOVER161, "PCP Handover" },
614 { TAG_DMG_LINK_MARGIN162, "DMG Link Margin" },
615 { TAG_SWITCHING_STREAM163, "Switching Stream" },
616 { TAG_SESSION_TRANSMISSION164, "Session Transmission" },
617 { TAG_DYN_TONE_PAIR_REP165, "Dynamic Tone Pairing Report" },
618 { TAG_CLUSTER_REP166, "Cluster Report" },
619 { TAG_RELAY_CAPABILITIES167, "Relay Capabilities" },
620 { TAG_RELAY_TRANSFER_PARAM168, "Relay Transfer Parameter" },
621 { TAG_BEAMLINK_MAINTENANCE169, "Beamlink Maintenance" },
622 { TAG_MULTIPLE_MAC_SUBLAYERS170, "Multiple MAC Sublayers" },
623 { TAG_U_PID171, "U-PID" },
624 { TAG_DMG_LINK_ADAPTION_ACK172, "DMG Link Adaption Acknowledgment" },
625 { TAG_SYMBOL_PROPRIETARY173, "Symbol Proprietary" },
626 { TAG_MCCAOP_ADVERTISEMENT_OV174, "MCCAOP Advertisement Overview" },
627 { TAG_QUIET_PERIOD_REQ175, "Quiet Period Request" },
628 { TAG_QUIET_PERIOD_RES177, "Quiet Period Response" },
629 { TAG_ECAPC_POLICY182, "ECAPC Policy" },
630 { TAG_CLUSTER_TIME_OFFSET183, "Cluster Time Offset" },
631 { TAG_INTRA_ACCESS_CAT_PRIO184, "Intra-Access Category Priority" },
632 { TAG_SCS_DESCRIPTOR185, "SCS Descriptor" },
633 { TAG_ANTENNA_SECTOR_ID190, "Antenna Sector ID" },
634 { TAG_VHT_CAPABILITY191, "VHT Capabilities" },
635 { TAG_VHT_OPERATION192, "VHT Operation" },
636 { TAG_EXT_BSS_LOAD193, "Extended BSS Load" },
637 { TAG_WIDE_BW_CHANNEL_SWITCH194, "Wide Bandwidth Channel Switch" },
638 { TAG_TX_PWR_ENVELOPE195, "Tx Power Envelope" },
639 { TAG_CHANNEL_SWITCH_WRAPPER196, "Channel Switch Wrapper" },
640 { TAG_OPERATING_MODE_NOTIFICATION199, "Operating Mode Notification" },
641 { TAG_REDUCED_NEIGHBOR_REPORT201, "Reduced Neighbor Report" },
642 { TAG_FINE_TIME_MEASUREMENT_PARAM206, "Fine Time Measurement Params" },
643 { TAG_S1G_OPEN_LOOP_LINK_MARGIN_INDEX207, "S1G Open-Loop Link Margin Index" },
644 { TAG_RPS208, "RPS" },
645 { TAG_PAGE_SLICE209, "Page Slice" },
646 { TAG_AID_REQUEST210, "AID Request" },
647 { TAG_AID_RESPONSE211, "AID Response" },
648 { TAG_S1G_SECTOR_OPERATION212, "Sector Operation" },
649 { TAG_S1G_BEACON_COMPATIBILITY213, "S1G Beacon Compatibility" },
650 { TAG_SHORT_BEACON_INTERVAL214, "Short Beacon Interval" },
651 { TAG_CHANGE_SEQUENCE215, "Change Sequence" },
652 { TAG_TWT216, "Target Wake Time" },
653 { TAG_S1G_CAPABILITIES217, "S1G Capabilities" },
654 { TAG_SUBCHANNEL_SELECTIVE_TRANSMISSION220, "Subchannel Selective Transmission" },
655 { TAG_VENDOR_SPECIFIC_IE221, "Vendor Specific" },
656 { TAG_AUTHENTICATION_CONTROL222, "Authentication Control" },
657 { TAG_TSF_TIMER_ACCURACY223, "TSF Timer Accuracy" },
658 { TAG_S1G_RELAY224, "S1G Relay" },
659 { TAG_REACHABLE_ADDRESS225, "Reachable Address" },
660 { TAG_S1G_RELAY_DISCOVERY226, "S1G Relay Discovery" },
661 { TAG_AID_ANNOUNCEMENT228, "AID Announcement" },
662 { TAG_PV1_PROBE_RESPONSE_OPTION229, "PV1 Probe Response Option" },
663 { TAG_EL_OPERATION230, "EL Operation" },
664 { TAG_SECTORIZED_GROUP_ID_LIST231, "Sectorized Group ID List" },
665 { TAG_S1G_OPERATION232, "S1G Operation" },
666 { TAG_HEADER_COMPRESSION233, "Header Compression" },
667 { TAG_SST_OPERATION234, "SST Operation" },
668 { TAG_MAD235, "MAD" },
669 { TAG_S1G_RELAY_ACTIVATION236, "S1G Relay Activation" },
670 { TAG_CAG_NUMBER237, "CAG Number"},
671 { TAG_AP_CSN239, "AP-CSN"},
672 { TAG_FILS_INDICATION240, "FILS Indication"},
673 { TAG_DIFF_INITIAL_LINK_SETUP241, "Differential Initial Link Setup"},
674 { TAG_FRAGMENT242, "Fragment"},
675 { TAG_RSNX244, "RSN eXtension"},
676 { TAG_ELEMENT_ID_EXTENSION255, "Element ID Extension" },
677 { 0, NULL((void*)0) }
678};
679
680static value_string_ext tag_num_vals_ext = VALUE_STRING_EXT_INIT(ie_tag_num_vals){ _try_val_to_str_ext_init, 0, (sizeof (ie_tag_num_vals) / sizeof
((ie_tag_num_vals)[0]))-1, ie_tag_num_vals, "ie_tag_num_vals"
, ((void*)0) }
;
681
682#define ETAG_ASSOC_DELAY_INFO1 1
683#define ETAG_FILS_REQ_PARAMS2 2
684#define ETAG_FILS_KEY_CONFIRM3 3
685#define ETAG_FILS_SESSION4 4
686#define ETAG_FILS_HLP_CONTAINER5 5
687#define ETAG_FILS_IP_ADDRESS_ASSIGN6 6
688#define ETAG_KEY_DELIVERY7 7
689#define ETAG_FILS_WRAPPED_DATA8 8
690#define ETAG_FTM_SYNC_INFO9 9
691#define ETAG_EXTENDED_REQUEST10 10
692#define ETAG_ESTIMATED_SERVICE_PARAM11 11
693#define ETAG_FILS_PUBLIC_KEY12 12
694#define ETAG_FILS_NONCE13 13
695#define ETAG_FUTURE_CHANNEL_GUIDANCE14 14
696
697/* RFC 8110 */
698#define ETAG_OWE_DH_PARAMETER32 32
699
700#define ETAG_PASSWORD_IDENTIFIER33 33
701
702/* 802.11AX defined tags */
703#define ETAG_HE_CAPABILITIES35 35
704#define ETAG_HE_OPERATION36 36
705#define ETAG_UORA_PARAMETER_SET37 37
706#define ETAG_MU_EDCA_PARAMETER_SET38 38
707#define ETAG_SPATIAL_REUSE_PARAMETER_SET39 39
708#define ETAG_NDP_FEEDBACK_REPORT_PARAMETER_SET41 41
709#define ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42 42
710#define ETAG_QUIET_TIME_PERIOD_SETUP43 43
711#define ETAG_ESS_REPORT45 45
712#define ETAG_OPS46 46
713#define ETAG_HE_BSS_LOAD47 47
714#define ETAG_MAX_CHANNEL_SWITCH_TIME52 52
715#define ETAG_OCI54 54
716#define ETAG_MULTIPLE_BSSID_CONFIGURATION55 55
717#define ETAG_NON_INHERITANCE56 56
718#define ETAG_KNOWN_BSSID57 57
719#define ETAG_SHORT_SSID58 58
720#define ETAG_HE_6GHZ_BAND_CAPABILITIES59 59
721#define ETAG_UL_MU_POWER_CAPABILITIES60 60
722#define ETAG_MSCS_DESCRIPTOR_ELEMENT88 88
723#define ETAG_TCLAS_MASK89 89
724#define ETAG_REJECTED_GROUPS92 92
725#define ETAG_ANTI_CLOGGING_TOKEN93 93
726
727/* 802.11az */
728#define ETAG_SECURE_LTF_PARAMETERS94 94
729#define ETAG_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT95 95
730#define ETAG_RSTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT96 96
731#define ETAG_PASSIVE_TB_RANGING_LCI_TABLE_ELEMENT97 97
732#define ETAG_ISTA_AVAILABILITY_WINDOW98 98
733#define ETAG_RSTA_AVAILABILITY_WINDOW99 99
734#define ETAG_PASN_PARAMETERS100 100
735#define ETAG_RANGING_PARAMETERS101 101
736#define ETAG_DIRECTION_MEASUREMENT_RESULTS102 102
737#define ETAG_MULTIPLE_AOD_FEEDBACK103 103
738#define ETAG_MULTIPLE_BEST_AWV_ID104 104
739#define ETAG_LOS_LIKELIHOOD105 105
740#define ETAG_EHT_OPERATION106 106
741#define ETAG_MULTI_LINK107 107
742#define ETAG_EHT_CAPABILITIES108 108
743#define ETAG_TID_TO_LINK_MAPPING109 109
744#define ETAG_MULTI_LINK_TRAFFIC110 110
745#define ETAG_QOS_CHARACTERISTICS113 113
746#define ETAG_AKM_SUITE_SELECTOR114 114
747#define ETAG_MLO_LINK_INFORMATION133 133
748#define ETAG_AID_BITMAP134 134
749#define ETAG_BANDWIDTH_INDICATION135 135
750#define ETAG_NONAP_STA_REGULATORY_CONNECT137 137
751
752
753static const value_string tag_num_vals_eid_ext[] = {
754 { ETAG_ASSOC_DELAY_INFO1, "Association Delay Info" },
755 { ETAG_FILS_REQ_PARAMS2, "FILS Request Parameters" },
756 { ETAG_FILS_KEY_CONFIRM3, "FILS Key Confirmation" },
757 { ETAG_FILS_SESSION4, "FILS Session" },
758 { ETAG_FILS_HLP_CONTAINER5, "FILS HLP Container" },
759 { ETAG_FILS_IP_ADDRESS_ASSIGN6, "FILS IP Address Assignment" },
760 { ETAG_KEY_DELIVERY7, "Key Delivery" },
761 { ETAG_FILS_WRAPPED_DATA8, "Wrapped Data" },
762 { ETAG_FTM_SYNC_INFO9, "FTM Synchronization Information" },
763 { ETAG_EXTENDED_REQUEST10, "Extended Request" },
764 { ETAG_ESTIMATED_SERVICE_PARAM11, "Estimated Service Parameters" },
765 { ETAG_FILS_PUBLIC_KEY12, "FILS Public Key" },
766 { ETAG_FILS_NONCE13, "FILS Nonce" },
767 { ETAG_FUTURE_CHANNEL_GUIDANCE14, "Future Channel Guidance" },
768 { ETAG_OWE_DH_PARAMETER32, "OWE Diffie-Hellman Parameter" },
769 { ETAG_PASSWORD_IDENTIFIER33, "Password Identifier" },
770 { ETAG_HE_CAPABILITIES35, "HE Capabilities" },
771 { ETAG_HE_OPERATION36, "HE Operation" },
772 { ETAG_UORA_PARAMETER_SET37, "UORA Parameter Set" },
773 { ETAG_MU_EDCA_PARAMETER_SET38, "MU EDCA Parameter Set" },
774 { ETAG_SPATIAL_REUSE_PARAMETER_SET39, "Spatial Reuse Parameter Set" },
775 { ETAG_NDP_FEEDBACK_REPORT_PARAMETER_SET41, "NDP Feedback Report Parameter Set" },
776 { ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42, "BSS Color Change Announcement" },
777 { ETAG_QUIET_TIME_PERIOD_SETUP43, "Quiet Time Period Setup" },
778 { ETAG_ESS_REPORT45, "ESS Report" },
779 { ETAG_OPS46, "Opportunistic Power Save" },
780 { ETAG_HE_BSS_LOAD47, "HE BSS Load" },
781 { ETAG_MAX_CHANNEL_SWITCH_TIME52, "Max Channel Switch Time" },
782 { ETAG_OCI54, "Operating Channel Information" },
783 { ETAG_MULTIPLE_BSSID_CONFIGURATION55, "Multiple BSSID Configuration" },
784 { ETAG_NON_INHERITANCE56, "Non-Inheritance"},
785 { ETAG_KNOWN_BSSID57, "Known BSSID" },
786 { ETAG_SHORT_SSID58, "Short SSID" },
787 { ETAG_HE_6GHZ_BAND_CAPABILITIES59, "HE 6 GHz Band Capabilities" },
788 { ETAG_UL_MU_POWER_CAPABILITIES60, "UL MU Power Capabilities" },
789 { ETAG_MSCS_DESCRIPTOR_ELEMENT88, "MSCS Descriptor Element" },
790 { ETAG_TCLAS_MASK89, "TCLAS Mask" },
791 { ETAG_REJECTED_GROUPS92, "Rejected Groups" },
792 { ETAG_ANTI_CLOGGING_TOKEN93, "Anti-Clogging Token Container" },
793 /* 802.11az */
794 { ETAG_SECURE_LTF_PARAMETERS94, "Secure LTF Parameters" },
795 { ETAG_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT95, "ISTA Passive TB Ranging Measurement Report" },
796 { ETAG_RSTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT96, "RSTA Passive TB Ranging Measurement Report" },
797 { ETAG_PASSIVE_TB_RANGING_LCI_TABLE_ELEMENT97, "Passive TB Ranging LCI Table element" },
798 { ETAG_ISTA_AVAILABILITY_WINDOW98, "ISTA Availability Window" },
799 { ETAG_RSTA_AVAILABILITY_WINDOW99, "RSTA Availability Window" },
800 { ETAG_PASN_PARAMETERS100, "PASN Parameters" },
801 { ETAG_RANGING_PARAMETERS101, "Ranging Parameters" },
802 { ETAG_DIRECTION_MEASUREMENT_RESULTS102, "Direction Measurement Results" },
803 { ETAG_MULTIPLE_AOD_FEEDBACK103, "Multiple AOD Feedback" },
804 { ETAG_MULTIPLE_BEST_AWV_ID104, "Multiple Best AWV ID" },
805 { ETAG_LOS_LIKELIHOOD105, "LOS Likelihood" },
806 { ETAG_EHT_OPERATION106, "EHT Operation (802.11be D3.0)" },
807 { ETAG_MULTI_LINK107, "Multi-Link (802.11be D3.0)" },
808 { ETAG_EHT_CAPABILITIES108, "EHT Capabilities (802.11be D3.0)" },
809 { ETAG_TID_TO_LINK_MAPPING109, "TID-To-Link Mapping (802.11be D3.0)" },
810 { ETAG_MULTI_LINK_TRAFFIC110, "Multi-Link Traffic Indication (802.11be D3.0)" },
811 { ETAG_QOS_CHARACTERISTICS113, "QoS Characteristics (802.11be D3.0)" },
812 { ETAG_AKM_SUITE_SELECTOR114, "AKM Suite Selector" },
813 { ETAG_MLO_LINK_INFORMATION133, "MLO Link Information (802.11be D3.0)" },
814 { ETAG_AID_BITMAP134, "AID Bitmap (802.11be D3.0)" },
815 { ETAG_BANDWIDTH_INDICATION135, "Bandwidth Indication (802.11be D3.0)" },
816 { ETAG_NONAP_STA_REGULATORY_CONNECT137, "Non-AP STA Regulatory Connectivity" },
817 { 0, NULL((void*)0) }
818};
819static value_string_ext tag_num_vals_eid_ext_ext = VALUE_STRING_EXT_INIT(tag_num_vals_eid_ext){ _try_val_to_str_ext_init, 0, (sizeof (tag_num_vals_eid_ext)
/ sizeof ((tag_num_vals_eid_ext)[0]))-1, tag_num_vals_eid_ext
, "tag_num_vals_eid_ext", ((void*)0) }
;
820
821static const value_string wfa_qos_subtype_vals[] = {
822 { 0, "DSCP Policy Query" },
823 { 1, "DSCP Policy Request" },
824 { 2, "DSCP Policy Response" },
825 { 0, NULL((void*)0) }
826};
827
828static const value_string wfa_action_subtype_vals[] = {
829 { WFA_SUBTYPE_ACTION_QOS_MGMT0x1A, "QoS Management" },
830 { 0, NULL((void*)0) }
831};
832
833const value_string wfa_subtype_vals[] = {
834 { WFA_SUBTYPE_SUBSCRIPTION_REMEDIATION0, "Subscription Remediation" },
835 { WFA_SUBTYPE_DEAUTHENTICATION_IMMINENT1, "Deauthentication Imminent" },
836 { WFA_WNM_SUBTYPE_NON_PREF_CHAN_REPORT2, "Non-preferred Channel Report" },
837 { WFA_WNM_SUBTYPE_CELL_DATA_CAPABILITIES3, "Cellular Data Capabilities" },
838 { WFA_SUBTYPE_P2P9, "P2P" },
839 { WFA_SUBTYPE_HS20_INDICATION16, "Hotspot 2.0 Indication" },
840 { WFA_SUBTYPE_NAN_IE19, "NAN" },
841 { WFA_SUBTYPE_OSEN20, "OSU Server-only l2 Encryption Network" },
842 { WFA_SUBTYPE_MBO_OCE22, "Multi Band Operation - Optimized Connectivity Experience"},
843 { WFA_SUBTYPE_WIFI_60G23, "60GHz Information Element" },
844 { WFA_SUBTYPE_NAN_ACTION24, "NAN Action" },
845 { WFA_SUBTYPE_DPP26, "Device Provisioning Protocol" },
846 { WFA_SUBTYPE_IEEE1905_MULTI_AP27, "IEEE1905 Multi-AP" },
847 { WFA_SUBTYPE_OWE_TRANSITION_MODE28, "OWE Transition Mode" },
848 { WFA_SUBTYPE_TRANSITION_DISABLE_KDE32, "Transition Disable KDE" },
849 { WFA_SUBTYPE_QOS_MGMT34, "QoS Management" },
850 { WFA_SUBTYPE_RSN_OVERRIDE41, "RSN Element Override" },
851 { WFA_SUBTYPE_RSN_OVERRIDE_242, "RSN Element Override 2" },
852 { WFA_SUBTYPE_RSNX_OVERRIDE43, "RSN Extension Element Override" },
853 { WFA_SUBTYPE_RSN_SELECTION44, "RSN Selection" },
854 { WFA_SUBTYPE_RSN_OVERRIDE_LINK_KDE45, "RSN Override Link KDE" },
855 { 0, NULL((void*)0) }
856};
857
858static const value_string wfa_anqp_subtype_vals[] = {
859 { WFA_ANQP_SUBTYPE_HS2017, "Hotspot 2.0 ANQP" },
860 { WFA_ANQP_SUBTYPE_MBO18, "Multi Band Operation ANQP" },
861 { 0, NULL((void*)0) }
862};
863
864#define DPP_CONFIGURATION_PROTOCOL0x01 0x01
865
866static const value_string dpp_subtype_vals[] = {
867 { DPP_CONFIGURATION_PROTOCOL0x01, "DPP Configuration Protocol" },
868 { 0, NULL((void*)0) }
869};
870
871/* ************************************************************************* */
872/* Supported Rates (7.3.2.2) */
873/* ************************************************************************* */
874
875static const value_string ieee80211_supported_rates_vals[] = {
876 { 0x02, "1" },
877 { 0x03, "1.5" },
878 { 0x04, "2" },
879 { 0x05, "2.5" },
880 { 0x06, "3" },
881 { 0x09, "4.5" },
882 { 0x0B, "5.5" },
883 { 0x0C, "6" },
884 { 0x12, "9" },
885 { 0x16, "11" },
886 { 0x18, "12" },
887 { 0x1B, "13.5" },
888 { 0x24, "18" },
889 { 0x2C, "22" },
890 { 0x30, "24" },
891 { 0x36, "27" },
892 { 0x42, "33" },
893 { 0x48, "36" },
894 { 0x60, "48" },
895 { 0x6C, "54" },
896 { 0x82, "1(B)" },
897 { 0x83, "1.5(B)" },
898 { 0x84, "2(B)" },
899 { 0x85, "2.5(B)" },
900 { 0x86, "3(B)" },
901 { 0x89, "4.5(B)" },
902 { 0x8B, "5.5(B)" },
903 { 0x8C, "6(B)" },
904 { 0x92, "9(B)" },
905 { 0x96, "11(B)" },
906 { 0x98, "12(B)" },
907 { 0x9B, "13.5(B)" },
908 { 0xA4, "18(B)" },
909 { 0xAC, "22(B)" },
910 { 0xB0, "24(B)" },
911 { 0xB6, "27(B)" },
912 { 0xC2, "33(B)" },
913 { 0xC8, "36(B)" },
914 { 0xE0, "48(B)" },
915 { 0xEC, "54(B)" },
916 /* BSS membership selector */
917 { 0xFA, "HE PHY" },
918 { 0xFB, "SAE Hash to Element Only" },
919 { 0xFC, "EPD" }, /* 802.11ak */
920 { 0xFD, "GLK" }, /* 802.11ak */
921 { 0xFE, "VHT PHY" },
922 { 0xFF, "HT PHY" },
923 { 0, NULL((void*)0)}
924};
925value_string_ext ieee80211_supported_rates_vals_ext = VALUE_STRING_EXT_INIT(ieee80211_supported_rates_vals){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_supported_rates_vals
) / sizeof ((ieee80211_supported_rates_vals)[0]))-1, ieee80211_supported_rates_vals
, "ieee80211_supported_rates_vals", ((void*)0) }
;
926
927/* ************************************************************************* */
928/* 8.4.1.7 Reason Code field */
929/* ************************************************************************* */
930static const value_string ieee80211_reason_code[] = {
931 { 1, "Unspecified reason" },
932 { 2, "Previous authentication no longer valid" },
933 { 3, "Deauthenticated because sending STA is leaving (or has left) the BSS" },
934 { 4, "Disassociated due to inactivity" },
935 { 5, "Disassociated because AP is unable to handle all currently associated STAs" },
936 { 6, "Class 2 frame received from nonauthenticated STA" },
937 { 7, "Class 3 frame received from nonassociated STA" },
938 { 8, "Disassociated because sending STA is leaving (or has left) BSS" },
939 { 9, "STA requesting (re)association is not authenticated with responding STA" },
940 { 10, "Disassociated because the information in the Power Capability element is unacceptable" },
941 { 11, "Disassociated because the information in the Supported Channels element is unacceptable" },
942 { 12, "Disassociated due to BSS transition management" },
943 { 13, "Invalid information element, i.e., an information element defined in this standard for which the content does not meet the specifications in Clause 9" },
944 { 14, "Message integrity code (MIC) failure" },
945 { 15, "4-way handshake timeout" },
946 { 16, "Group key handshake timeout" },
947 { 17, "Element in 4-way handshake different from (Re)Association Request/Probe Response/Beacon frame" },
948 { 18, "Invalid group cipher" },
949 { 19, "Invalid pairwise cipher" },
950 { 20, "Invalid AKMP" },
951 { 21, "Unsupported RSNE version" },
952 { 22, "Invalid RSNE capabilities" },
953 { 23, "IEEE 802.1X authentication failed" },
954 { 24, "Cipher suite rejected because of the security policy" },
955 { 25, "TDLS direct-link teardown due to TDLS peer STA unreachable via the TDLS direct link" },
956 { 26, "TDLS direct-link teardown for unspecified reason" },
957 { 27, "Disassociated because session terminated by SSP request" },
958 { 28, "Disassociated because of lack of SSP roaming agreement" },
959 { 29, "Requested service rejected because of SSP cipher suite or AKM requirement " },
960 { 30, "Requested service not authorized in this location" },
961 { 31, "TS deleted because QoS AP lacks sufficient bandwidth for this QoS STA due to a change in BSS service characteristics or operational mode" },
962 { 32, "Disassociated for unspecified, QoS-related reason" },
963 { 33, "Disassociated because QoS AP lacks sufficient bandwidth for this QoS STA" },
964 { 34, "Disassociated because excessive number of frames need to be acknowledged, but are not acknowledged due to AP transmissions and/or poor channel conditions" },
965 { 35, "Disassociated because STA is transmitting outside the limits of its TXOPs" },
966 { 36, "Requested from peer STA as the STA is leaving the BSS (or resetting)" },
967 { 37, "Requesting STA is no longer using the stream or session" },
968 { 38, "Requesting STA received frames using a mechanism for which a setup has not been completed" },
969 { 39, "Requested from peer STA due to timeout" },
970 { 46, "Disassociated because authorized access limit reached" },
971 { 47, "Disassociated due to external service requirements" },
972 { 48, "Invalid FT Action frame count" },
973 { 49, "Invalid pairwise master key identifier (PMKID)" },
974 { 50, "Invalid MDE" },
975 { 51, "Invalid FTE" },
976 { 52, "Mesh peering canceled for unknown reasons" },
977 { 53, "The mesh STA has reached the supported maximum number of peer mesh STAs" },
978 { 54, "The received information violates the Mesh Configuration policy configured in the mesh STA profile" },
979 { 55, "The mesh STA has received a Mesh Peering Close message requesting to close the mesh peering" },
980 { 56, "The mesh STA has re-sent dot11MeshMaxRetries Mesh Peering Open messages, without receiving a Mesh Peering Confirm message" },
981 { 57, "The confirmTimer for the mesh peering instance times out" },
982 { 58, "The mesh STA fails to unwrap the GTK or the values in the wrapped contents do not match" },
983 { 59, "The mesh STA receives inconsistent information about the mesh parameters between Mesh Peering Management frames" },
984 { 60, "The mesh STA fails the authenticated mesh peering exchange because due to failure in selecting either the pairwise ciphersuite or group ciphersuite" },
985 { 61, "The mesh STA does not have proxy information for this external destination" },
986 { 62, "The mesh STA does not have forwarding information for this destination" },
987 { 63, "The mesh STA determines that the link to the next hop of an active path in its forwarding information is no longer usable" },
988 { 64, "The Deauthentication frame was sent because the MAC address of the STA already exists in the mesh BSS. See 11.3.3 (Additional mechanisms for an AP collocated with a mesh STA)" },
989 { 65, "The mesh STA performs channel switch to meet regulatory requirements" },
990 { 66, "The mesh STA performs channel switch with unspecified reason" },
991 { 67, "Transmission link establishment in alternative channel failed" },
992 { 68, "The alternative channel is occupied" },
993 { 71, "Disassociated due to poor RSSI" },
994 { 0, NULL((void*)0)}
995};
996value_string_ext ieee80211_reason_code_ext = VALUE_STRING_EXT_INIT(ieee80211_reason_code){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_reason_code
) / sizeof ((ieee80211_reason_code)[0]))-1, ieee80211_reason_code
, "ieee80211_reason_code", ((void*)0) }
;
997
998/* ************************************************************************* */
999/* 8.4.1.9 Status Code field */
1000/* ************************************************************************* */
1001static const value_string ieee80211_status_code[] = {
1002 { 0, "Successful" },
1003 { 1, "Unspecified failure" },
1004 { 2, "TDLS wakeup schedule rejected but alternative schedule provided" },
1005 { 3, "TDLS wakeup schedule rejected" },
1006 { 4, "Reserved" },
1007 { 5, "Security disabled" },
1008 { 6, "Unacceptable lifetime" },
1009 { 7, "Not in same BSS" },
1010 { 8, "Reserved" },
1011 { 9, "Reserved" },
1012 { 10, "Cannot support all requested capabilities in the Capability Information field" },
1013 { 11, "Reassociation denied due to inability to confirm that association exists" },
1014 { 12, "Association denied due to reason outside the scope of this standard" },
1015 { 13, "Responding STA does not support the specified authentication algorithm" },
1016 { 14, "Received an Authentication frame with authentication transaction sequence number out of expected sequence" },
1017 { 15, "Authentication rejected because of challenge failure" },
1018 { 16, "Authentication rejected due to timeout waiting for next frame in sequence" },
1019 { 17, "Association denied because AP is unable to handle additional associated STAs" },
1020 { 18, "Association denied due to requesting STA not supporting all of the data rates in the BSSBasicRateSet parameter, the Basic HT-MCS Set field of the HT Operation parameter, or the Basic VHT-MCS and NSS Set field in the VHT Operation parameter" },
1021 { 19, "Association denied due to requesting STA not supporting the short preamble option" },
1022 { 20, "Reserved" },
1023 { 21, "Reserved" },
1024 { 22, "Association request rejected because spectrum management capability is required" },
1025 { 23, "Association request rejected because the information in the Power Capability element is unacceptable" },
1026 { 24, "Association request rejected because the information in the Supported Channels element is unacceptable" },
1027 { 25, "Association denied due to requesting STA not supporting short slot time" },
1028 { 26, "Reserved" },
1029 { 27, "Association denied because the requesting STA does not support HT features" },
1030 { 28, "R0KH unreachable" },
1031 { 29, "Reserved"},
1032 { 30, "Association request rejected temporarily; try again later" },
1033 { 31, "Robust management frame policy violation" },
1034 { 32, "Unspecified, QoS-related failure" },
1035 { 33, "Association denied because QoS AP or PCP has insufficient bandwidth to handle another QoS STA" },
1036 { 34, "Association denied due to excessive frame loss rates and/ or poor conditions on current operating channel" },
1037 { 35, "Association (with QoS BSS) denied because the requesting STA does not support the QoS facility" },
1038 { 36, "Reserved" },
1039 { 37, "The request has been declined" },
1040 { 38, "The request has not been successful as one or more parameters have invalid values" },
1041 { 39, "The allocation or TS has not been created because the request cannot be honored; however, a suggested TSPEC/DMG TSPEC is provided so that the initiating STA can attempt to set another allocation or TS with the suggested changes to the TSPEC/DMG TSPEC" },
1042 { 40, "Invalid element, i.e., an element defined in this standard for which the content does not meet the specifications in Clause 9 (Frame formats)" },
1043 { 41, "Invalid group cipher" },
1044 { 42, "Invalid pairwise cipher" },
1045 { 43, "Invalid AKMP" },
1046 { 44, "Unsupported RSNE version" },
1047 { 45, "Invalid RSNE capabilities" },
1048 { 46, "Cipher suite rejected because of security policy" },
1049 { 47, "The TS or allocation has not been created; however, the HC or PCP might be capable of creating a TS or allocation, in response to a request, after the time indicated in the TS Delay element" },
1050 { 48, "Reserved" },
1051 { 49, "The Destination STA is not present within this BSS" },
1052 { 50, "The Destination STA is not a QoS STA" },
1053 { 51, "Association denied because the listen interval is too large" },
1054 { 52, "Invalid FT Action frame count" },
1055 { 53, "Invalid pairwise master key identifier (PMKID)" },
1056 { 54, "Invalid MDE" },
1057 { 55, "Invalid FTE" },
1058 { 56, "Requested TCLAS processing is not supported by the AP or PCP" },
1059 { 57, "The AP or PCP has insufficient TCLAS processing resources to satisfy the request" },
1060 { 58, "The TS has not been created because the request cannot be honored; however, the HC or PCP suggests that the STA transition to a different BSS to set up the TS" },
1061 { 59, "GAS advertisement protocol not supported" },
1062 { 60, "No outstanding GAS request" },
1063 { 61, "GAS response not received from the advertisement server" },
1064 { 62, "STA timed out waiting for GAS query response" },
1065 { 63, "GAS response is larger than query response length limit" },
1066 { 64, "Request refused because home network does not support request" },
1067 { 65, "Advertisement server in the network is not currently reachable" },
1068 { 66, "Reserved" },
1069 { 67, "Request refused due to permissions received via SSPN interface" },
1070 { 68, "Request refused because the AP or PCP does not support unauthenticated access" },
1071 { 69, "Reserved" },
1072 { 70, "Reserved" },
1073 { 71, "Reserved" },
1074 { 72, "Invalid contents of RSNE, other than unsupported RSNE version or invalid RSNE capabilities, AKMP or pairwise cipher" },
1075 { 73, "U-APSD coexistence is not supported" },
1076 { 74, "Requested U-APSD coexistence mode is not supported" },
1077 { 75, "Requested interval/duration value cannot be supported with U-APSD coexistence" },
1078 { 76, "Authentication is rejected because an anti-clogging token is required" },
1079 { 77, "Authentication is rejected because the offered finite cyclic group is not supported" },
1080 { 78, "The TBTT adjustment request has not been successful because the STA could not find an alternative TBTT" },
1081 { 79, "Transmission failure" },
1082 { 80, "Requested TCLAS not supported" },
1083 { 81, "TCLAS resources exhausted" },
1084 { 82, "Rejected with suggested BSS transition" },
1085 { 83, "Reject with recommended schedule" },
1086 { 84, "Reject because no wakeup schedule specified" },
1087 { 85, "Success, the destination STA is in power save mode" },
1088 { 86, "FST pending, in process of admitting FST session" },
1089 { 87, "Performing FST now" },
1090 { 88, "FST pending, gap(s) in block ack window" },
1091 { 89, "Reject because of U-PID setting" },
1092 { 90, "Reserved" },
1093 { 91, "Reserved" },
1094 { 92, "(Re)Association refused for some external reason" },
1095 { 93, "(Re)Association refused because of memory limits at the AP" },
1096 { 94, "(Re)Association refused because emergency services are not supported at the AP" },
1097 { 95, "GAS query response not yet received" },
1098 { 96, "Reject since the request is for transition to a frequency band subject to DSE procedures and FST Initiator is a dependent STA" },
1099 { 97, "Requested TCLAS processing has been terminated by the AP" },
1100 { 98, "The TS schedule conflicts with an existing schedule; an alternative schedule is provided" },
1101 { 99, "The association has been denied; however, one or more Multi-band elements are included that can be used by the receiving STA to join the BSS" },
1102 { 100, "The request failed due to a reservation conflict" },
1103 { 101, "The request failed due to exceeded MAF limit" },
1104 { 102, "The request failed due to exceeded MCCA track limit" },
1105 { 103, "Association denied because the information in the Spectrum Management field is unacceptable" },
1106 { 104, "Association denied because the requesting STA does not support VHT features" },
1107 { 105, "Enablement denied" },
1108 { 106, "Enablement denied due to restriction from an authorized GDB" },
1109 { 107, "Authorization deenabled" },
1110 { 108, "Re(association) refused or disassociated because energy limited operation is not supported at the AP" },
1111 { 109, "BlockAck negotiation refused because, due to buffer constraints and other unspecified reasons, the recipient prefers to generate only NDP BlockAck frames" },
1112 { 110, "Association denied/disassociated because the suggested value for max away duration is unacceptable" },
1113 { 111, "Re(association) refused or disassociated because flow control operation is not supported by the non-AP STA" },
1114 { 112, "Authentication rejected due to FILS authentication failure" },
1115 { 113, "Authentication rejected due to unknown Authentication Server" },
1116 { 114, "Reserved" },
1117 { 115, "Reserved" },
1118 { 116, "Request denied because the allocation of notification period is failed" },
1119 { 117, "Request denied because the request of channel splitting is failed" },
1120 { 118, "Request denied because the allocation request is failed" },
1121 { 119, "Association denied because the requesting STA does not support CMMG features" },
1122 { 120, "The requested GAS fragment is not available" },
1123 { 121, "Success, the CAG Version provided by the requesting STA is the same as the latest CAG Version provided by the relevant server" },
1124 { 122, "The STA is not authorized to use GLK per local policy" },
1125 { 123, "Authentication rejected because the password identifier is unknown" },
1126 { 124, "Reserved"},
1127 { 125, "Request denied because source address of request is inconsistent with local MAC address policy" },
1128 { 126, "SAE authentication uses direct hashing, instead of looping, to obtain the PWE" },
1129 { 127, "Reserved"},
1130 { 128, "Requested TCLAS processing has been terminated by the AP due to insufficient QoS capacity" },
1131 { 129, "Requested TCLAS processing has been terminated by the AP due to conflict with higher layer QoS policies" },
1132 { 130, "Association denied because the requesting STA is affiliated with a non-AP MLD that is associated with the AP MLD"},
1133 { 131, "EPCS priority access denied because the non-AP MLD is not authorized to use the service"},
1134 { 132, "EPCS priority access denied due to reason outside the scope of this standard"},
1135 { 133, "Request denied because the requested TID-to-link mapping is unacceptable"},
1136 { 134, "Preferred TID-to-link mapping suggested"},
1137 { 135, "Association denied because the requesting STA does not support EHT features"},
1138 { 139, "Link not accepted because the link on which the (Re)Association Request frame is transmitted is not accepted"},
1139 { 140, "EPCS priority access is temporarily denied because the receiving AP MLD is unable to verify that the non-AP MLD is authorized for an unspecified reason"},
1140 { 141, "Operation parameter update denied because the requested operation parameters or capabilities are not acceptable"},
1141 { 0, NULL((void*)0)}
1142};
1143value_string_ext ieee80211_status_code_ext = VALUE_STRING_EXT_INIT(ieee80211_status_code){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_status_code
) / sizeof ((ieee80211_status_code)[0]))-1, ieee80211_status_code
, "ieee80211_status_code", ((void*)0) }
;
1144
1145static const value_string ieee80211_transition_reasons[] = {
1146 { 0, "Unspecified" },
1147 { 1, "Excessive frame loss rates and/or poor conditions" },
1148 { 2, "Excessive delay for current traffic streams" },
1149 { 3, "Insufficient QoS capacity for current traffic streams (TSPEC rejected)" },
1150 { 4, "First association to ESS (the association initiated by an Association Request frame instead of a Reassociation Request frame)" },
1151 { 5, "Load balancing" },
1152 { 6, "Better AP found" },
1153 { 7, "Deauthenticated or Disassociated from the previous AP" },
1154 { 8, "AP failed IEEE 802.1X EAP Authentication" },
1155 { 9, "AP failed 4-way handshake" },
1156 { 10, "Received too many replay counter failures" },
1157 { 11, "Received too many data MIC failures" },
1158 { 12, "Exceeded maximum number of retransmissions" },
1159 { 13, "Received too many broadcast disassociations" },
1160 { 14, "Received too many broadcast deauthentications" },
1161 { 15, "Previous transition failed" },
1162 { 16, "Low RSSI" },
1163 { 17, "Roam from a non-IEEE-802.11 system" },
1164 { 18, "Transition due to received BSS Transition Request frame" },
1165 { 19, "Preferred BSS transition candidate list included" },
1166 { 20, "Leaving ESS" },
1167 { 0, NULL((void*)0)}
1168};
1169/* ************************************************************************* */
1170/* Frame types, and their names */
1171/* ************************************************************************* */
1172static const value_string frame_type_subtype_vals[] = {
1173 {MGT_ASSOC_REQ0x00, "Association Request"},
1174 {MGT_ASSOC_RESP0x01, "Association Response"},
1175 {MGT_REASSOC_REQ0x02, "Reassociation Request"},
1176 {MGT_REASSOC_RESP0x03, "Reassociation Response"},
1177 {MGT_PROBE_REQ0x04, "Probe Request"},
1178 {MGT_PROBE_RESP0x05, "Probe Response"},
1179 {MGT_MEASUREMENT_PILOT0x06, "Measurement Pilot"},
1180 {MGT_BEACON0x08, "Beacon frame"},
1181 {MGT_ATIM0x09, "ATIM"},
1182 {MGT_DISASS0x0A, "Disassociate"},
1183 {MGT_AUTHENTICATION0x0B, "Authentication"},
1184 {MGT_DEAUTHENTICATION0x0C, "Deauthentication"},
1185 {MGT_ACTION0x0D, "Action"},
1186 {MGT_ACTION_NO_ACK0x0E, "Action No Ack"},
1187 {MGT_ARUBA_WLAN0x0F, "Aruba Management"},
1188
1189 {CTRL_TRIGGER0x12, "Trigger"},
1190 {CTRL_TACK0x13, "TWT Ack"},
1191 {CTRL_BEAMFORM_RPT_POLL0x14, "Beamforming Report Poll"},
1192 {CTRL_VHT_NDP_ANNC0x15, "VHT/HE/EHT/RANGING NDP Announcement"},
1193 {CTRL_CONTROL_WRAPPER0x17, "Control Wrapper"},
1194 {CTRL_BLOCK_ACK_REQ0x18, "802.11 Block Ack Req"},
1195 {CTRL_BLOCK_ACK0x19, "802.11 Block Ack"},
1196 {CTRL_PS_POLL0x1A, "Power-Save poll"},
1197 {CTRL_RTS0x1B, "Request-to-send"},
1198 {CTRL_CTS0x1C, "Clear-to-send"},
1199 {CTRL_ACKNOWLEDGEMENT0x1D, "Acknowledgement"},
1200 {CTRL_CFP_END0x1E, "CF-End (Control-frame)"},
1201 {CTRL_CFP_ENDACK0x1F, "CF-End + CF-Ack (Control-frame)"},
1202
1203 {DATA0x20, "Data"},
1204 {DATA_CF_ACK0x21, "Data + CF-Ack"},
1205 {DATA_CF_POLL0x22, "Data + CF-Poll"},
1206 {DATA_CF_ACK_POLL0x23, "Data + CF-Ack + CF-Poll"},
1207 {DATA_NULL_FUNCTION0x24, "Null function (No data)"},
1208 {DATA_CF_ACK_NOD0x25, "Acknowledgement (No data)"},
1209 {DATA_CF_POLL_NOD0x26, "CF-Poll (No data)"},
1210 {DATA_CF_ACK_POLL_NOD0x27, "CF-Ack/Poll (No data)"},
1211 {DATA_QOS_DATA0x28, "QoS Data"},
1212 {DATA_QOS_DATA_CF_ACK0x29, "QoS Data + CF-Acknowledgment"},
1213 {DATA_QOS_DATA_CF_POLL0x2A, "QoS Data + CF-Poll"},
1214 {DATA_QOS_DATA_CF_ACK_POLL0x2B, "QoS Data + CF-Ack + CF-Poll"},
1215 {DATA_QOS_NULL0x2C, "QoS Null function (No data)"},
1216 {DATA_QOS_CF_POLL_NOD0x2E, "QoS CF-Poll (No Data)"},
1217 {DATA_QOS_CF_ACK_POLL_NOD0x2F, "QoS CF-Ack + CF-Poll (No data)"},
1218
1219 {EXTENSION_DMG_BEACON0x30, "DMG Beacon"},
1220 {EXTENSION_S1G_BEACON0x31, "S1G Beacon"},
1221
1222 {CTRL_POLL0x162, "Poll"},
1223 {CTRL_SPR0x163, "Service Period Request"},
1224 {CTRL_GRANT0x164, "Grant"},
1225 {CTRL_DMG_CTS0x165, "DMG Clear-to-send"},
1226 {CTRL_DMG_DTS0x166, "DMG Denial-to-send"},
1227 {CTRL_GRANT_ACK0x167, "Grant Acknowledgment"},
1228 {CTRL_SSW0x168, "Sector Sweep"},
1229 {CTRL_SSW_FEEDBACK0x169, "Sector Sweep Feedback"},
1230 {CTRL_SSW_ACK0x16A, "Sector Sweep Acknowledgment"},
1231
1232 {0, NULL((void*)0)}
1233};
1234static value_string_ext frame_type_subtype_vals_ext = VALUE_STRING_EXT_INIT(frame_type_subtype_vals){ _try_val_to_str_ext_init, 0, (sizeof (frame_type_subtype_vals
) / sizeof ((frame_type_subtype_vals)[0]))-1, frame_type_subtype_vals
, "frame_type_subtype_vals", ((void*)0) }
;
1235
1236/* ************************************************************************* */
1237/* 802.1D Tag Name (by WME Access Category Names) */
1238/* ************************************************************************* */
1239static const value_string ieee80211_qos_tags_acs[] = {
1240 { 0, "Best Effort (Best Effort)" },
1241 { 1, "Background (Background)" },
1242 { 2, "Spare (Background)" },
1243 { 3, "Excellent Effort (Best Effort)" },
1244 { 4, "Controlled Load (Video)" },
1245 { 5, "Video (Video)" },
1246 { 6, "Voice (Voice)" },
1247 { 7, "Network Control (Voice)" },
1248 { 0, NULL((void*)0) }
1249};
1250
1251/* ************************************************************************* */
1252/* WME Access Category Names (by WME ACI) */
1253/* ************************************************************************* */
1254static const value_string wme_acs[] = {
1255 { 0, "Best Effort" },
1256 { 1, "Background" },
1257 { 2, "Video" },
1258 { 3, "Voice" },
1259 { 0, NULL((void*)0) }
1260};
1261
1262/* ************************************************************************* */
1263/* Aruba Management Type */
1264/* ************************************************************************* */
1265static const value_string aruba_mgt_typevals[] = {
1266 { 0x0001, "Hello" },
1267 { 0x0002, "Probe" },
1268 { 0x0003, "MTU" },
1269 { 0x0004, "Ageout" },
1270 { 0x0005, "Heartbeat" },
1271 { 0x0006, "Deauth" },
1272 { 0x0007, "Disassoc" },
1273 { 0x0008, "Probe response" },
1274 { 0x0009, "Tunnel update" },
1275 { 0x000A, "Laser beam active" },
1276 { 0x000B, "Client IP" },
1277 { 0x000C, "Laser beam active v2" },
1278 { 0x000D, "AP statistics" },
1279 { 0, NULL((void*)0) }
1280};
1281static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt_typevals){ _try_val_to_str_ext_init, 0, (sizeof (aruba_mgt_typevals) /
sizeof ((aruba_mgt_typevals)[0]))-1, aruba_mgt_typevals, "aruba_mgt_typevals"
, ((void*)0) }
;
1282
1283/*** Begin: Action Fixed Parameter ***/
1284#define CAT_SPECTRUM_MGMT0 0
1285#define CAT_QOS1 1
1286#define CAT_DLS2 2
1287#define CAT_BLOCK_ACK3 3
1288#define CAT_PUBLIC4 4
1289#define CAT_RADIO_MEASUREMENT5 5
1290#define CAT_FAST_BSS_TRANSITION6 6
1291#define CAT_HT7 7
1292#define CAT_SA_QUERY8 8
1293#define CAT_PUBLIC_PROTECTED9 9
1294#define CAT_WNM10 10
1295#define CAT_UNPROTECTED_WNM11 11
1296#define CAT_TDLS12 12
1297#define CAT_MESH13 13
1298#define CAT_MULTIHOP14 14
1299#define CAT_SELF_PROTECTED15 15
1300#define CAT_DMG16 16
1301#define CAT_MGMT_NOTIFICATION17 17
1302#define CAT_FAST_SESSION_TRANSFER18 18
1303#define CAT_ROBUST_AV_STREAMING19 19
1304#define CAT_UNPROTECTED_DMG20 20
1305#define CAT_VHT21 21
1306#define CAT_S1G22 22
1307#define CAT_PROTECTED_S1G23 23
1308#define CAT_FLOW_CONTROL24 24
1309#define CAT_CONTROL_RESPONSE_MCS_NEG25 25
1310#define CAT_FILS26 26
1311/* aj */
1312#define CAT_CDMG27 27
1313#define CAT_CMMG28 28
1314/* ak */
1315#define CAT_GLK29 29
1316
1317#define CAT_HE30 30
1318#define CAT_PROTECTED_HE31 31
1319#define CAT_PROTECTED_FTM34 34
1320#define CAT_EHT36 36
1321#define CAT_PROTECTED_EHT37 37
1322#define CAT_VENDOR_SPECIFIC_PROTECTED126 126
1323#define CAT_VENDOR_SPECIFIC127 127
1324
1325#define CAT_MESH_LINK_METRIC31 31
1326#define CAT_MESH_PATH_SELECTION32 32
1327#define CAT_MESH_INTERWORKING33 33
1328#define CAT_MESH_RESOURCE_COORDINATION34 34
1329#define CAT_MESH_SECURITY_ARCHITECTURE35 35
1330
1331#define SM_ACTION_MEASUREMENT_REQUEST0 0
1332#define SM_ACTION_MEASUREMENT_REPORT1 1
1333#define SM_ACTION_TPC_REQUEST2 2
1334#define SM_ACTION_TPC_REPORT3 3
1335#define SM_ACTION_CHAN_SWITCH_ANNC4 4
1336#define SM_ACTION_EXT_CHAN_SWITCH_ANNC5 5
1337
1338#define QOS_ACTION_ADDTS_REQUEST0 0
1339#define QOS_ACTION_ADDTS_RESPONSE1 1
1340#define QOS_ACTION_DELTS2 2
1341#define QOS_ACTION_SCHEDULE3 3
1342#define QOS_ACTION_MAP_CONFIGURE4 4
1343
1344#define DLS_ACTION_REQUEST0 0
1345#define DLS_ACTION_RESPONSE1 1
1346#define DLS_ACTION_TEARDOWN2 2
1347
1348#define BA_ADD_BLOCK_ACK_REQUEST0 0
1349#define BA_ADD_BLOCK_ACK_RESPONSE1 1
1350#define BA_DELETE_BLOCK_ACK2 2
1351
1352#define BA_NDP_ADD_BLOCK_ACK_REQUEST128 128
1353#define BA_NDP_ADD_BLOCK_ACK_RESPONSE129 129
1354#define BA_NDP_DELETE_BLOCK_ACK130 130
1355#define BA_BAT_ADD_BLOCK_ACK_REQUEST132 132
1356#define BA_BAT_ADD_BLOCK_ACK_RESPONSE133 133
1357#define BA_BAT_DELETE_BLOCK_ACK134 134
1358
1359#define BA_ADD_BLOCK_ACK_REQUEST0 0
1360#define BA_ADD_BLOCK_ACK_RESPONSE1 1
1361#define BA_DELETE_BLOCK_ACK2 2
1362
1363/* Keep in sync with PPA_* defines */
1364#define PA_20_40_BSS_COEXISTENCE_MANAGEMENT0 0
1365#define PA_DSE_ENABLEMENT1 1
1366#define PA_DSE_DEENABLEMENT2 2
1367#define PA_DSE_REG_LOC_ANNOUNCEMENT3 3
1368#define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4 4
1369#define PA_DSE_MEASUREMENT_REQUEST5 5
1370#define PA_DSE_MEASUREMENT_REPORT6 6
1371#define PA_MEASUREMENT_PILOT7 7
1372#define PA_DSE_POWER_CONSTRAINT8 8
1373#define PA_VENDOR_SPECIFIC9 9
1374#define PA_GAS_INITIAL_REQUEST10 10
1375#define PA_GAS_INITIAL_RESPONSE11 11
1376#define PA_GAS_COMEBACK_REQUEST12 12
1377#define PA_GAS_COMEBACK_RESPONSE13 13
1378#define PA_TDLS_DISCOVERY_RESPONSE14 14
1379#define PA_LOCATION_TRACK_NOTIFICATION15 15
1380#define PA_QAB_REQUEST16 16
1381#define PA_QAB_RESPONSE17 17
1382#define PA_QMF_POLICY18 18
1383#define PA_QMF_POLICY_CHANGE19 19
1384#define PA_QLOAD_REQUEST20 20
1385#define PA_QLOAD_REPORT21 21
1386#define PA_HCCA_TXOP_ADVERTISEMENT22 22
1387#define PA_HCCA_TXOP_RESPONSE23 23
1388#define PA_PUBLIC_KEY24 24
1389#define PA_CHANNEL_AVAILABILITY_QUERY25 25
1390#define PA_CHANNEL_SCHEDULE_MANAGEMENT26 26
1391#define PA_CONTACT_VERIFICATION_SIGNAL27 27
1392#define PA_GDD_ENABLEMENT_REQUEST28 28
1393#define PA_GDD_ENABLEMENT_RESPONSE29 29
1394#define PA_NETWORK_CHANNEL_CONTROL30 30
1395#define PA_WHITE_SPACE_MAP_ANNOUNCEMENT31 31
1396#define PA_FTM_REQUEST32 32
1397#define PA_FTM33 33
1398#define PA_FILS_DISCOVERY34 34
1399/* 802.11aj */
1400#define PA_DCS_MEASUREMENT_REQUEST35 35
1401#define PA_DCS_MEASUREMENT_REPORT36 36
1402#define PA_DCS_REQUEST37 37
1403#define PA_DCS_RESPONSE38 38
1404#define PA_EXTENDED_NOTIFICATION_PERIOD_REQUEST39 39
1405#define PA_EXTENDED_NOTIFICATION_PERIOD_RESPONSE40 40
1406#define PA_EXTENDED_CHANNEL_SPLITTING_REQUEST41 41
1407#define PA_EXTENDED_CHANNEL_SPLITTING_RESPONSE42 42
1408/* 802.11aq */
1409#define PA_GROUP_ADDRESSED_GAS_REQUEST43 43
1410#define PA_GROUP_ADDRESSED_GAS_RESPONSE44 44
1411/* Unknown */
1412#define PA_ON_CHANNEL_TUNNEL_REQUEST45 45
1413#define PA_VALUE_4646 46
1414/* 802.11az */
1415#define PA_LOCATION_MEASUREMENT_REPORT47 47
1416#define PA_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT48 48
1417#define PA_PRIMARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT49 49
1418#define PA_SECONDARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT50 50
1419
1420/* Keep in sync with PA_* defines */
1421#define PPA_DSE_ENABLEMENT1 1
1422#define PPA_DSE_DEENABLEMENT2 2
1423#define PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4 4
1424#define PPA_DSE_MEASUREMENT_REQUEST5 5
1425#define PPA_DSE_MEASUREMENT_REPORT6 6
1426#define PPA_DSE_POWER_CONSTRAINT8 8
1427#define PPA_VENDOR_SPECIFIC9 9
1428#define PPA_GAS_INITIAL_REQUEST10 10
1429#define PPA_GAS_INITIAL_RESPONSE11 11
1430#define PPA_GAS_COMEBACK_REQUEST12 12
1431#define PPA_GAS_COMEBACK_RESPONSE13 13
1432#define PPA_QAB_REQUEST16 16
1433#define PPA_QAB_RESPONSE17 17
1434
1435#define HT_ACTION_NOTIFY_CHAN_WIDTH0 0
1436#define HT_ACTION_SM_PWR_SAVE1 1
1437#define HT_ACTION_PSMP_ACTION2 2
1438#define HT_ACTION_SET_PCO_PHASE3 3
1439#define HT_ACTION_MIMO_CSI4 4
1440#define HT_ACTION_MIMO_BEAMFORMING5 5
1441#define HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6 6
1442#define HT_ACTION_ANT_SEL_FEEDBACK7 7
1443#define HT_ACTION_HT_INFO_EXCHANGE8 8
1444
1445#define DMG_ACTION_PWR_SAVE_CONFIG_REQ0 0
1446#define DMG_ACTION_PWR_SAVE_CONFIG_RES1 1
1447#define DMG_ACTION_INFO_REQ2 2
1448#define DMG_ACTION_INFO_RES3 3
1449#define DMG_ACTION_HANDOVER_REQ4 4
1450#define DMG_ACTION_HANDOVER_RES5 5
1451#define DMG_ACTION_DTP_REQ6 6
1452#define DMG_ACTION_DTP_RES7 7
1453#define DMG_ACTION_RELAY_SEARCH_REQ8 8
1454#define DMG_ACTION_RELAY_SEARCH_RES9 9
1455#define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10 10
1456#define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11 11
1457#define DMG_ACTION_RLS_REQ12 12
1458#define DMG_ACTION_RLS_RES13 13
1459#define DMG_ACTION_RLS_ANNOUNCE14 14
1460#define DMG_ACTION_RLS_TEARDOWN15 15
1461#define DMG_ACTION_RELAY_ACK_REQ16 16
1462#define DMG_ACTION_RELAY_ACK_RES17 17
1463#define DMG_ACTION_TPA_REQ18 18
1464#define DMG_ACTION_TPA_RES19 19
1465#define DMG_ACTION_TPA_REP20 20
1466#define DMG_ACTION_ROC_REQ21 21
1467#define DMG_ACTION_ROC_RES22 22
1468
1469#define UNPROTECTED_DMG_ANNOUNCE0 0
1470#define UNPROTECTED_DMG_BRP1 1
1471
1472#define FST_SETUP_REQUEST0 0
1473#define FST_SETUP_RESPONSE1 1
1474#define FST_TEAR_DOWN2 2
1475#define FST_ACK_REQUEST3 3
1476#define FST_ACK_RESPONSE4 4
1477#define FST_ON_CHANNEL_TUNNEL_REQUEST5 5
1478
1479#define ROBUST_AV_STREAMING_SCS_REQUEST0 0
1480#define ROBUST_AV_STREAMING_SCS_RESPONSE1 1
1481#define ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_REQ2 2
1482#define ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_RSP3 3
1483#define ROBUST_AV_STREAMING_MSCS_REQUEST4 4
1484#define ROBUST_AV_STREAMING_MSCS_RESPONSE5 5
1485
1486
1487/* IEEE Std 802.11r-2008, 7.4.8, Table 7-57g */
1488#define FT_ACTION_REQUEST1 1
1489#define FT_ACTION_RESPONSE2 2
1490#define FT_ACTION_CONFIRM3 3
1491#define FT_ACTION_ACK4 4
1492
1493/* SA Query Action frame codes (IEEE 802.11w-2009, 7.4.9) */
1494#define SA_QUERY_REQUEST0 0
1495#define SA_QUERY_RESPONSE1 1
1496
1497/* IEEE Std 802.11z-2010, 7.4.11, Table 7-57v1 */
1498#define TDLS_SETUP_REQUEST0 0
1499#define TDLS_SETUP_RESPONSE1 1
1500#define TDLS_SETUP_CONFIRM2 2
1501#define TDLS_TEARDOWN3 3
1502#define TDLS_PEER_TRAFFIC_INDICATION4 4
1503#define TDLS_CHANNEL_SWITCH_REQUEST5 5
1504#define TDLS_CHANNEL_SWITCH_RESPONSE6 6
1505#define TDLS_PEER_PSM_REQUEST7 7
1506#define TDLS_PEER_PSM_RESPONSE8 8
1507#define TDLS_PEER_TRAFFIC_RESPONSE9 9
1508#define TDLS_DISCOVERY_REQUEST10 10
1509
1510/* IEEE Std 802.11-2012, 8.5.7.1, Table 8-206 */
1511#define RM_ACTION_RADIO_MEASUREMENT_REQUEST0 0
1512#define RM_ACTION_RADIO_MEASUREMENT_REPORT1 1
1513#define RM_ACTION_LINK_MEASUREMENT_REQUEST2 2
1514#define RM_ACTION_LINK_MEASUREMENT_REPORT3 3
1515#define RM_ACTION_NEIGHBOR_REPORT_REQUEST4 4
1516#define RM_ACTION_NEIGHBOR_REPORT_RESPONSE5 5
1517
1518/* 11s draft 12.0, table 7-57v30 */
1519#define MESH_ACTION_LINK_METRIC_REPORT0 0
1520#define MESH_ACTION_HWMP1 1
1521#define MESH_ACTION_GATE_ANNOUNCE2 2
1522#define MESH_ACTION_CONGESTION_CTL3 3
1523#define MESH_ACTION_MCCA_SETUP_REQUEST4 4
1524#define MESH_ACTION_MCCA_SETUP_REPLY5 5
1525#define MESH_ACTION_MCCA_ADV_REQUEST6 6
1526#define MESH_ACTION_MCCA_ADV7 7
1527#define MESH_ACTION_MCCA_TEARDOWN8 8
1528#define MESH_ACTION_TBTT_ADJ_REQUEST9 9
1529#define MESH_ACTION_TBTT_ADJ_RESPONSE10 10
1530
1531/* 11s draft 12.0, table 7-57v42: Multihop Action field values */
1532#define MULTIHOP_ACTION_PROXY_UPDATE0 0
1533#define MULTIHOP_ACTION_PROXY_UPDATE_CONF1 1
1534
1535/* 11s draft 12.0, table 7-57v24: Self-protected Action field values */
1536#define SELFPROT_ACTION_MESH_PEERING_OPEN1 1
1537#define SELFPROT_ACTION_MESH_PEERING_CONFIRM2 2
1538#define SELFPROT_ACTION_MESH_PEERING_CLOSE3 3
1539#define SELFPROT_ACTION_MESH_GROUP_KEY_INFORM4 4
1540#define SELFPROT_ACTION_MESH_GROUP_KEY_ACK5 5
1541
1542/* 11s draft 12.0, table 7-43bj6: Mesh Peering Protocol Identifier field values */
1543#define MESH_PEERING_PROTO_MGMT0 0
1544#define MESH_PEERING_PROTO_AMPE1 1
1545#define MESH_PEERING_PROTO_VENDOR255 255
1546
1547/* Vendor actions */
1548/* MARVELL */
1549#define MRVL_ACTION_MESH_MANAGEMENT1 1
1550
1551#define MRVL_MESH_MGMT_ACTION_RREQ0 0
1552#define MRVL_MESH_MGMT_ACTION_RREP1 1
1553#define MRVL_MESH_MGMT_ACTION_RERR2 2
1554#define MRVL_MESH_MGMT_ACTION_PLDM3 3
1555
1556#define ANQP_INFO_ANQP_QUERY_LIST256 256
1557#define ANQP_INFO_ANQP_CAPAB_LIST257 257
1558#define ANQP_INFO_VENUE_NAME_INFO258 258
1559#define ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO259 259
1560#define ANQP_INFO_NETWORK_AUTH_TYPE_INFO260 260
1561#define ANQP_INFO_ROAMING_CONSORTIUM_LIST261 261
1562#define ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262 262
1563#define ANQP_INFO_NAI_REALM_LIST263 263
1564#define ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264 264
1565#define ANQP_INFO_AP_GEOSPATIAL_LOCATION265 265
1566#define ANQP_INFO_AP_CIVIC_LOCATION266 266
1567#define ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI267 267
1568#define ANQP_INFO_DOMAIN_NAME_LIST268 268
1569#define ANQP_INFO_EMERGENCY_ALERT_ID_URI269 269
1570#define ANQP_INFO_TDLS_CAPAB_INFO270 270
1571#define ANQP_INFO_EMERGENCY_NAI271 271
1572#define ANQP_INFO_NEIGHBOR_REPORT272 272
1573#define ANQP_INFO_QUERY_AP_LIST273 273
1574#define ANQP_INFO_AP_LIST_RESPONSE274 274
1575#define ANQP_INFO_FILS_REALM_INFO275 275
1576#define ANQP_INFO_CAG276 276
1577#define ANQP_INFO_VENUE_URL277 277
1578#define ANQP_INFO_ADVICE_OF_CHARGE278 278
1579#define ANQP_INFO_LOCAL_CONTENT279 279
1580#define ANQP_INFO_NETWORK_AUTH_TYPE_TIMESTAMP280 280
1581#define ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797 56797
1582
1583/* ANQP information ID - IEEE Std 802.11u-2011 - Table 7-43bk */
1584static const value_string anqp_info_id_vals[] = {
1585 {ANQP_INFO_ANQP_QUERY_LIST256, "ANQP Query list"},
1586 {ANQP_INFO_ANQP_CAPAB_LIST257, "ANQP Capability list"},
1587 {ANQP_INFO_VENUE_NAME_INFO258, "Venue Name information"},
1588 {ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO259, "Emergency Call Number information"},
1589 {ANQP_INFO_NETWORK_AUTH_TYPE_INFO260,
1590 "Network Authentication Type information"},
1591 {ANQP_INFO_ROAMING_CONSORTIUM_LIST261, "Roaming Consortium list"},
1592 {ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262,
1593 "IP Address Type Availability information"},
1594 {ANQP_INFO_NAI_REALM_LIST263, "NAI Realm list"},
1595 {ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264, "3GPP Cellular Network information"},
1596 {ANQP_INFO_AP_GEOSPATIAL_LOCATION265, "AP Geospatial Location"},
1597 {ANQP_INFO_AP_CIVIC_LOCATION266, "AP Civic Location"},
1598 {ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI267, "AP Location Public Identifier URI"},
1599 {ANQP_INFO_DOMAIN_NAME_LIST268, "Domain Name list"},
1600 {ANQP_INFO_EMERGENCY_ALERT_ID_URI269, "Emergency Alert Identifier URI"},
1601 {ANQP_INFO_TDLS_CAPAB_INFO270, "TDLS Capability information"},
1602 {ANQP_INFO_EMERGENCY_NAI271, "Emergency NAI"},
1603 {ANQP_INFO_NEIGHBOR_REPORT272, "Neighbor Report"},
1604 {ANQP_INFO_QUERY_AP_LIST273, "Query AP List"},
1605 {ANQP_INFO_AP_LIST_RESPONSE274, "AP List Response"},
1606 {ANQP_INFO_FILS_REALM_INFO275, "FILS Realm Info"},
1607 {ANQP_INFO_CAG276, "CAG"},
1608 {ANQP_INFO_VENUE_URL277, "Venue URL"},
1609 {ANQP_INFO_ADVICE_OF_CHARGE278, "Advice of Charge"},
1610 {ANQP_INFO_LOCAL_CONTENT279, "Local Content"},
1611 {ANQP_INFO_NETWORK_AUTH_TYPE_TIMESTAMP280,
1612 "Network Authentication Type with Timestamp"},
1613 {ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797, "ANQP vendor-specific list"},
1614 {0, NULL((void*)0)}
1615};
1616static value_string_ext anqp_info_id_vals_ext = VALUE_STRING_EXT_INIT(anqp_info_id_vals){ _try_val_to_str_ext_init, 0, (sizeof (anqp_info_id_vals) / sizeof
((anqp_info_id_vals)[0]))-1, anqp_info_id_vals, "anqp_info_id_vals"
, ((void*)0) }
;
1617
1618/* IEEE 802.11v - WNM Action field values */
1619enum wnm_action {
1620 WNM_EVENT_REQ = 0,
1621 WNM_EVENT_REPORT = 1,
1622 WNM_DIAGNOSTIC_REQ = 2,
1623 WNM_DIAGNOSTIC_REPORT = 3,
1624 WNM_LOCATION_CFG_REQ = 4,
1625 WNM_LOCATION_CFG_RESP = 5,
1626 WNM_BSS_TRANS_MGMT_QUERY = 6,
1627 WNM_BSS_TRANS_MGMT_REQ = 7,
1628 WNM_BSS_TRANS_MGMT_RESP = 8,
1629 WNM_FMS_REQ = 9,
1630 WNM_FMS_RESP = 10,
1631 WNM_COLLOCATED_INTERFERENCE_REQ = 11,
1632 WNM_COLLOCATED_INTERFERENCE_REPORT = 12,
1633 WNM_TFS_REQ = 13,
1634 WNM_TFS_RESP = 14,
1635 WNM_TFS_NOTIFY = 15,
1636 WNM_SLEEP_MODE_REQ = 16,
1637 WNM_SLEEP_MODE_RESP = 17,
1638 WNM_TIM_BROADCAST_REQ = 18,
1639 WNM_TIM_BROADCAST_RESP = 19,
1640 WNM_QOS_TRAFFIC_CAPAB_UPDATE = 20,
1641 WNM_CHANNEL_USAGE_REQ = 21,
1642 WNM_CHANNEL_USAGE_RESP = 22,
1643 WNM_DMS_REQ = 23,
1644 WNM_DMS_RESP = 24,
1645 WNM_TIMING_MEASUREMENT_REQ = 25,
1646 WNM_NOTIFICATION_REQ = 26,
1647 WNM_NOTIFICATION_RESP = 27
1648};
1649
1650static const value_string wnm_action_codes[] = {
1651 { WNM_EVENT_REQ, "Event Request" },
1652 { WNM_EVENT_REPORT, "Event Report" },
1653 { WNM_DIAGNOSTIC_REQ, "Diagnostic Request" },
1654 { WNM_DIAGNOSTIC_REPORT, "Diagnostic Report" },
1655 { WNM_LOCATION_CFG_REQ, "Location Configuration Request" },
1656 { WNM_LOCATION_CFG_RESP, "Location Configuration Response" },
1657 { WNM_BSS_TRANS_MGMT_QUERY, "BSS Transition Management Query" },
1658 { WNM_BSS_TRANS_MGMT_REQ, "BSS Transition Management Request" },
1659 { WNM_BSS_TRANS_MGMT_RESP, "BSS Transition Management Response" },
1660 { WNM_FMS_REQ, "FMS Request" },
1661 { WNM_FMS_RESP, "FMS Response" },
1662 { WNM_COLLOCATED_INTERFERENCE_REQ, "Collocated Interference Request" },
1663 { WNM_COLLOCATED_INTERFERENCE_REPORT, "Collocated Interference Report" },
1664 { WNM_TFS_REQ, "TFS Request" },
1665 { WNM_TFS_RESP, "TFS Response" },
1666 { WNM_TFS_NOTIFY, "TFS Notify" },
1667 { WNM_SLEEP_MODE_REQ, "WNM-Sleep Mode Request" },
1668 { WNM_SLEEP_MODE_RESP, "WNM-Sleep Mode Response" },
1669 { WNM_TIM_BROADCAST_REQ, "TIM Broadcast Request" },
1670 { WNM_TIM_BROADCAST_RESP, "TIM Broadcast Response" },
1671 { WNM_QOS_TRAFFIC_CAPAB_UPDATE, "QoS Traffic Capability Update" },
1672 { WNM_CHANNEL_USAGE_REQ, "Channel Usage Request" },
1673 { WNM_CHANNEL_USAGE_RESP, "Channel Usage Response" },
1674 { WNM_DMS_REQ, "DMS Request" },
1675 { WNM_DMS_RESP, "DMS Response" },
1676 { WNM_TIMING_MEASUREMENT_REQ, "Timing Measurement Request" },
1677 { WNM_NOTIFICATION_REQ, "WNM-Notification Request" },
1678 { WNM_NOTIFICATION_RESP, "WNM-Notification Response" },
1679 { 0, NULL((void*)0) }
1680};
1681static value_string_ext wnm_action_codes_ext = VALUE_STRING_EXT_INIT(wnm_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (wnm_action_codes) / sizeof
((wnm_action_codes)[0]))-1, wnm_action_codes, "wnm_action_codes"
, ((void*)0) }
;
1682
1683enum unprotected_wnm_action {
1684 UNPROTECTED_WNM_TIM = 0,
1685 UNPROTECTED_WNM_TIMING_MEASUREMENT = 1
1686};
1687
1688static const value_string unprotected_wnm_action_codes[] = {
1689 { UNPROTECTED_WNM_TIM, "TIM" },
1690 { UNPROTECTED_WNM_TIMING_MEASUREMENT, "Timing Measurement" },
1691 { 0, NULL((void*)0) }
1692};
1693static value_string_ext unprotected_wnm_action_codes_ext = VALUE_STRING_EXT_INIT(unprotected_wnm_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (unprotected_wnm_action_codes
) / sizeof ((unprotected_wnm_action_codes)[0]))-1, unprotected_wnm_action_codes
, "unprotected_wnm_action_codes", ((void*)0) }
;
1694
1695static const value_string wnm_notification_types[] = {
1696 { 0, "Firmware Update Notification" },
1697 { 1, "Reserved for use by WFA" },
1698 { 221, "Vendor Specific" },
1699 { 0, NULL((void*)0) }
1700};
1701
1702static value_string_ext wnm_notification_types_ext =
1703 VALUE_STRING_EXT_INIT(wnm_notification_types){ _try_val_to_str_ext_init, 0, (sizeof (wnm_notification_types
) / sizeof ((wnm_notification_types)[0]))-1, wnm_notification_types
, "wnm_notification_types", ((void*)0) }
;
1704
1705static const range_string wnm_notification_response_code[] = {
1706 { 0, 0, "Notification Acknowledged" },
1707 { 1, 255, "Reserved" },
1708 { 0, 0, NULL((void*)0) }
1709};
1710
1711/*** End: Action Fixed Parameter ***/
1712
1713static const value_string ieee80211_tag_measure_request_type_flags[] = {
1714 {0x00, "Basic Request"},
1715 {0x01, "Clear Channel Assessment (CCA) Request"},
1716 {0x02, "Receive Power Indication (RPI) Histogram Request"},
1717 {0x03, "Channel Load Request"},
1718 {0x04, "Noise Histogram Request"},
1719 {0x05, "Beacon Request"},
1720 {0x06, "Frame Request"},
1721 {0x07, "STA Statistics Request"},
1722 {0x08, "Location Configuration Indication (LCI) Request"},
1723 {0x09, "Transmit Stream Measurement Request"},
1724 {0x0a, "Multicast Diagnostics Request"},
1725 {0x0b, "Location Civic Request"},
1726 {0x0c, "Location Identifier Request"},
1727 {0x0d, "Directional Channel Quality Request"},
1728 {0x0e, "Directional Measurement Request"},
1729 {0x0f, "Directional Statistics Request"},
1730 {0x10, "Fine Timing Measurement Range Request"},
1731 {0xFF, "Measurement Pause Request"},
1732 {0x00, NULL((void*)0)}
1733};
1734static value_string_ext ieee80211_tag_measure_request_type_flags_ext =
1735 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_type_flags){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_tag_measure_request_type_flags
) / sizeof ((ieee80211_tag_measure_request_type_flags)[0]))-1
, ieee80211_tag_measure_request_type_flags, "ieee80211_tag_measure_request_type_flags"
, ((void*)0) }
;
1736
1737static const value_string ieee80211_tag_measure_report_type_flags[] = {
1738 { 0x00, "Basic Report" },
1739 { 0x01, "Clear Channel Assessment (CCA) Report" },
1740 { 0x02, "Receive Power Indication (RPI) Histogram Report" },
1741 { 0x03, "Channel Load Report" },
1742 { 0x04, "Noise Histogram Report" },
1743 { 0x05, "Beacon Report" },
1744 { 0x06, "Frame Report" },
1745 { 0x07, "STA Statistics Report" },
1746 { 0x08, "Location Configuration Information (LCI) Report" },
1747 { 0x09, "Transmit Stream Measurement Report" },
1748 { 0x0a, "Multicast Diagnostics Report"},
1749 { 0x0b, "Location Civic Report"},
1750 { 0x0c, "Location Identifier Report"},
1751 { 0x0d, "Directional Channel Quality Report"},
1752 { 0x0e, "Directional Measurement Report"},
1753 { 0x0f, "Directional Statistics Report"},
1754 { 0x10, "Fine Timing Measurement Range Report"},
1755 { 0x00, NULL((void*)0) }
1756};
1757static value_string_ext ieee80211_tag_measure_report_type_flags_ext =
1758 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_report_type_flags){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_tag_measure_report_type_flags
) / sizeof ((ieee80211_tag_measure_report_type_flags)[0]))-1,
ieee80211_tag_measure_report_type_flags, "ieee80211_tag_measure_report_type_flags"
, ((void*)0) }
;
1759
1760static const true_false_string ieee80211_tag_measure_report_frame_info_frame_type_flag = {
1761 "Measurement Pilot Frame",
1762 "Beacon/Probe Response Frame"
1763};
1764
1765static const true_false_string ig_tfs = {
1766 "Group address (multicast/broadcast)",
1767 "Individual address (unicast)"
1768};
1769
1770static const true_false_string lg_tfs = {
1771 "Locally administered address (this is NOT the factory default)",
1772 "Globally unique address (factory default)"
1773};
1774
1775static const true_false_string ieee80211_tag_measure_map_field_bss_flag = {
1776 "At least one valid MPDU was received by another BSS or IBSS during the measurement period.",
1777 "No valid MPDUs were received from another BSS or IBSS during the measurement period."
1778};
1779
1780static const value_string ieee80211_tag_measure_request_measurement_mode_flags[] = {
1781 { 0x00, "Passive" },
1782 { 0x01, "Active" },
1783 { 0x02, "Beacon Table" },
1784 { 0x00, NULL((void*)0) }
1785};
1786
1787#define MEASURE_REQ_BEACON_SUB_SSID0 0
1788#define MEASURE_REQ_BEACON_SUB_BRI1 1
1789#define MEASURE_REQ_BEACON_SUB_RD2 2
1790#define MEASURE_REQ_BEACON_SUB_REQUEST10 10
1791#define MEASURE_REQ_BEACON_SUB_REQUEST_EXT11 11
1792#define MEASURE_REQ_BEACON_SUB_APCP51 51
1793#define MEASURE_REQ_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163 163
1794#define MEASURE_REQ_BEACON_SUB_LAST_REPORT_REQ164 164
1795#define MEASURE_REQ_BEACON_SUB_VS221 221
1796
1797static const value_string ieee80211_tag_measure_request_beacon_sub_id_flags[] = {
1798 { MEASURE_REQ_BEACON_SUB_SSID0, "SSID" },
1799 { MEASURE_REQ_BEACON_SUB_BRI1, "Beacon Reporting Information" },
1800 { MEASURE_REQ_BEACON_SUB_RD2, "Reporting Detail" },
1801 { MEASURE_REQ_BEACON_SUB_REQUEST10, "Request" },
1802 { MEASURE_REQ_BEACON_SUB_REQUEST_EXT11, "Extended Request" },
1803 { MEASURE_REQ_BEACON_SUB_APCP51, "AP Channel Report" },
1804 { MEASURE_REQ_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163, "Wide Channel Bandwidth Switch" },
1805 { MEASURE_REQ_BEACON_SUB_LAST_REPORT_REQ164, "Last Beacon Report Indication Request" },
1806 { MEASURE_REQ_BEACON_SUB_VS221, "Vendor Specific" },
1807 { 0x00, NULL((void*)0)}
1808};
1809
1810static const value_string ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags[] = {
1811 { 0x00, "Report to be issued after each measurement." },
1812 { 0x01, "The measured RCPI level is greater than an absolute threshold." },
1813 { 0x02, "The measured RCPI level is less than an absolute threshold." },
1814 { 0x03, "The measured RSNI level is greater than an absolute threshold." },
1815 { 0x04, "The measured RSNI level is less than an absolute threshold." },
1816 { 0x05, "The measured RCPI level is greater than a threshold defined by an offset from the serving AP's reference RCPI." },
1817 { 0x06, "The measured RCPI level is less than a threshold defined by an offset from the serving AP's reference RCPI." },
1818 { 0x07, "The measured RSNI level is greater than a threshold defined by an offset from the serving AP's reference RSNI." },
1819 { 0x08, "The measured RSNI level is less than a threshold defined by an offset from the serving AP's reference RSNI." },
1820 { 0x09, "The measured RCPI level is in a range bound by the serving AP's reference RCPI and an offset from the serving AP's reference RCPI." },
1821 { 0x0a, "The measured RSNI level is in a range bound by the serving AP's reference RSNI and an offset from the serving AP's reference RSNI." },
1822 { 0xfe, "Report not required to be issued" },
1823 { 0x00, NULL((void*)0) }
1824};
1825
1826static const value_string ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags[] = {
1827 { 0, "No fixed length fields or elements" },
1828 { 1, "All fixed length fields and any requested elements in the Request information element if present" },
1829 { 2, "All fixed length fields and elements (default, used when Reporting Detail subelement is not included in Beacon Request" },
1830 { 0x00, NULL((void*)0) }
1831};
1832
1833static const value_string ieee80211_tag_measure_request_group_id_flags[] = {
1834 { 0x00, "STA Counters from dot11CountersTable" },
1835 { 0x01, "STA Counters from dot11MacStatistics group" },
1836 { 0x02, "QoS STA Counters for UP0 from dot11QosCountersTable" },
1837 { 0x03, "QoS STA Counters for UP1 from dot11QosCountersTable" },
1838 { 0x04, "QoS STA Counters for UP2 from dot11QosCountersTable" },
1839 { 0x05, "QoS STA Counters for UP3 from dot11QosCountersTable" },
1840 { 0x06, "QoS STA Counters for UP4 from dot11QosCountersTable" },
1841 { 0x07, "QoS STA Counters for UP5 from dot11QosCountersTable" },
1842 { 0x08, "QoS STA Counters for UP6 from dot11QosCountersTable" },
1843 { 0x09, "QoS STA Counters for UP7 from dot11QosCountersTable" },
1844 { 0x0a, "BSS Average Access Delays" },
1845 { 0x0b, "STA Counters from dot11A-MSDU Group" },
1846 { 0x0c, "STA Counters from dot11A-MPDU Group" },
1847 { 0x0d, "STA Counters from dot11 BAR, Channel Width, PSMP Group" },
1848 { 0x0e, "STA Counters from dot11Protection Group" },
1849 { 0x0f, "STBC Group" },
1850 { 0x00, NULL((void*)0) }
1851};
1852static value_string_ext ieee80211_tag_measure_request_group_id_flags_ext =
1853 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_group_id_flags){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_tag_measure_request_group_id_flags
) / sizeof ((ieee80211_tag_measure_request_group_id_flags)[0]
))-1, ieee80211_tag_measure_request_group_id_flags, "ieee80211_tag_measure_request_group_id_flags"
, ((void*)0) }
;
1854
1855static const value_string ieee80211_tag_measure_request_location_subject[] = {
1856 { 0, "Local" },
1857 { 1, "Remote" },
1858 { 2, "Third party" },
1859 { 0x00, NULL((void*)0) }
1860};
1861
1862static const value_string ieee80211_tag_measure_request_civic_location_type[] = {
1863 { 0, "IETF RFC 4776" },
1864 { 1, "Vendor Specific" },
1865 { 0x00, NULL((void*)0) }
1866};
1867
1868static const value_string ieee80211_tclas_process_flag[] = {
1869 {0x00, "Incoming MSDU's higher layer parameters have to match to the parameters in all associated TCLAS elements."},
1870 {0x01, "Incoming MSDU's higher layer parameters have to match to at least one of the associated TCLAS elements."},
1871 {0x02, "Incoming MSDU's that do not belong to any other TS are classified to the TS for which this TCLAS Processing element is used. In this case, there will not be any associated TCLAS elements."},
1872 {0, NULL((void*)0)}
1873};
1874
1875
1876#define MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1 1
1877
1878static const value_string ieee80211_tag_measure_request_channel_load_sub_id_vals[] = {
1879 { MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1, "Channel Load Reporting Information" },
1880 { 221, "Vendor Specific" },
1881 { 0x00, NULL((void*)0)}
1882};
1883
1884static const value_string ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals[] = {
1885 { 0x00, "Report to be issued after each measurement (default, used when Channel Load Reporting Information subelement is not included in Channel Load Request)." },
1886 { 0x01, "Report to be issued when measured Channel Load is equal to or greater than the reference value." },
1887 { 0x02, "Report to be issued when measured Channel Load is equal to or less than the reference value." },
1888 { 0x00, NULL((void*)0)}
1889};
1890
1891#define MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1 1
1892
1893static const value_string ieee80211_tag_measure_request_noise_histogram_sub_id_vals[] = {
1894 { MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1, "Noise Histogram Reporting Information" },
1895 { 221, "Vendor Specific" },
1896 { 0x00, NULL((void*)0)}
1897};
1898
1899static const value_string ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals[] = {
1900 { 0x00, "Report to be issued after each measurement (default, used when Noise Histogram Reporting Information subelement is not included in Noise Histogram Request)." },
1901 { 0x01, "Noise Histogram Report to be issued when measured ANPI is equal to or greater than the reference value." },
1902 { 0x02, "Noise Histogram Report to be issued when measured ANPI is equal to or less than the reference value." },
1903 { 0x00, NULL((void*)0)}
1904};
1905
1906#define MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY1 1
1907#define MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2 2
1908#define MEASURE_REP_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163 163
1909#define MEASURE_REP_BEACON_SUB_LAST_REPORT_INDICATION164 164
1910
1911static const value_string ieee80211_tag_measure_report_beacon_sub_id_vals[] = {
1912 { MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY1, "Reported Frame Body" },
1913 { MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2, "Reported Frame Body Fragment ID" },
1914 { MEASURE_REP_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163, "Wide Bandwidth Channel Switch"},
1915 { MEASURE_REP_BEACON_SUB_LAST_REPORT_INDICATION164, "Last Beacon Report Indication"},
1916 { 221, "Vendor Specific" },
1917 { 0x00, NULL((void*)0)}
1918};
1919
1920#define MEASURE_REP_LCI_SUB_REPORTED_LCI0 0
1921#define MEASURE_REP_LCI_SUB_REPORTED_AZIMUTH_REPORT1 1
1922#define MEASURE_REP_LCI_SUB_REPORTED_OR_STA2 2
1923#define MEASURE_REP_LCI_SUB_REPORTED_T_MAC3 3
1924#define MEASURE_REP_LCI_SUB_REPORTED_Z4 4
1925#define MEASURE_REP_LCI_SUB_REPORTED_RLE5 5
1926#define MEASURE_REP_LCI_SUB_REPORTED_URP6 6
1927#define MEASURE_REP_LCI_SUB_REPORTED_CO_BSSID7 7
1928
1929static const value_string ieee80211_tag_measure_report_lci_sub_id_vals[] = {
1930 { MEASURE_REP_LCI_SUB_REPORTED_LCI0, "LCI" },
1931 { MEASURE_REP_LCI_SUB_REPORTED_AZIMUTH_REPORT1, "Azimuth Report" },
1932 { MEASURE_REP_LCI_SUB_REPORTED_OR_STA2, "Originator Requesting STA MAC Address" },
1933 { MEASURE_REP_LCI_SUB_REPORTED_T_MAC3, "Target MAC Address" },
1934 { MEASURE_REP_LCI_SUB_REPORTED_Z4, "Z" },
1935 { MEASURE_REP_LCI_SUB_REPORTED_RLE5, "Relative Location Error" },
1936 { MEASURE_REP_LCI_SUB_REPORTED_URP6, "Usage Rules/Policy" },
1937 { MEASURE_REP_LCI_SUB_REPORTED_CO_BSSID7, "Co-Located BSSID List" },
1938 { 221, "Vendor Specific" },
1939 { 0x00, NULL((void*)0)}
1940};
1941
1942#define MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_CIVIC0 0
1943#define MEASURE_REP_CIVIC_SUB_REPORTED_OR_STA1 1
1944#define MEASURE_REP_CIVIC_SUB_REPORTED_T_MAC2 2
1945#define MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_REFERENCE3 3
1946#define MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_SHAPE4 4
1947#define MEASURE_REP_CIVIC_SUB_REPORTED_MAP_IMAGE5 5
1948#define MEASURE_REP_CIVIC_SUB_REPORTED_RESERVED6 6
1949#define MEASURE_REP_CIVIC_SUB_REPORTED_CO_BSSID7 7
1950
1951static const value_string ieee80211_tag_measure_report_civic_sub_id_vals[] = {
1952 { MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_CIVIC0, "Location Civic" },
1953 { MEASURE_REP_CIVIC_SUB_REPORTED_OR_STA1, "Originator Requesting STA MAC Address" },
1954 { MEASURE_REP_CIVIC_SUB_REPORTED_T_MAC2, "Target MAC Address" },
1955 { MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_REFERENCE3, "Location Reference" },
1956 { MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_SHAPE4, "Location Shape" },
1957 { MEASURE_REP_CIVIC_SUB_REPORTED_MAP_IMAGE5, "Map Image" },
1958 { MEASURE_REP_CIVIC_SUB_REPORTED_RESERVED6, "Reserved" },
1959 { MEASURE_REP_CIVIC_SUB_REPORTED_CO_BSSID7, "Co-Located BSSID List" },
1960 { 221, "Vendor Specific" },
1961 { 0x00, NULL((void*)0)}
1962};
1963
1964static const value_string frame_type[] = {
1965 {MGT_FRAME0x00, "Management frame"},
1966 {CONTROL_FRAME0x01, "Control frame"},
1967 {DATA_FRAME0x02, "Data frame"},
1968 {EXTENSION_FRAME0x03, "Extension frame"},
1969 {0, NULL((void*)0)}
1970};
1971
1972static const value_string tofrom_ds[] = {
1973 {0, "Not leaving DS or network is operating "
1974 "in AD-HOC mode (To DS: 0 From DS: 0)"},
1975 {FLAG_TO_DS0x01, "Frame from STA to DS via an AP (To DS: 1 "
1976 "From DS: 0)"},
1977 {FLAG_FROM_DS0x02, "Frame from DS to a STA via AP(To DS: 0 "
1978 "From DS: 1)"},
1979 {FLAG_TO_DS0x01|FLAG_FROM_DS0x02, "WDS (AP to AP) or Mesh (MP to MP) Frame "
1980 "(To DS: 1 From DS: 1)"},
1981 {0, NULL((void*)0)}
1982};
1983
1984static const true_false_string tods_flag = {
1985 "Frame is entering DS",
1986 "Frame is not entering DS"
1987};
1988
1989static const true_false_string fromds_flag = {
1990 "Frame is exiting DS",
1991 "Frame is not exiting DS"
1992};
1993
1994static const true_false_string more_fragments = {
1995 "More fragments follow",
1996 "This is the last fragment"
1997};
1998
1999static const true_false_string retry_flags = {
2000 "Frame is being retransmitted",
2001 "Frame is not being retransmitted"
2002};
2003
2004static const true_false_string s1g_dynamic_indication_flags = {
2005 "Dynamic",
2006 "Static"
2007};
2008
2009static const true_false_string pm_flags = {
2010 "STA will go to sleep",
2011 "STA will stay up"
2012};
2013
2014static const true_false_string md_flags = {
2015 "Data is buffered for STA at AP",
2016 "No data buffered"
2017};
2018
2019static const true_false_string protected_flags = {
2020 "Data is protected",
2021 "Data is not protected"
2022};
2023
2024static const true_false_string order_flags = {
2025 "Strictly ordered",
2026 "Not strictly ordered"
2027};
2028
2029static const true_false_string cf_ess_flags = {
2030 "Transmitter is an AP",
2031 "Transmitter is a STA"
2032};
2033
2034
2035static const true_false_string cf_privacy_flags = {
2036 "Data confidentiality required",
2037 "Data confidentiality not required"
2038};
2039
2040static const true_false_string cf_ibss_flags = {
2041 "Transmitter belongs to an IBSS",
2042 "Transmitter belongs to a BSS"
2043};
2044
2045static const true_false_string eosp_flag = {
2046 "End of service period",
2047 "Service period"
2048};
2049
2050static const true_false_string bit4_flag = {
2051 "Bits 8-15 of QoS Control field are Queue Size",
2052 "Bits 8-15 of QoS Control field are TXOP Duration Requested"
2053};
2054
2055static const true_false_string ieee80211_qos_amsdu_present_flag = {
2056 "A-MSDU",
2057 "MSDU"
2058};
2059
2060static const true_false_string csa_txrestrict_flags = {
2061 "Tx Restrict",
2062 "No Tx Restrict"
2063};
2064
2065static const true_false_string csa_initiator_flags = {
2066 "Initiator",
2067 "Non Initiator"
2068};
2069
2070static const true_false_string mesh_config_cap_power_save_level_flags = {
2071 "At least one of the peer-specific mesh power modes is deep sleep mode",
2072 "None of the peer-specific mesh power modes is deep sleep mode"
2073};
2074
2075static const true_false_string ieee80211_qos_mesh_ps = {
2076 "deep sleep mode",
2077 "light sleep mode"
2078};
2079
2080#define AUTH_ALG_OPEN0 0
2081#define AUTH_ALG_SHARED1 1
2082#define AUTH_ALG_FAST_BSS_TRANS2 2
2083#define AUTH_ALG_SAE3 3
2084#define AUTH_ALG_FILS_SK_WITHOUT_PFS4 4
2085#define AUTH_ALG_FILS_SK_WITH_PFS5 5
2086#define AUTH_ALG_FILS_PK6 6
2087#define AUTH_ALG_PASN7 7
2088#define AUTH_ALG_NETWORK_EAP0x80 0x80
2089
2090static const value_string auth_alg[] = {
2091 {AUTH_ALG_OPEN0, "Open System"},
2092 {AUTH_ALG_SHARED1, "Shared key"},
2093 {AUTH_ALG_FAST_BSS_TRANS2, "Fast BSS Transition"},
2094 {AUTH_ALG_SAE3, "Simultaneous Authentication of Equals (SAE)"},
2095 {AUTH_ALG_FILS_SK_WITHOUT_PFS4, "FILS Shared Key authentication without PFS"},
2096 {AUTH_ALG_FILS_SK_WITH_PFS5, "FILS Shared Key authentication with PFS"},
2097 {AUTH_ALG_FILS_PK6, "FILS Public Key authentication"},
2098 {AUTH_ALG_PASN7, "Pre-Association Security Negotiation (PASN)"},
2099 {AUTH_ALG_NETWORK_EAP0x80, "Network EAP"}, /* Cisco proprietary? */
2100 {0, NULL((void*)0)}
2101};
2102
2103/* IANA - Internet Key Exchange (IKE) Attributes - Group Description (https://www.iana.org/assignments/ipsec-registry/ipsec-registry.xhtml) */
2104static const value_string ff_finite_cyclic_group_vals[] = {
2105 { 1, "default 768-bit MODP group"},
2106 { 2, "alternate 1024-bit MODP group"},
2107 { 3, "EC2N group on GP[2^155]"},
2108 { 4, "EC2N group on GP[2^185]"},
2109 { 5, "1536-bit MODP group"},
2110 {14, "2048-bit MODP group"},
2111 {15, "3072-bit MODP group"},
2112 {16, "4096-bit MODP group"},
2113 {17, "6144-bit MODP group"},
2114 {18, "8192-bit MODP group"},
2115 {19, "256-bit random ECP group"},
2116 {20, "384-bit random ECP group"},
2117 {21, "521-bit random ECP group"},
2118 {22, "1024-bit MODP Group with 160-bit Prime Order Subgroup"},
2119 {23, "2048-bit MODP Group with 224-bit Prime Order Subgroup"},
2120 {24, "2048-bit MODP Group with 256-bit Prime Order Subgroup"},
2121 {25, "192-bit Random ECP Group"},
2122 {26, "224-bit Random ECP Group"},
2123 {27, "224-bit Brainpool ECP group"},
2124 {28, "256-bit Brainpool ECP group"},
2125 {29, "384-bit Brainpool ECP group"},
2126 {30, "512-bit Brainpool ECP group"},
2127 {0, NULL((void*)0)}
2128};
2129
2130static const true_false_string ff_block_ack_params_amsdu_permitted_flag = {
2131 "Permitted in QoS Data MPDUs",
2132 "Not Permitted"
2133};
2134
2135static const true_false_string ff_block_ack_params_policy_flag = {
2136 "Immediate Block Ack",
2137 "Delayed Block Ack"
2138};
2139
2140static const value_string ff_channel_width_vals[] = {
2141 {0x00, "20 MHz channel width only"},
2142 {0x01, "Any channel width in the STA's Supported Channel Width Set"},
2143 {0, NULL((void*)0)}
2144};
2145
2146static const true_false_string ff_qos_info_ap_q_ack_flag = {
2147 "APs MIB attribute dot11QAckOptionImplemented is true",
2148 "APs MIB attribute dot11QAckOptionImplemented is false"
2149};
2150
2151static const true_false_string ff_qos_info_ap_queue_req_flag = {
2152 "AP can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
2153 "AP cannot process a nonzero Queue Size subfield in the QoS Control field in QoS data frames"
2154};
2155
2156static const true_false_string ff_qos_info_ap_txop_request_flag = {
2157 "AP can process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames",
2158 "AP cannot process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames"
2159};
2160
2161static const true_false_string ff_qos_info_sta_ac_flag = {
2162 "Trigger-enabled and Delivery-enabled",
2163 "Neither Trigger-enabled nor Delivery-enabled"
2164};
2165
2166static const true_false_string ff_qos_info_sta_q_ack_flag = {
2167 "STAs MIB attribute dot11QAckOptionImplemented is true",
2168 "STAs MIB attribute dot11QAckOptionImplemented is false"
2169};
2170
2171static const value_string ff_qos_info_sta_max_sp_len_flags[] = {
2172 {0x00, "AP may deliver all buffered MSDUs, A-MSDUs and MMPDUs"},
2173 {0x01, "AP may deliver a maximum of two MSDUs, A-MSDUs and MMPDUs per SP"},
2174 {0x02, "AP may deliver a maximum of four MSDUs, A-MSDUs and MMPDUs per SP"},
2175 {0x03, "AP may deliver a maximum of six MSDUs, A-MSDUs and MMPDUs per SP"},
2176 {0, NULL((void*)0)}
2177};
2178
2179static const true_false_string ff_qos_info_sta_more_data_ack_flag = {
2180 "STA can process ACK frames with the More Data bit in the Frame Control field set to 1 and will remain in the wake state",
2181 "STA cannot process ACK frames with the More Data bit in the Frame Control field set to 1"
2182};
2183
2184static const true_false_string ff_sm_pwr_save_sm_mode_flag = {
2185 "Dynamic SM Power Save mode",
2186 "Static SM Power Save mode"
2187};
2188
2189static const true_false_string ff_pco_phase_cntrl_flag = {
2190 "40 MHz Phase",
2191 "20 MHz Phase"
2192};
2193
2194static const true_false_string ff_psmp_param_set_more_psmp_flag = {
2195 "More PSMP Sequences Follow",
2196 "No PSMP Sequences Follow"
2197};
2198
2199static const value_string ff_mimo_cntrl_nc_index_flags[] = {
2200 {0x00, "1 Column"},
2201 {0x01, "2 Columns"},
2202 {0x02, "3 Columns"},
2203 {0x03, "4 Columns"},
2204 {0, NULL((void*)0)}
2205};
2206
2207static const value_string ff_mimo_cntrl_nr_index_flags[] = {
2208 {0x00, "1 Row"},
2209 {0x01, "2 Rows"},
2210 {0x02, "3 Rows"},
2211 {0x03, "4 Rows"},
2212 {0, NULL((void*)0)}
2213};
2214
2215static const true_false_string ff_mimo_cntrl_channel_width_flag = {
2216 "40 MHz",
2217 "20 MHz"
2218};
2219
2220static const true_false_string ff_ht_info_information_request_flag = {
2221 "Requesting HT Information Exchange management action frame",
2222 "Should not send an HT Information Exchange management action frame"
2223};
2224
2225static const true_false_string ff_ht_info_40_mhz_intolerant_flag = {
2226 "Transmitting station is intolerant of 40 MHz operation",
2227 "Transmitting station permits 40 MHz operation"
2228};
2229
2230static const true_false_string ff_ht_info_sta_chan_width_flag = {
2231 "40 MHz",
2232 "20 MHz"
2233};
2234
2235static const value_string ff_ht_action_flags[] = {
2236 {HT_ACTION_NOTIFY_CHAN_WIDTH0, "Notify Channel Width"},
2237 {HT_ACTION_SM_PWR_SAVE1, "Spatial Multiplexing (SM) Power Save"},
2238 {HT_ACTION_PSMP_ACTION2, "Power Save Multi-Poll (PSMP) action frame"},
2239 {HT_ACTION_SET_PCO_PHASE3, "Set PCO Phase"},
2240 {HT_ACTION_MIMO_CSI4, "MIMO CSI Matrices"},
2241 {HT_ACTION_MIMO_BEAMFORMING5, "MIMO Non-compressed Beamforming"},
2242 {HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6, "MIMO Compressed Beamforming"},
2243 {HT_ACTION_ANT_SEL_FEEDBACK7, "Antenna Selection Indices Feedback"},
2244 {HT_ACTION_HT_INFO_EXCHANGE8, "HT Information Exchange"},
2245 {0x00, NULL((void*)0)}
2246};
2247
2248static const value_string ff_fst_action_flags[] = {
2249 {FST_SETUP_REQUEST0, "FST Setup Request"},
2250 {FST_SETUP_RESPONSE1, "FST Setup Response"},
2251 {FST_TEAR_DOWN2, "FST Tear Down"},
2252 {FST_ACK_REQUEST3, "FST Ack Request"},
2253 {FST_ACK_RESPONSE4, "FST Ack Response"},
2254 {FST_ON_CHANNEL_TUNNEL_REQUEST5, "FST On-channel Tunnel Request"},
2255 {0x00, NULL((void*)0)}
2256};
2257
2258static const value_string ff_robust_av_streaming_action_flags[] = {
2259 {ROBUST_AV_STREAMING_SCS_REQUEST0, "SCS Request"},
2260 {ROBUST_AV_STREAMING_SCS_RESPONSE1, "SCS Response"},
2261 {ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_REQ2, "Group Membership Request"},
2262 {ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_RSP3, "Group Membership Response"},
2263 {ROBUST_AV_STREAMING_MSCS_REQUEST4, "MSCS Request"},
2264 {ROBUST_AV_STREAMING_MSCS_RESPONSE5, "MSCS Response"},
2265 {0x00, NULL((void*)0)}
2266};
2267
2268static const value_string ff_dmg_action_flags[] = {
2269 {DMG_ACTION_PWR_SAVE_CONFIG_REQ0, "Power Save Configuration Request"},
2270 {DMG_ACTION_PWR_SAVE_CONFIG_RES1, "Power Save Configuration Response"},
2271 {DMG_ACTION_INFO_REQ2, "Information Request"},
2272 {DMG_ACTION_INFO_RES3, "Information Response"},
2273 {DMG_ACTION_HANDOVER_REQ4, "Handover Request"},
2274 {DMG_ACTION_HANDOVER_RES5, "Handover Response"},
2275 {DMG_ACTION_DTP_REQ6, "DTP Request"},
2276 {DMG_ACTION_DTP_RES7, "DTP Response"},
2277 {DMG_ACTION_RELAY_SEARCH_REQ8, "Relay Search Request"},
2278 {DMG_ACTION_RELAY_SEARCH_RES9, "Relay Search Response"},
2279 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10, "Multi Relay Channel Measurement Request"},
2280 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11, "Multi Relay Channel Measurement Response"},
2281 {DMG_ACTION_RLS_REQ12, "RLS Request"},
2282 {DMG_ACTION_RLS_RES13, "RLS Response"},
2283 {DMG_ACTION_RLS_ANNOUNCE14, "RLS Announcement"},
2284 {DMG_ACTION_RLS_TEARDOWN15, "RLS Teardown"},
2285 {DMG_ACTION_RELAY_ACK_REQ16, "Relay ACK Request"},
2286 {DMG_ACTION_RELAY_ACK_RES17, "Relay ACK Response"},
2287 {DMG_ACTION_TPA_REQ18, "TPA Request"},
2288 {DMG_ACTION_TPA_RES19, "TPA Response"},
2289 {DMG_ACTION_TPA_REP20, "TPA Report"},
2290 {DMG_ACTION_ROC_REQ21, "ROC Request"},
2291 {DMG_ACTION_ROC_RES22, "ROC Response"},
2292 {0x00, NULL((void*)0)}
2293};
2294
2295static const value_string ff_unprotected_dmg_action_flags[] = {
2296 {UNPROTECTED_DMG_ANNOUNCE0, "Announce"},
2297 {UNPROTECTED_DMG_BRP1, "BRP"},
2298 {0x00, NULL((void*)0)}
2299};
2300static const value_string ff_mimo_cntrl_grouping_flags[] = {
2301 {0x00, "No Grouping"},
2302 {0x01, "Carrier Groups of 2"},
2303 {0x02, "Carrier Groups of 4"},
2304 {0x03, "Reserved"},
2305 {0, NULL((void*)0)}
2306};
2307
2308static const value_string ff_mimo_cntrl_coefficient_size_flags[] = {
2309 {0x00, "4 Bits"},
2310 {0x01, "5 Bits"},
2311 {0x02, "6 Bits"},
2312 {0x03, "8 Bits"},
2313 {0, NULL((void*)0)}
2314};
2315
2316static const value_string ff_mimo_cntrl_codebook_info_flags[] = {
2317 {0x00, "1 bit for 'Capital Psi', 3 bits for 'Small Psi'"},
2318 {0x01, "2 bit for 'Capital Psi', 4 bits for 'Small Psi'"},
2319 {0x02, "3 bit for 'Capital Psi', 5 bits for 'Small Psi'"},
2320 {0x03, "4 bit for 'Capital Psi', 6 bits for 'Small Psi'"},
2321 {0, NULL((void*)0)}
2322};
2323
2324static const value_string ff_ppa_action_codes[] = {
2325 {PPA_DSE_ENABLEMENT1, "Protected DSE enablement"},
2326 {PPA_DSE_DEENABLEMENT2, "Protected DSE deenablement"},
2327 {PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4, "Protected Extended Channel Switch Announcement"},
2328 {PPA_DSE_MEASUREMENT_REQUEST5, "Protected DSE measurement request"},
2329 {PPA_DSE_MEASUREMENT_REPORT6, "Protected DSE measurement report"},
2330 {PPA_DSE_POWER_CONSTRAINT8, "Protected DSE power constraint"},
2331 {PPA_VENDOR_SPECIFIC9, "Protected Vendor Specific"},
2332 {PPA_GAS_INITIAL_REQUEST10, "Protected GAS Initial Request"},
2333 {PPA_GAS_INITIAL_RESPONSE11, "Protected GAS Initial Response"},
2334 {PPA_GAS_COMEBACK_REQUEST12, "Protected GAS Comeback Request"},
2335 {PPA_GAS_COMEBACK_RESPONSE13, "Protected GAS Comeback Response"},
2336 {PPA_QAB_REQUEST16, "Protected QAB Request"},
2337 {PPA_QAB_RESPONSE17, "Protected QAB Response"},
2338 {0x00, NULL((void*)0)}
2339};
2340static value_string_ext ff_ppa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_ppa_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (ff_ppa_action_codes) /
sizeof ((ff_ppa_action_codes)[0]))-1, ff_ppa_action_codes, "ff_ppa_action_codes"
, ((void*)0) }
;
2341
2342static const value_string ff_pa_action_codes[] = {
2343 {PA_20_40_BSS_COEXISTENCE_MANAGEMENT0, "20/40 BSS Coexistence Management"},
2344 {PA_DSE_ENABLEMENT1, "DSE enablement"},
2345 {PA_DSE_DEENABLEMENT2, "DSE deenablement"},
2346 {PA_DSE_REG_LOC_ANNOUNCEMENT3, "DSE Registered Location Announcement"},
2347 {PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4, "Extended Channel Switch Announcement"},
2348 {PA_DSE_MEASUREMENT_REQUEST5, "DSE measurement request"},
2349 {PA_DSE_MEASUREMENT_REPORT6, "DSE measurement report"},
2350 {PA_MEASUREMENT_PILOT7, "Measurement Pilot"},
2351 {PA_DSE_POWER_CONSTRAINT8, "DSE power constraint"},
2352 {PA_VENDOR_SPECIFIC9, "Vendor Specific"},
2353 {PA_GAS_INITIAL_REQUEST10, "GAS Initial Request"},
2354 {PA_GAS_INITIAL_RESPONSE11, "GAS Initial Response"},
2355 {PA_GAS_COMEBACK_REQUEST12, "GAS Comeback Request"},
2356 {PA_GAS_COMEBACK_RESPONSE13, "GAS Comeback Response"},
2357 {PA_TDLS_DISCOVERY_RESPONSE14, "TDLS Discovery Response"},
2358 {PA_LOCATION_TRACK_NOTIFICATION15, "Location Track Notification"},
2359 {PA_QAB_REQUEST16, "QAB Request"},
2360 {PA_QAB_RESPONSE17, "QAB Response"},
2361 {PA_QMF_POLICY18, "QMF Policy"},
2362 {PA_QMF_POLICY_CHANGE19, "QMF Policy Change"},
2363 {PA_QLOAD_REQUEST20, "QLoad Request"},
2364 {PA_QLOAD_REPORT21, "QLoad Report"},
2365 {PA_HCCA_TXOP_ADVERTISEMENT22, "HCCA TXOP Advertisement"},
2366 {PA_HCCA_TXOP_RESPONSE23, "HCCA TXOP Response"},
2367 {PA_PUBLIC_KEY24, "Public Key"},
2368 {PA_CHANNEL_AVAILABILITY_QUERY25, "Channel Availability Query"},
2369 {PA_CHANNEL_SCHEDULE_MANAGEMENT26, "Channel Schedule Management"},
2370 {PA_CONTACT_VERIFICATION_SIGNAL27, "Contact Verification Signal"},
2371 {PA_GDD_ENABLEMENT_REQUEST28, "GDD Enablement Request"},
2372 {PA_GDD_ENABLEMENT_RESPONSE29, "GDD Enablement Response"},
2373 {PA_NETWORK_CHANNEL_CONTROL30, "Network Channel Control"},
2374 {PA_WHITE_SPACE_MAP_ANNOUNCEMENT31, "White Space Map Announcement"},
2375 {PA_FTM_REQUEST32, "FTM Request"},
2376 {PA_FTM33, "FTM"},
2377 {PA_FILS_DISCOVERY34, "FILS Discovery"},
2378 {PA_LOCATION_MEASUREMENT_REPORT47, "Location Measurement Report"},
2379 {PA_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT48, "ISTA Passive TB Ranging Measurement Report"},
2380 {PA_PRIMARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT49, "Primary RSTA Broadcast Passive TB Ranging Measurement Report"},
2381 {PA_SECONDARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT50, "Secondary RSTA Broadcast Passive TB Ranging Measurement Report"},
2382 {0x00, NULL((void*)0)}
2383};
2384value_string_ext ff_pa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_pa_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (ff_pa_action_codes) /
sizeof ((ff_pa_action_codes)[0]))-1, ff_pa_action_codes, "ff_pa_action_codes"
, ((void*)0) }
;
2385
2386static const value_string protected_ftm_action_vals[] = {
2387 {0, "Reserved"},
2388 {1, "Protected FTM Request"},
2389 {2, "Protected FTM"},
2390 {3, "Protected Location Measurement Report"},
2391 {0, NULL((void*)0)}
2392};
2393
2394static const value_string ftm_trigger_vals[] = {
2395 {0, "Stop sending FTM frames"},
2396 {1, "Start or continue sending FTM frames"},
2397 /* all other values reserved */
2398 {0, NULL((void*)0)}
2399};
2400
2401static const value_string category_codes[] = {
2402 {CAT_SPECTRUM_MGMT0, "Spectrum Management (SM)"},
2403 {CAT_QOS1, "Quality of Service (QoS)"},
2404 {CAT_DLS2, "Direct-Link Setup (DLS)"},
2405 {CAT_BLOCK_ACK3, "Block Ack"},
2406 {CAT_PUBLIC4, "Public Action"},
2407 {CAT_RADIO_MEASUREMENT5, "Radio Measurement"},
2408 {CAT_FAST_BSS_TRANSITION6, "Fast BSS Transition"},
2409 {CAT_HT7, "High Throughput"},
2410 {CAT_SA_QUERY8, "SA Query"},
2411 {CAT_PUBLIC_PROTECTED9, "Protected Dual of Public Action"},
2412 {CAT_WNM10, "WNM"},
2413 {CAT_UNPROTECTED_WNM11, "Unprotected WNM"},
2414 {CAT_TDLS12, "TDLS"},
2415 {CAT_MESH13, "MESH"},
2416 {CAT_MULTIHOP14, "Multihop"},
2417 {CAT_SELF_PROTECTED15, "Self-protected"},
2418 {CAT_DMG16, "DMG"},
2419 {CAT_MGMT_NOTIFICATION17, "Management Notification"},
2420 {CAT_FAST_SESSION_TRANSFER18, "Fast Session Transfer"},
2421 {CAT_ROBUST_AV_STREAMING19, "Robust AV Streaming"},
2422 {CAT_UNPROTECTED_DMG20, "Unprotected DMG"},
2423 {CAT_VHT21, "VHT"},
2424 {CAT_S1G22, "S1G"},
2425 {CAT_PROTECTED_S1G23, "Protected S1G"},
2426 {CAT_FLOW_CONTROL24, "Flow Control"},
2427 {CAT_CONTROL_RESPONSE_MCS_NEG25, "Control Response MCS Negotiation"},
2428 {CAT_FILS26, "FILS"},
2429 {CAT_HE30, "HE"},
2430 {CAT_PROTECTED_HE31, "Protected HE"},
2431 {CAT_PROTECTED_FTM34, "Protected FTM"},
2432 {CAT_EHT36, "EHT"},
2433 {CAT_PROTECTED_EHT37, "Protected EHT"},
2434 {CAT_VENDOR_SPECIFIC_PROTECTED126, "Vendor-specific Protected"},
2435 {CAT_VENDOR_SPECIFIC127, "Vendor Specific"},
2436
2437 {0x80 | CAT_SPECTRUM_MGMT0, "Spectrum Management (SM) (error)"},
2438 {0x80 | CAT_QOS1, "Quality of Service (QoS (error))"},
2439 {0x80 | CAT_DLS2, "Direct-Link Setup (DLS) (error)"},
2440 {0x80 | CAT_BLOCK_ACK3, "Block Ack (error)"},
2441 {0x80 | CAT_PUBLIC4, "Public Action (error)"},
2442 {0x80 | CAT_RADIO_MEASUREMENT5, "Radio Measurement (error)"},
2443 {0x80 | CAT_FAST_BSS_TRANSITION6, "Fast BSS Transition (error)"},
2444 {0x80 | CAT_HT7, "High Throughput (error)"},
2445 {0x80 | CAT_SA_QUERY8, "SA Query (error)"},
2446 {0x80 | CAT_PUBLIC_PROTECTED9, "Protected Dual of Public Action (error)"},
2447 {0x80 | CAT_WNM10, "WNM (error)"},
2448 {0x80 | CAT_UNPROTECTED_WNM11, "Unprotected WNM (error)"},
2449 {0x80 | CAT_TDLS12, "TDLS (error)"},
2450 {0x80 | CAT_MESH13, "Mesh (error)"},
2451 {0x80 | CAT_MULTIHOP14, "Multihop (error)"},
2452 {0x80 | CAT_SELF_PROTECTED15, "Self-protected (error)"},
2453 {0x80 | CAT_DMG16, "DMG (error)"},
2454 {0x80 | CAT_MGMT_NOTIFICATION17, "Management Notification (error)"},
2455 {0x80 | CAT_FAST_SESSION_TRANSFER18, "Fast Session Transfer (error)"},
2456 {0x80 | CAT_ROBUST_AV_STREAMING19, "Robust AV Streaming (error)"},
2457 {0x80 | CAT_UNPROTECTED_DMG20, "Unprotected DMG (error)"},
2458 {0x80 | CAT_VHT21, "VHT (error)"},
2459 {0x80 | CAT_HE30, "HE (error)"},
2460 {0x80 | CAT_PROTECTED_HE31, "Protected HE (error)"},
2461 {0x80 | CAT_PROTECTED_FTM34, "Protected FTM (error)"},
2462 {0x80 | CAT_EHT36, "EHT (error)"},
2463 {0x80 | CAT_PROTECTED_EHT37, "Protected EHT (error)"},
2464 {0x80 | CAT_VENDOR_SPECIFIC_PROTECTED126, "Vendor-specific Protected (error)"},
2465 {0x80 | CAT_VENDOR_SPECIFIC127, "Vendor Specific (error)"},
2466 {0, NULL((void*)0)}
2467};
2468static value_string_ext category_codes_ext = VALUE_STRING_EXT_INIT(category_codes){ _try_val_to_str_ext_init, 0, (sizeof (category_codes) / sizeof
((category_codes)[0]))-1, category_codes, "category_codes", (
(void*)0) }
;
2469
2470#define NR_SUB_ID_TSF_INFO1 1
2471#define NR_SUB_ID_CON_COU_STR2 2
2472#define NR_SUB_ID_BSS_TRN_CAN_PREF3 3
2473#define NR_SUB_ID_BSS_TER_DUR4 4
2474#define NR_SUB_ID_BEARING5 5
2475#define NR_SUB_ID_WIDE_BW_CHANNEL6 6
2476
2477#define NR_SUB_ID_MEASUREMENT_REPORT39 39
2478#define NR_SUB_ID_HT_CAPABILITIES45 45
2479#define NR_SUB_ID_HT_OPERATION61 61
2480#define NR_SUB_ID_SEC_CHANNEL_OFFSET62 62
2481#define NR_SUB_ID_MEASUREMENT_PILOT_INFO66 66
2482#define NR_SUB_ID_RM_ENABLE_CAP70 70
2483#define NR_SUB_ID_HT_MULTIPLE_BSSID71 71
2484#define NR_SUB_ID_VHT_CAPABILITIES191 191
2485#define NR_SUB_ID_VHT_OPERATION192 192
2486#define NR_SUB_ID_HE_CAPABILITIES193 193
2487#define NR_SUB_ID_HE_OPERATION194 194
2488#define NR_SUB_ID_EHT_CAPABILITIES199 199
2489#define NR_SUB_ID_EHT_OPERATION200 200
2490#define NR_SUB_ID_BASIC_MULTI_LINK201 201
2491
2492#define NR_SUB_ID_VENDOR_SPECIFIC221 221
2493
2494static const value_string ieee80211_neighbor_report_subelement_id_vals[] = {
2495 {NR_SUB_ID_TSF_INFO1, "TSF Information"},
2496 {NR_SUB_ID_CON_COU_STR2, "Condensed Country String"},
2497 {NR_SUB_ID_BSS_TRN_CAN_PREF3, "BSS Transition Candidate Preference"},
2498 {NR_SUB_ID_BSS_TER_DUR4, "BSS Termination Duration"},
2499 {NR_SUB_ID_BEARING5, "Bearing"},
2500 {NR_SUB_ID_WIDE_BW_CHANNEL6, "Wide Bandwidth Channel"},
2501 {NR_SUB_ID_MEASUREMENT_REPORT39, "Measurement Report"},
2502 {NR_SUB_ID_HT_CAPABILITIES45, "HT Capabilities"},
2503 {NR_SUB_ID_HT_OPERATION61, "HT Operation"},
2504 {NR_SUB_ID_SEC_CHANNEL_OFFSET62, "Secondary Channel Offset"},
2505 {NR_SUB_ID_MEASUREMENT_PILOT_INFO66, "Measurement Pilot Transmission"},
2506 {NR_SUB_ID_RM_ENABLE_CAP70, "RM Enabled Capabilities"},
2507 {NR_SUB_ID_HT_MULTIPLE_BSSID71, "Multiple BSSID"},
2508 {NR_SUB_ID_VHT_CAPABILITIES191, "VHT Capabilities"},
2509 {NR_SUB_ID_VHT_OPERATION192, "VHT Operation"},
2510 {NR_SUB_ID_HE_CAPABILITIES193, "HE Capabilities"},
2511 {NR_SUB_ID_HE_OPERATION194, "HE Operation"},
2512 {NR_SUB_ID_EHT_CAPABILITIES199, "EHT Capabilities"},
2513 {NR_SUB_ID_EHT_OPERATION200, "EHT Operation"},
2514 {NR_SUB_ID_BASIC_MULTI_LINK201, "Basic Multi-Link"},
2515 {NR_SUB_ID_VENDOR_SPECIFIC221, "Vendor Specific"},
2516 {0, NULL((void*)0)}
2517};
2518
2519static const value_string ieee80211_neighbor_report_bssid_info_reachability_vals[] = {
2520 {0, "Reserved"},
2521 {1, "Not Reachable"},
2522 {2, "Unknown"},
2523 {3, "Reachable"},
2524 {0, NULL((void*)0)}
2525};
2526
2527static const value_string action_codes[] = {
2528 {SM_ACTION_MEASUREMENT_REQUEST0, "Measurement Request"},
2529 {SM_ACTION_MEASUREMENT_REPORT1, "Measurement Report"},
2530 {SM_ACTION_TPC_REQUEST2, "TPC Request"},
2531 {SM_ACTION_TPC_REPORT3, "TPC Report"},
2532 {SM_ACTION_CHAN_SWITCH_ANNC4, "Channel Switch Announcement"},
2533 {0, NULL((void*)0)}
2534};
2535
2536static const value_string vendor_action_types_mrvl[] = {
2537 {MRVL_ACTION_MESH_MANAGEMENT1, "Mesh Management"},
2538 {0, NULL((void*)0)}
2539};
2540
2541static const value_string mesh_mgt_action_codes_mrvl[] = {
2542 {MRVL_MESH_MGMT_ACTION_RREQ0, "Route Request"},
2543 {MRVL_MESH_MGMT_ACTION_RREP1, "Route Response"},
2544 {MRVL_MESH_MGMT_ACTION_RERR2, "Route Error"},
2545 {MRVL_MESH_MGMT_ACTION_PLDM3, "Peer Link Down"},
2546 {0, NULL((void*)0)}
2547};
2548
2549static const value_string mesh_path_selection_codes[] = {
2550 {0x0, "Hybrid Wireless Mesh Protocol"},
2551 {0, NULL((void*)0)}
2552};
2553
2554static const value_string mesh_metric_codes[] = {
2555 {0x0, "Airtime Link Metric"},
2556 {0, NULL((void*)0)}
2557};
2558
2559static const value_string wme_action_codes[] = {
2560 {0x00, "Setup request"},
2561 {0x01, "Setup response"},
2562 {0x02, "Teardown"},
2563 {0x00, NULL((void*)0)}
2564};
2565
2566static const value_string wme_status_codes[] = {
2567 {0x00, "Admission accepted"},
2568 {0x01, "Invalid parameters"},
2569 {0x03, "Refused"},
2570 {0x00, NULL((void*)0)}
2571};
2572
2573static const value_string mesh_action[] = {
2574 {MESH_ACTION_LINK_METRIC_REPORT0, "Mesh Link Metric Report"},
2575 {MESH_ACTION_HWMP1, "HWMP Mesh Path Selection"},
2576 {MESH_ACTION_GATE_ANNOUNCE2, "Gate Announcement"},
2577 {MESH_ACTION_CONGESTION_CTL3, "Congestion Control Notification"},
2578 {MESH_ACTION_MCCA_SETUP_REQUEST4, "MCCA Setup Request"},
2579 {MESH_ACTION_MCCA_SETUP_REPLY5, "MCCA Setup Reply"},
2580 {MESH_ACTION_MCCA_ADV_REQUEST6, "MCCA Advertisement Request"},
2581 {MESH_ACTION_MCCA_ADV7, "MCCA Advertisement"},
2582 {MESH_ACTION_MCCA_TEARDOWN8, "MCCA Teardown"},
2583 {MESH_ACTION_TBTT_ADJ_REQUEST9, "TBTT Adjustment Request"},
2584 {MESH_ACTION_TBTT_ADJ_RESPONSE10, "TBTT Adjustment Response"},
2585 {0, NULL((void*)0)}
2586};
2587static value_string_ext mesh_action_ext = VALUE_STRING_EXT_INIT(mesh_action){ _try_val_to_str_ext_init, 0, (sizeof (mesh_action) / sizeof
((mesh_action)[0]))-1, mesh_action, "mesh_action", ((void*)0
) }
;
2588
2589static const value_string multihop_action[] = {
2590 {MULTIHOP_ACTION_PROXY_UPDATE0, "Proxy Update"},
2591 {MULTIHOP_ACTION_PROXY_UPDATE_CONF1, "Proxy Update Confirmation"},
2592 {0, NULL((void*)0)}
2593};
2594
2595static const value_string selfprot_action[] = {
2596 {SELFPROT_ACTION_MESH_PEERING_OPEN1, "Mesh Peering Open"},
2597 {SELFPROT_ACTION_MESH_PEERING_CONFIRM2, "Mesh Peering Confirm"},
2598 {SELFPROT_ACTION_MESH_PEERING_CLOSE3, "Mesh Peering Close"},
2599 {SELFPROT_ACTION_MESH_GROUP_KEY_INFORM4, "Mesh Group Key Inform"},
2600 {SELFPROT_ACTION_MESH_GROUP_KEY_ACK5, "Mesh Group Key Ack"},
2601 {0, NULL((void*)0)}
2602};
2603
2604static const value_string mesh_peering_proto_ids[] = {
2605 {MESH_PEERING_PROTO_MGMT0, "Mesh peering management protocol"},
2606 {MESH_PEERING_PROTO_AMPE1, "Authenticated mesh peering exchange protocol"},
2607 {MESH_PEERING_PROTO_VENDOR255, "Vendor specific"},
2608 {0, NULL((void*)0)}
2609};
2610
2611static const true_false_string hwmp_targ_usn_flags = {
2612 "[USN = 1] Target Sequence Number Unknown at Originator",
2613 "[USN = 0] Target Sequence Number Known at Originator"
2614};
2615
2616static const true_false_string hwmp_targ_to_flags = {
2617 "[TO = 1] Only Target Will Respond",
2618 "[TO = 0] Intermediate Nodes May Respond"
2619};
2620
2621static const value_string ack_policy[] = {
2622 {0x00, "Normal Ack"},
2623 {0x01, "No Ack"},
2624 {0x02, "No explicit acknowledgment"},
2625 {0x03, "Block Ack"},
2626 {0x00, NULL((void*)0)}
2627};
2628
2629static const value_string qos_action_codes[] = {
2630 {QOS_ACTION_ADDTS_REQUEST0, "ADDTS Request"},
2631 {QOS_ACTION_ADDTS_RESPONSE1, "ADDTS Response"},
2632 {QOS_ACTION_DELTS2, "DELTS"},
2633 {QOS_ACTION_SCHEDULE3, "Schedule"},
2634 {QOS_ACTION_MAP_CONFIGURE4, "QoS Map Configure"},
2635 {0, NULL((void*)0)}
2636};
2637
2638static const value_string ba_action_codes[] = {
2639 {BA_ADD_BLOCK_ACK_REQUEST0, "Add Block Ack Request"},
2640 {BA_ADD_BLOCK_ACK_RESPONSE1, "Add Block Ack Response"},
2641 {BA_DELETE_BLOCK_ACK2, "Delete Block Ack"},
2642 {BA_NDP_ADD_BLOCK_ACK_REQUEST128, "NDP ADDBA Request"},
2643 {BA_NDP_ADD_BLOCK_ACK_RESPONSE129, "NDP ADDBA Response"},
2644 {BA_NDP_DELETE_BLOCK_ACK130, "NDP DELBA"},
2645 {BA_BAT_ADD_BLOCK_ACK_REQUEST132, "BAT ADDBA Request"},
2646 {BA_BAT_ADD_BLOCK_ACK_RESPONSE133, "BAT ADDBA Response"},
2647 {BA_BAT_DELETE_BLOCK_ACK134, "BAT DELBA"},
2648 {0x00, NULL((void*)0)}
2649};
2650
2651static const value_string dls_action_codes[] = {
2652 {DLS_ACTION_REQUEST0, "DLS Request"},
2653 {DLS_ACTION_RESPONSE1, "DLS Response"},
2654 {DLS_ACTION_TEARDOWN2, "DLS Teardown"},
2655 {0, NULL((void*)0)}
2656};
2657
2658static const value_string tsinfo_type[] = {
2659 {0x0, "Aperiodic or unspecified Traffic"},
2660 {0x1, "Periodic Traffic"},
2661 {0, NULL((void*)0)}
2662};
2663
2664static const value_string tsinfo_direction[] = {
2665 {0x00, "Uplink"},
2666 {0x01, "Downlink"},
2667 {0x02, "Direct link"},
2668 {0x03, "Bidirectional link"},
2669 {0, NULL((void*)0)}
2670};
2671
2672static const value_string tsinfo_access[] = {
2673 {0x00, "Reserved"},
2674 {0x01, "EDCA"},
2675 {0x02, "HCCA"},
2676 {0x03, "HEMM"},
2677 {0, NULL((void*)0)}
2678};
2679
2680static const value_string qos_up[] = {
2681 {0x00, "Best Effort"},
2682 {0x01, "Background"},
2683 {0x02, "Spare"},
2684 {0x03, "Excellent Effort"},
2685 {0x04, "Controlled Load"},
2686 {0x05, "Video"},
2687 {0x06, "Voice"},
2688 {0x07, "Network Control"},
2689 {0, NULL((void*)0)}
2690};
2691
2692static const range_string classifier_type[] = {
2693 {0x00, 0x00, "Ethernet parameters"},
2694 {0x01, 0x01, "TCP/UDP IP parameters"},
2695 {0x02, 0x02, "IEEE 802.1D/Q parameters"},
2696 {0x03, 0x03, "Filter Offset parameters"},
2697 {0x04, 0x04, "IP and higher layer parameters"},
2698 {0x05, 0x05, "IEEE 802.1D/Q parameters"},
2699 {0x06, 0x06, "IEEE 802.11 MAC header parameters"},
2700 {0x07, 0x07, "IEEE Std 802.11 downlink PV1 MPDU MAC header parameters"},
2701 {0x08, 0x08, "IEEE Std 802.11 non-downlink PV1 MPDU MAC header parameters"},
2702 {0x09, 0x09, "IEEE Std 802.11 PV1 MPDU Full Address MAC header parameters"},
2703 {0x0A, 0x0A, "IP extensions and higher layer parameters"},
2704 {0x0B, 0xFF, "Reserved" },
2705 {0, 0, NULL((void*)0)}
2706};
2707
2708static const true_false_string ieee80211_block_ack_control_ack_policy_flag = {
2709 "Sender Does Not Require Immediate Acknowledgement",
2710 "Immediate Acknowledgement Required"
2711};
2712
2713static const value_string ft_action_codes[] = {
2714 {FT_ACTION_REQUEST1, "FT Request"},
2715 {FT_ACTION_RESPONSE2, "FT Response"},
2716 {FT_ACTION_CONFIRM3, "FT Confirm"},
2717 {FT_ACTION_ACK4, "FT Ack"},
2718 {0, NULL((void*)0)}
2719};
2720
2721static const value_string sa_query_action_codes[] = {
2722 {SA_QUERY_REQUEST0, "SA Query Request"},
2723 {SA_QUERY_RESPONSE1, "SA Query Response"},
2724 {0, NULL((void*)0)}
2725};
2726
2727static const value_string ieee80211_data_encap_payload_types[] = {
2728 {1, "Remote Request/Response"},
2729 {2, "TDLS"},
2730 {0, NULL((void*)0)}
2731};
2732
2733static const true_false_string rsn_preauth_flags = {
2734 "Transmitter supports pre-authentication",
2735 "Transmitter does not support pre-authentication"
2736};
2737
2738static const true_false_string rsn_no_pairwise_flags = {
2739 "Transmitter cannot support WEP default key 0 simultaneously with "
2740 "Pairwise key",
2741 "Transmitter can support WEP default key 0 simultaneously with "
2742 "Pairwise key"
2743};
2744
2745static const value_string rsn_cap_replay_counter[] = {
2746 {0x00, "1 replay counter per PTKSA/GTKSA/STAKeySA"},
2747 {0x01, "2 replay counters per PTKSA/GTKSA/STAKeySA"},
2748 {0x02, "4 replay counters per PTKSA/GTKSA/STAKeySA"},
2749 {0x03, "16 replay counters per PTKSA/GTKSA/STAKeySA"},
2750 {0, NULL((void*)0)}
2751};
2752
2753static const true_false_string ht_ldpc_coding_flag = {
2754 "Transmitter supports receiving LDPC coded packets",
2755 "Transmitter does not support receiving LDPC coded packets"
2756};
2757
2758static const true_false_string ht_chan_width_flag = {
2759 "Transmitter supports 20MHz and 40MHz operation",
2760 "Transmitter only supports 20MHz operation"
2761};
2762
2763static const value_string ht_sm_pwsave_flag[] = {
2764 {0x00, "Static SM Power Save mode"},
2765 {0x01, "Dynamic SM Power Save mode"},
2766 {0x02, "Reserved"},
2767 {0x03, "SM Power Save disabled"},
2768 {0x00, NULL((void*)0)}
2769};
2770
2771static const true_false_string ht_green_flag = {
2772 "Transmitter is able to receive PPDUs with Green Field (GF) preamble",
2773 "Transmitter is not able to receive PPDUs with Green Field (GF) preamble"
2774};
2775
2776static const value_string ht_rx_stbc_flag[] = {
2777 {0x00, "No Rx STBC support"},
2778 {0x01, "Rx support of one spatial stream"},
2779 {0x02, "Rx support of one and two spatial streams"},
2780 {0x03, "Rx support of one, two, and three spatial streams"},
2781 {0x00, NULL((void*)0)}
2782};
2783
2784 /* IEEE Stc 802.11ac-2013 8.4.2.29 Extended Capabilities element*/
2785static const value_string vht_max_mpdu_in_amsdu[] = {
2786 {0x00, "No limit"},
2787 {0x01, "32"},
2788 {0x02, "16"},
2789 {0x03, "8"},
2790 {0, NULL((void*)0)}
2791};
2792
2793 /* IEEE Stc 802.11ac/D3.1 */
2794
2795static const value_string vht_max_mpdu_length_flag[] = {
2796 {0x00, "3 895"},
2797 {0x01, "7 991"},
2798 {0x02, "11 454"},
2799 {0x03, "Reserved"},
2800 {0x00, NULL((void*)0)}
2801};
2802
2803static const value_string vht_supported_chan_width_set_flag[] = {
2804 {0x00, "Neither 160MHz nor 80+80 supported"},
2805 {0x01, "160MHz supported"},
2806 {0x02, "160MHz and 80+80 Supported"},
2807 {0x03, "Reserved"},
2808 {0x00, NULL((void*)0)}
2809};
2810
2811static const value_string vht_rx_stbc_flag[] = {
2812 {0x00, "None"},
2813 {0x01, "1 Spatial Stream Supported"},
2814 {0x02, "1 to 2 Spatial Stream Supported"},
2815 {0x03, "1 to 3 Spatial Stream Supported"},
2816 {0x04, "1 to 4 Spatial Stream Supported"},
2817 {0x05, "Reserved"},
2818 {0x06, "Reserved"},
2819 {0x07, "Reserved"},
2820 {0x00, NULL((void*)0)}
2821};
2822
2823static const value_string num_plus_one_3bit_flag[] = {
2824 {0x00, "1"},
2825 {0x01, "2"},
2826 {0x02, "3"},
2827 {0x03, "4"},
2828 {0x04, "5"},
2829 {0x05, "6"},
2830 {0x06, "7"},
2831 {0x07, "8"},
2832 {0x00, NULL((void*)0)}
2833};
2834
2835static const value_string vht_max_ampdu_flag[] = {
2836 {0x00, "8 191"},
2837 {0x01, "16 383"},
2838 {0x02, "32 767"},
2839 {0x03, "65 535"},
2840 {0x04, "131 071"},
2841 {0x05, "262 143"},
2842 {0x06, "524 287"},
2843 {0x07, "1 048 575"},
2844 {0x00, NULL((void*)0)}
2845};
2846
2847static const value_string vht_link_adapt_flag[] = {
2848 {0x00, "No Feedback"},
2849 {0x01, "Reserved (logically only solicited feedback)"},
2850 {0x02, "Unsolicited feedback only"},
2851 {0x03, "Both (can provide unsolicited feedback and respond to VHT MRQ)"},
2852 {0x00, NULL((void*)0)}
2853};
2854
2855static const value_string vht_supported_mcs_flag[] = {
2856 {0x00, "MCS 0-7"},
2857 {0x01, "MCS 0-8"},
2858 {0x02, "MCS 0-9"},
2859 {0x03, "Not Supported"},
2860 {0x00, NULL((void*)0)}
2861};
2862
2863static const value_string vht_tpe_pwr_units[] = {
2864 { 0, "Local EIRP" },
2865 { 1, "Local EIRP PSD" },
2866 { 2, "Regulatory client EIRP" },
2867 { 3, "Regulatory client EIRP PSD" },
2868 { 4, "Additional regulatory client EIRP" },
2869 { 5, "Additional regulatory client EIRP PSD" },
2870 { 6, "Reserved" },
2871 { 7, "Reserved" },
2872 {0x00, NULL((void*)0)}
2873};
2874
2875static const true_false_string vht_ndp_annc_sta_info_feedback_type = {
2876 "MU feedback requested",
2877 "SU feedback requested"
2878};
2879
2880static const true_false_string ht_max_amsdu_flag = {
2881 "7935 bytes",
2882 "3839 bytes"
2883};
2884
2885static const true_false_string ht_dss_cck_40_flag = {
2886 "Will/Can use DSSS/CCK in 40 MHz",
2887 "Won't/Can't use of DSSS/CCK in 40 MHz"
2888};
2889
2890static const true_false_string ht_40_mhz_intolerant_flag = {
2891 "Use of 40 MHz transmissions restricted/disallowed",
2892 "Use of 40 MHz transmissions unrestricted/allowed"
2893};
2894
2895static const value_string ampduparam_mpdu_start_spacing_flags[] = {
2896 {0x00, "No restriction"},
2897 {0x01, "1/4 [usec]"},
2898 {0x02, "1/2 [usec]"},
2899 {0x03, "1 [usec]"},
2900 {0x04, "2 [usec]"},
2901 {0x05, "4 [usec]"},
2902 {0x06, "8 [usec]"},
2903 {0x07, "16 [usec]"},
2904 {0x00, NULL((void*)0)}
2905};
2906
2907static const true_false_string mcsset_tx_rx_mcs_set_not_equal_flag = {
2908 "Not Equal",
2909 "Equal",
2910};
2911
2912static const value_string mcsset_tx_max_spatial_streams_flags[] = {
2913 {0x00, "1 spatial stream"},
2914 {0x01, "2 spatial streams"},
2915 {0x02, "3 spatial streams"},
2916 {0x03, "4 spatial streams"},
2917 {0x04, "TX MCS Set Not Defined"},
2918 {0x00, NULL((void*)0)}
2919};
2920
2921static const value_string htex_mcs_flags[] = {
2922 {0x00, "STA does not provide MCS feedback"},
2923 {0x01, "Reserved"},
2924 {0x02, "STA provides only unsolicited MCS feedback"},
2925 {0x03, "STA can provide MCS feedback in response to MRQ as well as unsolicited MCS feedback"},
2926 {0x00, NULL((void*)0)}
2927};
2928
2929static const value_string txbf_calib_flag[] = {
2930 {0x00, "Not supported"},
2931 {0x01, "Can respond to a calibration request but cannot initiate calibration"},
2932 {0x02, "Reserved"},
2933 {0x03, "Can both initiate and respond to a calibration request"},
2934 {0x00, NULL((void*)0)}
2935};
2936
2937static const value_string txbf_feedback_flags[] = {
2938 {0x00, "Not supported"},
2939 {0x01, "Delayed feedback capable"},
2940 {0x02, "Immediate feedback capable"},
2941 {0x03, "Delayed and immediate feedback capable"},
2942 {0x00, NULL((void*)0)}
2943};
2944
2945static const value_string txbf_antenna_flags[] = {
2946 {0x00, "1 TX antenna sounding"},
2947 {0x01, "2 TX antenna sounding"},
2948 {0x02, "3 TX antenna sounding"},
2949 {0x03, "4 TX antenna sounding"},
2950 {0x00, NULL((void*)0)}
2951};
2952
2953static const value_string txbf_csi_max_rows_bf_flags[] = {
2954 {0x00, "1 row of CSI"},
2955 {0x01, "2 rows of CSI"},
2956 {0x02, "3 rows of CSI"},
2957 {0x03, "4 rows of CSI"},
2958 {0x00, NULL((void*)0)}
2959};
2960
2961static const value_string txbf_chan_est_flags[] = {
2962 {0x00, "1 space time stream"},
2963 {0x01, "2 space time streams"},
2964 {0x02, "3 space time streams"},
2965 {0x03, "4 space time streams"},
2966 {0x00, NULL((void*)0)}
2967};
2968
2969static const value_string txbf_min_group_flags[] = {
2970 {0x00, "No grouping supported"},
2971 {0x01, "Groups of 1, 2 supported"},
2972 {0x02, "Groups of 1, 4 supported"},
2973 {0x03, "Groups of 1, 2, 4 supported"},
2974 {0x00, NULL((void*)0)}
2975};
2976
2977static const value_string hta_ext_chan_offset_flag[] = {
2978 {0x00, "No Extension Channel"},
2979 {0x01, "Extension Channel above control channel"},
2980 {0x02, "Undefined"},
2981 {0x03, "Extension Channel below control channel"},
2982 {0x00, NULL((void*)0)}
2983};
2984
2985static const true_false_string hta_rec_tx_width_flag = {
2986 "Any channel width enabled",
2987 "Use 20MHz channel (control)"
2988};
2989
2990static const true_false_string hta_rifs_mode_flag = {
2991 "Use of RIFS permitted",
2992 "Use of RIFS prohibited"
2993};
2994
2995static const true_false_string hta_controlled_access_flag = {
2996 "Not only PSMP",
2997 "PSMP only"
2998};
2999
3000static const value_string hta_service_interval_flag[] = {
3001 {0x00, "5ms"},
3002 {0x01, "10ms"},
3003 {0x02, "15ms"},
3004 {0x03, "20ms"},
3005 {0x04, "25ms"},
3006 {0x05, "30ms"},
3007 {0x06, "35ms"},
3008 {0x07, "40ms"},
3009 {0x00, NULL((void*)0)}
3010};
3011
3012static const value_string hta_operating_mode_flag[] = {
3013 {0x00, "Pure HT, no protection"},
3014 {0x01, "There may be non-HT devices (control & ext channel)"},
3015 {0x02, "No non-HT is associated, but at least 1 20MHz is. protect on"},
3016 {0x03, "Mixed: no non-HT is associated, protect on"},
3017 {0x00, NULL((void*)0)}
3018};
3019
3020static const true_false_string hta_non_gf_devices_flag = {
3021 "All HT devices associated are GF capable",
3022 "One or More HT devices are not GF capable"
3023};
3024
3025static const true_false_string hta_dual_stbc_protection_flag = {
3026 "Dual CTS protections is used",
3027 "Regular use of RTS/CTS"
3028};
3029
3030static const true_false_string hta_secondary_beacon_flag = {
3031 "Secondary Beacon",
3032 "Primary Beacon"
3033};
3034
3035static const true_false_string hta_lsig_txop_protection_flag = {
3036 "Full Support",
3037 "Not full support"
3038};
3039
3040static const true_false_string hta_pco_active_flag = {
3041 "PCO is activated in the BSS",
3042 "PCO is not activated in the BSS"
3043};
3044
3045static const true_false_string hta_pco_phase_flag = {
3046 "Switch to 20MHz phase/keep 20MHz",
3047 "Switch to 40MHz phase/keep 40MHz"
3048};
3049
3050static const value_string ht_info_secondary_channel_offset_flags[] = {
3051 {0x00, "No secondary channel"},
3052 {0x01, "Secondary channel is above the primary channel"},
3053 {0x02, "Reserved"},
3054 {0x03, "Secondary channel is below the primary channel"},
3055 {0x00, NULL((void*)0)}
3056};
3057
3058static const true_false_string ht_info_channel_sta_width_flag = {
3059 "Channel of any width supported",
3060 "20 MHz channel width only"
3061};
3062
3063static const true_false_string ht_info_rifs_mode_flag = {
3064 "Permitted",
3065 "Prohibited"
3066};
3067
3068static const value_string ht_info_operating_protection_mode_flags[] = {
3069 {0x00, "No protection mode"},
3070 {0x01, "HT non-member protection mode"},
3071 {0x02, "20 MHz protection mode"},
3072 {0x03, "non-HT mixed mode"},
3073 {0x00, NULL((void*)0)}
3074};
3075
3076static const true_false_string ht_info_non_greenfield_sta_present_flag = {
3077 "One or more associated STAs are not greenfield capable",
3078 "All associated STAs are greenfield capable"
3079};
3080
3081static const true_false_string ht_info_obss_non_ht_stas_present_flag = {
3082 "Use of protection for non-HT STAs by overlapping BSSs is needed",
3083 "Use of protection for non-HT STAs by overlapping BSSs is not needed"
3084};
3085
3086static const true_false_string ht_info_dual_beacon_flag = {
3087 "AP transmits a secondary beacon",
3088 "No second beacon is transmitted"
3089};
3090
3091static const true_false_string ht_info_stbc_beacon_flag = {
3092 "STBC beacon",
3093 "Primary beacon"
3094};
3095
3096static const true_false_string htc_lac_trq_flag = {
3097 "Want sounding PPDU",
3098 "Don't want sounding PPDU"
3099};
3100
3101static const true_false_string htc_lac_mai_mrq_flag = {
3102 "MCS feedback requested",
3103 "No MCS feedback requested"
3104};
3105
3106static const value_string ieee80211_htc_lac_asel_command_flags[] = {
3107 {0x00, "Transmit Antenna Selection Sounding Indication (TXASSI)"},
3108 {0x01, "Transmit Antenna Selection Sounding Request (TXASSR)"},
3109 {0x02, "Receive Antenna Selection Sounding Indication (RXASSI)"},
3110 {0x03, "Receive Antenna Selection Sounding Request (RXASSR)"},
3111 {0x04, "Sounding Label"},
3112 {0x05, "No feedback, ASEL training failure"},
3113 {0x06, "Transmit Antenna Selection Sounding Indication (TXASSI) requesting feedback of explicit CSI"},
3114 {0x07, "Reserved"},
3115 {0x00, NULL((void*)0)}
3116};
3117
3118static const value_string ieee80211_htc_cal_pos_flags[] = {
3119 {0x00, "Not a calibration frame"},
3120 {0x01, "Calibration Start"},
3121 {0x02, "Sounding Response"},
3122 {0x03, "Sounding Complete"},
3123 {0x00, NULL((void*)0)}
3124};
3125
3126static const value_string ieee80211_htc_csi_steering_flags[] = {
3127 {0x00, "No feedback required"},
3128 {0x01, "CSI"},
3129 {0x02, "Non-compressed Beamforming Feedback Matrix"},
3130 {0x03, "Compressed Beamforming Feedback Matrix"},
3131 {0x00, NULL((void*)0)}
3132};
3133
3134static const true_false_string ieee80211_htc_ndp_announcement_flag = {
3135 "NDP will follow",
3136 "No NDP will follow"
3137};
3138
3139static const value_string ieee80211_htc_bw_recommended_vht_mcs_vals[] = {
3140 {0, "20 MHz"},
3141 {1, "40 MHz"},
3142 {2, "80 MHz"},
3143 {3, "160 MHz and 80+80 MHz"},
3144 {0, NULL((void*)0)}
3145};
3146
3147static const value_string ieee80211_htc_s1g_bw_recommended_vht_mcs_vals[] = {
3148 {0, "1 MHz"},
3149 {1, "2 MHz"},
3150 {2, "4 MHz"},
3151 {3, "8 MHz"},
3152 {4, "16 MHz"},
3153 {5, "Reserved"},
3154 {6, "Reserved"},
3155 {7, "Reserved"},
3156 {0, NULL((void*)0)}
3157};
3158
3159static const value_string ieee80211_htc_coding_type_vals[] = {
3160 {0, "BCC"},
3161 {1, "LDPC"},
3162 {0, NULL((void*)0)}
3163};
3164
3165static const value_string ieee80211_htc_fb_tx_type_vals[] = {
3166 {0, "Not beamformed"},
3167 {1, "Beamformed"},
3168 {0, NULL((void*)0)}
3169};
3170
3171static const value_string ieee80211_tag_secondary_channel_offset_flags[] = {
3172 {0x00, "No Secondary Channel"},
3173 {0x01, "Above Primary Channel"},
3174 {0x02, "Reserved"},
3175 {0x03, "Below Primary Channel"},
3176 {0x00, NULL((void*)0)}
3177};
3178
3179#define BSS_BITMASK_UP00x0001 0x0001
3180#define BSS_BITMASK_UP10x0002 0x0002
3181#define BSS_BITMASK_UP20x0004 0x0004
3182#define BSS_BITMASK_UP30x0008 0x0008
3183#define BSS_BITMASK_UP40x0010 0x0010
3184#define BSS_BITMASK_UP50x0020 0x0020
3185#define BSS_BITMASK_UP60x0040 0x0040
3186#define BSS_BITMASK_UP70x0080 0x0080
3187#define BSS_BITMASK_AC00x0100 0x0100
3188#define BSS_BITMASK_AC10x0200 0x0200
3189#define BSS_BITMASK_AC20x0400 0x0400
3190#define BSS_BITMASK_AC30x0800 0x0800
3191#define BSS_BITMASK_RSV0xF000 0xF000
3192
3193static const value_string ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags[] = {
3194 {0x00, "Frames may be transmitted before the channel switch has been completed"},
3195 {0x01, "No more frames are to be transmitted until the channel switch has been completed"},
3196 {0x00, NULL((void*)0)}
3197};
3198
3199static const value_string service_interval_granularity_vals[] = {
3200 { 0, "5 ms" },
3201 { 1, "10 ms" },
3202 { 2, "15 ms" },
3203 { 3, "20 ms" },
3204 { 4, "25 ms" },
3205 { 5, "30 ms" },
3206 { 6, "35 ms" },
3207 { 7, "40 ms" },
3208 { 0x00, NULL((void*)0) }
3209};
3210
3211static const value_string wep_type_vals[] = {
3212 { DOT11DECRYPT_KEY_TYPE_WEP0, STRING_KEY_TYPE_WEP"wep" },
3213 { DOT11DECRYPT_KEY_TYPE_WPA_PWD3, STRING_KEY_TYPE_WPA_PWD"wpa-pwd" },
3214 { DOT11DECRYPT_KEY_TYPE_WPA_PSK4, STRING_KEY_TYPE_WPA_PSK"wpa-psk" },
3215 { DOT11DECRYPT_KEY_TYPE_TK6, STRING_KEY_TYPE_TK"tk" },
3216 { DOT11DECRYPT_KEY_TYPE_MSK7, STRING_KEY_TYPE_MSK"msk" },
3217 { 0x00, NULL((void*)0) }
3218};
3219
3220static const value_string ieee80211_ht_pren_type_vals[] = {
3221 { 51, "HT Capabilities (802.11n D1.10)" },
3222 { 52, "HT Additional Capabilities (802.11n D1.00)" },
3223 { 0, NULL((void*)0) }
3224};
3225
3226static const true_false_string ieee80211_cf_ssw_direction = {
3227 "Transmitted by the beamforming responder",
3228 "Transmitted by the beamforming initiator"
3229};
3230
3231static const value_string bss_type[] = {
3232 {0x0, "Reserved"},
3233 {0x1, "IBSS"},
3234 {0x2, "PBSS"},
3235 {0x3, "Infrastructure BSS"},
3236 {0, NULL((void*)0)}
3237};
3238
3239static const value_string band_id[] = {
3240 {0x0, "TV white spaces"},
3241 {0x1, "Sub-1 GHz (excluding TV white spaces)"},
3242 {0x2, "2.4 GHz"},
3243 {0x3, "3.6 GHz"},
3244 {0x4, "4.9 and 5 GHz"},
3245 {0x5, "60 GHz"},
3246 {0x6, "45 GHz"},
3247 {0x7, "6 GHz"},
3248 {0, NULL((void*)0)}
3249};
3250
3251static const value_string extended_sc_mcs[] = {
3252 {0x0, "None"},
3253 {0x1, "MCS 9.1"},
3254 {0x2, "MCS 12.1"},
3255 {0x3, "MCS 12.2"},
3256 {0x4, "MCS 12.3"},
3257 {0x5, "MCS 12.4"},
3258 {0x6, "MCS 12.5"},
3259 {0x7, "MCS 12.6"},
3260 {0, NULL((void*)0)}
3261};
3262
3263static const range_string max_basic_sf_amsdu[] = {
3264 {0, 0, "No Limit"},
3265 {1, 1, "4 Basic subframes"},
3266 {2, 2, "8 Basic subframes"},
3267 {3, 3, "16 Basic subframes"},
3268 {4, 4, "32 Basic subframes"},
3269 {5, 5, "64 Basic subframes"},
3270 {6, 6, "128 Basic subframes"},
3271 {7, 7, "256 Basic subframes"},
3272 {8, 255, "reserved"},
3273 {0, 0, NULL((void*)0)}
3274};
3275
3276static const range_string max_short_sf_amsdu[] = {
3277 {0, 0, "No Limit"},
3278 {1, 1, "32 Short subframes"},
3279 {2, 2, "64 Short subframes"},
3280 {3, 3, "128 Short subframes"},
3281 {4, 4, "256 Short subframes"},
3282 {5, 5, "512 Short subframes"},
3283 {6, 6, "1024 Short subframes"},
3284 {7, 255, "reserved"},
3285 {0, 0, NULL((void*)0)}
3286};
3287
3288static const value_string allocation_type[] = {
3289 {0x0, "SP Allocation"},
3290 {0x1, "CBAP allocation"},
3291 {0, NULL((void*)0)}
3292};
3293
3294static const value_string vht_operation_info_channel_width[] = {
3295 {0x00, "20MHz or 40MHz"},
3296 {0x01, "80MHZ"},
3297 {0x10, "160MHz"},
3298 {0x11, "80MHz+80MHz"},
3299 {0, NULL((void*)0)}
3300};
3301static const value_string operating_mode_field_channel_width[] = {
3302 {0x00, "20MHz"},
3303 {0x01, "40MHZ"},
3304 {0x02, "80MHz"},
3305 {0x03, "160MHz or 80MHz+80MHz"},
3306 {0, NULL((void*)0)}
3307};
3308
3309static const value_string operat_mode_field_rxnss[] = {
3310 {0x0, "1Nss"},
3311 {0x1, "2Nss"},
3312 {0x2, "3Nss"},
3313 {0x3, "4Nss"},
3314 {0x4, "5Nss"},
3315 {0x5, "6Nss"},
3316 {0x6, "7Nss"},
3317 {0x7, "8Nss"},
3318 {0, NULL((void*)0)}
3319};
3320
3321#define VHT_ACT_VHT_COMPRESSED_BEAMFORMING0 0
3322#define VHT_ACT_GROUP_ID_MANAGEMENT1 1
3323#define VHT_ACT_OPERATION_MODE_NOTIFICATION2 2
3324
3325static const value_string vht_action_vals[] = {
3326 {VHT_ACT_VHT_COMPRESSED_BEAMFORMING0, "VHT Compressed Beamforming"},
3327 {VHT_ACT_GROUP_ID_MANAGEMENT1, "Group ID Management"},
3328 {VHT_ACT_OPERATION_MODE_NOTIFICATION2, "Operating Mode Notification"},
3329 {0, NULL((void*)0)}
3330};
3331
3332static const value_string ff_vht_mimo_cntrl_nc_index_vals[] = {
3333 {0x00, "1 Column"},
3334 {0x01, "2 Columns"},
3335 {0x02, "3 Columns"},
3336 {0x03, "4 Columns"},
3337 {0x04, "5 Columns"},
3338 {0x05, "6 Columns"},
3339 {0x06, "7 Columns"},
3340 {0x07, "8 Columns"},
3341 {0, NULL((void*)0)}
3342};
3343
3344static const value_string ff_vht_mimo_cntrl_nr_index_vals[] = {
3345 {0x00, "1 Row"},
3346 {0x01, "2 Rows"},
3347 {0x02, "3 Rows"},
3348 {0x03, "4 Rows"},
3349 {0x04, "5 Rows"},
3350 {0x05, "6 Rows"},
3351 {0x06, "7 Rows"},
3352 {0x07, "8 Rows"},
3353 {0, NULL((void*)0)}
3354};
3355
3356static const value_string ff_vht_mimo_cntrl_channel_width_vals[] = {
3357 {0x00, "20 MHz"},
3358 {0x01, "40 MHz"},
3359 {0x02, "80 MHz"},
3360 {0x03, "160 MHz / 80+80 MHz"},
3361 {0, NULL((void*)0)}
3362};
3363
3364static const value_string ff_vht_mimo_cntrl_grouping_vals[] = {
3365 {0x00, "1 (No Grouping)"},
3366 {0x01, "2"},
3367 {0x02, "4"},
3368 {0x03, "Reserved"},
3369 {0, NULL((void*)0)}
3370};
3371
3372static const value_string ff_vht_mimo_cntrl_feedback_vals[] = {
3373 {0x00, "SU"},
3374 {0x01, "MU"},
3375 {0, NULL((void*)0)}
3376};
3377
3378#define S1G_ACT_AID_SWITCH_REQUEST0 0
3379#define S1G_ACT_AID_SWITCH_RESPONSE1 1
3380#define S1G_ACT_SYNC_CONTROL2 2
3381#define S1G_ACT_STA_INFO_ANNOUNCE3 3
3382#define S1G_ACT_EDCA_PARAM_SET4 4
3383#define S1G_ACT_EL_OPERATION5 5
3384#define S1G_ACT_TWT_SETUP6 6
3385#define S1G_ACT_TWT_TEARDOWN7 7
3386#define S1G_ACT_SECT_GROUP_ID_LIST8 8
3387#define S1G_ACT_SECT_ID_FEEDBACK9 9
3388#define S1G_ACT_RESERVED10 10
3389#define S1G_ACT_TWT_INFORMATION11 11
3390
3391static const value_string s1g_action_vals[] = {
3392 {S1G_ACT_AID_SWITCH_REQUEST0, "AID Switch Request"},
3393 {S1G_ACT_AID_SWITCH_RESPONSE1, "AID Switch Response"},
3394 {S1G_ACT_SYNC_CONTROL2, "Sync Control"},
3395 {S1G_ACT_STA_INFO_ANNOUNCE3, "STA Information Announcement"},
3396 {S1G_ACT_EDCA_PARAM_SET4, "EDCA Parameter Set"},
3397 {S1G_ACT_EL_OPERATION5, "EL Operation"},
3398 {S1G_ACT_TWT_SETUP6, "TWT Setup"},
3399 {S1G_ACT_TWT_TEARDOWN7, "TWT Teardown"},
3400 {S1G_ACT_SECT_GROUP_ID_LIST8, "Sectorized Group ID List"},
3401 {S1G_ACT_SECT_ID_FEEDBACK9, "Sector ID Feedback"},
3402 {S1G_ACT_RESERVED10, "Reserved"},
3403 {S1G_ACT_TWT_INFORMATION11, "TWT Information"},
3404 {0, NULL((void*)0)},
3405};
3406
3407#define PROT_S1G_ACT_REACH_ADDR_UPDATE0 0
3408#define PROT_S1G_ACT_RELAY_ACTIVATE_REQ1 1
3409#define PROT_S1G_ACT_RELAY_ACTIVATE_RESP2 2
3410#define PROT_S1G_ACT_HEADER_COMPRESSION3 3
3411#define PROT_S1G_ACT_TWT_SETUP4 4
3412#define PROT_S1G_ACT_TWT_TEARDOWN5 5
3413#define PROT_S1G_ACT_TWT_INFORMATION6 6
3414#define PROT_S1G_ACT_AID_SWITCH_REQUEST7 7
3415#define PROT_S1G_ACT_AID_SWITCH_RESPONSE8 8
3416#define PROT_S1G_ACT_SYNC_CONTROL9 9
3417#define PROT_S1G_ACT_STA_INFO_ANNOUNCE10 10
3418#define PROT_S1G_ACT_EDCA_PARAM_SET11 11
3419#define PROT_S1G_ACT_EL_OPERATION12 12
3420#define PROT_S1G_ACT_SECT_GROUP_ID_LIST13 13
3421#define PROT_S1G_ACT_SECT_ID_FEEDBACK14 14
3422
3423static const value_string prot_s1g_action_vals[] = {
3424 {PROT_S1G_ACT_REACH_ADDR_UPDATE0, "Reachable Address Update"},
3425 {PROT_S1G_ACT_RELAY_ACTIVATE_REQ1, "Relay Activation Request"},
3426 {PROT_S1G_ACT_RELAY_ACTIVATE_RESP2, "Relay Activation Response"},
3427 {PROT_S1G_ACT_HEADER_COMPRESSION3, "Header Compression"},
3428 {PROT_S1G_ACT_TWT_SETUP4, "Protected TWT Setup"},
3429 {PROT_S1G_ACT_TWT_TEARDOWN5, "Protected TWT Teardown"},
3430 {PROT_S1G_ACT_TWT_INFORMATION6, "Protected TWT Information"},
3431 {PROT_S1G_ACT_AID_SWITCH_REQUEST7, "Protected AID Switch Request"},
3432 {PROT_S1G_ACT_AID_SWITCH_RESPONSE8, "Protected AID Switch Response"},
3433 {PROT_S1G_ACT_SYNC_CONTROL9, "Protected Sync Control"},
3434 {PROT_S1G_ACT_STA_INFO_ANNOUNCE10, "Protected STA Information Announcement"},
3435 {PROT_S1G_ACT_EDCA_PARAM_SET11, "Protected EDCA Parameter Set"},
3436 {PROT_S1G_ACT_EL_OPERATION12, "Protected EL Operation"},
3437 {PROT_S1G_ACT_SECT_GROUP_ID_LIST13, "Protected Sectorized Group ID List"},
3438 {PROT_S1G_ACT_SECT_ID_FEEDBACK14, "Protected Sector ID Feedback"},
3439 {0, NULL((void*)0)},
3440};
3441
3442static const value_string twt_neg_type_vals[] = {
3443 {0x0, "Individual TWT"},
3444 {0x1, "Wake TBTT"},
3445 {0x2, "Broadcast TWT schedule, TWT element in broadcast management frame"},
3446 {0x3, "Broadcast TWT schedule, TWT element in unicast management frame"},
3447 {0, NULL((void*)0)},
3448};
3449
3450static const true_false_string twt_responder_pm_mode_tfs = {
3451 "AP may doze outside the TWT",
3452 "AP is always awake",
3453};
3454
3455static const true_false_string twt_requester_tfs = {
3456 "This STA is a TWT Requesting STA",
3457 "This STA is a TWT Responding STA or a TWT scheduling AP",
3458};
3459
3460static const true_false_string twt_info_frame_disabled_tfs = {
3461 "Reception of TWT Information frames is disabled",
3462 "Reception of TWT Information frames is enabled",
3463};
3464
3465static const true_false_string twt_wake_duration_unit_tfs = {
3466 "1 TU",
3467 "256 microseconds",
3468};
3469
3470#define REQUEST_TWT0 0
3471#define SUGGEST_TWT1 1
3472#define DEMAND_TWT2 2
3473#define TWT_GROUPING3 3
3474#define ACCEPT_TWT4 4
3475#define ALTERNATE_TWT5 5
3476#define DICTATE_TWT6 6
3477#define REJECT_TWT7 7
3478
3479static const value_string twt_setup_cmd[] = {
3480 {REQUEST_TWT0, "Request TWT"},
3481 {SUGGEST_TWT1, "Suggest TWT"},
3482 {DEMAND_TWT2, "Demand TWT"},
3483 {TWT_GROUPING3, "TWT Grouping"},
3484 {ACCEPT_TWT4, "Accept TWT"},
3485 {ALTERNATE_TWT5, "Alternate TWT"},
3486 {DICTATE_TWT6, "Dictate TWT"},
3487 {REJECT_TWT7, "Reject TWT"},
3488 {0, NULL((void*)0)},
3489};
3490
3491static const true_false_string twt_trigger = {
3492 "TWT SP includes trigger frames",
3493 "TWT SP does not include trigger frames",
3494};
3495
3496static const true_false_string twt_implicit = {
3497 "TWT is implicit",
3498 "TWT is explicit",
3499};
3500
3501static const true_false_string twt_flow_type = {
3502 "TWT is unannounced, the TWT responding STA can send frames at any time",
3503 "TWT is announced, the TWT Requesting STA will send trigger frames",
3504};
3505
3506static const value_string he_phy_device_class_vals[] = {
3507 { 0, "Class B Device" },
3508 { 1, "Class A Device" },
3509 { 0, NULL((void*)0) }
3510};
3511
3512static const value_string he_phy_midamble_tx_rx_max_nsts_vals[] = {
3513 { 0, "1 Space-Time Stream" },
3514 { 1, "2 Space-Time Streams" },
3515 { 2, "3 Space-Time Streams" },
3516 { 3, "4 Space-Time Streams" },
3517 { 0, NULL((void*)0) }
3518};
3519
3520static const value_string he_phy_dcm_max_constellation_vals[] = {
3521 { 0, "DCM is not supported" },
3522 { 1, "BPSK" },
3523 { 2, "QPSK" },
3524 { 3, "16-QAM" },
3525 { 0, NULL((void*)0) }
3526};
3527
3528static const value_string he_phy_dcm_max_nss_vals[] = {
3529 { 0, "1 Spatial Stream" },
3530 { 1, "2 Spatial Streams" },
3531 { 0, NULL((void*)0) }
3532};
3533
3534static const value_string he_phy_dcm_max_ru_vals[] = {
3535 { 0, "242-tone RU" },
3536 { 1, "484-tone RU" },
3537 { 2, "996-tone RU" },
3538 { 3, "2x996-tone RU"},
3539 { 0, NULL((void*)0) }
3540};
3541
3542static const value_string he_phy_nominal_packet_padding_vals[] = {
3543 { 0, "0 µs for all constellations, Nss and RU allocations" },
3544 { 1, "8 µs for all constellations, Nss and RU allocations" },
3545 { 2, "16 µs for all constellations, Nss and RU allocations" },
3546 { 3, "Reserved" },
3547 { 0, NULL((void*)0) }
3548};
3549
3550// MBO-OCE attributes
3551#define MBO_AP_CAPABILITY_INDICATION1 1
3552#define MBO_NON_PREF_CHANNEL_REPORT2 2
3553#define MBO_CELLULAR_DATA_CAPABILITIES3 3
3554#define MBO_ASSOCIATION_DISALLOWED4 4
3555#define MBO_CELLULAR_DATA_PREFERENCE5 5
3556#define MBO_TRANSITION_REASON6 6
3557#define MBO_TRANSITION_REJECTION_REASON7 7
3558#define MBO_ASSOCIATION_RETRY_DELAY8 8
3559#define OCE_CAPABILITY_INDICATION101 101
3560#define OCE_RSSI_ASSOCIATION_REJECTION102 102
3561#define OCE_REDUCED_WAN_METRICS103 103
3562#define OCE_RNR_COMPLETENESS104 104
3563#define OCE_PROBE_SUPPR_BSSID105 105
3564#define OCE_PROBE_SUPPR_SSID106 106
3565
3566static const value_string wfa_mbo_oce_attr_id_vals[] = {
3567 { MBO_AP_CAPABILITY_INDICATION1, "MBO AP Capability Indication"},
3568 { MBO_NON_PREF_CHANNEL_REPORT2, "Non-preferred Channel Report"},
3569 { MBO_CELLULAR_DATA_CAPABILITIES3, "Cellular Data Capabilities"},
3570 { MBO_ASSOCIATION_DISALLOWED4, "Association Disallowed"},
3571 { MBO_CELLULAR_DATA_PREFERENCE5, "Cellular Data Connection Preference"},
3572 { MBO_TRANSITION_REASON6, "Transition Reason Code BTM Request"},
3573 { MBO_TRANSITION_REJECTION_REASON7, "Transition Rejection Reason Code"},
3574 { MBO_ASSOCIATION_RETRY_DELAY8, "Association Retry Delay"},
3575 { OCE_CAPABILITY_INDICATION101, "OCE Capability Indication" },
3576 { OCE_RSSI_ASSOCIATION_REJECTION102, "RSSI-based (Re-)Association Rejection" },
3577 { OCE_REDUCED_WAN_METRICS103, "Reduced WAN Metrics" },
3578 { OCE_RNR_COMPLETENESS104, "RNR Completeness" },
3579 { OCE_PROBE_SUPPR_BSSID105, "Probe Suppression BSSIDs" },
3580 { OCE_PROBE_SUPPR_SSID106, "Probe Suppression SSIDs" },
3581 { 0, NULL((void*)0)}
3582};
3583
3584static const value_string wfa_mbo_non_pref_chan_pref_vals[] = {
3585 { 0, "non-operable band/channel for the STA"},
3586 { 1, "band/channel the STA prefers not to operate in"},
3587 { 255, "band/channel the STA prefers to operate in"},
3588 { 0, NULL((void*)0) }
3589};
3590
3591static const value_string wfa_mbo_non_pref_chan_reason_vals[] = {
3592 { 0, "Unspecified reason"},
3593 { 1, "An unacceptable level of interference is being experienced by STA in this channel"},
3594 { 2, "The STA has another active connection in this channel, "
3595 "or near enough to this channel to cause operating interference"},
3596 { 0, NULL((void*)0) }
3597};
3598
3599static const value_string wfa_mbo_cellular_cap_vals[] = {
3600 { 1, "Cellular data connection available"},
3601 { 2, "Cellular data connection not available"},
3602 { 3, "Not Cellular data capable"},
3603 { 0, NULL((void*)0) }
3604};
3605
3606static const value_string wfa_mbo_assoc_disallow_reason_vals[] = {
3607 { 1, "Unspecified reason"},
3608 { 2, "Maximum number of associated STAs reached"},
3609 { 3, "Air interface is overloaded"},
3610 { 4, "Authentication server overloaded"},
3611 { 5, "Insufficient RSSI"},
3612 { 0, NULL((void*)0) }
3613};
3614
3615static const value_string wfa_mbo_cellular_pref_vals[] = {
3616 { 0, "Excluded. The AP does not want STA to use the cellular data connection"},
3617 { 1, "The AP prefers the STA should not use cellular data connection"},
3618 { 255, "The AP prefers the STA should use cellular data connection"},
3619 { 0, NULL((void*)0) }
3620};
3621
3622static const value_string wfa_mbo_transition_reason_vals[] = {
3623 { 0, "Unspecified"},
3624 { 1, "Excessive frame loss rate"},
3625 { 2, "Excessive delay for current traffic stream"},
3626 { 3, "Insufficient bandwidth for current traffic stream"},
3627 { 4, "Load balancing"},
3628 { 5, "Low RSSI"},
3629 { 6, "Received excessive number of retransmissions"},
3630 { 7, "High interference"},
3631 { 8, "Gray zone"},
3632 { 9, "Transitioning to a premium AP"},
3633 { 0, NULL((void*)0) }
3634};
3635
3636static const value_string wfa_mbo_transition_rej_reason_vals[] = {
3637 { 0, "Unspecified"},
3638 { 1, "Excessive frame loss rate expected by the STA if it transitions"},
3639 { 2, "Excessive delay for current traffic stream would be incurred by BSS transition at this time"},
3640 { 3, "Insufficient QoS capacity for current traffic stream expected by the STA if it transitions"},
3641 { 4, "Low RSSI in frames being received by the STA from to the suggested candidate BSS(s)"},
3642 { 5, "High interference expected by STA if it transitions"},
3643 { 6, "Service Availability – the STA expects that services it needs "
3644 "which are available at its serving AP will not be available if it transitions"},
3645 { 0, NULL((void*)0) }
3646};
3647
3648/* 802.11ai FILS Discovery */
3649#define PA_FILS_FC_SSID_LENGTH0x001F 0x001F
3650#define PA_FILS_FC_CAPABILITY0x0020 0x0020
3651#define PA_FILS_FC_SHORT_SSID0x0040 0x0040
3652#define PA_FILS_FC_AP_CSN0x0080 0x0080
3653#define PA_FILS_FC_ANO0x0100 0x0100
3654#define PA_FILS_FC_CCFS10x0200 0x0200
3655#define PA_FILS_FC_PC0x0400 0x0400
3656#define PA_FILS_FC_RSN_INFO0x0800 0x0800
3657#define PA_FILS_FC_LENGTH0x1000 0x1000
3658#define PA_FILS_FC_MD0x2000 0x2000
3659#define PA_FILS_FC_RESERVED0xC000 0xC000
3660
3661static const value_string fils_discovery_capability_bss_operating_channel_width[] = {
3662 {0, "20MHz (or 22Mhz) / TVHT_W"},
3663 {1, "40MHZ / TVHT_W+W"},
3664 {2, "80MHz / TVHT_2W"},
3665 {3, "160MHz or 80MHz+80MHz / TVHT_4W or TVHT_2W+2W"},
3666 {0, NULL((void*)0)}
3667};
3668
3669static const value_string fils_discovery_capability_max_number_of_spatial_streams[] = {
3670 {0, "1 spatial stream"},
3671 {1, "2 spatial streams"},
3672 {2, "3 spatial streams"},
3673 {3, "4 spatial streams"},
3674 {4, "5-8 spatial streams"},
3675 {0, NULL((void*)0)}
3676};
3677
3678static const value_string fils_discovery_capability_phy_index[] = {
3679 {0, "HR/DSSS"},
3680 {1, "ERP-OFDM"},
3681 {2, "HT"},
3682 {3, "VHT or TVHT"},
3683 {4, "HE"},
3684 {0x00, NULL((void*)0)}
3685};
3686
3687static const value_string fils_discovery_capability_fils_minimum_rate_dsss[] = {
3688 {0, "1 Mbps"},
3689 {1, "2 Mbps"},
3690 {2, "5.5 Mbps"},
3691 {3, "11 Mbps"},
3692 {0x00, NULL((void*)0)}
3693};
3694
3695static const value_string fils_discovery_capability_fils_minimum_rate_ofdm[] = {
3696 {0, "6 Mbps"},
3697 {1, "9 Mbps"},
3698 {2, "12 Mbps"},
3699 {3, "18 Mbps"},
3700 {4, "24 Mbps"},
3701 {0x00, NULL((void*)0)}
3702};
3703
3704static const value_string fils_discovery_capability_fils_minimum_rate_ht_vht_tvht[] = {
3705 {0, "MCS 0"},
3706 {1, "MCS 1"},
3707 {2, "MCS 2"},
3708 {3, "MCS 3"},
3709 {4, "MCS 4"},
3710 {0x00, NULL((void*)0)}
3711};
3712
3713static const value_string fils_discovery_capability_fils_minimum_rate_he[] = {
3714 {0, "HE-MCS 0"},
3715 {1, "HE-MCS 1"},
3716 {2, "HE-MCS 2"},
3717 {3, "HE-MCS 3"},
3718 {4, "HE-MCS 4"},
3719 {0x00, NULL((void*)0)}
3720};
3721
3722static const value_string wfa_rsne_variant_vals[] = {
3723 { 0, "RSNE" },
3724 { 1, "RSNE Override" },
3725 { 2, "RSNE Override 2" },
3726 { 0, NULL((void*)0) }
3727};
3728
3729static int proto_wlan;
3730static int proto_centrino;
3731static int proto_aggregate;
3732static bool_Bool ieee80211_tvb_invalid;
3733static int proto_eapol; /* Externally retrieved */
3734
3735/* ************************************************************************* */
3736/* Header field info values for FC-field */
3737/* ************************************************************************* */
3738static int hf_ieee80211_fc_field;
3739static int hf_ieee80211_fc_proto_version;
3740static int hf_ieee80211_fc_frame_type;
3741static int hf_ieee80211_fc_frame_subtype;
3742static int hf_ieee80211_fc_frame_extension;
3743static int hf_ieee80211_fc_frame_type_subtype;
3744
3745static int hf_ieee80211_fc_flags;
3746static int hf_ieee80211_fc_flags_str;
3747static int hf_ieee80211_fc_to_ds;
3748static int hf_ieee80211_fc_from_ds;
3749static int hf_ieee80211_fc_data_ds;
3750
3751static int hf_ieee80211_fc_more_frag;
3752static int hf_ieee80211_fc_retry;
3753static int hf_ieee80211_fc_pwr_mgt;
3754static int hf_ieee80211_fc_more_data;
3755static int hf_ieee80211_fc_protected;
3756static int hf_ieee80211_fc_order;
3757
3758/* S1G Flags */
3759static int hf_ieee80211_fc_s1g_next_tbtt_present;
3760static int hf_ieee80211_fc_s1g_compressed_ssid_present;
3761static int hf_ieee80211_fc_s1g_ano_present;
3762static int hf_ieee80211_fc_s1g_bss_bw;
3763static int hf_ieee80211_fc_s1g_security;
3764static int hf_ieee80211_fc_s1g_ap_pm;
3765
3766/* S1G PV0 fields */
3767static int hf_ieee80211_fc_s1g_bw_indication;
3768static int hf_ieee80211_fc_s1g_dynamic_indication;
3769
3770/* PV1 fields */
3771static int hf_ieee80211_fc_pv1_proto_version;
3772static int hf_ieee80211_fc_pv1_type;
3773static int hf_ieee80211_fc_pv1_ptid;
3774static int hf_ieee80211_fc_pv1_mgmt_subtype;
3775static int hf_ieee80211_fc_pv1_cntl_subtype;
3776static int hf_ieee80211_fc_pv1_unk_field;
3777static int hf_ieee80211_fc_pv1_bw_indication;
3778static int hf_ieee80211_fc_pv1_dynamic_indication;
3779static int hf_ieee80211_fc_pv1_cntl_power_mgmt;
3780static int hf_ieee80211_fc_pv1_cntl_more_data;
3781static int hf_ieee80211_fc_pv1_cntl_flow_control;
3782static int hf_ieee80211_fc_pv1_cntl_next_twt_info;
3783static int hf_ieee80211_fc_pv1_mgmt_pr_next_tbt;
3784static int hf_ieee80211_fc_pv1_mgmt_pr_full_ssid;
3785static int hf_ieee80211_fc_pv1_mgmt_pr_ano;
3786static int hf_ieee80211_fc_pv1_mgmt_pr_bss_bw;
3787static int hf_ieee80211_fc_pv1_mgmt_pr_security;
3788static int hf_ieee80211_fc_pv1_mgmt_pr_1mhz_pc;
3789static int hf_ieee80211_fc_pv1_mgmt_pr_slot_assign;
3790static int hf_ieee80211_fc_pv1_mgmt_pr_more_frag;
3791static int hf_ieee80211_fc_pv1_mgmt_pr_pwr_mgmt;
3792static int hf_ieee80211_fc_pv1_mgmt_pr_grp_indic;
3793static int hf_ieee80211_fc_pv1_mgmt_pr_protected;
3794static int hf_ieee80211_fc_pv1_mgmt_pr_end_of_svc;
3795static int hf_ieee80211_fc_pv1_mgmt_pr_relayed_frm;
3796static int hf_ieee80211_fc_pv1_mgmt_pr_ack_policy;
3797static int hf_ieee80211_fc_pv1_from_ds;
3798static int hf_ieee80211_fc_pv1_more_fragments;
3799static int hf_ieee80211_fc_pv1_power_mgmt;
3800static int hf_ieee80211_fc_pv1_more_data;
3801static int hf_ieee80211_fc_pv1_protected_frame;
3802static int hf_ieee80211_fc_pv1_end_service_per;
3803static int hf_ieee80211_fc_pv1_relayed_frame;
3804static int hf_ieee80211_fc_pv1_ack_policy;
3805static int hf_ieee80211_pv1_sid;
3806static int hf_ieee80211_pv1_sid_association_id;
3807static int hf_ieee80211_pv1_sid_a3_present;
3808static int hf_ieee80211_pv1_sid_a4_present;
3809static int hf_ieee80211_pv1_sid_a_msdu;
3810
3811static int hf_ieee80211_pv1_cnt_stack_tetra_timest;
3812static int hf_ieee80211_pv1_cnt_bat_beacon_seq;
3813static int hf_ieee80211_pv1_cnt_bat_penta_timest;
3814static int hf_ieee80211_pv1_cnt_bat_next_twt_info;
3815static int hf_ieee80211_pv1_cnt_bat_stating_seq_cntl;
3816static int hf_ieee80211_pv1_cnt_bat_bitmap;
3817
3818static int hf_ieee80211_pv1_mgmt_reserved;
3819static int hf_ieee80211_pv1_cntl_reserved;
3820
3821typedef struct retransmit_key {
3822 uint8_t bssid[6];
3823 uint8_t src[6];
3824 uint16_t seq_control;
3825 unsigned fnum;
3826} retransmit_key;
3827
3828static GHashTable *fc_analyse_retransmit_table;
3829static GHashTable *fc_first_frame_table;
3830
3831static int hf_ieee80211_fc_analysis_retransmission;
3832static int hf_ieee80211_fc_analysis_retransmission_frame;
3833
3834/* ************************************************************************* */
3835/* Header values for Duration/ID field */
3836/* ************************************************************************* */
3837static int hf_ieee80211_did_duration;
3838static int hf_ieee80211_assoc_id;
3839
3840/* ************************************************************************* */
3841/* Header values for different address-fields (all 4 of them) */
3842/* ************************************************************************* */
3843static int hf_ieee80211_addr_da; /* Destination address subfield */
3844static int hf_ieee80211_addr_da_resolved; /* Dst addr subfield resolved*/
3845static int hf_ieee80211_addr_da_oui; /* Destination address subfield */
3846static int hf_ieee80211_addr_da_oui_resolved; /* Dst addr subfield resolved*/
3847static int hf_ieee80211_addr_da_ig; /* Destination address IG bit */
3848static int hf_ieee80211_addr_da_lg; /* Destination address LG bit */
3849
3850static int hf_ieee80211_addr_sa; /* Source address subfield */
3851static int hf_ieee80211_addr_sa_resolved; /* Src addr subfield resolved*/
3852static int hf_ieee80211_addr_sa_oui; /* Source address subfield */
3853static int hf_ieee80211_addr_sa_oui_resolved; /* Src addr subfield resolved*/
3854static int hf_ieee80211_addr_sa_ig; /* Source address IG bit */
3855static int hf_ieee80211_addr_sa_lg; /* Source address LG bit */
3856
3857static int hf_ieee80211_addr_ra; /* Receiver address subfield */
3858static int hf_ieee80211_addr_ra_resolved; /* Rcv addr subfield resolved*/
3859static int hf_ieee80211_addr_ra_oui; /* Receiver address subfield */
3860static int hf_ieee80211_addr_ra_oui_resolved; /* Rcv addr subfield resolved*/
3861static int hf_ieee80211_addr_ra_ig; /* Receiver address IG bit */
3862static int hf_ieee80211_addr_ra_lg; /* Receiver address LG bit */
3863
3864static int hf_ieee80211_addr_ta; /* Transmitter address subfield */
3865static int hf_ieee80211_addr_ta_resolved; /* Txm addr subfield resolved*/
3866static int hf_ieee80211_addr_ta_oui; /* Transmitter address subfield */
3867static int hf_ieee80211_addr_ta_oui_resolved; /* Txm addr subfield resolved*/
3868static int hf_ieee80211_addr_ta_ig; /* Transmitter address IG bit */
3869static int hf_ieee80211_addr_ta_lg; /* Transmitter address LG bit */
3870
3871static int hf_ieee80211_addr_bssid; /* address is bssid */
3872static int hf_ieee80211_addr_bssid_resolved; /* bssid resolved*/
3873static int hf_ieee80211_addr_bssid_oui; /* address is bssid */
3874static int hf_ieee80211_addr_bssid_oui_resolved; /* bssid resolved*/
3875static int hf_ieee80211_addr_bssid_ig; /* bssid address IG bit */
3876static int hf_ieee80211_addr_bssid_lg; /* bssid address LG bit */
3877
3878static int hf_ieee80211_addr_staa; /* address is station address */
3879static int hf_ieee80211_addr_staa_resolved; /* station address resolved*/
3880static int hf_ieee80211_addr_staa_oui; /* address is station address */
3881static int hf_ieee80211_addr_staa_oui_resolved; /* station address resolved*/
3882static int hf_ieee80211_addr_staa_ig; /* station address IG bit */
3883static int hf_ieee80211_addr_staa_lg; /* station address LG bit */
3884
3885static int hf_ieee80211_addr; /* Source or destination address subfield */
3886static int hf_ieee80211_addr_resolved;/*Src/dst address subfield resolved*/
3887static int hf_ieee80211_addr_oui; /* Source or destination address subfield */
3888static int hf_ieee80211_addr_oui_resolved;/*Src/dst address subfield resolved*/
3889static int hf_ieee80211_addr_ig; /* Src/dst address IG bit */
3890static int hf_ieee80211_addr_lg; /* Src/dst address LG bit */
3891
3892static int hf_ieee80211_mgt;
3893
3894/* ************************************************************************* */
3895/* Header values for QoS control field */
3896/* ************************************************************************* */
3897static int hf_ieee80211_qos;
3898static int hf_ieee80211_qos_tid;
3899static int hf_ieee80211_qos_priority;
3900static int hf_ieee80211_qos_ack_policy;
3901static int hf_ieee80211_qos_amsdu_present;
3902static int hf_ieee80211_qos_eosp;
3903static int hf_ieee80211_qos_bit4;
3904static int hf_ieee80211_qos_txop_limit;
3905static int hf_ieee80211_qos_ps_buf_state;
3906static int hf_ieee80211_qos_buf_state_indicated;
3907static int hf_ieee80211_qos_highest_pri_buf_ac;
3908static int hf_ieee80211_qos_qap_buf_load;
3909static int hf_ieee80211_qos_txop_dur_req;
3910static int hf_ieee80211_qos_queue_size;
3911static int hf_ieee80211_qos_mesh_ctl_present;
3912static int hf_ieee80211_qos_mesh_ps_rsvd;
3913static int hf_ieee80211_qos_mesh_ps_unicast;
3914static int hf_ieee80211_qos_mesh_ps_multicast;
3915static int hf_ieee80211_qos_mesh_rspi;
3916
3917/* ************************************************************************* */
3918/* Header values for HT control field (+HTC) and HE control */
3919/* ************************************************************************* */
3920/* 802.11-2012 and 802.11ac-2013 8.2.4.6 */
3921static int hf_ieee80211_htc;
3922static int hf_ieee80211_htc_vht;
3923static int hf_ieee80211_htc_he;
3924static int hf_ieee80211_htc_he_ctrl_id;
3925static int hf_ieee80211_he_a_control_padding;
3926static int hf_ieee80211_he_a_control_ones;
3927static int hf_ieee80211_he_trs_he_tb_ppdu_len;
3928static int hf_ieee80211_he_trs_ru_allocation;
3929static int hf_ieee80211_he_dl_tx_power;
3930static int hf_ieee80211_he_ul_target_rssi;
3931static int hf_ieee80211_he_ul_mcs;
3932static int hf_ieee80211_he_ul_reserved;
3933static int hf_ieee80211_he_om_rx_nss;
3934static int hf_ieee80211_he_om_channel_width;
3935static int hf_ieee80211_he_om_ul_mu_disable;
3936static int hf_ieee80211_he_om_tx_nsts;
3937static int hf_ieee80211_he_om_er_su_disable;
3938static int hf_ieee80211_he_om_dl_mu_mimo_resound;
3939static int hf_ieee80211_he_om_ul_mu_data_disable;
3940static int hf_ieee80211_he_hla_unsolicited_mfb;
3941static int hf_ieee80211_he_hla_mrq;
3942static int hf_ieee80211_he_hla_nss;
3943static int hf_ieee80211_he_hla_he_mcs;
3944static int hf_ieee80211_he_hla_dcm;
3945static int hf_ieee80211_he_hla_ru;
3946static int hf_ieee80211_he_hla_bw;
3947static int hf_ieee80211_he_hla_msi_ppdu_type;
3948static int hf_ieee80211_he_hla_tx_bf;
3949static int hf_ieee80211_he_hla_reserved;
3950static int hf_ieee80211_he_bsr_aci_bitmap;
3951static int hf_ieee80211_he_bsr_delta_tid;
3952static int hf_ieee80211_he_bsr_aci_high;
3953static int hf_ieee80211_he_bsr_scaling_factor;
3954static int hf_ieee80211_he_bsr_queue_size_high;
3955static int hf_ieee80211_he_bsr_queue_size_all;
3956static int hf_ieee80211_he_uph_ul_power_headroom;
3957static int hf_ieee80211_he_uph_ul_min_transmit_power_flag;
3958static int hf_ieee80211_he_uph_reserved;
3959static int hf_ieee80211_he_cci_ac_constraint;
3960static int hf_ieee80211_he_cci_rdg_more_ppdu;
3961static int hf_ieee80211_he_cci_sr_ppdu_indic;
3962static int hf_ieee80211_he_cci_reserved;
3963static int hf_ieee80211_he_eht_om_rx_nss_ext;
3964static int hf_ieee80211_he_eht_om_chan_w_ext;
3965static int hf_ieee80211_he_eht_om_tx_nsts_ext;
3966static int hf_ieee80211_he_eht_om_reserved;
3967static int hf_ieee80211_he_srs_ppdu_resp_dur;
3968static int hf_ieee80211_he_srs_reserved;
3969static int hf_ieee80211_he_aar_assisted_ap_bitmap;
3970static int hf_ieee80211_he_aar_reserved;
3971static int hf_ieee80211_he_btc_avail_chan;
3972static int hf_ieee80211_he_btc_reserved;
3973static int hf_ieee80211_he_trigger_common_info;
3974static int hf_ieee80211_he_trigger_type;
3975static int hf_ieee80211_he_trigger_ul_length;
3976static int hf_ieee80211_he_trigger_more_tf;
3977static int hf_ieee80211_he_trigger_cs_required;
3978static int hf_ieee80211_he_trigger_ul_bw;
3979static int hf_ieee80211_he_trigger_gi_and_ltf_type;
3980static int hf_ieee80211_he_trigger_mu_mimo_ltf_mode;
3981static int hf_ieee80211_he_trigger_num_he_ltf_syms_etc;
3982static int hf_ieee80211_he_trigger_ul_stbc;
3983static int hf_ieee80211_he_trigger_ldpc_extra_sym_seg;
3984static int hf_ieee80211_he_trigger_ap_tx_power;
3985static int hf_ieee80211_he_trigger_pre_fec_padding_factor;
3986static int hf_ieee80211_he_trigger_pe_disambiguity;
3987static int hf_ieee80211_he_trigger_ul_spatial_reuse;
3988static int hf_ieee80211_he_trigger_doppler;
3989static int hf_ieee80211_he_trigger_ul_he_sig_a_reserved;
3990static int hf_ieee80211_he_trigger_reserved;
3991static int hf_ieee80211_he_trigger_user_info;
3992static int hf_ieee80211_he_trigger_user_info_padding_start;
3993static int hf_ieee80211_he_trigger_padding;
3994static int hf_ieee80211_he_trigger_bar_ctrl;
3995static int hf_ieee80211_he_trigger_bar_ctrl_ba_ack_policy;
3996static int hf_ieee80211_he_trigger_bar_ctrl_ba_type;
3997static int hf_ieee80211_he_trigger_bar_ctrl_reserved;
3998static int hf_ieee80211_he_trigger_bar_ctrl_tid_info;
3999static int hf_ieee80211_he_trigger_bar_info;
4000static int hf_ieee80211_he_trigger_bar_info_blk_ack_seq_ctrl;
4001static int hf_ieee80211_he_trigger_mpdu_mu_spacing;
4002static int hf_ieee80211_he_trigger_tid_aggregation_limit;
4003static int hf_ieee80211_he_trigger_dependent_reserved1;
4004static int hf_ieee80211_he_trigger_preferred_ac;
4005static int hf_ieee80211_he_trigger_starting_aid;
4006static int hf_ieee80211_he_trigger_dependent_reserved2;
4007static int hf_ieee80211_he_trigger_feedback_type;
4008static int hf_ieee80211_he_trigger_dependent_reserved3;
4009static int hf_ieee80211_he_trigger_nfrp_target_rssi;
4010static int hf_ieee80211_he_trigger_multiplexing_flag;
4011static int hf_ieee80211_he_trigger_dep_nfrp_user_info;
4012static int hf_ieee80211_he_trigger_feedback_seg_retrans_bm;
4013static int hf_ieee80211_he_trigger_aid12;
4014static int hf_ieee80211_he_trigger_ru_allocation;
4015static int hf_ieee80211_he_trigger_ru_allocation_region;
4016static int hf_ieee80211_he_trigger_ru_starting_spatial_stream;
4017static int hf_ieee80211_he_trigger_ru_number_spatial_streams;
4018static int hf_ieee80211_he_trigger_ru_number_ra_ru;
4019static int hf_ieee80211_he_trigger_ru_no_more_ra_ru;
4020static int hf_ieee80211_he_trigger_ul_fec_coding_type;
4021static int hf_ieee80211_he_trigger_ul_mcs;
4022static int hf_ieee80211_he_trigger_ul_dcm;
4023static int hf_ieee80211_he_trigger_ul_target_rssi;
4024static int hf_ieee80211_he_trigger_user_reserved;
4025static int hf_ieee80211_he_trigger_dep_basic_user_info;
4026static int hf_ieee80211_he_trigger_ranging_common_info_1;
4027static int hf_ieee80211_he_trigger_ranging_common_info_2;
4028static int hf_ieee80211_eht_trigger_common_info;
4029static int hf_ieee80211_eht_trigger_type;
4030static int hf_ieee80211_eht_trigger_ul_length;
4031static int hf_ieee80211_eht_trigger_more_tf;
4032static int hf_ieee80211_eht_trigger_cs_required;
4033static int hf_ieee80211_eht_trigger_ul_bw;
4034static int hf_ieee80211_eht_trigger_gi_and_eht_ltf_type;
4035static int hf_ieee80211_eht_trigger_num_he_eht_ltf_syms_etc;
4036static int hf_ieee80211_eht_trigger_reserved2;
4037static int hf_ieee80211_eht_trigger_ldpc_extra_sym_seg;
4038static int hf_ieee80211_eht_trigger_ap_tx_power;
4039static int hf_ieee80211_eht_trigger_pre_fec_padding_factor;
4040static int hf_ieee80211_eht_trigger_pe_disambiguity;
4041static int hf_ieee80211_eht_trigger_ul_spatial_reuse;
4042static int hf_ieee80211_eht_trigger_reserved3;
4043static int hf_ieee80211_eht_trigger_he_eht_p160;
4044static int hf_ieee80211_eht_trigger_special_user_info_flag;
4045static int hf_ieee80211_eht_trigger_eht_reserved;
4046static int hf_ieee80211_eht_trigger_reserved4;
4047static int hf_ieee80211_eht_trigger_reserved;
4048static int hf_ieee80211_eht_trigger_aid12;
4049static int hf_ieee80211_eht_trigger_special_user_info;
4050static int hf_ieee80211_eht_trigger_phy_version_identifier;
4051static int hf_ieee80211_eht_trigger_ul_bw_extenstion;
4052static int hf_ieee80211_eht_trigger_eht_spatial_reuse_1;
4053static int hf_ieee80211_eht_trigger_eht_spatial_reuse_2;
4054static int hf_ieee80211_eht_trigger_disregard_u_sig_1;
4055static int hf_ieee80211_eht_trigger_validate_u_sig_2;
4056static int hf_ieee80211_eht_trigger_disregard_u_sig_2_4lsb;
4057static int hf_ieee80211_eht_trigger_disregard_u_sig_2_msb;
4058static int hf_ieee80211_eht_trigger_special_reserved;
4059static int hf_ieee80211_eht_trigger_user_info;
4060static int hf_ieee80211_eht_trigger_ru_allocation_region;
4061static int hf_ieee80211_eht_trigger_ru_allocation;
4062static int hf_ieee80211_eht_trigger_ul_fec_coding_type;
4063static int hf_ieee80211_eht_trigger_ul_eht_mcs;
4064static int hf_ieee80211_eht_trigger_ru_starting_spatial_stream;
4065static int hf_ieee80211_eht_trigger_ru_number_spatial_streams;
4066static int hf_ieee80211_eht_trigger_ul_target_recv_power;
4067static int hf_ieee80211_eht_trigger_ps160;
4068static int hf_ieee80211_eht_trigger_user_info_reserved;
4069static int hf_ieee80211_uhr_trigger_common_info;
4070static int hf_ieee80211_uhr_trigger_type;
4071static int hf_ieee80211_uhr_trigger_ul_length;
4072static int hf_ieee80211_uhr_trigger_more_tf;
4073static int hf_ieee80211_uhr_trigger_cs_required;
4074static int hf_ieee80211_uhr_trigger_ul_bw;
4075static int hf_ieee80211_uhr_trigger_gi_and_he_uhr_ltf_type;
4076static int hf_ieee80211_uhr_trigger_num_he_uhr_ltf_syms_etc;
4077static int hf_ieee80211_uhr_trigger_reserved2;
4078static int hf_ieee80211_uhr_trigger_ldpc_extra_sym_seg;
4079static int hf_ieee80211_uhr_trigger_ap_tx_power;
4080static int hf_ieee80211_uhr_trigger_pre_fec_padding_factor;
4081static int hf_ieee80211_uhr_trigger_pe_disambiguity;
4082static int hf_ieee80211_uhr_trigger_ul_spatial_reuse;
4083static int hf_ieee80211_uhr_trigger_reserved3;
4084static int hf_ieee80211_uhr_trigger_he_uhr_p160;
4085static int hf_ieee80211_uhr_trigger_special_user_info_flag;
4086static int hf_ieee80211_uhr_trigger_dru_rru;
4087static int hf_ieee80211_uhr_trigger_ifcs;
4088static int hf_ieee80211_uhr_trigger_uhr_reserved;
4089static int hf_ieee80211_uhr_trigger_reserved4;
4090static int hf_ieee80211_uhr_trigger_reserved;
4091static int hf_ieee80211_uhr_trigger_user_info;
4092static int hf_ieee80211_uhr_trigger_aid12;
4093static int hf_ieee80211_uhr_trigger_ru_allocation_region;
4094static int hf_ieee80211_uhr_trigger_ru_allocation;
4095static int hf_ieee80211_uhr_trigger_ul_fec_coding_type;
4096static int hf_ieee80211_uhr_trigger_ul_uhr_mcs;
4097static int hf_ieee80211_uhr_trigger_2xldpc;
4098static int hf_ieee80211_uhr_trigger_ru_starting_spatial_stream;
4099static int hf_ieee80211_uhr_trigger_ru_number_spatial_streams;
4100static int hf_ieee80211_uhr_trigger_dru_distribution_bw;
4101static int hf_ieee80211_uhr_trigger_dru_reserved;
4102static int hf_ieee80211_uhr_trigger_ul_target_recv_power;
4103static int hf_ieee80211_uhr_trigger_ps160;
4104
4105
4106static int hf_ieee80211_ranging_trigger_subtype1;
4107static int hf_ieee80211_ranging_trigger_reserved1;
4108static int hf_ieee80211_ranging_trigger_token;
4109static int hf_ieee80211_ranging_trigger_subtype2;
4110static int hf_ieee80211_ranging_trigger_reserved2;
4111static int hf_ieee80211_ranging_trigger_sounding_dialog_token;
4112static int hf_ieee80211_he_trigger_ranging_trigger_poll_rpt;
4113static int hf_ieee80211_ranging_pol_rpt_aid12_rsid12;
4114static int hf_ieee80211_ranging_pol_rpt_ru_alloc_region;
4115static int hf_ieee80211_ranging_pol_rpt_ru_alloc;
4116static int hf_ieee80211_ranging_pol_rpt_ul_fec_coding_type;
4117static int hf_ieee80211_ranging_pol_rpt_ulmcs;
4118static int hf_ieee80211_ranging_pol_rpt_uldcm;
4119static int hf_ieee80211_ranging_pol_rpt_starting_spatial_stream;
4120static int hf_ieee80211_ranging_pol_rpt_number_spatial_streams;
4121static int hf_ieee80211_ranging_pol_rpt_ul_target_rssi;
4122static int hf_ieee80211_ranging_pol_rpt_reserved;
4123static int hf_ieee80211_he_trigger_ranging_trigger_sounding;
4124static int hf_ieee80211_ranging_sounding_aid12_rsid12;
4125static int hf_ieee80211_ranging_sounding_reserved1;
4126static int hf_ieee80211_ranging_sounding_i2r_rep;
4127static int hf_ieee80211_ranging_sounding_reserved2;
4128static int hf_ieee80211_ranging_sounding_starting_spatial_stream;
4129static int hf_ieee80211_ranging_sounding_number_spatial_streams;
4130static int hf_ieee80211_ranging_sounding_ul_target_rssi;
4131static int hf_ieee80211_ranging_sounding_reserved3;
4132static int hf_ieee80211_he_trigger_ranging_trigger_sec_sound;
4133static int hf_ieee80211_ranging_sec_sound_aid12_rsid12;
4134static int hf_ieee80211_ranging_sec_sound_reserved1;
4135static int hf_ieee80211_ranging_sec_sound_i2r_rep;
4136static int hf_ieee80211_ranging_sec_sound_reserved2;
4137static int hf_ieee80211_ranging_sec_sound_starting_spatial_stream;
4138static int hf_ieee80211_ranging_sec_sound_number_spatial_streams;
4139static int hf_ieee80211_ranging_sec_sound_ul_target_rssi;
4140static int hf_ieee80211_ranging_sec_sound_reserved3;
4141static int hf_ieee80211_he_trigger_ranging_user_info_sac;
4142static int hf_ieee80211_he_ndp_annc_sta;
4143static int hf_ieee80211_he_ndp_annc_aid11;
4144static int hf_ieee80211_he_ndp_annc_ru_start;
4145static int hf_ieee80211_he_ndp_annc_ru_end;
4146static int hf_ieee80211_he_ndp_annc_feedback_type_and_ng;
4147static int hf_ieee80211_he_ndp_annc_disambiguation;
4148static int hf_ieee80211_he_ndp_annc_codebook_size;
4149static int hf_ieee80211_he_ndp_annc_nc;
4150static int hf_ieee80211_he_ndp_annc_disallowed_bitmap;
4151static int hf_ieee80211_he_ndp_annc_reserved1;
4152static int hf_ieee80211_he_ndp_annc_reserved2;
4153static int hf_ieee80211_he_qtp_control;
4154static int hf_ieee80211_he_qtp_setup_quiet_period_duration;
4155static int hf_ieee80211_he_qtp_setup_srv_specific_identif;
4156static int hf_ieee80211_he_qtp_request_dialog_token;
4157static int hf_ieee80211_he_qtp_request_quiet_period_offset;
4158static int hf_ieee80211_he_qtp_request_quiet_period_duration;
4159static int hf_ieee80211_he_qtp_request_quiet_period_interval;
4160static int hf_ieee80211_he_qtp_request_repetition_count;
4161static int hf_ieee80211_he_qtp_request_srv_specific_identif;
4162static int hf_ieee80211_he_qtp_response_dialog_token;
4163static int hf_ieee80211_he_qtp_response_status_code;
4164static int hf_ieee80211_he_qtp_response_quiet_period_offset;
4165static int hf_ieee80211_he_qtp_response_quiet_period_duration;
4166static int hf_ieee80211_he_qtp_response_quiet_period_interval;
4167static int hf_ieee80211_he_qtp_response_repetition_count;
4168static int hf_ieee80211_he_qtp_response_srv_specific_identif;
4169static int hf_ieee80211_htc_ht_lac;
4170static int hf_ieee80211_htc_lac_trq;
4171static int hf_ieee80211_htc_lac_mai_aseli;
4172static int hf_ieee80211_htc_lac_mai_mrq;
4173static int hf_ieee80211_htc_lac_mai_msi;
4174static int hf_ieee80211_htc_lac_mai_reserved;
4175static int hf_ieee80211_htc_lac_mfsi;
4176static int hf_ieee80211_htc_lac_mfb;
4177static int hf_ieee80211_htc_lac_asel_command;
4178static int hf_ieee80211_htc_lac_asel_data;
4179static int hf_ieee80211_htc_cal_pos;
4180static int hf_ieee80211_htc_cal_seq;
4181static int hf_ieee80211_htc_reserved1;
4182static int hf_ieee80211_htc_csi_steering;
4183static int hf_ieee80211_htc_ndp_announcement;
4184static int hf_ieee80211_htc_reserved2;
4185static int hf_ieee80211_htc_mrq;
4186static int hf_ieee80211_htc_msi;
4187static int hf_ieee80211_htc_msi_stbc_reserved;
4188static int hf_ieee80211_htc_compressed_msi;
4189static int hf_ieee80211_htc_ppdu_stbc_encoded;
4190static int hf_ieee80211_htc_mfsi;
4191static int hf_ieee80211_htc_gid_l;
4192static int hf_ieee80211_htc_mfb;
4193static int hf_ieee80211_htc_num_sts;
4194static int hf_ieee80211_htc_vht_mcs;
4195static int hf_ieee80211_htc_bw;
4196static int hf_ieee80211_htc_s1g_num_sts;
4197static int hf_ieee80211_htc_s1g_vht_mcs;
4198static int hf_ieee80211_htc_s1g_bw;
4199static int hf_ieee80211_htc_snr;
4200static int hf_ieee80211_htc_reserved3;
4201static int hf_ieee80211_htc_gid_h;
4202static int hf_ieee80211_htc_coding_type;
4203static int hf_ieee80211_htc_fb_tx_type;
4204static int hf_ieee80211_htc_unsolicited_mfb;
4205static int hf_ieee80211_htc_ac_constraint;
4206static int hf_ieee80211_htc_rdg_more_ppdu;
4207
4208/* ************************************************************************* */
4209/* Header values for sequence number field */
4210/* ************************************************************************* */
4211static int hf_ieee80211_frag_number;
4212static int hf_ieee80211_seq_number;
4213
4214/* ************************************************************************* */
4215/* Header values for Frame Check field */
4216/* ************************************************************************* */
4217static int hf_ieee80211_fcs;
4218static int hf_ieee80211_fcs_status;
4219
4220/* ************************************************************************* */
4221/* Header values for reassembly */
4222/* ************************************************************************* */
4223static int hf_ieee80211_fragments;
4224static int hf_ieee80211_fragment;
4225static int hf_ieee80211_fragment_overlap;
4226static int hf_ieee80211_fragment_overlap_conflict;
4227static int hf_ieee80211_fragment_multiple_tails;
4228static int hf_ieee80211_fragment_too_long_fragment;
4229static int hf_ieee80211_fragment_error;
4230static int hf_ieee80211_fragment_count;
4231static int hf_ieee80211_reassembled_in;
4232static int hf_ieee80211_reassembled_length;
4233
4234static int proto_wlan_ext;
4235
4236/* ************************************************************************* */
4237/* Fixed fields found in mgt frames */
4238/* ************************************************************************* */
4239static int hf_ieee80211_fixed_parameters; /* Protocol payload for management frames */
4240
4241static int hf_ieee80211_ff_auth_alg; /* Authentication algorithm field */
4242static int hf_ieee80211_ff_auth_seq; /* Authentication transaction sequence */
4243static int hf_ieee80211_ff_current_ap; /* Current AP MAC address */
4244static int hf_ieee80211_ff_listen_ival; /* Listen interval fixed field */
4245static int hf_ieee80211_ff_timestamp; /* 64 bit timestamp */
4246static int hf_ieee80211_ff_beacon_interval; /* 16 bit Beacon interval */
4247static int hf_ieee80211_ff_assoc_id; /* 16 bit AID field */
4248static int hf_ieee80211_ff_reason; /* 16 bit reason code */
4249static int hf_ieee80211_ff_status_code; /* Status code */
4250static int hf_ieee80211_ff_category_code; /* 8 bit Category code */
4251static int hf_ieee80211_ff_action_code; /* 8 bit Action code */
4252static int hf_ieee80211_ff_dialog_token; /* 8 bit Dialog token */
4253static int hf_ieee80211_ff_trigger;
4254static int hf_ieee80211_ff_ftm_tod;
4255static int hf_ieee80211_ff_ftm_toa;
4256static int hf_ieee80211_ff_ftm_tod_err;
4257static int hf_ieee80211_ff_ftm_toa_err;
4258static int hf_ieee80211_ff_followup_dialog_token;
4259static int hf_ieee80211_ff_wme_action_code; /* Management notification action code */
4260static int hf_ieee80211_ff_wme_status_code; /* Management notification setup response status code */
4261static int hf_ieee80211_ff_qos_action_code;
4262static int hf_ieee80211_ff_dls_action_code;
4263static int hf_ieee80211_ff_dst_mac_addr; /* DLS destination MAC address */
4264static int hf_ieee80211_ff_src_mac_addr; /* DLS source MAC address */
4265static int hf_ieee80211_ff_req_ap_addr;
4266static int hf_ieee80211_ff_res_ap_addr;
4267static int hf_ieee80211_ff_check_beacon;
4268static int hf_ieee80211_ff_dls_timeout; /* DLS timeout value */
4269static int hf_ieee80211_ff_ft_action_code; /* 8 bit FT Action code */
4270static int hf_ieee80211_ff_sta_address;
4271static int hf_ieee80211_ff_target_ap_address;
4272static int hf_ieee80211_ff_gas_comeback_delay;
4273static int hf_ieee80211_ff_gas_fragment_id;
4274static int hf_ieee80211_ff_more_gas_fragments;
4275static int hf_ieee80211_ff_query_request_length;
4276static int hf_ieee80211_ff_query_request;
4277static int hf_ieee80211_ff_query_response_length;
4278static int hf_ieee80211_ff_query_response;
4279static int hf_ieee80211_ff_anqp_info_id;
4280static int hf_ieee80211_ff_anqp_info_length;
4281static int hf_ieee80211_ff_anqp_info;
4282static int hf_ieee80211_ff_anqp_query_id;
4283static int hf_ieee80211_ff_anqp_capability;
4284static int hf_ieee80211_ff_anqp_capability_vlen;
4285static int hf_ieee80211_ff_anqp_capability_vendor;
4286static int hf_ieee80211_ff_venue_info_group;
4287static int hf_ieee80211_ff_venue_info_type;
4288static int hf_ieee80211_ff_anqp_venue_length;
4289static int hf_ieee80211_ff_anqp_venue_language;
4290static int hf_ieee80211_ff_anqp_venue_name;
4291static int hf_ieee80211_ff_anqp_nw_auth_type_indicator;
4292static int hf_ieee80211_ff_anqp_nw_auth_type_url_len;
4293static int hf_ieee80211_ff_anqp_nw_auth_type_url;
4294static int hf_ieee80211_ff_anqp_nw_auth_type_ts_indicator;
4295static int hf_ieee80211_ff_anqp_nw_auth_type_ts_url_len;
4296static int hf_ieee80211_ff_anqp_nw_auth_type_ts_url;
4297static int hf_ieee80211_ff_anqp_nw_auth_type_ts_year;
4298static int hf_ieee80211_ff_anqp_nw_auth_type_ts_mon;
4299static int hf_ieee80211_ff_anqp_nw_auth_type_ts_day;
4300static int hf_ieee80211_ff_anqp_nw_auth_type_ts_hr;
4301static int hf_ieee80211_ff_anqp_nw_auth_type_ts_min;
4302static int hf_ieee80211_ff_anqp_nw_auth_type_ts_sec;
4303static int hf_ieee80211_ff_anqp_nw_auth_type_ts_msec;
4304static int hf_ieee80211_ff_anqp_nw_auth_type_ts_rsvd;
4305static int hf_ieee80211_ff_anqp_roaming_consortium_oi_len;
4306static int hf_ieee80211_ff_anqp_roaming_consortium_oi;
4307static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv6;
4308static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv4;
4309static int hf_ieee80211_ff_anqp_nai_realm_count;
4310static int hf_ieee80211_ff_anqp_nai_field_len;
4311static int hf_ieee80211_ff_anqp_nai_realm_encoding;
4312static int hf_ieee80211_ff_anqp_nai_realm_length;
4313static int hf_ieee80211_ff_anqp_nai_realm;
4314static int hf_ieee80211_ff_anqp_nai_realm_eap_count;
4315static int hf_ieee80211_ff_anqp_nai_realm_eap_len;
4316static int hf_ieee80211_ff_anqp_nai_realm_eap_method;
4317static int hf_ieee80211_ff_anqp_nai_realm_auth_param_count;
4318static int hf_ieee80211_ff_anqp_nai_realm_auth_param_id;
4319static int hf_ieee80211_ff_anqp_nai_realm_auth_param_len;
4320static int hf_ieee80211_ff_anqp_nai_realm_auth_param_value;
4321static int hf_ieee80211_3gpp_gc_gud;
4322static int hf_ieee80211_3gpp_gc_udhl;
4323static int hf_ieee80211_3gpp_gc_iei;
4324static int hf_ieee80211_3gpp_gc_num_plmns;
4325static int hf_ieee80211_3gpp_gc_plmn;
4326static int hf_ieee80211_3gpp_gc_plmn_len;
4327static int hf_ieee80211_ff_anqp_domain_name_len;
4328static int hf_ieee80211_ff_anqp_domain_name;
4329static int hf_ieee80211_ff_tdls_action_code;
4330static int hf_ieee80211_ff_target_channel;
4331static int hf_ieee80211_ff_operating_class;
4332static int hf_ieee80211_ff_channel;
4333static int hf_ieee80211_ff_wnm_action_code;
4334static int hf_ieee80211_ff_unprotected_wnm_action_code;
4335static int hf_ieee80211_ff_key_data_length;
4336static int hf_ieee80211_ff_key_data;
4337static int hf_ieee80211_ff_wnm_notification_type;
4338static int hf_ieee80211_ff_wnm_notification_response_status;
4339static int hf_ieee80211_ff_rm_action_code;
4340static int hf_ieee80211_ff_rm_dialog_token;
4341static int hf_ieee80211_ff_rm_repetitions;
4342static int hf_ieee80211_ff_rm_tx_power;
4343static int hf_ieee80211_ff_rm_max_tx_power;
4344static int hf_ieee80211_ff_tpc;
4345static int hf_ieee80211_ff_tpc_element_id;
4346static int hf_ieee80211_ff_tpc_length;
4347static int hf_ieee80211_ff_tpc_tx_power;
4348static int hf_ieee80211_ff_tpc_link_margin;
4349static int hf_ieee80211_ff_rm_rx_antenna_id;
4350static int hf_ieee80211_ff_rm_tx_antenna_id;
4351static int hf_ieee80211_ff_rm_rcpi;
4352static int hf_ieee80211_ff_rm_rsni;
4353static int hf_ieee80211_ff_request_mode_pref_cand;
4354static int hf_ieee80211_ff_request_mode_abridged;
4355static int hf_ieee80211_ff_request_mode_disassoc_imminent;
4356static int hf_ieee80211_ff_request_mode_bss_term_included;
4357static int hf_ieee80211_ff_request_mode_ess_disassoc_imminent;
4358static int hf_ieee80211_ff_request_mode_link_removal_imminent;
4359static int hf_ieee80211_ff_request_mode_reserved;
4360static int hf_ieee80211_ff_disassoc_timer;
4361static int hf_ieee80211_ff_validity_interval;
4362static int hf_ieee80211_ff_url_len;
4363static int hf_ieee80211_ff_url;
4364static int hf_ieee80211_ff_target_bss;
4365static int hf_ieee80211_ff_bss_transition_query_reason;
4366static int hf_ieee80211_ff_bss_transition_status_code;
4367static int hf_ieee80211_ff_bss_termination_delay;
4368static int hf_ieee80211_ff_bss_transition_candidate_list_entries;
4369
4370static int hf_ieee80211_ff_sa_query_action_code;
4371static int hf_ieee80211_ff_transaction_id;
4372
4373static int hf_ieee80211_ff_send_confirm;
4374static int hf_ieee80211_ff_scalar;
4375static int hf_ieee80211_ff_finite_field_element;
4376static int hf_ieee80211_ff_confirm;
4377static int hf_ieee80211_ff_finite_cyclic_group;
4378static int hf_ieee80211_ff_sae_message_type;
4379static int hf_ieee80211_ff_sae_anti_clogging_token;
4380
4381
4382/* Vendor specific */
4383static int hf_ieee80211_ff_marvell_action_type;
4384static int hf_ieee80211_ff_marvell_mesh_mgt_action_code;
4385static int hf_ieee80211_ff_marvell_mesh_mgt_length; /* Mesh Management length */
4386static int hf_ieee80211_ff_marvell_mesh_mgt_mode; /* Mesh Management mode */
4387static int hf_ieee80211_ff_marvell_mesh_mgt_ttl; /* Mesh Management TTL */
4388static int hf_ieee80211_ff_marvell_mesh_mgt_dstcount; /* Mesh Management dst count */
4389static int hf_ieee80211_ff_marvell_mesh_mgt_hopcount; /* Mesh Management hop count */
4390static int hf_ieee80211_ff_marvell_mesh_mgt_rreqid; /* Mesh Management RREQ ID */
4391static int hf_ieee80211_ff_marvell_mesh_mgt_sa; /* Mesh Management src addr */
4392static int hf_ieee80211_ff_marvell_mesh_mgt_ssn; /* Mesh Management src sequence number */
4393static int hf_ieee80211_ff_marvell_mesh_mgt_metric; /* Mesh Management metric */
4394static int hf_ieee80211_ff_marvell_mesh_mgt_flags; /* Mesh Management RREQ flags */
4395static int hf_ieee80211_ff_marvell_mesh_mgt_da; /* Mesh Management dst addr */
4396static int hf_ieee80211_ff_marvell_mesh_mgt_dsn; /* Mesh Management dst sequence number */
4397static int hf_ieee80211_ff_marvell_mesh_mgt_lifetime; /* Mesh Management lifetime */
4398
4399
4400static int hf_ieee80211_ff_ba_action;
4401
4402static int hf_ieee80211_ff_block_ack_params;
4403static int hf_ieee80211_ff_block_ack_params_amsdu_permitted;
4404static int hf_ieee80211_ff_block_ack_params_policy;
4405static int hf_ieee80211_ff_block_ack_params_tid;
4406static int hf_ieee80211_ff_block_ack_params_buffer_size;
4407
4408static int * const ieee80211_ff_block_ack_params_fields[] = {
4409 &hf_ieee80211_ff_block_ack_params_amsdu_permitted,
4410 &hf_ieee80211_ff_block_ack_params_policy,
4411 &hf_ieee80211_ff_block_ack_params_tid,
4412 &hf_ieee80211_ff_block_ack_params_buffer_size,
4413 NULL((void*)0)
4414};
4415
4416static int hf_ieee80211_ff_block_ack_timeout;
4417
4418static int hf_ieee80211_ff_block_ack_ssc;
4419static int hf_ieee80211_ff_block_ack_ssc_fragment;
4420static int hf_ieee80211_ff_block_ack_ssc_sequence;
4421
4422static int * const ieee80211_ff_block_ack_ssc_fields[] = {
4423 &hf_ieee80211_ff_block_ack_ssc_fragment,
4424 &hf_ieee80211_ff_block_ack_ssc_sequence,
4425 NULL((void*)0)
4426};
4427
4428static int hf_ieee80211_ff_delba_param;
4429static int hf_ieee80211_ff_delba_param_reserved;
4430static int hf_ieee80211_ff_delba_param_init;
4431static int hf_ieee80211_ff_delba_param_tid;
4432
4433static int * const ieee80211_ff_delba_param_fields[] = {
4434 &hf_ieee80211_ff_delba_param_reserved,
4435 &hf_ieee80211_ff_delba_param_init,
4436 &hf_ieee80211_ff_delba_param_tid,
4437 NULL((void*)0)
4438};
4439
4440static int hf_ieee80211_ff_max_reg_pwr;
4441static int hf_ieee80211_ff_measurement_pilot_int;
4442static int hf_ieee80211_ff_country_str;
4443static int hf_ieee80211_ff_max_tx_pwr;
4444static int hf_ieee80211_ff_tx_pwr_used;
4445static int hf_ieee80211_ff_transceiver_noise_floor;
4446static int hf_ieee80211_ff_channel_width;
4447
4448static int hf_ieee80211_ff_qos_info_ap;
4449static int hf_ieee80211_ff_qos_info_ap_edca_param_set_counter;
4450static int hf_ieee80211_ff_qos_info_ap_q_ack;
4451static int hf_ieee80211_ff_qos_info_ap_queue_req;
4452static int hf_ieee80211_ff_qos_info_ap_txop_request;
4453static int hf_ieee80211_ff_qos_info_ap_more_data_ack;
4454
4455static int * const ieee80211_ff_qos_info_ap_fields[] = {
4456 &hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
4457 &hf_ieee80211_ff_qos_info_ap_q_ack,
4458 &hf_ieee80211_ff_qos_info_ap_queue_req,
4459 &hf_ieee80211_ff_qos_info_ap_txop_request,
4460 &hf_ieee80211_ff_qos_info_ap_more_data_ack,
4461 NULL((void*)0)
4462};
4463
4464static int hf_ieee80211_ff_qos_info_sta;
4465static int hf_ieee80211_ff_qos_info_sta_ac_vo;
4466static int hf_ieee80211_ff_qos_info_sta_ac_vi;
4467static int hf_ieee80211_ff_qos_info_sta_ac_bk;
4468static int hf_ieee80211_ff_qos_info_sta_ac_be;
4469static int hf_ieee80211_ff_qos_info_sta_q_ack;
4470static int hf_ieee80211_ff_qos_info_sta_max_sp_length;
4471static int hf_ieee80211_ff_qos_info_sta_more_data_ack;
4472
4473static int * const ieee80211_ff_qos_info_sta_fields[] = {
4474 &hf_ieee80211_ff_qos_info_sta_ac_vo,
4475 &hf_ieee80211_ff_qos_info_sta_ac_vi,
4476 &hf_ieee80211_ff_qos_info_sta_ac_bk,
4477 &hf_ieee80211_ff_qos_info_sta_ac_be,
4478 &hf_ieee80211_ff_qos_info_sta_q_ack,
4479 &hf_ieee80211_ff_qos_info_sta_max_sp_length,
4480 &hf_ieee80211_ff_qos_info_sta_more_data_ack,
4481 NULL((void*)0)
4482};
4483
4484static int hf_ieee80211_ff_sm_pwr_save;
4485static int hf_ieee80211_ff_sm_pwr_save_enabled;
4486static int hf_ieee80211_ff_sm_pwr_save_sm_mode;
4487static int hf_ieee80211_ff_sm_pwr_save_reserved;
4488
4489static int * const ieee80211_ff_sw_pwr_save_fields[] = {
4490 &hf_ieee80211_ff_sm_pwr_save_enabled,
4491 &hf_ieee80211_ff_sm_pwr_save_sm_mode,
4492 &hf_ieee80211_ff_sm_pwr_save_reserved,
4493 NULL((void*)0)
4494};
4495
4496static int hf_ieee80211_ff_pco_phase_cntrl;
4497
4498static int hf_ieee80211_ff_psmp_param_set;
4499static int hf_ieee80211_ff_psmp_param_set_n_sta;
4500static int hf_ieee80211_ff_psmp_param_set_more_psmp;
4501static int hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration;
4502
4503static int * const ieee80211_ff_psmp_param_set_fields[] = {
4504 &hf_ieee80211_ff_psmp_param_set_n_sta,
4505 &hf_ieee80211_ff_psmp_param_set_more_psmp,
4506 &hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
4507 NULL((void*)0)
4508};
4509
4510static int hf_ieee80211_ff_mimo_cntrl;
4511static int hf_ieee80211_ff_mimo_cntrl_nc_index;
4512static int hf_ieee80211_ff_mimo_cntrl_nr_index;
4513static int hf_ieee80211_ff_mimo_cntrl_channel_width;
4514static int hf_ieee80211_ff_mimo_cntrl_grouping;
4515static int hf_ieee80211_ff_mimo_cntrl_coefficient_size;
4516static int hf_ieee80211_ff_mimo_cntrl_codebook_info;
4517static int hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment;
4518static int hf_ieee80211_ff_mimo_cntrl_reserved;
4519static int hf_ieee80211_ff_mimo_cntrl_sounding_timestamp;
4520
4521static int hf_ieee80211_ff_ftm_param_delim1;
4522static int hf_ieee80211_ff_ftm_param_status_indication;
4523static int hf_ieee80211_ff_ftm_param_value;
4524static int hf_ieee80211_ff_ftm_param_reserved1;
4525static int hf_ieee80211_ff_ftm_param_burst_exponent;
4526static int hf_ieee80211_ff_ftm_param_burst_duration;
4527
4528static int hf_ieee80211_ff_ftm_param_delim2;
4529static int hf_ieee80211_ff_ftm_param_min_delta_ftm;
4530static int hf_ieee80211_ff_ftm_param_partial_tsf_timer;
4531static int hf_ieee80211_ff_ftm_param_partial_tsf_no_pref;
4532static int hf_ieee80211_ff_ftm_param_asap_capable;
4533static int hf_ieee80211_ff_ftm_param_asap;
4534static int hf_ieee80211_ff_ftm_param_ftm_per_burst;
4535
4536static int hf_ieee80211_ff_ftm_param_delim3;
4537static int hf_ieee80211_ff_ftm_param_reserved2;
4538static int hf_ieee80211_ff_ftm_param_format_and_bw;
4539static int hf_ieee80211_ff_ftm_param_burst_period;
4540
4541/* az D3.0 introduces a 1-octet TOD Error field; use a different name to avoid
4542 * conflicting with the existing hf_ieee80211_ff_ftm_tod_err (which is 2
4543 * octets).
4544 */
4545static int hf_ieee80211_ff_ftm_tod_err1;
4546static int hf_ieee80211_ff_ftm_max_tod_error_exponent;
4547static int hf_ieee80211_ff_ftm_tod_err_reserved;
4548static int hf_ieee80211_ff_ftm_tod_not_continuous;
4549
4550/* Same situation with ...toa_err1 as ...tod_err1 */
4551static int hf_ieee80211_ff_ftm_toa_err1;
4552static int hf_ieee80211_ff_ftm_max_toa_error_exponent;
4553static int hf_ieee80211_ff_ftm_toa_err_reserved;
4554static int hf_ieee80211_ff_ftm_invalid_measurement;
4555static int hf_ieee80211_ff_ftm_toa_type;
4556
4557static int hf_ieee80211_ff_ftm_cfo;
4558static int hf_ieee80211_ff_ftm_r2i_ndp_tx_power;
4559static int hf_ieee80211_ff_ftm_i2r_ndp_target_rssi;
4560
4561/* az: FTM Ranging Parameters Element */
4562static int hf_ieee80211_tag_ranging_parameters;
4563static int hf_ieee80211_tag_ranging_subelt_tag;
4564static int hf_ieee80211_tag_ranging_subelt_len;
4565static int hf_ieee80211_tag_ranging_status_indication;
4566static int hf_ieee80211_tag_ranging_value;
4567static int hf_ieee80211_tag_ranging_i2r_lmr_feedback;
4568static int hf_ieee80211_tag_ranging_secure_ltf_required;
4569static int hf_ieee80211_tag_ranging_secure_ltf_support;
4570static int hf_ieee80211_tag_ranging_ranging_priority;
4571static int hf_ieee80211_tag_ranging_r2i_toa_type;
4572static int hf_ieee80211_tag_ranging_i2r_toa_type;
4573static int hf_ieee80211_tag_ranging_r2i_aoa_requested;
4574static int hf_ieee80211_tag_ranging_i2r_aoa_requested;
4575static int hf_ieee80211_tag_ranging_format_and_bandwidth;
4576static int hf_ieee80211_tag_ranging_immediate_r2i_feedback;
4577static int hf_ieee80211_tag_ranging_immediate_i2r_feedback;
4578static int hf_ieee80211_tag_ranging_max_i2r_repetition;
4579static int hf_ieee80211_tag_ranging_max_r2i_repetition;
4580static int hf_ieee80211_tag_ranging_reserved1;
4581static int hf_ieee80211_tag_ranging_reserved2;
4582static int hf_ieee80211_tag_ranging_max_r2i_sts_le_80_mhz;
4583static int hf_ieee80211_tag_ranging_max_r2i_sts_gt_80_mhz;
4584static int hf_ieee80211_tag_ranging_max_r2i_ltf_total;
4585static int hf_ieee80211_tag_ranging_max_i2r_ltf_total;
4586static int hf_ieee80211_tag_ranging_max_i2r_sts_le_80_mhz;
4587static int hf_ieee80211_tag_ranging_max_i2r_sts_gt_80_mhz;
4588static int hf_ieee80211_tag_ranging_bss_color_info;
4589
4590/* az: FTM Ranging Parameters NTB-specific subelement */
4591static int hf_ieee80211_tag_ranging_ntb;
4592static int hf_ieee80211_tag_ranging_ntb_reserved1;
4593static int hf_ieee80211_tag_ranging_ntb_min_time_msmts;
4594static int hf_ieee80211_tag_ranging_ntb_max_time_msmts;
4595static int hf_ieee80211_tag_ranging_ntb_r2i_tx_power;
4596static int hf_ieee80211_tag_ranging_ntb_i2r_tx_power;
4597static int hf_ieee80211_tag_ranging_ntb_reserved2;
4598
4599/* az: FTM Ranging Specific TB subelement */
4600static int hf_ieee80211_tag_ranging_aid_rsid;
4601static int hf_ieee80211_tag_ranging_device_class;
4602static int hf_ieee80211_tag_ranging_full_bw_ul_mu_mimo;
4603static int hf_ieee80211_tag_ranging_trigger_frame_paddur;
4604static int hf_ieee80211_tag_ranging_max_sess_exp;
4605static int hf_ieee80211_tag_ranging_passive_tb_ranging;
4606static int hf_ieee80211_tag_ranging_tb_specific_reserved;
4607
4608/* az: FTM Ranging Secure HE-LTF subelement */
4609static int hf_ieee80211_tag_ranging_secure_he_ltf;
4610static int hf_ieee80211_tag_ranging_secure_he_ltf_version;
4611static int hf_ieee80211_tag_ranging_secure_he_ltf_req;
4612static int hf_ieee80211_tag_ranging_secure_he_ltf_r2i_tx_window;
4613static int hf_ieee80211_tag_ranging_secure_he_ltf_i2r_tx_window;
4614static int hf_ieee80211_tag_ranging_secure_he_ltf_reserved;
4615
4616/* az: PASN subelements etc. */
4617static int hf_ieee80211_tag_pasn_parameters_control;
4618static int hf_ieee80211_tag_pasn_params_comeback_info_present;
4619static int hf_ieee80211_tag_pasn_params_group_and_key_present;
4620static int hf_ieee80211_tag_pasn_parameters_reserved;
4621static int hf_ieee80211_tag_pasn_parameters_wrapped_fmt;
4622static int hf_ieee80211_tag_pasn_comeback_after;
4623static int hf_ieee80211_tag_pasn_cookie_length;
4624static int hf_ieee80211_tag_pasn_cookie;
4625static int hf_ieee80211_tag_pasn_finite_cyclic_group_id;
4626static int hf_ieee80211_tag_pasn_ephemeral_public_key_len;
4627static int hf_ieee80211_tag_pasn_ephemeral_public_key;
4628static int hf_ieee80211_pasn_auth1_frame_len;
4629static int hf_ieee80211_pasn_auth2_frame_len;
4630
4631/* az: Secure LTF Parameters */
4632static int hf_ieee80211_tag_secure_ltf_params_counter;
4633static int hf_ieee80211_tag_secure_ltf_generation_sac;
4634static int hf_ieee80211_tag_secure_ltf_management_sac;
4635static int hf_ieee80211_tag_secure_ltf_result_ltf_ofs;
4636
4637/* az: ista and rsta availability details */
4638static int hf_ieee80211_ftm_ista_availability_count;
4639static int hf_ieee80211_ftm_ista_availability_reserved;
4640static int hf_ieee80211_ftm_ista_avail_bits;
4641static int hf_ieee80211_ftm_ista_avail_pad;
4642
4643static int hf_ieee80211_ftm_rsta_header;
4644static int hf_ieee80211_ftm_rsta_count;
4645static int hf_ieee80211_ftm_rsta_avail_window_bcast_fmt;
4646static int hf_ieee80211_ftm_rsta_partial_tsf_timer1;
4647static int hf_ieee80211_ftm_rsta_duration1;
4648static int hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved1;
4649static int hf_ieee80211_ftm_rsta_periodicity1;
4650static int hf_ieee80211_ftm_rsta_partial_tsf_timer;
4651static int hf_ieee80211_ftm_rsta_duration;
4652static int hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved;
4653static int hf_ieee80211_ftm_rsta_periodicity;
4654static int hf_ieee80211_ftm_rsta_format_and_bandwidth;
4655static int hf_ieee80211_ftm_rsta_reserved;
4656static int hf_ieee80211_ftm_rsta_avail_subfield_short;
4657static int hf_ieee80211_ftm_rsta_avail_subfield_long;
4658
4659/* be: Multi-link elements and other fields */
4660static int hf_ieee80211_eht_multi_link_control;
4661static int hf_ieee80211_eht_multi_link_control_type;
4662static int hf_ieee80211_eht_multi_link_control_reserved;
4663static int hf_ieee80211_eht_multi_link_control_link_id_present;
4664static int hf_ieee80211_eht_multi_link_control_bss_parms_ch_count;
4665static int hf_ieee80211_eht_multi_link_control_medium_sync_delay;
4666static int hf_ieee80211_eht_multi_link_control_eml_capa;
4667static int hf_ieee80211_eht_multi_link_control_mld_capa;
4668static int hf_ieee80211_eht_multi_link_control_basic_mld_id_present;
4669static int hf_ieee80211_eht_multi_link_control_ext_mld_capa;
4670static int hf_ieee80211_eht_multi_link_control_bitmap_reserved;
4671static int hf_ieee80211_eht_multi_link_control_probe_mld_id_present;
4672static int hf_ieee80211_eht_multi_link_control_probe_mld_mac_addr_present;
4673static int hf_ieee80211_eht_multi_link_control_probe_reserved;
4674static int hf_ieee80211_eht_multi_link_control_reconfig_mld_mac;
4675static int hf_ieee80211_eht_multi_link_control_reconfig_eml_capa;
4676static int hf_ieee80211_eht_multi_link_control_reconfig_mld_capa_oper;
4677static int hf_ieee80211_eht_multi_link_control_reconfig_ext_mld_capa_oper;
4678static int hf_ieee80211_eht_multi_link_control_reconfig_reserved;
4679static int hf_ieee80211_eht_multi_link_control_tdls_reserved;
4680static int hf_ieee80211_eht_multi_link_control_prio_access_reserved;
4681static int hf_ieee80211_eht_common_field_length;
4682static int hf_ieee80211_eht_common_field_mld_mac;
4683static int hf_ieee80211_eht_common_field_link_id_field;
4684static int hf_ieee80211_eht_common_info_link_id;
4685static int hf_ieee80211_eht_common_info_link_id_reserved;
4686static int hf_ieee80211_eht_common_field_bss_param_change_count;
4687static int hf_ieee80211_eht_common_field_medium_sync_field;
4688static int hf_ieee80211_eht_common_info_medium_sync_duration;
4689static int hf_ieee80211_eht_common_info_medium_sync_threshold;
4690static int hf_ieee80211_eht_common_info_medium_sync_max_txops;
4691static int hf_ieee80211_eht_common_field_eml_capabilities;
4692static int hf_ieee80211_eht_common_info_eml_capa_emlsr_support;
4693static int hf_ieee80211_eht_common_info_eml_capa_emlsr_padding_delay;
4694static int hf_ieee80211_eht_common_info_eml_capa_emlsr_transition_delay;
4695static int hf_ieee80211_eht_common_info_eml_capa_emlmr_support;
4696static int hf_ieee80211_eht_common_info_eml_capa_emlmr_delay;
4697static int hf_ieee80211_eht_common_info_eml_capa_transition_timeout;
4698static int hf_ieee80211_eht_common_info_eml_capa_reserved;
4699static int hf_ieee80211_eht_common_field_mld_capabilities;
4700static int hf_ieee80211_eht_common_info_mld_max_simul_links;
4701static int hf_ieee80211_eht_common_info_mld_srs_support;
4702static int hf_ieee80211_eht_common_info_mld_tid_to_link_map_neg;
4703static int hf_ieee80211_eht_common_info_mld_freq_sep_for_str;
4704static int hf_ieee80211_eht_common_info_mld_aar_support;
4705static int hf_ieee80211_eht_common_info_mld_link_reconf_op_support;
4706static int hf_ieee80211_eht_common_info_mld_aligned_twt_support;
4707static int hf_ieee80211_eht_common_info_mld_reserved;
4708static int hf_ieee80211_eht_common_field_mld_id;
4709static int hf_ieee80211_eht_common_field_ap_mld_mac;
4710static int hf_ieee80211_eht_common_field_ext_mld_capabilities;
4711static int hf_ieee80211_eht_common_info_ext_mld_op_update_support;
4712static int hf_ieee80211_eht_common_info_ext_mld_max_simul_links;
4713static int hf_ieee80211_eht_common_info_ext_mld_nstr_status_support;
4714static int hf_ieee80211_eht_common_info_ext_mld_emlsr_enable_one_link_support;
4715static int hf_ieee80211_eht_common_info_ext_mld_btm_mld_recom_aps_support;
4716static int hf_ieee80211_eht_common_info_ext_mld_reserved;
4717static int hf_ieee80211_eht_multi_link_subelt_tag;
4718static int hf_ieee80211_eht_multi_link_subelt_len;
4719static int hf_ieee80211_eht_multi_link_type_0_link_count;
4720static int hf_ieee80211_eht_multi_link_type_1_link_count;
4721static int hf_ieee80211_eht_multi_link_type_2_link_count;
4722static int hf_ieee80211_eht_multi_link_type_3_link_count;
4723static int hf_ieee80211_eht_multi_link_type_4_link_count;
4724static int hf_ieee80211_eht_multi_link_link_id_list;
4725static int hf_ieee80211_eht_profile_sta_control;
4726static int hf_ieee80211_eht_profile_link_id;
4727static int hf_ieee80211_eht_profile_complete_profile;
4728static int hf_ieee80211_eht_profile_mac_address_present;
4729static int hf_ieee80211_eht_profile_beacon_interval_present;
4730static int hf_ieee80211_eht_profile_tsf_offset_present;
4731static int hf_ieee80211_eht_profile_dtim_info_present;
4732static int hf_ieee80211_eht_profile_nstr_link_pair_present;
4733static int hf_ieee80211_eht_profile_nstr_bitmap_size;
4734static int hf_ieee80211_eht_profile_bss_params_change_count_present;
4735static int hf_ieee80211_eht_profile_reserved;
4736static int hf_ieee80211_eht_profile_probe_reserved;
4737static int hf_ieee80211_eht_profile_removal_timer_present;
4738static int hf_ieee80211_eht_profile_reconfig_operation_type;
4739static int hf_ieee80211_eht_profile_operation_para_present;
4740static int hf_ieee80211_eht_profile_reconfig_nstr_bitmap_size;
4741static int hf_ieee80211_eht_profile_reconfig_nstr_bitmap_present;
4742static int hf_ieee80211_eht_profile_reconfig_reserved;
4743static int hf_ieee80211_eht_profile_prio_acc_reserved;
4744static int hf_ieee80211_eht_sta_profile_info_len;
4745static int hf_ieee80211_eht_sta_profile_info_mac;
4746static int hf_ieee80211_eht_sta_profile_info_beacon;
4747static int hf_ieee80211_eht_sta_profile_info_tsf_offset;
4748static int hf_ieee80211_eht_sta_profile_info_dtim_count;
4749static int hf_ieee80211_eht_sta_profile_info_dtim_period;
4750static int hf_ieee80211_eht_sta_profile_info_bitmap;
4751static int hf_ieee80211_eht_sta_profile_bss_params_change_count;
4752static int hf_ieee80211_eht_sta_profile_removal_timer;
4753static int hf_ieee80211_eht_sta_profile_presence_indi;
4754static int hf_ieee80211_eht_sta_profile_presence_indi_max_mpdu_length_present;
4755static int hf_ieee80211_eht_sta_profile_presence_indi_max_amsdu_length_present;
4756static int hf_ieee80211_eht_sta_profile_presence_indi_reserved;
4757static int hf_ieee80211_eht_sta_profile_operation_para_info;
4758static int hf_ieee80211_eht_sta_profile_operation_para_info_max_mpdu_length;
4759static int hf_ieee80211_eht_sta_profile_operation_para_info_amsdu_length;
4760static int hf_ieee80211_eht_sta_profile_operation_para_info_pad;
4761static int hf_ieee80211_eht_operation_parameters;
4762static int hf_ieee80211_eht_basic_eht_mcs_nss_set;
4763static int hf_ieee80211_eht_operation_control_chan_width;
4764static int hf_ieee80211_eht_operation_control_reserved;
4765static int hf_ieee80211_eht_operation_info_present;
4766static int hf_ieee80211_eht_operation_subchannel_bitmap_present;
4767static int hf_ieee80211_eht_operation_default_pe_duration;
4768static int hf_ieee80211_eht_operation_group_addressed_bu_indication_limit;
4769static int hf_ieee80211_eht_operation_group_addressed_bu_indication_exp;
4770static int hf_ieee80211_eht_operation_mcs15_disable;
4771static int hf_ieee80211_eht_operation_reserved;
4772static int hf_ieee80211_eht_operation_control;
4773static int hf_ieee80211_eht_operation_ccfs0;
4774static int hf_ieee80211_eht_operation_ccfs1;
4775static int hf_ieee80211_eht_operation_disabled_bitmap;
4776static int hf_ieee80211_eht_mac_capabilities;
4777static int hf_ieee80211_eht_mac_capa_epcs_prio_access_support;
4778static int hf_ieee80211_eht_mac_capa_eht_om_control_support;
4779static int hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_1_support;
4780static int hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_2_support;
4781static int hf_ieee80211_eht_mac_capa_restricted_twt_support;
4782static int hf_ieee80211_eht_mac_capa_scs_traffic_description_support;
4783static int hf_ieee80211_eht_mac_capa_maximum_mpdu_length;
4784static int hf_ieee80211_eht_mac_capa_maximum_ampdu_length_exp_ext;
4785static int hf_ieee80211_eht_mac_capa_eht_trs_support;
4786static int hf_ieee80211_eht_mac_capa_txop_return_support_txop_sha_mode;
4787static int hf_ieee80211_eht_mac_capa_two_bqrs_support;
4788static int hf_ieee80211_eht_mac_capa_eht_link_adaptation_support;
4789static int hf_ieee80211_eht_mac_capa_unsolicited_epcs_update;
4790static int hf_ieee80211_eht_mac_capa_reserved;
4791static int hf_ieee80211_eht_phy_bits_0_15;
4792static int hf_ieee80211_eht_phy_bits_0_15_reserved;
4793static int hf_ieee80211_eht_phy_bits_0_15_320_mhz_in_6ghz;
4794static int hf_ieee80211_eht_phy_bits_0_15_242_tone_ru_bw_wider_20mhz;
4795static int hf_ieee80211_eht_phy_bits_0_15_ndp_and_3_2_us_gi;
4796static int hf_ieee80211_eht_phy_bits_0_15_partial_bw_ul_mu_mimo;
4797static int hf_ieee80211_eht_phy_bits_0_15_su_beamformer;
4798static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee;
4799static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee_le_80mhz;
4800static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_160mhz;
4801static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_320mhz;
4802static int hf_ieee80211_eht_phy_bits_16_31;
4803static int hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_lt_80mhz;
4804static int hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_160mhz;
4805static int hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_320mhz;
4806static int hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_su_feedback;
4807static int hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_mu_feedback;
4808static int hf_ieee80211_eht_phy_bits_16_31_codebook_size_4_2_su_fbck;
4809static int hf_ieee80211_eht_phy_bits_16_31_codebook_size_7_5_mu_fbck;
4810static int hf_ieee80211_eht_phy_bits_16_31_triggered_su_beemform_fbck;
4811static int hf_ieee80211_eht_phy_bits_16_31_triggered_mu_beemform_p_bw_fbck;
4812static int hf_ieee80211_eht_phy_bits_16_31_triggered_cqi_feedback;
4813static int hf_ieee80211_eht_phy_bits_32_39;
4814static int hf_ieee80211_eht_phy_bits_32_39_partial_bw_dl_mu_mimo;
4815static int hf_ieee80211_eht_phy_bits_32_39_eht_psr_based_sr_support;
4816static int hf_ieee80211_eht_phy_bits_32_39_power_boost_factor_support;
4817static int hf_ieee80211_eht_phy_bits_32_39_eht_mu_ppdu_w_4x_eht_ltf_08_gi;
4818static int hf_ieee80211_eht_phy_bits_32_39_max_nc;
4819static int hf_ieee80211_eht_phy_bits_40_63;
4820static int hf_ieee80211_eht_phy_bits_40_63_non_triggered_cqi_fbck;
4821static int hf_ieee80211_eht_phy_bits_40_63_tx_1024_4096_qam_lt_242_ru_support;
4822static int hf_ieee80211_eht_phy_bits_40_63_rx_1024_4096_qam_lt_242_ru_support;
4823static int hf_ieee80211_eht_phy_bits_40_63_ppe_thresholds_present;
4824static int hf_ieee80211_eht_phy_bits_40_63_common_nominal_packet_padding;
4825static int hf_ieee80211_eht_phy_bits_40_63_max_num_supported_eht_ltfs;
4826static int hf_ieee80211_eht_phy_bits_40_63_support_of_mcx_15;
4827static int hf_ieee80211_eht_phy_bits_40_63_support_of_eht_dup_in_6_ghz;
4828static int hf_ieee80211_eht_phy_bits_40_63_support_20_mhz_sta_ndp_wide_bw;
4829static int hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_le_80_mhz;
4830static int hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_160_mhz;
4831static int hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_320_mhz;
4832static int hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_le_80_mhz;
4833static int hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_160_mhz;
4834static int hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_320_mhz;
4835static int hf_ieee80211_eht_phy_bits_40_63_tb_sounding_feedback_rate_limit;
4836static int hf_ieee80211_eht_phy_bits_64_71;
4837static int hf_ieee80211_eht_phy_bits_64_71_rx_1024_qam_wid_bw_dl_ofdma_sup;
4838static int hf_ieee80211_eht_phy_bits_64_71_rx_4096_qam_wid_bw_dl_ofdma_sup;
4839static int hf_ieee80211_eht_phy_bits_64_71_20m_limit_capa_support;
4840static int hf_ieee80211_eht_phy_bits_64_71_20m_mu_beam_feedback_dl_mu_mimo;
4841static int hf_ieee80211_eht_phy_bits_64_71_20m_mru_support;
4842static int hf_ieee80211_eht_phy_bits_64_71_reserved;
4843static int hf_ieee80211_eht_supported_mcs_nss_bytes;
4844static int hf_ieee80211_eht_mcs_and_nss_non_ap;
4845static int hf_ieee80211_eht_rx_max_nss_20mhz_0_7;
4846static int hf_ieee80211_eht_tx_max_nss_20mhz_0_7;
4847static int hf_ieee80211_eht_rx_max_nss_20mhz_8_9;
4848static int hf_ieee80211_eht_tx_max_nss_20mhz_8_9;
4849static int hf_ieee80211_eht_rx_max_nss_20mhz_10_11;
4850static int hf_ieee80211_eht_tx_max_nss_20mhz_10_11;
4851static int hf_ieee80211_eht_rx_max_nss_20mhz_12_13;
4852static int hf_ieee80211_eht_tx_max_nss_20mhz_12_13;
4853static int hf_ieee80211_eht_le_80_rx_max_nss_0_9;
4854static int hf_ieee80211_eht_le_80_tx_max_nss_0_9;
4855static int hf_ieee80211_eht_le_80_rx_max_nss_10_11;
4856static int hf_ieee80211_eht_le_80_tx_max_nss_10_11;
4857static int hf_ieee80211_eht_le_80_rx_max_nss_12_13;
4858static int hf_ieee80211_eht_le_80_tx_max_nss_12_13;
4859static int hf_ieee80211_eht_160_rx_max_nss_0_9;
4860static int hf_ieee80211_eht_160_tx_max_nss_0_9;
4861static int hf_ieee80211_eht_160_rx_max_nss_10_11;
4862static int hf_ieee80211_eht_160_tx_max_nss_10_11;
4863static int hf_ieee80211_eht_160_rx_max_nss_12_13;
4864static int hf_ieee80211_eht_160_tx_max_nss_12_13;
4865static int hf_ieee80211_eht_320_rx_max_nss_0_9;
4866static int hf_ieee80211_eht_320_tx_max_nss_0_9;
4867static int hf_ieee80211_eht_320_rx_max_nss_10_11;
4868static int hf_ieee80211_eht_320_tx_max_nss_10_11;
4869static int hf_ieee80211_eht_320_rx_max_nss_12_13;
4870static int hf_ieee80211_eht_320_tx_max_nss_12_13;
4871static int hf_ieee80211_eht_mcs_and_nss_le_80mhz;
4872static int hf_ieee80211_eht_mcs_and_nss_eq_160mhz;
4873static int hf_ieee80211_eht_mcs_and_nss_eq_320mhz;
4874static int hf_ieee80211_eht_ppe_thresholds;
4875static int hf_ieee80211_eht_ttl_mapping_control;
4876static int hf_ieee80211_eht_ttl_mapping_direction;
4877static int hf_ieee80211_eht_ttl_default_link_mapping;
4878static int hf_ieee80211_eht_ttl_mapping_switch_time_pres;
4879static int hf_ieee80211_eht_ttl_expected_dura_pres;
4880static int hf_ieee80211_eht_ttl_link_mapping_size;
4881static int hf_ieee80211_eht_ttl_mapping_reserved;
4882static int hf_ieee80211_eht_ttl_mapping_presence;
4883static int hf_ieee80211_eht_ttl_mapping_switch_time;
4884static int hf_ieee80211_eht_ttl_mapping_expected_duration;
4885static int hf_ieee80211_eht_ttl_mapping_tid_0_link_mapping;
4886static int hf_ieee80211_eht_ttl_mapping_tid_1_link_mapping;
4887static int hf_ieee80211_eht_ttl_mapping_tid_2_link_mapping;
4888static int hf_ieee80211_eht_ttl_mapping_tid_3_link_mapping;
4889static int hf_ieee80211_eht_ttl_mapping_tid_4_link_mapping;
4890static int hf_ieee80211_eht_ttl_mapping_tid_5_link_mapping;
4891static int hf_ieee80211_eht_ttl_mapping_tid_6_link_mapping;
4892static int hf_ieee80211_eht_ttl_mapping_tid_7_link_mapping;
4893static int hf_ieee80211_eht_multi_link_traffic_control;
4894static int hf_ieee80211_eht_multi_link_tc_bitmap_size;
4895static int hf_ieee80211_eht_multi_link_tc_aid_offset;
4896static int hf_ieee80211_eht_multi_link_tc_reserved;
4897static int hf_ieee80211_eht_multi_link_traffic_indication;
4898static int hf_ieee80211_eht_qos_chars_dirn;
4899static int hf_ieee80211_eht_qos_chars_tid;
4900static int hf_ieee80211_eht_qos_chars_user_prio;
4901static int hf_ieee80211_eht_qos_chars_bitmap;
4902static int hf_ieee80211_eht_qos_chars_linkid;
4903static int hf_ieee80211_eht_qos_chars_resrvd;
4904static int hf_ieee80211_eht_qos_chars_min_svc_interval;
4905static int hf_ieee80211_eht_qos_chars_max_svc_interval;
4906static int hf_ieee80211_eht_qos_chars_min_data_rate;
4907static int hf_ieee80211_eht_qos_chars_delay_bound;
4908static int hf_ieee80211_eht_qos_chars_max_msdu_size;
4909static int hf_ieee80211_eht_qos_chars_service_start_time;
4910static int hf_ieee80211_eht_qos_chars_service_start_time_linkid;
4911static int hf_ieee80211_eht_qos_chars_mean_data_rate;
4912static int hf_ieee80211_eht_qos_chars_burst_size;
4913static int hf_ieee80211_eht_qos_chars_msdu_lifetime;
4914static int hf_ieee80211_eht_qos_chars_msdu_delivery_ratio;
4915static int hf_ieee80211_eht_qos_chars_msdu_count_exponent;
4916static int hf_ieee80211_eht_qos_chars_medium_time;
4917static int hf_ieee80211_eht_link_id_bitmap;
4918static int hf_ieee80211_eht_aid_bitmap_length;
4919static int hf_ieee80211_eht_aid_bitmap_control;
4920static int hf_ieee80211_eht_aid_bitmap_control_reserved;
4921static int hf_ieee80211_eht_aid_bitmap_control_offset;
4922static int hf_ieee80211_eht_aid_bitmap_partial_aid_bitmap;
4923static int hf_ieee80211_eht_aid_bitmap_aid;
4924static int hf_ieee80211_eht_bw_indi_param;
4925static int hf_ieee80211_eht_bw_indi_param_reserved;
4926static int hf_ieee80211_eht_bw_indi_param_disabled_subchan_bitmap;
4927static int hf_ieee80211_eht_bw_indi_param_reserved1;
4928static int hf_ieee80211_eht_bw_indi_diabled_bitmap;
4929static int hf_ieee80211_eht_mimo_ctrl_field;
4930static int hf_ieee80211_eht_mimo_ctrl_nc_index;
4931static int hf_ieee80211_eht_mimo_ctrl_nr_index;
4932static int hf_ieee80211_eht_mimo_ctrl_bw;
4933static int hf_ieee80211_eht_mimo_ctrl_grouping;
4934static int hf_ieee80211_eht_mimo_ctrl_feedback_type;
4935static int hf_ieee80211_eht_mimo_ctrl_reserved1;
4936static int hf_ieee80211_eht_mimo_ctrl_remaining_feedback_segments;
4937static int hf_ieee80211_eht_mimo_ctrl_first_feedback_segment;
4938static int hf_ieee80211_eht_mimo_ctrl_partial_bw_info;
4939static int hf_ieee80211_eht_mimo_ctrl_sounding_dialog_token_number;
4940static int hf_ieee80211_eht_mimo_ctrl_codebook_info;
4941static int hf_ieee80211_eht_mimo_ctrl_reserved2;
4942
4943/* be: Compressed beamforming report etc */
4944static int hf_ieee80211_eht_compressed_beamforming_report_snr;
4945static int hf_ieee80211_eht_compressed_beamform_scidx;
4946
4947/* be: MU Exclusive beamforming report */
4948static int hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr;
4949
4950static int hf_ieee80211_eht_eml_control_field;
4951static int hf_ieee80211_eht_eml_control_emlsr_mode;
4952static int hf_ieee80211_eht_eml_control_emlmr_mode;
4953static int hf_ieee80211_eht_eml_control_emlsr_para_update_control;
4954static int hf_ieee80211_eht_eml_control_device_coexist_activities;
4955static int hf_ieee80211_eht_eml_control_reserved;
4956static int hf_ieee80211_eht_eml_control_link_bitmap;
4957static int hf_ieee80211_eht_eml_control_link_enable_id;
4958static int hf_ieee80211_eht_eml_control_mcs_map_count;
4959static int hf_ieee80211_eht_eml_control_mcs_map_count_bw;
4960static int hf_ieee80211_eht_eml_control_mcs_map_count_reserved;
4961static int hf_ieee80211_eht_emlsr_para_update;
4962static int hf_ieee80211_eht_emlsr_para_update_padding_delay;
4963static int hf_ieee80211_eht_emlsr_para_update_tran_delay;
4964static int hf_ieee80211_eht_emlsr_para_update_reserved;
4965
4966static int hf_ieee80211_eht_group_key_data_length;
4967static int hf_ieee80211_eht_reconfig_link_id_info;
4968static int hf_ieee80211_eht_reconfig_link_id;
4969static int hf_ieee80211_eht_reconfig_link_id_reserved;
4970static int hf_ieee80211_eht_reconfig_status_code;
4971
4972static int hf_ieee80211_ff_ant_selection;
4973static int hf_ieee80211_ff_ant_selection_0;
4974static int hf_ieee80211_ff_ant_selection_1;
4975static int hf_ieee80211_ff_ant_selection_2;
4976static int hf_ieee80211_ff_ant_selection_3;
4977static int hf_ieee80211_ff_ant_selection_4;
4978static int hf_ieee80211_ff_ant_selection_5;
4979static int hf_ieee80211_ff_ant_selection_6;
4980static int hf_ieee80211_ff_ant_selection_7;
4981
4982static int * const ieee80211_ff_ant_selection_fields[] = {
4983 &hf_ieee80211_ff_ant_selection_0,
4984 &hf_ieee80211_ff_ant_selection_1,
4985 &hf_ieee80211_ff_ant_selection_2,
4986 &hf_ieee80211_ff_ant_selection_3,
4987 &hf_ieee80211_ff_ant_selection_4,
4988 &hf_ieee80211_ff_ant_selection_5,
4989 &hf_ieee80211_ff_ant_selection_6,
4990 &hf_ieee80211_ff_ant_selection_7,
4991 NULL((void*)0)
4992};
4993
4994static int hf_ieee80211_ff_ext_channel_switch_announcement;
4995static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode;
4996static int hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class;
4997static int hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number;
4998static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_count;
4999
5000static int * const ieee80211_ff_ext_channel_switch_announcement_fields[] = {
5001 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
5002 &hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
5003 &hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
5004 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
5005 NULL((void*)0)
5006};
5007
5008static int hf_ieee80211_ff_ht_info;
5009static int hf_ieee80211_ff_ht_info_information_request;
5010static int hf_ieee80211_ff_ht_info_40_mhz_intolerant;
5011static int hf_ieee80211_ff_ht_info_sta_chan_width;
5012static int hf_ieee80211_ff_ht_info_reserved;
5013
5014static int * const ieee80211_ff_ht_info_fields[] = {
5015 &hf_ieee80211_ff_ht_info_information_request,
5016 &hf_ieee80211_ff_ht_info_40_mhz_intolerant,
5017 &hf_ieee80211_ff_ht_info_sta_chan_width,
5018 &hf_ieee80211_ff_ht_info_reserved,
5019 NULL((void*)0)
5020};
5021
5022static int hf_ieee80211_ff_ht_action;
5023
5024static int hf_ieee80211_ff_psmp_sta_info;
5025static int hf_ieee80211_ff_psmp_sta_info_type;
5026static int hf_ieee80211_ff_psmp_sta_info_dtt_start_offset;
5027static int hf_ieee80211_ff_psmp_sta_info_dtt_duration;
5028static int hf_ieee80211_ff_psmp_sta_info_sta_id;
5029static int hf_ieee80211_ff_psmp_sta_info_utt_start_offset;
5030static int hf_ieee80211_ff_psmp_sta_info_utt_duration;
5031static int hf_ieee80211_ff_psmp_sta_info_reserved_small;
5032static int hf_ieee80211_ff_psmp_sta_info_reserved_large;
5033static int hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id;
5034
5035static int hf_ieee80211_ff_mimo_csi_snr;
5036static int hf_ieee80211_ff_mimo_csi_matrices;
5037static int hf_ieee80211_ff_mimo_csi_bf_matrices;
5038static int hf_ieee80211_ff_mimo_csi_cbf_matrices;
5039
5040/*** Begin: 802.11s additions ***/
5041static int hf_ieee80211_mesh_control_field;
5042
5043static int hf_ieee80211_ff_mesh_action;
5044static int hf_ieee80211_ff_multihop_action;
5045static int hf_ieee80211_ff_mesh_flags;
5046static int hf_ieee80211_ff_mesh_ttl;
5047static int hf_ieee80211_ff_mesh_sequence;
5048static int hf_ieee80211_ff_mesh_addr4;
5049static int hf_ieee80211_ff_mesh_addr5;
5050static int hf_ieee80211_ff_mesh_addr6;
5051static int hf_ieee80211_ff_selfprot_action;
5052
5053static int hf_ieee80211_mesh_peering_proto;
5054static int hf_ieee80211_mesh_peering_local_link_id;
5055static int hf_ieee80211_mesh_peering_peer_link_id;
5056
5057static int hf_ieee80211_ff_hwmp_flags;
5058static int hf_ieee80211_ff_hwmp_hopcount;
5059static int hf_ieee80211_ff_hwmp_ttl;
5060static int hf_ieee80211_ff_hwmp_pdid;
5061static int hf_ieee80211_ff_hwmp_orig_sta;
5062static int hf_ieee80211_ff_hwmp_orig_sn;
5063static int hf_ieee80211_ff_hwmp_orig_ext;
5064static int hf_ieee80211_ff_hwmp_lifetime;
5065static int hf_ieee80211_ff_hwmp_metric;
5066static int hf_ieee80211_ff_hwmp_targ_count;
5067static int hf_ieee80211_ff_hwmp_targ_flags;
5068static int hf_ieee80211_ff_hwmp_targ_to_flags;
5069static int hf_ieee80211_ff_hwmp_targ_usn_flags;
5070static int hf_ieee80211_ff_hwmp_targ_sta;
5071static int hf_ieee80211_ff_hwmp_targ_sn;
5072static int hf_ieee80211_ff_hwmp_targ_ext;
5073static int hf_ieee80211_rann_flags;
5074static int hf_ieee80211_rann_root_sta;
5075static int hf_ieee80211_rann_sn;
5076static int hf_ieee80211_rann_interval;
5077
5078static int hf_ieee80211_mesh_channel_switch_ttl;
5079static int hf_ieee80211_mesh_channel_switch_flag;
5080static int hf_ieee80211_mesh_channel_switch_reason_code;
5081static int hf_ieee80211_mesh_channel_switch_precedence_value;
5082static int hf_ieee80211_mesh_chswitch_flag_txrestrict;
5083static int hf_ieee80211_mesh_chswitch_flag_initiator;
5084
5085static int hf_ieee80211_mesh_config_path_sel_protocol;
5086static int hf_ieee80211_mesh_config_path_sel_metric;
5087static int hf_ieee80211_mesh_config_congestion_control;
5088static int hf_ieee80211_mesh_config_sync_method;
5089static int hf_ieee80211_mesh_config_auth_protocol;
5090static int hf_ieee80211_mesh_config_formation_info;
5091static int hf_ieee80211_mesh_config_capability;
5092static int hf_ieee80211_mesh_id;
5093static int hf_ieee80211_mesh_config_cap_accepting;
5094static int hf_ieee80211_mesh_config_cap_mcca_support;
5095static int hf_ieee80211_mesh_config_cap_mcca_enabled;
5096static int hf_ieee80211_mesh_config_cap_forwarding;
5097static int hf_ieee80211_mesh_config_cap_mbca_enabled;
5098static int hf_ieee80211_mesh_config_cap_tbtt_adjusting;
5099static int hf_ieee80211_mesh_config_cap_power_save_level;
5100static int hf_ieee80211_mesh_config_cap_reserved;
5101static int hf_ieee80211_mesh_form_info_conn_to_mesh_gate;
5102static int hf_ieee80211_mesh_form_info_num_of_peerings;
5103static int hf_ieee80211_mesh_form_info_conn_to_as;
5104static int hf_ieee80211_mesh_awake_window;
5105static int hf_ieee80211_mesh_mic;
5106static int hf_ieee80211_mesh_ampe_encrypted_data;
5107
5108static int hf_ieee80211_bcn_timing_rctrl;
5109static int hf_ieee80211_bcn_timing_rctrl_more;
5110static int hf_ieee80211_bcn_timing_rctrl_element_num;
5111static int hf_ieee80211_bcn_timing_rctrl_status_num;
5112static int hf_ieee80211_bcn_timing_info;
5113static int hf_ieee80211_bcn_timing_info_nsta_id;
5114static int hf_ieee80211_bcn_timing_info_nsta_tbtt;
5115static int hf_ieee80211_bcn_timing_info_nsta_bi;
5116
5117static int hf_ieee80211_gann_flags;
5118static int hf_ieee80211_gann_flags_reserved;
5119static int hf_ieee80211_gann_hop_count;
5120static int hf_ieee80211_gann_elem_ttl;
5121static int hf_ieee80211_gann_mesh_gate_addr;
5122static int hf_ieee80211_gann_seq_num;
5123static int hf_ieee80211_gann_interval;
5124
5125static int hf_ieee80211_pxu_pxu_id;
5126static int hf_ieee80211_pxu_pxu_origin_mac;
5127static int hf_ieee80211_pxu_no_proxy_info;
5128static int hf_ieee80211_pxu_proxy_info;
5129static int hf_ieee80211_pxu_proxy_info_flags;
5130static int hf_ieee80211_pxu_proxy_info_flags_delete;
5131static int hf_ieee80211_pxu_proxy_info_flags_orig_is_proxy;
5132static int hf_ieee80211_pxu_proxy_info_flags_lifetime;
5133static int hf_ieee80211_pxu_proxy_info_flags_reserved;
5134static int hf_ieee80211_pxu_proxy_info_ext_mac;
5135static int hf_ieee80211_pxu_proxy_info_seq_num;
5136static int hf_ieee80211_pxu_proxy_info_proxy_mac;
5137static int hf_ieee80211_pxu_proxy_info_lifetime;
5138
5139static int hf_ieee80211_pxuc_pxu_id;
5140static int hf_ieee80211_pxuc_pxu_recip_mac;
5141
5142static int hf_ieee80211_ff_public_action;
5143static int hf_ieee80211_ff_protected_public_action;
5144static int hf_ieee80211_ff_tod;
5145static int hf_ieee80211_ff_toa;
5146static int hf_ieee80211_ff_max_tod_err;
5147static int hf_ieee80211_ff_max_toa_err;
5148
5149/* ************************************************************************* */
5150/* Flags found in the capability field (fixed field) */
5151/* ************************************************************************* */
5152static int hf_ieee80211_ff_capture;
5153static int hf_ieee80211_ff_cf_ess;
5154static int hf_ieee80211_ff_cf_ibss;
5155static int hf_ieee80211_ff_cf_reserved1;
5156static int hf_ieee80211_ff_cf_reserved2;
5157static int hf_ieee80211_ff_cf_privacy;
5158static int hf_ieee80211_ff_cf_preamble;
5159static int hf_ieee80211_ff_cf_critical_update_flag;
5160static int hf_ieee80211_ff_cf_nontran_bss_critical_update_flag;
5161static int hf_ieee80211_ff_cf_spec_man;
5162static int hf_ieee80211_ff_cf_qos;
5163static int hf_ieee80211_ff_cf_short_slot_time;
5164static int hf_ieee80211_ff_cf_apsd;
5165static int hf_ieee80211_ff_cf_radio_measurement;
5166static int hf_ieee80211_ff_cf_epd;
5167static int hf_ieee80211_ff_cf_reserved5;
5168static int hf_ieee80211_ff_cf_reserved6;
5169
5170/* ************************************************************************* */
5171/* A-MSDU fields */
5172/* ************************************************************************* */
5173static int hf_ieee80211_amsdu_subframe;
5174static int hf_ieee80211_amsdu_length;
5175static int hf_ieee80211_amsdu_padding;
5176
5177/* ************************************************************************* */
5178/* Tagged value format fields */
5179/* ************************************************************************* */
5180static int hf_ieee80211_tagged_parameters; /* Tagged payload item */
5181static int hf_ieee80211_tag;
5182static int hf_ieee80211_tag_number;
5183static int hf_ieee80211_tag_length;
5184static int hf_ieee80211_tag_data;
5185static int hf_ieee80211_tag_oui;
5186static int hf_ieee80211_tag_oui_wfa_subtype;
5187static int hf_ieee80211_tag_oui_wfa_action_type;
5188static int hf_ieee80211_tag_ssid;
5189static int hf_ieee80211_tag_supp_rates;
5190static int hf_ieee80211_tag_fh_dwell_time;
5191static int hf_ieee80211_tag_fh_hop_set;
5192static int hf_ieee80211_tag_fh_hop_pattern;
5193static int hf_ieee80211_tag_fh_hop_index;
5194static int hf_ieee80211_tag_ds_param_channel;
5195static int hf_ieee80211_tag_cfp_count;
5196static int hf_ieee80211_tag_cfp_period;
5197static int hf_ieee80211_tag_cfp_max_duration;
5198static int hf_ieee80211_tag_cfp_dur_remaining;
5199static int hf_ieee80211_tim_dtim_count;
5200static int hf_ieee80211_tim_dtim_period;
5201static int hf_ieee80211_tim_bmapctl;
5202static int hf_ieee80211_tim_bmapctl_mcast;
5203static int hf_ieee80211_tim_bmapctl_offset;
5204static int hf_ieee80211_tim_partial_virtual_bitmap;
5205static int hf_ieee80211_tim_aid;
5206static int hf_ieee80211_tag_ibss_atim_window;
5207static int hf_ieee80211_tag_country_info_code;
5208static int hf_ieee80211_tag_country_info_env;
5209static int hf_ieee80211_tag_country_info_pad;
5210static int hf_ieee80211_tag_country_info_fnm;
5211static int hf_ieee80211_tag_country_info_fnm_fcn;
5212static int hf_ieee80211_tag_country_info_fnm_nc;
5213static int hf_ieee80211_tag_country_info_fnm_mtpl;
5214static int hf_ieee80211_tag_country_info_rrc;
5215static int hf_ieee80211_tag_country_info_rrc_oei;
5216static int hf_ieee80211_tag_country_info_rrc_oc;
5217static int hf_ieee80211_tag_country_info_rrc_cc;
5218static int hf_ieee80211_tag_fh_hopping_parameter_prime_radix;
5219static int hf_ieee80211_tag_fh_hopping_parameter_nb_channels;
5220static int hf_ieee80211_tag_fh_hopping_table_flag;
5221static int hf_ieee80211_tag_fh_hopping_table_number_of_sets;
5222static int hf_ieee80211_tag_fh_hopping_table_modulus;
5223static int hf_ieee80211_tag_fh_hopping_table_offset;
5224static int hf_ieee80211_tag_fh_hopping_random_table;
5225static int hf_ieee80211_tag_request;
5226static int hf_ieee80211_tag_extended_request_id;
5227static int hf_ieee80211_tag_extended_request_extension;
5228static int hf_ieee80211_tag_challenge_text;
5229
5230static int hf_ieee80211_oui_qos_subtype;
5231static int hf_ieee80211_oui_qos_mgmt_dialog_token;
5232static int hf_ieee80211_oui_qos_mgmt_resp_control;
5233static int hf_ieee80211_oui_qos_mgmt_rsp_ctrl_more;
5234static int hf_ieee80211_oui_qos_mgmt_rsp_ctrl_reset;
5235static int hf_ieee80211_oui_qos_mgmt_rsp_reserved;
5236static int hf_ieee80211_oui_qos_mgmt_rqst_control;
5237static int hf_ieee80211_oui_qos_mgmt_rq_ctrl_more;
5238static int hf_ieee80211_oui_qos_mgmt_rq_ctrl_reset;
5239static int hf_ieee80211_oui_qos_mgmt_rq_reserved;
5240static int hf_ieee80211_oui_qos_mgmt_count;
5241static int hf_ieee80211_dscp_policy_id;
5242static int hf_ieee80211_dscp_policy_status;
5243static int hf_ieee80211_dscp_policy_scs_sts_list;
5244
5245static int hf_ieee80211_tag_he_6ghz_cap_inf;
5246static int hf_ieee80211_tag_he_6ghz_cap_inf_b0_b2;
5247static int hf_ieee80211_tag_he_6ghz_cap_inf_b3_b5;
5248static int hf_ieee80211_tag_he_6ghz_cap_inf_b6_b7;
5249static int hf_ieee80211_tag_he_6ghz_cap_inf_b8;
5250static int hf_ieee80211_tag_he_6ghz_cap_inf_b9_b10;
5251static int hf_ieee80211_tag_he_6ghz_cap_inf_b11;
5252static int hf_ieee80211_tag_he_6ghz_cap_inf_b12;
5253static int hf_ieee80211_tag_he_6ghz_cap_inf_b13;
5254static int hf_ieee80211_tag_he_6ghz_cap_inf_b14_b15;
5255
5256static int hf_ieee80211_tag_ftm_tsf_sync_info;
5257
5258static int * const ieee80211_tag_he_6ghz_cap_inf[] = {
5259 &hf_ieee80211_tag_he_6ghz_cap_inf_b0_b2,
5260 &hf_ieee80211_tag_he_6ghz_cap_inf_b3_b5,
5261 &hf_ieee80211_tag_he_6ghz_cap_inf_b6_b7,
5262 &hf_ieee80211_tag_he_6ghz_cap_inf_b8,
5263 &hf_ieee80211_tag_he_6ghz_cap_inf_b9_b10,
5264 &hf_ieee80211_tag_he_6ghz_cap_inf_b11,
5265 &hf_ieee80211_tag_he_6ghz_cap_inf_b12,
5266 &hf_ieee80211_tag_he_6ghz_cap_inf_b13,
5267 &hf_ieee80211_tag_he_6ghz_cap_inf_b14_b15,
5268 NULL((void*)0)
5269};
5270
5271
5272static int hf_ieee80211_wep_iv;
5273static int hf_ieee80211_wep_iv_weak;
5274static int hf_ieee80211_tkip_extiv;
5275static int hf_ieee80211_ccmp_extiv;
5276static int hf_ieee80211_wep_key;
5277static int hf_ieee80211_wep_icv;
5278static int hf_ieee80211_fc_analysis_pmk;
5279static int hf_ieee80211_fc_analysis_kck;
5280static int hf_ieee80211_fc_analysis_kek;
5281static int hf_ieee80211_fc_analysis_tk;
5282static int hf_ieee80211_fc_analysis_gtk;
5283
5284static int hf_ieee80211_block_ack_control;
5285static int hf_ieee80211_block_ack_control_ack_policy;
5286static int hf_ieee80211_block_ack_control_type;
5287static int hf_ieee80211_block_ack_control_reserved;
5288static int hf_ieee80211_block_ack_control_tid_info;
5289
5290static int hf_ieee80211_block_ack_multi_tid_reserved;
5291static int hf_ieee80211_block_ack_multi_tid_value;
5292static int hf_ieee80211_block_ack_bitmap;
5293static int hf_ieee80211_block_ack_bitmap_missing_frame;
5294static int hf_ieee80211_block_ack_bitmap_last_ack_frame;
5295static int hf_ieee80211_block_ack_gcr_addr;
5296
5297static int hf_ieee80211_block_ack_multi_sta_aid11;
5298static int hf_ieee80211_block_ack_multi_sta_ack_type;
5299static int hf_ieee80211_block_ack_multi_sta_tid;
5300static int hf_ieee80211_block_ack_multi_sta_aid_tid;
5301static int hf_ieee80211_block_ack_multi_sta_reserved;
5302static int hf_ieee80211_block_ack_multi_sta_ra;
5303
5304static int hf_ieee80211_tag_measure_request_measurement_mode;
5305static int hf_ieee80211_tag_measure_request_bssid;
5306
5307static int hf_ieee80211_tag_measure_request_subelement_length;
5308static int hf_ieee80211_tag_measure_request_beacon_sub_id;
5309static int hf_ieee80211_tag_measure_request_beacon_sub_ssid;
5310static int hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition;
5311static int hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset;
5312static int hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail;
5313static int hf_ieee80211_tag_measure_request_beacon_sub_last_report_indication_request;
5314static int hf_ieee80211_tag_measure_request_beacon_unknown;
5315
5316static int hf_ieee80211_tag_measure_request_channel_load_sub_id;
5317static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition;
5318static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref;
5319
5320static int hf_ieee80211_tag_measure_request_noise_histogram_sub_id;
5321static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition;
5322static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref;
5323
5324static int hf_ieee80211_tag_measure_request_frame_request_type;
5325static int hf_ieee80211_tag_measure_request_mac_address;
5326static int hf_ieee80211_tag_measure_request_peer_mac_address;
5327static int hf_ieee80211_tag_measure_request_group_id;
5328
5329static int hf_ieee80211_tag_measure_request_location_subject;
5330static int hf_ieee80211_tag_measure_request_civic_location_type;
5331static int hf_ieee80211_tag_measure_request_location_service_interval_units;
5332static int hf_ieee80211_tag_measure_request_location_service_interval;
5333
5334static int hf_ieee80211_tag_measure_request_unknown;
5335
5336static int hf_ieee80211_ht_pren_type;
5337static int hf_ieee80211_ht_pren_unknown;
5338
5339static int hf_ieee80211_ht_cap;
5340static int hf_ieee80211_ht_vs_cap;
5341static int hf_ieee80211_ht_ldpc_coding;
5342static int hf_ieee80211_ht_chan_width;
5343static int hf_ieee80211_ht_sm_pwsave;
5344static int hf_ieee80211_ht_green;
5345static int hf_ieee80211_ht_short20;
5346static int hf_ieee80211_ht_short40;
5347static int hf_ieee80211_ht_tx_stbc;
5348static int hf_ieee80211_ht_rx_stbc;
5349static int hf_ieee80211_ht_reserved_b10;
5350static int hf_ieee80211_ht_max_amsdu;
5351static int hf_ieee80211_ht_dss_cck_40;
5352static int hf_ieee80211_ht_reserved_b13;
5353static int hf_ieee80211_ht_40_mhz_intolerant;
5354static int hf_ieee80211_ht_reserved_b15;
5355
5356static int hf_ieee80211_ext_bss_mu_mimo_capable_sta_count;
5357static int hf_ieee80211_ext_bss_ss_underutilization;
5358static int hf_ieee80211_ext_bss_observable_sec_20mhz_utilization;
5359static int hf_ieee80211_ext_bss_observable_sec_40mhz_utilization;
5360static int hf_ieee80211_ext_bss_observable_sec_80mhz_utilization;
5361static int hf_ieee80211_wide_bw_new_channel_width;
5362static int hf_ieee80211_wide_bw_new_channel_center_freq_segment0;
5363static int hf_ieee80211_wide_bw_new_channel_center_freq_segment1;
5364
5365static int hf_ieee80211_operat_notification_mode;
5366static int hf_ieee80211_operat_mode_field_channel_width;
5367static int hf_ieee80211_operat_mode_field_160_80plus80_bw;
5368static int hf_ieee80211_operat_mode_field_no_ldpc;
5369static int hf_ieee80211_operat_mode_field_rxnss;
5370static int hf_ieee80211_operat_mode_field_rxnsstype;
5371
5372static int hf_ieee80211_tbtt_info;
5373static int hf_ieee80211_tbtt_filtered_nap;
5374static int hf_ieee80211_tbtt_info_count;
5375static int hf_ieee80211_tbtt_info_length;
5376
5377static int hf_ieee80211_tbtt_operating_class;
5378static int hf_ieee80211_tbtt_channel_number;
5379
5380static int hf_ieee80211_tbtt_offset;
5381static int hf_ieee80211_tbtt_bssid;
5382static int hf_ieee80211_tbtt_short_ssid;
5383static int hf_ieee80211_rnr_bss_params;
5384static int hf_ieee80211_rnr_oct_recommended;
5385static int hf_ieee80211_rnr_same_ssid;
5386static int hf_ieee80211_rnr_multiple_bssid;
5387static int hf_ieee80211_rnr_transmitted_bssid;
5388static int hf_ieee80211_rnr_ess_with_colocated_ap;
5389static int hf_ieee80211_rnr_unsolicited_probe_responses;
5390static int hf_ieee80211_rnr_same_colocated_ap;
5391static int hf_ieee80211_rnr_same_reserved;
5392static int hf_ieee80211_rnr_20mhz_psd_subfield;
5393static int hf_ieee80211_rnr_reserved_data;
5394static int hf_ieee80211_rnr_mld_params;
5395static int hf_ieee80211_rnr_mld_id;
5396static int hf_ieee80211_rnr_mld_link_id;
5397static int hf_ieee80211_rnr_mld_bss_params_change_count;
5398static int hf_ieee80211_rnr_mld_all_updates_included;
5399static int hf_ieee80211_rnr_mld_disabled_link_indication;
5400static int hf_ieee80211_rnr_mld_reserved;
5401
5402static int hf_ieee80211_ampduparam;
5403static int hf_ieee80211_ampduparam_vs;
5404static int hf_ieee80211_ampduparam_mpdu;
5405static int hf_ieee80211_ampduparam_mpdu_start_spacing;
5406static int hf_ieee80211_ampduparam_reserved;
5407
5408static int hf_ieee80211_beacon_sequence;
5409static int hf_ieee80211_pentapartial_timestamp;
5410static int hf_ieee80211_tack_next_twt_info;
5411static int hf_ieee80211_tack_next_twt;
5412static int hf_ieee80211_tack_flow_identifier;
5413
5414static int hf_ieee80211_ff_s1g_action;
5415static int hf_ieee80211_ff_prot_s1g_action;
5416static int hf_ieee80211_ff_s1g_timestamp;
5417static int hf_ieee80211_ff_s1g_change_sequence;
5418static int hf_ieee80211_ff_s1g_next_tbtt;
5419static int hf_ieee80211_ff_s1g_compressed_ssid;
5420static int hf_ieee80211_ff_s1g_access_network_options;
5421
5422static int hf_ieee80211_s1g_sync_control;
5423static int hf_ieee80211_s1g_sync_control_uplink_sync_request;
5424static int hf_ieee80211_s1g_sync_control_time_slot_protection_request;
5425static int hf_ieee80211_s1g_sync_control_reserved;
5426
5427static int hf_ieee80211_s1g_sector_id_index;
5428static int hf_ieee80211_s1g_sector_id_preferred_sector_id;
5429static int hf_ieee80211_s1g_sector_id_snr;
5430static int hf_ieee80211_s1g_sector_id_receive_sector_bitmap;
5431
5432static int hf_ieee80211_s1g_twt_information_control;
5433static int hf_ieee80211_s1g_twt_flow_identifier;
5434static int hf_ieee80211_s1g_twt_response_required;
5435static int hf_ieee80211_s1g_twt_next_twt_request;
5436static int hf_ieee80211_s1g_twt_next_twt_subfield_size;
5437static int hf_ieee80211_s1g_twt_reserved;
5438static int hf_ieee80211_s1g_twt_next_twt_32;
5439static int hf_ieee80211_s1g_twt_next_twt_48;
5440static int hf_ieee80211_s1g_twt_next_twt_64;
5441
5442static int hf_ieee80211_s1g_update_edca_info;
5443static int hf_ieee80211_s1g_update_edca_override;
5444static int hf_ieee80211_s1g_update_edca_ps_poll_aci;
5445static int hf_ieee80211_s1g_update_edca_raw_aci;
5446static int hf_ieee80211_s1g_update_edca_sta_type;
5447static int hf_ieee80211_s1g_update_edca_reserved;
5448
5449static int hf_ieee80211_s1g_cap_byte1;
5450static int hf_ieee80211_s1g_cap_byte2;
5451static int hf_ieee80211_s1g_cap_byte3;
5452static int hf_ieee80211_s1g_cap_byte4;
5453static int hf_ieee80211_s1g_cap_byte5;
5454static int hf_ieee80211_s1g_cap_byte6;
5455static int hf_ieee80211_s1g_cap_byte7;
5456static int hf_ieee80211_s1g_cap_byte8;
5457static int hf_ieee80211_s1g_cap_byte9;
5458static int hf_ieee80211_s1g_cap_byte10;
5459static int hf_ieee80211_s1g_cap_s1g_long_support;
5460static int hf_ieee80211_s1g_cap_short_gi_for_1_mhz;
5461static int hf_ieee80211_s1g_cap_short_gi_for_2_mhz;
5462static int hf_ieee80211_s1g_cap_short_gi_for_4_mhz;
5463static int hf_ieee80211_s1g_cap_short_gi_for_8_mhz;
5464static int hf_ieee80211_s1g_cap_short_gi_for_16_mhz;
5465static int hf_ieee80211_s1g_cap_supported_channel_width;
5466static int hf_ieee80211_s1g_cap_rx_ldpc;
5467static int hf_ieee80211_s1g_cap_tx_stbc;
5468static int hf_ieee80211_s1g_cap_rx_stbc;
5469static int hf_ieee80211_s1g_cap_su_beamformer_capable;
5470static int hf_ieee80211_s1g_cap_su_beamformee_capable;
5471static int hf_ieee80211_s1g_cap_beamformee_sts_capability;
5472static int hf_ieee80211_s1g_cap_number_sounding_dimensions;
5473static int hf_ieee80211_s1g_cap_mu_beamformer_capable;
5474static int hf_ieee80211_s1g_cap_mu_beamformee_capable;
5475static int hf_ieee80211_s1g_cap_htc_vht_capable;
5476static int hf_ieee80211_s1g_cap_travelling_pilot_support;
5477static int hf_ieee80211_s1g_cap_rd_responder;
5478static int hf_ieee80211_s1g_cap_ht_delayed_block_ack;
5479static int hf_ieee80211_s1g_cap_maximum_mpdu_length;
5480static int hf_ieee80211_s1g_cap_maximum_a_mpdu_length_exp;
5481static int hf_ieee80211_s1g_cap_minimum_mpdu_start_spacing;
5482static int hf_ieee80211_s1g_cap_uplink_sync_capable;
5483static int hf_ieee80211_s1g_cap_dynamic_aid;
5484static int hf_ieee80211_s1g_cap_bat_support;
5485static int hf_ieee80211_s1g_cap_tim_ade_support;
5486static int hf_ieee80211_s1g_cap_non_tim_support;
5487static int hf_ieee80211_s1g_cap_group_aid_support;
5488static int hf_ieee80211_s1g_cap_sta_type_support;
5489static int hf_ieee80211_s1g_cap_centralized_authentication_control;
5490static int hf_ieee80211_s1g_cap_distributed_authentication_control;
5491static int hf_ieee80211_s1g_cap_a_msdu_support;
5492static int hf_ieee80211_s1g_cap_a_mpdu_support;
5493static int hf_ieee80211_s1g_cap_asymmetic_block_ack_support;
5494static int hf_ieee80211_s1g_cap_flow_control_support;
5495static int hf_ieee80211_s1g_cap_sectorized_beam_capable;
5496static int hf_ieee80211_s1g_cap_obss_mitigation_support;
5497static int hf_ieee80211_s1g_cap_fragment_ba_support;
5498static int hf_ieee80211_s1g_cap_ndp_ps_poll_supported;
5499static int hf_ieee80211_s1g_cap_raw_operation_support;
5500static int hf_ieee80211_s1g_cap_page_slicing_support;
5501static int hf_ieee80211_s1g_cap_txop_sharing_implicit_ack_support;
5502static int hf_ieee80211_s1g_cap_vht_link_adaptation_capable;
5503static int hf_ieee80211_s1g_cap_tack_support_as_ps_poll_response;
5504static int hf_ieee80211_s1g_cap_duplicate_1_mhz_support;
5505static int hf_ieee80211_s1g_cap_mcs_negotiation_support;
5506static int hf_ieee80211_s1g_cap_1_mhz_control_response_preamble_support;
5507static int hf_ieee80211_s1g_cap_ndp_beamforming_report_poll_support;
5508static int hf_ieee80211_s1g_cap_unsolicited_dynamic_aid;
5509static int hf_ieee80211_s1g_cap_sector_training_operation_supported;
5510static int hf_ieee80211_s1g_cap_temporary_ps_mode_switch;
5511static int hf_ieee80211_s1g_cap_twt_grouping_support;
5512static int hf_ieee80211_s1g_cap_bdt_capable;
5513static int hf_ieee80211_s1g_cap_color;
5514static int hf_ieee80211_s1g_cap_twt_requester_support;
5515static int hf_ieee80211_s1g_cap_twt_responder_support;
5516static int hf_ieee80211_s1g_cap_pv1_frame_support;
5517static int hf_ieee80211_s1g_cap_link_adaptation_per_normal_control_response_capable;
5518static int hf_ieee80211_s1g_cap_reserved;
5519static int hf_ieee80211_s1g_mcs_and_nss_set;
5520static int hf_ieee80211_s1g_rx_s1g_mcs_map;
5521static int hf_ieee80211_s1g_rx_highest_supported_long_gi_data_rate;
5522static int hf_ieee80211_s1g_tx_s1g_mcs_map;
5523static int hf_ieee80211_s1g_tx_highest_supported_long_gi_data_rate;
5524static int hf_ieee80211_s1g_rx_single_spatial_stream_map_for_1_mhz;
5525static int hf_ieee80211_s1g_tx_single_spatial_stream_map_for_1_mhz;
5526static int hf_ieee80211_s1g_mcs_and_nss_reserved;
5527static int hf_ieee80211_s1g_subchannel_selective_transmission;
5528static int hf_ieee80211_s1g_sst_sounding_option;
5529static int hf_ieee80211_s1g_channel_activity_bitmap;
5530static int hf_ieee80211_s1g_ul_activity;
5531static int hf_ieee80211_s1g_dl_activity;
5532static int hf_ieee80211_s1g_max_trans_width;
5533static int hf_ieee80211_s1g_activity_start_time;
5534static int hf_ieee80211_s1g_sst_sounding_option1;
5535static int hf_ieee80211_s1g_channel_activity_bitmap1;
5536static int hf_ieee80211_s1g_sounding_start_time_present;
5537static int hf_ieee80211_s1g_channel_activity_reserved;
5538static int hf_ieee80211_s1g_max_trans_width1;
5539static int hf_ieee80211_s1g_sounding_start_time;
5540static int hf_ieee80211_s1g_open_loop_link_margin;
5541static int hf_ieee80211_s1g_raw_control;
5542static int hf_ieee80211_s1g_raw_type;
5543static int hf_ieee80211_s1g_raw_type_options;
5544static int hf_ieee80211_s1g_raw_start_time_indication;
5545static int hf_ieee80211_s1g_raw_raw_group_indication;
5546static int hf_ieee80211_s1g_raw_channel_indication_preference;
5547static int hf_ieee80211_s1g_raw_periodic_raw_indication;
5548static int hf_ieee80211_s1g_raw_slot_def;
5549static int hf_ieee80211_s1g_slot_def_format_indication;
5550static int hf_ieee80211_s1g_slot_def_cross_slot_boundary;
5551static int hf_ieee80211_s1g_slot_def_slot_duration_count8;
5552static int hf_ieee80211_s1g_slot_def_num_slots6;
5553static int hf_ieee80211_s1g_slot_def_slot_duration_count11;
5554static int hf_ieee80211_s1g_slot_def_num_slots3;
5555static int hf_ieee80211_s1g_raw_start_time;
5556static int hf_ieee80211_s1g_raw_group_subfield;
5557static int hf_ieee80211_s1g_raw_group_page_index;
5558static int hf_ieee80211_s1g_raw_group_start_aid;
5559static int hf_ieee80211_s1g_raw_group_end_aid;
5560static int hf_ieee80211_s1g_raw_channel_indication;
5561static int hf_ieee80211_s1g_raw_ci_channel_activity_bitmap;
5562static int hf_ieee80211_s1g_raw_ci_max_trans_width;
5563static int hf_ieee80211_s1g_raw_ci_ul_activity;
5564static int hf_ieee80211_s1g_raw_ci_dl_activity;
5565static int hf_ieee80211_s1g_raw_ci_reserved;
5566static int hf_ieee80211_s1g_raw_praw_periodicity;
5567static int hf_ieee80211_s1g_raw_praw_validity;
5568static int hf_ieee80211_s1g_raw_praw_start_offset;
5569static int hf_ieee80211_s1g_page_slice_page_period;
5570static int hf_ieee80211_s1g_page_slice_control;
5571static int hf_ieee80211_s1g_page_slice_page_index;
5572static int hf_ieee80211_s1g_page_slice_page_slice_length;
5573static int hf_ieee80211_s1g_page_slice_page_slice_count;
5574static int hf_ieee80211_s1g_page_slice_block_offset;
5575static int hf_ieee80211_s1g_page_slice_tim_offset;
5576static int hf_ieee80211_s1g_page_slice_reserved;
5577static int hf_ieee80211_s1g_page_slice_page_bitmap;
5578static int hf_ieee80211_s1g_aid_request_mode;
5579static int hf_ieee80211_s1g_aid_request_interval_present;
5580static int hf_ieee80211_s1g_aid_request_per_sta_address_present;
5581static int hf_ieee80211_s1g_aid_request_service_characteristic_present;
5582static int hf_ieee80211_s1g_aid_request_non_tim_mode_switch;
5583static int hf_ieee80211_s1g_aid_request_tim_mode_switch;
5584static int hf_ieee80211_s1g_aid_request_group_address_present;
5585static int hf_ieee80211_s1g_aid_request_reserved;
5586static int hf_ieee80211_s1g_aid_request_interval;
5587static int hf_ieee80211_s1g_aid_request_characteristic_sensor;
5588static int hf_ieee80211_s1g_aid_request_characteristic_offload;
5589static int hf_ieee80211_s1g_aid_request_characteristic_official_service;
5590static int hf_ieee80211_s1g_aid_request_characteristic_reserved;
5591static int hf_ieee80211_s1g_aid_req_peer_sta_addr;
5592static int hf_ieee80211_s1g_aid_request_characteristic;
5593static int hf_ieee80211_s1g_aid_req_group_addr;
5594static int hf_ieee80211_s1g_aid_rsp_aid_group_aid;
5595static int hf_ieee80211_s1g_aid_rsp_aid_switch_count;
5596static int hf_ieee80211_s1g_aid_rsp_aid_response_interval;
5597static int hf_ieee80211_s1g_sector_op_control_16b;
5598static int hf_ieee80211_s1g_sector_op_sectorization_type_b16;
5599static int hf_ieee80211_s1g_sector_op_periodic_training_indicator;
5600static int hf_ieee80211_s1g_sector_op_training_period;
5601static int hf_ieee80211_s1g_sector_op_remaining_beacon_interval;
5602static int hf_ieee80211_s1g_sector_op_reserved_b16;
5603static int hf_ieee80211_s1g_sector_op_control;
5604static int hf_ieee80211_s1g_sector_op_sectorization_type;
5605static int hf_ieee80211_s1g_sector_op_period;
5606static int hf_ieee80211_s1g_sector_op_omni;
5607static int hf_ieee80211_s1g_sector_op_group_info;
5608static int hf_ieee80211_s1g_short_beacon_interval;
5609static int hf_ieee80211_s1g_change_sequence;
5610static int hf_ieee80211_s1g_auth_control_control;
5611static int hf_ieee80211_s1g_auth_control_deferral;
5612static int hf_ieee80211_s1g_auth_control_reserved;
5613static int hf_ieee80211_s1g_auth_control_thresh;
5614static int hf_ieee80211_s1g_auth_control_thresh_tus;
5615static int hf_ieee80211_s1g_auth_slot_duration;
5616static int hf_ieee80211_s1g_auth_max_trans_int;
5617static int hf_ieee80211_s1g_auth_min_trans_int;
5618static int hf_ieee80211_s1g_tsf_timer_accuracy;
5619static int hf_ieee80211_s1g_relay_control;
5620static int hf_ieee80211_s1g_relay_control_rootap_bssid;
5621static int hf_ieee80211_s1g_relay_function_activation_mode;
5622static int hf_ieee80211_s1g_relay_function_direction;
5623static int hf_ieee80211_s1g_relay_function_enable_relay_function;
5624static int hf_ieee80211_s1g_relay_function_stas_present_indic;
5625static int hf_ieee80211_s1g_relay_function_reserved;
5626static int hf_ieee80211_s1g_number_of_stas;
5627static int hf_ieee80211_s1g_initiator_mac_address;
5628static int hf_ieee80211_s1g_address_count;
5629static int hf_ieee80211_s1g_reachable_add_remove;
5630static int hf_ieee80211_s1g_reachable_relay_capable;
5631static int hf_ieee80211_s1g_reachable_reserved;
5632static int hf_ieee80211_s1g_reachable_mac_address;
5633static int hf_ieee80211_s1g_relay_discovery_control;
5634static int hf_ieee80211_s1g_min_data_rate_included;
5635static int hf_ieee80211_s1g_mean_data_rate_included;
5636static int hf_ieee80211_s1g_max_data_rate_included;
5637static int hf_ieee80211_s1g_delay_and_min_phy_rate;
5638static int hf_ieee80211_s1g_information_not_available;
5639static int hf_ieee80211_s1g_relay_discovery_reserved;
5640static int hf_ieee80211_s1g_relay_control_ul_min;
5641static int hf_ieee80211_s1g_relay_control_ul_mean;
5642static int hf_ieee80211_s1g_relay_control_ul_max;
5643static int hf_ieee80211_s1g_relay_control_dl_min;
5644static int hf_ieee80211_s1g_relay_control_dl_mean;
5645static int hf_ieee80211_s1g_relay_control_dl_max;
5646static int hf_ieee80211_s1g_relay_hierarchy_identifier;
5647static int hf_ieee80211_s1g_relay_no_more_relay_flag;
5648static int hf_ieee80211_s1g_aid_entry_mac_addr;
5649static int hf_ieee80211_s1g_aid_entry_assoc_id;
5650static int hf_ieee80211_s1g_beacon_compatibility_info;
5651static int hf_ieee80211_s1g_beacon_interval;
5652static int hf_ieee80211_s1g_tsf_completion;
5653static int hf_ieee80211_s1g_channel_width;
5654static int hf_ieee80211_s1g_primary_channel_width;
5655static int hf_ieee80211_s1g_bss_operating_channel_width;
5656static int hf_ieee80211_s1g_primary_channel_location;
5657static int hf_ieee80211_s1g_reserved_b6;
5658static int hf_ieee80211_s1g_mcs10_use;
5659static int hf_ieee80211_s1g_operating_class;
5660static int hf_ieee80211_s1g_primary_channel_number;
5661static int hf_ieee80211_s1g_channel_center_frequency;
5662static int hf_ieee80211_s1g_basic_mcs_and_nss_set;
5663static int hf_ieee80211_s1g_sst_enabled_channel_bitmap;
5664static int hf_ieee80211_s1g_sst_primary_channel_offset;
5665static int hf_ieee80211_s1g_sst_channel_unit;
5666static int hf_ieee80211_s1g_sst_reserved;
5667static int hf_ieee80211_s1g_max_away_duration;
5668static int hf_ieee80211_s1g_tim_bmapctrl;
5669static int hf_ieee80211_s1g_tim_bmapctl_traffic_indicator;
5670static int hf_ieee80211_s1g_tim_page_slice_number;
5671static int hf_ieee80211_s1g_tim_page_index;
5672static int hf_ieee80211_s1g_pvb_block_control_byte;
5673static int hf_ieee80211_s1g_pvb_encoding_mode;
5674static int hf_ieee80211_s1g_pvb_inverse_bitmap;
5675static int hf_ieee80211_s1g_pvb_block_offset;
5676static int hf_ieee80211_s1g_block_bitmap;
5677static int hf_ieee80211_s1g_block_bitmap_sta_aid13;
5678static int hf_ieee80211_s1g_block_bitmap_single_aid;
5679static int hf_ieee80211_s1g_block_bitmap_olb_length;
5680static int hf_ieee80211_s1g_block_bitmap_ade;
5681static int hf_ieee80211_s1g_block_bitmap_ewl;
5682static int hf_ieee80211_s1g_block_bitmap_len;
5683static int hf_ieee80211_s1g_block_bitmap_ade_bytes;
5684static int hf_ieee80211_s1g_probe_response_group_bitmap;
5685static int hf_ieee80211_s1g_probe_resp_subfield_0;
5686static int hf_ieee80211_pv1_probe_response_req_full_ssid;
5687static int hf_ieee80211_pv1_probe_response_req_next_tbtt;
5688static int hf_ieee80211_pv1_probe_response_req_access_network_option;
5689static int hf_ieee80211_pv1_probe_response_req_s1g_beacon_compatibility;
5690static int hf_ieee80211_pv1_probe_response_req_supported_rates;
5691static int hf_ieee80211_pv1_probe_response_req_s1g_capability;
5692static int hf_ieee80211_pv1_probe_response_req_s1g_operation;
5693static int hf_ieee80211_pv1_probe_response_req_rsn;
5694static int hf_ieee80211_s1g_el_op_max_awake_duration;
5695static int hf_ieee80211_s1g_el_op_recovery_time_duration;
5696static int hf_ieee80211_s1g_sectorized_group_id_list;
5697static int hf_ieee80211_s1g_header_comp_control;
5698static int hf_ieee80211_s1g_header_comp_req_resp;
5699static int hf_ieee80211_s1g_header_comp_store_a3;
5700static int hf_ieee80211_s1g_header_comp_store_a4;
5701static int hf_ieee80211_s1g_header_comp_ccmp_update_present;
5702static int hf_ieee80211_s1g_header_comp_pv1_data_type_3_supported;
5703static int hf_ieee80211_s1g_header_comp_reserved;
5704static int hf_ieee80211_s1g_header_comp_a3;
5705static int hf_ieee80211_s1g_header_comp_a4;
5706static int hf_ieee80211_s1g_header_comp_ccmp_update;
5707
5708static int hf_ieee80211_mcsset;
5709static int hf_ieee80211_mcsset_vs;
5710static int hf_ieee80211_mcsset_rx_bitmask;
5711static int hf_ieee80211_mcsset_rx_bitmask_0to7;
5712static int hf_ieee80211_mcsset_rx_bitmask_8to15;
5713static int hf_ieee80211_mcsset_rx_bitmask_16to23;
5714static int hf_ieee80211_mcsset_rx_bitmask_24to31;
5715static int hf_ieee80211_mcsset_rx_bitmask_32;
5716static int hf_ieee80211_mcsset_rx_bitmask_33to38;
5717static int hf_ieee80211_mcsset_rx_bitmask_39to52;
5718static int hf_ieee80211_mcsset_rx_bitmask_53to76;
5719static int hf_ieee80211_mcsset_highest_data_rate;
5720static int hf_ieee80211_mcsset_tx_mcs_set_defined;
5721static int hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal;
5722static int hf_ieee80211_mcsset_tx_max_spatial_streams;
5723static int hf_ieee80211_mcsset_tx_unequal_modulation;
5724
5725static int hf_ieee80211_htex_cap;
5726static int hf_ieee80211_htex_vs_cap;
5727static int hf_ieee80211_htex_reserved_b0_b7;
5728static int hf_ieee80211_htex_mcs;
5729static int hf_ieee80211_htex_htc_support;
5730static int hf_ieee80211_htex_rd_responder;
5731static int hf_ieee80211_htex_reserved_b12_b15;
5732
5733static int hf_ieee80211_txbf;
5734static int hf_ieee80211_txbf_vs;
5735static int hf_ieee80211_txbf_cap;
5736static int hf_ieee80211_txbf_rcv_ssc;
5737static int hf_ieee80211_txbf_tx_ssc;
5738static int hf_ieee80211_txbf_rcv_ndp;
5739static int hf_ieee80211_txbf_tx_ndp;
5740static int hf_ieee80211_txbf_impl_txbf;
5741static int hf_ieee80211_txbf_calib;
5742static int hf_ieee80211_txbf_expl_csi;
5743static int hf_ieee80211_txbf_expl_uncomp_fm;
5744static int hf_ieee80211_txbf_expl_comp_fm;
5745static int hf_ieee80211_txbf_expl_bf_csi;
5746static int hf_ieee80211_txbf_expl_uncomp_fm_feed;
5747static int hf_ieee80211_txbf_expl_comp_fm_feed;
5748static int hf_ieee80211_txbf_csi_num_bf_ant;
5749static int hf_ieee80211_txbf_min_group;
5750static int hf_ieee80211_txbf_uncomp_sm_bf_ant;
5751static int hf_ieee80211_txbf_comp_sm_bf_ant;
5752static int hf_ieee80211_txbf_csi_max_rows_bf;
5753static int hf_ieee80211_txbf_chan_est;
5754static int hf_ieee80211_txbf_resrv;
5755
5756/*** Begin: 802.11n - HT Operation IE ***/
5757static int hf_ieee80211_ht_operation_primary_channel;
5758
5759static int hf_ieee80211_ht_operation_info_delimiter1;
5760static int hf_ieee80211_ht_operation_info_secondary_channel_offset;
5761static int hf_ieee80211_ht_operation_info_sta_channel_width;
5762static int hf_ieee80211_ht_operation_info_rifs_mode;
5763static int hf_ieee80211_ht_operation_info_reserved_b4_b7;
5764
5765static int hf_ieee80211_ht_operation_info_delimiter2;
5766static int hf_ieee80211_ht_operation_info_protection;
5767static int hf_ieee80211_ht_operation_info_non_greenfield_sta_present;
5768static int hf_ieee80211_ht_operation_info_reserved_b11;
5769static int hf_ieee80211_ht_operation_info_obss_non_ht_stas_present;
5770static int hf_ieee80211_ht_operation_info_channel_center_freq_seg_2;
5771static int hf_ieee80211_ht_operation_info_reserved_b21_b23;
5772
5773static int hf_ieee80211_ht_operation_info_delimiter3;
5774static int hf_ieee80211_ht_operation_info_reserved_b24_b29;
5775static int hf_ieee80211_ht_operation_info_dual_beacon;
5776static int hf_ieee80211_ht_operation_info_dual_cts_protection;
5777static int hf_ieee80211_ht_operation_info_stbc_beacon;
5778static int hf_ieee80211_ht_operation_info_reserved_b33_b39;
5779
5780static int hf_ieee80211_ht_operation_mcsset_reserved;
5781/*** End: 802.11n - HT Operation IE ***/
5782
5783static int hf_ieee80211_tag_ap_channel_report_operating_class;
5784static int hf_ieee80211_tag_ap_channel_report_channel_list;
5785
5786static int hf_ieee80211_tag_secondary_channel_offset;
5787
5788static int hf_ieee80211_tag_bss_ap_avg_access_delay;
5789
5790static int hf_ieee80211_tag_antenna_id;
5791
5792static int hf_ieee80211_tag_rsni;
5793
5794static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask;
5795static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0;
5796static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1;
5797static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2;
5798static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3;
5799static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4;
5800static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5;
5801static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6;
5802static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7;
5803static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0;
5804static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1;
5805static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2;
5806static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3;
5807static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv;
5808static int hf_ieee80211_tag_bss_avb_adm_cap_up0;
5809static int hf_ieee80211_tag_bss_avb_adm_cap_up1;
5810static int hf_ieee80211_tag_bss_avb_adm_cap_up2;
5811static int hf_ieee80211_tag_bss_avb_adm_cap_up3;
5812static int hf_ieee80211_tag_bss_avb_adm_cap_up4;
5813static int hf_ieee80211_tag_bss_avb_adm_cap_up5;
5814static int hf_ieee80211_tag_bss_avb_adm_cap_up6;
5815static int hf_ieee80211_tag_bss_avb_adm_cap_up7;
5816static int hf_ieee80211_tag_bss_avb_adm_cap_ac0;
5817static int hf_ieee80211_tag_bss_avb_adm_cap_ac1;
5818static int hf_ieee80211_tag_bss_avb_adm_cap_ac2;
5819static int hf_ieee80211_tag_bss_avb_adm_cap_ac3;
5820
5821static int hf_ieee80211_tag_bss_avg_ac_access_delay_be;
5822static int hf_ieee80211_tag_bss_avg_ac_access_delay_bk;
5823static int hf_ieee80211_tag_bss_avg_ac_access_delay_vi;
5824static int hf_ieee80211_tag_bss_avg_ac_access_delay_vo;
5825
5826static int hf_ieee80211_tag_rm_enabled_capabilities;
5827static int hf_ieee80211_tag_rm_enabled_capabilities_b0;
5828static int hf_ieee80211_tag_rm_enabled_capabilities_b1;
5829static int hf_ieee80211_tag_rm_enabled_capabilities_b2;
5830static int hf_ieee80211_tag_rm_enabled_capabilities_b3;
5831static int hf_ieee80211_tag_rm_enabled_capabilities_b4;
5832static int hf_ieee80211_tag_rm_enabled_capabilities_b5;
5833static int hf_ieee80211_tag_rm_enabled_capabilities_b6;
5834static int hf_ieee80211_tag_rm_enabled_capabilities_b7;
5835static int hf_ieee80211_tag_rm_enabled_capabilities_b8;
5836static int hf_ieee80211_tag_rm_enabled_capabilities_b9;
5837static int hf_ieee80211_tag_rm_enabled_capabilities_b10;
5838static int hf_ieee80211_tag_rm_enabled_capabilities_b11;
5839static int hf_ieee80211_tag_rm_enabled_capabilities_b12;
5840static int hf_ieee80211_tag_rm_enabled_capabilities_b13;
5841static int hf_ieee80211_tag_rm_enabled_capabilities_b14;
5842static int hf_ieee80211_tag_rm_enabled_capabilities_b15;
5843static int hf_ieee80211_tag_rm_enabled_capabilities_b16;
5844static int hf_ieee80211_tag_rm_enabled_capabilities_b17;
5845static int hf_ieee80211_tag_rm_enabled_capabilities_b18to20;
5846static int hf_ieee80211_tag_rm_enabled_capabilities_b21to23;
5847static int hf_ieee80211_tag_rm_enabled_capabilities_b24to26;
5848static int hf_ieee80211_tag_rm_enabled_capabilities_b27;
5849static int hf_ieee80211_tag_rm_enabled_capabilities_b28;
5850static int hf_ieee80211_tag_rm_enabled_capabilities_b29;
5851static int hf_ieee80211_tag_rm_enabled_capabilities_b30;
5852static int hf_ieee80211_tag_rm_enabled_capabilities_b31;
5853static int hf_ieee80211_tag_rm_enabled_capabilities_b32;
5854static int hf_ieee80211_tag_rm_enabled_capabilities_b33;
5855static int hf_ieee80211_tag_rm_enabled_capabilities_b34;
5856static int hf_ieee80211_tag_rm_enabled_capabilities_b35;
5857static int hf_ieee80211_tag_rm_enabled_capabilities_o5;
5858
5859static int hf_ieee80211_tag_rcpi;
5860static int hf_ieee80211_tag_multiple_bssid;
5861static int hf_ieee80211_tag_multiple_bssid_subelem_id;
5862static int hf_ieee80211_tag_multiple_bssid_subelem_len;
5863static int hf_ieee80211_tag_multiple_bssid_subelem_reserved;
5864static int hf_ieee80211_tag_multiple_bssid_subelem_nontrans_profile;
5865
5866static int hf_ieee80211_tag_20_40_bc;
5867static int hf_ieee80211_tag_20_40_bc_information_request;
5868static int hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant;
5869static int hf_ieee80211_tag_20_40_bc_20_mhz_bss_width_request;
5870static int hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request;
5871static int hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant;
5872static int hf_ieee80211_tag_20_40_bc_reserved;
5873
5874static int hf_ieee80211_tag_intolerant_operating_class;
5875static int hf_ieee80211_tag_intolerant_channel_list;
5876static int hf_ieee80211_tag_intolerant_channel;
5877
5878static int hf_ieee80211_tag_power_constraint_local;
5879
5880static int hf_ieee80211_tag_power_capability_min;
5881static int hf_ieee80211_tag_power_capability_max;
5882
5883static int hf_ieee80211_tag_tpc_report_trsmt_pow;
5884static int hf_ieee80211_tag_tpc_report_link_mrg;
5885static int hf_ieee80211_tag_tpc_report_reserved;
5886
5887static int hf_ieee80211_tag_supported_channels;
5888static int hf_ieee80211_tag_supported_channels_first;
5889static int hf_ieee80211_tag_supported_channels_range;
5890
5891static int hf_ieee80211_csa_channel_switch_mode;
5892static int hf_ieee80211_csa_new_channel_number;
5893static int hf_ieee80211_csa_channel_switch_count;
5894
5895static int hf_ieee80211_tag_measure_request_token;
5896static int hf_ieee80211_tag_measure_request_mode;
5897static int hf_ieee80211_tag_measure_request_mode_parallel;
5898static int hf_ieee80211_tag_measure_request_mode_enable;
5899static int hf_ieee80211_tag_measure_request_mode_request;
5900static int hf_ieee80211_tag_measure_request_mode_report;
5901static int hf_ieee80211_tag_measure_request_mode_duration_mandatory;
5902static int hf_ieee80211_tag_measure_request_mode_reserved;
5903static int hf_ieee80211_tag_measure_request_type;
5904
5905static int hf_ieee80211_tag_measure_request_channel_number;
5906static int hf_ieee80211_tag_measure_request_start_time;
5907static int hf_ieee80211_tag_measure_request_duration;
5908
5909static int hf_ieee80211_tag_measure_request_operating_class;
5910static int hf_ieee80211_tag_measure_request_randomization_interval;
5911
5912static int hf_ieee80211_tag_measure_report_measurement_token;
5913static int hf_ieee80211_tag_measure_report_mode;
5914static int hf_ieee80211_tag_measure_report_mode_late;
5915static int hf_ieee80211_tag_measure_report_mode_incapable;
5916static int hf_ieee80211_tag_measure_report_mode_refused;
5917static int hf_ieee80211_tag_measure_report_mode_reserved;
5918static int hf_ieee80211_tag_measure_report_type;
5919static int hf_ieee80211_tag_measure_report_channel_number;
5920static int hf_ieee80211_tag_measure_report_start_time;
5921static int hf_ieee80211_tag_measure_report_duration;
5922
5923static int hf_ieee80211_tag_measure_basic_map_field;
5924static int hf_ieee80211_tag_measure_map_field_bss;
5925static int hf_ieee80211_tag_measure_map_field_ofdm;
5926static int hf_ieee80211_tag_measure_map_field_unident_signal;
5927static int hf_ieee80211_tag_measure_map_field_radar;
5928static int hf_ieee80211_tag_measure_map_field_unmeasured;
5929static int hf_ieee80211_tag_measure_map_field_reserved;
5930
5931static int hf_ieee80211_tag_measure_cca_busy_fraction;
5932
5933static int hf_ieee80211_tag_measure_rpi_histogram_report;
5934static int hf_ieee80211_tag_measure_rpi_histogram_report_0;
5935static int hf_ieee80211_tag_measure_rpi_histogram_report_1;
5936static int hf_ieee80211_tag_measure_rpi_histogram_report_2;
5937static int hf_ieee80211_tag_measure_rpi_histogram_report_3;
5938static int hf_ieee80211_tag_measure_rpi_histogram_report_4;
5939static int hf_ieee80211_tag_measure_rpi_histogram_report_5;
5940static int hf_ieee80211_tag_measure_rpi_histogram_report_6;
5941static int hf_ieee80211_tag_measure_rpi_histogram_report_7;
5942
5943static int hf_ieee80211_tag_measure_report_operating_class;
5944static int hf_ieee80211_tag_measure_report_channel_load;
5945static int hf_ieee80211_tag_measure_report_frame_info;
5946static int hf_ieee80211_tag_measure_report_frame_info_phy_type;
5947static int hf_ieee80211_tag_measure_report_frame_info_frame_type;
5948static int hf_ieee80211_tag_measure_report_rcpi;
5949static int hf_ieee80211_tag_measure_report_rsni;
5950static int hf_ieee80211_tag_measure_report_bssid;
5951static int hf_ieee80211_tag_measure_report_ant_id;
5952static int hf_ieee80211_tag_measure_report_anpi;
5953static int hf_ieee80211_tag_measure_report_ipi_density_0;
5954static int hf_ieee80211_tag_measure_report_ipi_density_1;
5955static int hf_ieee80211_tag_measure_report_ipi_density_2;
5956static int hf_ieee80211_tag_measure_report_ipi_density_3;
5957static int hf_ieee80211_tag_measure_report_ipi_density_4;
5958static int hf_ieee80211_tag_measure_report_ipi_density_5;
5959static int hf_ieee80211_tag_measure_report_ipi_density_6;
5960static int hf_ieee80211_tag_measure_report_ipi_density_7;
5961static int hf_ieee80211_tag_measure_report_ipi_density_8;
5962static int hf_ieee80211_tag_measure_report_ipi_density_9;
5963static int hf_ieee80211_tag_measure_report_ipi_density_10;
5964static int hf_ieee80211_tag_measure_report_parent_tsf;
5965
5966static int hf_ieee80211_tag_measure_report_subelement_length;
5967static int hf_ieee80211_tag_measure_report_beacon_sub_id;
5968static int hf_ieee80211_tag_measure_report_beacon_unknown;
5969static int hf_ieee80211_tag_measure_report_beacon_sub_last_report_indication;
5970static int hf_ieee80211_tag_measure_reported_frame_frag_id;
5971static int hf_ieee80211_tag_measure_reported_frame_frag_rep_id;
5972static int hf_ieee80211_tag_measure_reported_frame_frag_number;
5973static int hf_ieee80211_tag_measure_reported_frame_frag_more;
5974
5975static int hf_ieee80211_tag_measure_report_lci_sub_id;
5976static int hf_ieee80211_tag_measure_report_lci_lci;
5977static int hf_ieee80211_tag_measure_report_lci_z_sta_floor_info;
5978static int hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_expected_to_move;
5979static int hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_sta_floor_number;
5980static int hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor;
5981static int hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor_uncertainty;
5982static int hf_ieee80211_tag_measure_report_lci_urp;
5983static int hf_ieee80211_tag_measure_report_lci_urp_retransmission_allowed;
5984static int hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative_present;
5985static int hf_ieee80211_tag_measure_report_lci_urp_sta_location_policy;
5986static int hf_ieee80211_tag_measure_report_lci_urp_reserved;
5987static int hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative;
5988static int hf_ieee80211_tag_measure_report_lci_unknown;
5989
5990static int hf_ieee80211_tag_measure_report_civic_location_type;
5991static int hf_ieee80211_tag_measure_report_civic_sub_id;
5992static int hf_ieee80211_tag_measure_report_location_civic_country;
5993static int hf_ieee80211_tag_measure_report_location_civic_type;
5994static int hf_ieee80211_tag_measure_report_location_civic_length;
5995static int hf_ieee80211_tag_measure_report_location_civic;
5996
5997static int hf_ieee80211_tag_measure_report_unknown;
5998
5999static int hf_ieee80211_tag_quiet_count;
6000static int hf_ieee80211_tag_quiet_period;
6001static int hf_ieee80211_tag_quiet_duration;
6002static int hf_ieee80211_tag_quiet_offset;
6003
6004static int hf_ieee80211_tag_dfs_owner;
6005static int hf_ieee80211_tag_dfs_recovery_interval;
6006static int hf_ieee80211_tag_dfs_channel_map;
6007static int hf_ieee80211_tag_dfs_channel_number;
6008static int hf_ieee80211_tag_dfs_map;
6009
6010static int hf_ieee80211_tag_erp_info;
6011static int hf_ieee80211_tag_erp_info_erp_present;
6012static int hf_ieee80211_tag_erp_info_use_protection;
6013static int hf_ieee80211_tag_erp_info_barker_preamble_mode;
6014static int hf_ieee80211_tag_erp_info_reserved;
6015
6016static int hf_ieee80211_tag_extended_capabilities;
6017static int hf_ieee80211_tag_extended_capabilities_b0;
6018static int hf_ieee80211_tag_extended_capabilities_b1;
6019static int hf_ieee80211_tag_extended_capabilities_b2;
6020static int hf_ieee80211_tag_extended_capabilities_b3;
6021static int hf_ieee80211_tag_extended_capabilities_b4;
6022static int hf_ieee80211_tag_extended_capabilities_b5;
6023static int hf_ieee80211_tag_extended_capabilities_b6;
6024static int hf_ieee80211_tag_extended_capabilities_b7;
6025static int hf_ieee80211_tag_extended_capabilities_b8;
6026static int hf_ieee80211_tag_extended_capabilities_b9;
6027static int hf_ieee80211_tag_extended_capabilities_b10;
6028static int hf_ieee80211_tag_extended_capabilities_b11;
6029static int hf_ieee80211_tag_extended_capabilities_b12;
6030static int hf_ieee80211_tag_extended_capabilities_b13;
6031static int hf_ieee80211_tag_extended_capabilities_b14;
6032static int hf_ieee80211_tag_extended_capabilities_b15;
6033static int hf_ieee80211_tag_extended_capabilities_b16;
6034static int hf_ieee80211_tag_extended_capabilities_b17;
6035static int hf_ieee80211_tag_extended_capabilities_b18;
6036static int hf_ieee80211_tag_extended_capabilities_b19;
6037static int hf_ieee80211_tag_extended_capabilities_b20;
6038static int hf_ieee80211_tag_extended_capabilities_b21;
6039static int hf_ieee80211_tag_extended_capabilities_b22;
6040static int hf_ieee80211_tag_extended_capabilities_b23;
6041static int hf_ieee80211_tag_extended_capabilities_b24;
6042static int hf_ieee80211_tag_extended_capabilities_b25;
6043static int hf_ieee80211_tag_extended_capabilities_b26;
6044static int hf_ieee80211_tag_extended_capabilities_b27;
6045static int hf_ieee80211_tag_extended_capabilities_b28;
6046static int hf_ieee80211_tag_extended_capabilities_b29;
6047static int hf_ieee80211_tag_extended_capabilities_b30;
6048static int hf_ieee80211_tag_extended_capabilities_b31;
6049static int hf_ieee80211_tag_extended_capabilities_b32;
6050static int hf_ieee80211_tag_extended_capabilities_b33;
6051static int hf_ieee80211_tag_extended_capabilities_b34;
6052static int hf_ieee80211_tag_extended_capabilities_b35;
6053static int hf_ieee80211_tag_extended_capabilities_b36;
6054static int hf_ieee80211_tag_extended_capabilities_b37;
6055static int hf_ieee80211_tag_extended_capabilities_b38;
6056static int hf_ieee80211_tag_extended_capabilities_b39;
6057static int hf_ieee80211_tag_extended_capabilities_b40;
6058static int hf_ieee80211_tag_extended_capabilities_serv_int_granularity;
6059static int hf_ieee80211_tag_extended_capabilities_b44;
6060static int hf_ieee80211_tag_extended_capabilities_b45;
6061static int hf_ieee80211_tag_extended_capabilities_b46;
6062static int hf_ieee80211_tag_extended_capabilities_b47;
6063static int hf_ieee80211_tag_extended_capabilities_b48;
6064static int hf_ieee80211_tag_extended_capabilities_b49;
6065static int hf_ieee80211_tag_extended_capabilities_b50;
6066static int hf_ieee80211_tag_extended_capabilities_b51;
6067static int hf_ieee80211_tag_extended_capabilities_b52;
6068static int hf_ieee80211_tag_extended_capabilities_b53;
6069static int hf_ieee80211_tag_extended_capabilities_b54;
6070static int hf_ieee80211_tag_extended_capabilities_b55;
6071static int hf_ieee80211_tag_extended_capabilities_b56;
6072static int hf_ieee80211_tag_extended_capabilities_b57;
6073static int hf_ieee80211_tag_extended_capabilities_b58;
6074static int hf_ieee80211_tag_extended_capabilities_b59;
6075static int hf_ieee80211_tag_extended_capabilities_b60;
6076static int hf_ieee80211_tag_extended_capabilities_b61;
6077static int hf_ieee80211_tag_extended_capabilities_b62;
6078static int hf_ieee80211_tag_extended_capabilities_b63;
6079/* Used for the two-byte ext-cap field when present */
6080static int hf_ieee80211_tag_extended_capabilities_2;
6081static int hf_ieee80211_tag_extended_capabilities_b56_2;
6082static int hf_ieee80211_tag_extended_capabilities_b57_2;
6083static int hf_ieee80211_tag_extended_capabilities_b58_2;
6084static int hf_ieee80211_tag_extended_capabilities_b59_2;
6085static int hf_ieee80211_tag_extended_capabilities_b60_2;
6086static int hf_ieee80211_tag_extended_capabilities_b61_2;
6087static int hf_ieee80211_tag_extended_capabilities_b62_2;
6088static int hf_ieee80211_tag_extended_capabilities_max_num_msdus;
6089static int hf_ieee80211_tag_extended_capabilities_b65_2;
6090static int hf_ieee80211_tag_extended_capabilities_b66_2;
6091static int hf_ieee80211_tag_extended_capabilities_b67_2;
6092static int hf_ieee80211_tag_extended_capabilities_b68_2;
6093static int hf_ieee80211_tag_extended_capabilities_b69_2;
6094static int hf_ieee80211_tag_extended_capabilities_b70_2;
6095static int hf_ieee80211_tag_extended_capabilities_b71_2;
6096
6097static int hf_ieee80211_tag_extended_capabilities_b72;
6098static int hf_ieee80211_tag_extended_capabilities_b73;
6099static int hf_ieee80211_tag_extended_capabilities_b74;
6100static int hf_ieee80211_tag_extended_capabilities_b75;
6101static int hf_ieee80211_tag_extended_capabilities_b76;
6102static int hf_ieee80211_tag_extended_capabilities_b77;
6103static int hf_ieee80211_tag_extended_capabilities_b78;
6104static int hf_ieee80211_tag_extended_capabilities_b79;
6105static int hf_ieee80211_tag_extended_capabilities_b80;
6106static int hf_ieee80211_tag_extended_capabilities_b81;
6107static int hf_ieee80211_tag_extended_capabilities_b82;
6108static int hf_ieee80211_tag_extended_capabilities_b83;
6109static int hf_ieee80211_tag_extended_capabilities_b84;
6110static int hf_ieee80211_tag_extended_capabilities_b85;
6111static int hf_ieee80211_tag_extended_capabilities_b86;
6112static int hf_ieee80211_tag_extended_capabilities_b87;
6113
6114static int hf_ieee80211_tag_extended_capabilities_b88;
6115static int hf_ieee80211_tag_extended_capabilities_b89;
6116static int hf_ieee80211_tag_extended_capabilities_b90;
6117static int hf_ieee80211_tag_extended_capabilities_b91;
6118static int hf_ieee80211_tag_extended_capabilities_b92;
6119static int hf_ieee80211_tag_extended_capabilities_b93;
6120static int hf_ieee80211_tag_extended_capabilities_b94;
6121static int hf_ieee80211_tag_extended_capabilities_b95;
6122
6123static int hf_ieee80211_tag_extended_capabilities_b96;
6124static int hf_ieee80211_tag_extended_capabilities_b97;
6125static int hf_ieee80211_tag_extended_capabilities_b98;
6126static int hf_ieee80211_tag_extended_capabilities_b99;
6127static int hf_ieee80211_tag_extended_capabilities_b100;
6128static int hf_ieee80211_tag_extended_capabilities_b101;
6129static int hf_ieee80211_tag_extended_capabilities_b102;
6130static int hf_ieee80211_tag_extended_capabilities_b103;
6131static int hf_ieee80211_tag_extended_capabilities_b104;
6132static int hf_ieee80211_tag_extended_capabilities_b105;
6133static int hf_ieee80211_tag_extended_capabilities_reserved2;
6134
6135static int hf_ieee80211_tag_cisco_ccx1_unknown;
6136static int hf_ieee80211_tag_cisco_ccx1_name;
6137static int hf_ieee80211_tag_cisco_ccx1_clients;
6138static int hf_ieee80211_tag_cisco_ccx1_unknown2;
6139
6140static int hf_ieee80211_vs_cisco_ap_name_v2;
6141
6142static int hf_ieee80211_vht_cap;
6143static int hf_ieee80211_vht_max_mpdu_length;
6144static int hf_ieee80211_vht_supported_chan_width_set;
6145static int hf_ieee80211_vht_rx_ldpc;
6146static int hf_ieee80211_vht_short_gi_for_80;
6147static int hf_ieee80211_vht_short_gi_for_160;
6148static int hf_ieee80211_vht_tx_stbc;
6149static int hf_ieee80211_vht_rx_stbc;
6150static int hf_ieee80211_vht_su_beamformer_cap;
6151static int hf_ieee80211_vht_su_beamformee_cap;
6152static int hf_ieee80211_vht_beamformer_antennas;
6153static int hf_ieee80211_vht_sounding_dimensions;
6154static int hf_ieee80211_vht_mu_beamformer_cap;
6155static int hf_ieee80211_vht_mu_beamformee_cap;
6156static int hf_ieee80211_vht_txop_ps;
6157static int hf_ieee80211_vht_var_htc_field;
6158static int hf_ieee80211_vht_max_ampdu;
6159static int hf_ieee80211_vht_link_adaptation_cap;
6160static int hf_ieee80211_vht_rx_pattern;
6161static int hf_ieee80211_vht_tx_pattern;
6162static int hf_ieee80211_vht_ext_nss_bw_support;
6163
6164static int hf_ieee80211_vht_mcsset;
6165
6166static int hf_ieee80211_vht_mcsset_rx_mcs_map;
6167static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss;
6168static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss;
6169static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss;
6170static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss;
6171static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss;
6172static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss;
6173static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss;
6174static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss;
6175
6176static int hf_ieee80211_vht_mcsset_max_nsts_total;
6177static int hf_ieee80211_vht_mcsset_rx_highest_long_gi;
6178static int hf_ieee80211_vht_mcsset_extended_nss_bw_capable;
6179static int hf_ieee80211_vht_mcsset_reserved;
6180
6181static int hf_ieee80211_vht_mcsset_tx_mcs_map;
6182static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss;
6183static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss;
6184static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss;
6185static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss;
6186static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss;
6187static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss;
6188static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss;
6189static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss;
6190
6191static int hf_ieee80211_vht_op;
6192static int hf_ieee80211_vht_op_channel_width;
6193static int hf_ieee80211_vht_op_channel_center0;
6194static int hf_ieee80211_vht_op_channel_center1;
6195
6196static int hf_ieee80211_vht_op_basic_mcs_map;
6197static int hf_ieee80211_vht_op_max_basic_mcs_for_1_ss;
6198static int hf_ieee80211_vht_op_max_basic_mcs_for_2_ss;
6199static int hf_ieee80211_vht_op_max_basic_mcs_for_3_ss;
6200static int hf_ieee80211_vht_op_max_basic_mcs_for_4_ss;
6201static int hf_ieee80211_vht_op_max_basic_mcs_for_5_ss;
6202static int hf_ieee80211_vht_op_max_basic_mcs_for_6_ss;
6203static int hf_ieee80211_vht_op_max_basic_mcs_for_7_ss;
6204static int hf_ieee80211_vht_op_max_basic_mcs_for_8_ss;
6205static int hf_ieee80211_vht_mcsset_tx_highest_long_gi;
6206
6207static int hf_ieee80211_vht_tpe_pwr_info;
6208static int hf_ieee80211_vht_tpe_pwr_info_count;
6209static int hf_ieee80211_vht_tpe_pwr_info_unit;
6210static int hf_ieee80211_vht_tpe_pwr_info_category;
6211static int hf_ieee80211_vht_tpe_pwr_constr_20;
6212static int hf_ieee80211_vht_tpe_pwr_constr_40;
6213static int hf_ieee80211_vht_tpe_pwr_constr_80;
6214static int hf_ieee80211_vht_tpe_pwr_constr_160;
6215static int hf_ieee80211_vht_tpe_pwr_constr_320;
6216static int hf_ieee80211_vht_tpe_any_bw_psd;
6217static int hf_ieee80211_vht_tpe_psd;
6218static int hf_ieee80211_vht_tpe_ext_count;
6219static int hf_ieee80211_vht_tpe_ext_reserved;
6220
6221static int hf_ieee80211_beamform_feedback_seg_retrans_bitmap;
6222
6223static int hf_ieee80211_ndp_annc_token;
6224static int hf_ieee80211_ndp_annc_variant;
6225static int hf_ieee80211_ndp_annc_token_number;
6226static int hf_ieee80211_vht_ndp_annc_sta_info_aid12;
6227static int hf_ieee80211_vht_ndp_annc_sta_info_feedback_type;
6228static int hf_ieee80211_vht_ndp_annc_sta_info_nc_index;
6229static int hf_ieee80211_vht_ndp_annc_sta_info_reserved;
6230
6231static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008;
6232static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_aid11;
6233static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_ltf_offset;
6234static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_n_sts;
6235static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_rep;
6236static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_n_sts;
6237static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved1;
6238static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_disambiguation;
6239static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_rep;
6240static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved2;
6241
6242static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043;
6243static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_aid11;
6244static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_sac;
6245static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_disambiguation;
6246static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_reserved;
6247
6248static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044;
6249static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_aid11;
6250static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_partial_tsf;
6251static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_disambiguation;
6252static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_reserved;
6253static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_token;
6254
6255static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045;
6256static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_aid11;
6257static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_i2r_ndp_tx_power;
6258static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_r2i_ndp_target_rssi;
6259static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_disambiguation;
6260static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_reserved;
6261
6262
6263static int hf_ieee80211_ndp_eht_annc_sta_info;
6264static int hf_ieee80211_ndp_eht_annc_aid11;
6265static int hf_ieee80211_ndp_eht_annc_resolution;
6266static int hf_ieee80211_ndp_eht_annc_feedback_map;
6267static int hf_ieee80211_ndp_eht_annc_reserved1;
6268static int hf_ieee80211_ndp_eht_annc_nc_index;
6269static int hf_ieee80211_ndp_eht_annc_feedback_type;
6270static int hf_ieee80211_ndp_eht_annc_disambiguation;
6271static int hf_ieee80211_ndp_eht_annc_codebook_size;
6272static int hf_ieee80211_ndp_eht_annc_reserved2;
6273
6274static int hf_ieee80211_ff_vht_action;
6275static int hf_ieee80211_ff_vht_mimo_cntrl;
6276static int hf_ieee80211_ff_vht_mimo_cntrl_nc_index;
6277static int hf_ieee80211_ff_vht_mimo_cntrl_nr_index;
6278static int hf_ieee80211_ff_vht_mimo_cntrl_channel_width;
6279static int hf_ieee80211_ff_vht_mimo_cntrl_grouping;
6280static int hf_ieee80211_ff_vht_mimo_cntrl_codebook_info;
6281static int hf_ieee80211_ff_vht_mimo_cntrl_feedback_type;
6282static int hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg;
6283static int hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg;
6284static int hf_ieee80211_ff_vht_mimo_cntrl_reserved;
6285static int hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number;
6286
6287static int * const hf_ieee80211_ff_vht_mimo_cntrl_fields[] = {
6288 &hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
6289 &hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
6290 &hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
6291 &hf_ieee80211_ff_vht_mimo_cntrl_grouping,
6292 &hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
6293 &hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
6294 &hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
6295 &hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
6296 &hf_ieee80211_ff_vht_mimo_cntrl_reserved,
6297 &hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
6298 NULL((void*)0),
6299};
6300
6301static int hf_ieee80211_vht_compressed_beamforming_report;
6302static int hf_ieee80211_vht_compressed_beamforming_report_snr;
6303static int hf_ieee80211_vht_compressed_beamform_scidx;
6304static int hf_ieee80211_vht_group_id_management;
6305static int hf_ieee80211_vht_membership_status_array;
6306static int hf_ieee80211_vht_user_position_array;
6307static int hf_ieee80211_vht_operation_mode_notification;
6308static int hf_ieee80211_vht_membership_status_field;
6309static int hf_ieee80211_vht_user_position_field;
6310static int hf_ieee80211_vht_mu_exclusive_beamforming_report;
6311static int hf_ieee80211_vht_mu_exclusive_beamforming_delta_snr;
6312
6313static int hf_ieee80211_ff_he_action;
6314static int hf_ieee80211_ff_protected_he_action;
6315static int hf_ieee80211_ff_protected_ftm_action;
6316static int hf_ieee80211_ff_eht_action;
6317static int hf_ieee80211_ff_protected_eht_action;
6318static int hf_ieee80211_he_mimo_control_nc_index;
6319static int hf_ieee80211_he_mimo_control_nr_index;
6320static int hf_ieee80211_he_mimo_control_bw;
6321static int hf_ieee80211_he_mimo_control_grouping;
6322static int hf_ieee80211_he_mimo_control_codebook_info;
6323static int hf_ieee80211_he_mimo_control_feedback_type;
6324static int hf_ieee80211_he_mimo_control_remaining_feedback_segs;
6325static int hf_ieee80211_he_mimo_control_first_feedback_seg;
6326static int hf_ieee80211_he_mimo_control_ru_start_index;
6327static int hf_ieee80211_he_mimo_control_ru_end_index;
6328static int hf_ieee80211_he_mimo_control_sounding_dialog_token_num;
6329static int hf_ieee80211_he_mimo_control_reserved;
6330static int hf_ieee80211_he_mimo_control_field;
6331static int hf_ieee80211_he_compressed_beamforming_report_snr;
6332static int hf_ieee80211_he_compressed_beamform_scidx;
6333static int hf_ieee80211_he_beamforming_report_len;
6334
6335static int hf_ieee80211_tag_neighbor_report_bssid;
6336static int hf_ieee80211_tag_neighbor_report_bssid_info;
6337static int hf_ieee80211_tag_neighbor_report_bssid_info_reachability;
6338static int hf_ieee80211_tag_neighbor_report_bssid_info_security;
6339static int hf_ieee80211_tag_neighbor_report_bssid_info_key_scope;
6340static int hf_ieee80211_tag_neighbor_report_bssid_info_capability;
6341static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng;
6342static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos;
6343static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd;
6344static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt;
6345static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b4;
6346static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b5;
6347static int hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain;
6348static int hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput;
6349static int hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput;
6350static int hf_ieee80211_tag_neighbor_report_bssid_info_ftm;
6351static int hf_ieee80211_tag_neighbor_report_bssid_info_high_efficiency;
6352static int hf_ieee80211_tag_neighbor_report_bssid_info_er_bss;
6353static int hf_ieee80211_tag_neighbor_report_bssid_info_colocated_ap;
6354static int hf_ieee80211_tag_neighbor_report_bssid_info_unsolicited_probe_responses_active;
6355static int hf_ieee80211_tag_neighbor_report_bssid_info_ess_with_colocated_ap;
6356static int hf_ieee80211_tag_neighbor_report_bssid_info_oct_supported_with_reporting_ap;
6357static int hf_ieee80211_tag_neighbor_report_bssid_info_colocated_6ghz_ap;
6358static int hf_ieee80211_tag_neighbor_report_bssid_info_eht;
6359static int hf_ieee80211_tag_neighbor_report_bssid_info_dmg_positioning;
6360static int hf_ieee80211_tag_neighbor_report_bssid_info_reserved;
6361static int hf_ieee80211_tag_neighbor_report_ope_class;
6362static int hf_ieee80211_tag_neighbor_report_channel_number;
6363static int hf_ieee80211_tag_neighbor_report_phy_type;
6364static int hf_ieee80211_tag_neighbor_report_subelement_id;
6365static int hf_ieee80211_tag_neighbor_report_subelement_length;
6366static int hf_ieee80211_tag_neighbor_report_subelement_data;
6367static int hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref;
6368static int hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf;
6369static int hf_ieee80211_tag_neighbor_report_subelement_bss_dur;
6370static int hf_ieee80211_tag_neighbor_report_subelement_tsf_offset;
6371static int hf_ieee80211_tag_neighbor_report_subelement_beacon_interval;
6372static int hf_ieee80211_tag_neighbor_report_subelement_country_code;
6373static int hf_ieee80211_tag_supported_ope_classes_current;
6374static int hf_ieee80211_tag_supported_ope_classes_alternate;
6375
6376static int hf_ieee80211_tag_dirn_meas_results_aoa_results;
6377static int hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth;
6378static int hf_ieee80211_tag_ftm_aoa_results_aoa_elevation;
6379static int hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth_accuracy;
6380static int hf_ieee80211_tag_ftm_aoa_results_aoa_elevation_accuracy;
6381static int hf_ieee80211_tag_ftm_aoa_results_best_awv_id;
6382static int hf_ieee80211_tag_ftm_aoa_results_aoa_reference;
6383static int hf_ieee80211_tag_ftm_aoa_results_reserved;
6384
6385/* IEEE Std 802.11r-2008 7.3.2.47 */
6386static int hf_ieee80211_tag_mobility_domain_mdid;
6387static int hf_ieee80211_tag_mobility_domain_ft_capab;
6388static int hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds;
6389static int hf_ieee80211_tag_mobility_domain_ft_capab_resource_req;
6390static int hf_ieee80211_tag_mobility_domain_ft_capab_reserved;
6391static int * const ieee80211_tag_mobility_domain_ft_capab_fields[] = {
6392 &hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
6393 &hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
6394 &hf_ieee80211_tag_mobility_domain_ft_capab_reserved,
6395 NULL((void*)0)
6396};
6397
6398/* IEEE Std 802.11r-2008 7.3.2.48 */
6399static int hf_ieee80211_tag_ft_mic_control;
6400static int hf_ieee80211_tag_ft_mic_control_rsnxe_used;
6401static int hf_ieee80211_tag_ft_mic_control_mic_length;
6402static int hf_ieee80211_tag_ft_mic_control_reserved;
6403static int hf_ieee80211_tag_ft_mic_control_element_count;
6404static int * const ieee80211_tag_ft_mic_control_fields[] = {
6405 &hf_ieee80211_tag_ft_mic_control_rsnxe_used,
6406 &hf_ieee80211_tag_ft_mic_control_mic_length,
6407 &hf_ieee80211_tag_ft_mic_control_reserved,
6408 &hf_ieee80211_tag_ft_mic_control_element_count,
6409 NULL((void*)0)
6410};
6411static int hf_ieee80211_tag_ft_mic;
6412static int hf_ieee80211_tag_ft_anonce;
6413static int hf_ieee80211_tag_ft_snonce;
6414static int hf_ieee80211_tag_ft_subelem_id;
6415static int hf_ieee80211_tag_ft_subelem_len;
6416static int hf_ieee80211_tag_ft_subelem_data;
6417static int hf_ieee80211_tag_ft_subelem_r1kh_id;
6418static int hf_ieee80211_tag_ft_subelem_gtk_key_info;
6419static int hf_ieee80211_tag_ft_subelem_gtk_key_id;
6420static int hf_ieee80211_tag_ft_subelem_gtk_key_length;
6421static int hf_ieee80211_tag_ft_subelem_gtk_rsc;
6422static int hf_ieee80211_tag_ft_subelem_gtk_key;
6423static int hf_ieee80211_tag_ft_subelem_gtk_key_encrypted;
6424static int hf_ieee80211_tag_ft_subelem_r0kh_id;
6425static int hf_ieee80211_tag_ft_subelem_igtk_key_id;
6426static int hf_ieee80211_tag_ft_subelem_igtk_ipn;
6427static int hf_ieee80211_tag_ft_subelem_igtk_key_length;
6428static int hf_ieee80211_tag_ft_subelem_igtk_key;
6429static int hf_ieee80211_tag_ft_subelem_oci_op_class;
6430static int hf_ieee80211_tag_ft_subelem_oci_prim_chan_num;
6431static int hf_ieee80211_tag_ft_subelem_oci_freq_seg_1;
6432static int hf_ieee80211_tag_ft_subelem_oci_oct_op_class;
6433static int hf_ieee80211_tag_ft_subelem_oci_oct_prim_chan_num;
6434static int hf_ieee80211_tag_ft_subelem_oci_oct_freq_seg_1;
6435static int hf_ieee80211_tag_ft_subelem_bigtk_key_id;
6436static int hf_ieee80211_tag_ft_subelem_bigtk_bipn;
6437static int hf_ieee80211_tag_ft_subelem_bigtk_key_length;
6438static int hf_ieee80211_tag_ft_subelem_bigtk_key;
6439static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key_info;
6440static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key_id;
6441static int hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id_info;
6442static int hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id;
6443static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key_length;
6444static int hf_ieee80211_tag_ft_subelem_mlo_gtk_rsc;
6445static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key;
6446static int hf_ieee80211_tag_ft_subelem_mlo_igtk_key_id;
6447static int hf_ieee80211_tag_ft_subelem_mlo_igtk_ipn;
6448static int hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id_info;
6449static int hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id;
6450static int hf_ieee80211_tag_ft_subelem_mlo_igtk_key_length;
6451static int hf_ieee80211_tag_ft_subelem_mlo_igtk_key;
6452static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_id;
6453static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_bipn;
6454static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id_info;
6455static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id;
6456static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_length;
6457static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_key;
6458
6459/* IEEE Std 802.11-2012: 11r 8.4.2.52 */
6460static int hf_ieee80211_tag_ric_data_id;
6461static int hf_ieee80211_tag_ric_data_desc_cnt;
6462static int hf_ieee80211_tag_ric_data_status_code;
6463
6464/* IEEE Std 802.11-2012: 11r 8.4.2.53 */
6465static int hf_ieee80211_tag_ric_desc_rsrc_type;
6466static int hf_ieee80211_tag_ric_desc_var_params;
6467
6468/* IEEE Std 802.11w-2009 7.3.2.55 */
6469static int hf_ieee80211_tag_mmie_keyid;
6470static int hf_ieee80211_tag_mmie_ipn;
6471static int hf_ieee80211_tag_mmie_mic;
6472
6473/* IEEE Std 802.11-2016: 9.4.2.72 */
6474static int hf_ieee80211_tag_no_bssid_capability_dmg_bss_control;
6475static int hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_type;
6476static int hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_reserved;
6477
6478/* IEEE Std 802.11-2016: 9.4.2.74 */
6479static int hf_ieee80211_tag_multiple_bssid_index_bssid_index;
6480static int hf_ieee80211_tag_multiple_bssid_index_dtim_period;
6481static int hf_ieee80211_tag_multiple_bssid_index_dtim_count;
6482
6483/* IEEE Std 802.11-2012: 8.4.2.61 */
6484static int hf_ieee80211_tag_obss_spd;
6485static int hf_ieee80211_tag_obss_sad;
6486static int hf_ieee80211_tag_obss_cwtsi;
6487static int hf_ieee80211_tag_obss_sptpc;
6488static int hf_ieee80211_tag_obss_satpc;
6489static int hf_ieee80211_tag_obss_wctdf;
6490static int hf_ieee80211_tag_obss_sat;
6491
6492/* IEEE Std 802.11-2012: 8.4.2.25.1 */
6493static int hf_ieee80211_group_data_cipher_suite_oui;
6494static int hf_ieee80211_group_data_cipher_suite_type;
6495static int hf_ieee80211_osen_pairwise_cipher_suite_oui;
6496static int hf_ieee80211_osen_pairwise_cipher_suite_type;
6497static int hf_ieee80211_osen_pcs_count;
6498static int hf_ieee80211_osen_akm_count;
6499static int hf_ieee80211_osen_akm_cipher_suite_oui;
6500static int hf_ieee80211_osen_akm_cipher_suite_type;
6501static int hf_ieee80211_osen_rsn_cap_preauth;
6502static int hf_ieee80211_osen_rsn_cap_no_pairwise;
6503static int hf_ieee80211_osen_rsn_cap_ptksa_replay_counter;
6504static int hf_ieee80211_osen_rsn_cap_gtksa_replay_counter;
6505static int hf_ieee80211_osen_rsn_cap_mfpr;
6506static int hf_ieee80211_osen_rsn_cap_mfpc;
6507static int hf_ieee80211_osen_rsn_cap_jmr;
6508static int hf_ieee80211_osen_rsn_cap_peerkey;
6509static int hf_ieee80211_osen_rsn_spp_a_msdu_capable;
6510static int hf_ieee80211_osen_rsn_spp_a_msdu_required;
6511static int hf_ieee80211_osen_rsn_pbac;
6512static int hf_ieee80211_osen_extended_key_id_iaf;
6513static int hf_ieee80211_osen_reserved;
6514static int hf_ieee80211_osen_rsn_cap_flags;
6515static int hf_ieee80211_osen_pmkid_count;
6516static int hf_ieee80211_osen_pmkid;
6517static int hf_ieee80211_osen_group_management_cipher_suite_oui;
6518static int hf_ieee80211_osen_group_management_cipher_suite_type;
6519
6520/*WAPI-Specification 7.3.2.25 : WAPI Parameter Set*/
6521static int hf_ieee80211_tag_wapi_param_set_version;
6522
6523static int hf_ieee80211_tag_wapi_param_set_akm_suite_count;
6524static int hf_ieee80211_tag_wapi_param_set_akm_suite_oui;
6525static int hf_ieee80211_tag_wapi_param_set_akm_suite_type;
6526
6527static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count;
6528static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui;
6529static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type;
6530
6531static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui;
6532static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type;
6533
6534static int hf_ieee80211_tag_wapi_param_set_capab;
6535static int hf_ieee80211_tag_wapi_param_set_capab_preauth;
6536static int hf_ieee80211_tag_wapi_param_set_capab_rsvd;
6537static int hf_ieee80211_tag_wapi_param_set_bkid_count;
6538static int hf_ieee80211_tag_wapi_param_set_bkid_list;
6539
6540/* IEEE Std 802.11v-2011 7.3.2.61 */
6541static int hf_ieee80211_tag_time_adv_timing_capab;
6542static int hf_ieee80211_tag_time_adv_time_value;
6543static int hf_ieee80211_tag_time_adv_time_value_year;
6544static int hf_ieee80211_tag_time_adv_time_value_month;
6545static int hf_ieee80211_tag_time_adv_time_value_day;
6546static int hf_ieee80211_tag_time_adv_time_value_hours;
6547static int hf_ieee80211_tag_time_adv_time_value_minutes;
6548static int hf_ieee80211_tag_time_adv_time_value_seconds;
6549static int hf_ieee80211_tag_time_adv_time_value_milliseconds;
6550static int hf_ieee80211_tag_time_adv_time_value_reserved;
6551static int hf_ieee80211_tag_time_adv_time_error;
6552static int hf_ieee80211_tag_time_adv_time_update_counter;
6553
6554/* IEEE Std 802.11-2012 8.4.2.81 */
6555static int hf_ieee80211_tag_bss_max_idle_period;
6556static int hf_ieee80211_tag_bss_max_idle_options;
6557static int hf_ieee80211_tag_bss_max_idle_options_protected;
6558static int hf_ieee80211_tag_bss_idle_options_reserved;
6559
6560/* IEEE Std 802.11-2012 8.4.2.82 */
6561static int hf_ieee80211_tag_tfs_request_id;
6562static int hf_ieee80211_tag_tfs_request_ac_delete_after_match;
6563static int hf_ieee80211_tag_tfs_request_ac_notify;
6564static int hf_ieee80211_tag_tfs_request_subelem_id;
6565static int hf_ieee80211_tag_tfs_request_subelem_len;
6566static int hf_ieee80211_tag_tfs_request_subelem;
6567
6568/* IEEE Std 802.11-2012 8.4.2.83 */
6569static int hf_ieee80211_tag_tfs_response_subelem_id;
6570static int hf_ieee80211_tag_tfs_response_subelem_len;
6571static int hf_ieee80211_tag_tfs_response_subelem;
6572static int hf_ieee80211_tag_tfs_response_status;
6573static int hf_ieee80211_tag_tfs_response_id;
6574
6575/* IEEE Std 802.11-2012 8.4.2.84 */
6576static int hf_ieee80211_tag_wnm_sleep_mode_action_type;
6577static int hf_ieee80211_tag_wnm_sleep_mode_response_status;
6578static int hf_ieee80211_tag_wnm_sleep_mode_interval;
6579
6580static int hf_ieee80211_wnm_sub_elt_id;
6581static int hf_ieee80211_wnm_sub_elt_len;
6582
6583/* IEEE Std 802.11v-2011 7.3.2.87 */
6584static int hf_ieee80211_tag_time_zone;
6585
6586/* IEEE Std 802.11u-2011 7.3.2.92 */
6587static int hf_ieee80211_tag_interworking_access_network_type;
6588static int hf_ieee80211_tag_interworking_internet;
6589static int hf_ieee80211_tag_interworking_asra;
6590static int hf_ieee80211_tag_interworking_esr;
6591static int hf_ieee80211_tag_interworking_uesa;
6592static int hf_ieee80211_tag_interworking_hessid;
6593
6594/* IEEE Std 802.11-2012, 8.4.2.97 */
6595static int hf_ieee80211_tag_qos_map_set_dscp_exc;
6596static int hf_ieee80211_tag_qos_map_set_dscp_exc_val;
6597static int hf_ieee80211_tag_qos_map_set_dscp_exc_up;
6598static int hf_ieee80211_tag_qos_map_set_range;
6599static int hf_ieee80211_tag_qos_map_set_low;
6600static int hf_ieee80211_tag_qos_map_set_high;
6601
6602/* IEEE Std 802.11u-2011 7.3.2.93 */
6603static int hf_ieee80211_tag_adv_proto_resp_len_limit;
6604static int hf_ieee80211_tag_adv_proto_pame_bi;
6605static int hf_ieee80211_tag_adv_proto_id;
6606static int hf_ieee80211_tag_adv_vs_len;
6607/* static int hf_ieee80211_tag_adv_proto_vs_info; */
6608
6609/* IEEE Std 802.11u-2011 7.3.2.96 */
6610static int hf_ieee80211_tag_roaming_consortium_num_anqp_oi;
6611static int hf_ieee80211_tag_roaming_consortium_oi1_len;
6612static int hf_ieee80211_tag_roaming_consortium_oi2_len;
6613static int hf_ieee80211_tag_roaming_consortium_oi1;
6614static int hf_ieee80211_tag_roaming_consortium_oi2;
6615static int hf_ieee80211_tag_roaming_consortium_oi3;
6616
6617/* 802.11n 7.3.2.48 */
6618static int hf_ieee80211_hta_cc;
6619static int hf_ieee80211_hta_cap1;
6620static int hf_ieee80211_hta_cap2;
6621static int hf_ieee80211_hta_ext_chan_offset;
6622static int hf_ieee80211_hta_rec_tx_width;
6623static int hf_ieee80211_hta_rifs_mode;
6624static int hf_ieee80211_hta_controlled_access;
6625static int hf_ieee80211_hta_service_interval;
6626static int hf_ieee80211_hta_operating_mode;
6627static int hf_ieee80211_hta_non_gf_devices;
6628static int hf_ieee80211_hta_basic_stbc_mcs;
6629static int hf_ieee80211_hta_dual_stbc_protection;
6630static int hf_ieee80211_hta_secondary_beacon;
6631static int hf_ieee80211_hta_lsig_txop_protection;
6632static int hf_ieee80211_hta_pco_active;
6633static int hf_ieee80211_hta_pco_phase;
6634
6635static int hf_ieee80211_antsel;
6636static int hf_ieee80211_antsel_vs;
6637static int hf_ieee80211_antsel_b0;
6638static int hf_ieee80211_antsel_b1;
6639static int hf_ieee80211_antsel_b2;
6640static int hf_ieee80211_antsel_b3;
6641static int hf_ieee80211_antsel_b4;
6642static int hf_ieee80211_antsel_b5;
6643static int hf_ieee80211_antsel_b6;
6644static int hf_ieee80211_antsel_b7;
6645
6646static int hf_ieee80211_rsn_version;
6647static int hf_ieee80211_rsn_gcs;
6648static int hf_ieee80211_rsn_gcs_oui;
6649static int hf_ieee80211_rsn_gcs_type;
6650static int hf_ieee80211_rsn_gcs_80211_type;
6651static int hf_ieee80211_rsn_pcs_count;
6652static int hf_ieee80211_rsn_pcs_list;
6653static int hf_ieee80211_rsn_pcs;
6654static int hf_ieee80211_rsn_pcs_oui;
6655static int hf_ieee80211_rsn_pcs_80211_type;
6656static int hf_ieee80211_rsn_pcs_type;
6657static int hf_ieee80211_rsn_akms_count;
6658static int hf_ieee80211_rsn_akms_list;
6659static int hf_ieee80211_rsn_akms;
6660static int hf_ieee80211_rsn_akms_oui;
6661static int hf_ieee80211_rsn_akms_80211_type;
6662static int hf_ieee80211_rsn_akms_type;
6663static int hf_ieee80211_rsn_cap;
6664static int hf_ieee80211_rsn_cap_preauth;
6665static int hf_ieee80211_rsn_cap_no_pairwise;
6666static int hf_ieee80211_rsn_cap_ptksa_replay_counter;
6667static int hf_ieee80211_rsn_cap_gtksa_replay_counter;
6668static int hf_ieee80211_rsn_cap_mfpr;
6669static int hf_ieee80211_rsn_cap_mfpc;
6670static int hf_ieee80211_rsn_cap_jmr;
6671static int hf_ieee80211_rsn_cap_peerkey;
6672static int hf_ieee80211_rsn_cap_spp_amsdu_cap;
6673static int hf_ieee80211_rsn_cap_spp_amsdu_req;
6674static int hf_ieee80211_rsn_cap_pbac;
6675static int hf_ieee80211_rsn_cap_extended_key_id_iaf;
6676static int hf_ieee80211_rsn_cap_ocvc;
6677static int hf_ieee80211_rsn_pmkid_count;
6678static int hf_ieee80211_rsn_pmkid_list;
6679static int hf_ieee80211_rsn_pmkid;
6680static int hf_ieee80211_rsn_gmcs;
6681static int hf_ieee80211_rsn_gmcs_oui;
6682static int hf_ieee80211_rsn_gmcs_type;
6683static int hf_ieee80211_rsn_gmcs_80211_type;
6684
6685static int hf_ieee80211_wfa_ie_type;
6686static int hf_ieee80211_wfa_ie_wpa_version;
6687static int hf_ieee80211_wfa_ie_wpa_mcs;
6688static int hf_ieee80211_wfa_ie_wpa_mcs_oui;
6689static int hf_ieee80211_wfa_ie_wpa_mcs_type;
6690static int hf_ieee80211_wfa_ie_wpa_mcs_wfa_type;
6691static int hf_ieee80211_wfa_ie_wpa_ucs_count;
6692static int hf_ieee80211_wfa_ie_wpa_ucs_list;
6693static int hf_ieee80211_wfa_ie_wpa_ucs;
6694static int hf_ieee80211_wfa_ie_wpa_ucs_oui;
6695static int hf_ieee80211_wfa_ie_wpa_ucs_wfa_type;
6696static int hf_ieee80211_wfa_ie_wpa_ucs_type;
6697static int hf_ieee80211_wfa_ie_wpa_akms_count;
6698static int hf_ieee80211_wfa_ie_wpa_akms_list;
6699static int hf_ieee80211_wfa_ie_wpa_akms;
6700static int hf_ieee80211_wfa_ie_wpa_akms_oui;
6701static int hf_ieee80211_wfa_ie_wpa_akms_wfa_type;
6702static int hf_ieee80211_wfa_ie_wpa_akms_type;
6703static int hf_ieee80211_wfa_ie_wme_subtype;
6704static int hf_ieee80211_wfa_ie_wme_version;
6705static int hf_ieee80211_wfa_ie_wme_qos_info;
6706static int hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length;
6707static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be;
6708static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk;
6709static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi;
6710static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo;
6711static int hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved;
6712static int hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd;
6713static int hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count;
6714static int hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved;
6715static int hf_ieee80211_wfa_ie_wme_reserved;
6716static int hf_ieee80211_wfa_ie_wme_ac_parameters;
6717static int hf_ieee80211_wfa_ie_wme_acp_aci_aifsn;
6718static int hf_ieee80211_wfa_ie_wme_acp_aci_be;
6719static int hf_ieee80211_wfa_ie_wme_acp_acm_be;
6720static int hf_ieee80211_wfa_ie_wme_acp_aifsn_be;
6721static int hf_ieee80211_wfa_ie_wme_acp_reserved_be;
6722static int hf_ieee80211_wfa_ie_wme_acp_aci_bk;
6723static int hf_ieee80211_wfa_ie_wme_acp_acm_bk;
6724static int hf_ieee80211_wfa_ie_wme_acp_aifsn_bk;
6725static int hf_ieee80211_wfa_ie_wme_acp_reserved_bk;
6726static int hf_ieee80211_wfa_ie_wme_acp_aci_vi;
6727static int hf_ieee80211_wfa_ie_wme_acp_acm_vi;
6728static int hf_ieee80211_wfa_ie_wme_acp_aifsn_vi;
6729static int hf_ieee80211_wfa_ie_wme_acp_reserved_vi;
6730static int hf_ieee80211_wfa_ie_wme_acp_aci_vo;
6731static int hf_ieee80211_wfa_ie_wme_acp_acm_vo;
6732static int hf_ieee80211_wfa_ie_wme_acp_aifsn_vo;
6733static int hf_ieee80211_wfa_ie_wme_acp_reserved_vo;
6734static int hf_ieee80211_wfa_ie_wme_acp_ecw;
6735static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_be;
6736static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_bk;
6737static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_vo;
6738static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_vi;
6739static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_be;
6740static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_bk;
6741static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_vo;
6742static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_vi;
6743static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_be;
6744static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_bk;
6745static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_vo;
6746static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_vi;
6747static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo;
6748static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid;
6749static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction;
6750static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb;
6751static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up;
6752static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved;
6753static int hf_ieee80211_wfa_ie_wme_tspec_nor_msdu;
6754static int hf_ieee80211_wfa_ie_wme_tspec_max_msdu;
6755static int hf_ieee80211_wfa_ie_wme_tspec_min_srv;
6756static int hf_ieee80211_wfa_ie_wme_tspec_max_srv;
6757static int hf_ieee80211_wfa_ie_wme_tspec_inact_int;
6758static int hf_ieee80211_wfa_ie_wme_tspec_susp_int;
6759static int hf_ieee80211_wfa_ie_wme_tspec_srv_start;
6760static int hf_ieee80211_wfa_ie_wme_tspec_min_data;
6761static int hf_ieee80211_wfa_ie_wme_tspec_mean_data;
6762static int hf_ieee80211_wfa_ie_wme_tspec_peak_data;
6763static int hf_ieee80211_wfa_ie_wme_tspec_burst_size;
6764static int hf_ieee80211_wfa_ie_wme_tspec_delay_bound;
6765static int hf_ieee80211_wfa_ie_wme_tspec_min_phy;
6766static int hf_ieee80211_wfa_ie_wme_tspec_surplus;
6767static int hf_ieee80211_wfa_ie_wme_tspec_medium;
6768static int hf_ieee80211_wfa_ie_nc_cost_level;
6769static int hf_ieee80211_wfa_ie_nc_reserved;
6770static int hf_ieee80211_wfa_ie_nc_cost_flags;
6771static int hf_ieee80211_wfa_ie_tethering_type;
6772static int hf_ieee80211_wfa_ie_tethering_mac_length;
6773static int hf_ieee80211_wfa_ie_tethering_mac;
6774static int hf_ieee80211_wfa_ie_owe_bssid;
6775static int hf_ieee80211_wfa_ie_owe_ssid_length;
6776static int hf_ieee80211_wfa_ie_owe_ssid;
6777static int hf_ieee80211_wfa_ie_owe_band_info;
6778static int hf_ieee80211_wfa_ie_owe_channel_info;
6779static int hf_ieee80211_wfa_ie_mbo_oce_attr;
6780static int hf_ieee80211_wfa_ie_mbo_oce_attr_id;
6781static int hf_ieee80211_wfa_ie_mbo_oce_attr_len;
6782static int hf_ieee80211_wfa_ie_mbo_ap_cap;
6783static int hf_ieee80211_wfa_ie_mbo_ap_cap_cell;
6784static int hf_ieee80211_wfa_ie_mbo_ap_cap_reserved;
6785static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class;
6786static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan;
6787static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref;
6788static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason;
6789static int hf_ieee80211_wfa_ie_mbo_cellular_cap;
6790static int hf_ieee80211_wfa_ie_mbo_assoc_disallow_reason;
6791static int hf_ieee80211_wfa_ie_mbo_cellular_pref;
6792static int hf_ieee80211_wfa_ie_mbo_transition_reason;
6793static int hf_ieee80211_wfa_ie_mbo_transition_rej_reason;
6794static int hf_ieee80211_wfa_ie_mbo_assoc_retry_delay;
6795static int hf_ieee80211_wfa_ie_oce_cap_ctrl;
6796static int hf_ieee80211_wfa_ie_oce_cap_release;
6797static int hf_ieee80211_wfa_ie_oce_cap_sta_cfon;
6798static int hf_ieee80211_wfa_ie_oce_cap_11b_only_ap;
6799static int hf_ieee80211_wfa_ie_oce_cap_hlp;
6800static int hf_ieee80211_wfa_ie_oce_cap_non_oce_ap;
6801static int hf_ieee80211_wfa_ie_oce_cap_reserved;
6802static int hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delta;
6803static int hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delay;
6804static int hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap;
6805static int hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_downlink;
6806static int hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_uplink;
6807static int hf_ieee80211_wfa_ie_oce_rnr_completeness_short_ssid;
6808static int hf_ieee80211_wfa_ie_oce_probe_suppr_bssid;
6809static int hf_ieee80211_wfa_ie_oce_probe_suppr_ssid;
6810static int hf_ieee80211_wfa_anqp_mbo_subtype;
6811static int hf_ieee80211_wfa_anqp_mbo_query;
6812static int hf_ieee80211_wfa_anqp_mbo_cellular_pref;
6813static int hf_ieee80211_wfa_ie_transition_disable_bitmap;
6814static int hf_ieee80211_wfa_ie_transition_disable_wpa3_personal;
6815static int hf_ieee80211_wfa_ie_transition_disable_sae_pk;
6816static int hf_ieee80211_wfa_ie_transition_disable_wpa3_enterprise;
6817static int hf_ieee80211_wfa_ie_transition_disable_enhanced_open;
6818static int hf_ieee80211_wfa_ie_transition_disable_reserved_b4thru7;
6819static int hf_ieee80211_wfa_ie_transition_disable_reserved;
6820
6821static int hf_ieee80211_aironet_ie_type;
6822static int hf_ieee80211_aironet_ie_dtpc;
6823static int hf_ieee80211_aironet_ie_dtpc_unknown;
6824static int hf_ieee80211_aironet_ie_version;
6825static int hf_ieee80211_aironet_ie_data;
6826static int hf_ieee80211_aironet_ie_qos_reserved;
6827static int hf_ieee80211_aironet_ie_qos_paramset;
6828static int hf_ieee80211_aironet_ie_qos_val;
6829static int hf_ieee80211_aironet_ie_clientmfp;
6830
6831static int hf_ieee80211_vs_sgdsn_tag;
6832static int hf_ieee80211_vs_sgdsn_type;
6833static int hf_ieee80211_vs_sgdsn_length;
6834static int hf_ieee80211_vs_sgdsn_version;
6835static int hf_ieee80211_vs_sgdsn_icaomfrcode;
6836static int hf_ieee80211_vs_sgdsn_manufacturer;
6837static int hf_ieee80211_vs_sgdsn_model;
6838static int hf_ieee80211_vs_sgdsn_serialnumber;
6839static int hf_ieee80211_vs_sgdsn_serialnumber_len;
6840static int hf_ieee80211_vs_sgdsn_gpscoord;
6841static int hf_ieee80211_vs_sgdsn_altitude;
6842static int hf_ieee80211_vs_sgdsn_speed;
6843static int hf_ieee80211_vs_sgdsn_heading;
6844
6845static int hf_ieee80211_vs_nintendo_type;
6846static int hf_ieee80211_vs_nintendo_length;
6847static int hf_ieee80211_vs_nintendo_servicelist;
6848static int hf_ieee80211_vs_nintendo_service;
6849static int hf_ieee80211_vs_nintendo_consoleid;
6850static int hf_ieee80211_vs_nintendo_unknown;
6851
6852static int hf_ieee80211_vs_aruba_subtype;
6853static int hf_ieee80211_vs_aruba_apname;
6854static int hf_ieee80211_vs_aruba_data;
6855static int hf_ieee80211_vs_aruba_gps_length;
6856static int hf_ieee80211_vs_aruba_gps_subversion;
6857static int hf_ieee80211_vs_aruba_gps_hop;
6858static int hf_ieee80211_vs_aruba_gps_latitude;
6859static int hf_ieee80211_vs_aruba_gps_longitude;
6860static int hf_ieee80211_vs_aruba_gps_major_axis;
6861static int hf_ieee80211_vs_aruba_gps_minor_axis;
6862static int hf_ieee80211_vs_aruba_gps_orientation;
6863static int hf_ieee80211_vs_aruba_gps_distance;
6864
6865static int hf_ieee80211_vs_routerboard_unknown;
6866static int hf_ieee80211_vs_routerboard_subitem;
6867static int hf_ieee80211_vs_routerboard_subtype;
6868static int hf_ieee80211_vs_routerboard_sublength;
6869static int hf_ieee80211_vs_routerboard_subdata;
6870static int hf_ieee80211_vs_routerboard_subtype1_prefix;
6871static int hf_ieee80211_vs_routerboard_subtype1_data;
6872
6873static int hf_ieee80211_vs_meru_subitem;
6874static int hf_ieee80211_vs_meru_subtype;
6875static int hf_ieee80211_vs_meru_sublength;
6876static int hf_ieee80211_vs_meru_subdata;
6877
6878static int hf_ieee80211_vs_extreme_subtype;
6879static int hf_ieee80211_vs_extreme_subdata;
6880static int hf_ieee80211_vs_extreme_unknown;
6881static int hf_ieee80211_vs_extreme_ap_length;
6882static int hf_ieee80211_vs_extreme_ap_name;
6883
6884static int hf_ieee80211_vs_aerohive_version;
6885static int hf_ieee80211_vs_aerohive_subtype;
6886static int hf_ieee80211_vs_aerohive_hostname_length;
6887static int hf_ieee80211_vs_aerohive_hostname;
6888static int hf_ieee80211_vs_aerohive_data;
6889
6890static int hf_ieee80211_vs_mist_ap_name;
6891static int hf_ieee80211_vs_mist_data;
6892
6893static int hf_ieee80211_vs_ruckus_ap_name;
6894static int hf_ieee80211_vs_ruckus_data;
6895
6896static int hf_ieee80211_vs_alcatel_ap_name;
6897static int hf_ieee80211_vs_alcatel_data;
6898
6899static int hf_ieee80211_vs_fortinet_subtype;
6900static int hf_ieee80211_vs_fortinet_system_type;
6901static int hf_ieee80211_vs_fortinet_system_length;
6902static int hf_ieee80211_vs_fortinet_system_apname;
6903static int hf_ieee80211_vs_fortinet_system_apmodel;
6904static int hf_ieee80211_vs_fortinet_system_apserial;
6905static int hf_ieee80211_vs_fortinet_data;
6906
6907static int hf_ieee80211_vs_arista_subtype;
6908static int hf_ieee80211_vs_arista_apname;
6909static int hf_ieee80211_vs_arista_data;
6910
6911static int hf_ieee80211_vs_wisun_type;
6912static int hf_ieee80211_vs_wisun_ptkid;
6913static int hf_ieee80211_vs_wisun_gtkl;
6914static int hf_ieee80211_vs_wisun_gtkl_gtk0;
6915static int hf_ieee80211_vs_wisun_gtkl_gtk1;
6916static int hf_ieee80211_vs_wisun_gtkl_gtk2;
6917static int hf_ieee80211_vs_wisun_gtkl_gtk3;
6918static int hf_ieee80211_vs_wisun_nr;
6919static int hf_ieee80211_vs_wisun_lgtkl;
6920static int hf_ieee80211_vs_wisun_lgtkl_lgtk0;
6921static int hf_ieee80211_vs_wisun_lgtkl_lgtk1;
6922static int hf_ieee80211_vs_wisun_lgtkl_lgtk2;
6923static int hf_ieee80211_vs_wisun_lgtk_key_id;
6924static int hf_ieee80211_vs_wisun_lgtk_lgtk;
6925static int hf_ieee80211_vs_wisun_data;
6926
6927static int hf_ieee80211_vs_apple_type;
6928static int hf_ieee80211_vs_apple_subtype;
6929static int hf_ieee80211_vs_apple_length;
6930static int hf_ieee80211_vs_apple_data;
6931
6932static int hf_ieee80211_vs_ubiquiti_type;
6933static int hf_ieee80211_vs_ubiquiti_ap_name;
6934static int hf_ieee80211_vs_ubiquiti_data;
6935
6936static int hf_ieee80211_rsn_ie_ptk_keyid;
6937
6938static int hf_ieee80211_rsn_ie_gtk_kde_data_type;
6939static int hf_ieee80211_rsn_ie_gtk_kde_key_id;
6940static int hf_ieee80211_rsn_ie_gtk_kde_tx;
6941static int hf_ieee80211_rsn_ie_gtk_kde_reserved1;
6942static int hf_ieee80211_rsn_ie_gtk_kde_reserved2;
6943static int hf_ieee80211_rsn_ie_gtk_kde_gtk;
6944
6945static int hf_ieee80211_rsn_ie_mac_address_kde_mac;
6946
6947static int hf_ieee80211_rsn_ie_pmkid;
6948
6949static int hf_ieee80211_rsn_ie_unknown;
6950
6951static int hf_ieee80211_rsn_ie_gtk_kde_nonce;
6952static int hf_ieee80211_rsn_ie_gtk_kde_lifetime;
6953static int hf_ieee80211_rsn_ie_error_kde_res;
6954static int hf_ieee80211_rsn_ie_error_kde_error_type;
6955static int hf_ieee80211_rsn_ie_igtk_kde_keyid;
6956static int hf_ieee80211_rsn_ie_igtk_kde_ipn;
6957static int hf_ieee80211_rsn_ie_igtk_kde_igtk;
6958static int hf_ieee80211_rsn_ie_oci_operating_class;
6959static int hf_ieee80211_rsn_ie_oci_primary_channel_number;
6960static int hf_ieee80211_rsn_ie_oci_frequency_segment_1;
6961static int hf_ieee80211_rsn_ie_bigtk_key_id;
6962static int hf_ieee80211_rsn_ie_bigtk_bipn;
6963static int hf_ieee80211_rsn_ie_bigtk_bigtk;
6964static int hf_ieee80211_rsn_ie_mlo_link_info;
6965static int hf_ieee80211_rsn_ie_mlo_linkid;
6966static int hf_ieee80211_rsn_ie_mlo_rnse_present;
6967static int hf_ieee80211_rsn_ie_mlo_rnsxe_present;
6968static int hf_ieee80211_rsn_ie_mlo_reserved;
6969static int hf_ieee80211_rsn_ie_mlo_mac_addr;
6970static int hf_ieee80211_rsn_ie_mlo_gtk_kde_key_id;
6971static int hf_ieee80211_rsn_ie_mlo_gtk_kde_tx;
6972static int hf_ieee80211_rsn_ie_mlo_gtk_kde_reserved;
6973static int hf_ieee80211_rsn_ie_mlo_gtk_kde_linkid;
6974static int hf_ieee80211_rsn_ie_mlo_gtk_kde_pn;
6975static int hf_ieee80211_rsn_ie_mlo_gtk_kde_gtk;
6976
6977static int hf_ieee80211_rsn_ie_mlo_igtk_kde_key_id;
6978static int hf_ieee80211_rsn_ie_mlo_igtk_kde_ipn;
6979static int hf_ieee80211_rsn_ie_mlo_igtk_kde_reserved;
6980static int hf_ieee80211_rsn_ie_mlo_igtk_kde_linkid;
6981static int hf_ieee80211_rsn_ie_mlo_igtk_kde_igtk;
6982
6983static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_key_id;
6984static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_ipn;
6985static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_reserved;
6986static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_linkid;
6987static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_bigtk;
6988
6989static int hf_ieee80211_marvell_ie_type;
6990static int hf_ieee80211_marvell_ie_mesh_subtype;
6991static int hf_ieee80211_marvell_ie_mesh_version;
6992static int hf_ieee80211_marvell_ie_mesh_active_proto_id;
6993static int hf_ieee80211_marvell_ie_mesh_active_metric_id;
6994static int hf_ieee80211_marvell_ie_mesh_cap;
6995static int hf_ieee80211_marvell_ie_data;
6996
6997static int hf_ieee80211_extreme_mesh_ie_type;
6998static int hf_ieee80211_extreme_mesh_ie_services;
6999static int hf_ieee80211_extreme_mesh_ie_hello_f_root;
7000static int hf_ieee80211_extreme_mesh_ie_hello_f_proxy;
7001static int hf_ieee80211_extreme_mesh_ie_hello_f_geo;
7002static int hf_ieee80211_extreme_mesh_ie_hello_f_path_pref;
7003static int hf_ieee80211_extreme_mesh_ie_hello_f_mobile;
7004static int hf_ieee80211_extreme_mesh_ie_htr;
7005static int hf_ieee80211_extreme_mesh_ie_mtr;
7006static int hf_ieee80211_extreme_mesh_ie_root;
7007static int hf_ieee80211_extreme_mesh_ie_nh;
7008static int hf_ieee80211_extreme_mesh_ie_mesh_id;
7009static int hf_ieee80211_extreme_mesh_ie_mp_id;
7010
7011static int hf_ieee80211_atheros_ie_type;
7012static int hf_ieee80211_atheros_ie_subtype;
7013static int hf_ieee80211_atheros_ie_version;
7014static int hf_ieee80211_atheros_ie_cap_f_turbop;
7015static int hf_ieee80211_atheros_ie_cap_f_comp;
7016static int hf_ieee80211_atheros_ie_cap_f_ff;
7017static int hf_ieee80211_atheros_ie_cap_f_xr;
7018static int hf_ieee80211_atheros_ie_cap_f_ar;
7019static int hf_ieee80211_atheros_ie_cap_f_burst;
7020static int hf_ieee80211_atheros_ie_cap_f_wme;
7021static int hf_ieee80211_atheros_ie_cap_f_boost;
7022static int hf_ieee80211_atheros_ie_advcap_cap;
7023static int hf_ieee80211_atheros_ie_advcap_defkey;
7024static int hf_ieee80211_atheros_ie_xr_info;
7025static int hf_ieee80211_atheros_ie_xr_base_bssid;
7026static int hf_ieee80211_atheros_ie_xr_xr_bssid;
7027static int hf_ieee80211_atheros_ie_xr_xr_beacon;
7028static int hf_ieee80211_atheros_ie_xr_base_cap;
7029static int hf_ieee80211_atheros_ie_xr_xr_cap;
7030static int hf_ieee80211_atheros_ie_data;
7031
7032/*QBSS - Version 1,2,802.11e*/
7033
7034static int hf_ieee80211_qbss2_cal;
7035static int hf_ieee80211_qbss2_gl;
7036static int hf_ieee80211_qbss_cu;
7037static int hf_ieee80211_qbss2_cu;
7038static int hf_ieee80211_qbss_scount;
7039static int hf_ieee80211_qbss2_scount;
7040static int hf_ieee80211_qbss_version;
7041static int hf_ieee80211_qbss_adc;
7042
7043static int hf_ieee80211_tsinfo;
7044static int hf_ieee80211_tsinfo_type;
7045static int hf_ieee80211_tsinfo_tsid;
7046static int hf_ieee80211_tsinfo_dir;
7047static int hf_ieee80211_tsinfo_access;
7048static int hf_ieee80211_tsinfo_agg;
7049static int hf_ieee80211_tsinfo_apsd;
7050static int hf_ieee80211_tsinfo_up;
7051static int hf_ieee80211_tsinfo_ack;
7052static int hf_ieee80211_tsinfo_sched;
7053static int hf_ieee80211_tsinfo_rsv;
7054
7055static int * const ieee80211_tsinfo_fields[] = {
7056 &hf_ieee80211_tsinfo_type,
7057 &hf_ieee80211_tsinfo_tsid,
7058 &hf_ieee80211_tsinfo_dir,
7059 &hf_ieee80211_tsinfo_access,
7060 &hf_ieee80211_tsinfo_agg,
7061 &hf_ieee80211_tsinfo_apsd,
7062 &hf_ieee80211_tsinfo_up,
7063 &hf_ieee80211_tsinfo_ack,
7064 &hf_ieee80211_tsinfo_sched,
7065 &hf_ieee80211_tsinfo_rsv,
7066 NULL((void*)0)
7067};
7068
7069static int hf_ieee80211_tspec_nor_msdu;
7070static int hf_ieee80211_tspec_max_msdu;
7071static int hf_ieee80211_tspec_min_srv;
7072static int hf_ieee80211_tspec_max_srv;
7073static int hf_ieee80211_tspec_inact_int;
7074static int hf_ieee80211_tspec_susp_int;
7075static int hf_ieee80211_tspec_srv_start;
7076static int hf_ieee80211_tspec_min_data;
7077static int hf_ieee80211_tspec_mean_data;
7078static int hf_ieee80211_tspec_peak_data;
7079static int hf_ieee80211_tspec_burst_size;
7080static int hf_ieee80211_tspec_delay_bound;
7081static int hf_ieee80211_tspec_min_phy;
7082static int hf_ieee80211_tspec_surplus;
7083static int hf_ieee80211_tspec_medium;
7084static int hf_ieee80211_tspec_dmg;
7085static int hf_ieee80211_ts_delay;
7086static int hf_ieee80211_tclas_process;
7087static int hf_ieee80211_tag_ext_supp_rates;
7088static int hf_ieee80211_sched_info;
7089static int hf_ieee80211_sched_info_agg;
7090static int hf_ieee80211_sched_info_tsid;
7091static int hf_ieee80211_sched_info_dir;
7092static int hf_ieee80211_sched_srv_start;
7093static int hf_ieee80211_sched_srv_int;
7094static int hf_ieee80211_sched_spec_int;
7095static int hf_ieee80211_tclas_up;
7096static int hf_ieee80211_tclas_class_type;
7097static int hf_ieee80211_tclas_class_mask;
7098static int hf_ieee80211_tclas_mask_reserved;
7099static int hf_ieee80211_tclas_class_mask0_src_addr;
7100static int hf_ieee80211_tclas_class_mask0_dst_addr;
7101static int hf_ieee80211_tclas_class_mask0_type;
7102static int hf_ieee80211_tclas_class_mask1_ver;
7103static int hf_ieee80211_tclas_class_mask1_src_ip;
7104static int hf_ieee80211_tclas_class_mask1_dst_ip;
7105static int hf_ieee80211_tclas_class_mask1_src_port;
7106static int hf_ieee80211_tclas_class_mask1_dst_port;
7107static int hf_ieee80211_tclas_class_mask1_ipv4_dscp;
7108static int hf_ieee80211_tclas_class_mask1_ipv4_proto;
7109static int hf_ieee80211_tclas_class_mask1_reserved;
7110static int hf_ieee80211_tclas_class_mask1_ipv6_flow;
7111static int hf_ieee80211_tclas_class_mask2_tci;
7112static int hf_ieee80211_tclas_src_mac_addr;
7113static int hf_ieee80211_tclas_dst_mac_addr;
7114static int hf_ieee80211_tclas_ether_type;
7115static int hf_ieee80211_tclas_version;
7116static int hf_ieee80211_tclas_ipv4_src;
7117static int hf_ieee80211_tclas_ipv4_dst;
7118static int hf_ieee80211_tclas_src_port;
7119static int hf_ieee80211_tclas_dst_port;
7120static int hf_ieee80211_tclas_dscp;
7121static int hf_ieee80211_tclas_protocol;
7122static int hf_ieee80211_tclas_ipv6_src;
7123static int hf_ieee80211_tclas_ipv6_dst;
7124static int hf_ieee80211_tclas_flow;
7125static int hf_ieee80211_tclas_tag_type;
7126static int hf_ieee80211_tclas_filter_offset;
7127static int hf_ieee80211_tclas_filter_value;
7128static int hf_ieee80211_tclas_filter_mask;
7129static int hf_ieee80211_tclas4_version;
7130static int hf_ieee80211_tclas_class_mask4_ver;
7131static int hf_ieee80211_tclas_class_mask4_4_src_ip;
7132static int hf_ieee80211_tclas_class_mask4_4_dst_ip;
7133static int hf_ieee80211_tclas_class_mask4_src_port;
7134static int hf_ieee80211_tclas_class_mask4_dst_port;
7135static int hf_ieee80211_tclas_class_mask4_dscp;
7136static int hf_ieee80211_tclas_class_mask4_ipv4_proto;
7137static int hf_ieee80211_tclas_class_mask4_reserved;
7138static int hf_ieee80211_tclas_class_mask4_6_src_ip;
7139static int hf_ieee80211_tclas_class_mask4_6_dst_ip;
7140static int hf_ieee80211_tclas_reserved_bytes;
7141static int hf_ieee80211_tclas_class_mask4_next_hdr;
7142static int hf_ieee80211_tclas_class_mask4_flow_label;
7143static int hf_ieee80211_tclas4_ipv4_src;
7144static int hf_ieee80211_tclas4_ipv4_dst;
7145static int hf_ieee80211_tclas4_src_port;
7146static int hf_ieee80211_tclas4_dst_port;
7147static int hf_ieee80211_tclas4_dscp;
7148static int hf_ieee80211_tclas4_protocol;
7149static int hf_ieee80211_tclas4_reserved;
7150static int hf_ieee80211_tclas4_ipv6_src;
7151static int hf_ieee80211_tclas4_ipv6_dst;
7152static int hf_ieee80211_tclas4_next_hdr;
7153static int hf_ieee80211_tclas4_flow;
7154static int hf_ieee80211_tclas_tclas_8021d_up_pcp;
7155static int hf_ieee80211_tclas_8021q_dei;
7156static int hf_ieee80211_tclas_8021q_vid;
7157
7158static int hf_ieee80211_tclas_class_mask5_up_prio;
7159static int hf_ieee80211_tclas_class_mask5_dei;
7160static int hf_ieee80211_tclas_class_mask5_vid;
7161static int hf_ieee80211_tclas_class_mask5_reserved;
7162
7163static int hf_ieee80211_tclas_class_mask6_a_above;
7164static int hf_ieee80211_tclas_class_mask6_frame_control_match_spec;
7165static int hf_ieee80211_tclas_class_mask6_duration_id_match_spec;
7166static int hf_ieee80211_tclas_class_mask6_address_1_match_spec;
7167static int hf_ieee80211_tclas_class_mask6_address_2_match_spec;
7168static int hf_ieee80211_tclas_class_mask6_address_3_match_spec;
7169static int hf_ieee80211_tclas_class_mask6_sequence_control_spec;
7170static int hf_ieee80211_tclas_class_mask6_address_4_match_spec;
7171static int hf_ieee80211_tclas_class_mask6_qos_control_spec;
7172static int hf_ieee80211_tclas_class_mask6_ht_control_spec;
7173static int hf_ieee80211_tclas_class_mask6_reserved;
7174static int hf_ieee80211_tclas6_frame_control_spec;
7175static int hf_ieee80211_tclas6_frame_control_mask;
7176static int hf_ieee80211_tclas6_duration_spec;
7177static int hf_ieee80211_tclas6_duration_mask;
7178static int hf_ieee80211_tclas6_address_1_spec;
7179static int hf_ieee80211_tclas6_address_1_mask;
7180static int hf_ieee80211_tclas6_address_2_spec;
7181static int hf_ieee80211_tclas6_address_2_mask;
7182static int hf_ieee80211_tclas6_address_3_spec;
7183static int hf_ieee80211_tclas6_address_3_mask;
7184static int hf_ieee80211_tclas6_sequence_control_spec;
7185static int hf_ieee80211_tclas6_sequence_control_mask;
7186static int hf_ieee80211_tclas6_address_4_spec;
7187static int hf_ieee80211_tclas6_address_4_mask;
7188static int hf_ieee80211_tclas6_qos_control_spec;
7189static int hf_ieee80211_tclas6_qos_control_mask;
7190static int hf_ieee80211_tclas6_ht_control_spec;
7191static int hf_ieee80211_tclas6_ht_control_mask;
7192
7193static int hf_ieee80211_tclas_class_mask7_frame_control_match_spec;
7194static int hf_ieee80211_tclas_class_mask7_address_1_sid_match_spec;
7195static int hf_ieee80211_tclas_class_mask7_address_2_match_spec;
7196static int hf_ieee80211_tclas_class_mask7_sequence_control_spec;
7197static int hf_ieee80211_tclas_class_mask7_address_3_match_spec;
7198static int hf_ieee80211_tclas_class_mask7_address_4_match_spec;
7199static int hf_ieee80211_tclas_class_mask7_reserved;
7200static int hf_ieee80211_tclas7_frame_control_spec;
7201static int hf_ieee80211_tclas7_frame_control_mask;
7202static int hf_ieee80211_tclas7_address_1_sid_spec;
7203static int hf_ieee80211_tclas7_address_1_sid_mask;
7204static int hf_ieee80211_tclas7_address_2_spec;
7205static int hf_ieee80211_tclas7_address_2_mask;
7206static int hf_ieee80211_tclas7_sequence_control_spec;
7207static int hf_ieee80211_tclas7_sequence_control_mask;
7208static int hf_ieee80211_tclas7_address_3_spec;
7209static int hf_ieee80211_tclas7_address_3_mask;
7210static int hf_ieee80211_tclas7_address_4_spec;
7211static int hf_ieee80211_tclas7_address_4_mask;
7212
7213static int hf_ieee80211_tclas_class_mask8_frame_control_match_spec;
7214static int hf_ieee80211_tclas_class_mask8_address_1_bssid_match_spec;
7215static int hf_ieee80211_tclas_class_mask8_address_2_sid_match_spec;
7216static int hf_ieee80211_tclas_class_mask8_sequence_control_spec;
7217static int hf_ieee80211_tclas_class_mask8_address_3_match_spec;
7218static int hf_ieee80211_tclas_class_mask8_address_4_match_spec;
7219static int hf_ieee80211_tclas_class_mask8_reserved;
7220static int hf_ieee80211_tclas8_frame_control_spec;
7221static int hf_ieee80211_tclas8_frame_control_mask;
7222static int hf_ieee80211_tclas8_address_1_bssid_spec;
7223static int hf_ieee80211_tclas8_address_1_bssid_mask;
7224static int hf_ieee80211_tclas8_address_2_sid_spec;
7225static int hf_ieee80211_tclas8_address_2_sid_mask;
7226static int hf_ieee80211_tclas8_sequence_control_spec;
7227static int hf_ieee80211_tclas8_sequence_control_mask;
7228static int hf_ieee80211_tclas8_address_3_spec;
7229static int hf_ieee80211_tclas8_address_3_mask;
7230static int hf_ieee80211_tclas8_address_4_spec;
7231static int hf_ieee80211_tclas8_address_4_mask;
7232
7233static int hf_ieee80211_tclas_class_mask9_frame_control_match_spec;
7234static int hf_ieee80211_tclas_class_mask9_address_1_match_spec;
7235static int hf_ieee80211_tclas_class_mask9_address_2_match_spec;
7236static int hf_ieee80211_tclas_class_mask9_sequence_control_spec;
7237static int hf_ieee80211_tclas_class_mask9_reserved;
7238static int hf_ieee80211_tclas9_frame_control_spec;
7239static int hf_ieee80211_tclas9_frame_control_mask;
7240static int hf_ieee80211_tclas9_address_1_spec;
7241static int hf_ieee80211_tclas9_address_1_mask;
7242static int hf_ieee80211_tclas9_address_2_spec;
7243static int hf_ieee80211_tclas9_address_2_mask;
7244static int hf_ieee80211_tclas9_sequence_control_spec;
7245static int hf_ieee80211_tclas9_sequence_control_mask;
7246
7247static int hf_ieee80211_tclas10_protocol_instance;
7248static int hf_ieee80211_tclas10_protocol_num_next_hdr;
7249
7250static int hf_ieee80211_aruba;
7251static int hf_ieee80211_aruba_hb_seq;
7252static int hf_ieee80211_aruba_mtu;
7253
7254static int hf_ieee80211_tag_vendor_oui_type;
7255static int hf_ieee80211_tag_vendor_data;
7256
7257static int hf_ieee80211_symbp_extreme_assoc_clients;
7258static int hf_ieee80211_symbp_extreme_load_kbps;
7259static int hf_ieee80211_symbp_extreme_load_pps;
7260static int hf_ieee80211_symbp_extreme_client_tx_power;
7261static int hf_ieee80211_symbp_extreme_timestamp;
7262
7263static int hf_ieee80211_tag_symbol_proprietary_oui;
7264static int hf_ieee80211_tag_symbol_proprietary_data;
7265
7266/* IEEE Std 802.11z-2010 7.3.2.62 */
7267static int hf_ieee80211_tag_link_id_bssid;
7268static int hf_ieee80211_tag_link_id_init_sta;
7269static int hf_ieee80211_tag_link_id_resp_sta;
7270
7271/* IEEE Std 802.11z-2010 7.3.2.63 */
7272static int hf_ieee80211_tag_wakeup_schedule_offset;
7273static int hf_ieee80211_tag_wakeup_schedule_interval;
7274static int hf_ieee80211_tag_wakeup_schedule_awake_window_slots;
7275static int hf_ieee80211_tag_wakeup_schedule_max_awake_dur;
7276static int hf_ieee80211_tag_wakeup_schedule_idle_count;
7277
7278/* IEEE Std 802.11z-2010 7.3.2.64 */
7279static int hf_ieee80211_tag_channel_switch_timing_switch_time;
7280static int hf_ieee80211_tag_channel_switch_timing_switch_timeout;
7281
7282/* IEEE Std 802.11z-2010 7.3.2.65 */
7283static int hf_ieee80211_tag_pti_control_tid;
7284static int hf_ieee80211_tag_pti_control_sequence_control;
7285
7286/* IEEE Std 802.11z-2010 7.3.2.66 */
7287static int hf_ieee80211_tag_pu_buffer_status_ac_bk;
7288static int hf_ieee80211_tag_pu_buffer_status_ac_be;
7289static int hf_ieee80211_tag_pu_buffer_status_ac_vi;
7290static int hf_ieee80211_tag_pu_buffer_status_ac_vo;
7291
7292/* IEEE Std 802.11r-2008 7.3.2.49 */
7293static int hf_ieee80211_tag_timeout_int_type;
7294static int hf_ieee80211_tag_timeout_int_value;
7295
7296/* Ethertype 89-0d */
7297static int hf_ieee80211_data_encap_payload_type;
7298
7299static int hf_ieee80211_anqp_wfa_subtype;
7300
7301static int hf_ieee80211_dpp_subtype;
7302
7303/* Hotspot 2.0 */
7304static int hf_ieee80211_hs20_indication_dgaf_disabled;
7305static int hf_ieee80211_hs20_indication_pps_mo_id_present;
7306static int hf_ieee80211_hs20_indication_anqp_domain_id_present;
7307static int hf_ieee80211_hs20_reserved;
7308static int hf_ieee80211_hs20_indication_version_number;
7309static int hf_ieee80211_hs20_indication_pps_mo_id;
7310static int hf_ieee80211_hs20_indication_anqp_domain_id;
7311
7312static int hf_ieee80211_hs20_anqp_subtype;
7313static int hf_ieee80211_hs20_anqp_reserved;
7314static int hf_ieee80211_hs20_anqp_payload;
7315static int hf_ieee80211_hs20_anqp_hs_query_list;
7316static int hf_ieee80211_hs20_anqp_hs_capability_list;
7317static int hf_ieee80211_hs20_anqp_ofn_length;
7318static int hf_ieee80211_hs20_anqp_ofn_language;
7319static int hf_ieee80211_hs20_anqp_ofn_name;
7320static int hf_ieee80211_hs20_anqp_wan_metrics_link_status;
7321static int hf_ieee80211_hs20_anqp_wan_metrics_symmetric_link;
7322static int hf_ieee80211_hs20_anqp_wan_metrics_at_capacity;
7323static int hf_ieee80211_hs20_anqp_wan_metrics_reserved;
7324static int hf_ieee80211_hs20_anqp_wan_metrics_downlink_speed;
7325static int hf_ieee80211_hs20_anqp_wan_metrics_uplink_speed;
7326static int hf_ieee80211_hs20_anqp_wan_metrics_downlink_load;
7327static int hf_ieee80211_hs20_anqp_wan_metrics_uplink_load;
7328static int hf_ieee80211_hs20_anqp_wan_metrics_lmd;
7329static int hf_ieee80211_hs20_anqp_cc_proto_ip_proto;
7330static int hf_ieee80211_hs20_anqp_cc_proto_port_num;
7331static int hf_ieee80211_hs20_anqp_cc_proto_status;
7332static int hf_ieee80211_hs20_anqp_nai_hrq_count;
7333static int hf_ieee80211_hs20_anqp_nai_hrq_encoding_type;
7334static int hf_ieee80211_hs20_anqp_nai_hrq_length;
7335static int hf_ieee80211_hs20_anqp_nai_hrq_realm_name;
7336static int hf_ieee80211_hs20_anqp_oper_class_indic;
7337static int hf_ieee80211_hs20_osu_friendly_names_len;
7338static int hf_ieee80211_hs20_osu_friendly_name_length;
7339static int hf_ieee80211_hs20_osu_friendly_name_language;
7340static int hf_ieee80211_hs20_osu_friendly_name_name;
7341static int hf_ieee80211_hs20_osu_server_uri_len;
7342static int hf_ieee80211_hs20_osu_server_uri;
7343static int hf_ieee80211_hs20_osu_method_list_len;
7344static int hf_ieee80211_hs20_osu_method_val;
7345static int hf_ieee80211_hs20_icons_avail_len;
7346static int hf_ieee80211_hs20_osu_providers_list_ssid_len;
7347static int hf_ieee80211_hs20_osu_providers_ssid;
7348static int hf_ieee80211_hs20_osu_providers_count;
7349static int hf_ieee80211_hs20_osu_prov_length;
7350static int hf_ieee80211_hs20_icon_request_filename;
7351static int hf_ieee80211_hs20_icon_binary_file_status;
7352static int hf_ieee80211_hs20_icon_type_length;
7353static int hf_ieee80211_hs20_icon_type;
7354static int hf_ieee80211_hs20_icon_binary_data_len;
7355static int hf_ieee80211_hs20_icon_binary_data;
7356static int hf_ieee80211_osu_icon_avail_width;
7357static int hf_ieee80211_osu_icon_avail_height;
7358static int hf_ieee80211_osu_icon_avail_lang_code;
7359static int hf_ieee80211_osu_icon_avail_icon_type_len;
7360static int hf_ieee80211_osu_icon_avail_icon_type;
7361static int hf_ieee80211_osu_icon_avail_filename_len;
7362static int hf_ieee80211_osu_icon_avail_filename;
7363static int hf_ieee80211_hs20_osu_nai_len;
7364static int hf_ieee80211_hs20_osu_nai;
7365static int hf_ieee80211_hs20_osu_service_desc_len;
7366static int hf_ieee80211_hs20_osu_service_desc_duple_len;
7367static int hf_ieee80211_hs20_osu_service_desc_lang;
7368static int hf_ieee80211_hs20_osu_service_desc;
7369static int hf_ieee80211_hs20_anqp_venue_url_length;
7370static int hf_ieee80211_hs20_anqp_venue_number;
7371static int hf_ieee80211_hs20_anqp_venue_url;
7372static int hf_ieee80211_hs20_anqp_advice_of_charge_length;
7373static int hf_ieee80211_hs20_anqp_advice_of_charge_type;
7374static int hf_ieee80211_hs20_anqp_aoc_nai_realm_encoding;
7375static int hf_ieee80211_hs20_anqp_aoc_nai_realm_len;
7376static int hf_ieee80211_hs20_anqp_aoc_nai_realm;
7377static int hf_ieee80211_hs20_anqp_aoc_plan_len;
7378static int hf_ieee80211_hs20_anqp_aoc_plan_lang;
7379static int hf_ieee80211_hs20_anqp_aoc_plan_curcy;
7380static int hf_ieee80211_hs20_anqp_aoc_plan_information;
7381
7382static int hf_ieee80211_hs20_subscription_remediation_url_len;
7383static int hf_ieee80211_hs20_subscription_remediation_server_url;
7384static int hf_ieee80211_hs20_subscription_remediation_server_method;
7385static int hf_ieee80211_hs20_deauth_reason_code;
7386static int hf_ieee80211_hs20_reauth_delay;
7387static int hf_ieee80211_hs20_deauth_reason_url_len;
7388static int hf_ieee80211_hs20_deauth_imminent_reason_url;
7389
7390/* IEEE Std 802.11ai : FILS Discovery */
7391static int hf_ieee80211_ff_fils_discovery_frame_control;
7392static int hf_ieee80211_ff_fils_discovery_frame_control_ssid_length;
7393static int hf_ieee80211_ff_fils_discovery_frame_control_capability;
7394static int hf_ieee80211_ff_fils_discovery_frame_control_short_ssid;
7395static int hf_ieee80211_ff_fils_discovery_frame_control_ap_csn;
7396static int hf_ieee80211_ff_fils_discovery_frame_control_ano;
7397static int hf_ieee80211_ff_fils_discovery_frame_control_channel_center_frequency;
7398static int hf_ieee80211_ff_fils_discovery_frame_control_primary_channel;
7399static int hf_ieee80211_ff_fils_discovery_frame_control_rsn_info;
7400static int hf_ieee80211_ff_fils_discovery_frame_control_length;
7401static int hf_ieee80211_ff_fils_discovery_frame_control_md;
7402static int hf_ieee80211_ff_fils_discovery_frame_control_reserved;
7403static int hf_ieee80211_ff_fils_discovery_ssid;
7404static int hf_ieee80211_ff_fils_discovery_capability;
7405static int hf_ieee80211_ff_fils_discovery_capability_ess;
7406static int hf_ieee80211_ff_fils_discovery_capability_privacy;
7407static int hf_ieee80211_ff_fils_discovery_capability_bss_operating_channel_width;
7408static int hf_ieee80211_ff_fils_discovery_capability_max_number_of_spatial_streams;
7409static int hf_ieee80211_ff_fils_discovery_capability_reserved;
7410static int hf_ieee80211_ff_fils_discovery_capability_multiple_bssid;
7411static int hf_ieee80211_ff_fils_discovery_capability_phy_index;
7412static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_dsss;
7413static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ofdm;
7414static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ht_vht_tvht;
7415static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_he;
7416static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate;
7417
7418static int hf_ieee80211_ff_fils_discovery_short_ssid;
7419static int hf_ieee80211_ff_fils_discovery_ap_csn;
7420static int hf_ieee80211_ff_fils_discovery_ano;
7421static int hf_ieee80211_ff_fils_discovery_ccfs1;
7422static int hf_ieee80211_ff_fils_discovery_operating_class;
7423static int hf_ieee80211_ff_fils_discovery_primary_channel;
7424static int hf_ieee80211_ff_fils_discovery_rsn_info;
7425static int hf_ieee80211_ff_fils_discovery_length;
7426static int hf_ieee80211_ff_fils_discovery_md;
7427
7428/* IEEE Std 802.11ad */
7429static int hf_ieee80211_block_ack_RBUFCAP;
7430static int hf_ieee80211_cf_response_offset;
7431static int hf_ieee80211_grant_ack_reserved;
7432static int hf_ieee80211_ff_dynamic_allocation;
7433static int hf_ieee80211_ff_TID;
7434static int hf_ieee80211_ff_alloc_type;
7435static int hf_ieee80211_ff_src_aid;
7436static int hf_ieee80211_ff_dest_aid;
7437static int hf_ieee80211_ff_alloc_duration;
7438static int hf_ieee80211_ff_b39;
7439static int hf_ieee80211_ff_ssw;
7440static int hf_ieee80211_ff_ssw_direction;
7441static int hf_ieee80211_ff_ssw_cdown;
7442static int hf_ieee80211_ff_ssw_sector_id;
7443static int hf_ieee80211_ff_ssw_dmg_ant_id;
7444static int hf_ieee80211_ff_ssw_rxss_len;
7445static int hf_ieee80211_ff_bf;
7446static int hf_ieee80211_ff_bf_train;
7447static int hf_ieee80211_ff_bf_is_init;
7448static int hf_ieee80211_ff_bf_is_resp;
7449static int hf_ieee80211_ff_bf_num_sectors;
7450static int hf_ieee80211_ff_bf_num_rx_dmg_ants;
7451static int hf_ieee80211_ff_bf_b12b15;
7452static int hf_ieee80211_ff_bf_rxss_len;
7453static int hf_ieee80211_ff_bf_rxss_rate;
7454static int hf_ieee80211_ff_bf_b10b15;
7455static int hf_ieee80211_addr_nav_da;
7456static int hf_ieee80211_addr_nav_sa;
7457static int hf_ieee80211_ff_sswf;
7458static int hf_ieee80211_ff_sswf_num_rx_dmg_ants;
7459static int hf_ieee80211_ff_sswf_poll_required;
7460static int hf_ieee80211_ff_sswf_total_sectors;
7461static int hf_ieee80211_ff_sswf_reserved1;
7462static int hf_ieee80211_ff_sswf_reserved2;
7463static int hf_ieee80211_ff_sswf_sector_select;
7464static int hf_ieee80211_ff_sswf_dmg_antenna_select;
7465static int hf_ieee80211_ff_sswf_snr_report;
7466static int hf_ieee80211_ff_brp;
7467static int hf_ieee80211_ff_brp_L_RX;
7468static int hf_ieee80211_ff_brp_TX_TRN_REQ;
7469static int hf_ieee80211_ff_brp_MID_REQ;
7470static int hf_ieee80211_ff_brp_BC_REQ;
7471static int hf_ieee80211_ff_brp_MID_GRANT;
7472static int hf_ieee80211_ff_brp_BC_GRANT;
7473static int hf_ieee80211_ff_brp_chan_FBCK_CAP;
7474static int hf_ieee80211_ff_brp_tx_sector;
7475static int hf_ieee80211_ff_brp_other_aid;
7476static int hf_ieee80211_ff_brp_tx_antenna;
7477static int hf_ieee80211_ff_brp_reserved;
7478static int hf_ieee80211_ff_blm;
7479static int hf_ieee80211_ff_blm_unit_index;
7480static int hf_ieee80211_ff_blm_maint_value;
7481static int hf_ieee80211_ff_blm_is_master;
7482static int hf_ieee80211_ff_bic;
7483static int hf_ieee80211_ff_bic_cc_present;
7484static int hf_ieee80211_ff_bic_discovery_mode;
7485static int hf_ieee80211_ff_bic_next_beacon;
7486static int hf_ieee80211_ff_bic_ati_present;
7487static int hf_ieee80211_ff_bic_abft_len;
7488static int hf_ieee80211_ff_bic_fss;
7489static int hf_ieee80211_ff_bic_is_resp;
7490static int hf_ieee80211_ff_bic_next_abft;
7491static int hf_ieee80211_ff_bic_frag_txss;
7492static int hf_ieee80211_ff_bic_txss_span;
7493static int hf_ieee80211_ff_bic_NBI_abft;
7494static int hf_ieee80211_ff_bic_abft_count;
7495static int hf_ieee80211_ff_bic_nabft;
7496static int hf_ieee80211_ff_bic_pcp;
7497static int hf_ieee80211_ff_bic_reserved;
7498static int * const ieee80211_ff_bic_fields[] = {
7499 &hf_ieee80211_ff_bic_cc_present,
7500 &hf_ieee80211_ff_bic_discovery_mode,
7501 &hf_ieee80211_ff_bic_next_beacon,
7502 &hf_ieee80211_ff_bic_ati_present,
7503 &hf_ieee80211_ff_bic_abft_len,
7504 &hf_ieee80211_ff_bic_fss,
7505 &hf_ieee80211_ff_bic_is_resp,
7506 &hf_ieee80211_ff_bic_next_abft,
7507 &hf_ieee80211_ff_bic_frag_txss,
7508 &hf_ieee80211_ff_bic_txss_span,
7509 &hf_ieee80211_ff_bic_NBI_abft,
7510 &hf_ieee80211_ff_bic_abft_count,
7511 &hf_ieee80211_ff_bic_nabft,
7512 &hf_ieee80211_ff_bic_pcp,
7513 &hf_ieee80211_ff_bic_reserved,
7514 NULL((void*)0)
7515};
7516static int hf_ieee80211_ff_dmg_params;
7517static int hf_ieee80211_ff_dmg_params_bss;
7518static int hf_ieee80211_ff_dmg_params_cbap_only;
7519static int hf_ieee80211_ff_dmg_params_cbap_src;
7520static int hf_ieee80211_ff_dmg_params_privacy;
7521static int hf_ieee80211_ff_dmg_params_policy;
7522static int hf_ieee80211_ff_dmg_params_spec_mgmt;
7523static int hf_ieee80211_ff_dmg_params_radio_measure;
7524static int hf_ieee80211_ff_cc;
7525static int hf_ieee80211_ff_cc_abft_resp_addr;
7526static int hf_ieee80211_ff_cc_sp_duration;
7527static int hf_ieee80211_ff_cc_cluster_id;
7528static int hf_ieee80211_ff_cc_role;
7529static int hf_ieee80211_ff_cc_max_mem;
7530static int hf_ieee80211_ff_dmg_action_code;
7531static int hf_ieee80211_ff_dmg_pwr_mgmt;
7532static int hf_ieee80211_ff_subject_address;
7533static int hf_ieee80211_ff_handover_reason;
7534static int hf_ieee80211_ff_handover_remaining_bi;
7535static int hf_ieee80211_ff_handover_result;
7536static int hf_ieee80211_ff_handover_reject_reason;
7537static int hf_ieee80211_ff_destination_reds_aid;
7538static int hf_ieee80211_ff_destination_aid;
7539static int hf_ieee80211_ff_relay_aid;
7540static int hf_ieee80211_ff_source_aid;
7541static int hf_ieee80211_ff_timing_offset;
7542static int hf_ieee80211_ff_sampling_frequency_offset;
7543static int hf_ieee80211_ff_relay_operation_type;
7544static int hf_ieee80211_ff_peer_sta_aid;
7545static int hf_ieee80211_ff_snr;
7546static int hf_ieee80211_ff_internal_angle;
7547static int hf_ieee80211_ff_recommend;
7548static int hf_ieee80211_ff_unprotected_dmg_action_code;
7549static int hf_ieee80211_ff_fst_action_code;
7550static int hf_ieee80211_ff_robust_av_streaming_action_code;
7551static int hf_ieee80211_ff_llt;
7552static int hf_ieee80211_ff_fsts_id;
7553static int hf_ieee80211_ff_mmpdu_len;
7554static int hf_ieee80211_ff_mmpdu_ctrl;
7555static int hf_ieee80211_ff_oct_mmpdu;
7556static int hf_ieee80211_ff_scs_scsid;
7557static int hf_ieee80211_ff_scs_status;
7558static int hf_ieee80211_ff_scs_response_count;
7559
7560#if 0
7561static int hf_ieee80211_ff_rcsi;
7562static int hf_ieee80211_ff_rcsi_aid;
7563#endif
7564static int hf_ieee80211_ff_band_id;
7565static int hf_ieee80211_tag_relay_support;
7566static int hf_ieee80211_tag_relay_use;
7567static int hf_ieee80211_tag_relay_permission;
7568static int hf_ieee80211_tag_AC_power;
7569static int hf_ieee80211_tag_relay_prefer;
7570static int hf_ieee80211_tag_duplex;
7571static int hf_ieee80211_tag_cooperation;
7572static int hf_ieee80211_tag_move;
7573static int hf_ieee80211_tag_size;
7574static int hf_ieee80211_tag_tbtt_offset;
7575static int hf_ieee80211_tag_bi_duration;
7576static int hf_ieee80211_tag_dmg_capa_sta_addr;
7577static int hf_ieee80211_tag_dmg_capa_aid;
7578static int hf_ieee80211_tag_reverse_direction;
7579static int hf_ieee80211_tag_hlts;
7580static int hf_ieee80211_tag_tpc;
7581static int hf_ieee80211_tag_spsh;
7582static int hf_ieee80211_tag_rx_antenna;
7583static int hf_ieee80211_tag_fast_link;
7584static int hf_ieee80211_tag_num_sectors;
7585static int hf_ieee80211_tag_rxss_length;
7586static int hf_ieee80211_tag_reciprocity;
7587static int hf_ieee80211_tag_max_ampdu_exp;
7588static int hf_ieee80211_tag_min_mpdu_spacing;
7589static int hf_ieee80211_tag_ba_flow_control;
7590static int hf_ieee80211_tag_max_sc_rx_mcs;
7591static int hf_ieee80211_tag_max_ofdm_rx_mcs;
7592static int hf_ieee80211_tag_max_sc_tx_mcs;
7593static int hf_ieee80211_tag_max_ofdm_tx_mcs;
7594static int hf_ieee80211_tag_low_power_supported;
7595static int hf_ieee80211_tag_code_rate;
7596static int hf_ieee80211_tag_dtp;
7597static int hf_ieee80211_tag_appdu_supp;
7598static int hf_ieee80211_tag_heartbeat;
7599static int hf_ieee80211_tag_other_aid;
7600static int hf_ieee80211_tag_pattern_recip;
7601static int hf_ieee80211_tag_heartbeat_elapsed;
7602static int hf_ieee80211_tag_grant_ack_supp;
7603static int hf_ieee80211_tag_RXSSTxRate_supp;
7604static int hf_ieee80211_tag_pcp_tddti;
7605static int hf_ieee80211_tag_pcp_PSA;
7606static int hf_ieee80211_tag_pcp_handover;
7607static int hf_ieee80211_tag_pcp_max_assoc;
7608static int hf_ieee80211_tag_pcp_power_src;
7609static int hf_ieee80211_tag_pcp_decenter;
7610static int hf_ieee80211_tag_pcp_forwarding;
7611static int hf_ieee80211_tag_pcp_center;
7612static int hf_ieee80211_tag_sta_beam_track;
7613static int hf_ieee80211_tag_ext_sc_mcs_max_tx;
7614static int hf_ieee80211_tag_ext_sc_mcs_tx_code_7_8;
7615static int hf_ieee80211_tag_ext_sc_mcs_max_rx;
7616static int hf_ieee80211_tag_ext_sc_mcs_rx_code_7_8;
7617static int hf_ieee80211_tag_max_basic_sf_amsdu;
7618static int hf_ieee80211_tag_max_short_sf_amsdu;
7619static int hf_ieee80211_tag_PSRSI;
7620static int hf_ieee80211_tag_min_BHI_duration;
7621static int hf_ieee80211_tag_brdct_sta_info_dur;
7622static int hf_ieee80211_tag_assoc_resp_confirm_time;
7623static int hf_ieee80211_tag_min_pp_duration;
7624static int hf_ieee80211_tag_SP_idle_timeout;
7625static int hf_ieee80211_tag_max_lost_beacons;
7626static int hf_ieee80211_tag_type;
7627static int hf_ieee80211_tag_tap1;
7628static int hf_ieee80211_tag_state1;
7629static int hf_ieee80211_tag_tap2;
7630static int hf_ieee80211_tag_state2;
7631static int hf_ieee80211_tag_allocation_id;
7632static int hf_ieee80211_tag_allocation_type;
7633static int hf_ieee80211_tag_pseudo_static;
7634static int hf_ieee80211_tag_truncatable;
7635static int hf_ieee80211_tag_extendable;
7636static int hf_ieee80211_tag_pcp_active;
7637static int hf_ieee80211_tag_lp_sc_used;
7638static int hf_ieee80211_tag_src_aid;
7639static int hf_ieee80211_tag_dest_aid;
7640static int hf_ieee80211_tag_alloc_start;
7641static int hf_ieee80211_tag_alloc_block_duration;
7642static int hf_ieee80211_tag_num_blocks;
7643static int hf_ieee80211_tag_alloc_block_period;
7644static int hf_ieee80211_tag_aid;
7645static int hf_ieee80211_tag_cbap;
7646static int hf_ieee80211_tag_pp_avail;
7647static int hf_ieee80211_tag_next_ati_start_time;
7648static int hf_ieee80211_tag_next_ati_duration;
7649static int hf_ieee80211_tag_old_bssid;
7650static int hf_ieee80211_tag_new_pcp_addr;
7651static int hf_ieee80211_tag_bssid;
7652static int hf_ieee80211_tag_duplex_relay;
7653static int hf_ieee80211_tag_cooperation_relay;
7654static int hf_ieee80211_tag_tx_mode;
7655static int hf_ieee80211_tag_link_change_interval;
7656static int hf_ieee80211_tag_data_sensing_time;
7657static int hf_ieee80211_tag_first_period;
7658static int hf_ieee80211_tag_second_period;
7659static int hf_ieee80211_tag_initiator;
7660static int hf_ieee80211_tag_tx_train_res;
7661static int hf_ieee80211_tag_rx_train_res;
7662static int hf_ieee80211_tag_tx_trn_ok;
7663static int hf_ieee80211_tag_txss_fbck_req;
7664static int hf_ieee80211_tag_bs_fbck;
7665static int hf_ieee80211_tag_bs_fbck_antenna_id;
7666static int hf_ieee80211_tag_snr_requested;
7667static int hf_ieee80211_tag_channel_measurement_requested;
7668static int hf_ieee80211_tag_number_of_taps_requested;
7669static int hf_ieee80211_tag_sector_id_order_req;
7670static int hf_ieee80211_tag_snr_present;
7671static int hf_ieee80211_tag_channel_measurement_present;
7672static int hf_ieee80211_tag_tap_delay_present;
7673static int hf_ieee80211_tag_number_of_taps_present;
7674static int hf_ieee80211_tag_number_of_measurement;
7675static int hf_ieee80211_tag_sector_id_order_present;
7676static int hf_ieee80211_tag_number_of_beams;
7677static int hf_ieee80211_tag_mid_extension;
7678static int hf_ieee80211_tag_capability_request;
7679static int hf_ieee80211_tag_beam_refine_reserved;
7680static int hf_ieee80211_tag_nextpcp_list;
7681static int hf_ieee80211_tag_nextpcp_token;
7682static int hf_ieee80211_tag_remaining_BI;
7683static int hf_ieee80211_tag_request_token;
7684static int hf_ieee80211_tag_bi_start_time;
7685static int hf_ieee80211_tag_sleep_cycle;
7686static int hf_ieee80211_tag_num_awake_bis;
7687static int hf_ieee80211_tag_tspec_allocation_id;
7688static int hf_ieee80211_tag_tspec_allocation_type;
7689static int hf_ieee80211_tag_tspec_allocation_format;
7690static int hf_ieee80211_tag_tspec_pseudo_static;
7691static int hf_ieee80211_tag_tspec_truncatable;
7692static int hf_ieee80211_tag_tspec_extendable;
7693static int hf_ieee80211_tag_tspec_lp_sc_used;
7694static int hf_ieee80211_tag_tspec_up;
7695static int hf_ieee80211_tag_tspec_dest_aid;
7696static int hf_ieee80211_tag_tspec_allocation_period;
7697static int hf_ieee80211_tag_tspec_min_allocation;
7698static int hf_ieee80211_tag_tspec_max_allocation;
7699static int hf_ieee80211_tag_tspec_min_duration;
7700static int hf_ieee80211_tag_tspec_num_of_constraints;
7701static int hf_ieee80211_tag_tspec_tsconst_start_time;
7702static int hf_ieee80211_tag_tspec_tsconst_duration;
7703static int hf_ieee80211_tag_tspec_tsconst_period;
7704static int hf_ieee80211_tag_tspec_tsconst_interferer_mac;
7705static int hf_ieee80211_tag_channel_measurement_feedback_relative_I;
7706static int hf_ieee80211_tag_channel_measurement_feedback_relative_Q;
7707static int hf_ieee80211_tag_channel_measurement_feedback_tap_delay;
7708static int hf_ieee80211_tag_channel_measurement_feedback_sector_id;
7709static int hf_ieee80211_tag_channel_measurement_feedback_antenna_id;
7710static int hf_ieee80211_tag_awake_window;
7711static int hf_ieee80211_tag_addba_ext_no_frag;
7712static int hf_ieee80211_tag_addba_ext_he_fragmentation_operation;
7713static int hf_ieee80211_tag_addba_ext_reserved;
7714static int hf_ieee80211_tag_addba_ext_buffer_size;
7715static int hf_ieee80211_tag_multi_band_ctrl_sta_role;
7716static int hf_ieee80211_tag_multi_band_ctrl_addr_present;
7717static int hf_ieee80211_tag_multi_band_ctrl_cipher_present;
7718static int hf_ieee80211_tag_multi_band_oper_class;
7719static int hf_ieee80211_tag_multi_band_channel_number;
7720static int hf_ieee80211_tag_multi_band_tsf_offset;
7721static int hf_ieee80211_tag_multi_band_conn_ap;
7722static int hf_ieee80211_tag_multi_band_conn_pcp;
7723static int hf_ieee80211_tag_multi_band_conn_dls;
7724static int hf_ieee80211_tag_multi_band_conn_tdls;
7725static int hf_ieee80211_tag_multi_band_conn_ibss;
7726static int hf_ieee80211_tag_multi_band_fst_timeout;
7727static int hf_ieee80211_tag_multi_band_sta_mac;
7728static int hf_ieee80211_tag_activity;
7729static int hf_ieee80211_tag_dmg_link_adapt_mcs;
7730static int hf_ieee80211_tag_dmg_link_adapt_link_margin;
7731static int hf_ieee80211_tag_ref_timestamp;
7732static int hf_ieee80211_tag_switching_stream_non_qos;
7733static int hf_ieee80211_tag_switching_stream_param_num;
7734static int hf_ieee80211_tag_switching_stream_old_tid;
7735static int hf_ieee80211_tag_switching_stream_old_direction;
7736static int hf_ieee80211_tag_switching_stream_new_tid;
7737static int hf_ieee80211_tag_switching_stream_new_direction;
7738static int hf_ieee80211_tag_switching_stream_new_valid_id;
7739static int hf_ieee80211_tag_switching_stream_llt_type;
7740
7741static int hf_ieee80211_mysterious_extra_stuff;
7742
7743static int hf_ieee80211_mscs_descriptor_type;
7744static int hf_ieee80211_mscs_user_prio_control_reserved;
7745static int hf_ieee80211_user_prio_bitmap;
7746static int hf_ieee80211_user_prio_bitmap_bit0;
7747static int hf_ieee80211_user_prio_bitmap_bit1;
7748static int hf_ieee80211_user_prio_bitmap_bit2;
7749static int hf_ieee80211_user_prio_bitmap_bit3;
7750static int hf_ieee80211_user_prio_bitmap_bit4;
7751static int hf_ieee80211_user_prio_bitmap_bit5;
7752static int hf_ieee80211_user_prio_bitmap_bit6;
7753static int hf_ieee80211_user_prio_bitmap_bit7;
7754static int hf_ieee80211_user_prio_limit;
7755static int hf_ieee80211_user_prio_reserved;
7756static int hf_ieee80211_stream_timeout_reserved;
7757static int hf_ieee80211_stream_timeout;
7758static int hf_ieee80211_mscs_subelement_id;
7759static int hf_ieee80211_mscs_subelement_len;
7760static int hf_ieee80211_mscs_subelement_data;
7761
7762static int hf_ieee80211_intra_access_prio;
7763static int hf_ieee80211_intra_access_prio_user_prio;
7764static int hf_ieee80211_intra_access_prio_alt_queue;
7765static int hf_ieee80211_intra_access_prio_drop_elig;
7766static int hf_ieee80211_intra_access_prio_reserved;
7767
7768static int hf_ieee80211_scs_descriptor_scsid;
7769static int hf_ieee80211_scs_descriptor_type;
7770
7771static int hf_ieee80211_esp_access_category;
7772static int hf_ieee80211_esp_reserved;
7773static int hf_ieee80211_esp_data_format;
7774static int hf_ieee80211_esp_ba_windows_size;
7775static int hf_ieee80211_esp_est_air_time_frac;
7776static int hf_ieee80211_esp_data_ppdu_duration_target;
7777static int hf_ieee80211_estimated_service_params;
7778
7779static int hf_ieee80211_fcg_new_channel_number;
7780static int hf_ieee80211_fcg_extra_info;
7781static int hf_ieee80211_sae_password_identifier;
7782
7783static int hf_ieee80211_sae_anti_clogging_token;
7784
7785static int hf_ieee80211_tag_fils_indication_info_nr_pk;
7786static int hf_ieee80211_tag_fils_indication_info_nr_realm;
7787static int hf_ieee80211_tag_fils_indication_info_ip_config;
7788static int hf_ieee80211_tag_fils_indication_info_cache_id_included;
7789static int hf_ieee80211_tag_fils_indication_info_hessid_included;
7790static int hf_ieee80211_tag_fils_indication_info_ska_without_pfs;
7791static int hf_ieee80211_tag_fils_indication_info_ska_with_pfs;
7792static int hf_ieee80211_tag_fils_indication_info_pka;
7793static int hf_ieee80211_tag_fils_indication_info_reserved;
7794static int hf_ieee80211_tag_fils_indication_cache_identifier;
7795static int hf_ieee80211_tag_fils_indication_hessid;
7796static int hf_ieee80211_tag_fils_indication_realm_list;
7797static int hf_ieee80211_tag_fils_indication_realm_identifier;
7798static int hf_ieee80211_tag_fils_indication_public_key_list;
7799static int hf_ieee80211_tag_fils_indication_public_key_type;
7800static int hf_ieee80211_tag_fils_indication_public_key_length;
7801static int hf_ieee80211_tag_fils_indication_public_key_indicator;
7802
7803static int hf_ieee80211_qos_mgmt_attribute_id;
7804static int hf_ieee80211_qos_mgmt_attribute_len;
7805static int hf_ieee80211_qos_mgmt_start_port_range;
7806static int hf_ieee80211_qos_mgmt_end_port_range;
7807static int hf_ieee80211_qos_mgmt_dscp_pol_id;
7808static int hf_ieee80211_qos_mgmt_dscp_pol_req_type;
7809static int hf_ieee80211_qos_mgmt_dscp_pol_dscp;
7810static int hf_ieee80211_qos_mgmt_domain_name;
7811static int hf_ieee80211_qos_mgmt_unknown_attr;
7812
7813static int hf_ieee80211_ext_tag;
7814static int hf_ieee80211_ext_tag_number;
7815static int hf_ieee80211_ext_tag_length;
7816static int hf_ieee80211_ext_tag_data;
7817
7818static int hf_ieee80211_fils_req_params_parameter_control_bitmap;
7819static int hf_ieee80211_fils_req_params_fils_criteria_present;
7820static int hf_ieee80211_fils_req_params_max_delay_limit_present;
7821static int hf_ieee80211_fils_req_params_minimum_data_rate_present;
7822static int hf_ieee80211_fils_req_params_rcpi_limit_present;
7823static int hf_ieee80211_fils_req_params_oui_response_criteria_present;
7824static int hf_ieee80211_fils_req_params_reserved;
7825static int hf_ieee80211_fils_req_params_max_channel_time;
7826static int hf_ieee80211_fils_req_params_fils_criteria;
7827static int hf_ieee80211_fils_req_params_fils_criteria_bss_delay;
7828static int hf_ieee80211_fils_req_params_fils_criteria_phy_support;
7829static int hf_ieee80211_fils_req_params_fils_criteria_reserved;
7830static int hf_ieee80211_fils_req_params_max_delay_limit;
7831static int hf_ieee80211_fils_req_params_minimum_data_rate;
7832static int hf_ieee80211_fils_req_params_rcpi_limit;
7833static int hf_ieee80211_fils_req_params_oui_response_criteria;
7834
7835static int hf_ieee80211_fils_session;
7836static int hf_ieee80211_fils_encrypted_data;
7837static int hf_ieee80211_fils_nonce;
7838
7839/* wfa 60g ie tree */
7840static int hf_ieee80211_wfa_60g_attr;
7841static int hf_ieee80211_wfa_60g_attr_id;
7842static int hf_ieee80211_wfa_60g_attr_len;
7843
7844static int hf_ieee80211_wfa_60g_attr_cap_sta_mac_addr;
7845static int hf_ieee80211_wfa_60g_attr_cap_recv_amsdu_frames;
7846static int hf_ieee80211_wfa_60g_attr_cap_reserved;
7847
7848/* ************************************************************************* */
7849/* 802.11AX fields */
7850/* ************************************************************************* */
7851static int hf_ieee80211_he_mac_capabilities;
7852static int hf_ieee80211_he_htc_he_support;
7853static int hf_ieee80211_he_twt_requester_support;
7854static int hf_ieee80211_he_twt_responder_support;
7855static int hf_ieee80211_he_dynamic_fragmentation_support;
7856static int hf_ieee80211_he_max_number_fragmented_msdus;
7857static int hf_ieee80211_he_min_fragment_size;
7858static int hf_ieee80211_he_trigger_frame_mac_padding_dur;
7859static int hf_ieee80211_he_multi_tid_aggregation_rx_support;
7860static int hf_ieee80211_he_he_link_adaptation_support;
7861static int hf_ieee80211_he_all_ack_support;
7862static int hf_ieee80211_he_trs_support;
7863static int hf_ieee80211_he_bsr_support;
7864static int hf_ieee80211_he_broadcast_twt_support;
7865static int hf_ieee80211_he_32_bit_ba_bitmap_support;
7866static int hf_ieee80211_he_mu_cascading_support;
7867static int hf_ieee80211_he_ack_enabled_aggregation_support;
7868static int hf_ieee80211_he_reserved_b24;
7869static int hf_ieee80211_he_om_control_support;
7870static int hf_ieee80211_he_ofdma_ra_support;
7871static int hf_ieee80211_he_max_a_mpdu_length_exponent_ext;
7872static int hf_ieee80211_he_a_msdu_fragmentation_support;
7873static int hf_ieee80211_he_flexible_twt_schedule_support;
7874static int hf_ieee80211_he_rx_control_frame_to_multibss;
7875static int hf_ieee80211_he_bsrp_bqrp_a_mpdu_aggregation;
7876static int hf_ieee80211_he_qtp_support;
7877static int hf_ieee80211_he_bqr_support;
7878static int hf_ieee80211_he_psr_responder;
7879static int hf_ieee80211_he_ndp_feedback_report_support;
7880static int hf_ieee80211_he_ops_support;
7881static int hf_ieee80211_he_a_msdu_in_a_mpdu_support;
7882static int hf_ieee80211_he_multi_tid_aggregation_tx_support;
7883static int hf_ieee80211_he_subchannel_selective_trans_support;
7884static int hf_ieee80211_he_2_996_tone_ru_support;
7885static int hf_ieee80211_he_om_control_ul_mu_data_disable_rx_support;
7886static int hf_ieee80211_he_dynamic_sm_power_save;
7887static int hf_ieee80211_he_punctured_sounding_support;
7888static int hf_ieee80211_he_ht_and_vht_trigger_frame_rx_support;
7889static int hf_ieee80211_he_reserved_bit_18;
7890static int hf_ieee80211_he_reserved_bit_19;
7891static int hf_ieee80211_he_reserved_bit_25;
7892static int hf_ieee80211_he_reserved_bit_29;
7893static int hf_ieee80211_he_reserved_bit_34;
7894static int hf_ieee80211_he_reserved_bits_5_7;
7895static int hf_ieee80211_he_reserved_bits_8_9;
7896static int hf_ieee80211_he_reserved_bits_15_16;
7897static int hf_ieee80211_he_phy_reserved_b0;
7898static int hf_ieee80211_he_phy_cap_reserved_b0;
7899static int hf_ieee80211_he_phy_chan_width_set;
7900static int hf_ieee80211_he_40mhz_channel_2_4ghz;
7901static int hf_ieee80211_he_40_and_80_mhz_5ghz;
7902static int hf_ieee80211_he_160_mhz_5ghz;
7903static int hf_ieee80211_he_160_80_plus_80_mhz_5ghz;
7904static int hf_ieee80211_he_242_tone_rus_in_2_4ghz;
7905static int hf_ieee80211_he_242_tone_rus_in_5ghz;
7906static int hf_ieee80211_he_5ghz_b0_reserved;
7907static int hf_ieee80211_he_5ghz_b4_reserved;
7908static int hf_ieee80211_he_24ghz_b1_reserved;
7909static int hf_ieee80211_he_24ghz_b2_reserved;
7910static int hf_ieee80211_he_24ghz_b3_reserved;
7911static int hf_ieee80211_he_24ghz_b5_reserved;
7912static int hf_ieee80211_he_chan_width_reserved;
7913static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_1_ss;
7914static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_2_ss;
7915static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_3_ss;
7916static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_4_ss;
7917static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_5_ss;
7918static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_6_ss;
7919static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_7_ss;
7920static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_8_ss;
7921static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_1_ss;
7922static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_2_ss;
7923static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_3_ss;
7924static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_4_ss;
7925static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_5_ss;
7926static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_6_ss;
7927static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_7_ss;
7928static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_8_ss;
7929static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_1_ss;
7930static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_2_ss;
7931static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_3_ss;
7932static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_4_ss;
7933static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_5_ss;
7934static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_6_ss;
7935static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_7_ss;
7936static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_8_ss;
7937static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_1_ss;
7938static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_2_ss;
7939static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_3_ss;
7940static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_4_ss;
7941static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_5_ss;
7942static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_6_ss;
7943static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_7_ss;
7944static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_8_ss;
7945static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_1_ss;
7946static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_2_ss;
7947static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_3_ss;
7948static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_4_ss;
7949static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_5_ss;
7950static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_6_ss;
7951static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_7_ss;
7952static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_8_ss;
7953static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_1_ss;
7954static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_2_ss;
7955static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_3_ss;
7956static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_4_ss;
7957static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_5_ss;
7958static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_6_ss;
7959static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_7_ss;
7960static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_8_ss;
7961static int hf_ieee80211_he_rx_he_mcs_map_lte_80;
7962static int hf_ieee80211_he_tx_he_mcs_map_lte_80;
7963static int hf_ieee80211_he_rx_he_mcs_map_160;
7964static int hf_ieee80211_he_tx_he_mcs_map_160;
7965static int hf_ieee80211_he_rx_he_mcs_map_80_80;
7966static int hf_ieee80211_he_tx_he_mcs_map_80_80;
7967static int hf_ieee80211_he_ppe_thresholds_nss;
7968static int hf_ieee80211_he_ppe_thresholds_ru_index_bitmask;
7969static int hf_ieee80211_he_ppe_ppet16;
7970static int hf_ieee80211_he_ppe_ppet8;
7971static int hf_ieee80211_he_phy_b8_to_b23;
7972static int hf_ieee80211_he_phy_cap_punctured_preamble_rx;
7973static int hf_ieee80211_he_phy_cap_device_class;
7974static int hf_ieee80211_he_phy_cap_ldpc_coding_in_payload;
7975static int hf_ieee80211_he_phy_cap_he_su_ppdu_1x_he_ltf_08us;
7976static int hf_ieee80211_he_phy_cap_midamble_tx_rx_max_nsts;
7977static int hf_ieee80211_he_phy_cap_ndp_with_4x_he_ltf_32us;
7978static int hf_ieee80211_he_phy_cap_stbc_tx_lt_80mhz;
7979static int hf_ieee80211_he_phy_cap_stbc_rx_lt_80mhz;
7980static int hf_ieee80211_he_phy_cap_doppler_tx;
7981static int hf_ieee80211_he_phy_cap_doppler_rx;
7982static int hf_ieee80211_he_phy_cap_full_bw_ul_mu_mimo;
7983static int hf_ieee80211_he_phy_cap_partial_bw_ul_mu_mimo;
7984static int hf_ieee80211_he_phy_b24_to_b39;
7985static int hf_ieee80211_he_phy_cap_dcm_max_constellation_tx;
7986static int hf_ieee80211_he_phy_cap_dcm_max_nss_tx;
7987static int hf_ieee80211_he_phy_cap_dcm_max_constellation_rx;
7988static int hf_ieee80211_he_phy_cap_dcm_max_nss_rx;
7989static int hf_ieee80211_he_phy_cap_rx_partial_bw_su_20mhz_he_mu_ppdu;
7990static int hf_ieee80211_he_phy_cap_su_beamformer;
7991static int hf_ieee80211_he_phy_cap_su_beamformee;
7992static int hf_ieee80211_he_phy_cap_mu_beamformer;
7993static int hf_ieee80211_he_phy_cap_beamformee_sts_lte_80mhz;
7994static int hf_ieee80211_he_phy_cap_beamformee_sts_gt_80mhz;
7995static int hf_ieee80211_he_phy_b40_to_b55;
7996static int hf_ieee80211_he_phy_cap_number_of_sounding_dims_lte_80;
7997static int hf_ieee80211_he_phy_cap_number_of_sounding_dims_gt_80;
7998static int hf_ieee80211_he_phy_cap_ng_eq_16_su_fb;
7999static int hf_ieee80211_he_phy_cap_ng_eq_16_mu_fb;
8000static int hf_ieee80211_he_phy_cap_codebook_size_eq_4_2_fb;
8001static int hf_ieee80211_he_phy_cap_codebook_size_eq_7_5_fb;
8002static int hf_ieee80211_he_phy_cap_triggered_su_beamforming_fb;
8003static int hf_ieee80211_he_phy_cap_triggered_mu_beamforming_fb;
8004static int hf_ieee80211_he_phy_cap_triggered_cqi_fb;
8005static int hf_ieee80211_he_phy_cap_partial_bw_extended_range;
8006static int hf_ieee80211_he_phy_cap_partial_bw_dl_mu_mimo;
8007static int hf_ieee80211_he_phy_cap_ppe_threshold_present;
8008static int hf_ieee80211_he_phy_b56_to_b71;
8009static int hf_ieee80211_he_phy_cap_psr_based_sr_support;
8010static int hf_ieee80211_he_phy_cap_power_boost_factor_ar_support;
8011static int hf_ieee80211_he_phy_cap_he_su_ppdu_etc_gi;
8012static int hf_ieee80211_he_phy_cap_max_nc;
8013static int hf_ieee80211_he_phy_cap_stbc_tx_gt_80_mhz;
8014static int hf_ieee80211_he_phy_cap_stbc_rx_gt_80_mhz;
8015static int hf_ieee80211_he_phy_cap_he_er_su_ppdu_4xxx_gi;
8016static int hf_ieee80211_he_phy_cap_20mhz_in_40mhz_24ghz_band;
8017static int hf_ieee80211_he_phy_cap_20mhz_in_160_80p80_ppdu;
8018static int hf_ieee80211_he_phy_cap_80mgz_in_160_80p80_ppdu;
8019static int hf_ieee80211_he_phy_cap_he_er_su_ppdu_1xxx_gi;
8020static int hf_ieee80211_he_phy_cap_midamble_tx_rx_2x_xxx_ltf;
8021static int hf_ieee80211_he_phy_b72_to_b87;
8022static int hf_ieee80211_he_phy_cap_dcm_max_ru;
8023static int hf_ieee80211_he_phy_cap_longer_than_16_he_sigb_ofdm_symbol_support;
8024static int hf_ieee80211_he_phy_cap_non_triggered_cqi_feedback;
8025static int hf_ieee80211_he_phy_cap_tx_1024_qam_242_tone_ru_support;
8026static int hf_ieee80211_he_phy_cap_rx_1024_qam_242_tone_ru_support;
8027static int hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_compressed_sigb;
8028static int hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_non_compressed_sigb;
8029static int hf_ieee80211_he_phy_cap_nominal_packet_padding;
8030static int hf_ieee80211_he_phy_cap_he_mu_ppdu_ru_rx_max;
8031static int hf_ieee80211_he_phy_cap_b81_b87_reserved;
8032static int hf_ieee80211_he_operation_parameter;
8033static int hf_ieee80211_he_operation_default_pe_duration;
8034static int hf_ieee80211_he_operation_twt_required;
8035static int hf_ieee80211_he_operation_txop_duration_rts_threshold;
8036static int hf_ieee80211_he_operation_vht_operation_information_present;
8037static int hf_ieee80211_he_operation_co_hosted_bss;
8038static int hf_ieee80211_he_operation_er_su_disable;
8039static int hf_ieee80211_he_operation_6ghz_operation_information_present;
8040static int hf_ieee80211_he_operation_reserved_b16_b23;
8041static int hf_ieee80211_he_bss_color_information;
8042static int hf_ieee80211_he_bss_color_info_bss_color;
8043static int hf_ieee80211_he_bss_color_partial_bss_color;
8044static int hf_ieee80211_he_bss_color_bss_color_disabled;
8045static int hf_ieee80211_he_operation_basic_mcs;
8046static int hf_ieee80211_he_oper_max_he_mcs_for_1_ss;
8047static int hf_ieee80211_he_oper_max_he_mcs_for_2_ss;
8048static int hf_ieee80211_he_oper_max_he_mcs_for_3_ss;
8049static int hf_ieee80211_he_oper_max_he_mcs_for_4_ss;
8050static int hf_ieee80211_he_oper_max_he_mcs_for_5_ss;
8051static int hf_ieee80211_he_oper_max_he_mcs_for_6_ss;
8052static int hf_ieee80211_he_oper_max_he_mcs_for_7_ss;
8053static int hf_ieee80211_he_oper_max_he_mcs_for_8_ss;
8054static int hf_ieee80211_he_operation_channel_width;
8055static int hf_ieee80211_he_operation_channel_center_freq_0;
8056static int hf_ieee80211_he_operation_channel_center_freq_1;
8057static int hf_ieee80211_he_operation_max_co_hosted_bssid_indicator;
8058static int hf_ieee80211_he_operation_6ghz_primary_channel;
8059static int hf_ieee80211_he_operation_6ghz_control;
8060static int hf_ieee80211_he_operation_6ghz_control_channel_width;
8061static int hf_ieee80211_he_operation_6ghz_control_duplicate_beacon;
8062static int hf_ieee80211_he_operation_6ghz_control_regulatory_info;
8063static int hf_ieee80211_he_operation_6ghz_control_reserved;
8064static int hf_ieee80211_he_operation_6ghz_channel_center_freq_0;
8065static int hf_ieee80211_he_operation_6ghz_channel_center_freq_1;
8066static int hf_ieee80211_he_operation_6ghz_minimum_rate;
8067static int hf_ieee80211_he_muac_aci_aifsn;
8068static int hf_ieee80211_he_muac_aifsn;
8069static int hf_ieee80211_he_muac_acm;
8070static int hf_ieee80211_he_muac_aci;
8071static int hf_ieee80211_he_muac_reserved;
8072static int hf_ieee80211_he_mu_edca_timer;
8073static int hf_ieee80211_he_muac_ecwmin_ecwmax;
8074static int hf_ieee80211_he_srp_disallowed;
8075static int hf_ieee80211_he_non_srg_obss_pd_sr_disallowed;
8076static int hf_ieee80211_he_non_srg_offset_present;
8077static int hf_ieee80211_he_srg_information_present;
8078static int hf_ieee80211_he_hesiga_spatial_reuse_value15_allowed;
8079static int hf_ieee80211_he_sr_control_reserved;
8080static int hf_ieee80211_he_spatial_reuse_sr_control;
8081static int hf_ieee80211_he_spatial_non_srg_obss_pd_max_offset;
8082static int hf_ieee80211_he_spatial_srg_obss_pd_min_offset;
8083static int hf_ieee80211_he_spatial_srg_obss_pd_max_offset;
8084static int hf_ieee80211_he_spatial_srg_bss_color_bitmap;
8085static int hf_ieee80211_he_spatial_srg_partial_bssid_bitmap;
8086static int hf_ieee80211_he_ess_report_planned_ess;
8087static int hf_ieee80211_he_ess_report_edge_of_ess;
8088static int hf_ieee80211_he_resource_request_buffer_thresh;
8089static int hf_ieee80211_he_bss_color_change_new_color_info;
8090static int hf_ieee80211_he_new_bss_color_info_color;
8091static int hf_ieee80211_he_new_bss_color_info_reserved;
8092static int hf_ieee80211_he_bss_color_change_switch_countdown;
8093static int hf_ieee80211_he_ess_report_info_field;
8094static int hf_ieee80211_he_ess_report_recommend_transition_thresh;
8095static int hf_ieee80211_he_ops_duration;
8096static int hf_ieee80211_he_uora_field;
8097static int hf_ieee80211_he_uora_eocwmin;
8098static int hf_ieee80211_he_uora_owcwmax;
8099static int hf_ieee80211_he_uora_reserved;
8100
8101static int hf_ieee80211_max_channel_switch_time;
8102
8103static int hf_ieee80211_oci_operating_class;
8104static int hf_ieee80211_oci_primary_channel_number;
8105static int hf_ieee80211_oci_frequency_segment_1;
8106static int hf_ieee80211_oci_oct_operating_class;
8107static int hf_ieee80211_oci_oct_primary_channel_number;
8108static int hf_ieee80211_oci_oct_frequency_segment_1;
8109
8110static int hf_ieee80211_multiple_bssid_configuration_bssid_count;
8111static int hf_ieee80211_multiple_bssid_configuration_full_set_rx_periodicity;
8112static int hf_ieee80211_known_bssid_bitmap;
8113static int hf_ieee80211_short_ssid;
8114
8115static int hf_ieee80211_non_inheritance_element_id_list_length;
8116static int hf_ieee80211_non_inheritance_element_id_list_element_id;
8117static int hf_ieee80211_non_inheritance_element_id_ext_list_length;
8118static int hf_ieee80211_non_inheritance_element_id_ext_list_element_id_ext;
8119
8120static int hf_ieee80211_rejected_groups_group;
8121
8122static int hf_ieee80211_twt_bcast_flow;
8123static int hf_ieee80211_twt_individual_flow;
8124static int hf_ieee80211_twt_individual_flow_id;
8125static int hf_ieee80211_twt_individual_reserved;
8126static int hf_ieee80211_twt_bcast_id;
8127static int hf_ieee80211_twt_neg_type;
8128static int hf_ieee80211_twt_neg_type2_reserved1;
8129static int hf_ieee80211_twt_neg_type2_reserved2;
8130static int hf_ieee80211_twt_bcast_teardown_all;
8131static int hf_ieee80211_twt_bcast_teardown_all_twt;
8132static int hf_ieee80211_twt_bcast_twt_id_reserved;
8133static int hf_ieee80211_twt_bcast_neg_type_reserved;
8134
8135static int hf_ieee80211_tag_twt_control_field;
8136static int hf_ieee80211_tag_twt_ndp_paging_indicator;
8137static int hf_ieee80211_tag_twt_responder_pm_mode;
8138static int hf_ieee80211_tag_twt_neg_type;
8139static int hf_ieee80211_tag_twt_info_frame_disabled;
8140static int hf_ieee80211_tag_twt_wake_duration_unit;
8141static int hf_ieee80211_tag_twt_link_id_bitmap_present;
8142static int hf_ieee80211_tag_twt_aligned_twt;
8143
8144static int hf_ieee80211_tag_twt_req_type_field;
8145static int hf_ieee80211_tag_twt_req_type_req;
8146static int hf_ieee80211_tag_twt_req_type_setup_cmd;
8147static int hf_ieee80211_tag_twt_req_type_trigger;
8148static int hf_ieee80211_tag_twt_req_type_implicit;
8149static int hf_ieee80211_tag_twt_req_type_flow_type;
8150static int hf_ieee80211_tag_twt_req_type_flow_id;
8151static int hf_ieee80211_tag_twt_req_type_wake_int_exp;
8152static int hf_ieee80211_tag_twt_req_type_prot;
8153static int hf_ieee80211_tag_twt_req_type_last_bcst_parm_set;
8154static int hf_ieee80211_tag_twt_req_type_bcst_twt_recom;
8155static int hf_ieee80211_tag_twt_req_type_aligned;
8156
8157static int hf_ieee80211_tag_twt_ndp_paging_field;
8158static int hf_ieee80211_tag_twt_ndp_paging_p_id;
8159static int hf_ieee80211_tag_twt_ndp_max_ndp_paging_period;
8160static int hf_ieee80211_tag_twt_ndp_partial_tsf_offset;
8161static int hf_ieee80211_tag_twt_ndp_action;
8162static int hf_ieee80211_tag_twt_ndp_min_sleep_duration;
8163static int hf_ieee80211_tag_twt_ndp_reserved;
8164static int hf_ieee80211_tag_twt_link_id_bitmap;
8165static int hf_ieee80211_tag_twt_aligned_twt_link_bitmap;
8166static int hf_ieee80211_tag_twt_broadcast_info;
8167static int hf_ieee80211_tag_twt_bcast_info_persistence;
8168static int hf_ieee80211_tag_twt_bcast_info_id;
8169static int hf_ieee80211_tag_twt_bcast_info_rtwt_traffic_present;
8170static int hf_ieee80211_tag_twt_bcast_info_rtwt_sche_info;
8171static int hf_ieee80211_tag_twt_traffic_info_control;
8172static int hf_ieee80211_tag_twt_traffic_info_dl_bitmap_valid;
8173static int hf_ieee80211_tag_twt_traffic_info_ul_bitmap_valid;
8174static int hf_ieee80211_tag_twt_traffic_info_reserved;
8175static int hf_ieee80211_tag_twt_traffic_info_rtwt_dl_bitmap;
8176static int hf_ieee80211_tag_twt_traffic_info_rtwt_ul_bitmap;
8177
8178static int hf_ieee80211_tag_twt_target_wake_time;
8179static int hf_ieee80211_tag_twt_target_wake_time_short;
8180static int hf_ieee80211_tag_twt_nom_min_twt_wake_dur;
8181static int hf_ieee80211_tag_twt_wake_interval_mantissa;
8182static int hf_ieee80211_tag_twt_channel;
8183
8184static int hf_ieee80211_tag_rsnx;
8185/* octet 1 */
8186static int hf_ieee80211_tag_rsnx_length;
8187static int hf_ieee80211_tag_rsnx_protected_twt_operations_support;
8188static int hf_ieee80211_tag_rsnx_sae_hash_to_element;
8189static int hf_ieee80211_tag_rsnx_sae_pk;
8190static int hf_ieee80211_tag_rsnx_protected_wur_frame_support;
8191/* octet 2 */
8192static int hf_ieee80211_tag_rsnx_secure_ltf_support;
8193static int hf_ieee80211_tag_rsnx_secure_rtt_supported;
8194static int hf_ieee80211_tag_rsnx_urnm_mfpr_x20;
8195static int hf_ieee80211_tag_rsnx_protected_announce_support;
8196static int hf_ieee80211_tag_rsnx_pbac;
8197static int hf_ieee80211_tag_rsnx_extended_s1g_action_protection;
8198static int hf_ieee80211_tag_rsnx_spp_amsdu_capable;
8199static int hf_ieee80211_tag_rsnx_urnm_mfpr;
8200static int hf_ieee80211_tag_rsnx_reserved;
8201
8202static int hf_ieee80211_wfa_rsn_selection;
8203static int hf_ieee80211_wfa_rsn_or_link_kde_link_id;
8204
8205static int hf_ieee80211_nonap_sta_regulatory_conn;
8206static int hf_ieee80211_nonap_sta_regu_conn_indoor_ap_valid;
8207static int hf_ieee80211_nonap_sta_regu_conn_indoor_ap;
8208static int hf_ieee80211_nonap_sta_regu_conn_sp_ap_valid;
8209static int hf_ieee80211_nonap_sta_regu_conn_sp_ap;
8210static int hf_ieee80211_nonap_sta_regu_conn_reserved;
8211
8212static int hf_ieee80211_tag_channel_usage_mode;
8213
8214static int hf_ieee80211_ff_count;
8215
8216static int hf_ieee80211_tag_dms_id;
8217static int hf_ieee80211_tag_dms_length;
8218static int hf_ieee80211_tag_dms_req_type;
8219static int hf_ieee80211_tag_dms_resp_type;
8220static int hf_ieee80211_tag_dms_last_seq_control;
8221
8222/* ************************************************************************* */
8223/* RFC 8110 fields */
8224/* ************************************************************************* */
8225static int hf_ieee80211_owe_dh_parameter_group;
8226static int hf_ieee80211_owe_dh_parameter_public_key;
8227
8228/* ************************************************************************* */
8229/* Protocol trees */
8230/* ************************************************************************* */
8231static int ett_80211;
8232static int ett_proto_flags;
8233static int ett_cap_tree;
8234static int ett_fc_tree;
8235static int ett_cntrl_wrapper_fc;
8236static int ett_cntrl_wrapper_payload;
8237static int ett_fragments;
8238static int ett_fragment;
8239static int ett_block_ack;
8240static int ett_block_ack_tid;
8241static int ett_block_ack_request_control;
8242static int ett_block_ack_bitmap;
8243static int ett_block_ack_request_multi_sta_aid_tid;
8244static int ett_multi_sta_block_ack;
8245static int ett_ath_cap_tree;
8246static int ett_extreme_mesh_services_tree;
8247static int ett_addr;
8248
8249static int ett_80211_mgt;
8250static int ett_fixed_parameters;
8251static int ett_tagged_parameters;
8252static int ett_tag_bmapctl_tree;
8253static int ett_s1g_pvb_tree;
8254static int ett_s1g_pvb_eb_tree;
8255static int ett_s1g_pvb_block_control_byte;
8256static int ett_s1g_pvb_block_bitmap_tree;
8257static int ett_s1g_pvb_subblock_tree;
8258static int ett_s1g_pvb_olb_tree;
8259static int ett_s1g_pvb_olb_subblock;
8260static int ett_s1g_pvb_ade_tree;
8261static int ett_s1g_pvb_ade_control;
8262static int ett_tag_country_fnm_tree;
8263static int ett_tag_country_rcc_tree;
8264static int ett_qos_parameters;
8265static int ett_qos_ps_buf_state;
8266static int ett_wep_parameters;
8267static int ett_msh_control;
8268static int ett_hwmp_targ_flags_tree;
8269static int ett_mesh_chswitch_flag_tree;
8270static int ett_mesh_config_cap_tree;
8271static int ett_mesh_formation_info_tree;
8272static int ett_bcn_timing_rctrl_tree;
8273static int ett_bcn_timing_info_tree;
8274static int ett_gann_flags_tree;
8275static int ett_pxu_proxy_info_tree;
8276static int ett_pxu_proxy_info_flags_tree;
8277
8278static int ett_rsn_gcs_tree;
8279static int ett_rsn_pcs_tree;
8280static int ett_rsn_sub_pcs_tree;
8281static int ett_rsn_akms_tree;
8282static int ett_rsn_sub_akms_tree;
8283static int ett_rsn_cap_tree;
8284static int ett_rsn_pmkid_tree;
8285static int ett_rsn_gmcs_tree;
8286
8287static int ett_kde_mlo_link_info;
8288
8289static int ett_wpa_mcs_tree;
8290static int ett_wpa_ucs_tree;
8291static int ett_wpa_sub_ucs_tree;
8292static int ett_wpa_akms_tree;
8293static int ett_wpa_sub_akms_tree;
8294static int ett_wme_ac;
8295static int ett_wme_aci_aifsn;
8296static int ett_wme_ecw;
8297static int ett_wme_qos_info;
8298
8299static int ett_update_edca_info;
8300
8301static int ett_ht_cap_tree;
8302static int ett_ampduparam_tree;
8303static int ett_mcsset_tree;
8304static int ett_mcsbit_tree;
8305static int ett_htex_cap_tree;
8306static int ett_txbf_tree;
8307static int ett_antsel_tree;
8308static int ett_hta_cap_tree;
8309static int ett_hta_cap1_tree;
8310static int ett_hta_cap2_tree;
8311
8312static int ett_s1g_ndp;
8313static int ett_s1g_ndp_ack;
8314static int ett_s1g_ndp_cts;
8315static int ett_s1g_ndp_cf_end;
8316static int ett_s1g_ndp_ps_poll;
8317static int ett_s1g_ndp_ps_poll_ack;
8318static int ett_s1g_ndp_block_ack;
8319static int ett_s1g_ndp_beamforming_report_poll;
8320static int ett_s1g_ndp_paging;
8321static int ett_s1g_ndp_probe;
8322static int ett_pv1_sid;
8323static int ett_pv1_sid_field;
8324static int ett_pv1_seq_control;
8325static int ett_ieee80211_s1g_capabilities_info;
8326static int ett_ieee80211_s1g_capabilities;
8327static int ett_s1g_cap_byte1;
8328static int ett_s1g_cap_byte2;
8329static int ett_s1g_cap_byte3;
8330static int ett_s1g_cap_byte4;
8331static int ett_s1g_cap_byte5;
8332static int ett_s1g_cap_byte6;
8333static int ett_s1g_cap_byte7;
8334static int ett_s1g_cap_byte8;
8335static int ett_s1g_cap_byte9;
8336static int ett_s1g_cap_byte10;
8337static int ett_ieee80211_s1g_sup_mcs_and_nss_set;
8338static int ett_s1g_mcs_and_mcs_set;
8339static int ett_s1g_operation_info;
8340static int ett_s1g_channel_width;
8341static int ett_s1g_subchannel_selective_transmission;
8342static int ett_s1g_raw_assignment;
8343static int ett_s1g_raw_assn_tree;
8344static int ett_s1g_raw_control;
8345static int ett_s1g_raw_slot_def;
8346static int ett_s1g_raw_group_subfield;
8347static int ett_s1g_raw_channel_indication;
8348static int ett_s1g_page_slice_control;
8349static int ett_s1g_aid_request_mode;
8350static int ett_s1g_aid_characteristic;
8351static int ett_s1g_sector_operation;
8352static int ett_tack_info;
8353static int ett_ieee80211_s1g_auth_control;
8354static int ett_s1g_relay_control;
8355static int ett_s1g_relay_function;
8356static int ett_ieee80211_s1g_addr_list;
8357static int ett_ieee80211_s1g_reach_addr;
8358static int ett_s1g_relay_discovery_control;
8359static int ett_ieee80211_s1g_aid_entry;
8360static int ett_s1g_probe_resp_subfield_0;
8361static int ett_s1g_header_comp_control;
8362static int ett_pv1_mgmt_action;
8363static int ett_pv1_mgmt_action_no_ack;
8364static int ett_pv1_cntl_stack;
8365static int ett_pv1_cntl_bat;
8366
8367static int ett_htc_tree;
8368static int ett_htc_he_a_control;
8369static int ett_mfb_subtree;
8370static int ett_lac_subtree;
8371static int ett_ieee80211_buffer_status_report;
8372static int ett_ieee80211_a_control_padding;
8373static int ett_ieee80211_a_control_ones;
8374static int ett_ieee80211_triggered_response_schedule;
8375static int ett_ieee80211_control_om;
8376static int ett_ieee80211_hla_control;
8377static int ett_ieee80211_control_uph;
8378static int ett_ieee80211_buffer_control_bqr;
8379static int ett_ieee80211_control_cci;
8380static int ett_ieee80211_control_eht_om;
8381static int ett_ieee80211_control_srs;
8382static int ett_ieee80211_control_aar;
8383
8384static int ett_vht_cap_tree;
8385static int ett_vht_mcsset_tree;
8386static int ett_vht_rx_mcsbit_tree;
8387static int ett_vht_tx_mcsbit_tree;
8388static int ett_vht_basic_mcsbit_tree;
8389static int ett_vht_op_tree;
8390static int ett_vht_tpe_info_tree;
8391static int ett_tpe_psd;
8392
8393static int ett_vht_ranging_annc;
8394static int ett_ndp_ranging_annc_sta_info;
8395
8396static int ett_ff_he_action;
8397static int ett_ff_protected_he_action;
8398static int ett_ff_protected_eht_action;
8399static int ett_ff_he_mimo_control;
8400static int ett_ff_he_mimo_beamforming_report_snr;
8401static int ett_ff_he_mimo_feedback_matrices;
8402
8403static int ett_ff_vhtmimo_cntrl;
8404static int ett_ff_vhtmimo_beamforming_report;
8405static int ett_ff_vhtmimo_beamforming_report_snr;
8406static int ett_ff_vhtmimo_beamforming_angle;
8407static int ett_ff_vhtmimo_beamforming_report_feedback_matrices;
8408static int ett_ff_vhtmu_exclusive_beamforming_report_matrices;
8409
8410static int ett_vht_grpidmgmt;
8411static int ett_vht_msa;
8412static int ett_vht_upa;
8413
8414static int ett_ht_operation_info_delimiter1_tree;
8415static int ett_ht_operation_info_delimiter2_tree;
8416static int ett_ht_operation_info_delimiter3_tree;
8417
8418static int ett_ff_ftm_param_delim1;
8419static int ett_ff_ftm_param_delim2;
8420static int ett_ff_ftm_param_delim3;
8421static int ett_ff_ftm_tod_err1;
8422static int ett_ff_ftm_toa_err1;
8423static int ett_tag_ranging;
8424static int ett_tag_ranging_ntb;
8425static int ett_tag_ranging_secure_he_ltf;
8426
8427static int ett_ranging_subelement_tree;
8428
8429static int ett_tag_direct_meas_results;
8430
8431static int ett_rsta_avail_header;
8432static int ett_rsta_avail_tree;
8433static int ett_rsta_avail_subfield;
8434
8435static int ett_pasn_parameters;
8436static int ett_pasn_comeback_tree;
8437
8438static int ett_pasn_auth_frame;
8439
8440/* 802.11be trees */
8441static int ett_eht_multi_link_control;
8442static int ett_eht_multi_link_common_info;
8443static int ett_eht_multi_link_common_info_link_id;
8444static int ett_eht_multi_link_common_info_medium_sync;
8445static int ett_eht_multi_link_common_info_eml_capa;
8446static int ett_eht_multi_link_common_info_mld_capa;
8447static int ett_eht_multi_link_common_info_ext_mld_capa;
8448static int ett_eht_multi_link_per_sta;
8449static int ett_eht_multi_link_subelt;
8450static int ett_eht_multi_link_sta_control;
8451static int ett_eht_multi_link_per_sta_info;
8452static int ett_eht_multi_link_sta_dtim;
8453static int ett_eht_multi_link_reconf_oper_param;
8454static int ett_eht_multi_link_reconfig_presence_indi;
8455static int ett_eht_multi_link_reconfig_operation_para_info;
8456static int ett_eht_operation_params;
8457static int ett_eht_operation_control;
8458static int ett_eht_mac_capa;
8459static int ett_eht_phy_capa;
8460static int ett_eht_phy_bits_0_15;
8461static int ett_eht_phy_bits_16_31;
8462static int ett_eht_phy_bits_32_39;
8463static int ett_eht_phy_bits_40_63;
8464static int ett_eht_phy_bits_64_71;
8465static int ett_eht_phy_mcs_nss;
8466static int ett_eht_phy_mcs_nss_set;
8467static int ett_eht_ttl_mapping;
8468static int ett_eht_ttl_mapping_link_mapping;
8469static int ett_eht_eht_multi_link_tc;
8470static int ett_eht_qos_characteristics;
8471static int ett_eht_aid_bmapctl_tree;
8472static int ett_eht_bw_indication_param;
8473static int ett_eht_eml_control;
8474static int ett_eht_eml_control_link_map;
8475static int ett_eht_eml_control_mcs_map_count;
8476static int ett_eht_emlsr_para_update;
8477static int ett_eht_mimo_ctrl;
8478static int ett_eht_beamforming_rpt_ru_index;
8479static int ett_eht_beamforming_feedback_tree;
8480static int ett_ff_eht_mimo_beamforming_report_snr;
8481static int ett_ff_eht_mimo_mu_exclusive_report;
8482static int ett_eht_mu_exclusive_beamforming_rpt_ru_index;
8483static int ett_eht_reconfig_status_list;
8484static int ett_eht_group_key_data;
8485
8486static int ett_tag_measure_request_mode_tree;
8487static int ett_tag_measure_request_type_tree;
8488static int ett_tag_measure_request_sub_element_tree;
8489static int ett_tag_measure_report_mode_tree;
8490static int ett_tag_measure_report_type_tree;
8491static int ett_tag_measure_report_basic_map_tree;
8492static int ett_tag_measure_report_rpi_tree;
8493static int ett_tag_measure_report_frame_tree;
8494static int ett_tag_measure_report_sub_element_tree;
8495static int ett_tag_measure_reported_frame_tree;
8496static int ett_tag_measure_reported_frame_frag_id_tree;
8497static int ett_tag_measure_reported_lci_z_tree;
8498static int ett_tag_measure_reported_lci_urp_tree;
8499static int ett_tag_bss_bitmask_tree;
8500static int ett_tag_dfs_map_tree;
8501static int ett_tag_dfs_map_flags_tree;
8502static int ett_tag_erp_info_tree;
8503static int ett_tag_ex_cap1;
8504static int ett_tag_ex_cap2;
8505static int ett_tag_ex_cap3;
8506static int ett_tag_ex_cap4;
8507static int ett_tag_ex_cap5;
8508static int ett_tag_ex_cap6;
8509static int ett_tag_ex_cap7;
8510static int ett_tag_ex_cap8;
8511static int ett_tag_ex_cap89;
8512static int ett_tag_ex_cap10;
8513static int ett_tag_ex_cap11;
8514static int ett_tag_ex_cap12;
8515static int ett_tag_ex_cap13;
8516static int ett_tag_ex_cap14;
8517
8518static int ett_tag_rm_cap1;
8519static int ett_tag_rm_cap2;
8520static int ett_tag_rm_cap3;
8521static int ett_tag_rm_cap4;
8522static int ett_tag_rm_cap5;
8523
8524static int ett_tag_rsnx_octet1;
8525static int ett_tag_rsnx_octet2;
8526
8527static int ett_tag_multiple_bssid_subelem_tree;
8528static int ett_tag_20_40_bc;
8529
8530static int ett_tag_intolerant_tree;
8531
8532static int ett_tag_tclas_mask_tree;
8533
8534static int ett_tag_supported_channels;
8535
8536static int ett_tag_neighbor_report_bssid_info_tree;
8537static int ett_tag_neighbor_report_bssid_info_capability_tree;
8538static int ett_tag_neighbor_report_subelement_tree;
8539static int ett_tag_neighbor_report_sub_tag_tree;
8540
8541static int ett_tag_wapi_param_set_akm_tree;
8542static int ett_tag_wapi_param_set_ucast_tree;
8543static int ett_tag_wapi_param_set_mcast_tree;
8544static int ett_tag_wapi_param_set_preauth_tree;
8545
8546static int ett_max_idle_period_options;
8547
8548static int ett_tag_time_adv_tree;
8549
8550static int ett_tag_he_6ghz_cap_inf_tree;
8551
8552static int ett_ff_ba_param_tree;
8553static int ett_ff_ba_ssc_tree;
8554static int ett_ff_delba_param_tree;
8555static int ett_ff_qos_info;
8556static int ett_ff_sm_pwr_save;
8557static int ett_ff_psmp_param_set;
8558static int ett_ff_mimo_cntrl;
8559static int ett_ff_ant_sel;
8560static int ett_mimo_report;
8561static int ett_ff_chan_switch_announce;
8562static int ett_ff_ht_info;
8563static int ett_ff_psmp_sta_info;
8564
8565static int ett_tpc;
8566
8567static int ett_msdu_aggregation_parent_tree;
8568static int ett_msdu_aggregation_subframe_tree;
8569
8570static int ett_80211_mgt_ie;
8571static int ett_tsinfo_tree;
8572static int ett_sched_tree;
8573
8574static int ett_fcs;
8575
8576static int ett_hs20_osu_providers_list;
8577static int ett_hs20_osu_provider_tree;
8578static int ett_hs20_friendly_names_list;
8579static int ett_hs20_friendly_name_tree;
8580static int ett_hs20_osu_provider_method_list;
8581static int ett_osu_icons_avail_list;
8582static int ett_hs20_osu_icon_tree;
8583static int ett_hs20_osu_service_desc_list;
8584static int ett_hs20_osu_service_desc_tree;
8585static int ett_hs20_venue_url;
8586static int ett_hs20_advice_of_charge;
8587static int ett_hs20_aoc_plan;
8588
8589static int ett_hs20_ofn_tree;
8590
8591static int ett_adv_proto;
8592static int ett_adv_proto_tuple;
8593static int ett_gas_query;
8594static int ett_gas_anqp;
8595static int ett_nai_realm;
8596static int ett_nai_realm_eap;
8597static int ett_tag_ric_data_desc_ie;
8598static int ett_anqp_vendor_capab;
8599
8600static int ett_osen_group_data_cipher_suite;
8601static int ett_osen_pairwise_cipher_suites;
8602static int ett_osen_pairwise_cipher_suite;
8603static int ett_osen_akm_cipher_suites;
8604static int ett_osen_akm_cipher_suite;
8605static int ett_osen_rsn_cap_tree;
8606static int ett_osen_pmkid_list;
8607static int ett_osen_pmkid_tree;
8608static int ett_osen_group_management_cipher_suite;
8609
8610static int ett_hs20_cc_proto_port_tuple;
8611
8612static int ett_tag_no_bssid_capability_dmg_bss_control_tree;
8613static int ett_ssid_list;
8614
8615static int ett_sgdsn;
8616static int ett_nintendo;
8617
8618static int ett_routerboard;
8619
8620static int ett_meru;
8621
8622static int ett_wisun_gtkl;
8623static int ett_wisun_lgtkl;
8624
8625static int ett_qos_map_set_exception;
8626static int ett_qos_map_set_range;
8627
8628static int ett_wnm_notif_subelt;
8629
8630static int ett_ieee80211_3gpp_plmn;
8631
8632static int ett_mbo_oce_attr;
8633static int ett_mbo_ap_cap;
8634static int ett_oce_cap;
8635static int ett_oce_metrics_cap;
8636
8637static int ett_tag_mobility_domain_ft_capab_tree;
8638
8639static int ett_tag_ft_mic_control_tree;
8640static int ett_tag_ft_subelem_tree;
8641
8642static int ett_qos_mgmt_pol_capa;
8643static int ett_qos_mgmt_attributes;
8644static int ett_qos_mgmt_dscp_policy_capabilities;
8645static int ett_qos_mgmt_dscp_policy;
8646static int ett_qos_mgmt_tclas;
8647static int ett_qos_mgmt_domain_name;
8648static int ett_qos_mgmt_unknown_attribute;
8649static int ett_dscp_policy_status_list;
8650static int ett_pol_rqst_cont_tree;
8651static int ett_pol_resp_cont_tree;
8652
8653static expert_field ei_ieee80211_bad_length;
8654static expert_field ei_ieee80211_inv_val;
8655static expert_field ei_ieee80211_vht_tpe_pwr_info_count;
8656static expert_field ei_ieee80211_vht_tpe_pwr_info_unit;
8657static expert_field ei_ieee80211_ff_query_response_length;
8658static expert_field ei_ieee80211_ff_anqp_nai_realm_eap_len;
8659static expert_field ei_hs20_anqp_nai_hrq_length;
8660static expert_field ei_ieee80211_extra_data;
8661static expert_field ei_ieee80211_tag_data;
8662static expert_field ei_ieee80211_tdls_setup_confirm_malformed;
8663static expert_field ei_ieee80211_ff_anqp_nai_field_len;
8664static expert_field ei_ieee80211_rsn_pcs_count;
8665static expert_field ei_ieee80211_tag_measure_request_unknown;
8666static expert_field ei_ieee80211_tag_measure_request_beacon_unknown;
8667static expert_field ei_ieee80211_tag_measure_report_unknown;
8668static expert_field ei_ieee80211_tag_measure_report_beacon_unknown;
8669static expert_field ei_ieee80211_tag_measure_report_lci_unknown;
8670static expert_field ei_ieee80211_tag_number;
8671static expert_field ei_ieee80211_ff_anqp_info_length;
8672static expert_field ei_hs20_anqp_ofn_length;
8673static expert_field ei_ieee80211_tdls_setup_response_malformed;
8674static expert_field ei_ieee80211_ff_anqp_capability;
8675static expert_field ei_ieee80211_not_enough_room_for_anqp_header;
8676static expert_field ei_ieee80211_ff_query_request_length;
8677static expert_field ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype;
8678static expert_field ei_ieee80211_qos_info_bad_ftype;
8679static expert_field ei_ieee80211_qos_bad_aifsn;
8680static expert_field ei_ieee80211_pmkid_count_too_large;
8681static expert_field ei_ieee80211_ff_anqp_venue_length;
8682static expert_field ei_ieee80211_ff_anqp_roaming_consortium_oi_len;
8683static expert_field ei_ieee80211_tag_length;
8684static expert_field ei_ieee80211_missing_data;
8685static expert_field ei_ieee80211_rsn_pmkid_count;
8686static expert_field ei_ieee80211_fc_retry;
8687static expert_field ei_ieee80211_tag_wnm_sleep_mode_no_key_data;
8688static expert_field ei_ieee80211_dmg_subtype;
8689static expert_field ei_ieee80211_vht_action;
8690static expert_field ei_ieee80211_mesh_peering_unexpected;
8691static expert_field ei_ieee80211_fcs;
8692static expert_field ei_ieee80211_mismatched_akm_suite;
8693static expert_field ei_ieee80211_vs_routerboard_unexpected_len;
8694static expert_field ei_ieee80211_vs_sgdsn_serialnumber_invalid_len_val;
8695static expert_field ei_ieee80211_vs_sgdsn_serialnumber_unexpected_len_val;
8696static expert_field ei_ieee80211_twt_tear_down_bad_neg_type;
8697static expert_field ei_ieee80211_twt_setup_bad_command;
8698static expert_field ei_ieee80211_twt_bcast_info_no_term;
8699static expert_field ei_ieee80211_invalid_control_word;
8700static expert_field ei_ieee80211_invalid_control_id;
8701static expert_field ei_ieee80211_invalid_control_length;
8702static expert_field ei_ieee80211_wfa_60g_attr_len_invalid;
8703static expert_field ei_ieee80211_wfa_60g_unknown_attribute;
8704static expert_field ei_ieee80211_htc_in_dmg_packet;
8705static expert_field ei_ieee80211_eht_invalid_subelement;
8706static expert_field ei_ieee80211_eht_invalid_action;
8707static expert_field ei_ieee80211_eht_invalid_multi_link;
8708static expert_field ei_ieee80211_eht_invalid_nc_nr;
8709
8710
8711/* 802.11ad trees */
8712static int ett_dynamic_alloc_tree;
8713static int ett_ssw_tree;
8714static int ett_bf_tree;
8715static int ett_sswf_tree;
8716static int ett_brp_tree;
8717static int ett_blm_tree;
8718static int ett_bic_tree;
8719static int ett_dmg_params_tree;
8720static int ett_cc_tree;
8721static int ett_rcsi_tree;
8722static int ett_80211_ext;
8723static int ett_allocation_tree;
8724static int ett_sta_info;
8725
8726static int ett_ieee80211_esp;
8727
8728static int ett_ieee80211_wfa_60g_attr;
8729static int ett_ieee80211_wfa_transition_disable_tree;
8730
8731/* 802.11ah trees */
8732static int ett_s1g_sync_control_tree;
8733static int ett_s1g_sector_id_index;
8734static int ett_s1g_twt_information_control;
8735static int ett_twt_tear_down_tree;
8736static int ett_twt_control_field_tree;
8737static int ett_twt_req_type_tree;
8738static int ett_twt_ndp_paging_field_tree;
8739static int ett_twt_broadcast_info_tree;
8740static int ett_twt_traffic_info_tree;
8741static int ett_twt_traffic_info_control_tree;
8742
8743/* 802.11ax trees */
8744static int ett_he_mac_capabilities;
8745static int ett_he_phy_capabilities;
8746static int ett_he_phy_cap_first_byte;
8747static int ett_he_phy_cap_chan_width_set;
8748static int ett_he_phy_cap_b8_to_b23;
8749static int ett_he_phy_cap_b24_to_b39;
8750static int ett_he_phy_cap_b40_to_b55;
8751static int ett_he_phy_cap_b56_to_b71;
8752static int ett_he_phy_cap_b72_to_b87;
8753static int ett_he_mcs_and_nss_set;
8754static int ett_he_rx_tx_he_mcs_map_lte_80;
8755static int ett_he_rx_mcs_map_lte_80;
8756static int ett_he_tx_mcs_map_lte_80;
8757static int ett_he_rx_tx_he_mcs_map_160;
8758static int ett_he_rx_mcs_map_160;
8759static int ett_he_tx_mcs_map_160;
8760static int ett_he_rx_tx_he_mcs_map_80_80;
8761static int ett_he_rx_mcs_map_80_80;
8762static int ett_he_tx_mcs_map_80_80;
8763static int ett_he_ppe_threshold;
8764static int ett_he_ppe_nss;
8765static int ett_he_ppe_ru_alloc;
8766static int ett_he_uora_tree;
8767static int ett_he_aic_aifsn;
8768static int ett_he_spatial_reuse_control;
8769static int ett_he_bss_new_color_info;
8770static int ett_he_ess_report_info_field;
8771static int ett_he_operation_params;
8772static int ett_he_bss_color_information;
8773static int ett_he_oper_basic_mcs;
8774static int ett_he_operation_vht_op_info;
8775static int ett_mscs_user_prio;
8776static int ett_ieee80211_user_prio_bitmap;
8777static int ett_ieee80211_intra_access_prio;
8778static int ett_he_operation_6ghz;
8779static int ett_he_operation_6ghz_control;
8780static int ett_he_mu_edca_param;
8781static int ett_he_trigger_common_info;
8782static int ett_he_trigger_ranging;
8783static int ett_he_trigger_ranging_poll;
8784static int ett_he_trigger_packet_extension;
8785static int ett_he_trigger_base_common_info;
8786static int ett_he_trigger_bar_ctrl;
8787static int ett_he_trigger_bar_info;
8788static int ett_he_trigger_user_info;
8789static int ett_he_trigger_base_user_info;
8790static int ett_he_trigger_dep_basic_user_info;
8791static int ett_he_trigger_dep_nfrp_user_info;
8792static int ett_ndp_annc;
8793static int ett_ndp_vht_annc_sta_list;
8794static int ett_ndp_vht_annc_sta_info_tree;
8795static int ett_ndp_he_annc_sta_list;
8796static int ett_ndp_he_annc_sta_item;
8797static int ett_ndp_he_annc_sta_info;
8798static int ett_ndp_ranging_annc_sta_list;
8799static int ett_ndp_eht_annc_sta_list;
8800static int ett_ndp_eht_annc_sta_info;
8801static int ett_non_inheritance_element_id_list;
8802static int ett_non_inheritance_element_id_ext_list;
8803
8804/* 802.11ai trees */
8805static int ett_fils_indication_realm_list;
8806static int ett_fils_indication_public_key_list;
8807static int ett_ff_fils_discovery_frame_control;
8808static int ett_ff_fils_discovery_capability;
8809static int ett_neighbor_ap_info;
8810static int ett_tbtt_infos;
8811static int ett_rnr_bss_params_tree;
8812static int ett_rnr_mld_params_tree;
8813
8814static int ett_ff_fils_req_params;
8815static int ett_ff_fils_req_params_fils_criteria;
8816
8817static int ett_nonap_sta_regulatory_conn;
8818
8819static int ett_chan_usage;
8820
8821/* Generic address HF list for proto_tree_add_mac48_detail() */
8822static const mac_hf_list_t mac_addr = {
8823 &hf_ieee80211_addr,
8824 &hf_ieee80211_addr_resolved,
8825 &hf_ieee80211_addr_oui,
8826 &hf_ieee80211_addr_oui_resolved,
8827 &hf_ieee80211_addr_lg,
8828 &hf_ieee80211_addr_ig,
8829};
8830
8831/* Generic address HF list for proto_tree_add_mac48_detail() --
8832 * no LG/IG bits */
8833static const mac_hf_list_t mac_addr_hidden = {
8834 &hf_ieee80211_addr,
8835 &hf_ieee80211_addr_resolved,
8836 &hf_ieee80211_addr_oui,
8837 &hf_ieee80211_addr_oui_resolved,
8838 NULL((void*)0),
8839 NULL((void*)0),
8840};
8841
8842/* Destination address HF list for proto_tree_add_mac48_detail() */
8843static const mac_hf_list_t mac_da = {
8844 &hf_ieee80211_addr_da,
8845 &hf_ieee80211_addr_da_resolved,
8846 &hf_ieee80211_addr_da_oui,
8847 &hf_ieee80211_addr_da_oui_resolved,
8848 &hf_ieee80211_addr_da_lg,
8849 &hf_ieee80211_addr_da_ig,
8850};
8851
8852/* Source address HF list for proto_tree_add_mac48_detail() */
8853static const mac_hf_list_t mac_sa = {
8854 &hf_ieee80211_addr_sa,
8855 &hf_ieee80211_addr_sa_resolved,
8856 &hf_ieee80211_addr_sa_oui,
8857 &hf_ieee80211_addr_sa_oui_resolved,
8858 &hf_ieee80211_addr_sa_lg,
8859 &hf_ieee80211_addr_sa_ig,
8860};
8861
8862/* Receiver address HF list for proto_tree_add_mac48_detail() */
8863static const mac_hf_list_t mac_ra = {
8864 &hf_ieee80211_addr_ra,
8865 &hf_ieee80211_addr_ra_resolved,
8866 &hf_ieee80211_addr_ra_oui,
8867 &hf_ieee80211_addr_ra_oui_resolved,
8868 &hf_ieee80211_addr_ra_lg,
8869 &hf_ieee80211_addr_ra_ig,
8870};
8871
8872/* Transmitter address HF list for proto_tree_add_mac48_detail() */
8873static const mac_hf_list_t mac_ta = {
8874 &hf_ieee80211_addr_ta,
8875 &hf_ieee80211_addr_ta_resolved,
8876 &hf_ieee80211_addr_ta_oui,
8877 &hf_ieee80211_addr_ta_oui_resolved,
8878 &hf_ieee80211_addr_ta_lg,
8879 &hf_ieee80211_addr_ta_ig,
8880};
8881
8882/* BSSID address HF list for proto_tree_add_mac48_detail() */
8883static const mac_hf_list_t mac_bssid = {
8884 &hf_ieee80211_addr_bssid,
8885 &hf_ieee80211_addr_bssid_resolved,
8886 &hf_ieee80211_addr_bssid_oui,
8887 &hf_ieee80211_addr_bssid_oui_resolved,
8888 &hf_ieee80211_addr_bssid_lg,
8889 &hf_ieee80211_addr_bssid_ig,
8890};
8891
8892/* Station address HF list for proto_tree_add_mac48_detail() */
8893static const mac_hf_list_t mac_staa = {
8894 &hf_ieee80211_addr_staa,
8895 &hf_ieee80211_addr_staa_resolved,
8896 &hf_ieee80211_addr_staa_oui,
8897 &hf_ieee80211_addr_staa_oui_resolved,
8898 &hf_ieee80211_addr_staa_lg,
8899 &hf_ieee80211_addr_staa_ig,
8900};
8901
8902static const fragment_items frag_items = {
8903 &ett_fragment,
8904 &ett_fragments,
8905 &hf_ieee80211_fragments,
8906 &hf_ieee80211_fragment,
8907 &hf_ieee80211_fragment_overlap,
8908 &hf_ieee80211_fragment_overlap_conflict,
8909 &hf_ieee80211_fragment_multiple_tails,
8910 &hf_ieee80211_fragment_too_long_fragment,
8911 &hf_ieee80211_fragment_error,
8912 &hf_ieee80211_fragment_count,
8913 &hf_ieee80211_reassembled_in,
8914 &hf_ieee80211_reassembled_length,
8915 /* Reassembled data field */
8916 NULL((void*)0),
8917 "fragments"
8918};
8919
8920static const enum_val_t wlan_ignore_prot_options[] = {
8921 { "no", "No", WLAN_IGNORE_PROT_NO0 },
8922 { "without_iv", "Yes - without IV", WLAN_IGNORE_PROT_WO_IV1 },
8923 { "with_iv", "Yes - with IV", WLAN_IGNORE_PROT_W_IV2 },
8924 { NULL((void*)0), NULL((void*)0), 0 }
8925};
8926
8927static int wlan_address_type = -1;
8928static int wlan_bssid_address_type = -1;
8929static int wlan_ra_ta_address_type = -1;
8930static int wlan_aid_address_type = -1;
8931
8932static int beacon_padding; /* beacon padding bug */
8933
8934/*
8935 * Check if we have an S1G STA
8936 */
8937static bool_Bool
8938sta_is_s1g(packet_info *pinfo)
8939{
8940 void * data_p;
8941
8942 if (treat_as_s1g)
8943 return true1;
8944
8945 data_p = p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_S1G_KEY);
8946 return GPOINTER_TO_INT(data_p)((gint) (glong) (data_p));
8947}
8948
8949static heur_dissector_list_t heur_subdissector_list;
8950
8951static dissector_handle_t ieee80211_handle;
8952static dissector_handle_t wlan_withoutfcs_handle;
8953static dissector_handle_t llc_handle;
8954static dissector_handle_t epd_llc_handle;
8955static dissector_handle_t ipx_handle;
8956static dissector_handle_t eth_withoutfcs_handle;
8957
8958static capture_dissector_handle_t llc_cap_handle;
8959static capture_dissector_handle_t ipx_cap_handle;
8960
8961static dissector_table_t ethertype_subdissector_table;
8962static dissector_table_t tagged_field_table;
8963static dissector_table_t vendor_specific_action_table;
8964static dissector_table_t wifi_alliance_action_subtype_table;
8965static dissector_table_t vendor_specific_anqp_info_table;
8966static dissector_table_t wifi_alliance_anqp_info_table;
8967static dissector_table_t wifi_alliance_ie_table;
8968static dissector_table_t wifi_alliance_public_action_table;
8969
8970static int wlan_tap;
8971
8972static const value_string access_network_type_vals[] = {
8973 { 0, "Private network" },
8974 { 1, "Private network with guest access" },
8975 { 2, "Chargeable public network" },
8976 { 3, "Free public network" },
8977 { 4, "Personal device network" },
8978 { 5, "Emergency services only network" },
8979 { 14, "Test or experimental" },
8980 { 15, "Wildcard" },
8981 { 0, NULL((void*)0) }
8982};
8983
8984static const value_string adv_proto_id_vals[] = {
8985 { 0, "Access Network Query Protocol"},
8986 { 1, "MIH Information Service"},
8987 { 2, "MIH Command and Event Services Capability Discovery"},
8988 { 3, "Emergency Alert System (EAS)"},
8989 { 4, "Location-to-Service Translation Protocol"},
8990 {221, "Vendor Specific"},
8991 {0, NULL((void*)0)}
8992};
8993
8994static const value_string timeout_int_types[] = {
8995 {1, "Reassociation deadline interval (TUs)"},
8996 {2, "Key lifetime interval (seconds)"},
8997 {3, "Association Comeback time (TUs)"},
8998 {4, "Time to start (TUs)"},
8999 {0, NULL((void*)0)}
9000};
9001
9002static const value_string tdls_action_codes[] = {
9003 {TDLS_SETUP_REQUEST0, "TDLS Setup Request"},
9004 {TDLS_SETUP_RESPONSE1, "TDLS Setup Response"},
9005 {TDLS_SETUP_CONFIRM2, "TDLS Setup Confirm"},
9006 {TDLS_TEARDOWN3, "TDLS Teardown"},
9007 {TDLS_PEER_TRAFFIC_INDICATION4, "TDLS Peer Traffic Indication"},
9008 {TDLS_CHANNEL_SWITCH_REQUEST5, "TDLS Channel Switch Request"},
9009 {TDLS_CHANNEL_SWITCH_RESPONSE6, "TDLS Channel Switch Response"},
9010 {TDLS_PEER_PSM_REQUEST7, "TDLS Peer PSM Request"},
9011 {TDLS_PEER_PSM_RESPONSE8, "TDLS Peer PSM Response"},
9012 {TDLS_PEER_TRAFFIC_RESPONSE9, "TDLS Peer Traffic Response"},
9013 {TDLS_DISCOVERY_REQUEST10, "TDLS Discovery Request"},
9014 {0, NULL((void*)0)}
9015};
9016static value_string_ext tdls_action_codes_ext = VALUE_STRING_EXT_INIT(tdls_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (tdls_action_codes) / sizeof
((tdls_action_codes)[0]))-1, tdls_action_codes, "tdls_action_codes"
, ((void*)0) }
;
9017
9018static const value_string rm_action_codes[] = {
9019 {RM_ACTION_RADIO_MEASUREMENT_REQUEST0, "Radio Measurement Request"},
9020 {RM_ACTION_RADIO_MEASUREMENT_REPORT1, "Radio Measurement Report"},
9021 {RM_ACTION_LINK_MEASUREMENT_REQUEST2, "Link Measurement Request"},
9022 {RM_ACTION_LINK_MEASUREMENT_REPORT3, "Link Measurement Report"},
9023 {RM_ACTION_NEIGHBOR_REPORT_REQUEST4, "Neighbor Report Request"},
9024 {RM_ACTION_NEIGHBOR_REPORT_RESPONSE5, "Neighbor Report Response"},
9025 {0, NULL((void*)0)}
9026};
9027static value_string_ext rm_action_codes_ext = VALUE_STRING_EXT_INIT(rm_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (rm_action_codes) / sizeof
((rm_action_codes)[0]))-1, rm_action_codes, "rm_action_codes"
, ((void*)0) }
;
9028
9029static const val64_string number_of_taps_values[] = {
9030 {0x0, "1 tap"},
9031 {0x1, "5 taps"},
9032 {0x2, "15 taps"},
9033 {0x3, "63 taps"},
9034 {0, NULL((void*)0)}
9035};
9036
9037#define PSMP_STA_INFO_BROADCAST0 0
9038#define PSMP_STA_INFO_MULTICAST1 1
9039#define PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2 2
9040
9041#define PSMP_STA_INFO_FLAG_TYPE0x00000003 0x00000003
9042#define PSMP_STA_INFO_FLAG_DTT_START0x00001FFC 0x00001FFC
9043#define PSMP_STA_INFO_FLAG_DTT_DURATION0x001FE000 0x001FE000
9044
9045#define PSMP_STA_INFO_FLAG_STA_ID0x001FFFE0 0x001FFFE0
9046
9047#define PSMP_STA_INFO_FLAG_UTT_START0x0000FFE0 0x0000FFE0
9048#define PSMP_STA_INFO_FLAG_UTT_DURATION0x03FF0000 0x03FF0000
9049
9050#define PSMP_STA_INFO_FLAG_IA_RESERVED0xFC000000 0xFC000000
9051
9052static const value_string ff_psmp_sta_info_flags[] = {
9053 { PSMP_STA_INFO_BROADCAST0, "Broadcast"},
9054 { PSMP_STA_INFO_MULTICAST1, "Multicast"},
9055 { PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2, "Individually Addressed"},
9056 {0, NULL((void*)0)}
9057};
9058
9059static const char*
9060wlan_conv_get_filter_type(conv_item_t* conv, conv_filter_type_e filter)
9061{
9062 if ((filter == CONV_FT_SRC_ADDRESS) && (conv->src_address.type == wlan_address_type))
9063 return "wlan.sa";
9064
9065 if ((filter == CONV_FT_DST_ADDRESS) && (conv->dst_address.type == wlan_address_type))
9066 return "wlan.da";
9067
9068 if ((filter == CONV_FT_ANY_ADDRESS) && (conv->src_address.type == wlan_address_type))
9069 return "wlan.addr";
9070
9071 return CONV_FILTER_INVALID"INVALID";
9072}
9073
9074static ct_dissector_info_t wlan_ct_dissector_info = {&wlan_conv_get_filter_type};
9075
9076static tap_packet_status
9077wlan_conversation_packet(void *pct, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *vip, tap_flags_t flags)
9078{
9079 conv_hash_t *hash = (conv_hash_t*) pct;
9080 hash->flags = flags;
9081 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
9082 tap_packet_status status = TAP_PACKET_DONT_REDRAW;
9083
9084 if ((whdr->src.type != AT_NONE) && (whdr->dst.type != AT_NONE)) {
9085 add_conversation_table_data(hash, &whdr->src, &whdr->dst, 0, 0, 1, pinfo->fd->pkt_len, &pinfo->rel_ts, &pinfo->abs_ts, &wlan_ct_dissector_info, CONVERSATION_NONE);
9086
9087 status = TAP_PACKET_REDRAW;
9088 }
9089
9090 return status;
9091}
9092
9093static const char*
9094wlan_endpoint_get_filter_type(endpoint_item_t* endpoint, conv_filter_type_e filter)
9095{
9096 if ((filter == CONV_FT_ANY_ADDRESS) && (endpoint->myaddress.type == wlan_address_type))
9097 return "wlan.addr";
9098
9099 return CONV_FILTER_INVALID"INVALID";
9100}
9101
9102static et_dissector_info_t wlan_endpoint_dissector_info = {&wlan_endpoint_get_filter_type};
9103
9104static tap_packet_status
9105wlan_endpoint_packet(void *pit, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *vip, tap_flags_t flags)
9106{
9107 conv_hash_t *hash = (conv_hash_t*) pit;
9108 hash->flags = flags;
9109 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
9110 tap_packet_status status = TAP_PACKET_DONT_REDRAW;
9111
9112 /* Take two "add" passes per packet, adding for each direction, ensures that all
9113 packets are counted properly (even if address is sending to itself)
9114 XXX - this could probably be done more efficiently inside endpoint_table */
9115 if (whdr->src.type != AT_NONE) {
9116 add_endpoint_table_data(hash, &whdr->src, 0, true1, 1, pinfo->fd->pkt_len, &wlan_endpoint_dissector_info, ENDPOINT_NONECONVERSATION_NONE);
9117 status = TAP_PACKET_REDRAW;
9118 }
9119
9120 if (whdr->dst.type != AT_NONE) {
9121 add_endpoint_table_data(hash, &whdr->dst, 0, false0, 1, pinfo->fd->pkt_len, &wlan_endpoint_dissector_info, ENDPOINT_NONECONVERSATION_NONE);
9122 status = TAP_PACKET_REDRAW;
9123 }
9124
9125 return status;
9126}
9127
9128static const char*
9129wlan_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src)
9130{
9131 if (is_src)
9132 return "wlan.sa";
9133
9134 return "wlan.da";
9135}
9136
9137static const char*
9138wlan_bssid_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src _U___attribute__((unused)))
9139{
9140 return "wlan.bssid";
9141}
9142
9143static const char*
9144wlan_ra_ta_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src)
9145{
9146 if (is_src)
9147 return "wlan.ta";
9148
9149 return "wlan.ra";
9150}
9151
9152static const char*
9153wlan_aid_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src _U___attribute__((unused)))
9154{
9155 return "wlan.fc.sid.association_id";
9156}
9157
9158static void
9159beacon_interval_base_custom(char *result, uint32_t beacon_interval)
9160{
9161 double temp_double;
9162
9163 temp_double = (double)beacon_interval;
9164 snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (temp_double * 1024 / 1000000));
9165}
9166
9167static void
9168allocation_duration_base_custom(char *result, uint32_t allocation_duration)
9169{
9170 double temp_double;
9171
9172 temp_double = (double)allocation_duration;
9173 snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (temp_double / 1000000));
9174}
9175
9176static void
9177extra_one_base_custom(char *result, uint32_t value)
9178{
9179 snprintf(result, ITEM_LABEL_LENGTH240, "%d", value+1);
9180}
9181
9182static void
9183extra_one_mul_two_base_custom(char *result, uint32_t value)
9184{
9185 snprintf(result, ITEM_LABEL_LENGTH240, "%d", (value+1)*2);
9186}
9187
9188static void
9189rcpi_and_power_level_custom(char *result, uint8_t value)
9190{
9191 /* 802.11-2016 section 9.4.2.38
9192 RCPI = |2 x (P + 110)| in steps of 0.5 dB */
9193
9194 if (value == 0)
9195 snprintf(result, ITEM_LABEL_LENGTH240, "%d (P < -109.5 dBm)", value);
9196 else if (value == 220)
9197 snprintf(result, ITEM_LABEL_LENGTH240, "%d (P >= 0 dBm)", value);
9198 else if (value < 220)
9199 snprintf(result, ITEM_LABEL_LENGTH240, "%d (P = %.1f dBm)", value, ((double)value) / 2 - 110);
9200 else if (value < 255)
9201 snprintf(result, ITEM_LABEL_LENGTH240, "%d (Reserved)", value);
9202 else
9203 snprintf(result, ITEM_LABEL_LENGTH240, "%d (Measurement not available)", value);
9204}
9205
9206static void
9207sts_custom(char *result, uint32_t value)
9208{
9209 snprintf(result, ITEM_LABEL_LENGTH240, "%d STS", value + 1);
9210}
9211
9212static void
9213rep_custom(char *result, uint32_t value)
9214{
9215 snprintf(result, ITEM_LABEL_LENGTH240, "%u repetition%s (%u)", value + 1, plurality(value + 1, "", "s")((value + 1) == 1 ? ("") : ("s")), value);
9216}
9217
9218static void
9219hundred_us_base_custom(char *result, uint32_t value)
9220{
9221 snprintf(result, ITEM_LABEL_LENGTH240, "%0.1f ms (%u)", ((double)value * 100 / 1000), value);
9222}
9223
9224static void
9225partial_tsf_custom(char *result, uint32_t value)
9226{
9227 uint32_t shifted = value << 10;
9228 snprintf(result, ITEM_LABEL_LENGTH240, "%u %s (%u)", shifted,
9229 unit_name_string_get_value(shifted, &units_microseconds), value);
9230}
9231
9232/*
9233 * We use this is displaying the ru allocation region.
9234 */
9235static uint8_t global_he_trigger_bw;
9236
9237static void
9238he_ru_allocation_base_custom(char *result, uint32_t ru_allocation)
9239{
9240 uint32_t tones = 0;
9241
9242 switch (global_he_trigger_bw) {
9243 case 0:
9244 if (ru_allocation <= 8) {
9245 tones = 26;
9246 break;
9247 }
9248 if (ru_allocation >= 37 && ru_allocation <= 40) {
9249 tones = 52;
9250 break;
9251 }
9252 if (ru_allocation >= 53 && ru_allocation <= 54) {
9253 tones = 106;
9254 break;
9255 }
9256 if (ru_allocation == 61) {
9257 tones = 242;
9258 break;
9259 }
9260 // error
9261 break;
9262 case 1:
9263 if (ru_allocation <= 17) {
9264 tones = 26;
9265 break;
9266 }
9267 if (ru_allocation >= 37 && ru_allocation <= 44) {
9268 tones = 52;
9269 break;
9270 }
9271 if (ru_allocation >= 53 && ru_allocation <= 56) {
9272 tones = 106;
9273 break;
9274 }
9275 if (ru_allocation >= 61 && ru_allocation <= 62) {
9276 tones = 242;
9277 break;
9278 }
9279 if (ru_allocation == 65) {
9280 tones = 484;
9281 break;
9282 }
9283 // error
9284 break;
9285 case 2:
9286 /* fall-through */
9287 case 3:
9288 if (ru_allocation <= 36) {
9289 tones = 26;
9290 break;
9291 }
9292 if (ru_allocation >= 37 && ru_allocation <= 52) {
9293 tones = 52;
9294 break;
9295 }
9296 if (ru_allocation >= 53 && ru_allocation <= 60) {
9297 tones = 106;
9298 break;
9299 }
9300 if (ru_allocation >= 61 && ru_allocation <= 64) {
9301 tones = 242;
9302 break;
9303 }
9304 if (ru_allocation >= 65 && ru_allocation <= 66) {
9305 tones = 484;
9306 break;
9307 }
9308 if (ru_allocation == 67) {
9309 tones = 996;
9310 break;
9311 }
9312 if (ru_allocation == 68 && global_he_trigger_bw == 3) {
9313 tones = 2*996;
9314 break;
9315 }
9316 break;
9317 default:
9318 break;
9319 }
9320
9321 if (tones)
9322 snprintf(result, ITEM_LABEL_LENGTH240, "%d (%d tones)", ru_allocation, tones);
9323 else
9324 snprintf(result, ITEM_LABEL_LENGTH240, "%d (bogus number of tones)", ru_allocation);
9325}
9326
9327static void
9328eht_ru_allocation_base_custom(char *result, uint32_t ru_allocation)
9329{
9330 char *ru_str;
9331
9332 /* TODO: check with PS160, B0 of RU allocation, BW */
9333 if (ru_allocation <= 36) {
9334 ru_str = "RU size: 26";
9335 } else if (ru_allocation >= 37 && ru_allocation <= 52) {
9336 ru_str = "RU size: 52";
9337 } else if (ru_allocation >= 53 && ru_allocation <= 60) {
9338 ru_str = "RU size: 106";
9339 } else if (ru_allocation >= 61 && ru_allocation <= 64) {
9340 ru_str = "RU size: 242";
9341 } else if (ru_allocation == 65 || ru_allocation == 66) {
9342 ru_str = "RU size: 484";
9343 } else if (ru_allocation == 67) {
9344 ru_str = "RU size: 996";
9345 } else if (ru_allocation == 68) {
9346 ru_str = "RU size: 2x996";
9347 } else if (ru_allocation == 69) {
9348 ru_str = "RU size: 4x996";
9349 } else if (ru_allocation >= 70 && ru_allocation <= 81) {
9350 ru_str = "MRU size: 52+26";
9351 } else if (ru_allocation >= 82 && ru_allocation <= 89) {
9352 ru_str = "MRU size: 106+26";
9353 } else if (ru_allocation >= 90 && ru_allocation <= 93) {
9354 ru_str = "MRU size: 484+242";
9355 } else if (ru_allocation >= 94 && ru_allocation <= 95) {
9356 ru_str = "MRU size: 996+484";
9357 } else if (ru_allocation >= 96 && ru_allocation <= 99) {
9358 ru_str = "MRU size: 996+484+242";
9359 } else if (ru_allocation >= 100 && ru_allocation <= 103) {
9360 ru_str = "MRU size: 2x996+484";
9361 } else if (ru_allocation == 104) {
9362 ru_str = "MRU size: 3x996";
9363 } else if (ru_allocation == 105 || ru_allocation == 106) {
9364 ru_str = "MRU size: 3x996+484";
9365 } else {
9366 ru_str = "Reserved";
9367 }
9368
9369 snprintf(result, ITEM_LABEL_LENGTH240, "%d (%s)", ru_allocation, ru_str);
9370}
9371
9372/*
9373 * We use this to display the ANSI/CTA-2063 Serial number length
9374 */
9375static void
9376vs_sgdsn_serialnumber_len_custom(char *result, uint32_t val)
9377{
9378 if (val >= 0x30 && val <= 0x39) {
9379 snprintf(result, ITEM_LABEL_LENGTH240, "%d byte(s)", val-0x30);
9380 } else if (val >= 0x41 && val <= 0x46) {
9381 snprintf(result, ITEM_LABEL_LENGTH240, "%d byte(s)", val-0x37);
9382 } else {
9383 snprintf(result, ITEM_LABEL_LENGTH240, "Invalid length: %u", val);
9384 }
9385}
9386
9387/* ************************************************************************* */
9388/* Mesh Control field helper functions
9389 *
9390 * Per IEEE 802.11s Draft 12.0 section 7.2.2.1:
9391 *
9392 * The frame body consists of either:
9393 * The MSDU (or a fragment thereof), the Mesh Control field (if and only if the
9394 * frame is transmitted by a mesh STA and the Mesh Control Present subfield of
9395 * the QoS Control field is 1)...
9396 *
9397 * 8.2.4.5.1 "QoS Control field structure", table 8-4, in 802.11-2012,
9398 * seems to indicate that the bit that means "Mesh Control Present" in
9399 * frames sent by mesh STAs in a mesh BSS is part of the TXOP Limit field,
9400 * the AP PS Buffer State field, the TXOP Duration Requested field, or the
9401 * Queue Size field in some data frames in non-mesh BSSes.
9402 *
9403 * We need a statefull sniffer for that. For now, use heuristics.
9404 *
9405 * Notably, only mesh data frames contain the Mesh Control field in the header.
9406 * Other frames that contain mesh control (i.e., multihop action frames) have
9407 * it deeper in the frame body where it can be definitively identified.
9408 * Further, mesh data frames always have to-ds and from-ds either 11 or 01. We
9409 * use these facts to make our heuristics more reliable.
9410 * ************************************************************************* */
9411static int
9412has_mesh_control(uint16_t fcf, uint16_t qos_ctl, uint8_t mesh_flags)
9413{
9414 /* assume mesh control present if the QOS field's Mesh Control Present bit is
9415 * set, all reserved bits in the mesh_flags field are zero, and the address
9416 * extension mode is not a reserved value.
9417 */
9418 return (((FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) || (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T2(0x02 << 8))) &&
9419 (QOS_MESH_CONTROL_PRESENT(qos_ctl)(((qos_ctl) & 0x0100) >> 8)) &&
9420 ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION0x3) == 0) &&
9421 ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3) != MESH_FLAGS_ADDRESS_EXTENSION0x3));
9422}
9423
9424/****************************************************************************** */
9425/*
9426 * locally originated mesh frames will have a mesh control field, but no QoS header
9427 * detect the presence of mesh control field by checking if mesh flags are legal
9428 * and confirming that the next header is an 802.2 LLC header
9429 *
9430 ****************************************************************************** */
9431static int
9432has_mesh_control_local(uint16_t fcf, uint8_t mesh_flags, uint16_t next_header)
9433{
9434 return (((FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) || (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T2(0x02 << 8))) &&
9435 ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION0x3) == 0) &&
9436 ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3) != MESH_FLAGS_ADDRESS_EXTENSION0x3)) &&
9437 next_header == 0xaaaa;
9438}
9439
9440static int
9441find_mesh_control_length(uint8_t mesh_flags)
9442{
9443 return 6 + 6*(mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3);
9444}
9445
9446static mimo_control_t
9447get_mimo_control(tvbuff_t *tvb, int offset)
9448{
9449 uint16_t mimo;
9450 mimo_control_t output;
9451
9452 mimo = tvb_get_letohs(tvb, offset);
9453
9454 output.nc = (mimo & 0x0003) + 1;
9455 output.nr = ((mimo & 0x000C) >> 2) + 1;
9456 output.chan_width = (mimo & 0x0010) >> 4;
9457 output.coefficient_size = 4; /* XXX - Is this a good default? */
9458
9459 switch ((mimo & 0x0060) >> 5)
9460 {
9461 case 0:
9462 output.grouping = 1;
9463 break;
9464
9465 case 1:
9466 output.grouping = 2;
9467 break;
9468
9469 case 2:
9470 output.grouping = 4;
9471 break;
9472
9473 default:
9474 output.grouping = 1;
9475 break;
9476 }
9477
9478 switch ((mimo & 0x0180) >> 7)
9479 {
9480 case 0:
9481 output.coefficient_size = 4;
9482 break;
9483
9484 case 1:
9485 output.coefficient_size = 5;
9486 break;
9487
9488 case 2:
9489 output.coefficient_size = 6;
9490 break;
9491
9492 case 3:
9493 output.coefficient_size = 8;
9494 break;
9495 }
9496
9497 output.codebook_info = (mimo & 0x0600) >> 9;
9498 output.remaining_matrix_segment = (mimo & 0x3800) >> 11;
9499
9500 return output;
9501}
9502
9503static int
9504get_mimo_na(uint8_t nr, uint8_t nc)
9505{
9506 if ((nr == 2) && (nc == 1)) {
9507 return 2;
9508 } else if ((nr == 2) && (nc == 2)) {
9509 return 2;
9510 } else if ((nr == 3) && (nc == 1)) {
9511 return 4;
9512 } else if ((nr == 3) && (nc == 2)) {
9513 return 6;
9514 } else if ((nr == 3) && (nc == 3)) {
9515 return 6;
9516 } else if ((nr == 4) && (nc == 1)) {
9517 return 6;
9518 } else if ((nr == 4) && (nc == 2)) {
9519 return 10;
9520 } else if ((nr == 4) && (nc == 3)) {
9521 return 12;
9522 } else if ((nr == 4) && (nc == 4)) {
9523 return 12;
9524 } else{
9525 return 0;
9526 }
9527}
9528
9529static int
9530get_mimo_ns(bool_Bool chan_width, uint8_t output_grouping)
9531{
9532 int ns = 0;
9533
9534 if (chan_width)
9535 {
9536 switch (output_grouping)
9537 {
9538 case 1:
9539 ns = 114;
9540 break;
9541
9542 case 2:
9543 ns = 58;
9544 break;
9545
9546 case 4:
9547 ns = 30;
9548 break;
9549
9550 default:
9551 ns = 0;
9552 }
9553 } else {
9554 switch (output_grouping)
9555 {
9556 case 1:
9557 ns = 56;
9558 break;
9559
9560 case 2:
9561 ns = 30;
9562 break;
9563
9564 case 4:
9565 ns = 16;
9566 break;
9567
9568 default:
9569 ns = 0;
9570 }
9571 }
9572
9573 return ns;
9574}
9575
9576static int
9577add_mimo_csi_matrices_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
9578{
9579 proto_tree *snr_tree;
9580 int csi_matrix_size, start_offset;
9581 int ns, i;
9582
9583 start_offset = offset;
9584 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
9585 ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
9586
9587 for (i = 1; i <= mimo_cntrl.nr; i++)
9588 {
9589 uint8_t snr;
9590
9591 snr = tvb_get_uint8(tvb, offset);
9592 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
9593 snr, "Channel %d - Signal to Noise Ratio: 0x%02X", i, snr);
9594 offset += 1;
9595 }
9596
9597 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
9598 csi_matrix_size = ns*(3+(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size));
9599 csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size)(((csi_matrix_size) + ((unsigned)(8U-1U))) & (~((unsigned
)(8U-1U))))
/ 8;
9600 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
9601 offset += csi_matrix_size;
9602 return offset - start_offset;
9603}
9604
9605static int
9606add_mimo_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
9607{
9608 proto_tree *snr_tree;
9609 int csi_matrix_size, start_offset;
9610 int ns, i;
9611
9612 start_offset = offset;
9613 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc, ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
9614
9615 for (i = 1; i <= mimo_cntrl.nc; i++)
9616 {
9617 uint8_t snr;
9618
9619 snr = tvb_get_uint8(tvb, offset);
9620 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
9621 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
9622 offset += 1;
9623 }
9624
9625 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
9626 csi_matrix_size = ns*(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size);
9627 csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size)(((csi_matrix_size) + ((unsigned)(8U-1U))) & (~((unsigned
)(8U-1U))))
/ 8;
9628 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_bf_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
9629 offset += csi_matrix_size;
9630 return offset - start_offset;
9631}
9632
9633static int
9634add_mimo_compressed_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
9635{
9636 proto_tree *snr_tree;
9637 int csi_matrix_size, start_offset;
9638 int ns, na, i;
9639
9640 start_offset = offset;
9641 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
9642 ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
9643
9644 for (i = 1; i <= mimo_cntrl.nc; i++)
9645 {
9646 int8_t snr;
9647 char edge_sign;
9648
9649 snr = tvb_get_int8(tvb, offset);
9650
9651 switch(snr) {
9652 case -128:
9653 edge_sign = '<';
9654 break;
9655 case 127:
9656 edge_sign = '>';
9657 break;
9658 default:
9659 edge_sign = ' ';
9660 break;
9661 }
9662 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
9663 snr, "Stream %d - Signal to Noise Ratio: %c%3.2fdB", i, edge_sign,snr/4.0+22.0);
9664 offset += 1;
9665 }
9666
9667 na = get_mimo_na(mimo_cntrl.nr, mimo_cntrl.nc);
9668 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
9669 csi_matrix_size = ns*(na*((mimo_cntrl.codebook_info+1)*2 + 2)/2);
9670 csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size)(((csi_matrix_size) + ((unsigned)(8U-1U))) & (~((unsigned
)(8U-1U))))
/ 8;
9671 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_cbf_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
9672 offset += csi_matrix_size;
9673 return offset - start_offset;
9674}
9675
9676static void
9677mesh_active_window_base_custom(char *result, uint32_t mesh_active_window)
9678{
9679 snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (mesh_active_window * 1024.0 / 1000000));
9680}
9681
9682/* ************************************************************************* */
9683/* This is the capture function used to update packet counts */
9684/* ************************************************************************* */
9685static bool_Bool
9686capture_ieee80211_common(const unsigned char * pd, int offset, int len,
9687 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)), bool_Bool datapad)
9688{
9689 uint16_t fcf, hdr_length;
9690
9691 if (!BYTES_ARE_IN_FRAME(offset, len, 2)((unsigned)(offset) + (unsigned)(2) > (unsigned)(offset) &&
(unsigned)(offset) + (unsigned)(2) <= (unsigned)(len))
)
9692 return false0;
9693
9694 fcf = pletohu16(&pd[offset]);
9695
9696 if (IS_PROTECTED(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x40)
&& (wlan_ignore_prot == WLAN_IGNORE_PROT_NO0))
9697 return false0;
9698
9699 switch (COMPOSE_FRAME_TYPE (fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
) {
9700
9701 case DATA0x20:
9702 case DATA_CF_ACK0x21:
9703 case DATA_CF_POLL0x22:
9704 case DATA_CF_ACK_POLL0x23:
9705 case DATA_QOS_DATA0x28:
9706 case DATA_QOS_DATA_CF_ACK0x29:
9707 case DATA_QOS_DATA_CF_POLL0x2A:
9708 case DATA_QOS_DATA_CF_ACK_POLL0x2B:
9709 {
9710 /* These are data frames that actually contain *data*. */
9711 hdr_length = (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) ? DATA_LONG_HDR_LEN30 : DATA_SHORT_HDR_LEN24;
9712
9713 if (DATA_FRAME_IS_QOS(COMPOSE_FRAME_TYPE(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))) &
0x08)
) {
9714 /* QoS frame, so the header includes a QoS field */
9715 uint16_t qosoff; /* Offset of the 2-byte QoS field */
9716 uint8_t mesh_flags;
9717
9718 qosoff = hdr_length;
9719 hdr_length += 2; /* Include the QoS field in the header length */
9720
9721 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
9722 /* Frame has a 4-byte HT Control field */
9723 hdr_length += 4;
9724 }
9725
9726 if (datapad) {
9727 /*
9728 * Include the padding between the 802.11 header and the body,
9729 * as "helpfully" provided by some Atheros adapters.
9730 *
9731 * In the Atheros mesh capture sample we have, the padding
9732 * is before the mesh header, possibly because it doesn't
9733 * recognize the mesh header.
9734 */
9735 hdr_length = WS_ROUNDUP_4(hdr_length)(((hdr_length) + ((unsigned)(4U-1U))) & (~((unsigned)(4U-
1U))))
;
9736 }
9737
9738 /*
9739 * Does it look as if we have a mesh header?
9740 * Look at the Mesh Control subfield of the QoS field and at the
9741 * purported mesh flag fields.
9742 */
9743 if (!BYTES_ARE_IN_FRAME(offset, hdr_length, 1)((unsigned)(offset) + (unsigned)(1) > (unsigned)(offset) &&
(unsigned)(offset) + (unsigned)(1) <= (unsigned)(hdr_length
))
)
9744 return false0;
9745
9746 mesh_flags = pd[hdr_length];
9747 if (has_mesh_control(fcf, pletohu16(&pd[qosoff]), mesh_flags)) {
9748 /* Yes, add the length of that in as well. */
9749 hdr_length += find_mesh_control_length(mesh_flags);
9750 }
9751 }
9752 /* I guess some bridges take Netware Ethernet_802_3 frames,
9753 which are 802.3 frames (with a length field rather than
9754 a type field, but with no 802.2 header in the payload),
9755 and just stick the payload into an 802.11 frame. I've seen
9756 captures that show frames of that sort.
9757
9758 We also handle some odd form of encapsulation in which a
9759 complete Ethernet frame is encapsulated within an 802.11
9760 data frame, with no 802.2 header. This has been seen
9761 from some hardware.
9762
9763 On top of that, at least at some point it appeared that
9764 the OLPC XO sent out frames with two bytes of 0 between
9765 the "end" of the 802.11 header and the beginning of
9766 the payload.
9767
9768 So, if the packet doesn't start with 0xaa 0xaa:
9769
9770 we first use the same scheme that linux-wlan-ng does to detect
9771 those encapsulated Ethernet frames, namely looking to see whether
9772 the frame either starts with 6 octets that match the destination
9773 address from the 802.11 header or has 6 octets that match the
9774 source address from the 802.11 header following the first 6 octets,
9775 and, if so, treat it as an encapsulated Ethernet frame;
9776
9777 otherwise, we use the same scheme that we use in the Ethernet
9778 dissector to recognize Netware 802.3 frames, namely checking
9779 whether the packet starts with 0xff 0xff and, if so, treat it
9780 as an encapsulated IPX frame, and then check whether the
9781 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
9782 frame. */
9783 if (!BYTES_ARE_IN_FRAME(offset+hdr_length, len, 2)((unsigned)(offset+hdr_length) + (unsigned)(2) > (unsigned
)(offset+hdr_length) && (unsigned)(offset+hdr_length)
+ (unsigned)(2) <= (unsigned)(len))
)
9784 return false0;
9785
9786 if ((pd[offset+hdr_length] != 0xaa) && (pd[offset+hdr_length+1] != 0xaa)) {
9787#if 0
9788 /* XXX - this requires us to parse the header to find the source
9789 and destination addresses. */
9790 if (BYTES_ARE_IN_FRAME(offset+hdr_length, len, 12)((unsigned)(offset+hdr_length) + (unsigned)(12) > (unsigned
)(offset+hdr_length) && (unsigned)(offset+hdr_length)
+ (unsigned)(12) <= (unsigned)(len))
) {
9791 /* We have two MAC addresses after the header. */
9792 if ((memcmp(&pd[offset+hdr_length+6], pinfo->dl_src.data, 6) == 0) ||
9793 (memcmp(&pd[offset+hdr_length+6], pinfo->dl_dst.data, 6) == 0)) {
9794 return capture_eth (pd, offset + hdr_length, len, cpinfo, pseudo_header);
9795 }
9796 }
9797#endif
9798 if ((pd[offset+hdr_length] == 0xff) && (pd[offset+hdr_length+1] == 0xff))
9799 return call_capture_dissector (ipx_cap_handle, pd, offset+hdr_length, len, cpinfo, pseudo_header);
9800 else if ((pd[offset+hdr_length] == 0x00) && (pd[offset+hdr_length+1] == 0x00))
9801 return call_capture_dissector (llc_cap_handle, pd, offset + hdr_length + 2, len, cpinfo, pseudo_header);
9802 }
9803 else {
9804 return call_capture_dissector (llc_cap_handle, pd, offset + hdr_length, len, cpinfo, pseudo_header);
9805 }
9806 break;
9807 }
9808 }
9809
9810 return false0;
9811}
9812
9813/*
9814 * Handle 802.11 with a variable-length link-layer header.
9815 */
9816static bool_Bool
9817capture_ieee80211(const unsigned char * pd, int offset, int len, capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)))
9818{
9819 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, false0);
9820}
9821
9822/*
9823 * Handle 802.11 with a variable-length link-layer header and data padding.
9824 */
9825static bool_Bool
9826capture_ieee80211_datapad(const unsigned char * pd, int offset, int len,
9827 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)))
9828{
9829 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, true1);
9830}
9831
9832
9833/* ************************************************************************* */
9834/* Add the subtree used to store the fixed parameters */
9835/* ************************************************************************* */
9836static proto_tree *
9837get_fixed_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size,
9838 bool_Bool no_append)
9839{
9840 proto_item *fixed_fields;
9841
9842 fixed_fields = proto_tree_add_item(tree, hf_ieee80211_fixed_parameters, tvb, start, size, ENC_NA0x00000000);
9843 if (!no_append)
9844 proto_item_append_text(fixed_fields, " (%d bytes)", size);
9845
9846 return proto_item_add_subtree(fixed_fields, ett_fixed_parameters);
9847}
9848
9849
9850/* ************************************************************************* */
9851/* Add the subtree used to store tagged parameters */
9852/* ************************************************************************* */
9853static proto_tree *
9854get_tagged_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size)
9855{
9856 proto_item *tagged_fields;
9857
9858 tagged_fields = proto_tree_add_item(tree, hf_ieee80211_tagged_parameters, tvb, start, -1, ENC_NA0x00000000);
9859 proto_item_append_text(tagged_fields, " (%d bytes)", size);
9860
9861 return proto_item_add_subtree(tagged_fields, ett_tagged_parameters);
9862}
9863
9864static void
9865add_ptk_analysis(tvbuff_t *tvb, proto_tree *tree, DOT11DECRYPT_KEY_ITEM *used_key)
9866{
9867 if (!used_key) {
9868 return;
9869 }
9870 const uint8_t *key = NULL((void*)0);
9871 proto_item *ti;
9872 char buf[SHORT_STR256];
9873 int len = Dot11DecryptGetKCK(used_key, &key);
9874 bytes_to_hexstr(buf, key, len);
9875 buf[2 * len] = '\0';
9876 ti = proto_tree_add_string(tree, hf_ieee80211_fc_analysis_kck, tvb, 0, 0, buf);
9877 proto_item_set_generated(ti);
9878
9879 len = Dot11DecryptGetKEK(used_key, &key);
9880 bytes_to_hexstr(buf, key, len);
9881 buf[2 * len] = '\0';
9882 ti = proto_tree_add_string(tree, hf_ieee80211_fc_analysis_kek, tvb, 0, 0, buf);
9883 proto_item_set_generated(ti);
9884}
9885
9886static int
9887dissect_vendor_action_marvell(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
9888{
9889 uint8_t octet;
9890 int offset = 0;
9891
9892 octet = tvb_get_uint8(tvb, offset);
9893 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_action_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9894 offset += 1;
9895 switch (octet)
9896 {
9897 case MRVL_ACTION_MESH_MANAGEMENT1:
9898 octet = tvb_get_uint8(tvb, offset);
9899 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9900 offset += 1;
9901 switch (octet)
9902 {
9903 case MRVL_MESH_MGMT_ACTION_RREQ0:
9904 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9905 offset += 1;
9906 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9907 offset += 1;
9908 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9909 offset += 1;
9910 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9911 offset += 1;
9912 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_rreqid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9913 offset += 4;
9914 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA0x00000000);
9915 offset += 6;
9916 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9917 offset += 4;
9918 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9919 offset += 4;
9920 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9921 offset += 4;
9922 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9923 offset += 1;
9924 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9925 offset += 1;
9926 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
9927 offset += 6;
9928 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9929 offset += 4;
9930 break;
9931 case MRVL_MESH_MGMT_ACTION_RREP1:
9932 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9933 offset += 1;
9934 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9935 offset += 1;
9936 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9937 offset += 1;
9938 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9939 offset += 1;
9940 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
9941 offset += 6;
9942 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9943 offset += 4;
9944 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9945 offset += 4;
9946 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9947 offset += 4;
9948 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA0x00000000);
9949 offset += 6;
9950 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9951 offset += 4;
9952 break;
9953 case MRVL_MESH_MGMT_ACTION_RERR2:
9954 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9955 offset += 1;
9956 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9957 offset += 1;
9958 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9959 offset += 1;
9960 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
9961 offset += 6;
9962 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9963 offset += 4;
9964 break;
9965 default:
9966 break;
9967 }
9968 break;
9969 default:
9970 break;
9971 }
9972
9973 return offset;
9974}
9975
9976static int
9977dissect_dscp_policy_query(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
9978 proto_tree *tree, int offset)
9979{
9980 int start_offset = offset;
9981
9982 while (tvb_captured_length_remaining(tvb, offset)) {
9983 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
9984 }
9985
9986 return offset - start_offset;
9987}
9988
9989static int * const rqst_control_fields[] = {
9990 &hf_ieee80211_oui_qos_mgmt_rq_ctrl_more,
9991 &hf_ieee80211_oui_qos_mgmt_rq_ctrl_reset,
9992 &hf_ieee80211_oui_qos_mgmt_rq_reserved,
9993 NULL((void*)0)
9994};
9995
9996static int
9997dissect_dscp_policy_request(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
9998 proto_tree *tree, int offset)
9999{
10000 int start_offset = offset;
10001
10002 proto_tree_add_bitmask(tree, tvb, offset,
10003 hf_ieee80211_oui_qos_mgmt_rqst_control,
10004 ett_pol_rqst_cont_tree, rqst_control_fields,
10005 ENC_NA0x00000000);
10006 offset += 1;
10007
10008 while (tvb_reported_length_remaining(tvb, offset)) {
10009 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
10010 }
10011
10012 return offset - start_offset;
10013}
10014
10015static int * const resp_control_fields[] = {
10016 &hf_ieee80211_oui_qos_mgmt_rsp_ctrl_more,
10017 &hf_ieee80211_oui_qos_mgmt_rsp_ctrl_reset,
10018 &hf_ieee80211_oui_qos_mgmt_rsp_reserved,
10019 NULL((void*)0)
10020};
10021
10022static int
10023dissect_dscp_policy_response(tvbuff_t *tvb, packet_info *pinfo,
10024 proto_tree *tree, int offset)
10025{
10026 int start_offset = offset;
10027 uint8_t count;
10028 wmem_strbuf_t *status_buf = wmem_strbuf_create(pinfo->pool)wmem_strbuf_new(pinfo->pool, "");
10029 int i;
10030
10031 proto_tree_add_bitmask(tree, tvb, offset,
10032 hf_ieee80211_oui_qos_mgmt_resp_control,
10033 ett_pol_resp_cont_tree, resp_control_fields,
10034 ENC_NA0x00000000);
10035 offset += 1;
10036
10037 count = tvb_get_uint8(tvb, offset);
10038 proto_tree_add_item(tree, hf_ieee80211_oui_qos_mgmt_count, tvb, offset,
10039 1, ENC_NA0x00000000);
10040 offset += 1;
10041
10042 for (i = 0; i < count; i++) {
10043 proto_tree *status_tree = NULL((void*)0);
10044 uint8_t scsid, status;
10045
10046 scsid = tvb_get_uint8(tvb, offset);
10047 status_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2,
10048 ett_dscp_policy_status_list,
10049 NULL((void*)0), "Status list item %d",
10050 i);
10051 proto_tree_add_item(status_tree, hf_ieee80211_dscp_policy_id, tvb,
10052 offset, 1, ENC_NA0x00000000);
10053 if (wmem_strbuf_get_len(status_buf) == 0) {
10054 wmem_strbuf_append_printf(status_buf, "%u:", scsid);
10055 } else {
10056 wmem_strbuf_append_printf(status_buf, " %u:", scsid);
10057 }
10058 offset += 1;
10059
10060 status = tvb_get_uint8(tvb, offset);
10061 proto_tree_add_item(status_tree, hf_ieee80211_dscp_policy_status, tvb,
10062 offset, 1, ENC_NA0x00000000);
10063 wmem_strbuf_append_printf(status_buf, "%u", status);
10064 offset += 1;
10065 }
10066 proto_tree_add_string(tree, hf_ieee80211_dscp_policy_scs_sts_list, tvb, 0, 1,
10067 wmem_strbuf_finalize(status_buf));
10068
10069 return offset - start_offset;
10070}
10071
10072static int
10073dissect_vendor_action_wfa_qos_mgmt(tvbuff_t *tvb, packet_info *pinfo,
10074 proto_tree *tree, void *data _U___attribute__((unused)))
10075{
10076 int offset = 0;
10077 uint8_t subtype = tvb_get_uint8(tvb, offset);
10078
10079 proto_tree_add_item(tree, hf_ieee80211_oui_qos_subtype, tvb, offset, 1,
10080 ENC_NA0x00000000);
10081 offset += 1;
10082
10083 proto_tree_add_item(tree, hf_ieee80211_oui_qos_mgmt_dialog_token, tvb, offset,
10084 1, ENC_NA0x00000000);
10085 offset += 1;
10086
10087 switch (subtype) {
10088 case 0:
10089 offset += dissect_dscp_policy_query(tvb, pinfo, tree, offset);
10090 break;
10091 case 1:
10092 offset += dissect_dscp_policy_request(tvb, pinfo, tree, offset);
10093 break;
10094 case 2:
10095 offset += dissect_dscp_policy_response(tvb, pinfo, tree, offset);
10096 break;
10097 }
10098
10099 return offset;
10100}
10101
10102static int
10103dissect_vendor_action_wifi_alliance(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
10104{
10105 uint8_t subtype;
10106 int offset = 0;
10107 int dissected;
10108 tvbuff_t *subtvb;
10109
10110 subtype = tvb_get_uint8(tvb, offset);
10111 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_action_type, tvb, offset,
10112 1, ENC_NA0x00000000);
10113 offset += 1;
10114
10115 subtvb = tvb_new_subset_remaining(tvb, offset);
10116 dissected = dissector_try_uint_with_data(wifi_alliance_action_subtype_table, subtype, subtvb, pinfo, tree, false0, NULL((void*)0));
10117 if (dissected <= 0)
10118 {
10119 call_data_dissector(subtvb, pinfo, tree);
10120 dissected = tvb_reported_length(subtvb);
10121 }
10122
10123 offset += dissected;
10124
10125 return offset;
10126}
10127
10128/*
10129 * This function is called from two different places. In one case it is called
10130 * without the tag and length. In other cases, it is called with those and
10131 * is asked to return the type and subtype. We know the difference because
10132 * type and subtype will be NULL in the first case.
10133 */
10134static unsigned
10135dissect_advertisement_protocol_common(packet_info *pinfo, proto_tree *tree,
10136 tvbuff_t *tvb, int offset, unsigned *type,
10137 unsigned *subtype)
10138{
10139 uint8_t tag_no = 0, tag_len, left;
10140 proto_item *item = NULL((void*)0), *adv_item;
10141 proto_tree *adv_tree, *adv_tuple_tree;
10142
10143 if (type)
10144 *type = 0xff; // Last reserved value
10145 if (subtype)
10146 *subtype = 0xff;
10147 tag_no = tvb_get_uint8(tvb, offset);
10148 if (type)
10149 item = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10150
10151 /*
10152 * If we have the tag and len, use the len in the tvb, otherwise ask
10153 * for the length of the tvb.
10154 */
10155 if (type)
10156 tag_len = tvb_get_uint8(tvb, offset + 1);
10157 else
10158 tag_len = tvb_reported_length_remaining(tvb, 0);
10159
10160 if (type && tag_no != TAG_ADVERTISEMENT_PROTOCOL108) {
10161 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_number,
10162 "Unexpected IE %d (expected Advertisement "
10163 "Protocol)", tag_no);
10164 return 2 + tag_len;
10165 }
10166 if (type)
10167 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
10168 if (tag_len < 2) {
10169 if (!type)
10170 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
10171 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
10172 "Advertisement Protocol: IE must be at least 2 "
10173 "octets long");
10174 return 2 + tag_len;
10175 }
10176
10177 left = tag_len;
10178 if (type) /* Skip past the header if there ... */
10179 offset += 2;
10180 adv_tree = proto_tree_add_subtree(tree, tvb, offset, left,
10181 ett_adv_proto, &adv_item, "Advertisement Protocol element");
10182
10183 while (left >= 2) {
10184 uint8_t id;
10185
10186 id = tvb_get_uint8(tvb, offset + 1);
10187 if (id == 0)
10188 proto_item_append_text(adv_item, ": ANQP");
10189 adv_tuple_tree = proto_tree_add_subtree_format(adv_tree, tvb, offset, 2, ett_adv_proto_tuple, &item,
10190 "Advertisement Protocol Tuple: %s",
10191 val_to_str(pinfo->pool, id, adv_proto_id_vals,
10192 "Unknown (%d)"));
10193
10194 proto_tree_add_item(adv_tuple_tree,
10195 hf_ieee80211_tag_adv_proto_resp_len_limit, tvb,
10196 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10197 proto_tree_add_item(adv_tuple_tree,
10198 hf_ieee80211_tag_adv_proto_pame_bi, tvb,
10199 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10200 offset += 1;
10201 left--;
10202 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_proto_id, tvb,
10203 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10204 offset += 1;
10205 left--;
10206
10207 if ((id == 0) && type)
10208 *type = ADV_PROTO_ID_ANQP0;
10209
10210 if (id == 221) {
10211 /* Vendor specific */
10212 uint8_t len = tvb_get_uint8(tvb, offset);
10213 unsigned oui;
10214 uint8_t wfa_subtype;
10215 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_vs_len, tvb, offset, 1, ENC_NA0x00000000);
10216 offset += 1;
10217 left -= 1;
10218 if (type)
10219 *type = ADV_PROTO_ID_VS221;
10220 if (len > left) {
10221 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
10222 "Vendor specific info length error");
10223 return 2 + tag_len;
10224 }
10225 proto_tree_add_item_ret_uint(adv_tuple_tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
10226 offset += 3;
10227 left -= 3;
10228 wfa_subtype = tvb_get_uint8(tvb, offset);
10229 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_anqp_wfa_subtype, tvb,
10230 offset, 1, ENC_NA0x00000000);
10231 offset += 1;
10232 left -= 1;
10233 if (oui == OUI_WFA0x506F9A) {
10234 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_dpp_subtype, tvb, offset, 1, ENC_NA0x00000000);
10235 if (subtype && wfa_subtype == WFA_SUBTYPE_DPP26) {
10236 *subtype = WFA_SUBTYPE_DPP26;
10237 *subtype |= (tvb_get_uint8(tvb, offset) << 8);
10238 }
10239 offset++;
10240 left--;
10241 }
10242 }
10243 }
10244
10245 if (left) {
10246 expert_add_info_format(pinfo, item, &ei_ieee80211_extra_data,
10247 "Unexpected extra data in the end");
10248 }
10249
10250 return 2 + tag_len;
10251}
10252
10253static int
10254dissect_advertisement_protocol(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
10255{
10256 return dissect_advertisement_protocol_common(pinfo, tree, tvb, 0, NULL((void*)0), NULL((void*)0));
10257}
10258
10259static void
10260dissect_anqp_query_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10261{
10262 while (offset + 2 <= end) {
10263 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_query_id,
10264 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10265 offset += 2;
10266 }
10267 if (offset != end) {
10268 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
10269 "Unexpected ANQP Query list format");
10270 }
10271}
10272
10273static void
10274dissect_hs20_anqp_hs_capability_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10275{
10276 while (offset < end) {
10277 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_hs_capability_list,
10278 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10279 offset++;
10280 }
10281}
10282
10283static void
10284dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10285{
10286 uint16_t id, len;
10287 proto_item *item;
10288 proto_tree *vtree;
10289 uint32_t oui;
10290 uint8_t subtype;
10291
10292 while (offset + 2 <= end) {
10293 id = tvb_get_letohs(tvb, offset);
10294 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_capability,
10295 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10296 offset += 2;
10297 if (id == ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797) {
10298 vtree = proto_item_add_subtree(item, ett_anqp_vendor_capab);
10299 len = tvb_get_letohs(tvb, offset);
10300 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vlen,
10301 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10302 offset += 2;
10303 if ((len < 3) || ((offset + len) > end)) {
10304 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_capability);
10305 return;
10306 }
10307 proto_tree_add_item_ret_uint(vtree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
10308 offset += 3;
10309 len -= 3;
10310
10311 switch (oui) {
10312 case OUI_WFA0x506F9A:
10313 if (len == 0)
10314 break;
10315 subtype = tvb_get_uint8(tvb, offset);
10316 proto_item_append_text(vtree, " - WFA - %s",
10317 val_to_str(pinfo->pool, subtype, wfa_anqp_subtype_vals,
10318 "Unknown (%u)"));
10319 proto_tree_add_item(vtree, hf_ieee80211_anqp_wfa_subtype,
10320 tvb, offset, 1, ENC_NA0x00000000);
10321 offset++;
10322 len--;
10323 switch (subtype) {
10324 case WFA_ANQP_SUBTYPE_HS2017:
10325 proto_tree_add_item(vtree, hf_ieee80211_hs20_anqp_subtype, tvb, offset, 1, ENC_NA0x00000000);
10326 proto_tree_add_item(vtree, hf_ieee80211_hs20_anqp_reserved, tvb, offset + 1, 1, ENC_NA0x00000000);
10327 offset += 2;
10328 len -= 2;
10329 dissect_hs20_anqp_hs_capability_list(vtree, tvb, offset, end);
10330 break;
10331 default:
10332 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
10333 tvb, offset, len, ENC_NA0x00000000);
10334 break;
10335 }
10336 break;
10337 default:
10338 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
10339 tvb, offset, len, ENC_NA0x00000000);
10340 break;
10341 }
10342
10343 offset += len;
10344 }
10345 }
10346 if (offset != end) {
10347 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
10348 "Unexpected ANQP Capability list format");
10349 }
10350}
10351
10352static const value_string venue_group_vals[] = {
10353 { 0, "Unspecified" },
10354 { 1, "Assembly" },
10355 { 2, "Business" },
10356 { 3, "Educational" },
10357 { 4, "Factory and Industrial" },
10358 { 5, "Institutional" },
10359 { 6, "Mercantile" },
10360 { 7, "Residential" },
10361 { 8, "Storage" },
10362 { 9, "Utility and Miscellaneous" },
10363 { 10, "Vehicular" },
10364 { 11, "Outdoor" },
10365 { 0, NULL((void*)0) }
10366};
10367static value_string_ext venue_group_vals_ext = VALUE_STRING_EXT_INIT(venue_group_vals){ _try_val_to_str_ext_init, 0, (sizeof (venue_group_vals) / sizeof
((venue_group_vals)[0]))-1, venue_group_vals, "venue_group_vals"
, ((void*)0) }
;
10368
10369static void
10370dissect_venue_info(proto_tree *tree, tvbuff_t *tvb, int offset)
10371{
10372 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_group,
10373 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10374 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_type,
10375 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
10376}
10377
10378static void
10379dissect_venue_name_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10380{
10381 proto_item *item;
10382
10383 dissect_venue_info(tree, tvb, offset);
10384 offset += 2;
10385 while (offset + 4 <= end) {
10386 uint8_t vlen = tvb_get_uint8(tvb, offset);
10387 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_length,
10388 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10389 offset += 1;
10390 if ((vlen > (end - offset)) || (vlen < 3)) {
10391 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_venue_length);
10392 break;
10393 }
10394 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_language,
10395 tvb, offset, 3, ENC_ASCII0x00000000);
10396 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_name,
10397 tvb, offset + 3, vlen - 3, ENC_UTF_80x00000002);
10398 offset += vlen;
10399 }
10400}
10401
10402static const value_string nw_auth_type_vals[] = {
10403 { 0, "Acceptance of terms and conditions" },
10404 { 1, "On-line enrollment supported" },
10405 { 2, "http/https redirection" },
10406 { 3, "DNS redirection" },
10407 { 0, NULL((void*)0) }
10408};
10409
10410static void
10411dissect_network_auth_type(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10412{
10413 while (offset + 3 <= end) {
10414 uint16_t len;
10415 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_indicator,
10416 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10417 offset += 1;
10418 len = tvb_get_letohs(tvb, offset);
10419 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url_len,
10420 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10421 offset += 2;
10422 if (len)
10423 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url,
10424 tvb, offset, len, ENC_ASCII0x00000000);
10425 offset += len;
10426 }
10427}
10428
10429static void
10430dissect_anqp_network_auth_type_timestamp(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10431{
10432 while (offset + 2 <= end) {
10433 uint8_t len;
10434 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_indicator,
10435 tvb, offset, 1, ENC_NA0x00000000);
10436 len = tvb_get_uint8(tvb, offset + 1);
10437 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_url_len,
10438 tvb, offset, 1, ENC_NA0x00000000);
10439 offset += 2;
10440 if(len)
10441 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_url,
10442 tvb, offset, len, ENC_ASCII0x00000000);
10443 offset += len;
10444 /* Optional Time Value - Either 0 or 10 octets */
10445 /* Format: Octet 0-1: Year (0-65534)
10446 Octet 2: Month (0-12)
10447 Octet 3: Day of month (0-31)
10448 Octet 4: Hours (0-23)
10449 Octet 5: Minutes (0-59)
10450 Octet 6: Seconds (0-59)
10451 Octet 7-8: Milliseconds (0-999)
10452 Octet 9: Reserved */
10453 if ((offset + 10) < end) {
10454 /* Enough bytes to dissect a timestamp */
10455 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_year,
10456 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10457 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_mon,
10458 tvb, offset, 1, ENC_NA0x00000000);
10459 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_day,
10460 tvb, offset, 1, ENC_NA0x00000000);
10461 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_hr,
10462 tvb, offset, 1, ENC_NA0x00000000);
10463 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_min,
10464 tvb, offset, 1, ENC_NA0x00000000);
10465 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_sec,
10466 tvb, offset, 1, ENC_NA0x00000000);
10467 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_msec,
10468 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10469 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_rsvd,
10470 tvb, offset, 1, ENC_NA0x00000000);
10471 offset += 10;
10472 } else {
10473 /* Not enough bytes to dissect a timestamp */
10474 }
10475 }
10476}
10477
10478static void
10479add_manuf(proto_item *item, tvbuff_t *tvb, int offset)
10480{
10481 const char *manuf_name;
10482
10483 manuf_name = tvb_get_manuf_name_if_known(tvb, offset);
10484 if (manuf_name == NULL((void*)0))
10485 return;
10486 proto_item_append_text(item, " - %s", manuf_name);
10487}
10488
10489static void
10490dissect_roaming_consortium_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
10491 int end)
10492{
10493 proto_item *item;
10494 uint8_t len;
10495
10496 while (offset < end) {
10497 len = tvb_get_uint8(tvb, offset);
10498 item = proto_tree_add_item(tree,
10499 hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
10500 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10501 offset += 1;
10502 if ((len > (end - offset)) || (len < 3)) {
10503 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_roaming_consortium_oi_len);
10504 break;
10505 }
10506 item = proto_tree_add_item(tree,
10507 hf_ieee80211_ff_anqp_roaming_consortium_oi,
10508 tvb, offset, len, ENC_NA0x00000000);
10509 add_manuf(item, tvb, offset);
10510 offset += len;
10511 }
10512}
10513
10514static const value_string ip_addr_avail_ipv6_vals[] = {
10515 { 0, "Address type not available" },
10516 { 1, "Address type available" },
10517 { 2, "Availability of the address type not known" },
10518 { 0, NULL((void*)0) }
10519};
10520
10521static const value_string ip_addr_avail_ipv4_vals[] = {
10522 { 0, "Address type not available" },
10523 { 1, "Public IPv4 address available" },
10524 { 2, "Port-restricted IPv4 address available" },
10525 { 3, "Single NATed private IPv4 address available" },
10526 { 4, "Double NATed private IPv4 address available" },
10527 { 5, "Port-restricted IPv4 address and single NATed IPv4 address available" },
10528 { 6, "Port-restricted IPv4 address and double NATed IPv4 address available" },
10529 { 7, "Availability of the address type is not known" },
10530 { 0, NULL((void*)0) }
10531};
10532
10533static void
10534dissect_ip_addr_type_availability_info(proto_tree *tree, tvbuff_t *tvb,
10535 int offset)
10536{
10537 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
10538 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10539 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
10540 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10541}
10542
10543static const value_string nai_realm_encoding_vals[] = {
10544 { 0, "Formatted in accordance with RFC 4282" },
10545 { 1, "UTF-8 formatted that is not formatted in accordance with RFC 4282" },
10546 { 0, NULL((void*)0) }
10547};
10548
10549static const range_string oper_class_rvals[] = {
10550 { 0, 0, "Unknown" }, /* 0 should not be used */
10551 { 1, 65, "Reserved" },
10552 { 66, 66, "0.863 GHz, 1 MHz Spacing" },
10553 { 67, 67, "0.863 GHz, 2 MHz Spacing" },
10554 { 68, 68, "0.902 GHz, 1 MHz Spacing" },
10555 { 69, 69, "0.902 GHz, 2 MHz Spacing" },
10556 { 70, 70, "0.902 GHz, 4 MHz Spacing" },
10557 { 71, 71, "0.902 GHz, 8 MHz Spacing" },
10558 { 72, 72, "0.902 GHz, 16 MHz Spacing" },
10559 { 73, 73, "0.9165 GHz, 1 MHz Spacing" },
10560 { 74, 74, "0.9175 GHz, 1 MHz Spacing" },
10561 { 75, 75, "0.9175 GHz, 2 MHz Spacing" },
10562 { 76, 76, "0.9175 GHz, 4 Spacing" },
10563 { 77, 77, "0.9014 GHz, 1 MHz Spacing" },
10564 { 78, 80, "Reserved" },
10565 { 81, 81, "2.407 GHz, Channels 1-13, 25 MHz Spacing" },
10566 { 82, 82, "2.414 GHz, Channel 14, 25 MHz Spacing" },
10567 { 83, 83, "2.407 GHz, Channels 1-9, 40 MHz Spacing" },
10568 { 84, 84, "2.407 GHz, Channels 5-13, 40 MHz Spacing" },
10569 { 85, 93, "Reserved" },
10570 { 94, 94, "3.0 GHz, Channels 133 and 137, 20 MHz Spacing" },
10571 { 95, 95, "3.0 GHz, Channels 132, 134, 136, and 138, 10 MHz Spacing" },
10572 { 96, 96, "3.0025 GHz, Channels 131-138, 5 MHz Spacing" },
10573 { 97, 100, "Reserved" },
10574 { 101, 101, "4.85 GHz, Channels 21 and 25, 20 MHz Spacing" },
10575 { 102, 102, "4.89 GHz, Channels 11, 13, 15, 17, and 19, 10 MHz Spacing" },
10576 { 103, 103, "4.9375 GHz, Channels 1-10, 5 MHz Spacing" },
10577 { 104, 104, "4.0 GHz, Channels 184 and 192, 40 MHz Spacing" },
10578 { 105, 105, "4.0 GHz, Channels 188 and 196, 40 MHz Spacing" },
10579 { 106, 106, "4.0 GHz, Channels 191 and 195, 20 MHz Spacing" },
10580 { 107, 107, "4.0 GHz, Channels 189, 191, 193, 195, and 197, 10 MHz Spacing" },
10581 { 108, 108, "4.0025 GHz, Channels 188-197, 5 MHz Spacing" },
10582 { 109, 109, "4.0 GHz, Channels 184, 188, 192, and 196, 20 MHz Spacing" },
10583 { 110, 110, "4.0 GHz, Channels 183-189, 10 MHz Spacing" },
10584 { 111, 111, "4.0025 GHz, Channels 182-189, 5 MHz Spacing" },
10585 { 112, 114, "Reserved" },
10586 { 115, 115, "5.0 GHz, Channels 36, 40, 44, and 48, 20 MHz Spacing" },
10587 { 116, 116, "5.0 GHz, Channels 36 and 44, 40 MHz Spacing" },
10588 { 117, 117, "5.0 GHz, Channels 40 and 48, 40 MHz Spacing" },
10589 { 118, 118, "5.0 GHz, Channels 52, 56, 60, and 64, 20 MHz Spacing" },
10590 { 119, 119, "5.0 GHz, Channels 52 and 60, 40 MHz Spacing" },
10591 { 120, 120, "5.0 GHz, Channels 56 and 64, 40 MHz Spacing" },
10592 { 121, 121, "5.0 GHz, Channels 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, and 140, 20 MHz Spacing" },
10593 { 122, 122, "5.0 GHz, Channels 100, 108, 116, 124, and 132, 40 MHz Spacing" },
10594 { 123, 123, "5.0 GHz, Channels 104, 112, 120, 128, and 136, 40 MHz Spacing" },
10595 { 124, 124, "5.0 GHz, Channels 149, 153, 157, and 161, 20 MHz Spacing" },
10596 { 125, 125, "5.0 GHz, Channels 149, 153, 157, 161, 165, and 169, 20 MHz Spacing" },
10597 { 126, 126, "5.0 GHz, Channels 149 and 157, 40 MHz Spacing" },
10598 { 127, 127, "5.0 GHz, Channels 153 and 161, 40 MHz Spacing" },
10599 { 128, 128, "5.0 GHz, Channel center frequency index 42, 58, 106, 122, 138 and 155, 80 MHz Spacing" },
10600 { 129, 129, "5.0 GHz, Channel center frequency index 50 and 114, 160 MHz Spacing" },
10601 { 130, 130, "5.0 GHz, Channel center frequency index 42, 58, 106, 122, 138 and 155, 80 MHz Spacing, 80+" },
10602 { 131, 131, "5.950 GHz, Channels 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97, 101, 105, 109, 113, 117, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, and 233, 20 MHz Spacing" },
10603 { 132, 132, "5.950 GHz, Channel center frequency index 3, 11, 19, 27, 35, 43, 51, 59, 67, 75, 83, 91, 99, 107, 115, 123, 131, 139, 147, 155, 163, 171, 179, 187, 195, 203, 211, 219, and 227, 40 MHz Spacing" },
10604 { 133, 133, "5.950 GHz, Channel center frequency index 7, 23, 39, 55, 71, 87, 103, 119, 135, 151, 167, 183, 199, and 215, 80 MHz Spacing" },
10605 { 134, 134, "5.950 GHz, Channel center frequency index 15, 47, 79, 111, 143, 175, and 207, 160 MHz Spacing" },
10606 { 135, 135, "5.950 GHz, Channel center frequency index 7, 23, 39, 55, 71, 87, 103, 119, 135, 151, 167, 183, 199, and 215, 80 MHz Spacing, 80+" },
10607 { 136, 136, "5.925 GHz, Channel center frequency index 2, 20 MHz Spacing" },
10608 { 137, 137, "5.925 GHz, Channel center frequency index 31, 63, 95, 127, 159, and 191, 320 MHz Spacing" },
10609 { 138, 179, "Reserved" },
10610 { 180, 180, "56.16 GHz, Channels 1, 2, 3, 4, 5, and 6, 2160 MHz Spacing" },
10611 { 181, 181, "56.16 GHz, Channels 2 and 3, 2160 MHz Spacing" },
10612 { 182, 182, "56.70 GHz, Channels 35, 36, 37, and 38, 1080 MHz Spacing" },
10613 { 183, 183, "42.66 GHz, Channels 1, 2, 3, 4, 5, 6, 7, and 8, 540 MHz Spacing" },
10614 { 184, 184, "47.52 GHz, Channels 9 and 10, 540 MHz Spacing" },
10615 { 185, 185, "42.93 GHz, Channels 11, 12, 13, and 14, 1080 MHz Spacing" },
10616 { 186, 186, "47.79 GHz, Channel 15, 1080 MHz Spacing" },
10617 { 187, 191, "Reserved" },
10618 { 192, 254, "Vendor-Specific" },
10619
10620 { 255, 255, "Reserved" },
10621 { 0, 0, NULL((void*)0) }
10622};
10623
10624static const value_string nai_realm_auth_param_id_vals[] = {
10625 { 1, "Expanded EAP Method" },
10626 { 2, "Non-EAP Inner Authentication Type" },
10627 { 3, "Inner Authentication EAP Method Type" },
10628 { 4, "Expanded Inner EAP Method" },
10629 { 5, "Credential Type" },
10630 { 6, "Tunneled EAP Method Credential Type" },
10631 { 221, "Vendor Specific" },
10632 { 0, NULL((void*)0) }
10633};
10634
10635static void
10636dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10637{
10638 uint16_t count, len;
10639 proto_item *item, *r_item;
10640 int f_end, eap_end;
10641 uint8_t nai_len, eap_count, eap_len, auth_param_count, auth_param_len;
10642 uint8_t auth_param_id;
10643 proto_tree *realm_tree, *eap_tree;
10644 const uint8_t *realm;
10645
10646 count = tvb_get_letohs(tvb, offset);
10647 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nai_realm_count,
10648 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10649 offset += 2;
10650 while (count > 0) {
10651 len = tvb_get_letohs(tvb, offset);
10652 realm_tree = proto_tree_add_subtree(tree, tvb, offset, 2 + len, ett_nai_realm, &r_item, "NAI Realm Data");
10653
10654 item = proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_field_len,
10655 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10656 offset += 2;
10657 if (offset + len > end) {
10658 expert_add_info_format(pinfo, item, &ei_ieee80211_ff_anqp_nai_field_len,
10659 "Invalid NAI Realm List");
10660 break;
10661 }
10662 f_end = offset + len;
10663 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_encoding,
10664 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10665 offset += 1;
10666 nai_len = tvb_get_uint8(tvb, offset);
10667 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_length,
10668 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10669 offset += 1;
10670 if (offset + nai_len > f_end) {
10671 expert_add_info_format(pinfo, r_item, &ei_ieee80211_ff_anqp_nai_field_len,
10672 "Invalid NAI Realm Data");
10673 break;
10674 }
10675 proto_tree_add_item_ret_string(realm_tree, hf_ieee80211_ff_anqp_nai_realm,
10676 tvb, offset, nai_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &realm);
10677 if (realm) {
10678 proto_item_append_text(r_item, " (%s)", realm);
10679 }
10680 offset += nai_len;
10681 eap_count = tvb_get_uint8(tvb, offset);
10682 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_eap_count,
10683 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10684 offset += 1;
10685
10686 while (eap_count > 0) {
10687 eap_len = tvb_get_uint8(tvb, offset);
10688 eap_end = offset + 1 + eap_len;
10689 eap_tree = proto_tree_add_subtree(realm_tree, tvb, offset, 1 + eap_len,
10690 ett_nai_realm_eap, NULL((void*)0), "EAP Method");
10691
10692 item = proto_tree_add_item(eap_tree,
10693 hf_ieee80211_ff_anqp_nai_realm_eap_len,
10694 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10695 offset += 1;
10696 if (offset + eap_len > f_end) {
10697 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_nai_realm_eap_len);
10698 break;
10699 }
10700
10701 proto_item_append_text(eap_tree, ": %s",
10702 val_to_str_ext(pinfo->pool, tvb_get_uint8(tvb, offset),
10703 &eap_type_vals_ext, "Unknown (%d)"));
10704 proto_tree_add_item(eap_tree, hf_ieee80211_ff_anqp_nai_realm_eap_method,
10705 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10706 offset += 1;
10707 auth_param_count = tvb_get_uint8(tvb, offset);
10708 proto_tree_add_item(eap_tree,
10709 hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
10710 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10711 offset += 1;
10712
10713 while (auth_param_count > 0) {
10714 auth_param_id = tvb_get_uint8(tvb, offset);
10715 proto_tree_add_item(eap_tree,
10716 hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
10717 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10718 offset += 1;
10719 auth_param_len = tvb_get_uint8(tvb, offset);
10720 proto_tree_add_item(eap_tree,
10721 hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
10722 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10723 offset += 1;
10724 item = proto_tree_add_item(
10725 eap_tree, hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
10726 tvb, offset, auth_param_len, ENC_NA0x00000000);
10727 if ((auth_param_id == 3) && (auth_param_len == 1)) {
10728 uint8_t inner_method = tvb_get_uint8(tvb, offset);
10729 const char *str;
10730 str = val_to_str_ext(pinfo->pool, inner_method, &eap_type_vals_ext, "Unknown (%d)");
10731
10732 proto_item_append_text(eap_tree, " / %s", str);
10733 proto_item_append_text(item, " - %s", str);
10734 }
10735 offset += auth_param_len;
10736
10737 auth_param_count--;
10738 }
10739
10740 offset = eap_end;
10741 eap_count--;
10742 }
10743
10744 offset = f_end;
10745 count--;
10746 }
10747}
10748
10749static void
10750dissect_3gpp_cellular_network_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
10751{
10752 uint8_t iei, num, plmn_idx = 0;
10753 proto_item *item;
10754
10755 /* See Annex A of 3GPP TS 24.234 v8.1.0 for description */
10756 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_gud, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10757 offset += 1;
10758 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_udhl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10759 offset += 1;
10760 iei = tvb_get_uint8(tvb, offset);
10761 item = proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_iei, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10762 if (iei == 0)
10763 proto_item_append_text(item, " (PLMN List)");
10764 else
10765 return;
10766 offset += 1;
10767 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_plmn_len, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10768 offset += 1;
10769 num = tvb_get_uint8(tvb, offset);
10770 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_num_plmns, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10771 offset += 1;
10772 while (num > 0) {
10773 proto_item *plmn_item = NULL((void*)0);
10774 proto_tree *plmn_tree = NULL((void*)0);
10775 unsigned plmn_val = 0;
10776
10777 if (tvb_reported_length_remaining(tvb, offset) < 3)
10778 break;
10779 plmn_val = tvb_get_letoh24(tvb, offset);
10780 plmn_item = proto_tree_add_uint_format(tree, hf_ieee80211_3gpp_gc_plmn,
10781 tvb, offset, 3, plmn_val, "PLMN %d (0x%x)",
10782 plmn_idx++, plmn_val);
10783 plmn_tree = proto_item_add_subtree(plmn_item, ett_ieee80211_3gpp_plmn);
10784 dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, plmn_tree, offset, E212_NONE, true1);
10785 num--;
10786 offset += 3;
10787 }
10788}
10789
10790static void
10791dissect_domain_name_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10792{
10793 uint8_t len;
10794
10795 while (offset < end) {
10796 len = tvb_get_uint8(tvb, offset);
10797 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name_len,
10798 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10799 offset += 1;
10800 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name,
10801 tvb, offset, len, ENC_ASCII0x00000000);
10802 offset += len;
10803 }
10804}
10805
10806static int
10807dissect_hs20_subscription_remediation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
10808 proto_tree *tree, void *data _U___attribute__((unused)))
10809{
10810 int offset = 0;
10811 uint8_t url_len = tvb_get_uint8(tvb, offset);
10812 proto_item *pi = NULL((void*)0);
10813
10814 proto_tree_add_item(tree, hf_ieee80211_hs20_subscription_remediation_url_len, tvb, offset,
10815 1, ENC_NA0x00000000);
10816 offset++;
10817 if (tvb_reported_length_remaining(tvb, offset) >= url_len) {
10818 pi = proto_tree_add_item(tree, hf_ieee80211_hs20_subscription_remediation_server_url,
10819 tvb, offset, url_len, ENC_ASCII0x00000000);
10820 offset += url_len;
10821 proto_item_set_url(pi);
10822 proto_tree_add_item(tree, hf_ieee80211_hs20_subscription_remediation_server_method,
10823 tvb, offset, 1, ENC_NA0x00000000);
10824 offset++;
10825 }
10826
10827 return offset;
10828}
10829
10830static int
10831dissect_hs20_deauthentication_imminent(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
10832 proto_tree *tree, void *data _U___attribute__((unused)))
10833{
10834 int offset = 0;
10835 uint8_t url_len = 0;
10836 proto_item *pi = NULL((void*)0);
10837
10838 proto_tree_add_item(tree, hf_ieee80211_hs20_deauth_reason_code, tvb, offset, 1, ENC_NA0x00000000);
10839 offset++;
10840
10841 proto_tree_add_item(tree, hf_ieee80211_hs20_reauth_delay, tvb, offset, 2,
10842 ENC_LITTLE_ENDIAN0x80000000);
10843 offset += 2;
10844
10845 url_len = tvb_get_uint8(tvb, offset);
10846 proto_tree_add_item(tree, hf_ieee80211_hs20_deauth_reason_url_len, tvb, offset, 1,
10847 ENC_NA0x00000000);
10848 offset++;
10849
10850 if (tvb_reported_length_remaining(tvb, offset) >= url_len) {
10851 pi = proto_tree_add_item(tree, hf_ieee80211_hs20_deauth_imminent_reason_url,
10852 tvb, offset, url_len, ENC_ASCII0x00000000);
10853 offset += url_len;
10854 proto_item_set_url(pi);
10855 }
10856 return offset;
10857}
10858
10859#define HS20_ANQP_HS_QUERY_LIST1 1
10860#define HS20_ANQP_HS_CAPABILITY_LIST2 2
10861#define HS20_ANQP_OPERATOR_FRIENDLY_NAME3 3
10862#define HS20_ANQP_WAN_METRICS4 4
10863#define HS20_ANQP_CONNECTION_CAPABILITY5 5
10864#define HS20_ANQP_NAI_HOME_REALM_QUERY6 6
10865#define HS20_ANQP_OPERATING_CLASS_INDICATION7 7
10866#define HS20_ANQP_OSU_PROVIDERS_LIST8 8
10867/* 9 is reserved */
10868#define HS20_ANQP_ICON_REQUEST10 10
10869#define HS20_ANQP_ICON_BINARY_FILE11 11
10870#define HS20_ANQP_OPERATOR_ICON_METADATA12 12
10871#define HS20_ANQP_ADVICE_OF_CHARGE13 13
10872
10873static const value_string hs20_anqp_subtype_vals[] = {
10874 { HS20_ANQP_HS_QUERY_LIST1, "HS Query list" },
10875 { HS20_ANQP_HS_CAPABILITY_LIST2, "HS Capability List" },
10876 { HS20_ANQP_OPERATOR_FRIENDLY_NAME3, "Operator Friendly Name" },
10877 { HS20_ANQP_WAN_METRICS4, "WAN Metrics" },
10878 { HS20_ANQP_CONNECTION_CAPABILITY5, "Connection Capability" },
10879 { HS20_ANQP_NAI_HOME_REALM_QUERY6, "NAI Home Realm Query" },
10880 { HS20_ANQP_OPERATING_CLASS_INDICATION7, "Operating Class Indication" },
10881 { HS20_ANQP_OSU_PROVIDERS_LIST8, "OSU Providers List" },
10882 { 9, "Reserved" },
10883 { HS20_ANQP_ICON_REQUEST10, "Icon Request" },
10884 { HS20_ANQP_ICON_BINARY_FILE11, "Icon Binary File" },
10885 { HS20_ANQP_OPERATOR_ICON_METADATA12, "Operator Icon Metadata" },
10886 { HS20_ANQP_ADVICE_OF_CHARGE13, "Advice of Charge" },
10887 { 0, NULL((void*)0) }
10888};
10889
10890static void
10891dissect_hs20_anqp_hs_query_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10892{
10893 while (offset < end) {
10894 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_hs_query_list,
10895 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10896 offset++;
10897 }
10898}
10899
10900static void
10901dissect_hs20_anqp_operator_friendly_name(proto_tree *tree, tvbuff_t *tvb,
10902 packet_info *pinfo, int offset,
10903 int end, int hf_array[],
10904 int ett_val)
10905{
10906 int ofn_index = 0;
10907
10908 while (offset + 4 <= end) {
10909 uint8_t vlen = tvb_get_uint8(tvb, offset);
10910 proto_tree *ofn_tree = NULL((void*)0);
10911 proto_item *item = NULL((void*)0), *pi = NULL((void*)0);
10912 int start_offset = offset;
10913
10914 ofn_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_val,
10915 &pi, "Friendly Name [%d]", ofn_index + 1);
10916
10917 item = proto_tree_add_item(ofn_tree, hf_array[0],
10918 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10919 offset++;
10920 if (vlen > end - offset || vlen < 3) {
10921 expert_add_info(pinfo, item, &ei_hs20_anqp_ofn_length);
10922 break;
10923 }
10924 proto_tree_add_item(ofn_tree, hf_array[1],
10925 tvb, offset, 3, ENC_ASCII0x00000000|ENC_NA0x00000000);
10926 proto_tree_add_item(ofn_tree, hf_array[2],
10927 tvb, offset + 3, vlen - 3, ENC_UTF_80x00000002);
10928 offset += vlen;
10929
10930 proto_item_set_len(pi, offset - start_offset);
10931 ofn_index++;
10932 }
10933}
10934
10935static const value_string hs20_wm_link_status_vals[] = {
10936 { 0, "Reserved" },
10937 { 1, "Link up" },
10938 { 2, "Link down" },
10939 { 3, "Link in test state" },
10940 { 0, NULL((void*)0) }
10941};
10942
10943static void
10944dissect_hs20_anqp_wan_metrics(proto_tree *tree, tvbuff_t *tvb, int offset, bool_Bool request)
10945{
10946 if (request)
10947 return;
10948
10949 if(tvb_reported_length_remaining(tvb, offset) < 13)
10950 return;
10951
10952 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_link_status,
10953 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10954 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_symmetric_link,
10955 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10956 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_at_capacity,
10957 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10958 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_reserved,
10959 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10960 offset++;
10961
10962 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_downlink_speed,
10963 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10964 offset += 4;
10965
10966 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_uplink_speed,
10967 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10968 offset += 4;
10969
10970 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_downlink_load,
10971 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10972 offset++;
10973
10974 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_uplink_load,
10975 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10976 offset++;
10977
10978 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_lmd,
10979 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10980}
10981
10982static const value_string hs20_cc_proto_vals[] = {
10983 { 1, "ICMP" },
10984 { 6, "TCP" },
10985 { 17, "UDP" },
10986 { 50, "ESP" },
10987 { 0, NULL((void*)0) }
10988};
10989
10990static const value_string hs20_cc_port_vals[] = {
10991 { 0, "[Supported]" }, /* Used to indicate ICMP, ESP for IPSec VPN, or IKEv2 for IPSec VPN */
10992 { 20, "FTP" },
10993 { 22, "SSH" },
10994 { 80, "HTTP" },
10995 { 443, "HTTPS" },
10996 { 500, "IKEv2 for IPSec VPN" },
10997 { 1723, "PPTP for IPSec VPN" },
10998 { 4500, "[Optional] IKEv2 for IPSec VPN" },
10999 { 5060, "VOIP" },
11000 { 0, NULL((void*)0) },
11001};
11002
11003static const value_string hs20_cc_status_vals[] = {
11004 { 0, "Closed" },
11005 { 1, "Open" },
11006 { 2, "Unknown" },
11007 { 0, NULL((void*)0) }
11008};
11009
11010static void
11011dissect_hs20_anqp_connection_capability(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb,
11012 int offset, int end)
11013{
11014 proto_tree *tuple;
11015 while (offset + 4 <= end) {
11016 uint8_t ip_proto, status;
11017 uint16_t port_num;
11018
11019 ip_proto = tvb_get_uint8(tvb, offset);
11020 port_num = tvb_get_letohs(tvb, offset + 1);
11021 status = tvb_get_uint8(tvb, offset + 3);
11022
11023 tuple = proto_tree_add_subtree_format(tree, tvb, offset, 4, ett_hs20_cc_proto_port_tuple, NULL((void*)0),
11024 "ProtoPort Tuple - ip_proto=%s port_num=%s status=%s",
11025 val_to_str(pinfo->pool, ip_proto, hs20_cc_proto_vals, "Unknown (%u)"),
11026 val_to_str(pinfo->pool, port_num, hs20_cc_port_vals, "Unknown (%u)"),
11027 val_to_str(pinfo->pool, status, hs20_cc_status_vals, "Reserved (%u)"));
11028 proto_tree_add_item(tuple, hf_ieee80211_hs20_anqp_cc_proto_ip_proto,
11029 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11030 offset++;
11031 proto_tree_add_item(tuple, hf_ieee80211_hs20_anqp_cc_proto_port_num,
11032 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11033 offset += 2;
11034 proto_tree_add_item(tuple, hf_ieee80211_hs20_anqp_cc_proto_status,
11035 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11036 offset++;
11037 }
11038}
11039
11040static void
11041dissect_hs20_anqp_nai_home_realm_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
11042 int offset, int end)
11043{
11044 uint8_t len;
11045 proto_item *item;
11046
11047 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_count,
11048 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11049 offset++;
11050
11051 while (offset + 2 <= end) {
11052 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_encoding_type,
11053 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11054 offset++;
11055 len = tvb_get_uint8(tvb, offset);
11056 item = proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_length,
11057 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11058 offset++;
11059 if (offset + len > end) {
11060 expert_add_info(pinfo, item, &ei_hs20_anqp_nai_hrq_length);
11061 break;
11062 }
11063 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_realm_name,
11064 tvb, offset, len, ENC_ASCII0x00000000);
11065 offset += len;
11066 }
11067}
11068
11069static void
11070dissect_hs20_anqp_oper_class_indic(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
11071{
11072 while (offset < end) {
11073 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_oper_class_indic,
11074 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11075 offset++;
11076 }
11077}
11078
11079static int
11080dissect_hs20_osu_friendly_names(proto_tree *tree, tvbuff_t *tvb,
11081 packet_info *pinfo, int offset, int end _U___attribute__((unused)))
11082{
11083 int osu_fn_hf_array[3] = {hf_ieee80211_hs20_osu_friendly_name_length,
11084 hf_ieee80211_hs20_osu_friendly_name_language,
11085 hf_ieee80211_hs20_osu_friendly_name_name };
11086 uint16_t osu_fn_count = tvb_get_letohs(tvb, offset);
11087 proto_tree *fn_tree = NULL((void*)0);
11088
11089 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_friendly_names_len, tvb, offset, 2,
11090 ENC_LITTLE_ENDIAN0x80000000);
11091 offset += 2;
11092
11093 fn_tree = proto_tree_add_subtree(tree, tvb, offset, osu_fn_count,
11094 ett_hs20_friendly_names_list, NULL((void*)0),
11095 "Friendly Names List");
11096
11097 dissect_hs20_anqp_operator_friendly_name(fn_tree, tvb, pinfo, offset,
11098 offset + osu_fn_count,
11099 osu_fn_hf_array, ett_hs20_friendly_name_tree);
11100
11101 return offset + osu_fn_count;
11102}
11103
11104static int
11105dissect_hs20_osu_icon_available(proto_tree *tree, tvbuff_t *tvb,
11106 packet_info *pinfo _U___attribute__((unused)), int offset, int end _U___attribute__((unused)), uint16_t icon_index)
11107{
11108 proto_tree *icon_avail = NULL((void*)0);
11109 proto_item *pi = NULL((void*)0);
11110 int start_offset = offset;
11111 uint8_t icon_type_len = 0, icon_filename_len = 0;
11112
11113 icon_avail = proto_tree_add_subtree_format(tree, tvb, offset, -1,
11114 ett_hs20_osu_icon_tree, &pi,
11115 "Icon Available %d", icon_index);
11116
11117 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_width, tvb, offset, 2,
11118 ENC_LITTLE_ENDIAN0x80000000);
11119 offset += 2;
11120
11121 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_height, tvb, offset, 2,
11122 ENC_LITTLE_ENDIAN0x80000000);
11123 offset += 2;
11124
11125 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_lang_code, tvb, offset, 3,
11126 ENC_ASCII0x00000000);
11127 offset += 3;
11128
11129 icon_type_len = tvb_get_uint8(tvb, offset);
11130 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_icon_type_len, tvb, offset,
11131 1, ENC_NA0x00000000);
11132 offset++;
11133
11134 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_icon_type, tvb, offset,
11135 icon_type_len, ENC_ASCII0x00000000);
11136 offset += icon_type_len;
11137
11138 icon_filename_len = tvb_get_uint8(tvb, offset);
11139 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_filename_len, tvb, offset,
11140 1, ENC_NA0x00000000);
11141 offset++;
11142
11143 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_filename, tvb, offset,
11144 icon_filename_len, ENC_ASCII0x00000000);
11145 offset += icon_filename_len;
11146
11147 proto_item_set_len(pi, offset - start_offset);
11148
11149 return offset;
11150}
11151
11152static const value_string osu_method_vals[] = {
11153 { 0, "OMA DM" },
11154 { 1, "SOAP XML SPP" },
11155 { 0, NULL((void*)0) },
11156};
11157
11158static int
11159dissect_hs20_osu_provider(proto_tree *tree, tvbuff_t *tvb,
11160 packet_info *pinfo, int offset, int end, uint8_t provider_index)
11161{
11162 proto_tree *prov_tree = NULL((void*)0);
11163 proto_item *osupi = NULL((void*)0), *uri_pi = NULL((void*)0);
11164 int start_offset = offset;
11165 uint8_t osu_server_uri_len = 0;
11166 uint8_t osu_method_list_len = 0;
11167 uint16_t icons_avail = 0, icons_index = 0;
11168 uint8_t osu_nai_len = 0;
11169 uint16_t osu_service_desc_len = 0;
11170
11171 prov_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
11172 ett_hs20_osu_provider_tree, &osupi,
11173 "OSU Provider %d", provider_index);
11174
11175 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_prov_length, tvb, offset, 2,
11176 ENC_LITTLE_ENDIAN0x80000000);
11177 offset += 2;
11178
11179 offset = dissect_hs20_osu_friendly_names(prov_tree, tvb, pinfo, offset, end);
11180
11181 proto_item_set_len(osupi, offset - start_offset);
11182
11183 osu_server_uri_len = tvb_get_uint8(tvb, offset);
11184 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_server_uri_len, tvb, offset, 1,
11185 ENC_NA0x00000000);
11186 offset++;
11187
11188 uri_pi = proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_server_uri, tvb, offset,
11189 osu_server_uri_len, ENC_ASCII0x00000000);
11190 offset += osu_server_uri_len;
11191 proto_item_set_url(uri_pi);
11192
11193 osu_method_list_len = tvb_get_uint8(tvb, offset);
11194 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_method_list_len, tvb, offset, 1,
11195 ENC_NA0x00000000);
11196 offset++;
11197
11198 if (osu_method_list_len > 0) {
11199 proto_tree *osu_method_list = NULL((void*)0);
11200 uint8_t osu_method_list_index = 0;
11201
11202 osu_method_list = proto_tree_add_subtree(prov_tree, tvb, offset,
11203 osu_method_list_len,
11204 ett_hs20_osu_provider_method_list,
11205 NULL((void*)0), "OSU Method List");
11206 while (osu_method_list_len > osu_method_list_index) {
11207 proto_item *pi = NULL((void*)0);
11208 uint8_t method = tvb_get_uint8(tvb, offset);
11209
11210 pi = proto_tree_add_item(osu_method_list, hf_ieee80211_hs20_osu_method_val, tvb,
11211 offset, 1, ENC_NA0x00000000);
11212 proto_item_append_text(pi, ": %s",
11213 val_to_str_const(method, osu_method_vals,
11214 "Reserved"));
11215 offset++;
11216 osu_method_list_index++;
11217 }
11218 }
11219
11220 icons_avail = tvb_get_letohs(tvb, offset);
11221 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_icons_avail_len, tvb, offset, 2,
11222 ENC_LITTLE_ENDIAN0x80000000);
11223 offset += 2;
11224
11225 if (icons_avail > 0) {
11226 proto_tree *icon_list = NULL((void*)0);
11227 proto_item *pi = NULL((void*)0);
11228
11229 start_offset = offset;
11230
11231 icon_list = proto_tree_add_subtree(prov_tree, tvb, offset, -1,
11232 ett_osu_icons_avail_list, &pi,
11233 "Icons Available");
11234
11235 while ((offset - start_offset) < icons_avail) {
11236 offset = dissect_hs20_osu_icon_available(icon_list, tvb, pinfo, offset,
11237 end, icons_index);
11238 icons_index++;
11239 }
11240
11241 proto_item_set_len(pi, offset - start_offset);
11242 }
11243
11244 osu_nai_len = tvb_get_uint8(tvb, offset);
11245 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_nai_len, tvb, offset, 1, ENC_NA0x00000000);
11246 offset++;
11247
11248 if (osu_nai_len > 0) {
11249 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_nai, tvb, offset,
11250 osu_nai_len, ENC_ASCII0x00000000);
11251 offset += osu_nai_len;
11252 }
11253
11254 osu_service_desc_len = tvb_get_letohs(tvb, offset);
11255 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_service_desc_len, tvb, offset, 2,
11256 ENC_LITTLE_ENDIAN0x80000000);
11257 offset += 2;
11258
11259 if (osu_service_desc_len > 0) {
11260 proto_tree *desc_tree = NULL((void*)0);
11261 proto_item *pi = NULL((void*)0);
11262 uint8_t service_desc_index = 0;
11263
11264 start_offset = offset;
11265 desc_tree = proto_tree_add_subtree(prov_tree, tvb, offset, -1,
11266 ett_hs20_osu_service_desc_list, &pi,
11267 "OSU Service Description List");
11268
11269 while ((offset - start_offset) < osu_service_desc_len) {
11270 proto_tree *desc_duple = NULL((void*)0);
11271 uint8_t serv_desc_len = tvb_get_uint8(tvb, offset);
11272
11273 desc_duple = proto_tree_add_subtree_format(desc_tree, tvb, offset,
11274 1 + serv_desc_len,
11275 ett_hs20_osu_service_desc_tree, NULL((void*)0),
11276 "OSU Service Description Duple %d",
11277 service_desc_index);
11278
11279 proto_tree_add_item(desc_duple, hf_ieee80211_hs20_osu_service_desc_duple_len, tvb,
11280 offset, 1, ENC_NA0x00000000);
11281 offset++;
11282
11283 proto_tree_add_item(desc_duple, hf_ieee80211_hs20_osu_service_desc_lang, tvb, offset,
11284 3, ENC_ASCII0x00000000);
11285 offset += 3;
11286
11287 proto_tree_add_item(desc_duple, hf_ieee80211_hs20_osu_service_desc, tvb, offset,
11288 serv_desc_len - 3, ENC_ASCII0x00000000);
11289 offset += serv_desc_len - 3;
11290
11291 service_desc_index++;
11292 }
11293
11294 proto_item_set_len(pi, offset - start_offset);
11295 }
11296
11297 return offset;
11298}
11299
11300static void
11301dissect_hs20_anqp_osu_providers_list(proto_tree *tree, tvbuff_t *tvb,
11302 packet_info *pinfo, int offset, int end)
11303{
11304 uint8_t ssid_len = tvb_get_uint8(tvb, offset);
11305 uint8_t osu_prov_count = 0, osu_prov_index = 0;
11306
11307 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_providers_list_ssid_len, tvb, offset, 1,
11308 ENC_NA0x00000000);
11309 offset++;
11310
11311 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_providers_ssid, tvb, offset, ssid_len,
11312 ENC_UTF_80x00000002);
11313 offset += ssid_len;
11314
11315 osu_prov_count = tvb_get_uint8(tvb, offset);
11316 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_providers_count, tvb, offset, 1,
11317 ENC_NA0x00000000);
11318 offset++;
11319
11320 if (osu_prov_count > 0) {
11321 int start_offset = offset;
11322 proto_item *pi = NULL((void*)0);
11323 proto_tree *osu_prov_list = NULL((void*)0);
11324
11325 osu_prov_list = proto_tree_add_subtree(tree, tvb, offset, -1,
11326 ett_hs20_osu_providers_list, &pi,
11327 "OSU Providers List");
11328 while (offset < end && osu_prov_count > osu_prov_index) {
11329 offset = dissect_hs20_osu_provider(osu_prov_list, tvb, pinfo, offset, end,
11330 osu_prov_index);
11331 osu_prov_index++;
11332 }
11333
11334 proto_item_set_len(pi, offset - start_offset);
11335 }
11336}
11337
11338static void
11339dissect_hs20_anqp_icon_request(proto_tree *tree, tvbuff_t *tvb, int offset,
11340 int end)
11341{
11342 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_request_filename, tvb, offset,
11343 end - offset, ENC_UTF_80x00000002);
11344}
11345
11346static const value_string hs20_icon_download_status_vals[] = {
11347 { 0, "Success" },
11348 { 1, "File not found" },
11349 { 2, "Unspecified file error" },
11350 { 0, NULL((void*)0) }
11351};
11352
11353static void
11354dissect_hs20_anqp_icon_binary_file(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, int offset,
11355 int end _U___attribute__((unused)))
11356{
11357 uint8_t icon_download_status = tvb_get_uint8(tvb, offset);
11358 proto_item *pi = NULL((void*)0);
11359 uint8_t icon_type_len = 0;
11360 uint16_t icon_binary_data_len = 0;
11361
11362 pi = proto_tree_add_item(tree, hf_ieee80211_hs20_icon_binary_file_status, tvb, offset, 1,
11363 ENC_NA0x00000000);
11364 offset++;
11365 proto_item_append_text(pi, ": %s",
11366 val_to_str(pinfo->pool, icon_download_status,
11367 hs20_icon_download_status_vals,
11368 "Reserved (%u)"));
11369
11370 icon_type_len = tvb_get_uint8(tvb, offset);
11371 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_type_length, tvb, offset, 1, ENC_NA0x00000000);
11372 offset++;
11373
11374 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_type, tvb, offset, icon_type_len,
11375 ENC_UTF_80x00000002);
11376 offset += icon_type_len;
11377
11378 icon_binary_data_len = tvb_get_letohs(tvb, offset);
11379 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_binary_data_len, tvb, offset, 2,
11380 ENC_BIG_ENDIAN0x00000000);
11381 offset += 2;
11382
11383 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_binary_data, tvb, offset,
11384 icon_binary_data_len, ENC_NA0x00000000);
11385}
11386
11387static void
11388dissect_hs20_anqp_operator_icon_metadata(proto_tree *tree, tvbuff_t *tvb,
11389 int offset, int end _U___attribute__((unused)))
11390{
11391 proto_item *pi = NULL((void*)0);
11392 int start_offset = offset;
11393 uint8_t icon_type_len = 0, icon_filename_len = 0;
11394
11395 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_width, tvb, offset, 2,
11396 ENC_LITTLE_ENDIAN0x80000000);
11397 offset += 2;
11398
11399 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_height, tvb, offset, 2,
11400 ENC_LITTLE_ENDIAN0x80000000);
11401 offset += 2;
11402
11403 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_lang_code, tvb, offset, 3,
11404 ENC_ASCII0x00000000);
11405 offset += 3;
11406
11407 icon_type_len = tvb_get_uint8(tvb, offset);
11408 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_icon_type_len, tvb, offset,
11409 1, ENC_NA0x00000000);
11410 offset++;
11411
11412 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_icon_type, tvb, offset,
11413 icon_type_len, ENC_ASCII0x00000000);
11414 offset += icon_type_len;
11415
11416 icon_filename_len = tvb_get_uint8(tvb, offset);
11417 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_filename_len, tvb, offset,
11418 1, ENC_NA0x00000000);
11419 offset++;
11420
11421 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_filename, tvb, offset,
11422 icon_filename_len, ENC_ASCII0x00000000);
11423 offset += icon_filename_len;
11424
11425 proto_item_set_len(pi, offset - start_offset);
11426}
11427
11428static void
11429dissect_anqp_venue_url(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
11430{
11431 uint16_t url_duple_index = 0;
11432
11433 while (offset < end) {
11434 proto_tree *venue_url = NULL((void*)0);
11435 proto_item *url_pi = NULL((void*)0);
11436 uint8_t url_duple_len = tvb_get_uint8(tvb, offset);
11437
11438 venue_url = proto_tree_add_subtree_format(tree, tvb, offset,
11439 url_duple_len + 1, ett_hs20_venue_url, NULL((void*)0),
11440 "Venue URL Duple %d", url_duple_index);
11441
11442 proto_tree_add_item(venue_url, hf_ieee80211_hs20_anqp_venue_url_length, tvb, offset,
11443 1, ENC_NA0x00000000);
11444 offset++;
11445
11446 proto_tree_add_item(venue_url, hf_ieee80211_hs20_anqp_venue_number, tvb, offset, 1,
11447 ENC_NA0x00000000);
11448 offset++;
11449
11450 url_pi = proto_tree_add_item(venue_url, hf_ieee80211_hs20_anqp_venue_url, tvb, offset,
11451 url_duple_len -1, ENC_ASCII0x00000000);
11452 proto_item_set_url(url_pi);
11453
11454 offset += (url_duple_len - 1);
11455
11456 url_duple_index++;
11457 }
11458}
11459
11460static const value_string advice_of_charge_type_vals[] = {
11461 { 0, "Time-based" },
11462 { 1, "Data-volume-based" },
11463 { 2, "Time-and-data-volume-based" },
11464 { 3, "Unlimited" },
11465 { 0, NULL((void*)0) }
11466};
11467
11468static void
11469dissect_hs20_anqp_advice_of_charge(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, int offset,
11470 int end _U___attribute__((unused)))
11471{
11472 uint16_t toc_index = 0;
11473
11474 while (offset < end) {
11475 uint16_t adv_charge_len = tvb_get_letohs(tvb, offset);
11476 proto_tree *aoc_tree = NULL((void*)0);
11477 proto_tree *plan_info_tree = NULL((void*)0);
11478 proto_item *pi = NULL((void*)0), *tpi = NULL((void*)0);
11479 int start_offset = offset;
11480 uint8_t aoc_type = 0, nai_realm_len = 0;
11481 uint8_t plan_index = 0;
11482 uint16_t plan_tot_len = 0;
11483 int plan_offset = 0;
11484
11485 aoc_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
11486 ett_hs20_advice_of_charge, &pi,
11487 "Advice of Charge Duple %d", toc_index);
11488 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_advice_of_charge_length, tvb,
11489 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11490 offset += 2;
11491
11492 aoc_type = tvb_get_uint8(tvb, offset);
11493 tpi = proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_advice_of_charge_type, tvb,
11494 offset, 1, ENC_NA0x00000000);
11495 offset++;
11496 proto_item_append_text(tpi, ": %s",
11497 val_to_str(pinfo->pool, aoc_type,
11498 advice_of_charge_type_vals,
11499 "Reserved (%u)"));
11500
11501 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_aoc_nai_realm_encoding, tvb,
11502 offset, 1, ENC_NA0x00000000);
11503 offset++;
11504
11505 nai_realm_len = tvb_get_uint8(tvb, offset);
11506 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_aoc_nai_realm_len, tvb, offset,
11507 1, ENC_NA0x00000000);
11508 offset++;
11509
11510 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_aoc_nai_realm, tvb, offset,
11511 nai_realm_len, ENC_UTF_80x00000002);
11512 offset += nai_realm_len;
11513
11514 plan_tot_len = adv_charge_len - 3 - nai_realm_len;
11515 plan_offset = offset;
11516
11517 while (offset < (plan_offset + plan_tot_len)) {
11518 uint16_t plan_len = tvb_get_letohs(tvb, offset);
11519
11520 plan_info_tree = proto_tree_add_subtree_format(aoc_tree, tvb, offset,
11521 plan_len + 2, ett_hs20_aoc_plan, NULL((void*)0),
11522 "Plan #%u", plan_index);
11523
11524 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_len, tvb,
11525 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11526 offset += 2;
11527
11528 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_lang, tvb,
11529 offset, 3, ENC_ASCII0x00000000);
11530 offset += 3;
11531
11532 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_curcy, tvb,
11533 offset, 3, ENC_ASCII0x00000000);
11534 offset += 3;
11535
11536 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_information,
11537 tvb, offset, plan_len - 6, ENC_UTF_80x00000002);
11538 offset += plan_len - 6;
11539
11540 plan_index++;
11541 }
11542
11543 proto_item_set_len(pi, offset - start_offset);
11544
11545 toc_index++;
11546 }
11547}
11548
11549static int
11550dissect_hs20_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
11551{
11552 uint8_t subtype;
11553 int ofn_hf_array[3] = {hf_ieee80211_hs20_anqp_ofn_length,
11554 hf_ieee80211_hs20_anqp_ofn_language,
11555 hf_ieee80211_hs20_anqp_ofn_name };
11556
11557 int end = tvb_reported_length(tvb);
11558 int offset = 0;
11559 anqp_info_dissector_data_t* anqp_data = (anqp_info_dissector_data_t*)data;
11560
11561 DISSECTOR_ASSERT(anqp_data)((void) ((anqp_data) ? (void)0 : (proto_report_dissector_bug(
"%s:%u: failed assertion \"%s\"", "epan/dissectors/packet-ieee80211.c"
, 11561, "anqp_data"))))
;
11562
11563 subtype = tvb_get_uint8(tvb, offset);
11564 proto_item_append_text(tree, " - HS 2.0 %s",
11565 val_to_str(pinfo->pool, subtype, hs20_anqp_subtype_vals,
11566 "Reserved (%u)"));
11567 if (anqp_data->idx == 0) {
11568 col_append_fstr(pinfo->cinfo, COL_INFO, " HS 2.0 %s",
11569 val_to_str(pinfo->pool, subtype, hs20_anqp_subtype_vals,
11570 "Reserved (%u)"));
11571 } else if (anqp_data->idx == 1) {
11572 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
11573 }
11574 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_subtype, tvb, offset, 1,
11575 ENC_LITTLE_ENDIAN0x80000000);
11576 offset++;
11577
11578 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_reserved, tvb, offset, 1,
11579 ENC_LITTLE_ENDIAN0x80000000);
11580 offset++;
11581
11582 switch (subtype) {
11583 case HS20_ANQP_HS_QUERY_LIST1:
11584 dissect_hs20_anqp_hs_query_list(tree, tvb, offset, end);
11585 break;
11586 case HS20_ANQP_HS_CAPABILITY_LIST2:
11587 dissect_hs20_anqp_hs_capability_list(tree, tvb, offset, end);
11588 break;
11589 case HS20_ANQP_OPERATOR_FRIENDLY_NAME3:
11590 dissect_hs20_anqp_operator_friendly_name(tree, tvb, pinfo, offset, end,
11591 ofn_hf_array, ett_hs20_ofn_tree);
11592 break;
11593 case HS20_ANQP_WAN_METRICS4:
11594 dissect_hs20_anqp_wan_metrics(tree, tvb, offset, anqp_data->request);
11595 break;
11596 case HS20_ANQP_CONNECTION_CAPABILITY5:
11597 dissect_hs20_anqp_connection_capability(tree, pinfo, tvb, offset, end);
11598 break;
11599 case HS20_ANQP_NAI_HOME_REALM_QUERY6:
11600 dissect_hs20_anqp_nai_home_realm_query(tree, tvb, pinfo, offset, end);
11601 break;
11602 case HS20_ANQP_OPERATING_CLASS_INDICATION7:
11603 dissect_hs20_anqp_oper_class_indic(tree, tvb, offset, end);
11604 break;
11605 case HS20_ANQP_OSU_PROVIDERS_LIST8:
11606 dissect_hs20_anqp_osu_providers_list(tree, tvb, pinfo, offset, end);
11607 break;
11608 case HS20_ANQP_ICON_REQUEST10:
11609 dissect_hs20_anqp_icon_request(tree, tvb, offset, end);
11610 break;
11611 case HS20_ANQP_ICON_BINARY_FILE11:
11612 dissect_hs20_anqp_icon_binary_file(tree, pinfo, tvb, offset, end);
11613 break;
11614 case HS20_ANQP_OPERATOR_ICON_METADATA12:
11615 dissect_hs20_anqp_operator_icon_metadata(tree, tvb, offset, end);
11616 break;
11617 case HS20_ANQP_ADVICE_OF_CHARGE13:
11618 dissect_hs20_anqp_advice_of_charge(tree, pinfo, tvb, offset, end);
11619 break;
11620 default:
11621 if (offset == end)
11622 break;
11623 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_payload, tvb, offset,
11624 end - offset, ENC_NA0x00000000);
11625 break;
11626 }
11627
11628 return tvb_captured_length(tvb);
11629}
11630
11631// MBO ANQP element subtypes
11632#define MBO_ANQP_QUERY_LIST1 1
11633#define MBO_ANQP_CELLULAR_DATA_PREFERENCE2 2
11634
11635static const value_string mbo_anqp_subtype_vals[] = {
11636 { MBO_ANQP_QUERY_LIST1, "MBO Query List" },
11637 { MBO_ANQP_CELLULAR_DATA_PREFERENCE2, "Cellular Data Connection Preference" },
11638 { 0, NULL((void*)0) }
11639};
11640
11641static int
11642dissect_mbo_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
11643{
11644 uint8_t subtype;
11645 int len = tvb_reported_length(tvb);
11646 int offset = 0;
11647
11648 if (len < 2) {
11649 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
11650 return offset;
11651 }
11652
11653 subtype = tvb_get_uint8(tvb, offset);
11654 proto_tree_add_item(tree, hf_ieee80211_wfa_anqp_mbo_subtype, tvb, offset, 1, ENC_NA0x00000000);
11655 offset++;
11656 len--;
11657
11658 switch (subtype) {
11659 case MBO_ANQP_QUERY_LIST1:
11660 while (len > 0) {
11661 proto_tree_add_item(tree, hf_ieee80211_wfa_anqp_mbo_query, tvb, offset, 1, ENC_NA0x00000000);
11662 offset++;
11663 len--;
11664 }
11665 break;
11666 case MBO_ANQP_CELLULAR_DATA_PREFERENCE2:
11667 proto_tree_add_item(tree, hf_ieee80211_wfa_anqp_mbo_cellular_pref, tvb, offset,
11668 1, ENC_NA0x00000000);
11669 offset++;
11670 len--;
11671 break;
11672 default:
11673 break;
11674 }
11675
11676 return offset;
11677}
11678
11679static int
11680dissect_vendor_wifi_alliance_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
11681{
11682 uint8_t subtype;
11683 int offset = 0;
11684 tvbuff_t *subtvb;
11685
11686 subtype = tvb_get_uint8(tvb, offset);
11687 proto_tree_add_item(tree, hf_ieee80211_anqp_wfa_subtype, tvb, offset, 1, ENC_NA0x00000000);
11688 offset += 1;
11689
11690 subtvb = tvb_new_subset_remaining(tvb, offset);
11691 if (!dissector_try_uint_with_data(wifi_alliance_anqp_info_table, subtype, subtvb, pinfo, tree, false0, data))
11692 call_data_dissector(subtvb, pinfo, tree);
11693
11694 return tvb_captured_length(tvb);
11695}
11696
11697
11698static int
11699dissect_neighbor_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data);
11700
11701static int
11702dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11703 bool_Bool request, int idx)
11704{
11705 uint16_t id, len;
11706 uint32_t oui;
11707 proto_item *item;
11708 tvbuff_t *vendor_tvb;
11709 anqp_info_dissector_data_t anqp_info;
11710
11711 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_id,
11712 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11713 id = tvb_get_letohs(tvb, offset);
11714 if (id != ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797) {
11715 if (idx == 0) {
11716 proto_item_append_text(tree, " - %s",
11717 val_to_str_ext(pinfo->pool, id, &anqp_info_id_vals_ext, "Unknown (%u)"));
11718 col_append_fstr(pinfo->cinfo, COL_INFO, " %s",
11719 val_to_str_ext(pinfo->pool, id, &anqp_info_id_vals_ext, "Unknown (%u)"));
11720 } else if (idx == 1) {
11721 proto_item_append_text(tree, ", ..");
11722 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
11723 }
11724 }
11725 tree = proto_item_add_subtree(item, ett_gas_anqp);
11726 offset += 2;
11727 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_length,
11728 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11729 len = tvb_get_letohs(tvb, offset);
11730 offset += 2;
11731 if (tvb_reported_length_remaining(tvb, offset) < len) {
11732 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_info_length);
11733 return 4 + len;
11734 }
11735 switch (id)
11736 {
11737 case ANQP_INFO_ANQP_QUERY_LIST256:
11738 dissect_anqp_query_list(tree, tvb, pinfo, offset, offset + len);
11739 break;
11740 case ANQP_INFO_ANQP_CAPAB_LIST257:
11741 dissect_anqp_capab_list(tree, tvb, pinfo, offset, offset + len);
11742 break;
11743 case ANQP_INFO_VENUE_NAME_INFO258:
11744 dissect_venue_name_info(tree, tvb, pinfo, offset, offset + len);
11745 break;
11746 case ANQP_INFO_NETWORK_AUTH_TYPE_INFO260:
11747 dissect_network_auth_type(tree, tvb, offset, offset + len);
11748 break;
11749 case ANQP_INFO_ROAMING_CONSORTIUM_LIST261:
11750 dissect_roaming_consortium_list(tree, tvb, pinfo, offset, offset + len);
11751 break;
11752 case ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262:
11753 dissect_ip_addr_type_availability_info(tree, tvb, offset);
11754 break;
11755 case ANQP_INFO_NAI_REALM_LIST263:
11756 dissect_nai_realm_list(tree, tvb, pinfo, offset, offset + len);
11757 break;
11758 case ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264:
11759 dissect_3gpp_cellular_network_info(tree, tvb, pinfo, offset);
11760 break;
11761 case ANQP_INFO_DOMAIN_NAME_LIST268:
11762 dissect_domain_name_list(tree, tvb, offset, offset + len);
11763 break;
11764 case ANQP_INFO_NEIGHBOR_REPORT272:
11765 {
11766 tvbuff_t *report_tvb;
11767 static const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52 };
11768
11769 report_tvb = tvb_new_subset_length(tvb, offset, len);
11770 int report_offset = 0;
11771 /* Cf. IEEE 802.11-2020 9.4.5.19 Neighbor Report ANQP-element with
11772 * IEEE 802.11-2016 9.4.5.19 and IEEE 802.11-2012 8.4.4.19.
11773 * The line "The Element ID and the Length fields of the Neighbor Report
11774 * element... are not included" was removed as it made it impossible
11775 * to include more than one Neighbor Element (using the overall ANQP
11776 * Info length could not distinguish between extra length due to a second
11777 * Neighbor Report and extra length due to optional subelements.)
11778 * The headerless version was apparently never deployed so use the new
11779 * specification (though we could test to see if the next octet is
11780 * TAG_NEIGHBOR_REPORT and dissect with the older method if not.)
11781 */
11782 while (tvb_reported_length_remaining(report_tvb, report_offset)) {
11783 report_offset += add_tagged_field(pinfo, tree, report_tvb, report_offset, 0,
11784 ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
11785 }
11786 }
11787 break;
11788 case ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797:
11789 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
11790 offset += 3;
11791 vendor_tvb = tvb_new_subset_length(tvb, offset, len - 3);
11792
11793 anqp_info.request = request;
11794 anqp_info.idx = idx;
11795 if (!dissector_try_uint_with_data(vendor_specific_anqp_info_table, oui, vendor_tvb, pinfo, tree, false0, &anqp_info))
11796 {
11797 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info, tvb, offset, len, ENC_NA0x00000000);
11798 }
11799 break;
11800 case ANQP_INFO_VENUE_URL277:
11801 dissect_anqp_venue_url(tree, tvb, offset, offset + len);
11802 break;
11803 case ANQP_INFO_ADVICE_OF_CHARGE278:
11804 dissect_hs20_anqp_advice_of_charge(tree, pinfo, tvb, offset, offset + len);
11805 break;
11806 case ANQP_INFO_NETWORK_AUTH_TYPE_TIMESTAMP280:
11807 dissect_anqp_network_auth_type_timestamp(tree, tvb, offset, offset + len);
11808 break;
11809 default:
11810 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
11811 tvb, offset, len, ENC_NA0x00000000);
11812 break;
11813 }
11814
11815 return 4 + len;
11816}
11817
11818static void
11819dissect_anqp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, bool_Bool request)
11820{
11821 int idx = 0;
11822
11823 proto_item_append_text(tree, ": ANQP ");
11824 proto_item_append_text(tree, request ? "Request" : "Response");
11825 if (tvb_reported_length_remaining(tvb, offset) < 4) {
11826 expert_add_info(pinfo, tree, &ei_ieee80211_not_enough_room_for_anqp_header);
11827 return;
11828 }
11829 col_append_fstr(pinfo->cinfo, COL_INFO, ", ANQP %s",
11830 request ? "Req" : "Resp");
11831 while (tvb_reported_length_remaining(tvb, offset) > 0) {
11832 offset += dissect_anqp_info(tree, tvb, pinfo, offset, request, idx);
11833 idx += 1;
11834 }
11835}
11836
11837static unsigned
11838dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11839 unsigned type, unsigned subtype)
11840{
11841 uint16_t req_len;
11842 int start = offset;
11843 proto_item *item;
11844 proto_tree *query;
11845
11846 /* Query Request Length (2 octets) */
11847 req_len = tvb_get_letohs(tvb, offset);
11848
11849 query = proto_tree_add_subtree(tree, tvb, offset, 2 + req_len, ett_gas_query, &item, "Query Request");
11850 if (tvb_reported_length_remaining(tvb, offset) < 2 + req_len) {
11851 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_request_length);
11852 return tvb_reported_length_remaining(tvb, offset);
11853 }
11854
11855 proto_tree_add_item(query, hf_ieee80211_ff_query_request_length,
11856 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11857 offset += 2;
11858 /*
11859 * Query Request (GAS query; formatted per protocol specified in the
11860 * Advertisement Protocol IE)
11861 */
11862 switch (type) {
11863 case ADV_PROTO_ID_ANQP0:
11864 dissect_anqp(query, tvb, pinfo, offset, true1);
11865 break;
11866 case ADV_PROTO_ID_VS221:
11867 if (subtype == ((DPP_CONFIGURATION_PROTOCOL0x01 << 8) | WFA_SUBTYPE_DPP26)) {
11868 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
11869 val_to_str(pinfo->pool, subtype >> 8, dpp_subtype_vals, "Unknown (%u)"));
11870 dissect_wifi_dpp_config_proto(pinfo, query, tvb, offset);
11871 }
11872 break;
11873 default:
11874 proto_tree_add_item(query, hf_ieee80211_ff_query_request,
11875 tvb, offset, req_len, ENC_NA0x00000000);
11876 }
11877 offset += req_len;
11878
11879 return offset - start;
11880}
11881
11882static unsigned
11883dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11884 unsigned type, unsigned subtype)
11885{
11886 uint16_t resp_len;
11887 int start = offset;
11888 proto_item *item;
11889 proto_tree *query;
11890
11891 /* Query Response Length (2 octets) */
11892 resp_len = tvb_get_letohs(tvb, offset);
11893
11894 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
11895 ett_gas_query, &item, "Query Response");
11896 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
11897 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
11898 return tvb_reported_length_remaining(tvb, offset);
11899 }
11900
11901 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
11902 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11903 offset += 2;
11904 /* Query Response (optional) */
11905 if (resp_len) {
11906 switch (type) {
11907 case ADV_PROTO_ID_ANQP0:
11908 dissect_anqp(query, tvb, pinfo, offset, false0);
11909 break;
11910 case ADV_PROTO_ID_VS221:
11911 if (subtype == ((DPP_CONFIGURATION_PROTOCOL0x01 << 8) | WFA_SUBTYPE_DPP26)) {
11912 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
11913 val_to_str(pinfo->pool, subtype >> 8, dpp_subtype_vals, "Unknown (%u)"));
11914 dissect_wifi_dpp_config_proto(pinfo, query, tvb, offset);
11915 }
11916 break;
11917 default:
11918 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
11919 tvb, offset, resp_len, ENC_NA0x00000000);
11920 }
11921 offset += resp_len;
11922 }
11923
11924 return offset - start;
11925}
11926
11927static reassembly_table gas_reassembly_table;
11928
11929static int ett_gas_resp_fragment;
11930static int ett_gas_resp_fragments;
11931
11932static int hf_ieee80211_gas_resp_fragments;
11933static int hf_ieee80211_gas_resp_fragment;
11934static int hf_ieee80211_gas_resp_fragment_overlap;
11935static int hf_ieee80211_gas_resp_fragment_overlap_conflict;
11936static int hf_ieee80211_gas_resp_fragment_multiple_tails;
11937static int hf_ieee80211_gas_resp_fragment_too_long_fragment;
11938static int hf_ieee80211_gas_resp_fragment_error;
11939static int hf_ieee80211_gas_resp_fragment_count;
11940static int hf_ieee80211_gas_resp_reassembled_in;
11941static int hf_ieee80211_gas_resp_reassembled_length;
11942
11943static const fragment_items gas_resp_frag_items = {
11944 &ett_gas_resp_fragment,
11945 &ett_gas_resp_fragments,
11946 &hf_ieee80211_gas_resp_fragments,
11947 &hf_ieee80211_gas_resp_fragment,
11948 &hf_ieee80211_gas_resp_fragment_overlap,
11949 &hf_ieee80211_gas_resp_fragment_overlap_conflict,
11950 &hf_ieee80211_gas_resp_fragment_multiple_tails,
11951 &hf_ieee80211_gas_resp_fragment_too_long_fragment,
11952 &hf_ieee80211_gas_resp_fragment_error,
11953 &hf_ieee80211_gas_resp_fragment_count,
11954 &hf_ieee80211_gas_resp_reassembled_in,
11955 &hf_ieee80211_gas_resp_reassembled_length,
11956 /* Reassembled data field */
11957 NULL((void*)0),
11958 "GAS Response fragments"
11959};
11960
11961static unsigned
11962dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11963 unsigned type, unsigned subtype _U___attribute__((unused)), uint8_t frag, bool_Bool more,
11964 uint8_t dialog_token)
11965{
11966 uint16_t resp_len;
11967 int start = offset;
11968 proto_item *item;
11969 proto_tree *query;
11970
11971 /* Query Response Length (2 octets) */
11972 resp_len = tvb_get_letohs(tvb, offset);
11973
11974 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
11975 ett_gas_query, &item, "Query Response");
11976 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
11977 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
11978 return tvb_reported_length_remaining(tvb, offset);
11979 }
11980
11981 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
11982 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11983 offset += 2;
11984 /* Query Response (optional) */
11985 if (resp_len) {
11986 if (type == ADV_PROTO_ID_ANQP0 && (frag == 0) && !more)
11987 dissect_anqp(query, tvb, pinfo, offset, false0);
11988 else {
11989 fragment_head *frag_msg;
11990 bool_Bool save_fragmented;
11991 tvbuff_t *new_tvb;
11992
11993 save_fragmented = pinfo->fragmented;
11994 pinfo->fragmented = true1;
11995 frag_msg = fragment_add_seq_check(&gas_reassembly_table, tvb, offset,
11996 pinfo, dialog_token, NULL((void*)0),
11997 frag, resp_len, more);
11998 new_tvb = process_reassembled_data(tvb, offset, pinfo,
11999 "Reassembled GAS Query Response",
12000 frag_msg, &gas_resp_frag_items,
12001 NULL((void*)0), tree);
12002 if (new_tvb) {
12003 switch (type) {
12004 case ADV_PROTO_ID_ANQP0:
12005 dissect_anqp(query, new_tvb, pinfo, 0, false0);
12006 break;
12007 case ADV_PROTO_ID_VS221:
12008 if (subtype == ((DPP_CONFIGURATION_PROTOCOL0x01 << 8) |
12009 WFA_SUBTYPE_DPP26)) {
12010 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
12011 val_to_str(pinfo->pool, subtype >> 8, dpp_subtype_vals,
12012 "Unknown (%u)"));
12013 dissect_wifi_dpp_config_proto(pinfo, query, new_tvb, 0);
12014 } else {
12015 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
12016 new_tvb, 0,
12017 tvb_reported_length_remaining(new_tvb, 0),
12018 ENC_NA0x00000000);
12019 }
12020 break;
12021 default:
12022 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
12023 new_tvb, 0,
12024 tvb_reported_length_remaining(new_tvb, 0),
12025 ENC_NA0x00000000);
12026 }
12027 }
12028
12029 /* The old tvb cannot be used anymore */
12030 ieee80211_tvb_invalid = true1;
12031
12032 pinfo->fragmented = save_fragmented;
12033 }
12034 offset += resp_len;
12035 }
12036
12037 return offset - start;
12038}
12039
12040/* ************************************************************************* */
12041/* Dissect and add fixed mgmt fields to protocol tree */
12042/* ************************************************************************* */
12043
12044static uint64_t last_timestamp;
12045
12046static unsigned
12047add_ff_timestamp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12048{
12049 last_timestamp = tvb_get_letoh64(tvb, offset);
12050 proto_tree_add_item(tree, hf_ieee80211_ff_timestamp, tvb, offset, 8,
12051 ENC_LITTLE_ENDIAN0x80000000);
12052 return 8;
12053}
12054
12055static unsigned
12056add_ff_beacon_interval(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
12057{
12058 proto_tree_add_item(tree, hf_ieee80211_ff_beacon_interval, tvb, offset, 2,
12059 ENC_LITTLE_ENDIAN0x80000000);
12060 col_append_fstr(pinfo->cinfo, COL_INFO, ", BI=%d",
12061 tvb_get_letohs(tvb, offset));
12062 return 2;
12063}
12064
12065static unsigned
12066add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset);
12067
12068static unsigned
12069add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12070{
12071 static int * const ieee80211_cap_info_fields[] = {
12072 &hf_ieee80211_ff_cf_ess,
12073 &hf_ieee80211_ff_cf_ibss,
12074 &hf_ieee80211_ff_cf_reserved1,
12075 &hf_ieee80211_ff_cf_reserved2,
12076 &hf_ieee80211_ff_cf_privacy,
12077 &hf_ieee80211_ff_cf_preamble,
12078 &hf_ieee80211_ff_cf_critical_update_flag,
12079 &hf_ieee80211_ff_cf_nontran_bss_critical_update_flag,
12080 &hf_ieee80211_ff_cf_spec_man,
12081 &hf_ieee80211_ff_cf_qos,
12082 &hf_ieee80211_ff_cf_short_slot_time,
12083 &hf_ieee80211_ff_cf_apsd,
12084 &hf_ieee80211_ff_cf_radio_measurement,
12085 &hf_ieee80211_ff_cf_epd,
12086 &hf_ieee80211_ff_cf_reserved5,
12087 &hf_ieee80211_ff_cf_reserved6,
12088 NULL((void*)0)
12089 };
12090
12091 /* The capability information includes DMG parameters whenever it is transmitted by
12092 a DMG STA/AP (802.11ad-2012, 8.4.1.4) */
12093
12094 bool_Bool isDMG = GPOINTER_TO_INT(p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY))((gint) (glong) (p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan
, IS_DMG_KEY)))
;
12095
12096 if (isDMG) {
12097 proto_item *cap_item;
12098 proto_tree *cap_tree;
12099 cap_item = proto_tree_add_item(tree, hf_ieee80211_ff_capture, tvb, offset, 2,
12100 ENC_LITTLE_ENDIAN0x80000000);
12101 cap_tree = proto_item_add_subtree(cap_item, ett_cap_tree);
12102 add_ff_dmg_params(cap_tree, tvb, pinfo, offset);
12103 } else {
12104 /*
12105 * We can only interpret the ESS and IBSS fields to be an AP if the
12106 * frame is a BEACON or PROBE_RESPONSE
12107 */
12108 uint32_t l_frame_type = GPOINTER_TO_UINT(p_get_proto_data(wmem_file_scope(),((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
12109 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
12110 FRAME_TYPE_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
;
12111 if (((tvb_get_letohs(tvb, offset) & 0x0003) == 0x1 &&
12112 (l_frame_type == MGT_BEACON0x08 || l_frame_type == MGT_PROBE_RESP0x05)) ||
12113 l_frame_type == MGT_ASSOC_RESP0x01 || l_frame_type == MGT_REASSOC_RESP0x03) {
12114 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_AP_KEY, GINT_TO_POINTER(true)((gpointer) (glong) (1)));
12115 }
12116
12117 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
12118 hf_ieee80211_ff_capture,
12119 ett_cap_tree, ieee80211_cap_info_fields,
12120 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12121 }
12122 return 2;
12123}
12124
12125static unsigned
12126add_ff_auth_alg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12127{
12128 proto_tree_add_item(tree, hf_ieee80211_ff_auth_alg, tvb, offset, 2,
12129 ENC_LITTLE_ENDIAN0x80000000);
12130 return 2;
12131}
12132
12133static unsigned
12134add_ff_auth_trans_seq(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12135{
12136 proto_tree_add_item(tree, hf_ieee80211_ff_auth_seq, tvb, offset, 2,
12137 ENC_LITTLE_ENDIAN0x80000000);
12138 return 2;
12139}
12140
12141static unsigned
12142add_ff_current_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12143{
12144 proto_tree_add_item(tree, hf_ieee80211_ff_current_ap, tvb, offset, 6,
12145 ENC_NA0x00000000);
12146 return 6;
12147}
12148
12149static unsigned
12150add_ff_listen_ival(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12151{
12152 proto_tree_add_item(tree, hf_ieee80211_ff_listen_ival, tvb, offset, 2,
12153 ENC_LITTLE_ENDIAN0x80000000);
12154 return 2;
12155}
12156
12157static unsigned
12158add_ff_reason_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12159{
12160 proto_tree_add_item(tree, hf_ieee80211_ff_reason, tvb, offset, 2,
12161 ENC_LITTLE_ENDIAN0x80000000);
12162 return 2;
12163}
12164
12165static unsigned
12166add_ff_assoc_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12167{
12168 proto_tree_add_item(tree, hf_ieee80211_ff_assoc_id, tvb, offset, 2,
12169 ENC_LITTLE_ENDIAN0x80000000);
12170 return 2;
12171}
12172
12173static unsigned
12174add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12175{
12176 proto_tree_add_item(tree, hf_ieee80211_ff_status_code, tvb, offset, 2,
12177 ENC_LITTLE_ENDIAN0x80000000);
12178 return 2;
12179}
12180
12181static unsigned
12182add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12183{
12184 proto_tree_add_item(tree, hf_ieee80211_ff_category_code, tvb, offset, 1,
12185 ENC_LITTLE_ENDIAN0x80000000);
12186 return 1;
12187}
12188
12189static unsigned
12190add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12191{
12192 proto_tree_add_item(tree, hf_ieee80211_ff_action_code, tvb, offset, 1,
12193 ENC_LITTLE_ENDIAN0x80000000);
12194 return 1;
12195}
12196
12197static unsigned
12198add_ff_trigger(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12199{
12200 uint8_t trigger = tvb_get_uint8(tvb, offset);
12201 col_append_fstr(pinfo->cinfo, COL_INFO, ", Trigger=%d (%s)", trigger,
12202 val_to_str_const(trigger, ftm_trigger_vals, "Unknown"));
12203 proto_tree_add_item(tree, hf_ieee80211_ff_trigger, tvb, offset, 1,
12204 ENC_LITTLE_ENDIAN0x80000000);
12205 return 1;
12206}
12207
12208static unsigned
12209add_ff_ftm_tod(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12210{
12211 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_tod, tvb, offset, 6,
12212 ENC_LITTLE_ENDIAN0x80000000);
12213 return 6;
12214}
12215
12216static unsigned
12217add_ff_ftm_toa(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12218{
12219 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_toa, tvb, offset, 6,
12220 ENC_LITTLE_ENDIAN0x80000000);
12221 return 6;
12222}
12223
12224static unsigned
12225add_ff_ftm_tod_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12226{
12227 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_tod_err, tvb, offset, 2,
12228 ENC_LITTLE_ENDIAN0x80000000);
12229 return 2;
12230}
12231
12232static unsigned
12233add_ff_ftm_toa_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12234{
12235 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_toa_err, tvb, offset, 2,
12236 ENC_LITTLE_ENDIAN0x80000000);
12237 return 2;
12238}
12239
12240static unsigned
12241add_ff_ftm_tod_err1(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12242{
12243 static int * const fields[] = {
12244 &hf_ieee80211_ff_ftm_max_tod_error_exponent,
12245 &hf_ieee80211_ff_ftm_tod_err_reserved,
12246 &hf_ieee80211_ff_ftm_tod_not_continuous,
12247 NULL((void*)0)
12248 };
12249
12250 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ftm_tod_err1,
12251 ett_ff_ftm_tod_err1, fields,
12252 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12253 return 1;
12254}
12255
12256static unsigned
12257add_ff_ftm_toa_err1(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12258{
12259 static int * const fields[] = {
12260 &hf_ieee80211_ff_ftm_max_toa_error_exponent,
12261 &hf_ieee80211_ff_ftm_toa_err_reserved,
12262 &hf_ieee80211_ff_ftm_invalid_measurement,
12263 &hf_ieee80211_ff_ftm_toa_type,
12264 NULL((void*)0)
12265 };
12266
12267 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ftm_toa_err1,
12268 ett_ff_ftm_toa_err1, fields,
12269 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12270 return 1;
12271}
12272
12273static unsigned
12274add_ff_ftm_cfo_parameter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12275{
12276 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_cfo, tvb, offset, 2,
12277 ENC_LITTLE_ENDIAN0x80000000);
12278 return 2;
12279}
12280
12281static unsigned
12282add_ff_ftm_r2i_ndp_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12283{
12284 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_r2i_ndp_tx_power, tvb, offset, 1,
12285 ENC_LITTLE_ENDIAN0x80000000);
12286 return 1;
12287}
12288
12289static unsigned
12290add_ff_ftm_i2r_ndp_target_rssi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12291{
12292 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_i2r_ndp_target_rssi, tvb, offset, 1,
12293 ENC_LITTLE_ENDIAN0x80000000);
12294 return 1;
12295}
12296
12297static int
12298dissect_ftm_params(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
12299{
12300 int offset = 0;
12301 int len = 0;
12302 proto_tree *ftm_param_tree = tree;
12303 static int * const ieee80211_ftm_params_fields1[] = {
12304 &hf_ieee80211_ff_ftm_param_status_indication,
12305 &hf_ieee80211_ff_ftm_param_value,
12306 &hf_ieee80211_ff_ftm_param_reserved1,
12307 &hf_ieee80211_ff_ftm_param_burst_exponent,
12308 &hf_ieee80211_ff_ftm_param_burst_duration,
12309 NULL((void*)0)};
12310
12311 static int * const ieee80211_ftm_params_fields2[] = {
12312 &hf_ieee80211_ff_ftm_param_min_delta_ftm,
12313 &hf_ieee80211_ff_ftm_param_partial_tsf_timer,
12314 &hf_ieee80211_ff_ftm_param_partial_tsf_no_pref,
12315 &hf_ieee80211_ff_ftm_param_asap_capable,
12316 &hf_ieee80211_ff_ftm_param_asap,
12317 &hf_ieee80211_ff_ftm_param_ftm_per_burst,
12318 NULL((void*)0)};
12319
12320 static int * const ieee80211_ftm_params_fields3[] = {
12321 &hf_ieee80211_ff_ftm_param_reserved2,
12322 &hf_ieee80211_ff_ftm_param_format_and_bw,
12323 &hf_ieee80211_ff_ftm_param_burst_period,
12324 NULL((void*)0)};
12325
12326 len = tvb_captured_length(tvb);
12327 if (len != 9)
12328 return 0;
12329
12330 proto_tree_add_bitmask_with_flags(ftm_param_tree, tvb, offset, hf_ieee80211_ff_ftm_param_delim1,
12331 ett_ff_ftm_param_delim1, ieee80211_ftm_params_fields1,
12332 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12333 offset += 2;
12334 proto_tree_add_bitmask_with_flags(ftm_param_tree, tvb, offset, hf_ieee80211_ff_ftm_param_delim2,
12335 ett_ff_ftm_param_delim2, ieee80211_ftm_params_fields2,
12336 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12337 offset += 4;
12338 proto_tree_add_bitmask_with_flags(ftm_param_tree, tvb, offset, hf_ieee80211_ff_ftm_param_delim3,
12339 ett_ff_ftm_param_delim3, ieee80211_ftm_params_fields3,
12340 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12341 offset += 3;
12342
12343 return offset;
12344}
12345
12346static unsigned
12347add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12348{
12349 uint8_t value = tvb_get_uint8(tvb, offset);
12350 col_append_fstr(pinfo->cinfo, COL_INFO, ", Dialog Token=%d", value);
12351 proto_tree_add_item(tree, hf_ieee80211_ff_dialog_token, tvb, offset, 1,
12352 ENC_LITTLE_ENDIAN0x80000000);
12353 return 1;
12354}
12355
12356static unsigned
12357add_ff_followup_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12358{
12359 proto_tree_add_item(tree, hf_ieee80211_ff_followup_dialog_token, tvb, offset, 1,
12360 ENC_LITTLE_ENDIAN0x80000000);
12361 return 1;
12362}
12363
12364static unsigned
12365add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12366{
12367 proto_tree_add_item(tree, hf_ieee80211_ff_wme_action_code, tvb, offset, 1,
12368 ENC_LITTLE_ENDIAN0x80000000);
12369 return 1;
12370}
12371
12372static unsigned
12373add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12374{
12375 proto_tree_add_item(tree, hf_ieee80211_ff_wme_status_code, tvb, offset, 1,
12376 ENC_LITTLE_ENDIAN0x80000000);
12377 return 1;
12378}
12379
12380static unsigned
12381add_ff_qos_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12382{
12383 proto_tree_add_item(tree, hf_ieee80211_ff_qos_action_code, tvb, offset, 1,
12384 ENC_LITTLE_ENDIAN0x80000000);
12385 return 1;
12386}
12387
12388static unsigned
12389add_ff_block_ack_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12390{
12391 proto_tree_add_item(tree, hf_ieee80211_ff_ba_action, tvb, offset, 1,
12392 ENC_LITTLE_ENDIAN0x80000000);
12393 return 1;
12394}
12395
12396static unsigned
12397add_ff_block_ack_param(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12398{
12399 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_params,
12400 ett_ff_ba_param_tree,
12401 ieee80211_ff_block_ack_params_fields,
12402 ENC_LITTLE_ENDIAN0x80000000);
12403 return 2;
12404}
12405
12406static unsigned
12407add_ff_block_ack_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12408{
12409 proto_tree_add_item(tree, hf_ieee80211_ff_block_ack_timeout, tvb, offset, 2,
12410 ENC_LITTLE_ENDIAN0x80000000);
12411 return 2;
12412}
12413
12414static unsigned
12415add_ff_block_ack_ssc(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12416{
12417 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_ssc,
12418 ett_ff_ba_ssc_tree, ieee80211_ff_block_ack_ssc_fields,
12419 ENC_LITTLE_ENDIAN0x80000000);
12420 return 2;
12421}
12422
12423static unsigned
12424add_ff_qos_ts_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12425{
12426 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_tsinfo,
12427 ett_tsinfo_tree, ieee80211_tsinfo_fields,
12428 ENC_LITTLE_ENDIAN0x80000000);
12429 return 3;
12430}
12431
12432static unsigned
12433add_ff_mesh_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12434{
12435 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_action, tvb, offset, 1,
12436 ENC_LITTLE_ENDIAN0x80000000);
12437 return 1;
12438}
12439
12440static unsigned
12441add_ff_multihop_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12442{
12443 proto_tree_add_item(tree, hf_ieee80211_ff_multihop_action, tvb, offset, 1,
12444 ENC_LITTLE_ENDIAN0x80000000);
12445 return 1;
12446}
12447
12448static unsigned
12449add_ff_mesh_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12450{
12451 int start = offset;
12452 uint8_t flags;
12453
12454 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_flags, tvb, offset, 1,
12455 ENC_LITTLE_ENDIAN0x80000000);
12456 flags = tvb_get_uint8(tvb, offset);
12457 offset += 1;
12458 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_ttl, tvb, offset, 1,
12459 ENC_LITTLE_ENDIAN0x80000000);
12460 offset += 1;
12461 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_sequence, tvb, offset, 4,
12462 ENC_LITTLE_ENDIAN0x80000000);
12463 offset += 4;
12464
12465 switch (flags & 0x03) {
12466 case 1:
12467 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr4, tvb, offset, 6,
12468 ENC_NA0x00000000);
12469 offset += 6;
12470 break;
12471 case 2:
12472 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr5, tvb, offset, 6,
12473 ENC_NA0x00000000);
12474 offset += 6;
12475 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr6, tvb, offset, 6,
12476 ENC_NA0x00000000);
12477 offset += 6;
12478 break;
12479 case 3:
12480 proto_item_append_text(tree, " Unknown Address Extension Mode");
12481 break;
12482 default:
12483 /* no default action */
12484 break;
12485 }
12486
12487 return offset - start;
12488}
12489
12490static unsigned
12491add_ff_selfprot_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12492{
12493 proto_tree_add_item(tree, hf_ieee80211_ff_selfprot_action, tvb, offset, 1,
12494 ENC_LITTLE_ENDIAN0x80000000);
12495 return 1;
12496}
12497
12498static unsigned
12499add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12500{
12501 proto_tree_add_item(tree, hf_ieee80211_ff_dls_action_code, tvb, offset, 1,
12502 ENC_LITTLE_ENDIAN0x80000000);
12503 return 1;
12504}
12505
12506static unsigned
12507add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12508{
12509 proto_tree_add_item(tree, hf_ieee80211_ff_dst_mac_addr, tvb, offset, 6,
12510 ENC_NA0x00000000);
12511 return 6;
12512}
12513
12514static unsigned
12515add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12516{
12517 proto_tree_add_item(tree, hf_ieee80211_ff_src_mac_addr, tvb, offset, 6,
12518 ENC_NA0x00000000);
12519 return 6;
12520}
12521
12522static unsigned
12523add_ff_req_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12524{
12525 proto_tree_add_item(tree, hf_ieee80211_ff_req_ap_addr, tvb, offset, 6,
12526 ENC_NA0x00000000);
12527 return 6;
12528}
12529
12530static unsigned
12531add_ff_res_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12532{
12533 proto_tree_add_item(tree, hf_ieee80211_ff_res_ap_addr, tvb, offset, 6,
12534 ENC_NA0x00000000);
12535 return 6;
12536}
12537
12538static unsigned
12539add_ff_check_beacon(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12540{
12541 proto_tree_add_item(tree, hf_ieee80211_ff_check_beacon, tvb, offset, 1,
12542 ENC_NA0x00000000);
12543 return 1;
12544}
12545
12546static unsigned
12547add_ff_tod(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12548{
12549 proto_tree_add_item(tree, hf_ieee80211_ff_tod, tvb, offset, 4,
12550 ENC_LITTLE_ENDIAN0x80000000);
12551 return 4;
12552}
12553
12554static unsigned
12555add_ff_toa(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12556{
12557 proto_tree_add_item(tree, hf_ieee80211_ff_toa, tvb, offset, 4,
12558 ENC_LITTLE_ENDIAN0x80000000);
12559 return 4;
12560}
12561
12562static unsigned
12563add_ff_max_tod_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12564{
12565 proto_tree_add_item(tree, hf_ieee80211_ff_max_tod_err, tvb, offset, 1,
12566 ENC_NA0x00000000);
12567 return 1;
12568}
12569
12570static unsigned
12571add_ff_max_toa_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12572{
12573 proto_tree_add_item(tree, hf_ieee80211_ff_max_toa_err, tvb, offset, 1,
12574 ENC_NA0x00000000);
12575 return 1;
12576}
12577
12578static unsigned
12579add_ff_dls_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12580{
12581 proto_tree_add_item(tree, hf_ieee80211_ff_dls_timeout, tvb, offset, 2,
12582 ENC_LITTLE_ENDIAN0x80000000);
12583 return 2;
12584}
12585
12586static unsigned
12587add_ff_delba_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12588{
12589 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_delba_param,
12590 ett_ff_ba_param_tree, ieee80211_ff_delba_param_fields,
12591 ENC_LITTLE_ENDIAN0x80000000);
12592 return 2;
12593}
12594
12595static unsigned
12596add_ff_max_reg_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12597{
12598 proto_tree_add_item(tree, hf_ieee80211_ff_max_reg_pwr, tvb, offset, 2,
12599 ENC_LITTLE_ENDIAN0x80000000);
12600 return 2;
12601}
12602
12603static unsigned
12604add_ff_measurement_pilot_int(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12605{
12606 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
12607 1, ENC_NA0x00000000);
12608 return 1;
12609}
12610
12611static unsigned
12612add_ff_country_str(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12613{
12614 proto_tree_add_item(tree, hf_ieee80211_ff_country_str, tvb, offset, 2,
12615 ENC_ASCII0x00000000);
12616 offset += 2;
12617
12618 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
12619 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12620 return 3;
12621}
12622
12623static unsigned
12624add_ff_max_tx_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12625{
12626 proto_tree_add_item(tree, hf_ieee80211_ff_max_tx_pwr, tvb, offset, 1,
12627 ENC_LITTLE_ENDIAN0x80000000);
12628 return 1;
12629}
12630
12631static unsigned
12632add_ff_tx_pwr_used(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12633{
12634 proto_tree_add_item(tree, hf_ieee80211_ff_tx_pwr_used, tvb, offset, 1,
12635 ENC_LITTLE_ENDIAN0x80000000);
12636 return 1;
12637}
12638
12639static unsigned
12640add_ff_transceiver_noise_floor(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12641{
12642 proto_tree_add_item(tree, hf_ieee80211_ff_transceiver_noise_floor, tvb,
12643 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12644 return 1;
12645}
12646
12647static unsigned
12648add_ff_channel_width(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12649{
12650 proto_tree_add_item(tree, hf_ieee80211_ff_channel_width, tvb, offset, 1,
12651 ENC_LITTLE_ENDIAN0x80000000);
12652 return 1;
12653}
12654
12655/* QoS Info: 802.11-2012 8.4.1.17 */
12656static unsigned
12657add_ff_qos_info_ap(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12658{
12659 /* From AP so decode as AP: Figure 8-51-QoS Info field when sent by a AP */
12660 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
12661 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
12662 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12663 return 1;
12664}
12665
12666
12667/* QoS Info: 802.11-2012 8.4.1.17 */
12668static unsigned
12669add_ff_qos_info_sta(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12670{
12671 /* To AP so decode as STA: Figure 8-52-QoS Info field when set by a non-AP STA */
12672 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_sta,
12673 ett_ff_qos_info, ieee80211_ff_qos_info_sta_fields,
12674 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12675 return 1;
12676}
12677
12678static unsigned
12679add_ff_sm_pwr_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12680{
12681 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_sm_pwr_save,
12682 ett_ff_sm_pwr_save, ieee80211_ff_sw_pwr_save_fields,
12683 ENC_LITTLE_ENDIAN0x80000000);
12684 return 1;
12685}
12686
12687static unsigned
12688add_ff_pco_phase_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12689{
12690 proto_tree_add_item(tree, hf_ieee80211_ff_pco_phase_cntrl, tvb, offset, 1,
12691 ENC_LITTLE_ENDIAN0x80000000);
12692 return 1;
12693}
12694
12695static unsigned
12696add_ff_psmp_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12697{
12698 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_psmp_param_set,
12699 ett_ff_psmp_param_set,
12700 ieee80211_ff_psmp_param_set_fields,
12701 ENC_LITTLE_ENDIAN0x80000000);
12702 return 2;
12703}
12704
12705static unsigned
12706add_ff_mimo_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12707{
12708 proto_item *mimo_item;
12709 proto_tree *mimo_tree;
12710 static int * const ieee80211_mimo_fields[] = {
12711 &hf_ieee80211_ff_mimo_cntrl_nc_index,
12712 &hf_ieee80211_ff_mimo_cntrl_nr_index,
12713 &hf_ieee80211_ff_mimo_cntrl_channel_width,
12714 &hf_ieee80211_ff_mimo_cntrl_grouping,
12715 &hf_ieee80211_ff_mimo_cntrl_coefficient_size,
12716 &hf_ieee80211_ff_mimo_cntrl_codebook_info,
12717 &hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
12718 &hf_ieee80211_ff_mimo_cntrl_reserved,
12719 NULL((void*)0)
12720 };
12721
12722 mimo_item = proto_tree_add_item(tree, hf_ieee80211_ff_mimo_cntrl, tvb,
12723 offset, 6, ENC_NA0x00000000);
12724 mimo_tree = proto_item_add_subtree(mimo_item, ett_ff_mimo_cntrl);
12725
12726 proto_tree_add_bitmask_list(mimo_tree, tvb, offset, 2, ieee80211_mimo_fields, ENC_LITTLE_ENDIAN0x80000000);
12727 offset += 2;
12728 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
12729 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12730
12731 return 6;
12732}
12733
12734static unsigned
12735add_ff_ant_selection(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12736{
12737 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ant_selection,
12738 ett_ff_ant_sel, ieee80211_ff_ant_selection_fields,
12739 ENC_LITTLE_ENDIAN0x80000000);
12740 return 1;
12741}
12742
12743static unsigned
12744add_ff_extended_channel_switch_announcement(proto_tree *tree, tvbuff_t *tvb,
12745 packet_info *pinfo _U___attribute__((unused)), int offset)
12746{
12747 proto_tree_add_bitmask(tree, tvb, offset,
12748 hf_ieee80211_ff_ext_channel_switch_announcement,
12749 ett_ff_chan_switch_announce,
12750 ieee80211_ff_ext_channel_switch_announcement_fields,
12751 ENC_LITTLE_ENDIAN0x80000000);
12752 return 4;
12753}
12754
12755static unsigned
12756add_ff_ht_information(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12757{
12758 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ht_info,
12759 ett_ff_ht_info, ieee80211_ff_ht_info_fields,
12760 ENC_LITTLE_ENDIAN0x80000000);
12761 return 1;
12762}
12763static unsigned
12764add_ff_lmr_report(proto_tree *tree, tvbuff_t *tvb,
12765 packet_info *pinfo _U___attribute__((unused)), int offset)
12766{
12767 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
12768 offset += add_ff_ftm_tod(tree, tvb, pinfo, offset);
12769 offset += add_ff_ftm_toa(tree, tvb, pinfo, offset);
12770 offset += add_ff_ftm_tod_err1(tree, tvb, pinfo, offset);
12771 offset += add_ff_ftm_toa_err1(tree, tvb, pinfo, offset);
12772 offset += add_ff_ftm_cfo_parameter(tree, tvb, pinfo, offset);
12773 offset += add_ff_ftm_r2i_ndp_tx_power(tree, tvb, pinfo, offset);
12774 offset += add_ff_ftm_i2r_ndp_target_rssi(tree, tvb, pinfo, offset);
12775 /* Secure LTF parameters (optional) */
12776 /* AOA feedback (optional) */
12777 return offset;
12778}
12779
12780static unsigned
12781add_ff_ftm_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12782{
12783 return add_ff_trigger(tree, tvb, pinfo, offset);
12784}
12785
12786static unsigned
12787add_ff_ftm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12788{
12789 unsigned start = offset;
12790 uint8_t dialog_token = tvb_get_uint8(tvb, offset);
12791 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
12792 if (dialog_token == 0) {
12793 col_append_str(pinfo->cinfo, COL_INFO, " (Termination)");
12794 }
12795 offset += add_ff_followup_dialog_token(tree, tvb, pinfo, offset);
12796 offset += add_ff_ftm_tod(tree, tvb, pinfo, offset);
12797 offset += add_ff_ftm_toa(tree, tvb, pinfo, offset);
12798 offset += add_ff_ftm_tod_err(tree, tvb, pinfo, offset);
12799 offset += add_ff_ftm_toa_err(tree, tvb, pinfo, offset);
12800 return offset - start;
12801}
12802
12803static unsigned
12804add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12805{
12806 proto_tree_add_item(tree, hf_ieee80211_ff_ht_action, tvb, offset, 1,
12807 ENC_LITTLE_ENDIAN0x80000000);
12808 return 1;
12809}
12810
12811static unsigned
12812add_ff_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12813{
12814 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_action_code, tvb, offset, 1,
12815 ENC_LITTLE_ENDIAN0x80000000);
12816 return 1;
12817}
12818
12819static unsigned
12820add_ff_dmg_pwr_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12821{
12822 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_pwr_mgmt, tvb, offset, 1,
12823 ENC_LITTLE_ENDIAN0x80000000);
12824 return 1;
12825}
12826
12827static unsigned
12828add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12829{
12830 proto_item *psmp_item;
12831 proto_tree *psmp_tree;
12832
12833 psmp_item = proto_tree_add_item(tree, hf_ieee80211_ff_psmp_sta_info, tvb,
12834 offset, 8, ENC_LITTLE_ENDIAN0x80000000);
12835 psmp_tree = proto_item_add_subtree(psmp_item, ett_ff_psmp_sta_info);
12836
12837 proto_tree_add_item(psmp_item, hf_ieee80211_ff_psmp_sta_info_type, tvb,
12838 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12839
12840 switch (tvb_get_letohl(tvb, offset) & PSMP_STA_INFO_FLAG_TYPE0x00000003) {
12841 case PSMP_STA_INFO_BROADCAST0:
12842 proto_tree_add_item(psmp_tree,
12843 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
12844 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12845 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
12846 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12847 /* Missing 64 bit bitmask... */
12848 proto_tree_add_uint64(psmp_tree,
12849 hf_ieee80211_ff_psmp_sta_info_reserved_large,
12850 tvb, offset, 8,
12851 (tvb_get_letoh64(tvb, offset) &
12852 UINT64_C(0xFFFFFFFFFFE00000)0xFFFFFFFFFFE00000UL) >> 21);
12853 break;
12854 case PSMP_STA_INFO_MULTICAST1:
12855 proto_tree_add_item(psmp_tree,
12856 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
12857 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12858 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
12859 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12860 /* Missing 64 bit bitmask... */
12861 proto_tree_add_uint64(psmp_tree,
12862 hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
12863 tvb, offset, 6,
12864 (tvb_get_letoh64(tvb, offset) &
12865 UINT64_C(0xFFFFFFFFFFE00000)0xFFFFFFFFFFE00000UL) >> 21);
12866 break;
12867 case PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2:
12868 proto_tree_add_item(psmp_tree,
12869 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
12870 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12871 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
12872 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12873 offset += 2;
12874 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_sta_id, tvb,
12875 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12876 offset += 2;
12877
12878 proto_tree_add_item(psmp_tree,
12879 hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
12880 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12881 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_utt_duration,
12882 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12883 proto_tree_add_item(psmp_tree,
12884 hf_ieee80211_ff_psmp_sta_info_reserved_small, tvb,
12885 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12886 break;
12887 }
12888
12889 return 8;
12890}
12891
12892static unsigned
12893add_ff_schedule_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12894{
12895 static int * const ieee80211_schedule_info_fields1[] = {
12896 &hf_ieee80211_sched_info_agg,
12897 NULL((void*)0)
12898 };
12899 static int * const ieee80211_schedule_info_fields2[] = {
12900 &hf_ieee80211_sched_info_agg,
12901 &hf_ieee80211_sched_info_tsid,
12902 &hf_ieee80211_sched_info_dir,
12903 NULL((void*)0)
12904 };
12905
12906 if (tvb_get_letohs(tvb, offset) & 0x0001) {
12907 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_sched_info,
12908 ett_sched_tree, ieee80211_schedule_info_fields2,
12909 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12910 } else {
12911 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_sched_info,
12912 ett_sched_tree, ieee80211_schedule_info_fields1,
12913 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12914 }
12915
12916 return 2;
12917}
12918
12919static unsigned
12920add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12921{
12922 proto_tree_add_item(tree, hf_ieee80211_ff_public_action, tvb, offset, 1,
12923 ENC_LITTLE_ENDIAN0x80000000);
12924 return 1;
12925}
12926
12927static unsigned
12928add_ff_ppa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12929{
12930 proto_tree_add_item(tree, hf_ieee80211_ff_protected_public_action, tvb, offset, 1,
12931 ENC_LITTLE_ENDIAN0x80000000);
12932 return 1;
12933}
12934
12935static unsigned
12936add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12937{
12938 proto_tree_add_item(tree, hf_ieee80211_ff_ft_action_code, tvb, offset, 1,
12939 ENC_LITTLE_ENDIAN0x80000000);
12940 return 1;
12941}
12942
12943static unsigned
12944add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12945{
12946 proto_tree_add_item(tree, hf_ieee80211_ff_sta_address, tvb, offset, 6,
12947 ENC_NA0x00000000);
12948 return 6;
12949}
12950
12951static unsigned
12952add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12953{
12954 proto_tree_add_item(tree, hf_ieee80211_ff_target_ap_address, tvb, offset, 6,
12955 ENC_NA0x00000000);
12956 return 6;
12957}
12958
12959static unsigned
12960add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12961{
12962 proto_tree_add_item(tree, hf_ieee80211_ff_gas_comeback_delay, tvb, offset, 2,
12963 ENC_LITTLE_ENDIAN0x80000000);
12964 return 2;
12965}
12966
12967static unsigned
12968add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12969{
12970 proto_tree_add_item(tree, hf_ieee80211_ff_gas_fragment_id, tvb, offset, 1,
12971 ENC_LITTLE_ENDIAN0x80000000);
12972 proto_tree_add_item(tree, hf_ieee80211_ff_more_gas_fragments, tvb, offset, 1,
12973 ENC_LITTLE_ENDIAN0x80000000);
12974 return 1;
12975}
12976
12977static unsigned
12978add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12979{
12980 proto_tree_add_item(tree, hf_ieee80211_ff_sa_query_action_code, tvb, offset,
12981 1, ENC_LITTLE_ENDIAN0x80000000);
12982 return 1;
12983}
12984
12985static unsigned
12986add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12987{
12988 proto_tree_add_item(tree, hf_ieee80211_ff_transaction_id, tvb, offset, 2,
12989 ENC_LITTLE_ENDIAN0x80000000);
12990 return 2;
12991}
12992
12993static unsigned
12994add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
12995{
12996 uint8_t code;
12997 code = tvb_get_uint8(tvb, offset);
12998 col_set_str(pinfo->cinfo, COL_INFO,
12999 val_to_str_ext_const(code, &tdls_action_codes_ext,
13000 "Unknown TDLS Action"));
13001 proto_tree_add_item(tree, hf_ieee80211_ff_tdls_action_code, tvb, offset, 1,
13002 ENC_LITTLE_ENDIAN0x80000000);
13003 return 1;
13004}
13005
13006static unsigned
13007add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13008{
13009 proto_tree_add_item(tree, hf_ieee80211_ff_target_channel, tvb, offset, 1,
13010 ENC_LITTLE_ENDIAN0x80000000);
13011 return 1;
13012}
13013
13014static unsigned
13015add_ff_operating_class(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13016{
13017 proto_tree_add_item(tree, hf_ieee80211_ff_operating_class, tvb, offset, 1,
13018 ENC_LITTLE_ENDIAN0x80000000);
13019 return 1;
13020}
13021
13022static unsigned
13023add_ff_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13024{
13025 proto_tree_add_item(tree, hf_ieee80211_ff_channel, tvb, offset, 1,
13026 ENC_LITTLE_ENDIAN0x80000000);
13027 return 1;
13028}
13029
13030static unsigned
13031add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13032{
13033 uint8_t code;
13034
13035 code = tvb_get_uint8(tvb, offset);
13036 col_set_str(pinfo->cinfo, COL_INFO,
13037 val_to_str_ext_const(code, &wnm_action_codes_ext, "Unknown WNM Action"));
13038 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13039 return 1;
13040}
13041
13042static unsigned
13043add_ff_unprotected_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13044{
13045 uint8_t code;
13046
13047 code = tvb_get_uint8(tvb, offset);
13048 col_set_str(pinfo->cinfo, COL_INFO,
13049 val_to_str_ext_const(code, &unprotected_wnm_action_codes_ext, "Unknown Unprotected WNM Action"));
13050 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13051 return 1;
13052}
13053
13054static unsigned
13055add_ff_unprotected_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13056{
13057 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_dmg_action_code, tvb, offset, 1, ENC_NA0x00000000);
13058 return 1;
13059}
13060
13061static unsigned
13062add_ff_key_data_length(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13063{
13064 proto_tree_add_item(tree, hf_ieee80211_ff_key_data_length, tvb, offset, 2,
13065 ENC_LITTLE_ENDIAN0x80000000);
13066 return 2;
13067}
13068
13069static unsigned
13070add_ff_wnm_notification_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13071{
13072 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_type,
13073 tvb, offset, 1, ENC_NA0x00000000);
13074 return 1;
13075}
13076
13077/* Action frame: Radio Measurement actions */
13078static unsigned
13079add_ff_rm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13080{
13081 proto_tree_add_item(tree, hf_ieee80211_ff_rm_action_code, tvb, offset, 1, ENC_NA0x00000000);
13082 return 1;
13083}
13084
13085static unsigned
13086add_ff_rm_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13087{
13088 proto_tree_add_item(tree, hf_ieee80211_ff_rm_dialog_token, tvb, offset, 1, ENC_NA0x00000000);
13089 return 1;
13090}
13091
13092/* Radio Measurement Request frame, Action fields */
13093static unsigned
13094add_ff_rm_repetitions(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13095{
13096 /* Note: 65535 means repeated until cancelled or superseded */
13097 proto_tree_add_item(tree, hf_ieee80211_ff_rm_repetitions, tvb, offset, 2,
13098 ENC_BIG_ENDIAN0x00000000);
13099 return 2;
13100}
13101
13102/* Link Measurement Request frame, Action fields*/
13103static unsigned
13104add_ff_rm_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13105{
13106 /* In dBm, see 8.4.1.20 */
13107 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_power, tvb, offset, 1, ENC_NA0x00000000);
13108 return 1;
13109}
13110
13111static unsigned
13112add_ff_rm_max_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13113{
13114 /* In dBm, see 8.4.1.19 */
13115 proto_tree_add_item(tree, hf_ieee80211_ff_rm_max_tx_power, tvb, offset, 1, ENC_NA0x00000000);
13116 return 1;
13117}
13118
13119/* Link Measurement Report frame, Action fields */
13120static unsigned
13121add_ff_rm_tpc_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13122{
13123 proto_tree *tpc_tree;
13124 proto_item *tpc_item;
13125
13126 /* 8.4.2.19 TPC Report element */
13127 /* XXX - The TPC Report element is exactly the same as that dissected
13128 * by ieee80211_tag_tpc_report(), so some of these fixed fields duplicate
13129 * tagged fields.
13130 */
13131 tpc_item = proto_tree_add_item(tree, hf_ieee80211_ff_tpc, tvb, offset, 4, ENC_NA0x00000000);
13132 tpc_tree = proto_item_add_subtree(tpc_item, ett_tpc);
13133 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_element_id, tvb, offset, 1, ENC_NA0x00000000);
13134 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_length, tvb, offset + 1, 1, ENC_NA0x00000000);
13135 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_tx_power, tvb, offset + 2, 1, ENC_NA0x00000000);
13136 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_link_margin, tvb, offset + 3, 1, ENC_NA0x00000000);
13137 return 4;
13138}
13139
13140static unsigned
13141add_ff_rm_rx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13142{
13143 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
13144 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rx_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
13145 return 1;
13146}
13147
13148static unsigned
13149add_ff_rm_tx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13150{
13151 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
13152 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
13153 return 1;
13154}
13155
13156static unsigned
13157add_ff_rm_rcpi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13158{
13159 /* 8.4.2.40: RCPI as specified for certain PHYs */
13160 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rcpi, tvb, offset, 1, ENC_NA0x00000000);
13161 return 1;
13162}
13163
13164static unsigned
13165add_ff_rm_rsni(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13166{
13167 /* 8.4.2.43: RSNI in steps of 0.5 dB, calculated as:
13168 * RSNI = (10 * log10((RCPI_{power} - ANPI_{power}) / ANPI_{power}) + 20)*2 */
13169 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rsni, tvb, offset, 1, ENC_NA0x00000000);
13170 return 1;
13171}
13172
13173static unsigned
13174add_ff_bss_transition_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13175{
13176 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_status_code, tvb, offset, 1,
13177 ENC_LITTLE_ENDIAN0x80000000);
13178 return 1;
13179}
13180
13181static unsigned
13182add_ff_bss_termination_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13183{
13184 proto_tree_add_item(tree, hf_ieee80211_ff_bss_termination_delay, tvb, offset, 1,
13185 ENC_LITTLE_ENDIAN0x80000000);
13186 return 1;
13187}
13188
13189static unsigned
13190add_ff_fils_discovery(proto_tree *tree, tvbuff_t *tvb,
13191 packet_info *pinfo _U___attribute__((unused)), int offset)
13192{
13193
13194 uint16_t fc, ssid_length;
13195 static int * const ieee80211_ff_fils_discovery_frame_control[] = {
13196 &hf_ieee80211_ff_fils_discovery_frame_control_ssid_length,
13197 &hf_ieee80211_ff_fils_discovery_frame_control_capability,
13198 &hf_ieee80211_ff_fils_discovery_frame_control_short_ssid,
13199 &hf_ieee80211_ff_fils_discovery_frame_control_ap_csn,
13200 &hf_ieee80211_ff_fils_discovery_frame_control_ano,
13201 &hf_ieee80211_ff_fils_discovery_frame_control_channel_center_frequency,
13202 &hf_ieee80211_ff_fils_discovery_frame_control_primary_channel,
13203 &hf_ieee80211_ff_fils_discovery_frame_control_rsn_info,
13204 &hf_ieee80211_ff_fils_discovery_frame_control_length,
13205 &hf_ieee80211_ff_fils_discovery_frame_control_md,
13206 &hf_ieee80211_ff_fils_discovery_frame_control_reserved,
13207 NULL((void*)0)
13208 };
13209
13210 proto_tree_add_bitmask(tree, tvb, offset,
13211 hf_ieee80211_ff_fils_discovery_frame_control,
13212 ett_ff_fils_discovery_frame_control,
13213 ieee80211_ff_fils_discovery_frame_control,
13214 ENC_LITTLE_ENDIAN0x80000000);
13215 fc = tvb_get_letohs(tvb, offset);
13216 offset += 2;
13217
13218 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
13219
13220 offset += add_ff_beacon_interval(tree, tvb, pinfo, offset);
13221
13222 if(fc & PA_FILS_FC_SHORT_SSID0x0040) {
13223 /* Always 4 bytes for Short SSID */
13224 /* TODO add check of SSID Length */
13225 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_short_ssid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13226 offset += 4;
13227 } else {
13228 ssid_length = (fc & PA_FILS_FC_SSID_LENGTH0x001F) + 1;
13229 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ssid, tvb, offset, ssid_length, ENC_ASCII0x00000000);
13230 offset += ssid_length;
13231 }
13232
13233 if(fc & PA_FILS_FC_LENGTH0x1000){
13234 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_length, tvb, offset, 1, ENC_NA0x00000000);
13235 offset += 1;
13236 }
13237
13238 if(fc & PA_FILS_FC_CAPABILITY0x0020) {
13239 proto_tree *fdc_tree;
13240 proto_item *fdc_item;
13241 uint32_t fdc;
13242 fdc_item = proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_fils_discovery_capability, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &fdc);
13243 fdc_tree = proto_item_add_subtree(fdc_item, ett_ff_fils_discovery_capability);
13244 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_ess, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13245 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_privacy, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13246 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_bss_operating_channel_width, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13247 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_max_number_of_spatial_streams, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13248 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13249 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_multiple_bssid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13250 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_phy_index, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13251 switch((fdc & 0x1C00) >> 10){
13252 case 0:
13253 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_dsss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13254 break;
13255 case 1:
13256 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ofdm, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13257 break;
13258 case 2:
13259 case 3:
13260 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ht_vht_tvht, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13261 break;
13262 case 4:
13263 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_he, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13264 break;
13265 default:
13266 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13267 break;
13268 }
13269 offset += 2;
13270 }
13271
13272 if(fc & PA_FILS_FC_PC0x0400) {
13273 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_operating_class, tvb, offset, 1, ENC_NA0x00000000);
13274 offset += 1;
13275 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_primary_channel, tvb, offset, 1, ENC_NA0x00000000);
13276 offset += 1;
13277 }
13278
13279 if(fc & PA_FILS_FC_AP_CSN0x0080) {
13280 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ap_csn, tvb, offset, 1, ENC_NA0x00000000);
13281 offset += 1;
13282 }
13283
13284 if(fc & PA_FILS_FC_ANO0x0100) {
13285 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ano, tvb, offset, 1, ENC_NA0x00000000);
13286 offset += 1;
13287 }
13288
13289 if(fc & PA_FILS_FC_RSN_INFO0x0800) {
13290 /*TODO Dissect RSN info */
13291 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_rsn_info, tvb, offset, 5, ENC_NA0x00000000);
13292 offset += 5;
13293 }
13294
13295 if(fc & PA_FILS_FC_CCFS10x0200){
13296 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ccfs1, tvb, offset, 1, ENC_NA0x00000000);
13297 offset += 1;
13298 }
13299
13300 if(fc & PA_FILS_FC_MD0x2000) {
13301 /*TODO Dissect Mobility Domain */
13302 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_md, tvb, offset, 3, ENC_NA0x00000000);
13303 offset += 3;
13304 }
13305
13306 return offset;
13307}
13308
13309
13310static unsigned
13311add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13312{
13313 switch (tvb_get_uint8(tvb, offset + 1)) {
13314 case SM_ACTION_MEASUREMENT_REQUEST0:
13315 case SM_ACTION_MEASUREMENT_REPORT1:
13316 case SM_ACTION_TPC_REQUEST2:
13317 case SM_ACTION_TPC_REPORT3:
13318 add_ff_category_code(tree, tvb, pinfo, offset);
13319 add_ff_action_code(tree, tvb, pinfo, offset + 1);
13320 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
13321 return 3;
13322 case SM_ACTION_CHAN_SWITCH_ANNC4:
13323 case SM_ACTION_EXT_CHAN_SWITCH_ANNC5:
13324 add_ff_category_code(tree, tvb, pinfo, offset);
13325 add_ff_action_code(tree, tvb, pinfo, offset + 1);
13326 return 2;
13327 default:
13328 add_ff_category_code(tree, tvb, pinfo, offset);
13329 add_ff_action_code(tree, tvb, pinfo, offset + 1);
13330 return 2;
13331 }
13332}
13333
13334static unsigned
13335add_ff_action_qos(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13336{
13337 switch (tvb_get_uint8(tvb, offset + 1)) {
13338 case QOS_ACTION_ADDTS_REQUEST0:
13339 add_ff_category_code(tree, tvb, pinfo, offset);
13340 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13341 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
13342 return 3;
13343 case QOS_ACTION_ADDTS_RESPONSE1:
13344 add_ff_category_code(tree, tvb, pinfo, offset);
13345 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13346 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
13347 add_ff_status_code(tree, tvb, pinfo, offset + 3);
13348 return 5;
13349 case QOS_ACTION_DELTS2:
13350 add_ff_category_code(tree, tvb, pinfo, offset);
13351 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13352 add_ff_qos_ts_info(tree, tvb, pinfo, offset + 2);
13353 add_ff_reason_code(tree, tvb, pinfo, offset + 5);
13354 return 7;
13355 case QOS_ACTION_SCHEDULE3:
13356 add_ff_category_code(tree, tvb, pinfo, offset);
13357 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13358 return 2;
13359 case QOS_ACTION_MAP_CONFIGURE4:
13360 add_ff_category_code(tree, tvb, pinfo, offset);
13361 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13362 return 2;
13363 default:
13364 add_ff_category_code(tree, tvb, pinfo, offset);
13365 return 2;
13366 }
13367}
13368
13369static unsigned
13370add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13371{
13372 switch (tvb_get_uint8(tvb, offset + 1)) {
13373 case DLS_ACTION_REQUEST0:
13374 add_ff_category_code(tree, tvb, pinfo, offset);
13375 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
13376 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
13377 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
13378 add_ff_cap_info(tree, tvb, pinfo, offset + 14);
13379 add_ff_dls_timeout(tree, tvb, pinfo, offset + 16);
13380 return 18;
13381 case DLS_ACTION_RESPONSE1:
13382 add_ff_category_code(tree, tvb, pinfo, offset);
13383 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
13384 add_ff_status_code(tree, tvb, pinfo, offset + 2);
13385 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 4);
13386 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 10);
13387 if (!hf_ieee80211_ff_status_code) {
13388 add_ff_cap_info(tree, tvb, pinfo, offset + 16);
13389 }
13390 return 16;
13391 case DLS_ACTION_TEARDOWN2:
13392 add_ff_category_code(tree, tvb, pinfo, offset);
13393 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
13394 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
13395 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
13396 add_ff_reason_code(tree, tvb, pinfo, offset + 14);
13397 return 16;
13398 default:
13399 add_ff_category_code(tree, tvb, pinfo, offset);
13400 return 2;
13401 }
13402}
13403
13404static unsigned
13405add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13406{
13407 unsigned start = offset;
13408
13409 switch (tvb_get_uint8(tvb, offset + 1)) {
13410 case BA_ADD_BLOCK_ACK_REQUEST0:
13411 case BA_NDP_ADD_BLOCK_ACK_REQUEST128:
13412 case BA_BAT_ADD_BLOCK_ACK_REQUEST132:
13413 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13414 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
13415 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13416 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
13417 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
13418 offset += add_ff_block_ack_ssc(tree, tvb, pinfo, offset);
13419 break;
13420 case BA_ADD_BLOCK_ACK_RESPONSE1:
13421 case BA_NDP_ADD_BLOCK_ACK_RESPONSE129:
13422 case BA_BAT_ADD_BLOCK_ACK_RESPONSE133:
13423 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13424 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
13425 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13426 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13427 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
13428 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
13429 break;
13430 case BA_DELETE_BLOCK_ACK2:
13431 case BA_NDP_DELETE_BLOCK_ACK130:
13432 case BA_BAT_DELETE_BLOCK_ACK134:
13433 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13434 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
13435 offset += add_ff_delba_param_set(tree, tvb, pinfo, offset);
13436 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
13437 break;
13438 }
13439
13440 return offset - start; /* Size of fixed fields */
13441}
13442
13443unsigned
13444add_ff_action_public_fields(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, uint8_t code)
13445{
13446 uint32_t oui;
13447 unsigned type;
13448 unsigned subtype;
13449 uint8_t dialog_token;
13450 uint8_t frag;
13451 bool_Bool more;
13452 tvbuff_t *vendor_tvb;
13453 int dissected;
13454
13455 unsigned start = offset;
13456
13457 switch (code) {
13458 case PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4:
13459 offset += add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
13460 break;
13461 case PA_VENDOR_SPECIFIC9:
13462 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
13463 offset += 3;
13464 switch (oui) {
13465 case OUI_WFA0x506F9A:
13466 subtype = tvb_get_uint8(tvb, offset);
13467 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_subtype, tvb, offset, 1, ENC_NA0x00000000);
13468 offset += 1;
13469 vendor_tvb = tvb_new_subset_remaining(tvb, offset);
13470 dissected = dissector_try_uint_with_data(wifi_alliance_public_action_table, subtype, vendor_tvb, pinfo, tree, false0, NULL((void*)0));
13471 offset += dissected;
13472 break;
13473 default:
13474 /* Don't know how to handle this vendor */
13475 break;
13476 }
13477 break;
13478 case PA_GAS_INITIAL_REQUEST10:
13479 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13480 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
13481 &type, &subtype);
13482 offset += dissect_gas_initial_request(tree, tvb, pinfo, offset, type,
13483 subtype);
13484 break;
13485 case PA_GAS_INITIAL_RESPONSE11:
13486 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13487 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13488 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
13489 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
13490 &type, &subtype);
13491 offset += dissect_gas_initial_response(tree, tvb, pinfo, offset, type,
13492 subtype);
13493 break;
13494 case PA_GAS_COMEBACK_REQUEST12:
13495 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13496 break;
13497 case PA_GAS_COMEBACK_RESPONSE13:
13498 dialog_token = tvb_get_uint8(tvb, offset);
13499 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13500 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13501 frag = tvb_get_uint8(tvb, offset) & 0x7f;
13502 more = (tvb_get_uint8(tvb, offset) & 0x80) != 0;
13503 offset += add_ff_gas_fragment_id(tree, tvb, pinfo, offset);
13504 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
13505 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
13506 &type, &subtype);
13507 offset += dissect_gas_comeback_response(tree, tvb, pinfo, offset, type,
13508 subtype, frag, more, dialog_token);
13509 break;
13510 case PA_TDLS_DISCOVERY_RESPONSE14:
13511 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
13512 col_set_str(pinfo->cinfo, COL_INFO, "TDLS Discovery Response");
13513 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13514 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
13515 break;
13516 case PA_QAB_REQUEST16:
13517 case PA_QAB_RESPONSE17:
13518 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13519 offset += add_ff_req_ap_addr(tree, tvb, pinfo, offset);
13520 offset += add_ff_res_ap_addr(tree, tvb, pinfo, offset);
13521 break;
13522 case PA_FTM_REQUEST32:
13523 col_set_str(pinfo->cinfo, COL_INFO, "FTM Request");
13524 offset += add_ff_ftm_request(tree, tvb, pinfo, offset);
13525 break;
13526 case PA_FTM33:
13527 col_set_str(pinfo->cinfo, COL_INFO, "FTM");
13528 offset += add_ff_ftm(tree, tvb, pinfo, offset);
13529 break;
13530 case PA_FILS_DISCOVERY34:
13531 col_set_str(pinfo->cinfo, COL_INFO, "FILS Discovery");
13532 offset = add_ff_fils_discovery(tree, tvb, pinfo, offset);
13533 break;
13534 case PA_LOCATION_MEASUREMENT_REPORT47:
13535 col_set_str(pinfo->cinfo, COL_INFO, "Location Measurement Report");
13536 offset = add_ff_lmr_report(tree, tvb, pinfo, offset);
13537 break;
13538 }
13539
13540 return offset - start; /* Size of fixed fields */
13541}
13542
13543static unsigned
13544add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13545{
13546 uint8_t code;
13547 unsigned start = offset;
13548 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13549 code = tvb_get_uint8(tvb, offset);
13550 offset += add_ff_pa_action_code(tree, tvb, pinfo, offset);
13551 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
13552 return offset - start;
13553}
13554
13555static unsigned
13556add_ff_action_protected_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13557{
13558 uint8_t code;
13559 unsigned start = offset;
13560 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13561 code = tvb_get_uint8(tvb, offset);
13562 offset += add_ff_ppa_action_code(tree, tvb, pinfo, offset);
13563 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
13564 return offset - start;
13565}
13566
13567static unsigned
13568add_ff_action_radio_measurement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13569{
13570 unsigned start = offset;
13571 uint8_t code;
13572
13573 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13574 code = tvb_get_uint8(tvb, offset);
13575 offset += add_ff_rm_action_code(tree, tvb, pinfo, offset);
13576
13577 switch (code) {
13578 case RM_ACTION_RADIO_MEASUREMENT_REQUEST0:
13579 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13580 offset += add_ff_rm_repetitions(tree, tvb, pinfo, offset);
13581 /* Followed by Measurement Request Elements */
13582 break;
13583 case RM_ACTION_RADIO_MEASUREMENT_REPORT1:
13584 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13585 /* Followed by Measurement Report Elements */
13586 break;
13587 case RM_ACTION_LINK_MEASUREMENT_REQUEST2:
13588 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13589 offset += add_ff_rm_tx_power(tree, tvb, pinfo, offset);
13590 offset += add_ff_rm_max_tx_power(tree, tvb, pinfo, offset);
13591 /* Followed by Optional Subelements */
13592 break;
13593 case RM_ACTION_LINK_MEASUREMENT_REPORT3:
13594 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13595 offset += add_ff_rm_tpc_report(tree, tvb, pinfo, offset);
13596 offset += add_ff_rm_rx_antenna_id(tree, tvb, pinfo, offset);
13597 offset += add_ff_rm_tx_antenna_id(tree, tvb, pinfo, offset);
13598 offset += add_ff_rm_rcpi(tree, tvb, pinfo, offset);
13599 offset += add_ff_rm_rsni(tree, tvb, pinfo, offset);
13600 /* Followed by Optional Subelements */
13601 break;
13602 case RM_ACTION_NEIGHBOR_REPORT_REQUEST4:
13603 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13604 /* Followed by Optional Subelements */
13605 break;
13606 case RM_ACTION_NEIGHBOR_REPORT_RESPONSE5:
13607 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13608 /* Followed by Neighbor Report Elements */
13609 break;
13610 }
13611
13612 return offset - start; /* Size of fixed fields */
13613}
13614
13615static unsigned
13616add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13617{
13618 unsigned start = offset;
13619 uint8_t code;
13620
13621 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13622 code = tvb_get_uint8(tvb, offset);
13623 offset += add_ff_ft_action_code(tree, tvb, pinfo, offset);
13624
13625 switch (code) {
13626 case FT_ACTION_REQUEST1:
13627 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13628 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13629 /* Followed by FT Request frame body (IEs) */
13630 break;
13631 case FT_ACTION_RESPONSE2:
13632 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13633 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13634 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13635 /* Followed by FT Response frame body (IEs) */
13636 break;
13637 case FT_ACTION_CONFIRM3:
13638 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13639 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13640 /* Followed by FT Confirm frame body (IEs) */
13641 break;
13642 case FT_ACTION_ACK4:
13643 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13644 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13645 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13646 /* Followed by FT Ack frame body (IEs) */
13647 break;
13648 }
13649
13650 return offset - start; /* Size of fixed fields */
13651}
13652
13653static unsigned
13654add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13655{
13656 unsigned start = offset;
13657 uint8_t code;
13658
13659 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13660 code = tvb_get_uint8(tvb, offset);
13661 offset += add_ff_sa_query_action_code(tree, tvb, pinfo, offset);
13662
13663 switch (code) {
13664 case SA_QUERY_REQUEST0:
13665 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
13666 break;
13667 case SA_QUERY_RESPONSE1:
13668 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
13669 break;
13670 }
13671
13672 return offset - start; /* Size of fixed fields */
13673}
13674
13675static unsigned
13676add_ff_action_mesh(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13677{
13678 unsigned length;
13679
13680 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13681 offset += add_ff_mesh_action(tree, tvb, pinfo, offset);
13682 /* The only fixed fields are the category and mesh action. The rest are IEs.
13683 */
13684 length = 2;
13685 if (tvb_get_uint8(tvb, 1) == MESH_ACTION_TBTT_ADJ_RESPONSE10) {
13686 /* ..except for the TBTT Adjustment Response, which has a status code field
13687 */
13688 length += add_ff_status_code(tree, tvb, pinfo, offset);
13689 }
13690 return length;
13691}
13692
13693static unsigned
13694add_ff_action_multihop(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13695{
13696 unsigned start = offset;
13697
13698 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13699 offset += add_ff_multihop_action(tree, tvb, pinfo, offset);
13700 offset += add_ff_mesh_control(tree, tvb, pinfo, offset);
13701 return offset - start;
13702}
13703
13704static unsigned
13705add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
13706 association_sanity_check_t *association_sanity_check)
13707{
13708 unsigned start = offset;
13709 uint8_t self_protected_action = tvb_get_uint8(tvb, start + 1);
13710
13711 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13712 offset += add_ff_selfprot_action(tree, tvb, pinfo, offset);
13713
13714 switch (self_protected_action) {
13715 case SELFPROT_ACTION_MESH_PEERING_OPEN1:
13716 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
13717 if (association_sanity_check)
13718 association_sanity_check->ampe_frame = self_protected_action;
13719 break;
13720 case SELFPROT_ACTION_MESH_PEERING_CONFIRM2:
13721 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
13722 offset += add_ff_assoc_id(tree, tvb, pinfo, offset);
13723 if (association_sanity_check)
13724 association_sanity_check->ampe_frame = self_protected_action;
13725 break;
13726 case SELFPROT_ACTION_MESH_PEERING_CLOSE3:
13727 if (association_sanity_check)
13728 association_sanity_check->ampe_frame = self_protected_action;
13729 break;
13730 }
13731
13732 return offset - start;
13733}
13734
13735static unsigned
13736add_ff_vht_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13737{
13738 proto_tree_add_item(tree, hf_ieee80211_ff_vht_action, tvb, offset, 1,
13739 ENC_LITTLE_ENDIAN0x80000000);
13740 return 1;
13741}
13742
13743static unsigned
13744add_ff_s1g_timestamp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13745{
13746 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_timestamp, tvb, offset,
13747 4, ENC_LITTLE_ENDIAN0x80000000);
13748 return 4;
13749}
13750
13751static unsigned
13752add_ff_change_sequence(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13753{
13754 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_change_sequence, tvb, offset,
13755 1, ENC_NA0x00000000);
13756 return 1;
13757}
13758
13759static unsigned
13760add_ff_next_tbtt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13761{
13762 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_next_tbtt, tvb, offset,
13763 3, ENC_LITTLE_ENDIAN0x80000000);
13764 return 3;
13765}
13766
13767static unsigned
13768add_ff_compressed_ssid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13769{
13770 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_compressed_ssid, tvb, offset,
13771 4, ENC_LITTLE_ENDIAN0x80000000);
13772 return 4;
13773}
13774
13775/* This should not be S1G specific because 802.11-2016 defines it as well. */
13776static unsigned
13777add_ff_access_network_options(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13778{
13779 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_access_network_options, tvb,
13780 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13781 return 1;
13782}
13783
13784static unsigned
13785add_ff_s1g_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13786{
13787 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_action, tvb, offset, 1,
13788 ENC_LITTLE_ENDIAN0x80000000);
13789 return 1;
13790}
13791
13792static unsigned
13793add_ff_prot_s1g_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13794{
13795 proto_tree_add_item(tree, hf_ieee80211_ff_prot_s1g_action, tvb, offset, 1,
13796 ENC_LITTLE_ENDIAN0x80000000);
13797 return 1;
13798}
13799
13800static conversation_t *find_or_create_wlan_conversation(packet_info *pinfo)
13801{
13802 /* HACK to avoid collision with conversation in EAP dissector */
13803 pinfo->srcport = GPOINTER_TO_UINT(((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, ASSOC_COUNTER_KEY)))
13804 p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, ASSOC_COUNTER_KEY)))
;
13805 pinfo->destport = pinfo->srcport;
13806 return find_or_create_conversation(pinfo);
13807}
13808
13809static ieee80211_conversation_data_t* get_or_create_conversation_data(conversation_t *conversation) {
13810 ieee80211_conversation_data_t *conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
13811 if (!conversation_data) {
13812 conversation_data = wmem_new(wmem_file_scope(), ieee80211_conversation_data_t)((ieee80211_conversation_data_t*)wmem_alloc((wmem_file_scope(
)), sizeof(ieee80211_conversation_data_t)))
;
13813 conversation_add_proto_data(conversation, proto_wlan, conversation_data);
13814 memset(conversation_data, 0, sizeof(ieee80211_conversation_data_t));
13815 }
13816 return conversation_data;
13817}
13818
13819static unsigned get_group_element_len(unsigned group) {
13820 switch (group) {
13821 /* Diffie-Hellman groups */
13822 case 1:
13823 return 96;
13824 case 2:
13825 case 22:
13826 return 128;
13827 case 5:
13828 return 192;
13829 case 14:
13830 case 23:
13831 case 24:
13832 return 256;
13833 case 15:
13834 return 384;
13835 case 16:
13836 return 512;
13837 case 17:
13838 return 768;
13839 case 18:
13840 return 1024;
13841 /* ECC groups */
13842 case 19:
13843 case 28:
13844 return 64;
13845 case 20:
13846 case 29:
13847 return 96;
13848 case 21:
13849 return 132;
13850 case 25:
13851 return 48;
13852 case 26:
13853 return 56;
13854 case 30:
13855 return 128;
13856 default:
13857 return 0;
13858 }
13859}
13860
13861static unsigned get_scalar_len(unsigned group) {
13862 switch (group) {
13863 /* Diffie-Hellman groups */
13864 case 1:
13865 return 96;
13866 case 2:
13867 return 128;
13868 case 5:
13869 return 192;
13870 case 14:
13871 return 256;
13872 case 15:
13873 return 384;
13874 case 16:
13875 return 512;
13876 case 17:
13877 return 768;
13878 case 18:
13879 return 1024;
13880 case 22:
13881 return 20;
13882 case 23:
13883 return 28;
13884 case 24:
13885 return 32;
13886 /* ECC groups */
13887 case 19:
13888 case 28:
13889 return 32;
13890 case 20:
13891 case 29:
13892 return 48;
13893 case 21:
13894 return 66;
13895 case 25:
13896 return 24;
13897 case 26:
13898 return 28;
13899 case 30:
13900 return 64;
13901 default:
13902 return 0;
13903 }
13904}
13905
13906static unsigned
13907find_fixed_field_len(tvbuff_t *tvb, unsigned offset)
13908{
13909 unsigned start_offset = offset;
13910 unsigned len = tvb_reported_length(tvb);
13911
13912 if (offset >= len) {
13913 return 0;
13914 }
13915
13916 while (offset < len) {
13917 if (tvb_get_uint8(tvb, offset) == 0xFF) {
13918 /*
13919 * Check if we have a len followed by either ETAG_REJECTED_GROUPS
13920 * or ETAG_PASSWORD_IDENTIFIER or ETAG_ANTI_CLOGGING_TOKEN
13921 */
13922 /* The length of SAE Confirm or Scalar Fixed parameter >= 32 */
13923 if ((offset < len - 3) && (offset - start_offset >= 32)) {
13924 uint8_t etag_len = tvb_get_uint8(tvb, offset + 1);
13925 uint8_t check_byte = tvb_get_uint8(tvb, offset + 2);
13926 if (check_byte == ETAG_REJECTED_GROUPS92 ||
13927 check_byte == ETAG_PASSWORD_IDENTIFIER33 ||
13928 check_byte == ETAG_ANTI_CLOGGING_TOKEN93 ||
13929 check_byte == ETAG_MULTI_LINK107 ||
13930 check_byte == ETAG_AKM_SUITE_SELECTOR114) {
13931 /* Add length check to avoid false detection */
13932 if (offset + etag_len + 2 <= len) {
13933 break;
13934 }
13935 }
13936 }
13937 }
13938 offset++;
13939 }
13940
13941 return offset - start_offset;
13942}
13943
13944static const value_string ff_sae_message_type_vals[] = {
13945 {1, "Commit" },
13946 {2, "Confirm" },
13947 {0, NULL((void*)0) }
13948};
13949
13950/*
13951 * We have to deal with the issue that an anti-clogging token may be in this
13952 * thing.
13953 */
13954static unsigned
13955add_ff_auth_sae(proto_tree *tree, tvbuff_t *tvb,
13956 packet_info *pinfo _U___attribute__((unused)), unsigned offset)
13957{
13958 unsigned alg, seq, status_code, len;
13959 alg = tvb_get_letohs(tvb, 0);
13960
13961 if (alg != AUTH_ALG_SAE3)
13962 return offset;
13963
13964 seq = tvb_get_letohs(tvb, 2);
13965 status_code = tvb_get_letohs(tvb, 4);
13966
13967 proto_tree_add_uint(tree, hf_ieee80211_ff_sae_message_type, tvb, 2, 2, seq);
13968
13969 if (seq == 1)
13970 {
13971 uint16_t group;
13972 unsigned sc_len, elt_len;
13973 int is_ap = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool,((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
13974 pinfo, proto_wlan, IS_AP_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
;
13975
13976 /*
13977 * Order is: Status code,
13978 * Finite Cyclic Group,
13979 * Anti-Clogging Token in some cases
13980 * Send-Confirm in some cases
13981 * Scalar in some cases
13982 * FFE in some cases
13983 * Confirm in some cases
13984 * Challenge Text in some cases
13985 * RSNE in some cases.
13986 * MDE in some cases.
13987 * Fast BSS TRansition ... in some cases.
13988 */
13989
13990 /* 76: Authentication is rejected because an Anti-Clogging Token is required (cf ieee80211_status_code) */
13991 /* These are present if status code is 0, 76, 77 or 126 */
13992 if (status_code == 0 || status_code == 76 || status_code == 77 ||
13993 status_code == 126)
13994 {
13995 group = tvb_get_letohs(tvb, offset);
13996 proto_tree_add_item(tree, hf_ieee80211_ff_finite_cyclic_group, tvb,
13997 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13998 offset += 2;
13999
14000
14001 /*
14002 * Now, get the fixed field length remaining. It will be divided up into
14003 * Anti-Clogging token, Scalar, FFE and some IEs.
14004 */
14005 len = find_fixed_field_len(tvb, offset);
14006 sc_len = get_scalar_len(group);
14007 elt_len = get_group_element_len(group);
14008
14009 /*
14010 * The first conditional captures the case where we have an error and
14011 * an anti-clogging token with Scalar Field and FFE.
14012 * The second handles the case where we have an error with only an
14013 * anti-clogging token.
14014 * The third conditional below is a way to avoid keeping state about
14015 * what was in a previous response!
14016 */
14017 if (((status_code == 76 || status_code == 126) &&
14018 ((len > (sc_len + elt_len)))) ||
14019 ((status_code == 76) && (len > 0) && (len < (sc_len + elt_len))) ||
14020 ((status_code == 0) && (len > (sc_len + elt_len)))) {
14021 unsigned anti_clogging_len;
14022 /*
14023 * Handle the anti-clogging field. There is an anti-clogging token
14024 * before the other two.
14025 */
14026 if (len > (sc_len + elt_len))
14027 anti_clogging_len = len - (sc_len + elt_len);
14028 else
14029 anti_clogging_len = len;
14030
14031 proto_tree_add_item(tree, hf_ieee80211_ff_sae_anti_clogging_token, tvb,
14032 offset, anti_clogging_len, ENC_NA0x00000000);
14033 offset += anti_clogging_len;
14034 }
14035
14036 if (sc_len == 0) {
14037 /* assume no anti-clogging token */
14038 if (!(len % 3))
14039 {
14040 sc_len = len / 3;
14041 }
14042 else
14043 {
14044 sc_len = len / 2;
14045 }
14046 elt_len = len - sc_len;
14047 }
14048
14049 /* Only present if status = 0 or 126 */
14050 if (status_code == 0 || status_code == 126) {
14051 proto_tree_add_item(tree, hf_ieee80211_ff_scalar, tvb, offset,
14052 sc_len, ENC_NA0x00000000);
14053 offset += sc_len;
14054
14055 proto_tree_add_item(tree, hf_ieee80211_ff_finite_field_element, tvb,
14056 offset, elt_len, ENC_NA0x00000000);
14057 offset += elt_len;
14058
14059 /* Create conversation when AP accept SAE commit */
14060 if (is_ap) {
14061 conversation_t *conversation;
14062 ieee80211_conversation_data_t *conversation_data;
14063 if (!pinfo->fd->visited) {
14064 association_counter++;
14065 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
14066 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
14067 assoc_counter_in_auth = 1;
14068 }
14069 conversation = find_or_create_wlan_conversation(pinfo);
14070 conversation_data = get_or_create_conversation_data(conversation);
14071 conversation_data->sae_group = group;
14072 }
14073 }
14074 }
14075 }
14076 else if ((seq == 2) && (status_code == 0))
14077 {
14078 proto_tree_add_item(tree, hf_ieee80211_ff_send_confirm, tvb, 6, 2,
14079 ENC_LITTLE_ENDIAN0x80000000);
14080 offset += 2;
14081
14082 /* Check if there are additional elements */
14083 len = find_fixed_field_len(tvb, offset);
14084 proto_tree_add_item(tree, hf_ieee80211_ff_confirm, tvb, offset, len,
14085 ENC_NA0x00000000);
14086 offset += len;
14087 }
14088
14089 return offset;
14090}
14091
14092static unsigned
14093add_ff_auth_fils(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
14094 unsigned offset)
14095{
14096 unsigned alg, seq, status_code;
14097 alg = tvb_get_letohs(tvb, 0);
14098
14099 if ((alg != AUTH_ALG_FILS_SK_WITH_PFS5) && (alg != AUTH_ALG_FILS_PK6))
14100 return offset;
14101
14102 seq = tvb_get_letohs(tvb, 2);
14103 status_code = tvb_get_letohs(tvb, 4);
14104
14105 if ((seq == 1) || (seq == 2 && status_code == 0)) {
14106 unsigned group = tvb_get_letohs(tvb, 6);
14107 unsigned elt_len;
14108 proto_tree_add_item(tree, hf_ieee80211_ff_finite_cyclic_group, tvb, 6, 2,
14109 ENC_LITTLE_ENDIAN0x80000000);
14110 offset = 8;
14111 elt_len = get_group_element_len(group);
14112
14113 proto_tree_add_item(tree, hf_ieee80211_ff_finite_field_element, tvb, offset,
14114 elt_len, ENC_NA0x00000000);
14115
14116 offset += elt_len;
14117 }
14118
14119 /* What about the other FILS case? */
14120
14121 return offset;
14122}
14123
14124/*
14125 * We handle different elements depending on whether the sequence number is
14126 * 1, 2 or 3.
14127 */
14128typedef struct ieee80211_pasn_data {
14129 unsigned pasn_seq;
14130 unsigned pasn_status_code;
14131} ieee80211_pasn_data_t;
14132
14133static ieee80211_pasn_data_t*
14134create_pasn_data(packet_info *pinfo, unsigned seq, unsigned status)
14135{
14136 ieee80211_pasn_data_t *pasn_data = NULL((void*)0);
14137
14138 pasn_data = wmem_new(pinfo->pool, ieee80211_pasn_data_t)((ieee80211_pasn_data_t*)wmem_alloc((pinfo->pool), sizeof(
ieee80211_pasn_data_t)))
;
14139
14140 if(pasn_data) {
14141 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, PASN_DATA_KEY, pasn_data);
14142 pasn_data->pasn_seq = seq;
14143 pasn_data->pasn_status_code = status;
14144 }
14145
14146 return pasn_data;
14147}
14148
14149static unsigned
14150add_ff_auth_pasn(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
14151 unsigned offset)
14152{
14153 unsigned seq, status_code;
14154 ieee80211_pasn_data_t *pasn_data = NULL((void*)0);
14155
14156 seq = tvb_get_letohs(tvb, 2);
14157 status_code = tvb_get_letohs(tvb, 4);
14158
14159 pasn_data = create_pasn_data(pinfo, seq, status_code);
14160 if (!pasn_data) {
14161 /* Leave it undissected if we cannot get memory. */
14162 return offset + tvb_captured_length_remaining(tvb, offset);
14163 }
14164
14165 if (seq == 1) {
14166 /*
14167 * Contains RSN Info,
14168 * PASN field,
14169 * Wrapped Data may be present if the PASN element says so,
14170 * RSNXE may be present
14171 * Timeout Interval element may be present
14172 * Fragment element may be present if it was fragmented.
14173 */
14174 while (tvb_captured_length_remaining(tvb, offset)) {
14175 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
14176 }
14177 } else if (seq == 2) {
14178 /* This test might not be needed */
14179 if (status_code != 0) {
14180 offset += tvb_captured_length_remaining(tvb, offset);
14181 return offset;
14182 }
14183 /*
14184 * RSN element is present.
14185 * PASN element is present if status == 0.
14186 * Wrapped Data element present if the PASN element says so.
14187 * ...
14188 */
14189 while (tvb_captured_length_remaining(tvb, offset)) {
14190 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
14191 }
14192 } else if (seq == 3) {
14193 /*
14194 * Contains PASN element if status == 0
14195 * Contains Wrapped Data element if PASN element says so and status is 0.
14196 * Contains MC element
14197 * May contain fragment elements.
14198 */
14199 while (tvb_captured_length_remaining(tvb, offset)) {
14200 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
14201 }
14202 }
14203
14204 offset += tvb_captured_length_remaining(tvb, offset);
14205
14206 return offset;
14207}
14208
14209/*
14210 * Handle an Auth Frame. We need to be able to call this from several places.
14211 *
14212 * We should also handle the different auth types more correctly.
14213 */
14214static int
14215dissect_auth_frame(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb)
14216{
14217 int offset = 0;
14218 uint16_t auth_algorithm = tvb_get_letohs(tvb, offset);
14219
14220 add_ff_auth_alg(tree, tvb, pinfo, offset);
14221 offset += 2;
14222
14223 add_ff_auth_trans_seq(tree, tvb, pinfo, offset);
14224 offset += 2;
14225
14226 add_ff_status_code(tree, tvb, pinfo, offset);
14227 offset += 2;
14228
14229 switch (auth_algorithm) {
14230 case AUTH_ALG_SAE3:
14231 offset = add_ff_auth_sae(tree, tvb, pinfo, offset);
14232 break;
14233 case AUTH_ALG_FILS_PK6:
14234 case AUTH_ALG_FILS_SK_WITH_PFS5:
14235 offset = add_ff_auth_fils(tree, tvb, pinfo, offset);
14236 break;
14237 case AUTH_ALG_PASN7:
14238 offset = add_ff_auth_pasn(tree, tvb, pinfo, offset);
14239 break;
14240 }
14241
14242 return offset;
14243}
14244
14245/*
14246 * If it is PASN wrapped data, handle it correctly, else defer to fils
14247 * wrapped data.
14248 */
14249static void
14250dissect_wrapped_data(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb,
14251 int offset, uint8_t ext_tag_len _U___attribute__((unused)))
14252{
14253 ieee80211_pasn_data_t *pasn_data =
14254 (ieee80211_pasn_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_wlan,
14255 PASN_DATA_KEY);
14256
14257 if (pasn_data) {
14258 proto_tree *auth_tree = NULL((void*)0);
14259 proto_item *ai = NULL((void*)0);
14260 uint16_t frame_len = 0;
14261 tvbuff_t *new_tvb = NULL((void*)0);
14262
14263 switch (pasn_data->pasn_seq) {
14264 case 1:
14265 auth_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
14266 ett_pasn_auth_frame, &ai,
14267 "Authentication Frame");
14268 new_tvb = tvb_new_subset_remaining(tvb, offset);
14269 offset = dissect_auth_frame(auth_tree, pinfo, new_tvb);
14270 proto_item_set_len(ai, offset); /* This is correct */
14271 break;
14272
14273 case 2:
14274 /* This has two auth frames in it. */
14275 frame_len = tvb_get_letohs(tvb, offset);
14276 proto_tree_add_item(tree, hf_ieee80211_pasn_auth1_frame_len, tvb, offset,
14277 2, ENC_LITTLE_ENDIAN0x80000000);
14278 offset += 2;
14279 auth_tree = proto_tree_add_subtree(tree, tvb, offset, frame_len,
14280 ett_pasn_auth_frame, NULL((void*)0),
14281 "Authentication Frame 1");
14282 new_tvb = tvb_new_subset_length(tvb, offset, frame_len);
14283 offset += dissect_auth_frame(auth_tree, pinfo, new_tvb);
14284
14285 /* Second frame */
14286 frame_len = tvb_get_letohs(tvb, offset);
14287 proto_tree_add_item(tree, hf_ieee80211_pasn_auth2_frame_len, tvb, offset,
14288 2, ENC_LITTLE_ENDIAN0x80000000);
14289 offset += 2;
14290 auth_tree = proto_tree_add_subtree(tree, tvb, offset, frame_len,
14291 ett_pasn_auth_frame, NULL((void*)0),
14292 "Authentication Frame 2");
14293 new_tvb = tvb_new_subset_length(tvb, offset, frame_len);
14294 dissect_auth_frame(auth_tree, pinfo, new_tvb);
14295 break;
14296
14297 case 3:
14298 auth_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
14299 ett_pasn_auth_frame, &ai,
14300 "Authentication Frame");
14301 new_tvb = tvb_new_subset_remaining(tvb, offset);
14302 offset = dissect_auth_frame(auth_tree, pinfo, new_tvb);
14303 proto_item_set_len(ai, offset);
14304 break;
14305 }
14306 }
14307}
14308
14309#define FILS_REQ_PARAMS_FILS_CRITERIA0x01 0x01
14310#define FILS_REQ_PARAMS_MAX_DELAY_LIMIT0x02 0x02
14311#define FILS_REQ_PARAMS_MINIMUM_DATA_RATE0x04 0x04
14312#define FILS_REQ_PARAMS_RCPI_LIMIT0x08 0x08
14313#define FILS_REQ_PARAMS_OUI_RESPONSE_CRITERIA0x10 0x10
14314#define FILS_REQ_PARAMS_RESERVED0xE0 0xE0
14315
14316#define FILS_REQ_PARAMS_FILS_CRITERIA_BSS_DELAY0x07 0x07
14317#define FILS_REQ_PARAMS_FILS_CRITERIA_PHY_SUPPORT0x38 0x38
14318#define FILS_REQ_PARAMS_FILS_CRITERIA_RESERVED0xC0 0xC0
14319
14320static void
14321dissect_fils_req_params(proto_tree *tree, packet_info *pinfo _U___attribute__((unused)), tvbuff_t *tvb,
14322 int offset, uint8_t ext_tag_len _U___attribute__((unused)))
14323{
14324 uint8_t bitmap;
14325
14326 static int * const ieee80211_fils_req_params_paramter_control_bitmap[] = {
14327 &hf_ieee80211_fils_req_params_fils_criteria_present,
14328 &hf_ieee80211_fils_req_params_max_delay_limit_present,
14329 &hf_ieee80211_fils_req_params_minimum_data_rate_present,
14330 &hf_ieee80211_fils_req_params_rcpi_limit_present,
14331 &hf_ieee80211_fils_req_params_oui_response_criteria_present,
14332 &hf_ieee80211_fils_req_params_reserved,
14333 NULL((void*)0)
14334 };
14335
14336 static int * const ieee80211_fils_req_params_fils_criteria[] = {
14337 &hf_ieee80211_fils_req_params_fils_criteria_bss_delay,
14338 &hf_ieee80211_fils_req_params_fils_criteria_phy_support,
14339 &hf_ieee80211_fils_req_params_fils_criteria_reserved,
14340 NULL((void*)0)
14341 };
14342
14343 bitmap = tvb_get_uint8(tvb, offset);
14344 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_fils_req_params_parameter_control_bitmap,
14345 ett_ff_fils_req_params, ieee80211_fils_req_params_paramter_control_bitmap, ENC_LITTLE_ENDIAN0x80000000);
14346 offset += 1;
14347
14348 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_max_channel_time,
14349 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14350 offset +=1;
14351
14352 if(bitmap & FILS_REQ_PARAMS_FILS_CRITERIA0x01) {
14353 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_fils_req_params_fils_criteria,
14354 ett_ff_fils_req_params_fils_criteria, ieee80211_fils_req_params_fils_criteria, ENC_LITTLE_ENDIAN0x80000000);
14355 offset += 1;
14356 }
14357
14358 if(bitmap & FILS_REQ_PARAMS_MAX_DELAY_LIMIT0x02) {
14359 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_max_delay_limit,
14360 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14361 offset += 1;
14362 }
14363
14364 if(bitmap & FILS_REQ_PARAMS_MINIMUM_DATA_RATE0x04) {
14365 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_minimum_data_rate,
14366 tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
14367 offset += 3;
14368 }
14369
14370 if(bitmap & FILS_REQ_PARAMS_RCPI_LIMIT0x08) {
14371 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_rcpi_limit,
14372 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14373 offset += 1;
14374 }
14375
14376 if(bitmap & FILS_REQ_PARAMS_OUI_RESPONSE_CRITERIA0x10) {
14377 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_oui_response_criteria,
14378 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14379 //offset += 2;
14380 }
14381
14382}
14383
14384static unsigned
14385wnm_bss_trans_mgmt_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14386{
14387 int start = offset;
14388 int left;
14389 int tmp_sublen;
14390 const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52 };
14391
14392
14393 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14394
14395 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_query_reason, tvb, offset, 1,
14396 ENC_NA0x00000000);
14397 offset += 1;
14398
14399 left = tvb_reported_length_remaining(tvb, offset);
14400 if (left > 0) {
14401 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
14402 tvb, offset, left, ENC_NA0x00000000);
14403
14404 while (left > 0){
14405 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
14406 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
14407 break;
14408 }
14409 left -= (tmp_sublen + 2);
14410 offset += (tmp_sublen + 2);
14411 }
14412 }
14413
14414 return offset - start;
14415}
14416
14417
14418static unsigned
14419wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14420{
14421 int start = offset;
14422 uint8_t mode;
14423 int left = tvb_reported_length_remaining(tvb, offset);
14424 int tmp_sublen;
14425 const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52, TAG_VENDOR_SPECIFIC_IE221};
14426
14427 static int * const ieee80211_ff_request_flags[] = {
14428 &hf_ieee80211_ff_request_mode_pref_cand,
14429 &hf_ieee80211_ff_request_mode_abridged,
14430 &hf_ieee80211_ff_request_mode_disassoc_imminent,
14431 &hf_ieee80211_ff_request_mode_bss_term_included,
14432 &hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
14433 &hf_ieee80211_ff_request_mode_link_removal_imminent,
14434 &hf_ieee80211_ff_request_mode_reserved,
14435 NULL((void*)0)
14436 };
14437
14438 if (left < 5) {
14439 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
14440 return offset - start;
14441 }
14442
14443 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14444
14445 mode = tvb_get_uint8(tvb, offset);
14446 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_ff_request_flags, ENC_LITTLE_ENDIAN0x80000000);
14447 offset += 1;
14448
14449 proto_tree_add_item(tree, hf_ieee80211_ff_disassoc_timer, tvb, offset, 2,
14450 ENC_LITTLE_ENDIAN0x80000000);
14451 offset += 2;
14452
14453 proto_tree_add_item(tree, hf_ieee80211_ff_validity_interval, tvb, offset, 1,
14454 ENC_LITTLE_ENDIAN0x80000000);
14455 offset += 1;
14456 left -= 5;
14457
14458 if (mode & 0x08) {
14459 proto_item *item;
14460 proto_tree *sub_tree;
14461 uint8_t sub_id, sub_len;
14462
14463 // BSS termination Duration sub element is the same as the neighbor report sub element
14464 if (left < 12) {
14465 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
14466 return offset - start;
14467 }
14468
14469 sub_tree = proto_tree_add_subtree(tree, tvb, offset, 12, ett_tag_neighbor_report_subelement_tree,
14470 NULL((void*)0), "BSS Termination Duration");
14471
14472 sub_id = tvb_get_uint8(tvb, offset);
14473 item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_id,
14474 tvb, offset, 1, ENC_NA0x00000000);
14475 offset += 1;
14476 if (sub_id != NR_SUB_ID_BSS_TER_DUR4) {
14477 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
14478 "Incorrect BSS Termination Duration subelement ID");
14479 }
14480
14481 sub_len = tvb_get_uint8(tvb, offset);
14482 item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_length,
14483 tvb, offset, 1, ENC_NA0x00000000);
14484 offset += 1;
14485 if (sub_len != 10) {
14486 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
14487 "Incorrect BSS Termination Duration subelement length");
14488 }
14489
14490 proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf,
14491 tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
14492 offset += 8;
14493 proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_dur,
14494 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14495 offset += 2;
14496 left -= 12;
14497 }
14498
14499 if (mode & 0x10) {
14500 uint8_t url_len;
14501
14502 url_len = tvb_get_uint8(tvb, offset);
14503 if (left < url_len) {
14504 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
14505 return offset - start;
14506 }
14507
14508 proto_tree_add_item(tree, hf_ieee80211_ff_url_len, tvb, offset, 1,
14509 ENC_LITTLE_ENDIAN0x80000000);
14510 offset += 1;
14511 proto_tree_add_item(tree, hf_ieee80211_ff_url, tvb, offset, url_len,
14512 ENC_ASCII0x00000000);
14513 offset += url_len;
14514 left -= url_len + 1;
14515 }
14516
14517 if (left > 0) {
14518 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
14519 tvb, offset, left, ENC_NA0x00000000);
14520
14521 while (left > 0){
14522 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
14523 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
14524 break;
14525 }
14526 left -= (tmp_sublen + 2);
14527 offset += (tmp_sublen + 2);
14528 }
14529 }
14530
14531 return offset - start;
14532}
14533
14534
14535static unsigned
14536wnm_bss_trans_mgmt_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14537{
14538 int start = offset;
14539 uint8_t code;
14540 int left;
14541 int tmp_sublen;
14542 const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52, TAG_VENDOR_SPECIFIC_IE221 };
14543
14544 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14545 code = tvb_get_uint8(tvb, offset);
14546 offset += add_ff_bss_transition_status_code(tree, tvb, pinfo, offset);
14547 offset += add_ff_bss_termination_delay(tree, tvb, pinfo, offset);
14548 if (!code) {
14549 proto_tree_add_item(tree, hf_ieee80211_ff_target_bss,
14550 tvb, offset, 6, ENC_NA0x00000000);
14551 offset += 6;
14552 }
14553 left = tvb_reported_length_remaining(tvb, offset);
14554 if (left > 0) {
14555 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
14556 tvb, offset, left, ENC_NA0x00000000);
14557 while (left > 0){
14558 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
14559 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
14560 break;
14561 }
14562 left -= (tmp_sublen + 2);
14563 offset += (tmp_sublen + 2);
14564 }
14565 }
14566
14567 return offset - start;
14568}
14569
14570static unsigned
14571wnm_sleep_mode_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14572{
14573 int start = offset;
14574 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14575 return offset - start;
14576}
14577
14578static unsigned
14579wnm_sleep_mode_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14580{
14581 int start = offset;
14582 uint16_t key_data_len;
14583 int left;
14584
14585 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14586 key_data_len = tvb_get_letohs(tvb, offset);
14587 offset += add_ff_key_data_length(tree, tvb, pinfo, offset);
14588 left = tvb_reported_length_remaining(tvb, offset);
14589 if (left < key_data_len) {
14590 expert_add_info(pinfo, tree, &ei_ieee80211_tag_wnm_sleep_mode_no_key_data);
14591 return offset - start;
14592 }
14593 proto_tree_add_item(tree, hf_ieee80211_ff_key_data, tvb, offset,
14594 key_data_len, ENC_NA0x00000000);
14595 offset += key_data_len;
14596 return offset - start;
14597}
14598
14599static unsigned
14600wnm_tfs_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14601{
14602 int start = offset;
14603 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14604 return offset - start;
14605}
14606
14607static unsigned
14608wnm_tfs_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14609{
14610 int start = offset;
14611 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14612 return offset - start;
14613}
14614
14615#define AP_DESCRIPTOR0 0
14616#define FIRMWARE_VERSION_CURRENT1 1
14617#define FIRMWARE_VERSION_NEW2 2
14618
14619static unsigned
14620dissect_wnm_subelements(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
14621 int offset) {
14622 unsigned sub_elt_id = tvb_get_uint8(tvb, offset);
14623 unsigned sub_elt_len = tvb_get_uint8(tvb, offset + 1);
14624
14625 proto_tree_add_item(tree, hf_ieee80211_wnm_sub_elt_id, tvb, offset, 1, ENC_NA0x00000000);
14626 offset++;
14627
14628 proto_tree_add_item(tree, hf_ieee80211_wnm_sub_elt_len, tvb, offset, 1, ENC_NA0x00000000);
14629 offset++;
14630
14631 switch (sub_elt_id) {
14632 case AP_DESCRIPTOR0:
14633
14634 break;
14635
14636 case FIRMWARE_VERSION_CURRENT1:
14637
14638 break;
14639
14640 case FIRMWARE_VERSION_NEW2:
14641
14642 break;
14643 }
14644
14645 offset += sub_elt_len;
14646 return offset;
14647}
14648
14649static unsigned
14650wnm_channel_usage_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14651{
14652 int start = offset;
14653
14654 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14655
14656 return offset - start;
14657}
14658
14659static unsigned
14660wnm_channel_usage_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14661{
14662 int start = offset, i;
14663 uint8_t id, len;
14664 proto_tree *subtree;
14665
14666 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14667
14668 /* Parse multiple chan usage elements */
14669 id = tvb_get_uint8(tvb, offset);
14670 while (id == TAG_CHANNEL_USAGE97){
14671 len = tvb_get_uint8(tvb, offset + 1);
14672 subtree = proto_tree_add_subtree(tree, tvb, offset, len + 2,
14673 ett_chan_usage,
14674 NULL((void*)0), "Channel Usage");
14675 proto_tree_add_item(subtree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_NA0x00000000);
14676 offset += 1;
14677 proto_tree_add_item(subtree, hf_ieee80211_tag_length, tvb, offset, 1, ENC_NA0x00000000);
14678 offset += 1;
14679 proto_tree_add_item(subtree, hf_ieee80211_tag_channel_usage_mode, tvb, offset, 1, ENC_NA0x00000000);
14680 offset += 1;
14681 len -= 1;
14682
14683 for (i = 0; i < (len / 2); i++) {
14684 offset += add_ff_operating_class(subtree, tvb, pinfo, offset);
14685 offset += add_ff_channel(subtree, tvb, pinfo, offset);
14686 }
14687 id = tvb_get_uint8(tvb, offset);
14688 }
14689 offset += add_ff_country_str(tree, tvb, pinfo, offset);
14690
14691 return offset - start;
14692}
14693
14694static unsigned
14695wnm_notification_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14696{
14697 int start = offset;
14698 int len = 0;
14699 uint8_t wnm_type = 0;
14700 uint8_t wnm_sub_elt = 0;
14701
14702 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14703 wnm_type = tvb_get_uint8(tvb, offset);
14704 offset += add_ff_wnm_notification_type(tree, tvb, pinfo, offset);
14705 len = tvb_reported_length_remaining(tvb, offset);
14706
14707 if (wnm_type == 0) {
14708 int offset_end = offset + len;
14709 while (offset < offset_end) {
14710 int start_offset = offset;
14711 proto_tree *wnm_list = NULL((void*)0);
14712 proto_item *wnm_item = NULL((void*)0);
14713 wnm_list = proto_tree_add_subtree_format(tree, tvb, offset, -1,
14714 ett_wnm_notif_subelt,
14715 &wnm_item, "WNM Subelement %d", wnm_sub_elt);
14716 offset = dissect_wnm_subelements(wnm_list, tvb, pinfo, offset);
14717 proto_item_set_len(wnm_item, offset - start_offset);
14718 }
14719 }
14720 return offset - start;
14721}
14722
14723static unsigned
14724wnm_notification_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14725{
14726 int start = offset;
14727
14728 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14729 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_response_status,
14730 tvb, offset, 1, ENC_NA0x00000000);
14731 offset += 1;
14732
14733 return offset - start;
14734}
14735
14736static unsigned
14737add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14738{
14739 uint8_t code;
14740 unsigned start = offset;
14741
14742 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14743 code = tvb_get_uint8(tvb, offset);
14744 offset += add_ff_wnm_action_code(tree, tvb, pinfo, offset);
14745 switch (code) {
14746 case WNM_EVENT_REQ:
14747 case WNM_EVENT_REPORT:
14748 case WNM_DIAGNOSTIC_REQ:
14749 case WNM_DIAGNOSTIC_REPORT:
14750 case WNM_LOCATION_CFG_REQ:
14751 case WNM_LOCATION_CFG_RESP:
14752 case WNM_FMS_REQ:
14753 case WNM_FMS_RESP:
14754 case WNM_DMS_REQ:
14755 case WNM_DMS_RESP:
14756 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14757 break;
14758 case WNM_BSS_TRANS_MGMT_QUERY:
14759 offset += wnm_bss_trans_mgmt_query(tree, tvb, pinfo, offset);
14760 break;
14761 case WNM_BSS_TRANS_MGMT_REQ:
14762 offset += wnm_bss_trans_mgmt_req(tree, tvb, pinfo, offset);
14763 break;
14764 case WNM_BSS_TRANS_MGMT_RESP:
14765 offset += wnm_bss_trans_mgmt_resp(tree, tvb, pinfo, offset);
14766 break;
14767 case WNM_TFS_REQ:
14768 offset += wnm_tfs_req(tree, tvb, pinfo, offset);
14769 break;
14770 case WNM_TFS_RESP:
14771 offset += wnm_tfs_resp(tree, tvb, pinfo, offset);
14772 break;
14773 case WNM_SLEEP_MODE_REQ:
14774 offset += wnm_sleep_mode_req(tree, tvb, pinfo, offset);
14775 break;
14776 case WNM_SLEEP_MODE_RESP:
14777 offset += wnm_sleep_mode_resp(tree, tvb, pinfo, offset);
14778 break;
14779 case WNM_CHANNEL_USAGE_REQ:
14780 offset += wnm_channel_usage_req(tree, tvb, pinfo, offset);
14781 break;
14782 case WNM_CHANNEL_USAGE_RESP:
14783 offset += wnm_channel_usage_resp(tree, tvb, pinfo, offset);
14784 break;
14785 case WNM_NOTIFICATION_REQ:
14786 offset += wnm_notification_req(tree, tvb, pinfo, offset);
14787 break;
14788 case WNM_NOTIFICATION_RESP:
14789 offset += wnm_notification_resp(tree, tvb, pinfo, offset);
14790 break;
14791 }
14792
14793 return offset - start; /* Size of fixed fields */
14794}
14795
14796static unsigned
14797add_ff_action_unprotected_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14798{
14799 uint8_t code;
14800 unsigned start = offset;
14801
14802 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14803 code = tvb_get_uint8(tvb, offset);
14804 offset += add_ff_unprotected_wnm_action_code(tree, tvb, pinfo, offset);
14805
14806 switch (code) {
14807 case UNPROTECTED_WNM_TIM:
14808 offset += add_ff_check_beacon(tree, tvb, pinfo, offset);
14809 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
14810 offset += add_ff_tod(tree, tvb, pinfo, offset);
14811 offset += add_ff_toa(tree, tvb, pinfo, offset);
14812 offset += add_ff_max_tod_err(tree, tvb, pinfo, offset);
14813 offset += add_ff_max_toa_err(tree, tvb, pinfo, offset);
14814 break;
14815 case UNPROTECTED_WNM_TIMING_MEASUREMENT:
14816 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14817 offset += add_ff_followup_dialog_token(tree, tvb, pinfo, offset);
14818 break;
14819 }
14820
14821 return offset - start; /* Size of fixed fields */
14822}
14823
14824static unsigned
14825add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14826{
14827 uint8_t code;
14828 uint16_t status;
14829 unsigned start = offset;
14830
14831 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14832 code = tvb_get_uint8(tvb, offset);
14833
14834 /* Extract keys for dot11decrypt engine */
14835 try_scan_tdls_keys(tvb, pinfo, offset);
14836
14837 offset += add_ff_tdls_action_code(tree, tvb, pinfo, offset);
14838 switch (code) {
14839 case TDLS_SETUP_REQUEST0:
14840 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14841 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
14842 break;
14843 case TDLS_SETUP_RESPONSE1:
14844 status = tvb_get_letohs(tvb, offset);
14845 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14846 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14847 if (tvb_reported_length_remaining(tvb, offset) < 2) {
14848 if (status == 0) {
14849 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_response_malformed);
14850 }
14851 break;
14852 }
14853 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
14854 break;
14855 case TDLS_SETUP_CONFIRM2:
14856 status = tvb_get_letohs(tvb, offset);
14857 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14858 if (tvb_reported_length_remaining(tvb, offset) < 1) {
14859 if (status == 0) {
14860 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_confirm_malformed);
14861 }
14862 break;
14863 }
14864 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14865 break;
14866 case TDLS_TEARDOWN3:
14867 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
14868 break;
14869 case TDLS_PEER_TRAFFIC_INDICATION4:
14870 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14871 break;
14872 case TDLS_CHANNEL_SWITCH_REQUEST5:
14873 offset += add_ff_target_channel(tree, tvb, pinfo, offset);
14874 offset += add_ff_operating_class(tree, tvb, pinfo, offset);
14875 break;
14876 case TDLS_CHANNEL_SWITCH_RESPONSE6:
14877 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14878 break;
14879 case TDLS_PEER_PSM_REQUEST7:
14880 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14881 break;
14882 case TDLS_PEER_PSM_RESPONSE8:
14883 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14884 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14885 break;
14886 case TDLS_PEER_TRAFFIC_RESPONSE9:
14887 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14888 break;
14889 case TDLS_DISCOVERY_REQUEST10:
14890 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14891 break;
14892 }
14893
14894 return offset - start; /* Size of fixed fields */
14895}
14896
14897static unsigned
14898add_ff_action_mgmt_notification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14899{
14900 unsigned start = offset;
14901
14902 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14903 offset += add_ff_wme_action_code(tree, tvb, pinfo, offset);
14904 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14905 offset += add_ff_wme_status_code(tree, tvb, pinfo, offset);
14906
14907 return offset - start; /* Size of fixed fields */
14908}
14909
14910static unsigned
14911add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14912{
14913 unsigned start = offset;
14914 uint32_t oui;
14915 tvbuff_t *vendor_tvb;
14916 int dissected;
14917
14918 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14919 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
14920 offset += 3;
14921
14922 vendor_tvb = tvb_new_subset_remaining(tvb, offset);
14923 dissected = dissector_try_uint_with_data(vendor_specific_action_table, oui, vendor_tvb, pinfo, tree, false0, NULL((void*)0));
14924 if (dissected <= 0)
14925 {
14926 call_data_dissector(vendor_tvb, pinfo, tree);
14927 /* Skip the whole TVB because we don't know its format */
14928 dissected = tvb_reported_length_remaining(vendor_tvb, 0);
14929 }
14930
14931 offset += dissected;
14932
14933 return offset - start; /* Size of fixed fields */
14934}
14935
14936static unsigned
14937add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14938{
14939 unsigned start = offset;
14940 uint8_t n_sta, i;
14941 mimo_control_t mimo_cntrl;
14942
14943 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14944 offset += add_ff_ht_action_code(tree, tvb, pinfo, offset);
14945
14946 switch (tvb_get_uint8(tvb, offset - 1)) {
14947 case HT_ACTION_NOTIFY_CHAN_WIDTH0:
14948 offset += add_ff_channel_width(tree, tvb, pinfo, offset);
14949 break;
14950 case HT_ACTION_SM_PWR_SAVE1:
14951 offset += add_ff_sm_pwr_cntrl(tree, tvb, pinfo, offset);
14952 break;
14953 case HT_ACTION_PSMP_ACTION2:
14954 n_sta = tvb_get_uint8(tvb, offset);
14955 offset += add_ff_psmp_param_set(tree, tvb, pinfo, offset);
14956 for (i = 0; i < (n_sta & 0x0F); i++) {
14957 offset += add_ff_psmp_sta_info(tree, tvb, pinfo, offset);
14958 }
14959 break;
14960 case HT_ACTION_SET_PCO_PHASE3:
14961 offset += add_ff_pco_phase_cntrl(tree, tvb, pinfo, offset);
14962 break;
14963 case HT_ACTION_MIMO_CSI4:
14964 mimo_cntrl = get_mimo_control(tvb, offset);
14965 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
14966 offset += add_mimo_csi_matrices_report(tree, tvb, offset, mimo_cntrl);
14967 break;
14968 case HT_ACTION_MIMO_BEAMFORMING5:
14969 mimo_cntrl = get_mimo_control(tvb, offset);
14970 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
14971 offset += add_mimo_beamforming_feedback_report(tree, tvb, offset,
14972 mimo_cntrl);
14973 break;
14974 case HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6:
14975 mimo_cntrl = get_mimo_control(tvb, offset);
14976 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
14977 offset += add_mimo_compressed_beamforming_feedback_report(tree, tvb,
14978 offset,
14979 mimo_cntrl);
14980 break;
14981 case HT_ACTION_ANT_SEL_FEEDBACK7:
14982 offset += add_ff_ant_selection(tree, tvb, pinfo, offset);
14983 break;
14984 case HT_ACTION_HT_INFO_EXCHANGE8:
14985 offset += add_ff_ht_information(tree, tvb, pinfo, offset);
14986 break;
14987 }
14988
14989 return offset - start;
14990}
14991
14992static unsigned
14993add_ff_beacon_interval_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
14994{
14995 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bic,
14996 ett_bic_tree, ieee80211_ff_bic_fields,
14997 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
14998
14999 return 6;
15000}
15001
15002static unsigned
15003add_ff_beamforming_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset, bool_Bool isGrant)
15004{
15005 uint16_t bf_field = tvb_get_letohs(tvb, offset);
15006 bool_Bool isInit = (bf_field & 0x2) >> 1;
15007 bool_Bool isResp = (bf_field & 0x4) >> 2;
15008 static int * const ieee80211_ff_beamforming_ctrl[] = {
15009 &hf_ieee80211_ff_bf_train,
15010 &hf_ieee80211_ff_bf_is_init,
15011 &hf_ieee80211_ff_bf_is_resp,
15012 &hf_ieee80211_ff_bf_rxss_len,
15013 &hf_ieee80211_ff_bf_rxss_rate,
15014 &hf_ieee80211_ff_bf_b10b15,
15015 NULL((void*)0)
15016 };
15017
15018 static int * const ieee80211_ff_beamforming_ctrl_grant[] = {
15019 &hf_ieee80211_ff_bf_train,
15020 &hf_ieee80211_ff_bf_is_init,
15021 &hf_ieee80211_ff_bf_is_resp,
15022 &hf_ieee80211_ff_bf_num_sectors,
15023 &hf_ieee80211_ff_bf_num_rx_dmg_ants,
15024 &hf_ieee80211_ff_bf_b12b15,
15025 NULL((void*)0)
15026 };
15027
15028 if((isInit==true1) && (isResp==true1) && isGrant) {
15029 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bf,
15030 ett_bf_tree, ieee80211_ff_beamforming_ctrl_grant,
15031 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15032 } else {
15033 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bf,
15034 ett_bf_tree, ieee80211_ff_beamforming_ctrl,
15035 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15036 }
15037 return 2;
15038}
15039
15040static unsigned
15041add_ff_dynamic_allocation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15042{
15043 static int * const ieee80211_ff_dynamic_allocation[] = {
15044 &hf_ieee80211_ff_TID,
15045 &hf_ieee80211_ff_alloc_type,
15046 &hf_ieee80211_ff_src_aid,
15047 &hf_ieee80211_ff_dest_aid,
15048 &hf_ieee80211_ff_alloc_duration,
15049 &hf_ieee80211_ff_b39,
15050 NULL((void*)0)
15051 };
15052
15053 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_dynamic_allocation,
15054 ett_dynamic_alloc_tree, ieee80211_ff_dynamic_allocation,
15055 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15056
15057 return 5;
15058}
15059
15060static unsigned
15061add_ff_beamformed_link(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15062{
15063 static int * const ieee80211_ff_beamformed_link[] = {
15064 &hf_ieee80211_ff_blm_unit_index,
15065 &hf_ieee80211_ff_blm_maint_value,
15066 &hf_ieee80211_ff_blm_is_master,
15067 NULL((void*)0)
15068 };
15069
15070 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_blm,
15071 ett_blm_tree, ieee80211_ff_beamformed_link,
15072 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15073 return 1;
15074}
15075
15076static unsigned
15077add_ff_BRP_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15078{
15079 static int * const ieee80211_ff_BRP_request[] = {
15080 &hf_ieee80211_ff_brp_L_RX,
15081 &hf_ieee80211_ff_brp_TX_TRN_REQ,
15082 &hf_ieee80211_ff_brp_MID_REQ,
15083 &hf_ieee80211_ff_brp_BC_REQ,
15084 &hf_ieee80211_ff_brp_MID_GRANT,
15085 &hf_ieee80211_ff_brp_BC_GRANT,
15086 &hf_ieee80211_ff_brp_chan_FBCK_CAP,
15087 &hf_ieee80211_ff_brp_tx_sector,
15088 &hf_ieee80211_ff_brp_other_aid,
15089 &hf_ieee80211_ff_brp_tx_antenna,
15090 &hf_ieee80211_ff_brp_reserved,
15091 NULL((void*)0)
15092 };
15093
15094 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_brp,
15095 ett_brp_tree, ieee80211_ff_BRP_request,
15096 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15097 return 4;
15098}
15099
15100static unsigned
15101add_ff_sector_sweep_feedback_from_iss(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15102{
15103 static int * const ieee80211_ff_sector_sweep_feedback_from_iss[] = {
15104 &hf_ieee80211_ff_sswf_total_sectors,
15105 &hf_ieee80211_ff_sswf_num_rx_dmg_ants,
15106 &hf_ieee80211_ff_sswf_reserved1,
15107 &hf_ieee80211_ff_sswf_poll_required,
15108 &hf_ieee80211_ff_sswf_reserved2,
15109 NULL((void*)0)
15110 };
15111
15112 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_sswf,
15113 ett_sswf_tree, ieee80211_ff_sector_sweep_feedback_from_iss,
15114 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15115 return 3;
15116}
15117
15118static unsigned
15119add_ff_sector_sweep_feedback_to_iss(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15120{
15121 static int * const ieee80211_ff_sector_sweep_feedback_to_iss[] = {
15122 &hf_ieee80211_ff_sswf_sector_select,
15123 &hf_ieee80211_ff_sswf_dmg_antenna_select,
15124 &hf_ieee80211_ff_sswf_snr_report,
15125 &hf_ieee80211_ff_sswf_poll_required,
15126 &hf_ieee80211_ff_sswf_reserved2,
15127 NULL((void*)0)
15128 };
15129
15130 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_sswf,
15131 ett_sswf_tree, ieee80211_ff_sector_sweep_feedback_to_iss,
15132 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15133 return 3;
15134}
15135
15136static unsigned
15137add_ff_sector_sweep(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15138{
15139 static int * const ieee80211_ff_sector_sweep[] = {
15140 &hf_ieee80211_ff_ssw_direction,
15141 &hf_ieee80211_ff_ssw_cdown,
15142 &hf_ieee80211_ff_ssw_sector_id,
15143 &hf_ieee80211_ff_ssw_dmg_ant_id,
15144 &hf_ieee80211_ff_ssw_rxss_len,
15145 NULL((void*)0)
15146 };
15147
15148 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ssw,
15149 ett_ssw_tree, ieee80211_ff_sector_sweep,
15150 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15151 return 3;
15152}
15153
15154static unsigned
15155add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15156{
15157 static int * const ieee80211_ff_dmg_params[] = {
15158 &hf_ieee80211_ff_dmg_params_bss,
15159 &hf_ieee80211_ff_dmg_params_cbap_only,
15160 &hf_ieee80211_ff_dmg_params_cbap_src,
15161 &hf_ieee80211_ff_dmg_params_privacy,
15162 &hf_ieee80211_ff_dmg_params_policy,
15163 &hf_ieee80211_ff_dmg_params_spec_mgmt,
15164 &hf_ieee80211_ff_dmg_params_radio_measure,
15165 NULL((void*)0)
15166 };
15167
15168 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_dmg_params,
15169 ett_dmg_params_tree, ieee80211_ff_dmg_params,
15170 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15171 return 1;
15172}
15173
15174static unsigned
15175add_ff_cc_field(proto_tree *tree, tvbuff_t *tvb, int offset, bool_Bool dis)
15176{
15177 proto_item *cc_item = proto_tree_add_item(tree, hf_ieee80211_ff_cc, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
15178 proto_tree *cc_tree = proto_item_add_subtree(cc_item, ett_cc_tree);
15179 uint64_t cc_field;
15180 if(dis) {
15181 proto_tree_add_item(cc_tree, hf_ieee80211_ff_cc_abft_resp_addr, tvb, offset, 6, ENC_NA0x00000000);
15182 } else {
15183 cc_field = tvb_get_letoh64(tvb, offset);
15184 /*TODO : Add support of bitmask for FT_(U)INT64 */
15185 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_sp_duration, tvb, offset, 1, (uint32_t)(cc_field & 0xff));
15186 proto_tree_add_uint64(cc_tree, hf_ieee80211_ff_cc_cluster_id, tvb, offset+1, 6, (uint64_t)((cc_field & UINT64_C(0x00ffffffffffff00)0x00ffffffffffff00UL) >> 8));
15187 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_role, tvb, offset+7, 1, (uint32_t)((cc_field & UINT64_C(0x0300000000000000)0x0300000000000000UL) >> 56));
15188 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_max_mem, tvb, offset+7, 1, (uint32_t)((cc_field & UINT64_C(0x7c00000000000000)0x7c00000000000000UL) >> 58));
15189 }
15190 return 8;
15191}
15192
15193
15194static unsigned
15195add_ff_band_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15196{
15197 proto_tree_add_item(tree, hf_ieee80211_ff_band_id, tvb, offset, 1, ENC_NA0x00000000);
15198 return 1;
15199}
15200
15201static unsigned
15202add_ff_subject_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15203{
15204 proto_tree_add_item(tree, hf_ieee80211_ff_subject_address, tvb, offset, 6, ENC_NA0x00000000);
15205 return 6;
15206}
15207
15208static unsigned
15209add_ff_handover_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15210{
15211 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reason, tvb, offset, 1, ENC_NA0x00000000);
15212 return 1;
15213}
15214
15215static unsigned
15216add_ff_handover_remaining_bi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15217{
15218 proto_tree_add_item(tree, hf_ieee80211_ff_handover_remaining_bi, tvb, offset, 1, ENC_NA0x00000000);
15219 return 1;
15220}
15221
15222static unsigned
15223add_ff_handover_result(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15224{
15225 proto_tree_add_item(tree, hf_ieee80211_ff_handover_result, tvb, offset, 1, ENC_NA0x00000000);
15226 return 1;
15227}
15228
15229static unsigned
15230add_ff_handover_reject_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15231{
15232 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reject_reason, tvb, offset, 1, ENC_NA0x00000000);
15233 return 1;
15234}
15235
15236static unsigned
15237add_ff_destination_reds_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15238{
15239 proto_tree_add_item(tree, hf_ieee80211_ff_destination_reds_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15240 return 2;
15241}
15242
15243static unsigned
15244add_ff_destination_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15245{
15246 proto_tree_add_item(tree, hf_ieee80211_ff_destination_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15247 return 2;
15248}
15249
15250static unsigned
15251add_ff_relay_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15252{
15253 proto_tree_add_item(tree, hf_ieee80211_ff_relay_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15254 return 2;
15255}
15256
15257static unsigned
15258add_ff_source_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15259{
15260 proto_tree_add_item(tree, hf_ieee80211_ff_source_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15261 return 2;
15262}
15263
15264static unsigned
15265add_ff_timing_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15266{
15267 proto_tree_add_item(tree, hf_ieee80211_ff_timing_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15268 return 2;
15269}
15270
15271static unsigned
15272add_ff_sampling_frequency_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15273{
15274 proto_tree_add_item(tree, hf_ieee80211_ff_sampling_frequency_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15275 return 2;
15276}
15277
15278static unsigned
15279add_ff_relay_operation_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15280{
15281 proto_tree_add_item(tree, hf_ieee80211_ff_relay_operation_type, tvb, offset, 1, ENC_NA0x00000000);
15282 return 1;
15283}
15284
15285static unsigned
15286add_ff_fst_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15287{
15288 proto_tree_add_item(tree, hf_ieee80211_ff_fst_action_code, tvb, offset, 1, ENC_NA0x00000000);
15289 return 1;
15290}
15291
15292static unsigned
15293add_ff_robust_av_streaming_action_code(proto_tree *tree, tvbuff_t *tvb,
15294 packet_info *pinfo _U___attribute__((unused)), int offset)
15295{
15296 proto_tree_add_item(tree, hf_ieee80211_ff_robust_av_streaming_action_code,
15297 tvb, offset, 1, ENC_NA0x00000000);
15298 return 1;
15299}
15300
15301static unsigned
15302add_ff_llt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15303{
15304 proto_tree_add_item(tree, hf_ieee80211_ff_llt, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15305 return 4;
15306}
15307
15308static unsigned
15309add_ff_fsts_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15310{
15311 proto_tree_add_item(tree, hf_ieee80211_ff_fsts_id, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15312 return 4;
15313}
15314
15315static unsigned
15316add_ff_oct_mmpdu(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15317{
15318 unsigned start = offset;
15319 unsigned len = tvb_get_letohs(tvb, offset);
15320 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_len, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15321 offset += 2;
15322 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_ctrl, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15323 offset += 2;
15324 proto_tree_add_item(tree, hf_ieee80211_ff_oct_mmpdu, tvb, offset, len, ENC_NA0x00000000);
15325 offset += len;
15326 return offset - start;
15327}
15328
15329static int * const eht_eml_control_field_mode_headers[] = {
15330 &hf_ieee80211_eht_eml_control_emlsr_mode,
15331 &hf_ieee80211_eht_eml_control_emlmr_mode,
15332 &hf_ieee80211_eht_eml_control_emlsr_para_update_control,
15333 &hf_ieee80211_eht_eml_control_device_coexist_activities,
15334 &hf_ieee80211_eht_eml_control_reserved,
15335 NULL((void*)0)
15336};
15337
15338static int * const eht_emlsr_para_update_headers[] = {
15339 &hf_ieee80211_eht_emlsr_para_update_padding_delay,
15340 &hf_ieee80211_eht_emlsr_para_update_tran_delay,
15341 &hf_ieee80211_eht_emlsr_para_update_reserved,
15342 NULL((void*)0)
15343};
15344
15345static int * const eht_eml_control_mcs_map_count_headers[] = {
15346 &hf_ieee80211_eht_eml_control_mcs_map_count_bw,
15347 &hf_ieee80211_eht_eml_control_mcs_map_count_reserved,
15348 NULL((void*)0)
15349};
15350
15351static const value_string eht_eml_control_mcs_map_count_bw[] = {
15352 {0x00, "80 MHz"},
15353 {0x01, "160 MHz"},
15354 {0x02, "320 MHz"},
15355 {0, NULL((void*)0)}
15356};
15357
15358static int * const eht_le_80_mcs_map_hdrs[] = {
15359 &hf_ieee80211_eht_le_80_rx_max_nss_0_9,
15360 &hf_ieee80211_eht_le_80_tx_max_nss_0_9,
15361 &hf_ieee80211_eht_le_80_rx_max_nss_10_11,
15362 &hf_ieee80211_eht_le_80_tx_max_nss_10_11,
15363 &hf_ieee80211_eht_le_80_rx_max_nss_12_13,
15364 &hf_ieee80211_eht_le_80_tx_max_nss_12_13,
15365 NULL((void*)0)
15366};
15367
15368static int * const eht_160_mcs_map_hdrs[] = {
15369 &hf_ieee80211_eht_160_rx_max_nss_0_9,
15370 &hf_ieee80211_eht_160_tx_max_nss_0_9,
15371 &hf_ieee80211_eht_160_rx_max_nss_10_11,
15372 &hf_ieee80211_eht_160_tx_max_nss_10_11,
15373 &hf_ieee80211_eht_160_rx_max_nss_12_13,
15374 &hf_ieee80211_eht_160_tx_max_nss_12_13,
15375 NULL((void*)0)
15376};
15377
15378static int * const eht_320_mcs_map_hdrs[] = {
15379 &hf_ieee80211_eht_320_rx_max_nss_0_9,
15380 &hf_ieee80211_eht_320_tx_max_nss_0_9,
15381 &hf_ieee80211_eht_320_rx_max_nss_10_11,
15382 &hf_ieee80211_eht_320_tx_max_nss_10_11,
15383 &hf_ieee80211_eht_320_rx_max_nss_12_13,
15384 &hf_ieee80211_eht_320_tx_max_nss_12_13,
15385 NULL((void*)0)
15386};
15387
15388static unsigned
15389dissect_eht_eml_control_field(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15390{
15391 unsigned start = offset;
15392 unsigned len = tvb_captured_length_remaining(tvb, offset);
15393 uint8_t mode = tvb_get_uint8(tvb, offset);
15394 uint8_t mcs_map_count;
15395 proto_item *link_map_item;
15396 proto_tree *link_map_tree;
15397 uint16_t bmap, f;
15398
15399 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15400 hf_ieee80211_eht_eml_control_field,
15401 ett_eht_eml_control,
15402 eht_eml_control_field_mode_headers,
15403 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15404 offset += 1;
15405
15406 if (mode & 0x03) { /* EMLSR or EMLMR*/
15407 if (len < 3) {
15408 expert_add_info_format(pinfo, tree, &ei_ieee80211_eht_invalid_action, "EMLSR or EMLMR length %u is wrong", len);
15409 return len;
15410 }
15411 link_map_item = proto_tree_add_item(tree,
15412 hf_ieee80211_eht_eml_control_link_bitmap,
15413 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15414 link_map_tree = proto_item_add_subtree(link_map_item,
15415 ett_eht_eml_control_link_map);
15416 bmap = tvb_get_letohs(tvb, offset);
15417 for (f = 0; f < 16; f++) {
15418 if (bmap & (1 << f)) {
15419 proto_tree_add_uint_format_value(link_map_tree,
15420 hf_ieee80211_eht_eml_control_link_enable_id,
15421 tvb, offset + (f/8), 1, f, "%u", f);
15422 }
15423 }
15424 offset += 2;
15425 }
15426 if (mode & 0x02) { /* EMLMR */
15427 if (len < 7) {
15428 expert_add_info_format(pinfo, tree, &ei_ieee80211_eht_invalid_action, "EMLMR length %u is wrong", len);
15429 return len;
15430 }
15431 mcs_map_count = tvb_get_uint8(tvb, offset) & 0x03;
15432 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15433 hf_ieee80211_eht_eml_control_mcs_map_count,
15434 ett_eht_eml_control_mcs_map_count,
15435 eht_eml_control_mcs_map_count_headers, ENC_LITTLE_ENDIAN0x80000000,
15436 BMT_NO_APPEND0x01);
15437 offset++;
15438
15439 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15440 hf_ieee80211_eht_mcs_and_nss_le_80mhz,
15441 ett_eht_phy_mcs_nss_set,
15442 eht_le_80_mcs_map_hdrs,
15443 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15444 offset += 3;
15445 if (mcs_map_count >= 1) {
15446 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15447 hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
15448 ett_eht_phy_mcs_nss_set,
15449 eht_160_mcs_map_hdrs,
15450 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15451 offset += 3;
15452 }
15453 if (mcs_map_count >= 2) {
15454 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15455 hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
15456 ett_eht_phy_mcs_nss_set,
15457 eht_320_mcs_map_hdrs,
15458 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15459 offset += 3;
15460 }
15461 }
15462
15463 if (mode & 0x04) { /* EMLSR Parameter Update */
15464 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15465 hf_ieee80211_eht_emlsr_para_update, ett_eht_emlsr_para_update,
15466 eht_emlsr_para_update_headers, ENC_LITTLE_ENDIAN0x80000000,
15467 BMT_NO_APPEND0x01);
15468 offset++;
15469 }
15470
15471 return offset - start;
15472}
15473
15474static int
15475add_tag_relay_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15476{
15477 int tag_len = tvb_reported_length(tvb);
15478 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15479 int offset = 0;
15480 static int * const ieee80211_tag_relay_capabilities[] = {
15481 &hf_ieee80211_tag_relay_support,
15482 &hf_ieee80211_tag_relay_use,
15483 &hf_ieee80211_tag_relay_permission,
15484 &hf_ieee80211_tag_AC_power,
15485 &hf_ieee80211_tag_relay_prefer,
15486 &hf_ieee80211_tag_duplex,
15487 &hf_ieee80211_tag_cooperation,
15488 NULL((void*)0)
15489 };
15490
15491 if (tag_len < 2) {
15492 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length must be 2");
15493 return 1;
15494 }
15495
15496 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_relay_capabilities, ENC_NA0x00000000);
15497 return tvb_captured_length(tvb);
15498}
15499
15500#if 0
15501static unsigned
15502add_ff_relay_capable_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15503{
15504 proto_item *rcsi_item = proto_tree_add_item(tree, hf_ieee80211_ff_rcsi, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15505 proto_tree *rcsi_tree = proto_item_add_subtree(rcsi_item, ett_rcsi_tree);
15506 proto_tree_add_item(rcsi_tree, hf_ieee80211_ff_rcsi_aid, tvb, offset, 1, ENC_NA0x00000000);
15507 offset += 1;
15508 add_tag_relay_capabilities(pinfo, rcsi_item, 2, rcsi_tree, tvb, &offset);
15509 return 3;
15510}
15511#endif
15512
15513#define NEXT_TBTT_PRESENT0x01 0x01
15514#define COMPRESSED_SSID_PRESENT0x02 0x02
15515#define ANO_PRESENT0x04 0x04
15516
15517static void
15518dissect_ieee80211_extension(uint16_t fcf, tvbuff_t *tvb, packet_info *pinfo,
15519 proto_tree *tree, uint16_t flags)
15520{
15521 proto_item *ti;
15522 proto_tree *ext_tree;
15523 proto_tree *fixed_tree;
15524 proto_tree *tagged_tree;
15525
15526 int offset = 0;
15527 int tagged_parameter_tree_len;
15528
15529 ti = proto_tree_add_item(tree, proto_wlan_ext, tvb, offset, -1, ENC_NA0x00000000);
15530 ext_tree = proto_item_add_subtree(ti, ett_80211_ext);
15531
15532 switch (COMPOSE_FRAME_TYPE(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
)
15533 {
15534 case EXTENSION_DMG_BEACON0x30:
15535 {
15536 bool_Bool cc, dis;
15537 uint16_t bic_field;
15538 fixed_tree = get_fixed_parameter_tree(ext_tree, tvb, offset, 20, false0);
15539 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
15540 offset += add_ff_sector_sweep(fixed_tree, tvb, pinfo, offset);
15541 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
15542 bic_field = tvb_get_letohs(tvb, offset);
15543 cc = (bic_field & 0x1);
15544 dis = (bic_field & 0x2) >> 1;
15545 offset += add_ff_beacon_interval_ctrl(fixed_tree, tvb, pinfo, offset);
15546 offset += add_ff_dmg_params(fixed_tree, tvb, pinfo, offset);
15547 if(cc) {
15548 offset += add_ff_cc_field(fixed_tree, tvb, offset, dis);
15549 }
15550 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
15551
15552 /*
15553 * The tagged params are optional here. See Table 8.33a of the 2012
15554 * version of the standard.
15555 */
15556 if (tagged_parameter_tree_len) {
15557 tagged_tree = get_tagged_parameter_tree(ext_tree, tvb, offset, tagged_parameter_tree_len);
15558 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, EXTENSION_DMG_BEACON0x30, NULL((void*)0));
15559 }
15560 break;
15561 }
15562 case EXTENSION_S1G_BEACON0x31:
15563 {
15564 int params_size = 5;
15565
15566 if (flags & NEXT_TBTT_PRESENT0x01) params_size += 3;
15567 if (flags & COMPRESSED_SSID_PRESENT0x02) params_size += 4;
15568 if (flags & ANO_PRESENT0x04) params_size += 1;
15569
15570 fixed_tree = get_fixed_parameter_tree( ext_tree, tvb, offset, params_size, false0);
15571 offset += add_ff_s1g_timestamp(fixed_tree, tvb, pinfo, offset);
15572 offset += add_ff_change_sequence(fixed_tree, tvb, pinfo, offset);
15573 if (flags & NEXT_TBTT_PRESENT0x01)
15574 offset += add_ff_next_tbtt(fixed_tree, tvb, pinfo, offset);
15575 if (flags & COMPRESSED_SSID_PRESENT0x02)
15576 offset += add_ff_compressed_ssid(fixed_tree, tvb, pinfo, offset);
15577 if (flags & ANO_PRESENT0x04)
15578 offset += add_ff_access_network_options(fixed_tree, tvb, pinfo, offset);
15579
15580 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
15581
15582 if (tagged_parameter_tree_len) {
15583 tagged_tree = get_tagged_parameter_tree(ext_tree, tvb, offset, tagged_parameter_tree_len);
15584 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, EXTENSION_S1G_BEACON0x31, NULL((void*)0));
15585 }
15586 }
15587 }
15588}
15589
15590static unsigned
15591add_ff_action_unprotected_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
15592{
15593 uint8_t code;
15594 unsigned start = offset;
15595
15596 offset += add_ff_category_code(tree, tvb, pinfo, offset);
15597 code = tvb_get_uint8(tvb, offset);
15598 offset += add_ff_unprotected_dmg_action_code(tree, tvb, pinfo, offset);
15599 switch (code) {
15600 case UNPROTECTED_DMG_ANNOUNCE0:
15601 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
15602 offset += add_ff_beacon_interval(tree, tvb, pinfo, offset);
15603 break;
15604 case UNPROTECTED_DMG_BRP1:
15605 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
15606 offset += add_ff_BRP_request(tree, tvb, pinfo, offset);
15607 break;
15608 }
15609 return offset - start;
15610}
15611
15612/* There is no easy way to skip all these subcarrier indices that must not
15613 * be displayed when showing compressed beamforming feedback matrices
15614 * Table 8-53g IEEE Std 802.11ac-2013 amendment.
15615 *
15616 * The irregular use of case statements in this function is to improve
15617 * readability in what is otherwise a large function that does very little.
15618 */
15619static inline int
15620vht_compressed_skip_scidx(uint8_t nchan_width, uint8_t ng, int scidx)
15621{
15622 switch(nchan_width) {
15623 /* 20 MHz */
15624 case 0:
15625 /* No Grouping */
15626 if (ng == 0)
15627 switch (scidx) {
15628 /* Pilot subcarriers */
15629 case -21: case -7: case 7: case 21:
15630 /* DC subcarrier */
15631 case 0:
15632 scidx++;
15633 default:
15634 break;
15635 }
15636 break;
15637 /* 40 MHz */
15638 case 1:
15639 /* No Grouping */
15640 if (ng == 0)
15641 switch (scidx) {
15642 /* Pilot subcarriers */
15643 case -53: case -25: case -11: case 11: case 25: case 53:
15644 scidx++;
15645 break;
15646 /* DC subcarriers */
15647 case -1: case 0: case 1:
15648 scidx = 2;
15649 default:
15650 break;
15651 }
15652 break;
15653 /* 80 MHz */
15654 case 2:
15655 /* No Grouping */
15656 if (ng == 0)
15657 switch (scidx) {
15658 /* Pilot subcarriers */
15659 case -103: case -75: case -39: case -11: case 11: case 39: case 75: case 103:
15660 scidx++;
15661 break;
15662 /* DC subcarriers, skip -1, 0, 1 */
15663 case -1:
15664 scidx = 2;
15665 default:
15666 break;
15667 }
15668 break;
15669 /* 160 MHz / 80+80 Mhz
15670 * Skip values here assume 160 MHz, as vht_mimo_control does not let us differentiate
15671 * between 160 MHz & 80-80MHz */
15672 case 3:
15673 switch (ng) {
15674 /* No Grouping */
15675 case 0:
15676 /* DC subcarriers, skip -5 to 5*/
15677 if (scidx == -5) {
15678 scidx = 6;
15679 break;
15680 }
15681 switch (scidx) {
15682 /* Pilot subcarriers */
15683 case -231: case -203: case -167: case -139: case -117: case -89: case -53: case -25:
15684 case 25: case 53: case 89: case 117: case 139: case 167: case 203: case 231:
15685 scidx++;
15686 break;
15687 /* Other subcarriers, skip -129 to -127, 127 to 129 */
15688 case -129:
15689 scidx = -126;
15690 break;
15691 case 127:
15692 scidx = 130;
15693 break;
15694 default:
15695 break;
15696 }
15697 break;
15698 /* Grouping of 2 */
15699 case 1:
15700 switch (scidx) {
15701 /* DC subcarriers */
15702 case -128: case -4: case -2: case 0: case 2: case 4: case 128:
15703 scidx++;
15704 default:
15705 break;
15706 }
15707 break;
15708 /* Grouping of 4 */
15709 case 2:
15710 if (scidx == -2 || scidx == 2)
15711 scidx++;
15712 break;
15713 }
15714 break;
15715 default:
15716 break;
15717 }
15718
15719 return scidx;
15720}
15721
15722static inline int vht_exclusive_skip_scidx(uint8_t nchan_width, uint8_t ng, int scidx)
15723{
15724 switch (nchan_width) {
15725 /* 20 MHz */
15726 case 0:
15727 switch (ng) {
15728 /* No Grouping */
15729 case 0:
15730 if (scidx == -2 || scidx == 1)
15731 scidx++;
15732 else
15733 scidx = scidx + 2;
15734 break;
15735 case 1:
15736 switch (scidx) {
15737 case -4: case 1:
15738 scidx = scidx + 3;
15739 break;
15740 case -1:
15741 scidx = 1;
15742 break;
15743 default:
15744 scidx = scidx + 4;
15745 break;
15746 }
15747 break;
15748 default:
15749 switch (scidx) {
15750 case -4: case 1:
15751 scidx = scidx + 3;
15752 break;
15753 case -1:
15754 scidx = 1;
15755 break;
15756 default:
15757 scidx = scidx + 8;
15758 break;
15759 }
15760 break;
15761 }
15762 break;
15763 /* 40 MHz */
15764 case 1:
15765 /* 80 MHz */
15766 case 2:
15767 switch (ng) {
15768 /* No Grouping */
15769 case 0:
15770 if (scidx == -2)
15771 scidx = 2;
15772 else
15773 scidx = scidx + 2;
15774 break;
15775 case 1:
15776 scidx = scidx + 4;
15777 break;
15778 default:
15779 if (scidx == -2)
15780 scidx = 2;
15781 else
15782 scidx = scidx + 8;
15783 break;
15784 }
15785 break;
15786 /* 160 MHz / 80+80 Mhz */
15787 case 3:
15788 switch (ng) {
15789 /* No Grouping */
15790 case 0:
15791 switch (scidx) {
15792 /* DC subcarriers, skip -4 to 4*/
15793 case -6:
15794 scidx = 6;
15795 break;
15796 /* Other subcarriers, skip -128, 128 */
15797 case -130:
15798 scidx = -126;
15799 break;
15800 case 126:
15801 scidx = 130;
15802 break;
15803 default:
15804 scidx = scidx + 2;
15805 break;
15806 }
15807 break;
15808 case 1:
15809 switch (scidx) {
15810 /* DC subcarriers, skip -4 to 4*/
15811 case -6:
15812 scidx = 6;
15813 break;
15814 default:
15815 scidx = scidx + 4;
15816 break;
15817 }
15818 break;
15819 default:
15820 switch (scidx) {
15821 case -6:
15822 scidx = 6;
15823 break;
15824 case -130:
15825 scidx = -126;
15826 break;
15827 case 126:
15828 scidx = 130;
15829 break;
15830 default:
15831 scidx = scidx + 8;
15832 break;
15833 }
15834 break;
15835 }
15836 break;
15837 default:
15838 break;
15839 }
15840 return scidx;
15841}
15842
15843static int
15844dissect_he_feedback_matrix(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
15845 int offset, int bit_offset, int scidx,
15846 int nr, int nc,
15847 int phi_bits, int psi_bits,
15848 int hf);
15849
15850static unsigned
15851add_ff_vht_compressed_beamforming_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15852{
15853 uint32_t vht_mimo;
15854 uint8_t nc;
15855 uint8_t nr;
15856 uint8_t chan_width;
15857 uint8_t grouping;
15858 bool_Bool codebook_info;
15859 bool_Bool feedback_type;
15860 proto_item *vht_beam_item, *vht_excl_beam_item;
15861 proto_tree *vht_beam_tree, *subtree, *vht_excl_beam_tree;
15862 int i, len, pos, ns, scidx = 0;
15863 uint8_t phi, psi, carry;
15864 int j, ic, off_len = 0, sscidx = 0, xnsc;
15865 int bit_offset = 0;
15866 int start_offset = 0;
15867 /* Table 8-53g Subcarriers for which a Compressed Beamforming Feedback Matrix
15868 * subfield is sent back. IEEE Std 802.11ac-2013 amendment */
15869 static const int ns_arr[4][3] = { { 52, 30, 16 },
15870 { 108, 58, 30 },
15871 { 234, 122, 62 },
15872 { 468, 244, 124 }
15873 };
15874
15875 /* Table 8-53j, no of Subcarriers for which the Delta SNR subfield is sent back to the beamformer.
15876 * IEEE Std 802.11ac-2013 amendment */
15877 static const int delta_ns_arr[4][3] = { { 30, 16, 10 },
15878 { 58, 30, 16 },
15879 { 122, 62, 32 },
15880 { 244, 124, 64 }
15881 };
15882
15883 vht_mimo = tvb_get_letoh24(tvb, offset);
15884 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_vht_mimo_cntrl,
15885 ett_ff_vhtmimo_cntrl, hf_ieee80211_ff_vht_mimo_cntrl_fields, ENC_LITTLE_ENDIAN0x80000000);
15886 offset += 3;
15887
15888 /* Extract values for beamforming use */
15889 nc = (vht_mimo & 0x7) + 1;
15890 nr = ((vht_mimo & 0x38) >> 3) + 1;
15891 chan_width = (vht_mimo & 0xC0) >> 6;
15892 grouping = ((vht_mimo & 0x300) >> 8);
15893 codebook_info = (vht_mimo & 0x400) >> 10;
15894 feedback_type = (vht_mimo & 0x800) >> 11;
15895
15896 if (feedback_type) {
15897 if (codebook_info) {
15898 psi = 7; phi = 9;
15899 } else {
15900 psi = 5; phi = 7;
15901 }
15902 } else {
15903 if (codebook_info) {
15904 psi = 4; phi = 6;
15905 } else {
15906 psi = 2; phi = 4;
15907 }
15908 }
15909
15910 vht_beam_item = proto_tree_add_item(tree, hf_ieee80211_vht_compressed_beamforming_report, tvb,
15911 offset, -1, ENC_NA0x00000000);
15912 vht_beam_tree = proto_item_add_subtree(vht_beam_item, ett_ff_vhtmimo_beamforming_report);
15913
15914 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, nc,
15915 ett_ff_vhtmimo_beamforming_report_snr, NULL((void*)0), "Average Signal to Noise Ratio");
15916
15917 for (i = 1; i <= nc; i++)
15918 {
15919 int8_t snr;
15920 char edge_sign;
15921
15922 snr = tvb_get_int8(tvb, offset);
15923
15924 switch(snr) {
15925 case -128:
15926 edge_sign = '<';
15927 break;
15928 case 127:
15929 edge_sign = '>';
15930 break;
15931 default:
15932 edge_sign = ' ';
15933 break;
15934 }
15935
15936 proto_tree_add_int_format(subtree, hf_ieee80211_vht_compressed_beamforming_report_snr, tvb, offset, 1,
15937 snr, "Stream %d - Signal to Noise Ratio: %c%3.2fdB", i, edge_sign,snr/4.0+22.0);
15938
15939 offset += 1;
15940 }
15941
15942 /* Table 8-53c Subfields of the VHT MIMO Control field (802.11ac-2013)
15943 * reserves value 3 of the Grouping subfield. */
15944 if (grouping == 3) {
15945 expert_add_info_format(pinfo, vht_beam_item, &ei_ieee80211_inv_val,
15946 "Grouping subfield value 3 is reserved");
15947 return offset;
15948 }
15949
15950 start_offset = offset;
15951 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, -1,
15952 ett_ff_vhtmimo_beamforming_report_feedback_matrices,
15953 NULL((void*)0), "Feedback Matrices");
15954
15955 ns = ns_arr[chan_width][grouping];
15956 switch(chan_width) {
15957 case 0:
15958 scidx = -28;
15959 break;
15960 case 1:
15961 scidx = -58;
15962 break;
15963 case 2:
15964 scidx = -122;
15965 break;
15966 case 3:
15967 /* This is -122 for 80+80MHz Channel Width but vht_mimo_control does not allow us
15968 * to differentiate between 160MHz and 80+80Mhz */
15969 scidx = -250;
15970 break;
15971 }
15972
15973 bit_offset = offset * 8;
15974 for (i = 0; i < ns; i++) {
15975
15976 scidx = vht_compressed_skip_scidx(chan_width, grouping, scidx);
15977
15978 bit_offset = dissect_he_feedback_matrix(subtree, tvb, pinfo, offset,
15979 bit_offset, scidx++, nr, nc, phi, psi,
15980 hf_ieee80211_vht_compressed_beamform_scidx);
15981 offset = bit_offset / 8;
15982 }
15983
15984 proto_item_set_len(subtree, offset - start_offset);
15985
15986 if (feedback_type) {
15987 xnsc = delta_ns_arr[chan_width][grouping];
15988 if ((nc * xnsc *4) % 8)
15989 off_len = (nc * xnsc *4) / 8 + 1;
15990 else
15991 off_len = (nc * xnsc *4) / 8;
15992 switch(chan_width) {
15993 case 0:
15994 sscidx = -28;
15995 break;
15996 case 1:
15997 sscidx = -58;
15998 break;
15999 case 2:
16000 sscidx = -122;
16001 break;
16002 case 3:
16003 sscidx = -250;
16004 break;
16005 }
16006 vht_excl_beam_item = proto_tree_add_item(tree, hf_ieee80211_vht_mu_exclusive_beamforming_report, tvb, offset, off_len, ENC_NA0x00000000);
16007 vht_excl_beam_tree = proto_item_add_subtree(vht_excl_beam_item, ett_ff_vhtmu_exclusive_beamforming_report_matrices);
16008
16009 carry = 1;
16010 for (j = 1; j <= xnsc; j++) {
16011 for (ic = 1; ic <= nc; ic++) {
16012 if (carry % 2){
16013 pos = 0;
16014 len = 1;
16015 }
16016 else
16017 {
16018 pos = 1;
16019 len = 0;
16020 }
16021 proto_tree_add_none_format(vht_excl_beam_tree, hf_ieee80211_vht_mu_exclusive_beamforming_delta_snr, tvb,
16022 offset - pos, 1, "Delta SNR for space-time stream %d for subcarrier %d", ic, sscidx);
16023 offset += len;
16024 carry ++;
16025 }
16026 sscidx = vht_exclusive_skip_scidx(chan_width, grouping, sscidx);
16027 }
16028 }
16029
16030 return offset;
16031}
16032
16033static unsigned
16034add_ff_action_vht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16035{
16036 unsigned start = offset;
16037 uint8_t vht_action, field_val;
16038 uint64_t msa_value;
16039 uint64_t upa_value;
16040 int m, half, msa_index;
16041 proto_item *ti;
16042 proto_tree *ti_tree;
16043 proto_item *msa, *upa;
16044 proto_tree *msa_tree, *upa_tree;
16045
16046 offset += add_ff_category_code(tree, tvb, pinfo, offset);
16047
16048 vht_action = tvb_get_uint8(tvb, offset);
16049 offset += add_ff_vht_action(tree, tvb, pinfo, offset);
16050
16051 switch(vht_action){
16052 case VHT_ACT_VHT_COMPRESSED_BEAMFORMING0:{
16053 offset = add_ff_vht_compressed_beamforming_report(tree, tvb, pinfo, offset);
16054 offset += tvb_reported_length_remaining(tvb, offset);
16055 }
16056 break;
16057 case VHT_ACT_GROUP_ID_MANAGEMENT1:{
16058 ti = proto_tree_add_item(tree, hf_ieee80211_vht_group_id_management, tvb,
16059 offset, -1, ENC_NA0x00000000);
16060 ti_tree = proto_item_add_subtree(ti, ett_vht_grpidmgmt);
16061
16062 msa_value = tvb_get_letoh64(tvb, offset);
16063 msa = proto_tree_add_item(ti_tree, hf_ieee80211_vht_membership_status_array, tvb,
16064 offset, 8, ENC_NA0x00000000);
16065 msa_tree = proto_item_add_subtree(msa, ett_vht_msa);
16066 for (m = 0; m < 64; m++) {
16067 if (msa_value & (INT64_C(1)1L << m))
16068 proto_tree_add_uint_format(msa_tree, hf_ieee80211_vht_membership_status_field,
16069 tvb, offset + (m/8), 1, 1, "Membership Status in Group ID %d: 1", m);
16070 }
16071 offset += 8;
16072
16073 upa = proto_tree_add_item(ti_tree, hf_ieee80211_vht_user_position_array, tvb,
16074 offset, 16, ENC_NA0x00000000);
16075 upa_tree = proto_item_add_subtree(upa, ett_vht_upa);
16076
16077 for (half = 0, msa_index = 0; half < 2; half++) {
16078 upa_value = tvb_get_letoh64(tvb, offset);
16079 for (m = 0; m < 64; m += 2, msa_index++) {
16080 if (msa_value & (INT64_C(1)1L << msa_index)) {
16081 field_val = (uint8_t)((upa_value >> m) & 0x3);
16082 proto_tree_add_uint_format(upa_tree, hf_ieee80211_vht_user_position_field,
16083 tvb, offset + (m / 8), 1, field_val, "User Position in Group ID %d: %u", msa_index, field_val);
16084 }
16085 }
16086 offset += 8;
16087 }
16088
16089 offset += tvb_reported_length_remaining(tvb, offset);
16090 }
16091 break;
16092 case VHT_ACT_OPERATION_MODE_NOTIFICATION2:{
16093 ti = proto_tree_add_item(tree, hf_ieee80211_vht_operation_mode_notification, tvb,
16094 offset, -1, ENC_NA0x00000000);
16095 expert_add_info(pinfo, ti, &ei_ieee80211_vht_action);
16096 offset += tvb_reported_length_remaining(tvb, offset);
16097 }
16098 break;
16099 default:
16100 break;
16101 }
16102
16103
16104 return offset - start;
16105}
16106
16107static int * const s1g_sync_control_headers[] = {
16108 &hf_ieee80211_s1g_sync_control_uplink_sync_request,
16109 &hf_ieee80211_s1g_sync_control_time_slot_protection_request,
16110 &hf_ieee80211_s1g_sync_control_reserved,
16111 NULL((void*)0)
16112};
16113
16114static int
16115add_ff_sync_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
16116{
16117 int start = offset;
16118
16119 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16120 hf_ieee80211_s1g_sync_control,
16121 ett_s1g_sync_control_tree,
16122 s1g_sync_control_headers,
16123 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16124 offset += 1;
16125
16126 return offset - start;
16127}
16128
16129static int * const s1g_sector_id_index_headers[] = {
16130 &hf_ieee80211_s1g_sector_id_preferred_sector_id,
16131 &hf_ieee80211_s1g_sector_id_snr,
16132 &hf_ieee80211_s1g_sector_id_receive_sector_bitmap,
16133 NULL((void*)0)
16134};
16135
16136static void
16137s1g_sector_id_index_snr_custom(char *result, uint16_t snr)
16138{
16139 switch (snr) {
16140 case 0:
16141 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Less than or equal to -3dB");
16142 break;
16143 case 30:
16144 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Greater than or equal to 27dB");
16145 break;
16146 case 31:
16147 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "No Feedback");
16148 break;
16149 default:
16150 snprintf(result, ITEM_LABEL_LENGTH240, "%ddB", snr - 3);
16151 }
16152}
16153
16154static int
16155add_ff_sector_id_index(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
16156{
16157 int start = offset;
16158
16159 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16160 hf_ieee80211_s1g_sector_id_index,
16161 ett_s1g_sector_id_index,
16162 s1g_sector_id_index_headers,
16163 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16164 offset += 2;
16165
16166 return offset - start;
16167}
16168
16169static int * const s1g_twt_information_control_headers[] = {
16170 &hf_ieee80211_s1g_twt_flow_identifier,
16171 &hf_ieee80211_s1g_twt_response_required,
16172 &hf_ieee80211_s1g_twt_next_twt_request,
16173 &hf_ieee80211_s1g_twt_next_twt_subfield_size,
16174 &hf_ieee80211_s1g_twt_reserved,
16175 NULL((void*)0)
16176};
16177
16178static int
16179add_ff_twt_information(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
16180{
16181 int start = offset;
16182 uint8_t control = tvb_get_uint8(tvb, offset);
16183
16184 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16185 hf_ieee80211_s1g_twt_information_control,
16186 ett_s1g_twt_information_control,
16187 s1g_twt_information_control_headers,
16188 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16189 offset += 1;
16190
16191 if (control & 0x60) {
16192 int len_bits = ((control >> 5) & 0x03);
16193 int len = 0;
16194
16195 switch (len_bits) {
16196 case 0:
16197 len = 0; /* Should not happen! */
16198 break;
16199 case 1:
16200 len = 4;
16201 proto_tree_add_item(tree, hf_ieee80211_s1g_twt_next_twt_32, tvb, offset,
16202 len, ENC_LITTLE_ENDIAN0x80000000);
16203 break;
16204 case 2:
16205 len = 6;
16206 proto_tree_add_item(tree, hf_ieee80211_s1g_twt_next_twt_48, tvb, offset,
16207 len, ENC_LITTLE_ENDIAN0x80000000);
16208 break;
16209 case 3:
16210 len = 8;
16211 proto_tree_add_item(tree, hf_ieee80211_s1g_twt_next_twt_64, tvb, offset,
16212 len, ENC_LITTLE_ENDIAN0x80000000);
16213 break;
16214 }
16215
16216 offset += len;
16217 }
16218
16219 return offset - start;
16220}
16221
16222static unsigned
16223add_ff_s1g_twt_setup(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16224{
16225 const uint8_t ids[] = { TAG_TWT216 };
16226 unsigned start = offset;
16227
16228 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
16229
16230 return offset - start;
16231}
16232
16233static int * const ieee80211_twt_individual_flow[] = {
16234 &hf_ieee80211_twt_individual_flow_id,
16235 &hf_ieee80211_twt_individual_reserved,
16236 &hf_ieee80211_twt_neg_type,
16237 &hf_ieee80211_twt_bcast_teardown_all_twt,
16238 NULL((void*)0),
16239};
16240static int * const ieee80211_twt_bcast_flow[] = {
16241 &hf_ieee80211_twt_bcast_id,
16242 &hf_ieee80211_twt_neg_type,
16243 &hf_ieee80211_twt_bcast_teardown_all_twt,
16244 NULL((void*)0),
16245};
16246static int * const ieee80211_twt_neg_type2[] = {
16247 &hf_ieee80211_twt_neg_type2_reserved1,
16248 &hf_ieee80211_twt_neg_type,
16249 &hf_ieee80211_twt_neg_type2_reserved2,
16250 NULL((void*)0),
16251};
16252static int * const ieee80211_twt_teardown_all[] = {
16253 &hf_ieee80211_twt_bcast_twt_id_reserved,
16254 &hf_ieee80211_twt_bcast_neg_type_reserved,
16255 &hf_ieee80211_twt_bcast_teardown_all_twt,
16256 NULL((void*)0),
16257};
16258
16259static unsigned
16260add_ff_s1g_twt_teardown(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16261{
16262 uint8_t twt_flow_id = tvb_get_uint8(tvb, offset);
16263
16264 // Bit 7 is means Teardown All TWT, and the other fields are reserved
16265 if (twt_flow_id & 0x80) {
16266 proto_tree_add_bitmask(tree, tvb, offset,
16267 hf_ieee80211_twt_bcast_teardown_all,
16268 ett_twt_tear_down_tree,
16269 ieee80211_twt_teardown_all,
16270 ENC_NA0x00000000);
16271 return 1;
16272 }
16273
16274 // Bits 5 and 6 are the negotiation type - See ieee80211.ax/D3.0 9.6.25.9
16275 switch ((twt_flow_id & 0x60) >> 5) {
16276 case 2:
16277 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16278 hf_ieee80211_twt_bcast_flow,
16279 ett_twt_tear_down_tree, ieee80211_twt_neg_type2,
16280 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16281 break;
16282
16283 case 3:
16284 // According to 11ax, first 5 bits are the BCAST TWT flow ID
16285 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16286 hf_ieee80211_twt_bcast_flow,
16287 ett_twt_tear_down_tree, ieee80211_twt_bcast_flow,
16288 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16289 break;
16290 case 0:
16291 case 1:
16292 // According to 11ah / 11ax, first 3 bits are the UCAST TWT flow ID
16293 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16294 hf_ieee80211_twt_individual_flow,
16295 ett_twt_tear_down_tree, ieee80211_twt_individual_flow,
16296 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16297 break;
16298 default:
16299 proto_tree_add_expert(tree, pinfo, &ei_ieee80211_twt_tear_down_bad_neg_type,
16300 tvb, offset, tvb_reported_length_remaining(tvb, offset));
16301 }
16302
16303 // The TWT Flow ID size
16304 return 1;
16305}
16306
16307static unsigned
16308add_ff_action_s1g(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16309{
16310 unsigned start = offset;
16311 uint8_t s1g_action;
16312
16313 offset += add_ff_category_code(tree, tvb, pinfo, offset);
16314
16315 s1g_action = tvb_get_uint8(tvb, offset);
16316 offset += add_ff_s1g_action(tree, tvb, pinfo, offset);
16317
16318 switch(s1g_action) {
16319 case S1G_ACT_AID_SWITCH_REQUEST0:
16320 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16321 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16322 break;
16323 case S1G_ACT_AID_SWITCH_RESPONSE1:
16324 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16325 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16326 break;
16327 case S1G_ACT_SYNC_CONTROL2:
16328 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16329 offset += add_ff_sync_control(tree, tvb, pinfo, offset);
16330 break;
16331 case S1G_ACT_STA_INFO_ANNOUNCE3:
16332 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16333 break;
16334 case S1G_ACT_EDCA_PARAM_SET4:
16335 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16336 break;
16337 case S1G_ACT_EL_OPERATION5:
16338 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16339 break;
16340 case S1G_ACT_TWT_SETUP6:
16341 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16342 offset += add_ff_s1g_twt_setup(tree, tvb, pinfo, offset);
16343 break;
16344 case S1G_ACT_TWT_TEARDOWN7:
16345 offset += add_ff_s1g_twt_teardown(tree, tvb, pinfo, offset);
16346 break;
16347 case S1G_ACT_SECT_GROUP_ID_LIST8:
16348 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16349 break;
16350 case S1G_ACT_SECT_ID_FEEDBACK9:
16351 offset += add_ff_sector_id_index(tree, tvb, pinfo, offset);
16352 break;
16353 case S1G_ACT_TWT_INFORMATION11:
16354 offset += add_ff_twt_information(tree, tvb, pinfo, offset);
16355 break;
16356 default:
16357 break;
16358 }
16359
16360 return offset - start;
16361}
16362
16363static unsigned
16364add_ff_action_protected_s1g(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16365{
16366 unsigned start = offset;
16367 uint8_t s1g_action;
16368
16369 offset += add_ff_category_code(tree, tvb, pinfo, offset);
16370
16371 s1g_action = tvb_get_uint8(tvb, offset);
16372 offset += add_ff_prot_s1g_action(tree, tvb, pinfo, offset);
16373
16374 switch(s1g_action) {
16375 case PROT_S1G_ACT_REACH_ADDR_UPDATE0:
16376 case PROT_S1G_ACT_RELAY_ACTIVATE_REQ1:
16377 case PROT_S1G_ACT_RELAY_ACTIVATE_RESP2:
16378 case PROT_S1G_ACT_HEADER_COMPRESSION3:
16379 // TODO
16380 break;
16381 case PROT_S1G_ACT_TWT_SETUP4:
16382 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16383 offset += add_ff_s1g_twt_setup(tree, tvb, pinfo, offset);
16384 break;
16385 case PROT_S1G_ACT_TWT_TEARDOWN5:
16386 offset += add_ff_s1g_twt_teardown(tree, tvb, pinfo, offset);
16387 break;
16388 case PROT_S1G_ACT_TWT_INFORMATION6:
16389 offset += add_ff_twt_information(tree, tvb, pinfo, offset);
16390 break;
16391 case PROT_S1G_ACT_AID_SWITCH_REQUEST7:
16392 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16393 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16394 break;
16395 case PROT_S1G_ACT_AID_SWITCH_RESPONSE8:
16396 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16397 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16398 break;
16399 case PROT_S1G_ACT_SYNC_CONTROL9:
16400 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16401 offset += add_ff_sync_control(tree, tvb, pinfo, offset);
16402 break;
16403 case PROT_S1G_ACT_STA_INFO_ANNOUNCE10:
16404 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16405 break;
16406 case PROT_S1G_ACT_EDCA_PARAM_SET11:
16407 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16408 break;
16409 case PROT_S1G_ACT_EL_OPERATION12:
16410 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16411 break;
16412 case PROT_S1G_ACT_SECT_GROUP_ID_LIST13:
16413 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16414 break;
16415 case PROT_S1G_ACT_SECT_ID_FEEDBACK14:
16416 offset += add_ff_sector_id_index(tree, tvb, pinfo, offset);
16417 break;
16418 default:
16419 break;
16420 }
16421
16422 return offset - start;
16423}
16424
16425#define HE_COMPRESSED_BEAMFORMING_AND_CQI0 0
16426#define HE_QUIET_TIME_PERIOD1 1
16427
16428static const range_string he_action_rvals[] = {
16429 { HE_COMPRESSED_BEAMFORMING_AND_CQI0, HE_COMPRESSED_BEAMFORMING_AND_CQI0,
16430 "HE Compressed Beamforming And CQI" },
16431 { HE_QUIET_TIME_PERIOD1, HE_QUIET_TIME_PERIOD1,
16432 "Quiet Time Period" },
16433 { HE_QUIET_TIME_PERIOD1 + 1, 255, "Reserved" },
16434 { 0, 0, NULL((void*)0) }
16435};
16436
16437#define HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0 0
16438
16439static const range_string protected_he_action_rvals[] = {
16440 { HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0, HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0,
16441 "HE BSS Color Change Announcement" },
16442 { HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0 + 1, 255, "Reserved" },
16443 { 0, 0, NULL((void*)0) }
16444};
16445
16446#define EHT_TID_LINK_MAP_REQ0 0
16447#define EHT_TID_LINK_MAP_RESP1 1
16448#define EHT_TID_LINK_MAP_TEAR_DOWN2 2
16449#define EHT_EPCS_PRIO_ACCESS_REQ3 3
16450#define EHT_EPCS_PRIO_ACCESS_RESP4 4
16451#define EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5 5
16452#define EHT_EML_OP_MODE_NOTIFICATION6 6
16453#define EHT_LINK_RECOMMENDATION7 7
16454#define EHT_MULTI_LINK_OP_UPDATE_REQ8 8
16455#define EHT_MULTI_LINK_OP_UPDATE_RESP9 9
16456#define EHT_LINK_RECONFIG_NOTIFY10 10
16457#define EHT_LINK_RECONFIG_REQ11 11
16458#define EHT_LINK_RECONFIG_RESP12 12
16459
16460static const range_string protected_eht_action_rvals[] = {
16461 { EHT_TID_LINK_MAP_REQ0, EHT_TID_LINK_MAP_REQ0,
16462 "EHT TID-to-Link Mapping Request" },
16463 { EHT_TID_LINK_MAP_RESP1, EHT_TID_LINK_MAP_RESP1,
16464 "EHT TID-to-Link Mapping Response" },
16465 { EHT_TID_LINK_MAP_TEAR_DOWN2, EHT_TID_LINK_MAP_TEAR_DOWN2,
16466 "EHT TID-to-Link Mapping Teardown" },
16467 { EHT_EPCS_PRIO_ACCESS_REQ3, EHT_EPCS_PRIO_ACCESS_REQ3,
16468 "EHT EPCS Priority Access Request" },
16469 { EHT_EPCS_PRIO_ACCESS_RESP4, EHT_EPCS_PRIO_ACCESS_RESP4,
16470 "EHT EPCS Priority Access Response" },
16471 { EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5, EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5,
16472 "EHT EPCS Priority Access Teardown" },
16473 { EHT_EML_OP_MODE_NOTIFICATION6, EHT_EML_OP_MODE_NOTIFICATION6,
16474 "EHT EML Operating Mode Notification" },
16475 { EHT_LINK_RECOMMENDATION7, EHT_LINK_RECOMMENDATION7,
16476 "EHT Link Recommendation" },
16477 { EHT_MULTI_LINK_OP_UPDATE_REQ8, EHT_MULTI_LINK_OP_UPDATE_REQ8,
16478 "EHT Multi-Link Operation Update Request" },
16479 { EHT_MULTI_LINK_OP_UPDATE_RESP9, EHT_MULTI_LINK_OP_UPDATE_RESP9,
16480 "EHT Multi-Link Operation Update Response" },
16481 { EHT_LINK_RECONFIG_NOTIFY10, EHT_LINK_RECONFIG_NOTIFY10,
16482 "EHT Link Reconfiguration Notify" },
16483 { EHT_LINK_RECONFIG_REQ11, EHT_LINK_RECONFIG_REQ11,
16484 "EHT Link Reconfiguration Request" },
16485 { EHT_LINK_RECONFIG_RESP12, EHT_LINK_RECONFIG_RESP12,
16486 "EHT Link Reconfiguration Response" },
16487 { EHT_LINK_RECONFIG_RESP12 + 1, 255, "Reserved" },
16488 { 0, 0, NULL((void*)0) }
16489};
16490
16491/*
16492 * This currently only works for SU, 20MHz, 40MHz and 80MHz and grouping 4 and 16.
16493 */
16494struct scidx_start_end {
16495 int start;
16496 int end;
16497};
16498
16499#define N_SCIDX_20MHZ_NG49 9
16500static const struct scidx_start_end scidx_20MHz_Ng4[N_SCIDX_20MHZ_NG49] = {
16501 { -122, -96 },
16502 { -96, -68 },
16503 { -68, -40 },
16504 { -44, -16 },
16505 { -16, 16 },
16506 { 16, 44 },
16507 { 40, 68 },
16508 { 68, 96 },
16509 { 96, 122 }
16510};
16511
16512#define N_SCIDX_20MHZ_NG169 9
16513static const struct scidx_start_end scidx_20MHz_Ng16[9] = {
16514 { -122, -84 },
16515 { -96, -64 },
16516 { -80, -32 },
16517 { -52, -4 },
16518 { -20, 20 },
16519 { 4, 52 },
16520 { 32, 80 },
16521 { 64, 96 },
16522 { 84, 122 }
16523};
16524
16525#define N_SCIDX_40MHZ_NG418 18
16526static const struct scidx_start_end scidx_40MHz_Ng4[N_SCIDX_40MHZ_NG418] = {
16527 { -500 + 256, -472 + 256 },
16528 { -476 + 256, -448 + 256 },
16529 { -488 + 256, -420 + 256 },
16530 { -420 + 256, -392 + 256 },
16531 { -392 + 256, -364 + 256 },
16532 { -368 + 256, -340 + 256 },
16533 { -340 + 256, -312 + 256 },
16534 { -312 + 256, -284 + 256 },
16535 { -288 + 256, -260 + 256 },
16536 { 260 - 256, 288 - 256 },
16537 { 284 - 256, 312 - 256 },
16538 { 312 - 256, 340 - 256 },
16539 { 340 - 256, 368 - 256 },
16540 { 364 - 256, 392 - 256 },
16541 { 392 - 256, 420 - 256 },
16542 { 420 - 256, 448 - 256 },
16543 { 448 - 256, 476 - 256 },
16544 { 472 - 256, 500 - 256 }
16545};
16546
16547#define N_SCIDX_40MHZ_NG1618 18
16548static const struct scidx_start_end scidx_40MHz_Ng16[N_SCIDX_40MHZ_NG1618] = {
16549 { -500 + 256, -468 + 256 },
16550 { -484 + 256, -436 + 256 },
16551 { -452 + 256, -420 + 256 },
16552 { -420 + 256, -388 + 256 },
16553 { -404 + 256, -356 + 256 },
16554 { -372 + 256, -340 + 256 },
16555 { -340 + 256, -308 + 256 },
16556 { -324 + 256, -276 + 256 },
16557 { -292 + 256, -260 + 245 },
16558 { 260 - 256, 292 - 256 },
16559 { 276 - 256, 324 - 256 },
16560 { 308 - 256, 340 - 256 },
16561 { 340 - 256, 322 - 256 },
16562 { 356 - 256, 404 - 256 },
16563 { 388 - 256, 420 - 256 },
16564 { 420 - 256, 452 - 256 },
16565 { 436 - 256, 484 - 256 },
16566 { 468 - 256, 500 - 256 }
16567};
16568
16569#define N_SCIDX_80MHZ_NG437 37
16570static const struct scidx_start_end scidx_80MHz_Ng4[N_SCIDX_80MHZ_NG437] = {
16571 { -500, -472 },
16572 { -476, -448 },
16573 { -448, -420 },
16574 { -420, -392 },
16575 { -392, -364 },
16576 { -368, -340 },
16577 { -340, -312 },
16578 { -312, -284 },
16579 { -288, -260 },
16580 { -260, -232 },
16581 { -232, -204 },
16582 { -204, -176 },
16583 { -180, -152 },
16584 { -152, -124 },
16585 { -124, -96 },
16586 { -100, -72 },
16587 { -72, -44 },
16588 { -44, -16 },
16589 { -16, 16 },
16590 { 16, 44 },
16591 { 44, 72 },
16592 { 72, 100 },
16593 { 96, 124 },
16594 { 124, 152 },
16595 { 152, 180 },
16596 { 176, 204 },
16597 { 204, 232 },
16598 { 232, 260 },
16599 { 260, 288 },
16600 { 284, 312 },
16601 { 312, 340 },
16602 { 340, 368 },
16603 { 364, 392 },
16604 { 392, 420 },
16605 { 420, 448 },
16606 { 448, 476 },
16607 { 472, 500 }
16608};
16609
16610#define N_SCIDX_80MHZ_NG1637 37
16611static const struct scidx_start_end scidx_80MHz_Ng16[N_SCIDX_80MHZ_NG1637] = {
16612 { -500, -468 },
16613 { -484, -436 },
16614 { -452, -420 },
16615 { -420, -388 },
16616 { -404, -356 },
16617 { -372, -340 },
16618 { -340, -308 },
16619 { -324, -276 },
16620 { -292, -260 },
16621 { -260, -228 },
16622 { -244, -196 },
16623 { -212, -164 },
16624 { -180, -148 },
16625 { -164, -116 },
16626 { -132, -84 },
16627 { -100, -68 },
16628 { -84, -36 },
16629 { -52, -4 },
16630 { -20, 20 },
16631 { 4, 52 },
16632 { 36, 84 },
16633 { 68, 100 },
16634 { 84, 132 },
16635 { 116, 164 },
16636 { 148, 180 },
16637 { 164, 212 },
16638 { 196, 244 },
16639 { 228, 260 },
16640 { 260, 292 },
16641 { 276, 324 },
16642 { 308, 340 },
16643 { 340, 372 },
16644 { 356, 404 },
16645 { 388, 420 },
16646 { 420, 452 },
16647 { 436, 484 },
16648 { 468, 500 },
16649};
16650
16651#define SU_FEEDBACK(0) (0)
16652#define MU_FEEDBACK(1) (1)
16653#define CQI_FEEDBACK(2) (2)
16654#define RESERVED_FEEDBACK(3) (3)
16655
16656#define BW_20MHz(0) (0)
16657#define BW_40MHz(1) (1)
16658#define BW_80MHz(2) (2)
16659#define BW_160MHz(3) (3)
16660
16661#define SCIDX_END_SENTINAL(0x80000000) (0x80000000)
16662
16663static int
16664next_he_scidx(int scidx, int bw _U___attribute__((unused)), int grouping _U___attribute__((unused)), int feedback _U___attribute__((unused)),
16665 int ru_start_index, int ru_end_index)
16666{
16667 int incr = 4;
16668
16669 /*
16670 * We need to check the correct bw value to determine if we have hit
16671 * the end of the range of SCIDXes.
16672 */
16673 switch (bw) {
16674 case BW_20MHz(0):
16675 if (grouping == 0) {
16676 if (ru_end_index >= N_SCIDX_20MHZ_NG49 ||
16677 scidx == scidx_20MHz_Ng4[ru_end_index].end) /* we returned the max */
16678 return SCIDX_END_SENTINAL(0x80000000);
16679 } else {
16680 if (ru_end_index >= N_SCIDX_20MHZ_NG169 ||
16681 scidx == scidx_20MHz_Ng16[ru_end_index].end)
16682 return SCIDX_END_SENTINAL(0x80000000);
16683 }
16684 break;
16685 case BW_40MHz(1):
16686 if (grouping == 0) {
16687 if (ru_end_index >= N_SCIDX_40MHZ_NG418 ||
16688 scidx == scidx_40MHz_Ng4[ru_end_index].end)
16689 return SCIDX_END_SENTINAL(0x80000000);
16690 } else {
16691 if (ru_end_index >= N_SCIDX_40MHZ_NG1618 ||
16692 scidx == scidx_40MHz_Ng16[ru_end_index].end)
16693 return SCIDX_END_SENTINAL(0x80000000);
16694 }
16695 break;
16696 case BW_80MHz(2):
16697 if (grouping == 0) {
16698 if (ru_end_index >= N_SCIDX_80MHZ_NG437 ||
16699 scidx == scidx_80MHz_Ng4[ru_end_index].end)
16700 return SCIDX_END_SENTINAL(0x80000000);
16701 } else {
16702 if (ru_end_index >= N_SCIDX_80MHZ_NG1637 ||
16703 scidx == scidx_80MHz_Ng16[ru_end_index].end)
16704 return SCIDX_END_SENTINAL(0x80000000);
16705 }
16706 break;
16707 case BW_160MHz(3):
16708 return SCIDX_END_SENTINAL(0x80000000);
16709 }
16710
16711 /*
16712 * Check if this is the first time though and figure out the starting
16713 * SCIDX.
16714 */
16715 if (scidx == (int)SCIDX_END_SENTINAL(0x80000000))
16716 switch (bw) {
16717 case BW_20MHz(0):
16718 if (grouping == 0) {
16719 if (ru_start_index >= N_SCIDX_20MHZ_NG49)
16720 return SCIDX_END_SENTINAL(0x80000000);
16721 else
16722 return scidx_20MHz_Ng4[ru_start_index].start;
16723 } else {
16724 if (ru_start_index >= N_SCIDX_20MHZ_NG169)
16725 return SCIDX_END_SENTINAL(0x80000000);
16726 else
16727 return scidx_20MHz_Ng16[ru_start_index].start;
16728 }
16729 case BW_40MHz(1):
16730 if (grouping == 0) {
16731 if (ru_start_index >= N_SCIDX_40MHZ_NG418)
16732 return SCIDX_END_SENTINAL(0x80000000);
16733 else
16734 return scidx_40MHz_Ng4[ru_start_index].start;
16735 } else {
16736 if (ru_start_index >= N_SCIDX_40MHZ_NG1618)
16737 return SCIDX_END_SENTINAL(0x80000000);
16738 else
16739 return scidx_40MHz_Ng16[ru_start_index].start;
16740 }
16741 case BW_80MHz(2):
16742 if (grouping == 0) {
16743 if (ru_start_index >= N_SCIDX_80MHZ_NG437)
16744 return SCIDX_END_SENTINAL(0x80000000);
16745 else
16746 return scidx_80MHz_Ng4[ru_start_index].start;
16747 } else {
16748 if (ru_start_index >= N_SCIDX_80MHZ_NG1637)
16749 return SCIDX_END_SENTINAL(0x80000000);
16750 else
16751 return scidx_80MHz_Ng16[ru_start_index].start;
16752 }
16753 case BW_160MHz(3):
16754 return SCIDX_END_SENTINAL(0x80000000);
16755 }
16756
16757 /*
16758 * for BW_20MHz it is more complex, and the start and end sets have an
16759 * increment of 2, and around zero they go -4, -2, 2, 4 as well.
16760 */
16761 if (bw == BW_20MHz(0)) {
16762 if (grouping == 0) {
16763 if (scidx == -122)
16764 return -120;
16765 if (scidx == -4)
16766 return -2;
16767 if (scidx == 2)
16768 return 4;
16769 if (scidx == 120)
16770 return 122;
16771 } else {
16772 if (scidx == -122)
16773 return -116;
16774 if (scidx == -4)
16775 return -2;
16776 if (scidx == -2)
16777 return 2;
16778 if (scidx == 2)
16779 return 4;
16780 if (scidx == 116)
16781 return 122;
16782 }
16783 }
16784
16785 if (grouping == 1)
16786 incr = 16;
16787
16788 scidx += incr;
16789
16790 if (scidx == 0) /* Not sure if this is needed */
16791 scidx += incr;
16792
16793 return scidx;
16794}
16795
16796/*
16797 * This might have a problem if there are not enough bits in the TVB.
16798 * Will only handle a limited number of bits.
16799 */
16800static uint16_t
16801he_get_bits(tvbuff_t *tvb, int bit_offset, int bit_len)
16802{
16803 uint32_t bits;
16804 int byte_offset = bit_offset / 8;
16805 int bit_start = bit_offset % 8;
16806 int bit_mask = (1 << bit_len) - 1; /* Select that many bits */
16807 int remaining_length = tvb_reported_length_remaining(tvb, byte_offset);
16808
16809 if (remaining_length >= 3)
16810 bits = tvb_get_letoh24(tvb, byte_offset);
16811 else if (remaining_length == 2)
16812 bits = tvb_get_letohs(tvb, byte_offset);
16813 else
16814 bits = tvb_get_uint8(tvb, byte_offset);
16815
16816 bits = bits >> bit_start;
16817
16818 return bits & bit_mask;
16819}
16820
16821static int
16822dissect_he_feedback_matrix(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
16823 int offset, int bit_offset, int scidx,
16824 int nr, int nc, int phi_bits, int psi_bits,
16825 int hf)
16826{
16827 int ri, ci;
16828 int start_bit_offset = bit_offset;
16829 int start_offset = offset;
16830 wmem_strbuf_t *angles = wmem_strbuf_new(pinfo->pool, NULL((void*)0));
16831
16832 if (nc == nr) /* If they are the same, reduce Nc by one */
16833 nc -= 1;
16834
16835 wmem_strbuf_append_printf(angles, "%d", scidx);
16836 /* Reset to the start bit offset */
16837 bit_offset = start_bit_offset;
16838
16839 for (ci = 1; ci <= nc; ci++) {
16840 for (ri = ci; ri < nr; ri++) {
16841 int angle = he_get_bits(tvb, bit_offset, phi_bits);
16842 wmem_strbuf_append_printf(angles, ", φ%d%d:%d", ri, ci, angle);
16843 bit_offset += phi_bits;
16844 }
16845 for (ri = ci + 1; ri <= nr; ri++) {
16846 int angle = he_get_bits(tvb, bit_offset, psi_bits);
16847 wmem_strbuf_append_printf(angles, ", ψ%d%d:%d", ri, ci, angle);
16848 bit_offset += psi_bits;
16849 }
16850 }
16851
16852 /* Update this */
16853 proto_tree_add_string(tree, hf, tvb, offset,
16854 ((start_bit_offset + 7) / 8) - start_offset,
16855 wmem_strbuf_get_str(angles));
16856
16857 return bit_offset;
16858}
16859
16860static int * const he_mimo_control_headers[] = {
16861 &hf_ieee80211_he_mimo_control_nc_index,
16862 &hf_ieee80211_he_mimo_control_nr_index,
16863 &hf_ieee80211_he_mimo_control_bw,
16864 &hf_ieee80211_he_mimo_control_grouping,
16865 &hf_ieee80211_he_mimo_control_codebook_info,
16866 &hf_ieee80211_he_mimo_control_feedback_type,
16867 &hf_ieee80211_he_mimo_control_remaining_feedback_segs,
16868 &hf_ieee80211_he_mimo_control_first_feedback_seg,
16869 &hf_ieee80211_he_mimo_control_ru_start_index,
16870 &hf_ieee80211_he_mimo_control_ru_end_index,
16871 &hf_ieee80211_he_mimo_control_sounding_dialog_token_num,
16872 &hf_ieee80211_he_mimo_control_reserved,
16873 NULL((void*)0)
16874};
16875
16876/*
16877 * Handle compressed beamforming matrices and CQI
16878 */
16879static unsigned
16880dissect_compressed_beamforming_and_cqi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16881{
16882 int byte_count = 0;
16883 uint64_t mimo_cntl = tvb_get_letoh40(tvb, offset);
16884 int nc = 0, nr = 0, i;
16885 int bw, grouping, codebook, feedback, bit_offset, scidx;
16886 int phi_bits = 0, psi_bits = 0;
16887 proto_tree *snr_tree = NULL((void*)0), *feedback_tree = NULL((void*)0);
16888 int start_offset;
16889 int ru_start_index, ru_end_index;
16890
16891 nc = (int)((mimo_cntl & 0x07) + 1);
16892 nr = (int)(((mimo_cntl >> 3) & 0x07) + 1);
16893 bw = (int)((mimo_cntl >> 6) & 0x03);
16894 grouping = (int)((mimo_cntl >> 8) & 0x01);
16895 codebook = (int)((mimo_cntl >> 9) & 0x01);
16896 feedback = (int)((mimo_cntl >> 10) & 0x03);
16897 ru_start_index = (int)((mimo_cntl >> 16) & 0x7F);
16898 ru_end_index = (int)((mimo_cntl >> 23) & 0x7F);
16899
16900 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16901 hf_ieee80211_he_mimo_control_field, ett_ff_he_mimo_control,
16902 he_mimo_control_headers, ENC_LITTLE_ENDIAN0x80000000,
16903 BMT_NO_APPEND0x01);
16904 offset += 5;
16905
16906 snr_tree = proto_tree_add_subtree(tree, tvb, offset, nc,
16907 ett_ff_he_mimo_beamforming_report_snr, NULL((void*)0),
16908 "Average Signal to Noise Ratio");
16909
16910 for (i = 0; i < nc; i++) {
16911 int8_t snr = tvb_get_int8(tvb, offset);
16912
16913 proto_tree_add_int_format(snr_tree,
16914 hf_ieee80211_he_compressed_beamforming_report_snr, tvb, offset, 1,
16915 snr, "Stream %d: %s%0.2fdB (0x%02x)", i, (snr == 127 ? ">=" :
16916 (snr == -128 ? "<=" : "")),
16917 (float)((float)88 + snr)/4,
16918 (uint8_t)snr);
16919 offset++;
16920 }
16921
16922 /*
16923 * The rest of the data consists of the compressed beamforming matrices, one
16924 * for each SCIDX per group. Each matrix consists of phi and psi angles
16925 * encoded using the number of bits specified using the codebook field.
16926 *
16927 * The matrices contain a number entries related to Nr -1 & Nc except when
16928 * Nr == Nc, and then it is Nr -1 x Nc -1, with Nr - 1 phi angles, Nc - 1
16929 * psi angles, Nr - 2 phi angles, Nc - 2 psi angles ...
16930 */
16931 if (feedback == 0) { /* SU */
16932 if (codebook == 0) {
16933 psi_bits = 2; phi_bits = 4;
16934 } else {
16935 psi_bits = 4; phi_bits = 6;
16936 }
16937 } else if (feedback == 1) { /* MU */
16938 if (grouping == 1) {
16939 psi_bits = 9; phi_bits = 7;
16940 } else {
16941 if (codebook == 0) {
16942 psi_bits = 5; phi_bits = 7;
16943 } else {
16944 psi_bits = 7; phi_bits = 9;
16945 }
16946 }
16947 } /* DO something about CQI etc. */
16948
16949 feedback_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
16950 ett_ff_he_mimo_feedback_matrices, NULL((void*)0),
16951 "Feedback Matrices");
16952
16953 start_offset = offset;
16954 bit_offset = offset * 8;
16955 scidx = SCIDX_END_SENTINAL(0x80000000);
16956 while ((scidx = next_he_scidx(scidx, bw, grouping, feedback,
16957 ru_start_index, ru_end_index)) != (int)SCIDX_END_SENTINAL(0x80000000)) {
16958 int prev_bit_offset = bit_offset;
16959 bit_offset = dissect_he_feedback_matrix(feedback_tree, tvb, pinfo, offset,
16960 bit_offset, scidx, nr, nc, phi_bits, psi_bits,
16961 hf_ieee80211_he_compressed_beamform_scidx);
16962 if (bit_offset <= prev_bit_offset) {
16963 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
16964 break;
16965 }
16966
16967 offset = bit_offset / 8;
16968 }
16969
16970 offset = (bit_offset + 7) / 8;
16971 proto_item_set_len(feedback_tree, offset - start_offset);
16972
16973 /* Sometimes the FCS is in the buffer as well ... */
16974 byte_count = tvb_reported_length_remaining(tvb, offset);
16975 if (byte_count > 0)
16976 offset += byte_count; /* Should fix the real problem */
16977
16978 return offset;
16979}
16980
16981enum quiet_time_period_control {
16982 QTP_CONTROL_SETUP = 0,
16983 QTP_CONTROL_REQUEST = 1,
16984 QTP_CONTROL_RESPONSE = 2,
16985};
16986
16987static const range_string quiet_time_period_control_rvals[] = {
16988 { QTP_CONTROL_SETUP, QTP_CONTROL_SETUP, "Quiet Time Period Setup" },
16989 { QTP_CONTROL_REQUEST, QTP_CONTROL_REQUEST, "Quiet Time Period Request" },
16990 { QTP_CONTROL_RESPONSE, QTP_CONTROL_RESPONSE, "Quiet Time Period Response" },
16991 { QTP_CONTROL_RESPONSE +1 , 255, "Reserved" },
16992 { 0, 0, NULL((void*)0) }
16993};
16994
16995static void
16996dissect_bss_color_change(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
16997proto_tree *tree, int offset, int len _U___attribute__((unused)));
16998
16999static unsigned
17000dissect_quiet_time_period(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17001proto_tree *tree, int offset, int len _U___attribute__((unused)))
17002{
17003 uint8_t control = tvb_get_uint8(tvb, offset);
17004
17005 proto_tree_add_item(tree, hf_ieee80211_he_qtp_control, tvb, offset, 1, ENC_NA0x00000000);
17006 offset += 1;
17007
17008 switch (control)
17009 {
17010 case QTP_CONTROL_SETUP:
17011 proto_tree_add_item(tree, hf_ieee80211_he_qtp_setup_quiet_period_duration, tvb, offset,
17012 1, ENC_NA0x00000000);
17013 offset += 1;
17014 proto_tree_add_item(tree, hf_ieee80211_he_qtp_setup_srv_specific_identif, tvb, offset,
17015 2, ENC_LITTLE_ENDIAN0x80000000);
17016 offset += 2;
17017 break;
17018
17019 case QTP_CONTROL_REQUEST:
17020 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_dialog_token, tvb, offset, 2,
17021 ENC_LITTLE_ENDIAN0x80000000);
17022 offset += 2;
17023 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_quiet_period_offset, tvb, offset,
17024 1, ENC_NA0x00000000);
17025 offset += 1;
17026 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_quiet_period_duration, tvb, offset,
17027 2, ENC_LITTLE_ENDIAN0x80000000);
17028 offset += 2;
17029 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_quiet_period_interval, tvb, offset,
17030 1, ENC_NA0x00000000);
17031 offset += 1;
17032 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_repetition_count, tvb, offset, 1,
17033 ENC_NA0x00000000);
17034 offset += 1;
17035 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_srv_specific_identif, tvb, offset,
17036 2, ENC_LITTLE_ENDIAN0x80000000);
17037 offset += 2;
17038 break;
17039
17040 case QTP_CONTROL_RESPONSE:
17041 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_dialog_token, tvb, offset, 2,
17042 ENC_LITTLE_ENDIAN0x80000000);
17043 offset += 2;
17044 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_status_code, tvb, offset, 1,
17045 ENC_NA0x00000000);
17046 offset += 1;
17047 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_quiet_period_offset, tvb, offset,
17048 1, ENC_NA0x00000000);
17049 offset += 1;
17050 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_quiet_period_duration, tvb, offset,
17051 2, ENC_LITTLE_ENDIAN0x80000000);
17052 offset += 2;
17053 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_quiet_period_interval, tvb, offset,
17054 1, ENC_NA0x00000000);
17055 offset += 1;
17056 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_repetition_count, tvb, offset,
17057 1, ENC_NA0x00000000);
17058 offset += 1;
17059 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_srv_specific_identif, tvb, offset,
17060 2, ENC_LITTLE_ENDIAN0x80000000);
17061 offset += 2;
17062 break;
17063
17064 default:
17065 /* Reserved */
17066 break;
17067 }
17068
17069 return offset;
17070}
17071
17072static unsigned
17073add_ff_action_he(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17074{
17075 unsigned start = offset;
17076 uint8_t he_action;
17077 uint8_t length;
17078 //uint8_t elem_id, elem_id_extension;
17079 proto_item *item;
17080 proto_tree *subtree;
17081 unsigned int len = tvb_reported_length_remaining(tvb, offset);
17082
17083 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17084
17085 he_action = tvb_get_uint8(tvb, offset);
17086
17087 item = proto_tree_add_item(tree, hf_ieee80211_ff_he_action, tvb, offset, 1, ENC_NA0x00000000);
17088 offset += 1;
17089
17090 subtree = proto_item_add_subtree(item, ett_ff_he_action);
17091
17092
17093 switch (he_action) {
17094 case HE_COMPRESSED_BEAMFORMING_AND_CQI0:
17095 proto_tree_add_uint_format(subtree, hf_ieee80211_he_beamforming_report_len,
17096 tvb, offset, 0, len, "Total length: %u", len);
17097 offset = dissect_compressed_beamforming_and_cqi(subtree, tvb, pinfo, offset);
17098 break;
17099
17100 case HE_QUIET_TIME_PERIOD1:
17101 //elem_id = tvb_get_uint8(tvb, offset);
17102 length = tvb_get_uint8(tvb, offset + 1);
17103 //elem_id_extension = tvb_get_uint8(tvb, offset + 2);
17104 /* Should check following condition?
17105 * elem_id == TAG_ELEMENT_ID_EXTENSION && elem_id_extension == ETAG_QUIET_TIME_PERIOD
17106 */
17107 offset = dissect_quiet_time_period(tvb, pinfo, subtree, offset + 3, length);
17108 break;
17109
17110 default:
17111 break;
17112 }
17113 return offset - start;
17114}
17115
17116static unsigned
17117add_ff_action_protected_he(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17118{
17119 unsigned start = offset;
17120 uint8_t protected_he_action;
17121 uint8_t length;
17122 //uint8_t elem_id, elem_id_extension;
17123 proto_item *item;
17124 proto_tree *subtree;
17125
17126 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17127
17128 protected_he_action = tvb_get_uint8(tvb, offset);
17129
17130 item = proto_tree_add_item(tree, hf_ieee80211_ff_protected_he_action, tvb, offset,
17131 1, ENC_NA0x00000000);
17132 offset += 1;
17133
17134 subtree = proto_item_add_subtree(item, ett_ff_protected_he_action);
17135
17136
17137 switch (protected_he_action) {
17138 case HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0:
17139 //elem_id = tvb_get_uint8(tvb, offset);
17140 length = tvb_get_uint8(tvb, offset + 1);
17141 //elem_id_extension = tvb_get_uint8(tvb, offset + 2);
17142 /* Should check following condition?
17143 * elem_id == TAG_ELEMENT_ID_EXTENSION && elem_id_extension == ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT
17144 */
17145 dissect_bss_color_change(tvb, pinfo, subtree, offset + 3, length);
17146 offset += 5;
17147 break;
17148
17149 default:
17150 break;
17151 }
17152
17153 return offset - start;
17154}
17155
17156static unsigned
17157add_ff_action_protected_ftm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17158{
17159 unsigned start = offset;
17160 uint8_t action;
17161
17162 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17163 action = tvb_get_uint8(tvb, offset);
17164 proto_tree_add_item(tree, hf_ieee80211_ff_protected_ftm_action, tvb, offset, 1, ENC_NA0x00000000);
17165 offset += 1;
17166
17167 col_set_str(pinfo->cinfo, COL_INFO, val_to_str_const(action, protected_ftm_action_vals, "Unknown"));
17168
17169 switch (action) {
17170 case 1:
17171 offset += add_ff_ftm_request(tree, tvb, pinfo, offset);
17172 break;
17173 case 2:
17174 offset += add_ff_ftm(tree, tvb, pinfo, offset);
17175 break;
17176 case 3:
17177 offset += add_ff_lmr_report(tree, tvb, pinfo, offset);
17178 break;
17179 default: /* reserved */
17180 break;
17181 }
17182
17183 return offset - start;
17184}
17185
17186static int * const eht_reconfig_link_id_hdrs[] = {
17187 &hf_ieee80211_eht_reconfig_link_id,
17188 &hf_ieee80211_eht_reconfig_link_id_reserved,
17189 NULL((void*)0)
17190};
17191
17192static unsigned
17193add_ff_count(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
17194{
17195 proto_tree_add_item(tree, hf_ieee80211_ff_count, tvb, offset, 1,
17196 ENC_LITTLE_ENDIAN0x80000000);
17197 return 1;
17198}
17199
17200static unsigned
17201add_ff_action_protected_eht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17202{
17203 unsigned start = offset;
17204 uint8_t protected_eht_action;
17205 proto_item *item;
17206 int len = 0, count, i, id;
17207 uint16_t status;
17208 bool_Bool invalid = false0;
17209 /* Default Extension Element is Multi-Link */
17210 uint8_t ext_ids[1] = {ETAG_MULTI_LINK107};
17211 proto_tree *sub_tree;
17212
17213 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17214
17215 protected_eht_action = tvb_get_uint8(tvb, offset);
17216
17217 item = proto_tree_add_item(tree, hf_ieee80211_ff_protected_eht_action, tvb,
17218 offset, 1, ENC_NA0x00000000);
17219 offset += 1;
17220
17221 switch (protected_eht_action) {
17222 case EHT_TID_LINK_MAP_REQ0:
17223 ext_ids[0] = ETAG_TID_TO_LINK_MAPPING109;
17224 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17225
17226 /*
17227 * Next contains one or two TID-To-Link mappings. We have to look into
17228 * the elements to verify them because we don't have the length of this
17229 * element and there might be other IEs after us.
17230 */
17231 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17232 len = tvb_get_uint8(tvb, offset + 1);
17233 } else {
17234 invalid = true1;
17235 }
17236 if (!invalid && (len >= 1) &&
17237 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17238 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17239 offset += len + 2;
17240 } else {
17241 invalid = true1;
17242 }
17243 if (invalid) {
17244 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17245 "Invalid TID_TO_LINK_MAPPING_REQUEST. "
17246 "There should be one or two Tid-To-Link IEs "
17247 "but none found");
17248 break;
17249 }
17250
17251 len = 0;
17252 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17253 len = tvb_get_uint8(tvb, offset + 1);
17254 }
17255 if ((len >= 1) &&
17256 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17257 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17258 offset += len + 2;
17259 }
17260 break;
17261 case EHT_TID_LINK_MAP_RESP1:
17262 ext_ids[0] = ETAG_TID_TO_LINK_MAPPING109;
17263 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17264
17265 status = tvb_get_ntohs(tvb, offset);
17266 offset += add_ff_status_code(tree, tvb, pinfo, offset);
17267 if (status == 134) {
17268 /* There should be one or two TID-To-Link mappings. */
17269 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17270 len = tvb_get_uint8(tvb, offset + 1);
17271 } else {
17272 invalid = true1;
17273 }
17274 if (!invalid && (len >= 1) &&
17275 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17276 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17277 offset += len + 2;
17278 } else {
17279 invalid = true1;
17280 }
17281 if (invalid) {
17282 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17283 "Invalid TID_TO_LINK_MAPPING_RESPONSE. "
17284 "There should be one or two Tid-To-Link IEs "
17285 "but none found");
17286 break;
17287 }
17288
17289 len = 0;
17290 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17291 len = tvb_get_uint8(tvb, offset + 1);
17292 }
17293 if ((len >= 1) &&
17294 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17295 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17296 offset += len + 2;
17297 }
17298 }
17299 break;
17300 case EHT_TID_LINK_MAP_TEAR_DOWN2:
17301 /* Seems to be nothing to do here */
17302 break;
17303 case EHT_EPCS_PRIO_ACCESS_REQ3:
17304 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17305 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17306 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17307 NULL((void*)0), 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0));
17308 }
17309 break;
17310 case EHT_EPCS_PRIO_ACCESS_RESP4:
17311 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17312 offset += add_ff_status_code(tree, tvb, pinfo, offset);
17313 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17314 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17315 NULL((void*)0), 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0));
17316 }
17317 break;
17318 case EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5:
17319 break;
17320 case EHT_EML_OP_MODE_NOTIFICATION6:
17321 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17322 offset += dissect_eht_eml_control_field(tree, tvb, pinfo, offset);
17323 break;
17324 case EHT_LINK_RECOMMENDATION7:
17325 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
17326 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17327 len = tvb_get_uint8(tvb, offset + 1);
17328 } else {
17329 invalid = true1;
17330 }
17331 ext_ids[0] = ETAG_AID_BITMAP134;
17332 if (!invalid && (len >= 1) &&
17333 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17334 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17335 offset += len + 2;
17336 } else {
17337 invalid = true1;
17338 }
17339 if (invalid) {
17340 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17341 "Invalid LINK_RECOMMENDATION. "
17342 "There should be AID_BITMAP element "
17343 "but none found");
17344 break;
17345 }
17346
17347 invalid = false0;
17348 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17349 len = tvb_get_uint8(tvb, offset + 1);
17350 } else {
17351 invalid = true1;
17352 }
17353 ext_ids[0] = ETAG_MULTI_LINK_TRAFFIC110;
17354 if (!invalid && (len >= 1) &&
17355 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17356 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17357 offset += len + 2;
17358 } else {
17359 invalid = true1;
17360 }
17361 if (invalid) {
17362 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17363 "Invalid LINK_RECOMMENDATION. "
17364 "There should be MULTI_LINK_TRAFFIC element "
17365 "but none found");
17366 break;
17367 }
17368 break;
17369 case EHT_MULTI_LINK_OP_UPDATE_REQ8:
17370 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17371 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17372 len = tvb_get_uint8(tvb, offset + 1);
17373 } else {
17374 invalid = true1;
17375 }
17376 if (!invalid && (len >= 1)) {
17377 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17378 NULL((void*)0), 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0));
17379 } else {
17380 invalid = true1;
17381 }
17382 if (invalid) {
17383 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17384 "Invalid Multi-Link Operation Update Request. "
17385 "There should be Reconf Multi-Link element "
17386 "but none found");
17387 break;
17388 }
17389 break;
17390 case EHT_MULTI_LINK_OP_UPDATE_RESP9:
17391 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17392 offset += add_ff_status_code(tree, tvb, pinfo, offset);
17393 break;
17394 case EHT_LINK_RECONFIG_NOTIFY10:
17395 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17396 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17397 len = tvb_get_uint8(tvb, offset + 1);
17398 } else {
17399 invalid = TRUE(!(0));
17400 }
17401 if (!invalid && (len >= 1)) {
17402 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17403 NULL((void*)0), 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0));
17404 } else {
17405 invalid = TRUE(!(0));
17406 }
17407 if (invalid) {
17408 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17409 "Invalid Link Reconfiguration Notify. "
17410 "There should be Reconf Multi-Link element "
17411 "but none found");
17412 break;
17413 }
17414 break;
17415 case EHT_LINK_RECONFIG_REQ11:
17416 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17417 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17418 len = tvb_get_uint8(tvb, offset + 1);
17419 } else {
17420 invalid = TRUE(!(0));
17421 }
17422 if (!invalid && (len >= 1)) {
17423 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17424 NULL((void*)0), 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0));
17425 } else {
17426 invalid = TRUE(!(0));
17427 }
17428 if (invalid) {
17429 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17430 "Invalid Link Reconfiguration Req. "
17431 "There should be Reconf Multi-Link element "
17432 "but none found");
17433 break;
17434 }
17435 ext_ids[0] = ETAG_OCI54;
17436 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17437 len = tvb_get_uint8(tvb, offset + 1);
17438 } else {
17439 /* OCI element field is optionally present */
17440 break;
17441 }
17442 if (!invalid && (len >= 1) &&
17443 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17444 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0)) > 0)) {
17445 offset += len + 2;
17446 } else {
17447 invalid = TRUE(!(0));
17448 }
17449 if (invalid) {
17450 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17451 "Invalid Link Reconfiguration Req. "
17452 "There should be OCI element but none found");
17453 break;
17454 }
17455 break;
17456 case EHT_LINK_RECONFIG_RESP12:
17457 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17458 count = tvb_get_uint8(tvb, offset);
17459 offset += add_ff_count(tree, tvb, pinfo, offset);
17460 if (count == 0)
17461 break;
17462
17463 sub_tree = proto_tree_add_subtree(tree, tvb, offset, count * 3,
17464 ett_eht_reconfig_status_list, NULL((void*)0),
17465 "Reconfiguration Status List");
17466 for (i = 0; i < count; i++) {
17467 proto_tree_add_bitmask(sub_tree, tvb, offset,
17468 hf_ieee80211_eht_reconfig_link_id_info,
17469 ett_eht_multi_link_common_info_link_id,
17470 eht_reconfig_link_id_hdrs, ENC_NA0x00000000);
17471 offset += 1;
17472 proto_tree_add_item(sub_tree, hf_ieee80211_eht_reconfig_status_code, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17473 offset += 2;
17474 }
17475
17476 if (tvb_captured_length_remaining(tvb, offset) <= 0)
17477 break;
17478
17479 /* Check next is Group Key Data */
17480 id = tvb_get_uint8(tvb, offset);
17481 if (id != 0xdd && id != 0xff) {
17482 sub_tree = proto_tree_add_subtree(tree, tvb, offset, id,
17483 ett_eht_group_key_data, NULL((void*)0),
17484 "Group Key Data");
17485 proto_tree_add_item(sub_tree, hf_ieee80211_eht_group_key_data_length, tvb, offset, 1, ENC_NA0x00000000);
17486 offset += 1;
17487 while (tvb_reported_length_remaining(tvb, offset)) {
17488 id = tvb_get_uint8(tvb, offset);
17489 /* Key Data should be MLO KDEs */
17490 if (id != 0xdd)
17491 break;
17492 offset += add_tagged_field(pinfo, sub_tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
17493 }
17494 }
17495 break;
17496 default:
17497 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17498 "Reserved Protected EHT Action %u",
17499 protected_eht_action);
17500
17501 break;
17502 }
17503
17504 return offset - start;
17505}
17506
17507/*
17508 * Structure for handling the EHT scidx info. Allows for a compact
17509 * representation.
17510 */
17511struct scidx_part {
17512 unsigned start_val; /* What we start at */
17513 bool_Bool use_ng; /* Should we use Ng or the inc next */
17514 unsigned inc; /* The increment when not using Ng */
17515 unsigned stop_val; /* When we should stop */
17516 bool_Bool last_ent; /* This is the last one in the list */
17517};
17518
17519struct scidx_ctx {
17520 uint8_t ru_index;
17521 const struct scidx_part *scidx_array;
17522 uint8_t ng;
17523 bool_Bool just_inited;
17524 unsigned last_val;
17525};
17526
17527static const struct scidx_part ru_242_tone_1_20MHz_ng4[] = {
17528 { -122, false0, 2, -120, false0 },
17529 { -120, true1, 0, -4, false0 },
17530 { -2, false0, 4, 2, false0 },
17531 { 4, true1, 0, 120, false0 },
17532 { 120, false0, 2, 122, true1 }
17533};
17534
17535static const struct scidx_part ru_242_tone_1_20MHz_ng16[] = {
17536 { -122, false0, 6, -116, false0 },
17537 { -116, true1, 0, -4, false0 },
17538 { -2, false0, 4, 2, false0 },
17539 { 4, true1, 0, 116, false0 },
17540 { 116, false0, 6, 122, true1 }
17541};
17542
17543/* Here, there is one per RU index */
17544/*Start, UseNg, Inc,End, last */
17545static const struct scidx_part ru_242_tone_40MHz[] = {
17546 { -244, true1, 0, -4, true1 },
17547 { 4, true1, 0, 244, true1 }
17548};
17549
17550static const struct scidx_part ru_242_tone_80MHz[] = {
17551 { -500, true1, 0, -260, true1 },
17552 { -252, true1, 0, -12, true1 },
17553 { 12, true1, 0, 252, true1 },
17554 { 260, true1, 0, 500, true1 }
17555};
17556
17557static const struct scidx_part ru_242_tone_160MHz[] = {
17558 { -1012, true1, 0, -772, true1 },
17559 { -764, true1, 0, -524, true1 },
17560 { -500, true1, 0, -260, true1 },
17561 { -252, true1, 0, -12, true1 },
17562 { 12, true1, 0, 252, true1 },
17563 { 260, true1, 0, 500, true1 },
17564 { 524, true1, 0, 764, true1 },
17565 { 772, true1, 0, 1012, true1 }
17566};
17567
17568static const struct scidx_part ru_242_tone_320MHz[] = {
17569 { -2036, true1, 0, -1796, true1 },
17570 { -1788, true1, 0, -1548, true1 },
17571 { -1524, true1, 0, -1284, true1 },
17572 { -1276, true1, 0, -1036, true1 },
17573 { -1012, true1, 0, -772, true1 },
17574 { -764, true1, 0, -524, true1 },
17575 { -500, true1, 0, -260, true1 },
17576 { -252, true1, 0, -12, true1 },
17577 { 12, true1, 0, 252, true1 },
17578 { 260, true1, 0, 500, true1 },
17579 { 524, true1, 0, 764, true1 },
17580 { 772, true1, 0, 1012, true1 },
17581 { 1036, true1, 0, 1276, true1 },
17582 { 1284, true1, 0, 1524, true1 },
17583 { 1548, true1, 0, 1788, true1 },
17584 { 1796, true1, 0, 2036, true1 }
17585};
17586
17587/* All these ru_96 tone sets for NG=4 go in pairs. */
17588static const struct scidx_part ru_996_tone_80MHz_ng4[] = {
17589 { -500, false0, 4, -4, false0 },
17590 { 4, false0, 4, 500, true1 }
17591};
17592
17593static const struct scidx_part ru_996_tone_80MHz_ng16[] = {
17594 { -500, true1, 0, -260, false0 },
17595 { -252, true1, 0, -12, false0 },
17596 { -4, false0, 8, 4, false0 },
17597 { 12, true1, 0, 252, false0 },
17598 { 260, true1, 0, 500, true1 }
17599};
17600
17601static const struct scidx_part ru_996_tone_160MHz_ng4[] = {
17602 { -1012, true1, 0, -516, false0 },
17603 { -508, true1, 0, -12, true1 },
17604
17605 { 12, true1, 0, 508, false0 },
17606 { 516, true1, 0, 1012, true1 }
17607};
17608
17609static const struct scidx_part ru_996_tone_160MHz_ng16[] = {
17610 { -1012, true1, 0, -772, false0 },
17611 { -764, true1, 0, -524, false0 },
17612 { -516, false0, 8, -508, false0 },
17613 { -500, true1, 0, -260, false0 },
17614 { -252, true1, 0, -12 , true1 },
17615
17616 { 12, true1, 0, 252, false0 },
17617 { 260, true1, 0, 500, false0 },
17618 { 508, false0, 8, 516, false0 },
17619 { 524, true1, 0, 764, false0 },
17620 { 772, true1, 0, 1012, true1 }
17621};
17622
17623static const struct scidx_part ru_996_tone_320MHz_ng4[] = {
17624 { -2036, true1, 0, -1540, false0 },
17625 { -1532, true1, 0, -1036, true1 },
17626
17627 { -1012, true1, 0, -516, false0 },
17628 { -508, true1, 0, -12, true1 },
17629
17630 { 12, true1, 0, 508, false0 },
17631 { 516, true1, 0, 1012, true1 },
17632
17633 { 1036, true1, 0, 1532, false0 },
17634 { 1540, true1, 0, 2036, true1 }
17635};
17636
17637static const struct scidx_part ru_996_tone_320MHz_ng16[] = {
17638 { -2036, true1, 0, -1796, false0 },
17639 { -1788, true1, 0, -1548, false0 },
17640 { -1540, false0, 8, -1532, false0 },
17641 { -1524, true1, 0, -1284, false0 },
17642 { -1276, true1, 0, -1036, true1 },
17643
17644 { -1012, true1, 0, -772, false0 },
17645 { -764, true1, 0, -524, false0 },
17646 { -516, false0, 8, -508, false0 },
17647 { -500, true1, 0, -260, false0 },
17648 { -252, true1, 0, -12, true1 },
17649
17650 { 12, true1, 0, 252, false0 },
17651 { 260, true1, 0, 500, false0 },
17652 { 508, false0, 8, 516, false0 },
17653 { 524, true1, 0, 764, false0 },
17654 { 772, true1, 0, 1012, true1 },
17655
17656 { 1036, true1, 0, 1276, false0 },
17657 { 1284, true1, 0, 1524, false0 },
17658 { 1532, false0, 8, 1540, false0 },
17659 { 1548, true1, 0, 1788, false0 },
17660 { 1796, true1, 0, 2036, true1 }
17661};
17662
17663
17664static void
17665init_eht_scidx(struct scidx_ctx *ctx, uint8_t ru_index,
17666 const struct scidx_part *scidx_array, uint8_t ng)
17667{
17668 ctx->ru_index = ru_index;
17669 ctx->scidx_array = scidx_array;
17670 ctx->ng = ng;
17671 ctx->just_inited = true1;
17672}
17673
17674/* What about the special 20MHz ones? */
17675/* Figure out the next SCIDX */
17676static bool_Bool
17677next_eht_scidx(struct scidx_ctx *ctx, unsigned *scidx)
17678{
17679 if (ctx->just_inited) {
17680 ctx->last_val = ctx->scidx_array->start_val;
17681 ctx->just_inited = false0;
17682 *scidx = ctx->last_val;
17683 return true1;
17684 }
17685
17686 /* Move to the next val ... but check if it is a short seg first */
17687 if (ctx->last_val == ctx->scidx_array->stop_val) {
17688 if (ctx->scidx_array->last_ent) {
17689 return false0;
17690 } else {
17691 /* Pretend like we just started again */
17692 /* Also, note that the arrays need to be set up correctly */
17693 ctx->scidx_array++;
17694 if (ctx->last_val == ctx->scidx_array->start_val) {
17695 if (ctx->scidx_array->use_ng) {
17696 ctx->last_val += ctx->ng;
17697 } else {
17698 ctx->last_val += ctx->scidx_array->inc;
17699 }
17700 } else {
17701 ctx->last_val = ctx->scidx_array->start_val;
17702 }
17703 *scidx = ctx->last_val;
17704 return true1;
17705 }
17706 }
17707
17708 /*
17709 * If the increment is not ng, then handle that.
17710 */
17711 if (ctx->scidx_array->use_ng) {
17712 ctx->last_val += ctx->ng;
17713 } else {
17714 ctx->last_val += ctx->scidx_array->inc;
17715 }
17716 *scidx = ctx->last_val;
17717
17718 return true1;
17719}
17720
17721static int
17722add_ff_eht_mu_exclusive_20MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17723 int offset, uint8_t nc_index,
17724 uint8_t grouping, uint16_t partial_bw_info _U___attribute__((unused)))
17725{
17726 int start_offset = offset;
17727 unsigned scidx;
17728 struct scidx_ctx scidx_ctx;
17729 uint8_t ng = grouping == 0 ? 4 : 16;
17730 proto_tree *ru_index_tree = NULL((void*)0);
17731 proto_item *ruii = NULL((void*)0);
17732 unsigned ss = 0, get_snr = 1;
17733 int8_t snr = 0, value;
17734
17735 if (ng == 4) {
17736 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng4[0], ng);
17737 } else {
17738 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng16[0], ng);
17739 }
17740
17741 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17742 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17743 &ruii,
17744 "RU Index %d for 20MHz, Partial BW "
17745 "not all one.", 1);
17746 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17747 for (ss = 1; ss <= nc_index; ss++) {
17748 if (get_snr) {
17749 snr = tvb_get_int8(tvb, offset);
17750 offset += 1;
17751 value = snr & 0x0f;
17752 get_snr = 0;
17753 } else {
17754 value = snr >> 4;
17755 get_snr = 1;
17756 }
17757 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17758 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17759 ss, scidx, value);
17760 }
17761 }
17762 proto_item_set_len(ruii, offset - start_offset);
17763 return offset - start_offset;
17764}
17765
17766static int
17767add_ff_eht_mu_exclusive_40MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17768 int offset, uint8_t nc_index,
17769 uint8_t grouping, uint16_t partial_bw_info)
17770{
17771 int start_offset = offset;
17772 int i = 0;
17773 struct scidx_ctx scidx_ctx;
17774 unsigned scidx;
17775 uint8_t ng = grouping == 0 ? 4 : 16;
17776 proto_tree *ru_index_tree = NULL((void*)0);
17777 proto_item *ruii = NULL((void*)0);
17778 unsigned ss = 0, get_snr = 1;
17779 int8_t snr = 0, value;
17780
17781 /* Add each of the RU index groups set */
17782 for (i = 1; i <= 2; i++) {
17783 int tree_offset = offset;
17784 if ((partial_bw_info & (1 << i)) == 0x0) {
17785 continue; /* Only dissect those with the bit set */
17786 }
17787
17788 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_40MHz[i - 1], ng);
17789 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17790 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17791 &ruii,
17792 "RU Index %d for 40MHz, Partial BW "
17793 "not all one.", i);
17794 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17795 for (ss = 1; ss <= nc_index; ss++) {
17796 if (get_snr) {
17797 snr = tvb_get_int8(tvb, offset);
17798 offset += 1;
17799 value = snr & 0x0f;
17800 get_snr = 0;
17801 } else {
17802 value = snr >> 4;
17803 get_snr = 1;
17804 }
17805 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17806 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17807 ss, scidx, value);
17808 }
17809 }
17810 proto_item_set_len(ruii, offset - tree_offset);
17811 }
17812
17813 return offset - start_offset;
17814}
17815
17816static int
17817add_ff_eht_mu_exclusive_80MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17818 int offset, uint8_t nc_index,
17819 uint8_t grouping, uint16_t partial_bw_info)
17820{
17821 int start_offset = offset;
17822 int i = 0;
17823 struct scidx_ctx scidx_ctx;
17824 unsigned scidx;
17825 uint8_t ng = grouping == 0 ? 4 : 16;
17826 proto_tree *ru_index_tree = NULL((void*)0);
17827 proto_item *ruii = NULL((void*)0);
17828 unsigned ss = 0, get_snr = 1;
17829 int8_t snr = 0, value;
17830
17831 if (partial_bw_info == 0x1E) { /* Uses 996-tone RU indices */
17832 if (ng == 4) {
17833 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng4[0], ng);
17834 } else {
17835 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng16[0], ng);
17836 }
17837 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17838 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17839 &ruii,
17840 "996-tone RU Index %d for 80MHz", 1);
17841 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17842 for (ss = 1; ss <= nc_index; ss++) {
17843 if (get_snr) {
17844 snr = tvb_get_int8(tvb, offset);
17845 offset += 1;
17846 value = snr & 0x0f;
17847 get_snr = 0;
17848 } else {
17849 value = snr >> 4;
17850 get_snr = 1;
17851 }
17852 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17853 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17854 ss, scidx, value);
17855 }
17856 }
17857 proto_item_set_len(ruii, offset - start_offset);
17858
17859 return offset - start_offset;
17860 }
17861
17862 /* Add each of the RU index groups */
17863 for (i = 1; i <= 4; i++) {
17864 int tree_offset = offset;
17865 if ((partial_bw_info & (1 << i)) == 0x0) {
17866 continue; /* Only dissect those with the bit set */
17867 }
17868
17869 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_80MHz[i - 1], ng);
17870 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17871 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17872 &ruii,
17873 "RU Index %d for 80MHz, Partial BW "
17874 "not all one.", i);
17875 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17876 for (ss = 1; ss <= nc_index; ss++) {
17877 if (get_snr) {
17878 snr = tvb_get_int8(tvb, offset);
17879 offset += 1;
17880 value = snr & 0x0f;
17881 get_snr = 0;
17882 } else {
17883 value = snr >> 4;
17884 get_snr = 1;
17885 }
17886 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17887 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17888 ss, scidx, value);
17889 }
17890 }
17891 proto_item_set_len(ruii, offset - tree_offset);
17892 }
17893
17894 return offset - start_offset;
17895}
17896
17897static int
17898add_ff_eht_mu_exclusive_160MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17899 int offset, uint8_t nc_index,
17900 uint8_t grouping, uint16_t partial_bw_info)
17901{
17902 int start_offset = offset;
17903 int tree_offset;
17904 int i = 0;
17905 struct scidx_ctx scidx_ctx;
17906 unsigned scidx;
17907 uint8_t ng = grouping == 0 ? 4 : 16;
17908 proto_tree *ru_index_tree = NULL((void*)0);
17909 proto_item *ruii = NULL((void*)0);
17910 unsigned ss = 0, get_snr = 1;
17911 int8_t snr = 0, value;
17912
17913 /* Is the first lot a 996-tone RU? */
17914 if ((partial_bw_info & 0x1E) == 0x1E) { /* Uses 996-tone RU indices */
17915 tree_offset = offset;
17916 if (ng == 4) {
17917 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[0], ng);
17918 } else {
17919 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[0], ng);
17920 }
17921 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17922 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17923 &ruii,
17924 "996-tone RU Index %d for 160MHz", 1);
17925 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17926 for (ss = 1; ss <= nc_index; ss++) {
17927 if (get_snr) {
17928 snr = tvb_get_int8(tvb, offset);
17929 offset += 1;
17930 value = snr & 0x0f;
17931 get_snr = 0;
17932 } else {
17933 value = snr >> 4;
17934 get_snr = 1;
17935 }
17936 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17937 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17938 ss, scidx, value);
17939 }
17940 }
17941 proto_item_set_len(ruii, offset - tree_offset);
17942 } else {
17943 /* Add each of the RU index groups for the lower 80MHz */
17944 for (i = 1; i <= 4; i++) {
17945 if ((partial_bw_info & (1 << i)) == 0x0) {
17946 continue; /* Only dissect those with the bit set */
17947 }
17948
17949 tree_offset = offset;
17950 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
17951 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17952 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17953 &ruii,
17954 "RU Index %d for 160MHz, Partial BW "
17955 "not all one, lower 80MHz.", i);
17956 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17957 for (ss = 1; ss <= nc_index; ss++) {
17958 if (get_snr) {
17959 snr = tvb_get_int8(tvb, offset);
17960 offset += 1;
17961 value = snr & 0x0f;
17962 get_snr = 0;
17963 } else {
17964 value = snr >> 4;
17965 get_snr = 1;
17966 }
17967 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17968 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17969 ss, scidx, value);
17970 }
17971 }
17972 proto_item_set_len(ruii, offset - tree_offset);
17973 }
17974 }
17975
17976 /* Is the second lot a 996-tone RU? */
17977 get_snr = 1;
17978 if ((partial_bw_info & 0x1E0) == 0x1E0) { /* Uses 996-tone RU indices */
17979 tree_offset = offset;
17980 if (ng == 4) {
17981 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[2], ng);
17982 } else {
17983 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[5], ng);
17984 }
17985 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17986 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17987 &ruii,
17988 "996-tone RU Index %d for 160MHz", 2);
17989 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17990 for (ss = 1; ss <= nc_index; ss++) {
17991 if (get_snr) {
17992 snr = tvb_get_int8(tvb, offset);
17993 offset += 1;
17994 value = snr & 0x0f;
17995 get_snr = 0;
17996 } else {
17997 value = snr >> 4;
17998 get_snr = 1;
17999 }
18000 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18001 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18002 ss, scidx, value);
18003 }
18004 }
18005 proto_item_set_len(ruii, offset - tree_offset);
18006 } else {
18007 /* Add each of the RU index groups for the lower 80MHz */
18008 for (i = 5; i <= 8; i++) {
18009 if ((partial_bw_info & (1 << i)) == 0x0) {
18010 continue; /* Only dissect those with the bit set */
18011 }
18012
18013 tree_offset = offset;
18014 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18015 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18016 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18017 &ruii,
18018 "RU Index %d for 160MHz, Partial BW "
18019 "not all one, upper 80MHz.", i);
18020 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18021 for (ss = 1; ss <= nc_index; ss++) {
18022 if (get_snr) {
18023 snr = tvb_get_int8(tvb, offset);
18024 offset += 1;
18025 value = snr & 0x0f;
18026 get_snr = 0;
18027 } else {
18028 value = snr >> 4;
18029 get_snr = 1;
18030 }
18031 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18032 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18033 ss, scidx, value);
18034 }
18035 }
18036 proto_item_set_len(ruii, offset - tree_offset);
18037 }
18038 }
18039
18040 return offset - start_offset;
18041}
18042
18043static int
18044add_ff_eht_mu_exclusive_320MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
18045 int offset, uint8_t nc_index,
18046 uint8_t grouping, uint16_t partial_bw_info)
18047{
18048 int start_offset = offset;
18049 int tree_offset = offset;
18050 int i = 0, j = 0, k = 0;
18051 struct scidx_ctx scidx_ctx;
18052 unsigned scidx;
18053 uint8_t ng = grouping == 0 ? 4 : 16;
18054 proto_tree *ru_index_tree = NULL((void*)0);
18055 proto_item *ruii = NULL((void*)0);
18056 unsigned ss = 0, get_snr = 1;
18057 int8_t snr = 0, value;
18058
18059 for ( i = 0; i < 4; i++) {
18060 if (((partial_bw_info >> (2*i+1)) & 0x03) == 0x03) { /* Uses 996-tone RU indices */
18061 if (ng == 4) {
18062 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng4[i * 2], ng);
18063 } else {
18064 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng16[i * 5], ng);
18065 }
18066 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18067 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18068 &ruii,
18069 "996-tone RU Index %d for 320MHz",
18070 i+1);
18071 tree_offset = offset;
18072 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18073 for (ss = 1; ss <= nc_index; ss++) {
18074 if (get_snr) {
18075 snr = tvb_get_int8(tvb, offset);
18076 offset += 1;
18077 value = snr & 0x0f;
18078 get_snr = 0;
18079 } else {
18080 value = snr >> 4;
18081 get_snr = 1;
18082 }
18083 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18084 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18085 ss, scidx, value);
18086 }
18087 }
18088 proto_item_set_len(ruii, offset - tree_offset);
18089 } else {
18090 for (j = 2*i; j <= 2*i+1; j++) {
18091 if ((partial_bw_info & (1 << (j+1))) == 0x0) {
18092 continue; /* Only dissect those with the bit set */
18093 }
18094 /* Each 484-tone RU contains two 242-tone RUs */
18095 for (k = 2*j;k <= 2*j+1;k++) {
18096 init_eht_scidx(&scidx_ctx, k+1, &ru_242_tone_320MHz[k], ng);
18097 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18098 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18099 &ruii,
18100 "RU Index %d for 320MHz, Partial BW "
18101 "not all one.", k+1);
18102 tree_offset = offset;
18103 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18104 for (ss = 1; ss <= nc_index; ss++) {
18105 if (get_snr) {
18106 snr = tvb_get_int8(tvb, offset);
18107 offset += 1;
18108 value = snr & 0x0f;
18109 get_snr = 0;
18110 } else {
18111 value = snr >> 4;
18112 get_snr = 1;
18113 }
18114 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18115 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18116 ss, scidx, value);
18117 }
18118 }
18119 proto_item_set_len(ruii, offset - tree_offset);
18120 }
18121 }
18122 }
18123 }
18124
18125 return offset - start_offset;
18126}
18127
18128static unsigned
18129add_ff_eht_mu_exclusive_beamforming_rpt(proto_tree *tree, tvbuff_t *tvb,
18130 packet_info *pinfo, int offset,
18131 uint64_t mimo_control)
18132{
18133 uint8_t nc_index = mimo_control & 0x0F;
18134 uint8_t bw = (mimo_control >> 8) & 0x07;
18135 uint8_t grouping = (mimo_control >> 11) & 0x01;
18136 uint16_t partial_bw_info = (mimo_control >> 21) & 0x01FF;
18137 proto_tree *exclusive_tree = NULL((void*)0);
18138 proto_item *fti = NULL((void*)0);
18139 unsigned start_offset = offset;
18140 unsigned tree_len = 0, byte_count = 0;
18141
18142 exclusive_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
18143 ett_ff_eht_mimo_mu_exclusive_report, &fti,
18144 "EHT MU Exclusive Beamforming Report");
18145
18146 switch (bw) {
18147 case 0: /* 20 MHz */
18148 tree_len = add_ff_eht_mu_exclusive_20MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18149 nc_index, grouping, partial_bw_info);
18150 proto_item_set_len(fti, tree_len);
18151 offset += tree_len;
18152 break;
18153 case 1: /* 40 MHz */
18154 tree_len = add_ff_eht_mu_exclusive_40MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18155 nc_index, grouping, partial_bw_info);
18156 proto_item_set_len(fti, tree_len);
18157 offset += tree_len;
18158 break;
18159 case 2: /* 80 MHz */
18160 tree_len = add_ff_eht_mu_exclusive_80MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18161 nc_index, grouping, partial_bw_info);
18162 proto_item_set_len(fti, tree_len);
18163 offset += tree_len;
18164 break;
18165 case 3: /* 160 MHz */
18166 tree_len = add_ff_eht_mu_exclusive_160MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18167 nc_index, grouping, partial_bw_info);
18168 proto_item_set_len(fti, tree_len);
18169 offset += tree_len;
18170 break;
18171 case 4: /* 320 MHz */
18172 tree_len = add_ff_eht_mu_exclusive_320MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18173 nc_index, grouping, partial_bw_info);
18174 proto_item_set_len(fti, tree_len);
18175 offset += tree_len;
18176 break;
18177 default:
18178 /* Add EI about invalid BW setting */
18179 break;
18180 }
18181
18182 byte_count = tvb_reported_length_remaining(tvb, offset);
18183 if (byte_count > 0)
18184 offset += byte_count; /* Should fix the real problem. */
18185
18186 return offset - start_offset;
18187}
18188
18189static int
18190add_ff_eht_su_20MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18191 int offset, uint8_t nc_index, uint8_t nr_index,
18192 uint8_t grouping, uint16_t partial_bw_info _U___attribute__((unused)),
18193 uint8_t phi_bits, uint8_t psi_bits)
18194{
18195 int start_offset = offset;
18196 unsigned scidx;
18197 struct scidx_ctx scidx_ctx;
18198 uint8_t ng = grouping == 0 ? 4 : 16;
18199 unsigned bit_offset = offset * 8;
18200 proto_tree *ru_index_tree = NULL((void*)0);
18201 proto_item *ruii = NULL((void*)0);
18202
18203 if (ng == 4) {
18204 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng4[0], ng);
18205 } else {
18206 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng16[0], ng);
18207 }
18208
18209 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18210 ett_eht_beamforming_rpt_ru_index,
18211 &ruii,
18212 "RU Index %d for 20MHz, Partial BW "
18213 "not all one.", 1);
18214 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18215 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18216 bit_offset, scidx, nr_index + 1,
18217 nc_index + 1, phi_bits, psi_bits,
18218 hf_ieee80211_eht_compressed_beamform_scidx);
18219 offset = bit_offset / 8;
18220 }
18221 proto_item_set_len(ruii, offset - start_offset);
18222
18223 return offset - start_offset;
18224}
18225
18226static int
18227add_ff_eht_su_40MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18228 int offset, uint8_t nc_index, uint8_t nr_index,
18229 uint8_t grouping, uint16_t partial_bw_info,
18230 uint8_t phi_bits, uint8_t psi_bits)
18231{
18232 int start_offset = offset;
18233 int i = 0;
18234 struct scidx_ctx scidx_ctx;
18235 unsigned scidx;
18236 uint8_t ng = grouping == 0 ? 4 : 16;
18237 unsigned bit_offset = offset * 8;
18238 proto_tree *ru_index_tree = NULL((void*)0);
18239 proto_item *ruii = NULL((void*)0);
18240
18241 /* Add each of the RU index groups set */
18242 for (i = 1; i <= 2; i++) {
18243 int tree_offset = offset;
18244 if ((partial_bw_info & (1 << i)) == 0x0) {
18245 continue; /* Only dissect those with the bit set */
18246 }
18247
18248 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_40MHz[i - 1], ng);
18249 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18250 ett_eht_beamforming_rpt_ru_index,
18251 &ruii,
18252 "RU Index %d for 40MHz, Partial BW "
18253 "not all one.", i);
18254 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18255 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18256 bit_offset, scidx, nr_index + 1,
18257 nc_index + 1, phi_bits, psi_bits,
18258 hf_ieee80211_eht_compressed_beamform_scidx);
18259 offset = bit_offset / 8;
18260 }
18261 proto_item_set_len(ruii, offset - tree_offset);
18262 }
18263
18264 return offset - start_offset;
18265}
18266
18267static int
18268add_ff_eht_su_80MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18269 int offset, uint8_t nc_index, uint8_t nr_index,
18270 uint8_t grouping, uint16_t partial_bw_info,
18271 uint8_t phi_bits, uint8_t psi_bits)
18272{
18273 int start_offset = offset;
18274 int i = 0;
18275 struct scidx_ctx scidx_ctx;
18276 unsigned scidx;
18277 uint8_t ng = grouping == 0 ? 4 : 16;
18278 unsigned bit_offset = offset * 8;
18279 proto_tree *ru_index_tree = NULL((void*)0);
18280 proto_item *ruii = NULL((void*)0);
18281
18282 if (partial_bw_info == 0x1E) { /* Uses 996-tone RU indices */
18283 if (ng == 4) {
18284 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng4[0], ng);
18285 } else {
18286 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng16[0], ng);
18287 }
18288 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18289 ett_eht_beamforming_rpt_ru_index,
18290 &ruii,
18291 "996-tone RU Index %d for 80MHz", 1);
18292 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18293 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18294 bit_offset, scidx, nr_index + 1,
18295 nc_index + 1, phi_bits, psi_bits,
18296 hf_ieee80211_eht_compressed_beamform_scidx);
18297 offset = bit_offset / 8;
18298 }
18299 proto_item_set_len(ruii, offset - start_offset);
18300
18301 return offset - start_offset;
18302 }
18303
18304 /* Add each of the RU index groups */
18305 for (i = 1; i <= 4; i++) {
18306 int tree_offset = offset;
18307 if ((partial_bw_info & (1 << i)) == 0x0) {
18308 continue; /* Only dissect those with the bit set */
18309 }
18310
18311 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_80MHz[i - 1], ng);
18312 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18313 ett_eht_beamforming_rpt_ru_index,
18314 &ruii,
18315 "RU Index %d for 80MHz, Partial BW "
18316 "not all one.", i);
18317 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18318 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18319 bit_offset, scidx, nr_index + 1,
18320 nc_index + 1, phi_bits, psi_bits,
18321 hf_ieee80211_eht_compressed_beamform_scidx);
18322 offset = bit_offset / 8;
18323 }
18324 proto_item_set_len(ruii, offset - tree_offset);
18325 }
18326
18327 return offset - start_offset;
18328}
18329
18330static int
18331add_ff_eht_su_160MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18332 int offset, uint8_t nc_index, uint8_t nr_index,
18333 uint8_t grouping, uint16_t partial_bw_info,
18334 uint8_t phi_bits, uint8_t psi_bits)
18335{
18336 int start_offset = offset;
18337 int tree_offset;
18338 int i = 0;
18339 struct scidx_ctx scidx_ctx;
18340 unsigned scidx;
18341 uint8_t ng = grouping == 0 ? 4 : 16;
18342 unsigned bit_offset = offset * 8;
18343 proto_tree *ru_index_tree = NULL((void*)0);
18344 proto_item *ruii = NULL((void*)0);
18345
18346 /* Is the first lot a 996-tone RU? */
18347 if ((partial_bw_info & 0x1E) == 0x1E) { /* Uses 996-tone RU indices */
18348 tree_offset = offset;
18349 if (ng == 4) {
18350 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[0], ng);
18351 } else {
18352 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[0], ng);
18353 }
18354 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18355 ett_eht_beamforming_rpt_ru_index,
18356 &ruii,
18357 "996-tone RU Index %d for 160MHz", 1);
18358 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18359 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18360 bit_offset, scidx, nr_index + 1,
18361 nc_index + 1, phi_bits, psi_bits,
18362 hf_ieee80211_eht_compressed_beamform_scidx);
18363 offset = bit_offset / 8;
18364 }
18365 proto_item_set_len(ruii, offset - tree_offset);
18366 } else {
18367 /* Add each of the RU index groups for the lower 80MHz */
18368 for (i = 1; i <= 4; i++) {
18369 if ((partial_bw_info & (1 << i)) == 0x0) {
18370 continue; /* Only dissect those with the bit set */
18371 }
18372
18373 tree_offset = offset;
18374 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18375 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18376 ett_eht_beamforming_rpt_ru_index,
18377 &ruii,
18378 "RU Index %d for 160MHz, Partial BW "
18379 "not all one, lower 80MHz.", i);
18380 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18381 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo,
18382 offset, bit_offset, scidx,
18383 nr_index + 1, nc_index + 1,
18384 phi_bits, psi_bits,
18385 hf_ieee80211_eht_compressed_beamform_scidx);
18386 offset = bit_offset / 8;
18387 }
18388 proto_item_set_len(ruii, offset - tree_offset);
18389 }
18390 }
18391
18392 /* Is the second lot a 996-tone RU? */
18393 if ((partial_bw_info & 0x1E0) == 0x1E0) { /* Uses 996-tone RU indices */
18394 tree_offset = offset;
18395 if (ng == 4) {
18396 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[2], ng);
18397 } else {
18398 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[5], ng);
18399 }
18400 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18401 ett_eht_beamforming_rpt_ru_index,
18402 &ruii,
18403 "996-tone RU Index %d for 160MHz", 2);
18404 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18405 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18406 bit_offset, scidx, nr_index + 1,
18407 nc_index + 1, phi_bits, psi_bits,
18408 hf_ieee80211_eht_compressed_beamform_scidx);
18409 offset = bit_offset / 8;
18410 }
18411 proto_item_set_len(ruii, offset - tree_offset);
18412 } else {
18413 /* Add each of the RU index groups for the lower 80MHz */
18414 for (i = 5; i <= 8; i++) {
18415 if ((partial_bw_info & (1 << i)) == 0x0) {
18416 continue; /* Only dissect those with the bit set */
18417 }
18418
18419 tree_offset = offset;
18420 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18421 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18422 ett_eht_beamforming_rpt_ru_index,
18423 &ruii,
18424 "RU Index %d for 160MHz, Partial BW "
18425 "not all one, upper 80MHz.", i);
18426 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18427 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo,
18428 offset, bit_offset, scidx,
18429 nr_index + 1, nc_index + 1,
18430 phi_bits, psi_bits,
18431 hf_ieee80211_eht_compressed_beamform_scidx);
18432 offset = bit_offset / 8;
18433 }
18434 proto_item_set_len(ruii, offset - tree_offset);
18435 }
18436 }
18437
18438 return offset - start_offset;
18439}
18440
18441static int
18442add_ff_eht_su_320MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18443 int offset, uint8_t nc_index, uint8_t nr_index,
18444 uint8_t grouping, uint16_t partial_bw_info,
18445 uint8_t phi_bits, uint8_t psi_bits)
18446{
18447 int start_offset = offset;
18448 int tree_offset = offset;
18449 int i = 0, j = 0, k = 0;
18450 struct scidx_ctx scidx_ctx;
18451 unsigned scidx;
18452 uint8_t ng = grouping == 0 ? 4 : 16;
18453 unsigned bit_offset = offset * 8;
18454 proto_tree *ru_index_tree = NULL((void*)0);
18455 proto_item *ruii = NULL((void*)0);
18456
18457 /* Resolution is 40 MHz */
18458 for (i = 0; i < 4; i++) {
18459 if (((partial_bw_info >> (2*i+1)) & 0x03) == 0x03) { /* Uses 996-tone RU indices */
18460 if (ng == 4) {
18461 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng4[i * 2], ng);
18462 } else {
18463 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng16[i * 5], ng);
18464 }
18465 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18466 ett_eht_beamforming_rpt_ru_index,
18467 &ruii,
18468 "996-tone RU Index %d for 320MHz",
18469 i+1);
18470 tree_offset = offset;
18471 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18472 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo,
18473 offset, bit_offset, scidx,
18474 nr_index + 1, nc_index + 1,
18475 phi_bits, psi_bits,
18476 hf_ieee80211_eht_compressed_beamform_scidx);
18477 offset = bit_offset / 8;
18478 }
18479 proto_item_set_len(ruii, offset - tree_offset);
18480 } else {
18481 for (j = 2*i; j <= 2*i+1; j++) {
18482 if ((partial_bw_info & (1 << (j+1))) == 0x0) {
18483 continue; /* Only dissect those with the bit set */
18484 }
18485 /* Each 484-tone RU contains two 242-tone RUs */
18486 for (k = 2*j;k <= 2*j+1;k++) {
18487 init_eht_scidx(&scidx_ctx, k+1, &ru_242_tone_320MHz[k], ng);
18488 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18489 ett_eht_beamforming_rpt_ru_index,
18490 &ruii,
18491 "RU Index %d for 320MHz, Partial BW "
18492 "not all one.", k+1);
18493 tree_offset = offset;
18494 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18495 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18496 bit_offset, scidx, nr_index + 1,
18497 nc_index + 1, phi_bits, psi_bits,
18498 hf_ieee80211_eht_compressed_beamform_scidx);
18499 offset = bit_offset / 8;
18500 }
18501 proto_item_set_len(ruii, offset - tree_offset);
18502 }
18503 }
18504 }
18505 }
18506
18507 return offset - start_offset;
18508}
18509
18510static unsigned
18511add_ff_eht_su_beamforming_rpt(proto_tree *tree, tvbuff_t *tvb,
18512 packet_info *pinfo, int offset,
18513 uint64_t mimo_control)
18514{
18515 uint8_t nc_index = mimo_control & 0x0F;
18516 uint8_t nr_index = (mimo_control >> 4) & 0x0F;
18517 uint8_t bw = (mimo_control >> 8) & 0x07;
18518 uint8_t grouping = (mimo_control >> 11) & 0x01;
18519 uint16_t partial_bw_info = (mimo_control >> 21) & 0x01FF;
18520 uint8_t codebook_info = (mimo_control >> 36) & 0x01;
18521 proto_tree *snr_tree = NULL((void*)0), *feedback_tree = NULL((void*)0);
18522 proto_item *fti = NULL((void*)0);
18523 uint8_t i = 0, phi_bits, psi_bits;
18524 unsigned start_offset = offset;
18525 unsigned tree_len = 0, byte_count = 0;
18526
18527 snr_tree = proto_tree_add_subtree(tree, tvb, offset, nc_index + 1,
18528 ett_ff_eht_mimo_beamforming_report_snr, NULL((void*)0),
18529 "Average Signal to Noise Ratio");
18530
18531 for (i = 0; i < nc_index + 1; i++) {
18532 int8_t snr = tvb_get_int8(tvb, offset);
18533
18534 proto_tree_add_int_format(snr_tree,
18535 hf_ieee80211_eht_compressed_beamforming_report_snr, tvb, offset, 1,
18536 snr, "Stream %d: %s%0.2fdB (0x%02x)", i,
18537 (snr == 127 ? ">=" : (snr == -128 ? "<=" : "")),
18538 (float)((float)88 + snr)/4, (uint8_t)snr);
18539 offset++;
18540 }
18541
18542 if (codebook_info == 0) {
18543 phi_bits = 4;
18544 psi_bits = 2;
18545 } else {
18546 phi_bits = 6;
18547 psi_bits = 4;
18548 }
18549
18550 feedback_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
18551 ett_eht_beamforming_feedback_tree,
18552 &fti, "Feedback Matrices");
18553 switch (bw) {
18554 case 0: /* 20 MHz */
18555 tree_len = add_ff_eht_su_20MHz_rpt(feedback_tree, tvb, pinfo, offset,
18556 nc_index, nr_index, grouping,
18557 partial_bw_info, phi_bits, psi_bits);
18558 proto_item_set_len(fti, tree_len);
18559 offset += tree_len;
18560 break;
18561 case 1: /* 40 MHz */
18562 tree_len = add_ff_eht_su_40MHz_rpt(feedback_tree, tvb, pinfo, offset,
18563 nc_index, nr_index, grouping,
18564 partial_bw_info, phi_bits, psi_bits);
18565 proto_item_set_len(fti, tree_len);
18566 offset += tree_len;
18567 break;
18568 case 2: /* 80 MHz */
18569 tree_len = add_ff_eht_su_80MHz_rpt(feedback_tree, tvb, pinfo, offset,
18570 nc_index, nr_index, grouping,
18571 partial_bw_info, phi_bits, psi_bits);
18572 proto_item_set_len(fti, tree_len);
18573 offset += tree_len;
18574 break;
18575 case 3: /* 160 MHz */
18576 tree_len = add_ff_eht_su_160MHz_rpt(feedback_tree, tvb, pinfo, offset,
18577 nc_index, nr_index, grouping,
18578 partial_bw_info, phi_bits, psi_bits);
18579 proto_item_set_len(fti, tree_len);
18580 offset += tree_len;
18581 break;
18582 case 4: /* 320 MHz */
18583 tree_len = add_ff_eht_su_320MHz_rpt(feedback_tree, tvb, pinfo, offset,
18584 nc_index, nr_index, grouping,
18585 partial_bw_info, phi_bits, psi_bits);
18586 proto_item_set_len(fti, tree_len);
18587 offset += tree_len;
18588 break;
18589 default:
18590 /* Add EI about invalid BW setting */
18591 break;
18592 }
18593
18594 byte_count = tvb_reported_length_remaining(tvb, offset);
18595 if (byte_count > 0)
18596 offset += byte_count; /* Should fix the real problem. */
18597
18598 return offset - start_offset;
18599}
18600
18601static const val64_string eht_mimo_bw_vals[] = {
18602 { 0, "20 MHz" },
18603 { 1, "40 MHz" },
18604 { 2, "80 MHz" },
18605 { 3, "160 MHz" },
18606 { 4, "320 MHz" },
18607 { 5, "Reserved" },
18608 { 6, "Reserved" },
18609 { 7, "Reserved" },
18610 { 0, NULL((void*)0) }
18611};
18612
18613static const val64_string eht_mimo_grouping_vals[] = {
18614 { 0, "Ng = 4" },
18615 { 1, "Ng = 16" },
18616 { 0, NULL((void*)0) }
18617};
18618
18619static const val64_string eht_feedback_type_vals[] = {
18620 { 0, "SU" },
18621 { 1, "MU" },
18622 { 2, "CQI" },
18623 { 3, "Reserved" },
18624 { 0, NULL((void*)0) }
18625};
18626
18627static int * const eht_mimo_ctrl_hdrs[] = {
18628 &hf_ieee80211_eht_mimo_ctrl_nc_index,
18629 &hf_ieee80211_eht_mimo_ctrl_nr_index,
18630 &hf_ieee80211_eht_mimo_ctrl_bw,
18631 &hf_ieee80211_eht_mimo_ctrl_grouping,
18632 &hf_ieee80211_eht_mimo_ctrl_feedback_type,
18633 &hf_ieee80211_eht_mimo_ctrl_reserved1,
18634 &hf_ieee80211_eht_mimo_ctrl_remaining_feedback_segments,
18635 &hf_ieee80211_eht_mimo_ctrl_first_feedback_segment,
18636 &hf_ieee80211_eht_mimo_ctrl_partial_bw_info,
18637 &hf_ieee80211_eht_mimo_ctrl_sounding_dialog_token_number,
18638 &hf_ieee80211_eht_mimo_ctrl_codebook_info,
18639 &hf_ieee80211_eht_mimo_ctrl_reserved2,
18640 NULL((void*)0)
18641};
18642
18643static unsigned
18644add_ff_eht_mimo_control_etc(proto_tree *tree _U___attribute__((unused)), tvbuff_t *tvb _U___attribute__((unused)),
18645 packet_info *pinfo _U___attribute__((unused)),
18646 int offset _U___attribute__((unused)))
18647{
18648 unsigned start = offset;
18649 uint64_t mimo_control = tvb_get_uint40(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
18650 uint8_t feedback_type = (mimo_control >> 12) & 0x03;
18651 uint8_t nc_index = mimo_control & 0x0F;
18652 uint8_t nr_index = (mimo_control >> 4) & 0x0F;
18653 proto_item *mci = NULL((void*)0);
18654
18655 mci = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
18656 hf_ieee80211_eht_mimo_ctrl_field,
18657 ett_eht_mimo_ctrl, eht_mimo_ctrl_hdrs,
18658 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
18659
18660 /*
18661 * Validate nc_index and nr_index and go no further if they exceed the
18662 * limits.
18663 *
18664 * 802.11be D3.0
18665 */
18666 if (nc_index > 7) {
18667 expert_add_info_format(pinfo, mci, &ei_ieee80211_eht_invalid_nc_nr,
18668 "Nc indices (%d) > 7 are reserved", nc_index);
18669 return offset;
18670 }
18671 if (nr_index == 0 || nr_index > 7) {
18672 expert_add_info_format(pinfo, mci, &ei_ieee80211_eht_invalid_nc_nr,
18673 "Nr indices (%d) 0 and > 7 are reserved", nr_index);
18674 return offset;
18675 }
18676 offset += 5;
18677
18678 switch (feedback_type) {
18679 case SU_FEEDBACK(0):
18680 offset += add_ff_eht_su_beamforming_rpt(tree, tvb, pinfo, offset,
18681 mimo_control);
18682 break;
18683 case MU_FEEDBACK(1):
18684 offset += add_ff_eht_su_beamforming_rpt(tree, tvb, pinfo, offset,
18685 mimo_control);
18686 offset += add_ff_eht_mu_exclusive_beamforming_rpt(tree, tvb, pinfo, offset,
18687 mimo_control);
18688 break;
18689 case CQI_FEEDBACK(2):
18690 /* TODO */
18691 break;
18692 default:
18693 break;
18694 }
18695
18696 return offset - start;
18697}
18698
18699static const range_string eht_action_rvals[] = {
18700 { 0, 0, "EHT Compressed Beamforming/CQI" },
18701 { 1, 255, "Reserved" },
18702 { 0, 0, NULL((void*)0) }
18703};
18704
18705static unsigned
18706add_ff_action_eht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18707 int offset)
18708{
18709 unsigned start = offset;
18710 uint8_t eht_action;
18711 proto_item *item = NULL((void*)0);
18712
18713 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18714
18715 eht_action = tvb_get_uint8(tvb, offset);
18716
18717 item = proto_tree_add_item(tree, hf_ieee80211_ff_eht_action, tvb, offset, 1,
18718 ENC_NA0x00000000);
18719 offset += 1;
18720
18721 switch (eht_action) {
18722 case 0:
18723 offset += add_ff_eht_mimo_control_etc(tree, tvb, pinfo, offset);
18724 break;
18725 default:
18726 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
18727 "Reserved EHT Action %u", eht_action);
18728 }
18729
18730 return offset - start;
18731}
18732
18733static unsigned
18734add_ff_action_fst(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
18735{
18736 uint8_t code;
18737 unsigned start = offset;
18738
18739 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18740 code = tvb_get_uint8(tvb, offset);
18741 offset += add_ff_fst_action_code(tree, tvb, pinfo, offset);
18742 switch (code) {
18743 case FST_SETUP_REQUEST0:
18744 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18745 offset += add_ff_llt(tree, tvb, pinfo, offset);
18746 break;
18747 case FST_SETUP_RESPONSE1:
18748 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18749 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18750 break;
18751 case FST_TEAR_DOWN2:
18752 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
18753 break;
18754 case FST_ACK_REQUEST3:
18755 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18756 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
18757 break;
18758 case FST_ACK_RESPONSE4:
18759 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18760 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
18761 break;
18762 case FST_ON_CHANNEL_TUNNEL_REQUEST5:
18763 offset += add_ff_oct_mmpdu(tree, tvb, pinfo, offset);
18764 break;
18765 }
18766 return offset - start;
18767}
18768
18769static int
18770add_ff_scs_descriptor_list(proto_tree *tree, tvbuff_t *tvb,
18771 packet_info *pinfo _U___attribute__((unused)), int offset)
18772{
18773 unsigned start = offset;
18774
18775 /*
18776 * This is could be a list, so it needs change.
18777 */
18778 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
18779 return offset - start;
18780}
18781
18782static int
18783add_ff_scs_response_count(proto_tree *tree, tvbuff_t *tvb,
18784 packet_info *pinfo _U___attribute__((unused)), int offset)
18785{
18786 proto_tree_add_item(tree, hf_ieee80211_ff_scs_response_count, tvb, offset, 1,
18787 ENC_NA0x00000000);
18788
18789 return 1;
18790}
18791
18792static int
18793add_ff_scs_status_list(proto_tree *tree, tvbuff_t *tvb,
18794 packet_info *pinfo _U___attribute__((unused)), int offset, uint8_t count)
18795{
18796 unsigned start = offset;
18797
18798 while (count > 0) {
18799 if (tvb_reported_length_remaining(tvb, offset) >= 3) {
18800 proto_tree_add_item(tree, hf_ieee80211_ff_scs_scsid, tvb, offset, 1,
18801 ENC_NA0x00000000);
18802 offset += 1;
18803
18804 proto_tree_add_item(tree, hf_ieee80211_ff_scs_status, tvb, offset, 2,
18805 ENC_LITTLE_ENDIAN0x80000000);
18806 offset += 2;
18807 }
18808 count--;
18809 }
18810
18811 return offset - start;
18812}
18813
18814static int
18815add_ff_mscs_descriptor_elt(proto_tree *tree, tvbuff_t *tvb,
18816 packet_info *pinfo _U___attribute__((unused)), int offset)
18817{
18818 unsigned start = offset;
18819
18820 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
18821 return offset - start;
18822}
18823
18824static unsigned
18825add_ff_action_robust_av_streaming(proto_tree *tree, tvbuff_t *tvb,
18826 packet_info *pinfo, int offset)
18827{
18828 uint8_t code, count;
18829 unsigned start = offset;
18830
18831 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18832 code = tvb_get_uint8(tvb, offset);
18833 offset += add_ff_robust_av_streaming_action_code(tree, tvb, pinfo, offset);
18834
18835 switch (code) {
18836 case ROBUST_AV_STREAMING_SCS_REQUEST0:
18837 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18838 offset += add_ff_scs_descriptor_list(tree, tvb, pinfo, offset);
18839 break;
18840 case ROBUST_AV_STREAMING_SCS_RESPONSE1:
18841 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18842 count = tvb_get_uint8(tvb, offset);
18843 offset += add_ff_scs_response_count(tree, tvb, pinfo, offset);
18844 offset += add_ff_scs_status_list(tree, tvb, pinfo, offset, count);
18845 break;
18846 case ROBUST_AV_STREAMING_MSCS_REQUEST4:
18847 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18848 offset += add_ff_mscs_descriptor_elt(tree, tvb, pinfo, offset);
18849 break;
18850 case ROBUST_AV_STREAMING_MSCS_RESPONSE5:
18851 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18852 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18853 /* If there is any more data it is probably an mscs descriptor */
18854 if (tvb_reported_length_remaining(tvb, offset) > 0)
18855 offset += add_ff_mscs_descriptor_elt(tree, tvb, pinfo, offset);
18856 break;
18857 }
18858 return offset - start;
18859}
18860
18861static unsigned
18862add_ff_action_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
18863{
18864 uint8_t code;
18865 unsigned start = offset;
18866 int left_offset;
18867
18868 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18869 code = tvb_get_uint8(tvb, offset);
18870 offset += add_ff_dmg_action_code(tree, tvb, pinfo, offset);
18871 switch (code) {
18872 case DMG_ACTION_PWR_SAVE_CONFIG_REQ0:
18873 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18874 offset += add_ff_dmg_pwr_mgmt(tree, tvb, pinfo, offset);
18875 break;
18876 case DMG_ACTION_PWR_SAVE_CONFIG_RES1:
18877 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18878 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18879 break;
18880 case DMG_ACTION_INFO_REQ2:
18881 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
18882 break;
18883 case DMG_ACTION_INFO_RES3:
18884 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
18885 break;
18886 case DMG_ACTION_HANDOVER_REQ4:
18887 offset += add_ff_handover_reason(tree, tvb, pinfo, offset);
18888 offset += add_ff_handover_remaining_bi(tree, tvb, pinfo, offset);
18889 break;
18890 case DMG_ACTION_HANDOVER_RES5:
18891 offset += add_ff_handover_result(tree, tvb, pinfo, offset);
18892 offset += add_ff_handover_reject_reason(tree, tvb, pinfo, offset);
18893 break;
18894 case DMG_ACTION_DTP_REQ6:
18895 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18896 break;
18897 case DMG_ACTION_DTP_RES7:
18898 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18899 break;
18900 case DMG_ACTION_RELAY_SEARCH_REQ8:
18901 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18902 offset += add_ff_destination_reds_aid(tree, tvb, pinfo, offset);
18903 break;
18904 case DMG_ACTION_RELAY_SEARCH_RES9:
18905 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18906 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18907 break;
18908 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10:
18909 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18910 break;
18911 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11:
18912 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18913 left_offset =
18914 tvb_reported_length_remaining(tvb, offset);
18915 while(left_offset > 0) {
18916 proto_tree_add_item(tree, hf_ieee80211_ff_peer_sta_aid, tvb, offset, 1, ENC_NA0x00000000);
18917 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset+1, 1, ENC_NA0x00000000);
18918 proto_tree_add_item(tree, hf_ieee80211_ff_internal_angle, tvb, offset+2, 1, ENC_NA0x00000000);
18919 proto_tree_add_item(tree, hf_ieee80211_ff_recommend, tvb, offset+2, 1, ENC_NA0x00000000);
18920 /* another reserved byte */
18921 offset += 4;
18922 left_offset -= 4;
18923 }
18924 break;
18925 case DMG_ACTION_RLS_REQ12:
18926 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18927 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
18928 offset += add_ff_relay_aid(tree, tvb, pinfo, offset);
18929 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
18930 break;
18931 case DMG_ACTION_RLS_RES13:
18932 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18933 break;
18934 case DMG_ACTION_RLS_ANNOUNCE14:
18935 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18936 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18937 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
18938 offset += add_ff_relay_aid(tree, tvb, pinfo, offset);
18939 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
18940 break;
18941 case DMG_ACTION_RLS_TEARDOWN15:
18942 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
18943 offset += add_ff_relay_aid(tree, tvb, pinfo, offset);
18944 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
18945 break;
18946 case DMG_ACTION_RELAY_ACK_REQ16:
18947 case DMG_ACTION_RELAY_ACK_RES17:
18948 break;
18949 case DMG_ACTION_TPA_REQ18:
18950 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18951 offset += add_ff_timing_offset(tree, tvb, pinfo, offset);
18952 offset += add_ff_sampling_frequency_offset(tree, tvb, pinfo, offset);
18953 break;
18954 case DMG_ACTION_TPA_RES19:
18955 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18956 break;
18957 case DMG_ACTION_TPA_REP20:
18958 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18959 break;
18960 case DMG_ACTION_ROC_REQ21:
18961 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18962 offset += add_ff_relay_operation_type(tree, tvb, pinfo, offset);
18963 break;
18964 case DMG_ACTION_ROC_RES22:
18965 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18966 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18967 break;
18968 }
18969 return offset - start;
18970}
18971
18972unsigned
18973add_ff_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
18974 association_sanity_check_t *association_sanity_check)
18975{
18976 switch (tvb_get_uint8(tvb, offset) & 0x7f) {
18977 case CAT_SPECTRUM_MGMT0: /* 0 */
18978 return add_ff_action_spectrum_mgmt(tree, tvb, pinfo, offset);
18979 case CAT_QOS1: /* 1 */
18980 return add_ff_action_qos(tree, tvb, pinfo, offset);
18981 case CAT_DLS2: /* 2 */
18982 return add_ff_action_dls(tree, tvb, pinfo, offset);
18983 case CAT_BLOCK_ACK3: /* 3 */
18984 return add_ff_action_block_ack(tree, tvb, pinfo, offset);
18985 case CAT_PUBLIC4: /* 4 */
18986 return add_ff_action_public(tree, tvb, pinfo, offset);
18987 case CAT_RADIO_MEASUREMENT5: /* 5 */
18988 return add_ff_action_radio_measurement(tree, tvb, pinfo, offset);
18989 case CAT_FAST_BSS_TRANSITION6: /* 6 */
18990 return add_ff_action_fast_bss_transition(tree, tvb, pinfo, offset);
18991 case CAT_HT7: /* 7 */
18992 return add_ff_action_ht(tree, tvb, pinfo, offset);
18993 case CAT_SA_QUERY8: /* 8 */
18994 return add_ff_action_sa_query(tree, tvb, pinfo, offset);
18995 case CAT_PUBLIC_PROTECTED9: /* 9 */
18996 return add_ff_action_protected_public(tree, tvb, pinfo, offset);
18997 case CAT_WNM10: /* 10 */
18998 return add_ff_action_wnm(tree, tvb, pinfo, offset);
18999 case CAT_UNPROTECTED_WNM11: /* 11 */
19000 return add_ff_action_unprotected_wnm(tree, tvb, pinfo, offset);
19001 case CAT_TDLS12: /* 12 */
19002 return add_ff_action_tdls(tree, tvb, pinfo, offset);
19003 case CAT_MESH13: /* 13 */
19004 return add_ff_action_mesh(tree, tvb, pinfo, offset);
19005 case CAT_MULTIHOP14: /* 14 */
19006 return add_ff_action_multihop(tree, tvb, pinfo, offset);
19007 case CAT_SELF_PROTECTED15: /* 15 */
19008 return add_ff_action_self_protected(tree, tvb, pinfo, offset, association_sanity_check);
19009 case CAT_DMG16: /* 16 */
19010 return add_ff_action_dmg(tree, tvb, pinfo, offset);
19011 case CAT_MGMT_NOTIFICATION17: /* Management notification frame - 17 */
19012 return add_ff_action_mgmt_notification(tree, tvb, pinfo, offset);
19013 case CAT_FAST_SESSION_TRANSFER18: /* 18 */
19014 return add_ff_action_fst(tree, tvb, pinfo, offset);
19015 case CAT_ROBUST_AV_STREAMING19: /* 19 */
19016 return add_ff_action_robust_av_streaming(tree, tvb, pinfo, offset);
19017 case CAT_UNPROTECTED_DMG20: /* 20 */
19018 return add_ff_action_unprotected_dmg(tree, tvb, pinfo, offset);
19019 case CAT_VHT21: /* 21 */
19020 return add_ff_action_vht(tree, tvb, pinfo, offset);
19021 case CAT_S1G22: /* 22 */
19022 return add_ff_action_s1g(tree, tvb, pinfo, offset);
19023 case CAT_PROTECTED_S1G23: /* 23 */
19024 return add_ff_action_protected_s1g(tree, tvb, pinfo, offset);
19025 case CAT_HE30:
19026 return add_ff_action_he(tree, tvb, pinfo, offset);
19027 case CAT_PROTECTED_HE31:
19028 return add_ff_action_protected_he(tree, tvb, pinfo, offset);
19029 case CAT_PROTECTED_EHT37:
19030 return add_ff_action_protected_eht(tree, tvb, pinfo, offset);
19031 case CAT_PROTECTED_FTM34:
19032 return add_ff_action_protected_ftm(tree, tvb, pinfo, offset);
19033 case CAT_EHT36:
19034 return add_ff_action_eht(tree, tvb, pinfo, offset);
19035 case CAT_VENDOR_SPECIFIC_PROTECTED126: /* Same as below for now */
19036 case CAT_VENDOR_SPECIFIC127: /* Vendor Specific Protected Category - 127 */
19037 return add_ff_action_vendor_specific(tree, tvb, pinfo, offset);
19038 default:
19039 add_ff_category_code(tree, tvb, pinfo, offset);
19040 return 1;
19041 }
19042}
19043
19044static const value_string ieee80211_rsn_cipher_vals[] = {
19045 {0, "NONE"},
19046 {1, "WEP (40-bit)"},
19047 {2, "TKIP"},
19048 {3, "AES (OCB)"},
19049 {4, "AES (CCM)"},
19050 {5, "WEP (104-bit)"},
19051 {6, "BIP (128)"},
19052 {7, "Group addressed traffic not allowed"},
19053 {8, "GCMP (128)" },
19054 {9, "GCMP (256)" },
19055 {10, "CCMP (256)" },
19056 {11, "BIP (GMAC-128)" },
19057 {12, "BIP (GMAC-256)" },
19058 {13, "BIP (CMAC-256)" },
19059 {0, NULL((void*)0)}
19060};
19061
19062#define AKMS_NONE0x000FAC00 0x000FAC00
19063#define AKMS_WPA0x000FAC01 0x000FAC01
19064#define AKMS_PSK0x000FAC02 0x000FAC02
19065#define AKMS_FT_IEEE802_1X0x000FAC03 0x000FAC03
19066#define AKMS_FT_PSK0x000FAC04 0x000FAC04
19067#define AKMS_WPA_SHA2560x000FAC05 0x000FAC05
19068#define AKMS_PSK_SHA2560x000FAC06 0x000FAC06
19069#define AKMS_TDLS0x000FAC07 0x000FAC07
19070#define AKMS_SAE0x000FAC08 0x000FAC08
19071#define AKMS_FT_SAE0x000FAC09 0x000FAC09
19072#define AKMS_AP_PEER_KEY0x000FAC0A 0x000FAC0A
19073#define AKMS_WPA_SHA256_SUITEB0x000FAC0B 0x000FAC0B
19074#define AKMS_WPA_SHA384_SUITEB0x000FAC0C 0x000FAC0C
19075#define AKMS_FT_IEEE802_1X_SHA3840x000FAC0D 0x000FAC0D
19076#define AKMS_FILS_SHA2560x000FAC0E 0x000FAC0E
19077#define AKMS_FILS_SHA3840x000FAC0F 0x000FAC0F
19078#define AKMS_FT_FILS_SHA2560x000FAC10 0x000FAC10
19079#define AKMS_FT_FILS_SHA3840x000FAC11 0x000FAC11
19080#define AKMS_OWE0x000FAC12 0x000FAC12
19081#define AKMS_SAE_GROUP_DEPEND0x000FAC18 0x000FAC18
19082#define AKMS_FT_SAE_GROUP_DEPEND0x000FAC19 0x000FAC19
19083
19084static const value_string ieee80211_rsn_keymgmt_vals[] = {
19085 {0, "NONE"},
19086 {1, "WPA"},
19087 {2, "PSK"},
19088 {3, "FT over IEEE 802.1X"},
19089 {4, "FT using PSK"},
19090 {5, "WPA (SHA256)"},
19091 {6, "PSK (SHA256)"},
19092 {7, "TDLS / TPK Handshake (SHA256)"},
19093 {8, "SAE (SHA256)" },
19094 {9, "FT using SAE (SHA256)" },
19095 {10, "APPeerKey (SHA256)" },
19096 {11, "WPA (SHA256-SuiteB)" },
19097 {12, "WPA (SHA384-SuiteB)" },
19098 {13, "FT over IEEE 802.1X (SHA384)" },
19099 {14, "FILS (SHA256 and AES-SIV-256)" },
19100 {15, "FILS (SHA384 and AES-SIV-512)" },
19101 {16, "FT over FILS (SHA256 and AES-SIV-256)" },
19102 {17, "FT over FILS (SHA384 and AES-SIV-512)" },
19103 {18, "Opportunistic Wireless Encryption"},
19104 {19, "FT using PSK (SHA384)"},
19105 {20, "PSK (SHA384)"},
19106 {21, "PASN"},
19107 {24, "SAE (GROUP-DEPEND)"},
19108 {25, "FT using SAE (GROUP-DEPEND)"},
19109 {0, NULL((void*)0)}
19110};
19111
19112#define OUIBASELEN(64 + 20) (MAXNAMELEN64 + 20)
19113
19114static void
19115oui_base_custom(char *result, uint32_t oui)
19116{
19117 uint8_t p_oui[3];
19118 const char *manuf_name;
19119
19120 p_oui[0] = oui >> 16 & 0xFF;
19121 p_oui[1] = oui >> 8 & 0xFF;
19122 p_oui[2] = oui & 0xFF;
19123
19124 static_assert_Static_assert(OUIBASELEN(64 + 20) <= ITEM_LABEL_LENGTH240, "Buffer size mismatch!");
19125 /* Attempt an OUI lookup. */
19126 manuf_name = uint_get_manuf_name_if_known(oui);
19127 if (manuf_name == NULL((void*)0)) {
19128 /* Could not find an OUI. */
19129 snprintf(result, OUIBASELEN(64 + 20), "%02x:%02x:%02x", p_oui[0], p_oui[1], p_oui[2]);
19130 }
19131 else {
19132 char name[MAXNAMELEN64+2];
19133 snprintf(name, MAXNAMELEN64+1, "%.*s", MAXNAMELEN64, manuf_name);
19134 /* Found an address string. */
19135 snprintf(result, OUIBASELEN(64 + 20), "%02x:%02x:%02x (%s)", p_oui[0], p_oui[1], p_oui[2], name);
19136 }
19137}
19138
19139static void
19140rsn_gcs_base_custom(char *result, uint32_t gcs)
19141{
19142 char oui_result[OUIBASELEN(64 + 20)];
19143 char *tmp_str;
19144
19145 oui_result[0] = '\0';
19146 oui_base_custom(oui_result, gcs >> 8);
19147 tmp_str = val_to_str(NULL((void*)0), gcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
19148 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19149 wmem_free(NULL((void*)0), tmp_str);
19150}
19151
19152static void
19153rsn_pcs_base_custom(char *result, uint32_t pcs)
19154{
19155 char oui_result[OUIBASELEN(64 + 20)];
19156 char *tmp_str;
19157
19158 oui_result[0] = '\0';
19159 oui_base_custom(oui_result, pcs >> 8);
19160 tmp_str = val_to_str(NULL((void*)0), pcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
19161 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19162 wmem_free(NULL((void*)0), tmp_str);
19163
19164}
19165static void
19166rsn_akms_base_custom(char *result, uint32_t akms)
19167{
19168 char oui_result[OUIBASELEN(64 + 20)];
19169 char *tmp_str;
19170
19171 oui_result[0] = '\0';
19172 oui_base_custom(oui_result, akms >> 8);
19173 tmp_str = val_to_str(NULL((void*)0), akms & 0xFF, ieee80211_rsn_keymgmt_vals, "Unknown %d");
19174 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19175 wmem_free(NULL((void*)0), tmp_str);
19176}
19177
19178static char *
19179rsn_pcs_return(wmem_allocator_t *scope, uint32_t pcs)
19180{
19181 char *result;
19182
19183 result = (char *)wmem_alloc(scope, SHORT_STR256);
19184 result[0] = '\0';
19185 rsn_pcs_base_custom(result, pcs);
19186
19187 return result;
19188}
19189
19190static char *
19191rsn_akms_return(wmem_allocator_t *scope, uint32_t akms)
19192{
19193 char *result;
19194
19195 result = (char *)wmem_alloc(scope, SHORT_STR256);
19196 result[0] = '\0';
19197 rsn_akms_base_custom(result, akms);
19198
19199 return result;
19200}
19201
19202static void
19203rsn_gmcs_base_custom(char *result, uint32_t gmcs)
19204{
19205 char oui_result[OUIBASELEN(64 + 20)];
19206 char *tmp_str;
19207
19208 oui_result[0] = '\0';
19209 oui_base_custom(oui_result, gmcs >> 8);
19210 tmp_str = val_to_str(NULL((void*)0), gmcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
19211 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19212 wmem_free(NULL((void*)0), tmp_str);
19213}
19214
19215static void
19216rsni_base_custom(char *result, uint8_t rsni)
19217{
19218 double temp_double;
19219
19220 if (rsni < 255) {
19221 temp_double = (double)rsni - 20;
19222 snprintf(result, ITEM_LABEL_LENGTH240, "%.1f dB", (temp_double / 2));
19223 } else
19224 snprintf(result, ITEM_LABEL_LENGTH240, "%d (Measurement not available)", rsni);
19225}
19226
19227static void
19228vht_tpe_custom(char *result, uint8_t txpwr)
19229{
19230 int8_t txpwr_db;
19231
19232 txpwr_db = (int8_t)(txpwr);
19233 snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dBm", (txpwr_db/2.0));
19234}
19235
19236static void
19237tpe_psd_custom(char *result, uint8_t txpwr)
19238{
19239 int8_t txpwr_db;
19240
19241 txpwr_db = (int8_t)(txpwr);
19242 if (txpwr_db == -128) {
19243 snprintf(result, ITEM_LABEL_LENGTH240, "Channel cannot be used for transmission");
19244 } else if (txpwr_db == 127) {
19245 snprintf(result, ITEM_LABEL_LENGTH240, "No maximum PSD is specified for channel");
19246 } else {
19247 snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dBm/MHz", (txpwr_db/2.0));
19248 }
19249}
19250
19251static void
19252channel_number_custom(char *result, uint8_t channel_number)
19253{
19254 switch(channel_number){
19255 case 0:
19256 snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on all supported channels in the specified Operating Class)", channel_number);
19257 break;
19258 case 255:
19259 snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on all supported channels listed in the AP Channel Report)", channel_number);
19260 break;
19261 default :
19262 snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on that Channel Number)", channel_number);
19263 break;
19264 }
19265}
19266
19267/* WPA / WME */
19268static const value_string ieee802111_wfa_ie_type_vals[] = {
19269 { 1, "WPA Information Element" },
19270 { 2, "WMM/WME" },
19271 { 4, "WPS" },
19272 { 17, "Network Cost" },
19273 { 18, "Tethering" },
19274 { 0, NULL((void*)0) }
19275};
19276
19277static const value_string ieee80211_wfa_ie_wpa_cipher_vals[] = {
19278 { 0, "NONE" },
19279 { 1, "WEP (40-bit)" },
19280 { 2, "TKIP" },
19281 { 3, "AES (OCB)" },
19282 { 4, "AES (CCM)" },
19283 { 5, "WEP (104-bit)" },
19284 { 6, "BIP" },
19285 { 7, "Group addressed traffic not allowed" },
19286 { 0, NULL((void*)0) }
19287};
19288
19289static const value_string ieee80211_wfa_ie_wpa_keymgmt_vals[] = {
19290 { 0, "NONE" },
19291 { 1, "WPA" },
19292 { 2, "PSK" },
19293 { 3, "FT over IEEE 802.1X" },
19294 { 4, "FT using PSK" },
19295 { 5, "WPA (SHA256)" },
19296 { 6, "PSK (SHA256)" },
19297 { 7, "TDLS / TPK Handshake" },
19298 { 0, NULL((void*)0) }
19299};
19300
19301static const value_string ieee80211_wfa_ie_wme_acs_vals[] = {
19302 { 0, "Best Effort" },
19303 { 1, "Background" },
19304 { 2, "Video" },
19305 { 3, "Voice" },
19306 { 0, NULL((void*)0) }
19307};
19308
19309static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals[] = {
19310 { 0, "Uplink" },
19311 { 1, "Downlink" },
19312 { 2, "Direct link" },
19313 { 3, "Bidirectional link" },
19314 { 0, NULL((void*)0) }
19315};
19316
19317static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals[] = {
19318 { 0, "Legacy" },
19319 { 1, "U-APSD" },
19320 { 0, NULL((void*)0) }
19321};
19322
19323static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals[] = {
19324 { 0, "Best Effort" },
19325 { 1, "Background" },
19326 { 2, "Spare" },
19327 { 3, "Excellent Effort" },
19328 { 4, "Controlled Load" },
19329 { 5, "Video" },
19330 { 6, "Voice" },
19331 { 7, "Network Control" },
19332 { 0, NULL((void*)0) }
19333};
19334
19335/* Cost Level https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/24b04427-4ed6-4d12-a73d-c89ea72c7a94 */
19336static const value_string ieee80211_wfa_ie_nc_cost_level_vals[] = {
19337 { 0x0, "Unknown / The connection cost is unknown" },
19338 { 0x01, "Unrestricted / The connection is unlimited and has unrestricted usage constraints" },
19339 { 0x02, "Fixed / Usage counts toward a fixed allotment of data which the user has already paid for (or agreed to pay for)" },
19340 { 0x04, "Variable / The connection cost is on a per-byte basis" },
19341 {0, NULL((void*)0)}
19342};
19343
19344/* Cost Flags https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/b601a6a0-a4ff-4527-bf43-2eeee8c5796b */
19345static const value_string ieee80211_wfa_ie_nc_cost_flags_vals[] = {
19346 { 0x0, "Unknown / The usage is unknown or unrestricted" },
19347 { 0x01, "Over Data Limit / Usage has exceeded the data limit of the metered network; different network costs or conditions might apply" },
19348 { 0x02, "Congested / The network operator is experiencing or expecting heavy load" },
19349 { 0x04, "Roaming / The tethering connection is roaming outside the provider's home network or affiliates" },
19350 { 0x08, "Approaching Data Limit / Usage is near the data limit of the metered network; different network costs or conditions might apply once the limit is reached" },
19351 {0, NULL((void*)0)}
19352};
19353
19354
19355static const value_string ieee80211_wfa_ie_tethering_type_vals[] = {
19356 { 0x2B, "Broadcasted" },
19357 {0, NULL((void*)0)}
19358};
19359
19360
19361static const value_string ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals[] = {
19362 { 0, "WMM AP may deliver all buffered frames (MSDUs and MMPDUs)" },
19363 { 1, "WMM AP may deliver a maximum of 2 buffered frames (MSDUs and MMPDUs) per USP" },
19364 { 2, "WMM AP may deliver a maximum of 4 buffered frames (MSDUs and MMPDUs) per USP" },
19365 { 3, "WMM AP may deliver a maximum of 6 buffered frames (MSDUs and MMPDUs) per USP" },
19366 { 0, NULL((void*)0)}
19367};
19368static const true_false_string ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs = {
19369 "WMM delivery and trigger enabled",
19370 "non-WMM PS"
19371};
19372
19373/* az: Ranging Parameters */
19374static const val64_string ieee80211_ranging_status_vals[] = {
19375 { 0, "Reserved" },
19376 { 1, "Successful; measurement exchanges are about to begin" },
19377 { 2, "Request incapable; do not send same request again; FTM session ends" },
19378 { 3, "Request failed; do not send new request for Value seconds; FTM session ends" },
19379 { 0, NULL((void*)0) }
19380};
19381
19382static const val64_string ieee80211_ranging_fmt_bw_vals[] = {
19383 { 0, "HE 20 MHz" },
19384 { 1, "HE 40 MHz" },
19385 { 2, "HE 80 MHz" },
19386 { 3, "HE 80+80 MHz" },
19387 { 4, "HE 160 MHz (two separate RF LOs)" },
19388 { 5, "HE 160 MHz (single RF LO)" },
19389 /* values 6-63 reserved */
19390 { 0, NULL((void*)0) }
19391};
19392
19393static const val64_string ieee80211_ranging_ltf_total_vals[] = {
19394 { 0, "4 LTFs" },
19395 { 1, "8 LTFs" },
19396 { 2, "16 LTFs" },
19397 { 3, "No max LTFs specified" },
19398 { 0, NULL((void*)0) }
19399};
19400
19401static void
19402wpa_mcs_base_custom(char *result, uint32_t mcs)
19403{
19404 char oui_result[OUIBASELEN(64 + 20)];
19405 char *tmp_str;
19406
19407 oui_result[0] = '\0';
19408 oui_base_custom(oui_result, mcs >> 8);
19409 tmp_str = val_to_str(NULL((void*)0), mcs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
19410 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19411 wmem_free(NULL((void*)0), tmp_str);
19412}
19413
19414static void
19415wpa_ucs_base_custom(char *result, uint32_t ucs)
19416{
19417 char oui_result[OUIBASELEN(64 + 20)];
19418 char *tmp_str;
19419
19420 oui_result[0] = '\0';
19421 oui_base_custom(oui_result, ucs >> 8);
19422 tmp_str = val_to_str(NULL((void*)0), ucs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
19423 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19424 wmem_free(NULL((void*)0), tmp_str);
19425}
19426static void
19427wpa_akms_base_custom(char *result, uint32_t akms)
19428{
19429 char oui_result[OUIBASELEN(64 + 20)];
19430 char *tmp_str;
19431
19432 oui_result[0] = '\0';
19433 oui_base_custom(oui_result, akms >> 8);
19434 tmp_str = val_to_str(NULL((void*)0), akms & 0xFF, ieee80211_wfa_ie_wpa_keymgmt_vals, "Unknown %d");
19435 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19436 wmem_free(NULL((void*)0), tmp_str);
19437}
19438
19439static char *
19440wpa_ucs_return(wmem_allocator_t *scope, uint32_t ucs)
19441{
19442 char *result;
19443
19444 result = (char *)wmem_alloc(scope, SHORT_STR256);
19445 result[0] = '\0';
19446 wpa_ucs_base_custom(result, ucs);
19447
19448 return result;
19449}
19450
19451static char *
19452wpa_akms_return(wmem_allocator_t *scope, uint32_t akms)
19453{
19454 char *result;
19455
19456 result = (char *)wmem_alloc(scope, SHORT_STR256);
19457 result[0] = '\0';
19458 wpa_akms_base_custom(result, akms);
19459
19460 return result;
19461}
19462
19463/* For each Field */
19464static const value_string ieee80211_wapi_suite_type[] = {
19465 {0, "Reserved"},
19466 {1, "WAI Certificate Authentication and Key Management"},
19467 {2, "WAI Preshared Key Authentication and Key Management"},
19468 {0, NULL((void*)0)},
19469};
19470/* For Summary Tag Information */
19471static const value_string ieee80211_wapi_suite_type_short[] = {
19472 {0, "Reserved"},
19473 {1, "WAI-CERT"},
19474 {2, "WAI-PSK"},
19475 {0, NULL((void*)0)},
19476};
19477
19478static const value_string ieee80211_wapi_cipher_type[] = {
19479 {0, "Reserved"},
19480 {1, "WPI-SMS4"},
19481 {0, NULL((void*)0)},
19482};
19483
19484static const value_string ieee802111_wfa_ie_wme_type[] = {
19485 { 0, "Information Element" },
19486 { 1, "Parameter Element" },
19487 { 2, "TSPEC Element" },
19488 { 0, NULL((void*)0)}
19489};
19490
19491static const value_string ft_subelem_id_vals[] = {
19492 {0, "Reserved"},
19493 {1, "PMK-R1 key holder identifier (R1KH-ID)"},
19494 {2, "GTK subelement"},
19495 {3, "PMK-R0 key holder identifier (R0KH-ID)"},
19496 {4, "IGTK"},
19497 {5, "Operating Channel Information (OCI)"},
19498 {6, "BIGTK"},
19499 {7, "WIGTK"},
19500 {8, "MLO GTK"},
19501 {9, "MLO IGTK"},
19502 {10, "MLO BIGTK"},
19503 {0, NULL((void*)0)}
19504};
19505
19506static int
19507dissect_wme_qos_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
19508{
19509 proto_item *wme_qos_info_item;
19510
19511 static int * const ieee80211_mgt_req[] = {
19512 &hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
19513 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
19514 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
19515 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
19516 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
19517 &hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
19518 NULL((void*)0)
19519 };
19520
19521 static int * const ieee80211_mgt_resp[] = {
19522 &hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
19523 &hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
19524 &hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
19525 NULL((void*)0)
19526 };
19527
19528 switch (ftype) {
19529 case MGT_ASSOC_REQ0x00:
19530 case MGT_PROBE_REQ0x04:
19531 case MGT_REASSOC_REQ0x02:
19532 {
19533 /* To AP so decode as per WMM standard Figure 7 QoS Info field when sent from WMM STA*/
19534 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_qos_info,
19535 ett_wme_qos_info, ieee80211_mgt_req,
19536 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19537 break;
19538 }
19539 case MGT_BEACON0x08:
19540 case MGT_PROBE_RESP0x05:
19541 case MGT_ASSOC_RESP0x01:
19542 case MGT_REASSOC_RESP0x03:
19543 case MGT_ACTION0x0D:
19544 {
19545 /* From AP so decode as per WMM standard Figure 6 QoS Info field when sent from WMM AP */
19546 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_qos_info,
19547 ett_wme_qos_info, ieee80211_mgt_resp,
19548 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19549 break;
19550 }
19551 default:
19552 wme_qos_info_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_qos_info, tvb, offset, 1, ENC_NA0x00000000);
19553 expert_add_info_format(pinfo, wme_qos_info_item, &ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype, "Could not deduce direction to decode correctly, ftype %u", ftype);
19554 break;
19555 }
19556
19557 offset += 1;
19558 return offset;
19559}
19560
19561static int * const update_edca_info_headers[] = {
19562 &hf_ieee80211_s1g_update_edca_override,
19563 &hf_ieee80211_s1g_update_edca_ps_poll_aci,
19564 &hf_ieee80211_s1g_update_edca_raw_aci,
19565 &hf_ieee80211_s1g_update_edca_sta_type,
19566 &hf_ieee80211_s1g_update_edca_reserved,
19567 NULL((void*)0)
19568};
19569
19570static const value_string sta_field_type_vals[] = {
19571 { 0, "Valid for both sensor and non-sensor STAs" },
19572 { 1, "Valid for sensor STAs" },
19573 { 2, "Valid for non-sensor STAs" },
19574 { 3, "Reserved" },
19575 { 0, NULL((void*)0) }
19576};
19577
19578static int
19579decode_qos_parameter_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
19580{
19581 int i;
19582 bool_Bool is_s1g = sta_is_s1g(pinfo);
19583 /* WME QoS Info Field */
19584 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
19585 /* WME Reserved Field or EDCA Update */
19586 if (is_s1g) {
19587 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
19588 hf_ieee80211_s1g_update_edca_info,
19589 ett_update_edca_info, update_edca_info_headers,
19590 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19591
19592 } else {
19593 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_reserved, tvb, offset, 1, ENC_NA0x00000000);
19594 }
19595
19596 offset += 1;
19597 /* AC Parameters */
19598 for (i = 0; i < 4; i++)
19599 {
19600 proto_item *ac_item, *aci_aifsn_item, *ecw_item, *cw_item;
19601 proto_tree *ac_tree, *ecw_tree;
19602 uint8_t aci_aifsn, ecw, ecwmin, ecwmax;
19603 uint16_t cwmin, cwmax;
19604 static int * const ieee80211_wfa_ie_wme_be[] = {
19605 &hf_ieee80211_wfa_ie_wme_acp_aci_be,
19606 &hf_ieee80211_wfa_ie_wme_acp_acm_be,
19607 &hf_ieee80211_wfa_ie_wme_acp_aifsn_be,
19608 &hf_ieee80211_wfa_ie_wme_acp_reserved_be,
19609 NULL((void*)0)
19610 };
19611
19612 static int * const ieee80211_wfa_ie_wme_bk[] = {
19613 &hf_ieee80211_wfa_ie_wme_acp_aci_bk,
19614 &hf_ieee80211_wfa_ie_wme_acp_acm_bk,
19615 &hf_ieee80211_wfa_ie_wme_acp_aifsn_bk,
19616 &hf_ieee80211_wfa_ie_wme_acp_reserved_bk,
19617 NULL((void*)0)
19618 };
19619
19620 static int * const ieee80211_wfa_ie_wme_vi[] = {
19621 &hf_ieee80211_wfa_ie_wme_acp_aci_vi,
19622 &hf_ieee80211_wfa_ie_wme_acp_acm_vi,
19623 &hf_ieee80211_wfa_ie_wme_acp_aifsn_vi,
19624 &hf_ieee80211_wfa_ie_wme_acp_reserved_vi,
19625 NULL((void*)0)
19626 };
19627
19628 static int * const ieee80211_wfa_ie_wme_vo[] = {
19629 &hf_ieee80211_wfa_ie_wme_acp_aci_vo,
19630 &hf_ieee80211_wfa_ie_wme_acp_acm_vo,
19631 &hf_ieee80211_wfa_ie_wme_acp_aifsn_vo,
19632 &hf_ieee80211_wfa_ie_wme_acp_reserved_vo,
19633 NULL((void*)0)
19634 };
19635
19636 static int * const * ie_wme_hdrs[] = {
19637 ieee80211_wfa_ie_wme_be,
19638 ieee80211_wfa_ie_wme_bk,
19639 ieee80211_wfa_ie_wme_vi,
19640 ieee80211_wfa_ie_wme_vo
19641 };
19642
19643 static int * const ecw_max_hf[] = {
19644 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_be,
19645 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_bk,
19646 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_vi,
19647 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_vo
19648 };
19649
19650 static int * const ecw_min_hf[] = {
19651 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_be,
19652 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_bk,
19653 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_vi,
19654 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_vo
19655 };
19656
19657 static int * const txop_limit_hf[] = {
19658 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_be,
19659 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_bk,
19660 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_vi,
19661 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_vo
19662 };
19663
19664 ac_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_ac_parameters, tvb, offset, 4, ENC_NA0x00000000);
19665 ac_tree = proto_item_add_subtree(ac_item, ett_wme_ac);
19666
19667 /* ACI/AIFSN Field */
19668 aci_aifsn_item = proto_tree_add_bitmask_with_flags(ac_tree, tvb, offset, hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
19669 ett_wme_aci_aifsn, ie_wme_hdrs[i],
19670 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19671 aci_aifsn = tvb_get_uint8(tvb, offset);
19672 /* 802.11-2012, 8.4.2.31 EDCA Parameter Set element */
19673 if (aci_aifsn < 2) {
19674 expert_add_info_format(pinfo, aci_aifsn_item, &ei_ieee80211_qos_bad_aifsn,
19675 "The minimum value for the AIFSN subfield is 2 (found %u).", aci_aifsn);
19676 }
19677 proto_item_append_text(ac_item, " ACI %u (%s), ACM %s, AIFSN %u",
19678 (aci_aifsn & 0x60) >> 5, try_val_to_str((aci_aifsn & 0x60) >> 5, ieee80211_wfa_ie_wme_acs_vals),
19679 (aci_aifsn & 0x10) ? "yes" : "no", aci_aifsn & 0x0f);
19680 offset += 1;
19681
19682 /* ECWmin/ECWmax field */
19683 ecw_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_ecw, tvb, offset, 1, ENC_NA0x00000000);
19684 ecw_tree = proto_item_add_subtree(ecw_item, ett_wme_ecw);
19685 ecw = tvb_get_uint8(tvb, offset);
19686 ecwmin = ecw & 0x0f;
19687 ecwmax = (ecw & 0xf0) >> 4;
19688 cwmin= (1 << ecwmin) - 1;
19689 cwmax= (1 << ecwmax) - 1;
19690 cw_item = proto_tree_add_item(ecw_tree, *ecw_max_hf[i], tvb, offset, 1, ENC_NA0x00000000);
19691 proto_item_append_text(cw_item, " (CW Max: %u)", cwmax);
19692 cw_item = proto_tree_add_item(ecw_tree, *ecw_min_hf[i], tvb, offset, 1, ENC_NA0x00000000);
19693 proto_item_append_text(cw_item, " (CW Min: %u)", cwmin);
19694 proto_item_append_text(ac_item, ", ECWmin/max %u/%u (CWmin/max %u/%u)", ecwmin, ecwmax, cwmin, cwmax);
19695 offset += 1;
19696
19697 /* TXOP Limit */
19698 proto_tree_add_item(ac_tree, *txop_limit_hf[i], tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19699 proto_item_append_text(ac_item, ", TXOP %u", tvb_get_letohs(tvb, offset));
19700 offset += 2;
19701 }
19702
19703 return offset;
19704}
19705
19706static int
19707dissect_vendor_ie_wpawme(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, uint32_t tag_len, int ftype)
19708{
19709 uint8_t type;
19710
19711 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_type, tvb, offset, 1, ENC_NA0x00000000);
19712 type = tvb_get_uint8(tvb, offset);
19713 proto_item_append_text(tree, ": %s", val_to_str(pinfo->pool, type, ieee802111_wfa_ie_type_vals, "Unknown %d"));
19714 offset += 1;
19715
19716 switch (type) {
19717 case 1: /* Wi-Fi Protected Access (WPA) */
19718 {
19719 proto_item *wpa_mcs_item, *wpa_ucs_item, *wpa_akms_item;
19720 proto_item *wpa_sub_ucs_item, *wpa_sub_akms_item;
19721 proto_tree *wpa_mcs_tree, *wpa_ucs_tree, *wpa_akms_tree;
19722 proto_tree *wpa_sub_ucs_tree, *wpa_sub_akms_tree;
19723 uint16_t ucs_count, akms_count;
19724 unsigned ii;
19725
19726 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19727 offset += 2;
19728
19729 /* Multicast Cipher Suite */
19730 wpa_mcs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_mcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
19731 wpa_mcs_tree = proto_item_add_subtree(wpa_mcs_item, ett_wpa_mcs_tree);
19732 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19733
19734 /* Check if OUI is 00:50:F2 (WFA) */
19735 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
19736 {
19737 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_wfa_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
19738 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), GROUP_CIPHER_KEY);
19739 } else {
19740 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
19741 }
19742 offset += 4;
19743
19744 /* Unicast Cipher Suites */
19745 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19746 ucs_count = tvb_get_letohs(tvb, offset);
19747 offset += 2;
19748
19749 wpa_ucs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_list, tvb, offset, ucs_count * 4, ENC_NA0x00000000);
19750 wpa_ucs_tree = proto_item_add_subtree(wpa_ucs_item, ett_wpa_ucs_tree);
19751 for (ii = 0; ii < ucs_count; ii++)
19752 {
19753 wpa_sub_ucs_item = proto_tree_add_item(wpa_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
19754 wpa_sub_ucs_tree = proto_item_add_subtree(wpa_sub_ucs_item, ett_wpa_sub_ucs_tree);
19755 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19756
19757 /* Check if OUI is 00:50:F2 (WFA) */
19758 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
19759 {
19760 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19761 proto_item_append_text(wpa_ucs_item, " %s", wpa_ucs_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
19762 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), CIPHER_KEY);
19763 } else {
19764 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19765 }
19766 offset += 4;
19767 }
19768
19769 /* Authenticated Key Management Suites */
19770 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19771 akms_count = tvb_get_letohs(tvb, offset);
19772 offset += 2;
19773
19774 wpa_akms_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_list, tvb, offset, akms_count * 4, ENC_NA0x00000000);
19775 wpa_akms_tree = proto_item_add_subtree(wpa_akms_item, ett_wpa_akms_tree);
19776 for (ii = 0; ii < akms_count; ii++)
19777 {
19778 wpa_sub_akms_item = proto_tree_add_item(wpa_akms_tree, hf_ieee80211_wfa_ie_wpa_akms, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
19779 wpa_sub_akms_tree = proto_item_add_subtree(wpa_sub_akms_item, ett_wpa_sub_akms_tree);
19780 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19781
19782 /* Check if OUI is 00:50:F2 (WFA) */
19783 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
19784 {
19785 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19786 proto_item_append_text(wpa_akms_item, " %s", wpa_akms_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
19787 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), AKM_KEY);
19788 } else {
19789 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19790 }
19791 offset += 4;
19792 }
19793 break;
19794 }
19795 case 2: /* Wireless Multimedia Enhancements (WME) */
19796 {
19797 uint8_t subtype;
19798
19799 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_subtype, tvb, offset, 1, ENC_NA0x00000000);
19800 subtype = tvb_get_uint8(tvb, offset);
19801 proto_item_append_text(tree, ": %s", val_to_str(pinfo->pool, subtype, ieee802111_wfa_ie_wme_type, "Unknown %d"));
19802 offset += 1;
19803 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA0x00000000);
19804 offset += 1;
19805 switch (subtype) {
19806 case 0: /* WME Information Element */
19807 {
19808 /* WME QoS Info Field */
19809 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
19810 break;
19811 }
19812 case 1: /* WME Parameter Element */
19813 {
19814 offset = decode_qos_parameter_set(tree, tvb, pinfo, offset, ftype);
19815 break;
19816 }
19817 case 2: /* WME TSPEC Element */
19818 {
19819 static int * const ieee80211_wfa_ie_wme_tspec_tsinfo[] = {
19820 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
19821 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
19822 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
19823 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
19824 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
19825 NULL((void*)0)
19826 };
19827
19828 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
19829 ett_tsinfo_tree, ieee80211_wfa_ie_wme_tspec_tsinfo,
19830 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19831 offset += 3;
19832
19833 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19834 offset += 2;
19835
19836 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19837 offset += 2;
19838
19839 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19840 offset += 4;
19841
19842 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19843 offset += 4;
19844
19845 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19846 offset += 4;
19847
19848 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19849 offset += 4;
19850
19851 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19852 offset += 4;
19853
19854 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19855 offset += 4;
19856
19857 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19858 offset += 4;
19859
19860 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19861 offset += 4;
19862
19863 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19864 offset += 4;
19865
19866 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19867 offset += 4;
19868
19869 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19870 offset += 4;
19871
19872 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19873 offset += 2;
19874
19875 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19876 offset += 2;
19877
19878 break;
19879 }
19880 default:
19881 /* No default Action */
19882 break;
19883 } /* End switch (subtype) */
19884 break;
19885 }
19886 case 4: /* WPS: Wifi Protected Setup */
19887 {
19888 dissect_wps_tlvs(tree, tvb, offset, tag_len-1, pinfo, false0);
19889 }
19890 break;
19891 case 17: /* Network Cost: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/88f0cdf4-cdf2-4455-b849-4abf1e5c11ac */
19892 {
19893 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_cost_level, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
19894 offset += 1;
19895
19896 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
19897 offset += 1;
19898
19899 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_cost_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
19900 offset += 1;
19901
19902 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
19903 offset += 1;
19904 }
19905 break;
19906 case 18: /* Tethering: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/a097f5bb-6eca-44ad-9a02-20d46ad30d6d */
19907 {
19908 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_tethering_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19909 offset += 2;
19910
19911 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_tethering_mac_length, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19912 offset += 2;
19913
19914 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_tethering_mac, tvb, offset, 6, ENC_NA0x00000000);
19915 offset += 6;
19916
19917 }
19918 break;
19919 default:
19920 /* No default Action...*/
19921 break;
19922 } /* End switch (type) */
19923
19924 return offset;
19925}
19926
19927/*
19928 * Dissect a group data cipher suite which consists of an OUI and a one-byte
19929 * selector: IEEE802.11 2012 Figure 9-256.
19930 *
19931 * Accepts a two entry array of header fields so we can use this elsewhere.
19932 */
19933static int dissect_group_data_cipher_suite(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
19934 proto_tree *tree, int offset, int *hf_array, int ett_val, char *label)
19935{
19936 proto_tree *gdcs_tree = NULL((void*)0);
19937
19938 gdcs_tree = proto_tree_add_subtree(tree, tvb, offset, 4, ett_val, NULL((void*)0),
19939 label);
19940 proto_tree_add_item(gdcs_tree, hf_array[0], tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19941 offset += 3;
19942 proto_tree_add_item(gdcs_tree, hf_array[1], tvb, offset, 1, ENC_NA0x00000000);
19943 offset += 1;
19944
19945 return offset;
19946}
19947
19948static int
19949dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
19950 int offset, uint32_t tag_len, association_sanity_check_t *association_sanity_check);
19951
19952static int
19953dissect_wfa_rsn_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
19954{
19955 int tag_len = tvb_reported_length(tvb);
19956
19957 if (tag_len > 0)
19958 dissect_rsn_ie(pinfo, tree, tvb, 0, tag_len, NULL((void*)0));
19959
19960 return tag_len;
19961}
19962
19963static int
19964dissect_wfa_rsn_override_2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
19965{
19966 int tag_len = tvb_reported_length(tvb);
19967
19968 if (tag_len > 0)
19969 dissect_rsn_ie(pinfo, tree, tvb, 0, tag_len, NULL((void*)0));
19970
19971 return tag_len;
19972}
19973
19974static int
19975dissect_rsnx_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int tag_len);
19976
19977static int
19978dissect_wfa_rsnx_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
19979{
19980 int tag_len = tvb_reported_length(tvb);
19981
19982 if (tag_len > 0)
19983 dissect_rsnx_ie(tvb, pinfo, tree, tag_len);
19984
19985 return tag_len;
19986}
19987
19988static int
19989dissect_wfa_rsn_selection(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
19990{
19991 int tag_len = tvb_reported_length(tvb);
19992
19993 proto_tree_add_item(tree, hf_ieee80211_wfa_rsn_selection, tvb, 0,
19994 1, ENC_NA0x00000000);
19995
19996 return tag_len;
19997}
19998
19999static int
20000dissect_wfa_rsn_override_link_kde(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20001{
20002 int tag_len = tvb_reported_length(tvb);
20003 int offset = 0;
20004
20005 proto_tree_add_item(tree, hf_ieee80211_wfa_rsn_or_link_kde_link_id, tvb, offset,
20006 1, ENC_NA0x00000000);
20007 offset++;
20008 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tree,
20009 tag_len - 1, -1, NULL((void*)0));
20010
20011 return tag_len;
20012}
20013
20014static const range_string qos_mgmt_attributes[] = {
20015 { 0, 0, "Reserved" },
20016 { 1, 1, "Port Range" },
20017 { 2, 2, "DSCP Policy" },
20018 { 3, 3, "TCLAS" },
20019 { 4, 4, "Domain Name" },
20020 { 5, 255, "Reserved" },
20021 { 0, 0, NULL((void*)0) }
20022};
20023
20024static int
20025ieee80211_frame_classifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
20026 proto_tree *tree, int offset, int tag_len);
20027
20028static int
20029dissect_qos_mgmt(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20030{
20031 int offset = 0;
20032 uint8_t attr_id;
20033 uint8_t attr_len;
20034 uint8_t attr_num = 0;
20035 proto_tree *sub_tree = NULL((void*)0);
20036
20037 while (tvb_captured_length_remaining(tvb, offset)) {
20038 attr_id = tvb_get_uint8(tvb, offset);
20039 attr_len = tvb_get_uint8(tvb, offset + 1);
20040 proto_tree *attr = NULL((void*)0);
20041
20042 attr = proto_tree_add_subtree_format(tree, tvb, offset, attr_len + 2,
20043 ett_qos_mgmt_attributes, NULL((void*)0),
20044 "QoS Management Attribute %d", attr_num++);
20045 proto_tree_add_item(attr, hf_ieee80211_qos_mgmt_attribute_id, tvb, offset,
20046 1, ENC_NA0x00000000);
20047 offset += 1;
20048
20049 proto_tree_add_item(attr, hf_ieee80211_qos_mgmt_attribute_len, tvb, offset,
20050 1, ENC_NA0x00000000);
20051 offset += 1;
20052
20053 switch (attr_id) {
20054 case 1:
20055 sub_tree = proto_tree_add_subtree(attr, tvb, offset, 1,
20056 ett_qos_mgmt_dscp_policy_capabilities, NULL((void*)0),
20057 "Port Range");
20058 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_start_port_range,
20059 tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
20060 offset += 2;
20061
20062 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_end_port_range, tvb,
20063 offset, 2, ENC_BIG_ENDIAN0x00000000);
20064 offset += 2;
20065 break;
20066 case 2:
20067 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20068 ett_qos_mgmt_dscp_policy, NULL((void*)0),
20069 "DSCP Policy");
20070
20071 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_dscp_pol_id, tvb,
20072 offset, 1, ENC_NA0x00000000);
20073 offset += 1;
20074
20075 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_dscp_pol_req_type,
20076 tvb, offset, 1, ENC_NA0x00000000);
20077 offset += 1;
20078
20079 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_dscp_pol_dscp, tvb,
20080 offset, 1, ENC_NA0x00000000);
20081 offset += 1;
20082 break;
20083 case 3:
20084 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20085 ett_qos_mgmt_tclas, NULL((void*)0),
20086 "TCLAS");
20087
20088 ieee80211_frame_classifier(tvb, pinfo, sub_tree, offset, attr_len);
20089 offset += attr_len;
20090 break;
20091 case 4:
20092 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20093 ett_qos_mgmt_domain_name, NULL((void*)0),
20094 "Domain Name");
20095 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_domain_name, tvb,
20096 offset, attr_len, ENC_ASCII0x00000000);
20097 offset += attr_len;
20098 break;
20099 default:
20100 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20101 ett_qos_mgmt_unknown_attribute, NULL((void*)0),
20102 "Unknown attribute");
20103 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_unknown_attr, tvb,
20104 offset, attr_len, ENC_NA0x00000000);
20105 offset += attr_len;
20106 break;
20107 }
20108 }
20109
20110 return offset;
20111}
20112
20113/*
20114 * Handle the HS 2.0 rev 2 OSU Server-only authenticated layer 2 Encryption
20115 * Network element. This is almost the same format as the RSNE so maybe some
20116 * common code can be used.
20117 */
20118static int
20119dissect_hs20_osen(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20120{
20121 int offset = 0;
20122 int hf_array[2] = { hf_ieee80211_group_data_cipher_suite_oui,
20123 hf_ieee80211_group_data_cipher_suite_type };
20124 proto_tree *pwc_list = NULL((void*)0);
20125 proto_item *pwcsi = NULL((void*)0);
20126 uint16_t pwc_count = 0, pwc_index = 0;
20127 uint16_t akms_count = 0, akms_index = 0;
20128 static int * const osen_rsn_cap[] = {
20129 &hf_ieee80211_osen_rsn_cap_preauth,
20130 &hf_ieee80211_osen_rsn_cap_no_pairwise,
20131 &hf_ieee80211_osen_rsn_cap_ptksa_replay_counter,
20132 &hf_ieee80211_osen_rsn_cap_gtksa_replay_counter,
20133 &hf_ieee80211_osen_rsn_cap_mfpr,
20134 &hf_ieee80211_osen_rsn_cap_mfpc,
20135 &hf_ieee80211_osen_rsn_cap_jmr,
20136 &hf_ieee80211_osen_rsn_cap_peerkey,
20137 &hf_ieee80211_osen_rsn_spp_a_msdu_capable,
20138 &hf_ieee80211_osen_rsn_spp_a_msdu_required,
20139 &hf_ieee80211_osen_rsn_pbac,
20140 &hf_ieee80211_osen_extended_key_id_iaf,
20141 &hf_ieee80211_osen_reserved,
20142 NULL((void*)0)
20143 };
20144 uint16_t pmkid_count = 0, pmkid_index = 0;
20145 int gmcs_array[2] = { hf_ieee80211_osen_group_management_cipher_suite_oui,
20146 hf_ieee80211_osen_group_management_cipher_suite_type };
20147
20148 offset = dissect_group_data_cipher_suite(tvb, pinfo, tree, offset, hf_array,
20149 ett_osen_group_data_cipher_suite,
20150 "OSEN Group Data Cipher Suite");
20151
20152 pwc_count = tvb_get_letohs(tvb, offset);
20153 proto_tree_add_item(tree, hf_ieee80211_osen_pcs_count, tvb, offset,
20154 2, ENC_LITTLE_ENDIAN0x80000000);
20155 offset += 2;
20156
20157 if (pwc_count > 0) {
20158 int start_offset = offset;
20159 pwc_list = proto_tree_add_subtree(tree, tvb, offset, -1,
20160 ett_osen_pairwise_cipher_suites, &pwcsi,
20161 "OSEN Pairwise Cipher Suite List");
20162
20163 while (pwc_count > 0) {
20164 if (tvb_reported_length_remaining(tvb, offset) >= 4) {
20165 int hf_array2[2] = { hf_ieee80211_osen_pairwise_cipher_suite_oui,
20166 hf_ieee80211_osen_pairwise_cipher_suite_type };
20167 char label[128];
20168
20169 snprintf(label, sizeof(label), "OSEN Pairwise Cipher Suite %d", pwc_index);
20170 offset = dissect_group_data_cipher_suite(tvb, pinfo, pwc_list,
20171 offset, hf_array2, ett_osen_pairwise_cipher_suite,
20172 label);
20173 pwc_index++;
20174 pwc_count--;
20175 } else {
20176 /* Insert the remaining? Expert Info? */
20177 offset += tvb_reported_length_remaining(tvb, offset);
20178 break;
20179 }
20180 }
20181
20182 proto_item_set_len(pwcsi, offset - start_offset);
20183 }
20184
20185 if (tvb_reported_length_remaining(tvb, offset) == 0) {
20186 return tvb_captured_length(tvb);
20187 }
20188
20189 /* Now handle the AKM Suites */
20190 akms_count = tvb_get_letohs(tvb, offset);
20191 proto_tree_add_item(tree, hf_ieee80211_osen_akm_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20192 offset += 2;
20193
20194 if (akms_count > 0) {
20195 int start_offset = offset;
20196 proto_tree *akm_list = NULL((void*)0);
20197 proto_item *akmcsi = NULL((void*)0);
20198
20199 akm_list = proto_tree_add_subtree(tree, tvb, offset, -1,
20200 ett_osen_akm_cipher_suites, &akmcsi,
20201 "OSEN AKM Cipher Suite List");
20202
20203 while (akms_count > 0) {
20204 if (tvb_reported_length_remaining(tvb, offset) >= 4) {
20205 int hf_array3[2] = { hf_ieee80211_osen_akm_cipher_suite_oui,
20206 hf_ieee80211_osen_akm_cipher_suite_type};
20207 char label[128];
20208
20209 snprintf(label, sizeof(label), "OSEN AKM Cipher Suite %d", akms_index);
20210 offset = dissect_group_data_cipher_suite(tvb, pinfo, akm_list,
20211 offset, hf_array3, ett_osen_akm_cipher_suite,
20212 label);
20213 akms_index++;
20214 akms_count--;
20215 } else {
20216 /* Expert info? */
20217 offset += tvb_reported_length_remaining(tvb, offset);
20218 break;
20219 }
20220 }
20221 proto_item_set_len(akmcsi, offset - start_offset);
20222 }
20223
20224 /* Any more? */
20225 if (tvb_reported_length_remaining(tvb, offset) == 0) {
20226 return tvb_captured_length(tvb);
20227 }
20228
20229 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_osen_rsn_cap_flags,
20230 ett_osen_rsn_cap_tree, osen_rsn_cap,
20231 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
20232 offset += 2;
20233
20234 /* Any more? */
20235 if (tvb_reported_length_remaining(tvb, offset) == 0) {
20236 return tvb_captured_length(tvb);
20237 }
20238
20239 pmkid_count = tvb_get_letohs(tvb, offset);
20240 proto_tree_add_item(tree, hf_ieee80211_osen_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20241 offset += 2;
20242
20243 if (pmkid_count > 0) {
20244 proto_tree *pmkid_list = NULL((void*)0);
20245
20246 pmkid_list = proto_tree_add_subtree(tree, tvb, offset, pmkid_count * 16,
20247 ett_osen_pmkid_list, NULL((void*)0),
20248 "OSEN PKMID List");
20249
20250 while (pmkid_count > 0) {
20251 proto_tree *pmkid_tree = NULL((void*)0);
20252
20253 pmkid_tree = proto_tree_add_subtree_format(pmkid_list, tvb,offset, 16,
20254 ett_osen_pmkid_tree, NULL((void*)0),
20255 "OSEN PKMID %d", pmkid_index);
20256 proto_tree_add_item(pmkid_tree, hf_ieee80211_osen_pmkid, tvb, offset, 16,
20257 ENC_NA0x00000000);
20258 offset += 16;
20259 pmkid_index++;
20260 pmkid_count--;
20261 }
20262 }
20263
20264 offset = dissect_group_data_cipher_suite(tvb, pinfo, tree, offset, gmcs_array,
20265 ett_osen_group_management_cipher_suite,
20266 "OSEN Group Management Cipher Suite");
20267
20268 return offset;
20269}
20270
20271static const value_string hs20_indication_version_number_vals[] = {
20272 { 0, "1.x" },
20273 { 1, "2.x" },
20274 { 2, "3.x" },
20275 { 0, NULL((void*)0) }
20276};
20277
20278static int
20279dissect_hs20_indication(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20280{
20281 static int * const ieee80211_hs20_indication[] = {
20282 &hf_ieee80211_hs20_indication_dgaf_disabled,
20283 &hf_ieee80211_hs20_indication_pps_mo_id_present,
20284 &hf_ieee80211_hs20_indication_anqp_domain_id_present,
20285 &hf_ieee80211_hs20_reserved,
20286 &hf_ieee80211_hs20_indication_version_number,
20287 NULL((void*)0)
20288 };
20289 int len = tvb_captured_length(tvb);
20290 int offset = 0;
20291 uint8_t indic = tvb_get_uint8(tvb, offset);
20292
20293 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_hs20_indication,
20294 ENC_NA0x00000000);
20295 offset++;
20296
20297 if (len >= 3 && (indic & 0x02)) { /* Contains a PPS MO ID field ... display it. */
20298 proto_tree_add_item(tree, hf_ieee80211_hs20_indication_pps_mo_id, tvb, offset,
20299 2, ENC_LITTLE_ENDIAN0x80000000);
20300 offset += 2;
20301 }
20302
20303 if ((len >= (offset + 2)) && (indic & 0x04)) {
20304 proto_tree_add_item(tree, hf_ieee80211_hs20_indication_anqp_domain_id, tvb, offset,
20305 2, ENC_LITTLE_ENDIAN0x80000000);
20306 offset += 2;
20307 }
20308
20309 return offset;
20310}
20311
20312enum ieee80211_wfa_60g_attr {
20313 /* 0 Reserved */
20314 WIFI_60G_ATTR_CAPABILITY = 1,
20315 /* 2 - 225 Reserved */
20316};
20317
20318static const value_string ieee80211_wfa_60g_attr_ids[] = {
20319 { WIFI_60G_ATTR_CAPABILITY, "60GHz Capability" },
20320 { 0, NULL((void*)0) }
20321};
20322
20323static int
20324dissect_wfa_60g_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
20325{
20326 int end = tvb_reported_length(tvb);
20327 int offset = 0;
20328 uint8_t id;
20329 uint16_t len;
20330 proto_tree *wf60g_tree;
20331 proto_item *attrs;
20332
20333 while (offset < end) {
20334 if (end - offset < 2) {
20335 expert_add_info_format(pinfo, tree, &ei_ieee80211_wfa_60g_attr_len_invalid, "Packet too short for Wi-Fi 60G attribute");
20336 break;
20337 }
20338
20339 id = tvb_get_uint8(tvb, offset);
20340 len = tvb_get_ntohs(tvb, offset + 1);
20341 attrs = proto_tree_add_item(tree, hf_ieee80211_wfa_60g_attr, tvb, offset, 0, ENC_NA0x00000000);
20342 proto_item_append_text(attrs, ": %s", val_to_str(pinfo->pool, id, ieee80211_wfa_60g_attr_ids,
20343 "Unknown attribute ID (%u)"));
20344 wf60g_tree = proto_item_add_subtree(attrs, ett_ieee80211_wfa_60g_attr);
20345 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20346 offset += 1;
20347 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20348 offset += 1;
20349
20350
20351 switch (id) {
20352 case WIFI_60G_ATTR_CAPABILITY:
20353 if (len - offset < 7) {
20354 expert_add_info_format(pinfo, tree, &ei_ieee80211_wfa_60g_attr_len_invalid, "Packet too short for 60G capability attribute");
20355 break;
20356 }
20357
20358 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_cap_sta_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
20359 offset += 6;
20360 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_cap_recv_amsdu_frames, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20361 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_cap_reserved, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20362 offset += 1;
20363 break;
20364 default:
20365 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_wfa_60g_unknown_attribute, tvb,
20366 offset, len+2, "Unknown attribute ID (%u)", id);
20367 }
20368
20369 offset += len;
20370 }
20371 return offset;
20372}
20373
20374static int
20375dissect_owe_transition_mode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20376{
20377 uint8_t ssid_len;
20378
20379 int len = tvb_captured_length(tvb);
20380 int offset = 0;
20381
20382 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_bssid, tvb, offset, 6, ENC_NA0x00000000);
20383 offset += 6;
20384 len -= 6;
20385
20386 ssid_len = tvb_get_uint8(tvb, offset);
20387
20388 proto_tree_add_uint(tree, hf_ieee80211_wfa_ie_owe_ssid_length, tvb, offset, 1, ssid_len);
20389 offset += 1;
20390 len -= 1;
20391
20392 if (len < ssid_len) {
20393 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20394 return offset;
20395 }
20396
20397 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_ssid, tvb, offset, ssid_len, ENC_ASCII0x00000000);
20398 offset += len;
20399 len -= len;
20400
20401 if (len >= 2) {
20402 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_band_info, tvb, offset, 1, ENC_NA0x00000000);
20403 offset += 1;
20404
20405 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_channel_info, tvb, offset, 1, ENC_NA0x00000000);
20406 offset += 1;
20407 }
20408
20409 return offset;
20410}
20411
20412static int
20413dissect_transition_disable_kde(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20414{
20415 int tag_len = tvb_captured_length(tvb);
20416 int offset = 0;
20417 static int * const ieee80211_wfa_transition_disable_flags[] = {
20418 &hf_ieee80211_wfa_ie_transition_disable_wpa3_personal,
20419 &hf_ieee80211_wfa_ie_transition_disable_sae_pk,
20420 &hf_ieee80211_wfa_ie_transition_disable_wpa3_enterprise,
20421 &hf_ieee80211_wfa_ie_transition_disable_enhanced_open,
20422 &hf_ieee80211_wfa_ie_transition_disable_reserved_b4thru7,
20423 NULL((void*)0)
20424 };
20425
20426 if (tag_len < 1) {
20427 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20428 return 0;
20429 }
20430
20431 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_transition_disable_bitmap,
20432 ett_ieee80211_wfa_transition_disable_tree,
20433 ieee80211_wfa_transition_disable_flags,
20434 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
20435 offset++;
20436
20437 if (offset < tag_len)
20438 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_transition_disable_reserved, tvb, offset, tag_len-offset, ENC_NA0x00000000);
20439 offset = tag_len;
20440
20441 return offset;
20442}
20443
20444static int
20445dissect_mbo_oce(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20446{
20447 int len = tvb_reported_length(tvb);
20448 int offset = 0;
20449
20450 while (len >= 2) {
20451 proto_item *attr_item;
20452 proto_tree *attr_tree;
20453 uint8_t attr_id = tvb_get_uint8(tvb, offset);
20454 uint8_t attr_len = tvb_get_uint8(tvb, offset + 1);
20455
20456 if (len < (attr_len + 2)) {
20457 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20458 return offset;
20459 }
20460
20461 attr_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_oce_attr, tvb, offset, attr_len + 2, ENC_NA0x00000000);
20462 attr_tree = proto_item_add_subtree(attr_item, ett_mbo_oce_attr);
20463 proto_item_append_text(attr_item, " (%s)", val_to_str_const(attr_id, wfa_mbo_oce_attr_id_vals, "Unknown"));
20464
20465 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_oce_attr_id, tvb, offset, 1, ENC_NA0x00000000);
20466 offset += 1;
20467 len -= 1;
20468
20469 proto_tree_add_uint(attr_tree, hf_ieee80211_wfa_ie_mbo_oce_attr_len, tvb, offset, 1, attr_len);
20470 offset += 1;
20471 len -= 1;
20472
20473 switch (attr_id) {
20474 case MBO_AP_CAPABILITY_INDICATION1:
20475 {
20476 proto_item *cap_item;
20477 proto_tree *cap_tree;
20478
20479 if (attr_len != 1) {
20480 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20481 return offset;
20482 }
20483 cap_item = proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_ap_cap, tvb, offset, 1, ENC_NA0x00000000);
20484 cap_tree = proto_item_add_subtree(cap_item, ett_mbo_ap_cap);
20485 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_mbo_ap_cap_cell, tvb, offset, 1, ENC_NA0x00000000);
20486 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_mbo_ap_cap_reserved, tvb, offset, 1, ENC_NA0x00000000);
20487 break;
20488 }
20489 case MBO_NON_PREF_CHANNEL_REPORT2:
20490 if (attr_len == 0)
20491 break;
20492
20493 if (attr_len < 3) {
20494 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20495 return offset;
20496 }
20497 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class, tvb, offset, 1, ENC_NA0x00000000);
20498 offset += 1;
20499 len -= 1;
20500 attr_len -= 1;
20501 while (attr_len > 2) {
20502 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan, tvb, offset, 1, ENC_NA0x00000000);
20503 offset += 1;
20504 len -= 1;
20505 attr_len -= 1;
20506 }
20507
20508 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref, tvb, offset, 1, ENC_NA0x00000000);
20509 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason, tvb, offset + 1, 1, ENC_NA0x00000000);
20510 break;
20511 case MBO_CELLULAR_DATA_CAPABILITIES3:
20512 if (attr_len != 1) {
20513 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20514 return offset;
20515 }
20516 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_cellular_cap, tvb, offset, 1, ENC_NA0x00000000);
20517 break;
20518 case MBO_ASSOCIATION_DISALLOWED4:
20519 if (attr_len != 1) {
20520 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20521 return offset;
20522 }
20523 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_assoc_disallow_reason, tvb, offset, 1, ENC_NA0x00000000);
20524 break;
20525 case MBO_CELLULAR_DATA_PREFERENCE5:
20526 if (attr_len != 1) {
20527 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20528 return offset;
20529 }
20530 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_cellular_pref, tvb, offset, 1, ENC_NA0x00000000);
20531 break;
20532 case MBO_TRANSITION_REASON6:
20533 if (attr_len != 1) {
20534 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20535 return offset;
20536 }
20537 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_transition_reason, tvb, offset, 1, ENC_NA0x00000000);
20538 break;
20539 case MBO_TRANSITION_REJECTION_REASON7:
20540 if (attr_len != 1) {
20541 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20542 return offset;
20543 }
20544 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_transition_rej_reason, tvb, offset, 1, ENC_NA0x00000000);
20545 break;
20546 case MBO_ASSOCIATION_RETRY_DELAY8:
20547 {
20548 if (attr_len != 2) {
20549 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20550 return offset;
20551 }
20552 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_assoc_retry_delay, tvb, offset,
20553 2, ENC_LITTLE_ENDIAN0x80000000);
20554 break;
20555 }
20556 case OCE_CAPABILITY_INDICATION101:
20557 {
20558 proto_item *cap_item;
20559 proto_tree *cap_tree;
20560
20561 if (attr_len != 1) {
20562 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20563 return offset;
20564 }
20565 cap_item = proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_cap_ctrl, tvb, offset, 1, ENC_NA0x00000000);
20566 cap_tree = proto_item_add_subtree(cap_item, ett_oce_cap);
20567 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_release, tvb, offset, 1, ENC_NA0x00000000);
20568 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_sta_cfon, tvb, offset, 1, ENC_NA0x00000000);
20569 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_11b_only_ap, tvb, offset, 1, ENC_NA0x00000000);
20570 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_hlp, tvb, offset, 1, ENC_NA0x00000000);
20571 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_non_oce_ap, tvb, offset, 1, ENC_NA0x00000000);
20572 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_reserved, tvb, offset, 1, ENC_NA0x00000000);
20573 break;
20574 }
20575 case OCE_RSSI_ASSOCIATION_REJECTION102:
20576 {
20577 if (attr_len != 2) {
20578 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20579 return offset;
20580 }
20581 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delta, tvb,
20582 offset, 1, ENC_NA0x00000000);
20583 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delay, tvb,
20584 offset + 1, 1, ENC_NA0x00000000);
20585 break;
20586 }
20587 case OCE_REDUCED_WAN_METRICS103:
20588 {
20589 proto_item *cap_item;
20590 proto_tree *cap_tree;
20591 uint8_t capacity;
20592
20593 if (attr_len != 1) {
20594 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20595 return offset;
20596 }
20597 cap_item = proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap,
20598 tvb, offset, 1, ENC_NA0x00000000);
20599 cap_tree = proto_item_add_subtree(cap_item, ett_oce_metrics_cap);
20600
20601 capacity = tvb_get_uint8(tvb, offset);
20602 cap_item = proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_downlink,
20603 tvb, offset, 1, ENC_NA0x00000000);
20604 proto_item_append_text(cap_item, " (%d kbit/s)", (1 << (capacity & 0xF)) * 100);
20605 cap_item = proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_uplink,
20606 tvb, offset, 1, ENC_NA0x00000000);
20607 capacity >>= 4;
20608 proto_item_append_text(cap_item, " (%d kbit/s)", (1 << (capacity & 0xF)) * 100);
20609 break;
20610 }
20611 case OCE_RNR_COMPLETENESS104:
20612 while (attr_len >= 4) {
20613 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_rnr_completeness_short_ssid,
20614 tvb, offset, 4, ENC_ASCII0x00000000);
20615 offset += 4;
20616 attr_len -= 4;
20617 len -= 4;
20618 }
20619 break;
20620 case OCE_PROBE_SUPPR_BSSID105:
20621 while (attr_len >= 6) {
20622 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_probe_suppr_bssid,
20623 tvb, offset, 6, ENC_NA0x00000000);
20624 offset += 6;
20625 attr_len -= 6;
20626 len -= 6;
20627 }
20628 break;
20629 case OCE_PROBE_SUPPR_SSID106:
20630 if (attr_len < 4) {
20631 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20632 return offset;
20633 }
20634 while (attr_len >= 4) {
20635 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_probe_suppr_ssid,
20636 tvb, offset, 4, ENC_ASCII0x00000000);
20637 offset += 4;
20638 attr_len -= 4;
20639 len -= 4;
20640 }
20641 break;
20642 default:
20643 break;
20644 }
20645
20646 offset += attr_len;
20647 len -= attr_len;
20648 }
20649
20650 if (len != 0) {
20651 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20652 }
20653
20654 return offset;
20655}
20656
20657static int
20658dissect_wfa_wnm_non_pref_chan(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20659{
20660 int len = tvb_reported_length(tvb);
20661 int offset = 0;
20662
20663 if (len == 0)
20664 return 0;
20665
20666 if (len < 3) {
20667 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20668 return 0;
20669 }
20670
20671 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class, tvb, offset, 1, ENC_NA0x00000000);
20672 offset ++;
20673 len --;
20674 while (len > 2) {
20675 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan, tvb, offset, 1, ENC_NA0x00000000);
20676 offset ++;
20677 len --;
20678 }
20679
20680 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref, tvb, offset, 1, ENC_NA0x00000000);
20681 offset ++;
20682 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason, tvb, offset, 1, ENC_NA0x00000000);
20683 offset ++;
20684 return offset;
20685}
20686
20687static int
20688dissect_wfa_wnm_cell_cap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20689{
20690 int len = tvb_reported_length(tvb);
20691
20692 if (len != 1) {
20693 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20694 return 0;
20695 }
20696
20697 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_cellular_cap, tvb, 0, 1, ENC_NA0x00000000);
20698 return len;
20699}
20700
20701static void
20702dissect_vendor_ie_wfa(packet_info *pinfo, proto_item *item, tvbuff_t *tag_tvb)
20703{
20704 int tag_len = tvb_reported_length(tag_tvb);
20705 int dissect;
20706 uint8_t subtype;
20707 int offset = 0;
20708 tvbuff_t *vendor_tvb;
20709
20710 if (tag_len < 4)
20711 return;
20712
20713 subtype = tvb_get_uint8(tag_tvb, 3);
20714 proto_item_append_text(item, ": %s", val_to_str_const(subtype, wfa_subtype_vals, "Unknown"));
20715 vendor_tvb = tvb_new_subset_length(tag_tvb, offset + 4, tag_len - 4);
20716 dissect = dissector_try_uint_with_data(wifi_alliance_ie_table, subtype, vendor_tvb, pinfo, item, false0, NULL((void*)0));
20717 if (dissect <= 0) {
20718 proto_tree_add_item(item, hf_ieee80211_tag_vendor_data, vendor_tvb, 0, tag_len - 4, ENC_NA0x00000000);
20719 }
20720}
20721
20722static const range_string kde_selectors_rvals[] = {
20723 { 0, 0, "Reserved" },
20724 { 1, 1, "GTK KDE" },
20725 { 2, 2, "Reserved" },
20726 { 3, 3, "MAC address KDE" },
20727 { 4, 4, "PMKID KDE" },
20728 { 5, 5, "Reserved" },
20729 { 6, 6, "Nonce KDE" },
20730 { 7, 7, "Lifetime KDE" },
20731 { 8, 8, "Error KDE" },
20732 { 9, 9, "IGTK KDE" },
20733 { 10, 10, "Key ID KDE" },
20734 { 11, 11, "Multi-band GTK KDE" },
20735 { 12, 12, "Multi-band Key ID KDE" },
20736 { 13, 13, "OCI KDE" },
20737 { 14, 14, "BIGTK KDE" },
20738 { 15, 15, "Reserved" },
20739 { 16, 16, "MLO GTK KDE" },
20740 { 17, 17, "MLO IGTK KDE" },
20741 { 18, 18, "MLO BIGTK KDE" },
20742 { 19, 19, "MLO LINK KDE" },
20743 { 20, 255, "Reserved" },
20744 { 0, 0, NULL((void*)0) }
20745};
20746
20747static const true_false_string tfs_rsn_gtk_kde_tx = {
20748 "Temporal key used for both transmission and reception",
20749 "Temporal key used only for reception"
20750};
20751
20752static int * const mlo_kde_link_hdrs[] = {
20753 &hf_ieee80211_rsn_ie_mlo_linkid,
20754 &hf_ieee80211_rsn_ie_mlo_rnse_present,
20755 &hf_ieee80211_rsn_ie_mlo_rnsxe_present,
20756 &hf_ieee80211_rsn_ie_mlo_reserved,
20757 NULL((void*)0)
20758};
20759
20760static void
20761dissect_rsn_ie_mlo_link(proto_item *item, proto_tree *tree, tvbuff_t *tvb,
20762 int offset, uint32_t tag_len _U___attribute__((unused)), packet_info *pinfo)
20763{
20764 uint8_t info = tvb_get_uint8(tvb, offset);
20765
20766 proto_tree_add_bitmask(tree, tvb, offset,
20767 hf_ieee80211_rsn_ie_mlo_link_info,
20768 ett_kde_mlo_link_info, mlo_kde_link_hdrs,
20769 ENC_NA0x00000000);
20770 offset += 1;
20771
20772 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_mac_addr, tvb, offset, 6,
20773 ENC_NA0x00000000);
20774 offset += 6;
20775 if ((info & 0x10) == 0x10) { /* Add the RSNE if present */
20776 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
20777 }
20778
20779 if ((info & 0x20) == 0x20) { /* Add the RSNXE if present */
20780 add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
20781 }
20782
20783 proto_item_append_text(item, ": MLO Link KDE");
20784}
20785
20786static void
20787dissect_vendor_ie_rsn(proto_item * item, proto_tree * tree, tvbuff_t * tvb,
20788 int offset, uint32_t tag_len, packet_info *pinfo)
20789{
20790 uint8_t data_type = tvb_get_uint8(tvb, offset);
20791 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_data_type, tvb,
20792 offset, 1, ENC_NA0x00000000);
20793 offset += 1;
20794
20795 switch(data_type) {
20796 case 1:
20797 {
20798 /* IEEE 802.11i / Key Data Encapsulation / Data Type=1 - GTK.
20799 * This is only used within EAPOL-Key frame Key Data. */
20800 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_key_id, tvb,
20801 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20802 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_tx, tvb, offset,
20803 1, ENC_LITTLE_ENDIAN0x80000000);
20804 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_reserved1, tvb,
20805 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20806 offset += 1;
20807 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_reserved2, tvb,
20808 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20809 offset += 1;
20810 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_gtk, tvb, offset,
20811 tag_len - 3, ENC_NA0x00000000);
20812 proto_item_append_text(item, ": RSN GTK");
20813 save_proto_data(tvb, pinfo, offset, tag_len - 3, GTK_KEY);
20814 save_proto_data_value(pinfo, tag_len - 3, GTK_LEN_KEY);
20815 break;
20816 }
20817 case 3: /* MAC Address KDE */
20818 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mac_address_kde_mac, tvb,
20819 offset, 6, ENC_NA0x00000000);
20820 proto_item_append_text(item, ": MAC Address KDE");
20821 break;
20822 case 4:
20823 {
20824 /* IEEE 802.11i / Key Data Encapsulation / Data Type=4 - PMKID.
20825 * This is only used within EAPOL-Key frame Key Data. */
20826 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_pmkid, tvb, offset, 16, ENC_NA0x00000000);
20827 proto_item_append_text(item, ": RSN PMKID");
20828 break;
20829 }
20830 case 6:
20831 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_nonce, tvb, offset,
20832 32, ENC_NA0x00000000);
20833 proto_item_append_text(item, ": NONCE KDE");
20834 break;
20835 case 7: /* Lifetime KDE */
20836 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_lifetime, tvb,
20837 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
20838 proto_item_append_text(item, ": Lifetime KDE");
20839 break;
20840 case 8: /* Error KDE */
20841 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_error_kde_res, tvb, offset,
20842 2, ENC_LITTLE_ENDIAN0x80000000);
20843 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_error_kde_error_type, tvb,
20844 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20845 proto_item_append_text(item, ": Error KDE");
20846 break;
20847 case 9: /* IGTK KDE */
20848 {
20849 /* IEEE 802.11i / Key Data Encapsulation / Data Type=9 - IGTK.
20850 * This is only used within EAPOL-Key frame Key Data. */
20851 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_igtk_kde_keyid, tvb,
20852 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20853 offset += 2;
20854 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_igtk_kde_ipn, tvb, offset,
20855 6, ENC_LITTLE_ENDIAN0x80000000);
20856 offset += 6;
20857 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_igtk_kde_igtk, tvb, offset,
20858 tag_len - 9, ENC_NA0x00000000);
20859 proto_item_append_text(item, ": RSN IGTK");
20860 break;
20861 }
20862 case 10:
20863 {
20864 /* IEEE 802.11 - 2016 / Key Data Encapsulation / Data Type=10 - KeyID
20865 * This is only used within EAPOL-Key frame Key Data when using Extended Key ID */
20866 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_ptk_keyid, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20867 proto_item_append_text(item, ": RSN PTK");
20868 break;
20869 }
20870 case 13: /* OCI KDE */
20871 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_oci_operating_class, tvb,
20872 offset, 1, ENC_NA0x00000000);
20873 offset += 1;
20874 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_oci_primary_channel_number,
20875 tvb, offset, 1, ENC_NA0x00000000);
20876 offset += 1;
20877 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_oci_frequency_segment_1,
20878 tvb, offset, 1, ENC_NA0x00000000);
20879 proto_item_append_text(item, ": OCI KDE");
20880 break;
20881 case 14: /* BIGTK KDE */
20882 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_bigtk_key_id, tvb, offset,
20883 2, ENC_LITTLE_ENDIAN0x80000000);
20884 offset += 2;
20885 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_bigtk_bipn, tvb, offset,
20886 6, ENC_LITTLE_ENDIAN0x80000000);
20887 offset += 6;
20888 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_bigtk_bigtk, tvb, offset,
20889 tag_len - 9, ENC_NA0x00000000);
20890 proto_item_append_text(item, ": BIGTK KDE");
20891 break;
20892 case 16: /* MLO GTK KDE */
20893 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_key_id, tvb,
20894 offset, 1, ENC_NA0x00000000);
20895 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_tx, tvb,
20896 offset, 1, ENC_NA0x00000000);
20897 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_reserved, tvb,
20898 offset, 1, ENC_NA0x00000000);
20899 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_linkid, tvb,
20900 offset, 1, ENC_NA0x00000000);
20901 offset += 1;
20902
20903 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_pn, tvb,
20904 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
20905 offset += 6;
20906
20907 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_gtk, tvb,
20908 offset, tag_len - 8, ENC_NA0x00000000);
20909
20910 proto_item_append_text(item, ": MLO GTK KDE");
20911 break;
20912 case 17: /* MLO IGTK KDE */
20913 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_key_id, tvb,
20914 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20915 offset += 2;
20916
20917 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_ipn, tvb,
20918 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
20919 offset += 6;
20920
20921 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_reserved, tvb,
20922 offset, 1, ENC_NA0x00000000);
20923 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_linkid, tvb,
20924 offset, 1, ENC_NA0x00000000);
20925 offset += 1;
20926
20927 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_igtk, tvb,
20928 offset, tag_len - 10, ENC_NA0x00000000);
20929
20930 proto_item_append_text(item, ": MLO IGTK KDE");
20931 break;
20932 case 18: /* MLO BIGTK KDE */
20933 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_key_id, tvb,
20934 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20935 offset += 2;
20936
20937 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_ipn, tvb,
20938 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
20939 offset += 6;
20940
20941 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_reserved, tvb,
20942 offset, 1, ENC_NA0x00000000);
20943 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_linkid, tvb,
20944 offset, 1, ENC_NA0x00000000);
20945 offset += 1;
20946
20947 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_bigtk, tvb,
20948 offset, tag_len - 10, ENC_NA0x00000000);
20949
20950 proto_item_append_text(item, ": MLO BIGTK KDE");
20951 break;
20952 case 19: /*
20953 * MLO Link KDE, contains Link info, MAC Addr and possibly
20954 * RSNE and RSNXE
20955 */
20956 dissect_rsn_ie_mlo_link(item, tree, tvb, offset, tag_len, pinfo);
20957 break;
20958 default:
20959 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_unknown, tvb, offset,
20960 tag_len - 1, ENC_NA0x00000000);
20961 proto_item_append_text(item, ": RSN UNKNOWN");
20962 break;
20963 }
20964}
20965
20966typedef enum {
20967 MARVELL_IE_MESH = 4
20968} marvell_ie_type_t;
20969
20970static void
20971dissect_vendor_ie_marvell(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
20972 tvbuff_t *tvb, int offset, uint32_t tag_len)
20973{
20974 uint8_t type;
20975
20976 type = tvb_get_uint8(tvb, offset);
20977 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20978 offset += 1;
20979
20980 switch (type) {
20981 case MARVELL_IE_MESH:
20982 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_subtype, tvb,
20983 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
20984 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_version, tvb,
20985 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
20986 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_proto_id, tvb,
20987 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
20988 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_metric_id, tvb,
20989 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
20990 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_cap, tvb,
20991 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
20992 break;
20993
20994 default:
20995 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_data, tvb, offset,
20996 tag_len - 1, ENC_NA0x00000000);
20997 break;
20998 }
20999}
21000
21001typedef enum {
21002 ATHEROS_IE_ADVCAP = 1,
21003 ATHEROS_IE_XR = 3
21004} atheros_ie_type_t;
21005
21006typedef enum {
21007 ATHEROS_IE_ADVCAP_S = 1
21008} atheros_ie_advcap_subtype_t;
21009
21010typedef enum {
21011 ATHEROS_IE_XR_S = 1
21012} atheros_ie_xr_subtype_t;
21013
21014typedef enum {
21015 ATHEROS_IE_CAP_TURBOP = 0x01,
21016 ATHEROS_IE_CAP_COMP = 0x02,
21017 ATHEROS_IE_CAP_FF = 0x04,
21018 ATHEROS_IE_CAP_XR = 0x08,
21019 ATHEROS_IE_CAP_AR = 0x10,
21020 ATHEROS_IE_CAP_BURST = 0x20,
21021 ATHEROS_IE_CAP_WME = 0x40,
21022 ATHEROS_IE_CAP_BOOST = 0x80
21023} atheros_ie_cap_t;
21024
21025static const value_string atheros_ie_type_vals[] = {
21026 { ATHEROS_IE_ADVCAP, "Advanced Capability"},
21027 { ATHEROS_IE_XR, "eXtended Range"},
21028 { 0, NULL((void*)0) }
21029};
21030
21031static int * const ieee80211_atheros_ie_cap[] = {
21032 &hf_ieee80211_atheros_ie_cap_f_turbop,
21033 &hf_ieee80211_atheros_ie_cap_f_comp,
21034 &hf_ieee80211_atheros_ie_cap_f_ff,
21035 &hf_ieee80211_atheros_ie_cap_f_xr,
21036 &hf_ieee80211_atheros_ie_cap_f_ar,
21037 &hf_ieee80211_atheros_ie_cap_f_burst,
21038 &hf_ieee80211_atheros_ie_cap_f_wme,
21039 &hf_ieee80211_atheros_ie_cap_f_boost,
21040 NULL((void*)0)
21041};
21042
21043static int * const ieee80211_extreme_mesh_ie_hello[] = {
21044 &hf_ieee80211_extreme_mesh_ie_hello_f_root,
21045 &hf_ieee80211_extreme_mesh_ie_hello_f_proxy,
21046 &hf_ieee80211_extreme_mesh_ie_hello_f_geo,
21047 &hf_ieee80211_extreme_mesh_ie_hello_f_path_pref,
21048 &hf_ieee80211_extreme_mesh_ie_hello_f_mobile,
21049 NULL((void*)0)
21050};
21051
21052typedef enum {
21053 EXTREME_MESH_IE_SERVICES_ROOT = 0x01,
21054 EXTREME_MESH_IE_SERVICES_PROXY = 0x02,
21055 EXTREME_MESH_IE_SERVICES_GEO = 0x04,
21056 EXTREME_MESH_IE_SERVICES_PATH_PREF = 0x08,
21057 EXTREME_MESH_IE_SERVICES_MOBILE = 0x10,
21058} extreme_mesh_ie_services;
21059
21060/* Mesh Fields found in Management Frames KJG */
21061static const value_string extreme_mesh_ie_type_vals[] = {
21062 {1, "Hello"},
21063 {2, "Mesh ID"},
21064 {3, "MPID"},
21065 {0, NULL((void*)0)}
21066};
21067
21068static void
21069dissect_vendor_ie_extreme_mesh(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21070 tvbuff_t *tvb, int offset, unsigned tag_len,
21071 packet_info *pinfo, proto_item *ti_len)
21072{
21073 uint8_t type;
21074
21075 if (tag_len <= 3) {
21076 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 6", tag_len+3);
21077 /* Add length of OUI to tag_length */
21078 return;
21079 }
21080 type = tvb_get_uint8(tvb, offset);
21081 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21082 proto_item_append_text(item, ": %s", val_to_str_const(type, extreme_mesh_ie_type_vals, "Unknown"));
21083 offset += 1;
21084 tag_len -= 1;
21085
21086 switch (type) {
21087 case 1:
21088 {
21089 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_extreme_mesh_ie_services,
21090 ett_extreme_mesh_services_tree, ieee80211_extreme_mesh_ie_hello, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21091 offset += 1;
21092
21093 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_htr, tvb, offset, 1, ENC_NA0x00000000);
21094 offset += 1;
21095
21096 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_mtr, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21097 offset += 2;
21098
21099 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_root, tvb, offset, 6, ENC_NA0x00000000);
21100 offset += 6;
21101
21102 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_nh, tvb, offset, 6, ENC_NA0x00000000);
21103 }
21104 break;
21105 case 2:
21106 {
21107 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_mesh_id, tvb, offset, tag_len, ENC_ASCII0x00000000);
21108 }
21109 break;
21110 case 3:
21111 {
21112 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_mp_id, tvb, offset, 6, ENC_NA0x00000000);
21113 }
21114 break;
21115 default:
21116 break;
21117 }
21118}
21119
21120static void
21121dissect_vendor_ie_atheros(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21122 tvbuff_t *tvb, int offset, unsigned tag_len,
21123 packet_info *pinfo, proto_item *ti_len)
21124{
21125 uint8_t type;
21126 uint8_t subtype;
21127 uint8_t version;
21128
21129 if (tag_len <= 3) {
21130 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 6", tag_len+3); /* Add length of OUI to tag_length */
21131 return;
21132 }
21133 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_type, tvb, offset, 1, ENC_NA0x00000000);
21134 type = tvb_get_uint8(tvb, offset);
21135 proto_item_append_text(item, ": %s", val_to_str_const(type, atheros_ie_type_vals, "Unknown"));
21136 offset += 1;
21137 tag_len -= 1;
21138
21139 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_subtype, tvb, offset, 1, ENC_NA0x00000000);
21140 subtype = tvb_get_uint8(tvb, offset);
21141 offset += 1;
21142 tag_len -= 1;
21143
21144 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_version, tvb, offset, 1, ENC_NA0x00000000);
21145 version = tvb_get_uint8(tvb, offset);
21146 offset += 1;
21147 tag_len -= 1;
21148
21149 if (version == 0)
21150 {
21151 switch (type) {
21152 case ATHEROS_IE_ADVCAP:
21153 {
21154 switch (subtype) {
21155 case ATHEROS_IE_ADVCAP_S:
21156 {
21157 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_advcap_cap,
21158 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
21159 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21160 offset += 1;
21161 tag_len -= 1;
21162
21163 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_defkey, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21164 offset += 2;
21165 tag_len -= 2;
21166 break;
21167 }
21168 default:
21169 /* No default Action */
21170 break;
21171 } /* End switch (subtype) */
21172 break;
21173 }
21174 case ATHEROS_IE_XR:
21175 {
21176 switch (subtype) {
21177 case ATHEROS_IE_XR_S:
21178 {
21179 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_info, tvb, offset, 1, ENC_NA0x00000000);
21180 offset += 1;
21181 tag_len -= 1;
21182
21183 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_bssid, tvb, offset, 6, ENC_NA0x00000000);
21184 offset += 6;
21185 tag_len -= 6;
21186
21187 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_bssid, tvb, offset, 6, ENC_NA0x00000000);
21188 offset += 6;
21189 tag_len -= 6;
21190
21191 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21192 offset += 2;
21193 tag_len -= 2;
21194
21195 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_xr_base_cap,
21196 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
21197 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21198 offset += 1;
21199 tag_len -= 1;
21200
21201 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_xr_xr_cap,
21202 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
21203 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21204 offset += 1;
21205 tag_len -= 1;
21206 break;
21207 }
21208 default:
21209 /* No default Action */
21210 break;
21211 } /* End switch (subtype) */
21212 break;
21213 default:
21214 /* No default Action */
21215 break;
21216 } /* End switch (type) */
21217
21218 }
21219 }
21220 if (tag_len > 0) {
21221 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_data, tvb, offset, tag_len, ENC_NA0x00000000);
21222 }
21223}
21224
21225typedef enum {
21226 AIRONET_IE_DTPC = 0,
21227 AIRONET_IE_UNKNOWN1 = 1,
21228 AIRONET_IE_VERSION = 3,
21229 AIRONET_IE_QOS,
21230 AIRONET_IE_UNKNOWN11 = 11,
21231 AIRONET_IE_QBSS_V2 = 14,
21232 AIRONET_IE_CLIENT_MFP = 20,
21233 AIRONET_IE_APNAME_V2 = 47
21234} aironet_ie_type_t;
21235
21236static const value_string aironet_ie_type_vals[] = {
21237 { AIRONET_IE_DTPC, "DTPC"},
21238 { AIRONET_IE_UNKNOWN1, "Unknown (1)"},
21239 { AIRONET_IE_VERSION, "CCX version"},
21240 { AIRONET_IE_QOS, "Qos"},
21241 { AIRONET_IE_UNKNOWN11, "Unknown (11)"},
21242 { AIRONET_IE_QBSS_V2, "QBSS V2 - CCA"},
21243 { AIRONET_IE_CLIENT_MFP, "Client MFP"},
21244 { AIRONET_IE_APNAME_V2, "AP NAME v2"},
21245 { 0, NULL((void*)0) }
21246};
21247
21248static const value_string aironet_mfp_vals[] = {
21249 { 0, "Disabled"},
21250 { 1, "Enabled"},
21251 { 0, NULL((void*)0) }
21252};
21253
21254static void
21255dissect_vendor_ie_aironet(proto_item *aironet_item, proto_tree *ietree,
21256 tvbuff_t *tvb, int offset, uint32_t tag_len,packet_info *pinfo)
21257{
21258 uint8_t type,length;
21259 int i;
21260 bool_Bool dont_change = false0; /* Don't change the IE item text to default */
21261 const uint8_t* apname;
21262
21263 type = tvb_get_uint8(tvb, offset);
21264 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21265 offset += 1;
21266
21267 switch (type) {
21268 case AIRONET_IE_DTPC:
21269 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_dtpc, tvb, offset, 1, ENC_NA0x00000000);
21270 proto_item_append_text(aironet_item, ": Aironet DTPC Powerlevel %ddBm", tvb_get_uint8(tvb, offset));
21271 offset += 1;
21272 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_dtpc_unknown, tvb, offset, 1, ENC_NA0x00000000);
21273 dont_change = true1;
21274 break;
21275 case AIRONET_IE_VERSION:
21276 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_version, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21277 proto_item_append_text(aironet_item, ": Aironet CCX version = %d", tvb_get_uint8(tvb, offset));
21278 dont_change = true1;
21279 break;
21280 case AIRONET_IE_QOS:
21281 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21282 offset += 1;
21283 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_paramset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21284 offset += 1;
21285
21286 /* XXX: just copied over from WME. Maybe "Best Effort" and "Background"
21287 * need to be swapped. Also, the "TXOP" may be TXOP - or not.
21288 */
21289 for (i = 0; i < 4; i++) {
21290 uint8_t byte1, byte2;
21291 uint16_t txop;
21292 byte1 = tvb_get_uint8(tvb, offset);
21293 byte2 = tvb_get_uint8(tvb, offset + 1);
21294 txop = tvb_get_letohs(tvb, offset + 2);
21295 proto_tree_add_bytes_format(ietree, hf_ieee80211_aironet_ie_qos_val, tvb, offset, 4, NULL((void*)0),
21296 "CCX QoS Parameters: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
21297 (byte1 & 0x60) >> 5, val_to_str(pinfo->pool, (byte1 & 0x60) >> 5, wme_acs, "(Unknown: %d)"),
21298 (byte1 & 0x10) ? "" : "not ", byte1 & 0x0f,
21299 byte2 & 0x0f, (byte2 & 0xf0) >> 4,
21300 txop);
21301 offset += 4;
21302 }
21303 break;
21304 case AIRONET_IE_QBSS_V2:
21305 /* Extract Values */
21306 proto_tree_add_item(ietree, hf_ieee80211_qbss2_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21307 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
21308 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cal, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
21309 proto_tree_add_item(ietree, hf_ieee80211_qbss2_gl, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN0x80000000);
21310 break;
21311 case AIRONET_IE_CLIENT_MFP:
21312 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_clientmfp, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21313 proto_item_append_text(aironet_item, ": Aironet Client MFP %s",
21314 val_to_str_const(1 & tvb_get_uint8(tvb, offset), aironet_mfp_vals, "Unknown"));
21315 dont_change = true1;
21316 break;
21317 case AIRONET_IE_APNAME_V2:
21318 /* Adds support for the new AP name v2 format;
21319this supports:
21320- 32 character long AP names (vs 16 in v1/ccx)
21321- is used on both WLC and Meraki
21322- does not require CCX to be enabled.
21323 */
21324 tag_len -= 1;
21325 length = tag_len;
21326
21327 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_cisco_ap_name_v2, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool,&apname);
21328 proto_item_append_text(ietree, ": AP name v2: %s", apname);
21329 // Set to true, so we don't append "Aironet type"
21330 dont_change = true1;
21331 break;
21332
21333 default:
21334 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_data, tvb, offset,
21335 tag_len - 1, ENC_NA0x00000000);
21336 break;
21337 }
21338 if (!dont_change) {
21339 proto_item_append_text(aironet_item, ": Aironet %s (%d)",
21340 val_to_str_const(type, aironet_ie_type_vals, "Unknown"), type);
21341 }
21342}
21343
21344/* info from lswifi https://github.com/joshschmelzle/lswifi/blob/v0.1.49/lswifi/elements.py#L1526 */
21345#define ARUBA_CAC1 1
21346#define ARUBA_MESH2 2
21347#define ARUBA_APNAME3 3
21348#define ARUBA_ARM4 4
21349#define ARUBA_SLB5 5
21350#define ARUBA_SJ_LOOP_PROTECT6 6
21351#define ARUBA_AUTO_MESH7 7
21352#define ARUBA_LCI8 8
21353#define ARUBA_GPS9 9
21354#define ARUBA_AP_HEALTH10 10
21355
21356static const value_string ieee80211_vs_aruba_subtype_vals[] = {
21357 { ARUBA_CAC1, "CAC"},
21358 { ARUBA_MESH2, "Mesh"},
21359 { ARUBA_APNAME3, "AP Name"},
21360 { ARUBA_ARM4, "ARM"},
21361 { ARUBA_SLB5, "SLB"},
21362 { ARUBA_SJ_LOOP_PROTECT6, "SJ Loop Protect"},
21363 { ARUBA_AUTO_MESH7, "Auto Mesh"},
21364 { ARUBA_LCI8, "LCI"},
21365 { ARUBA_GPS9, "GPS Ellipse"},
21366 { ARUBA_AP_HEALTH10, "AP Health"},
21367 { 0, NULL((void*)0) }
21368};
21369static void
21370dissect_vendor_ie_aruba(proto_item *item, proto_tree *ietree,
21371 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21372{
21373 uint8_t type;
21374 const uint8_t* name;
21375
21376 offset += 1; /* VS OUI Type */
21377 tag_len -= 1;
21378
21379 type = tvb_get_uint8(tvb, offset);
21380 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_subtype, tvb, offset, 1, ENC_NA0x00000000);
21381 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_aruba_subtype_vals, "Unknown"));
21382 offset += 1;
21383 tag_len -= 1;
21384
21385 switch (type) {
21386 case ARUBA_APNAME3:
21387 offset += 1;
21388 tag_len -= 1;
21389
21390 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_aruba_apname, tvb,
21391 offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &name);
21392 proto_item_append_text(item, " (%s)", name);
21393 break;
21394
21395 case ARUBA_GPS9:
21396 {
21397 double latitude, longitude, major_axis, minor_axis, orientation, distance;
21398 offset += 1;
21399 tag_len -= 1;
21400 if (tag_len < 1) {
21401 expert_add_info_format(pinfo, ietree, &ei_ieee80211_bad_length,
21402 "Malformed Aruba GPS data (insufficient data)");
21403 break;
21404 }
21405
21406 uint32_t gps_ie_length = tvb_get_uint8(tvb, offset);
21407 offset += 1;
21408 tag_len -= 1;
21409 gps_ie_length -= 1;
21410
21411 if (tag_len < gps_ie_length) {
21412 expert_add_info_format(pinfo, ietree, &ei_ieee80211_bad_length,
21413 "Truncated Aruba GPS data (IE needs %u bytes but got %u)",
21414 gps_ie_length, tag_len);
21415 break;
21416 }
21417
21418 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_gps_subversion, tvb,
21419 offset, 1, ENC_NA0x00000000);
21420 offset += 1;
21421 tag_len -= 1;
21422
21423 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_gps_hop, tvb,
21424 offset, 1, ENC_NA0x00000000);
21425 offset += 1;
21426 tag_len -= 1;
21427
21428 latitude = tvb_get_ntohieee_double(tvb, offset);
21429 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_latitude, tvb,
21430 offset, 8, latitude, "%.6f", latitude);
21431 offset += 8;
21432 tag_len -= 8;
21433
21434 longitude = tvb_get_ntohieee_double(tvb, offset);
21435 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_longitude, tvb,
21436 offset, 8, longitude, "%.6f", longitude);
21437 offset += 8;
21438 tag_len -= 8;
21439
21440 major_axis = tvb_get_ntohieee_double(tvb, offset);
21441 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_major_axis, tvb,
21442 offset, 8, major_axis, "%.6f", major_axis);
21443 offset += 8;
21444 tag_len -= 8;
21445
21446 minor_axis = tvb_get_ntohieee_double(tvb, offset);
21447 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_minor_axis, tvb,
21448 offset, 8, minor_axis, "%.6f", minor_axis);
21449 offset += 8;
21450 tag_len -= 8;
21451
21452 orientation = tvb_get_ntohieee_double(tvb, offset);
21453 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_orientation, tvb,
21454 offset, 8, orientation, "%.6f", orientation);
21455 offset += 8;
21456 tag_len -= 8;
21457
21458 distance = tvb_get_ntohieee_double(tvb, offset);
21459 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_distance, tvb,
21460 offset, 8, distance, "%.6f", distance);
21461 tag_len -= 8;
21462
21463 if (tag_len > 0) {
21464 expert_add_info_format(pinfo, ietree, &ei_ieee80211_bad_length,
21465 "Aruba GPS data contains additional %u bytes of unexpected data",
21466 tag_len);
21467 }
21468
21469 proto_item_append_text(item, " (coords: [%.6f, %.6f], ellipse: [%.2fm x %.2fm, %.2f°], distance: %.2fm)",
21470 latitude, longitude, major_axis, minor_axis, orientation, distance);
21471 }
21472 break;
21473
21474 default:
21475 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_data, tvb, offset,
21476 tag_len, ENC_NA0x00000000);
21477 if (tag_len > 0)
21478 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
21479 break;
21480 }
21481}
21482
21483static void
21484dissect_vendor_ie_routerboard(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21485 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21486{
21487 uint8_t type, length;
21488 proto_item *subitem;
21489 proto_tree *subtree;
21490
21491 offset += 1; /* VS OUI Type */
21492 tag_len -= 1;
21493 /* FIXME: Make sure we have at least 2 bytes left */
21494 proto_tree_add_item(ietree, hf_ieee80211_vs_routerboard_unknown, tvb, offset, 2, ENC_NA0x00000000);
21495
21496 offset += 2;
21497 tag_len -= 2;
21498
21499 while (tag_len >= 2) {
21500 type = tvb_get_uint8(tvb, offset);
21501 length = tvb_get_uint8(tvb, offset+1);
21502 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_routerboard_subitem, tvb, offset, length+2, ENC_NA0x00000000);
21503 subtree = proto_item_add_subtree(subitem, ett_routerboard);
21504 proto_item_set_text(subitem, "Sub IE (T/L: %d/%d)", type, length);
21505
21506 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subtype, tvb, offset, 1, ENC_NA0x00000000);
21507 offset += 1;
21508 tag_len -= 1;
21509
21510 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_sublength, tvb, offset, 1, ENC_NA0x00000000);
21511 offset += 1;
21512 tag_len -= 1;
21513
21514 if (tag_len < length)
21515 length = tag_len;
21516 if (length == 0) {
21517 expert_add_info(pinfo, subitem, &ei_ieee80211_vs_routerboard_unexpected_len);
21518 break;
21519 }
21520
21521 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subdata, tvb, offset, length, ENC_NA0x00000000);
21522
21523 if(type == 1){
21524 if(length == 30){
21525 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subtype1_prefix, tvb, offset, 10, ENC_NA0x00000000);
21526 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subtype1_data, tvb, offset + 10, length - 10, ENC_ASCII0x00000000);
21527 }else{
21528 expert_add_info(pinfo, subitem, &ei_ieee80211_vs_routerboard_unexpected_len);
21529 }
21530 }
21531
21532 offset += length;
21533 tag_len -= length;
21534 }
21535}
21536
21537#define AEROHIVE_HOSTNAME33 33
21538static const value_string ieee80211_vs_aerohive_type_vals[] = {
21539 { AEROHIVE_HOSTNAME33, "Host Name"},
21540 { 0, NULL((void*)0) }
21541};
21542static void
21543dissect_vendor_ie_aerohive(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21544 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21545{
21546 uint32_t type, length;
21547 const uint8_t* hostname;
21548 proto_item *ti_len;
21549
21550 /* VS OUI Type */
21551 type = tvb_get_uint8(tvb, offset);
21552 offset += 1;
21553 tag_len -= 1;
21554
21555 proto_tree_add_item(ietree, hf_ieee80211_vs_aerohive_version, tvb, offset, 1, ENC_NA0x00000000);
21556 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_aerohive_type_vals, "Unknown"));
21557 offset += 1;
21558 tag_len -= 1;
21559
21560 switch(type){
21561 case AEROHIVE_HOSTNAME33: /* Subtype (1 byte) + Host Name Length (1 byte) + Host Name */
21562
21563 proto_tree_add_item(ietree, hf_ieee80211_vs_aerohive_subtype, tvb, offset, 1, ENC_NA0x00000000);
21564 offset += 1;
21565 tag_len -= 1;
21566
21567 ti_len = proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_aerohive_hostname_length, tvb, offset, 1, ENC_NA0x00000000, &length);
21568 offset += 1;
21569 tag_len -= 1;
21570
21571 if (tag_len < length) {
21572 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < Host Name Length");
21573 length = tag_len;
21574 }
21575
21576 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_aerohive_hostname, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &hostname);
21577 proto_item_append_text(item, " (%s)", hostname);
21578
21579 break;
21580
21581 default:
21582 proto_tree_add_item(ietree, hf_ieee80211_vs_aerohive_data, tvb, offset, tag_len, ENC_NA0x00000000);
21583 break;
21584 }
21585}
21586
21587#define MIST_APNAME1 1
21588static const value_string ieee80211_vs_mist_type_vals[] = {
21589 { MIST_APNAME1, "AP Name"},
21590 { 0, NULL((void*)0) }
21591};
21592static void
21593dissect_vendor_ie_mist(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21594 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21595{
21596 uint32_t type, length;
21597 const uint8_t* apname;
21598
21599 /* VS OUI Type */
21600 type = tvb_get_uint8(tvb, offset);
21601 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_mist_type_vals, "Unknown"));
21602 offset += 1;
21603 tag_len -= 1;
21604
21605 switch(type){
21606 case MIST_APNAME1:
21607 length = tag_len;
21608 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_mist_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21609 proto_item_append_text(item, " (%s)", apname);
21610 break;
21611
21612 default:
21613 proto_tree_add_item(ietree, hf_ieee80211_vs_mist_data, tvb, offset, tag_len, ENC_NA0x00000000);
21614 break;
21615 }
21616}
21617
21618#define UBIQUITI_APNAME0x01 0x01
21619static const value_string ieee80211_vs_ubiquiti_type_vals[] = {
21620 { UBIQUITI_APNAME0x01, "AP Name"},
21621 { 0, NULL((void*)0) }
21622};
21623static void
21624dissect_vendor_ie_ubiquiti(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21625 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21626{
21627 uint32_t type, length;
21628 const uint8_t* apname;
21629
21630 /* VS OUI Type */
21631 type = tvb_get_uint8(tvb, offset);
21632 proto_tree_add_item(ietree, hf_ieee80211_vs_ubiquiti_type, tvb, offset, 1, ENC_NA0x00000000);
21633 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_ubiquiti_type_vals, "Unknown"));
21634 offset += 1;
21635 tag_len -= 1;
21636
21637 switch(type){
21638 case UBIQUITI_APNAME0x01:
21639 length = tag_len;
21640 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_ubiquiti_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21641 proto_item_append_text(item, " (%s)", apname);
21642 break;
21643
21644 default:
21645 proto_tree_add_item(ietree, hf_ieee80211_vs_ubiquiti_data, tvb, offset, tag_len, ENC_NA0x00000000);
21646 break;
21647 }
21648}
21649
21650#define RUCKUS_APNAME3 3
21651static const value_string ieee80211_vs_ruckus_type_vals[] = {
21652 { RUCKUS_APNAME3, "AP Name"},
21653 { 0, NULL((void*)0) }
21654};
21655static void
21656dissect_vendor_ie_ruckus(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21657 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21658{
21659 uint32_t type, length;
21660 const uint8_t* apname;
21661
21662 /* VS OUI Type */
21663 type = tvb_get_uint8(tvb, offset);
21664 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_ruckus_type_vals, "Unknown"));
21665 offset += 1;
21666 tag_len -= 1;
21667
21668 switch(type){
21669 case RUCKUS_APNAME3:
21670 length = tag_len;
21671 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_ruckus_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21672 proto_item_append_text(item, " (%s)", apname);
21673 break;
21674
21675 default:
21676 proto_tree_add_item(ietree, hf_ieee80211_vs_ruckus_data, tvb, offset, tag_len, ENC_NA0x00000000);
21677 break;
21678 }
21679}
21680
21681#define ALCATEL_APNAME1 1
21682static const value_string ieee80211_vs_alcatel_type_vals[] = {
21683 { ALCATEL_APNAME1, "AP Name"},
21684 { 0, NULL((void*)0) }
21685};
21686static void
21687dissect_vendor_ie_alcatel(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21688 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21689{
21690 uint32_t type, length;
21691 const uint8_t* apname;
21692
21693 /* VS OUI Type */
21694 type = tvb_get_uint8(tvb, offset);
21695 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_alcatel_type_vals, "Unknown"));
21696 offset += 1;
21697 tag_len -= 1;
21698
21699 switch(type){
21700 case ALCATEL_APNAME1:
21701 length = tag_len;
21702 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_alcatel_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21703 proto_item_append_text(item, " (%s)", apname);
21704 break;
21705
21706 default:
21707 proto_tree_add_item(ietree, hf_ieee80211_vs_alcatel_data, tvb, offset, tag_len, ENC_NA0x00000000);
21708 break;
21709 }
21710}
21711
21712enum vs_sgdsn_type {
21713 SGDSN_VERSION = 0x01,
21714 SGDSN_IDFR = 0x02,
21715 SGDSN_IDANSI = 0x03,
21716 SGDSN_LATITUDE = 0x04,
21717 SGDSN_LONGITUDE = 0x05,
21718 SGDSN_ALTITUDE_ABS = 0x06,
21719 SGDSN_ALTITUDE_REL = 0x07,
21720 SGDSN_LATITUDE_TAKEOFF = 0x08,
21721 SGDSN_LONGITUDE_TAKEOFF = 0x09,
21722 SGDSN_H_SPEED = 0x0a,
21723 SGDSN_HEADING = 0x0b,
21724};
21725
21726static const value_string ieee80211_vs_sgdsn_type_vals[] = {
21727 { SGDSN_VERSION, "Version"},
21728 { SGDSN_IDFR, "ID FR"},
21729 { SGDSN_IDANSI, "ID ANSI"},
21730 { SGDSN_LATITUDE, "Latitude"},
21731 { SGDSN_LONGITUDE, "Longitude"},
21732 { SGDSN_ALTITUDE_ABS, "Altitude AMSL"},
21733 { SGDSN_ALTITUDE_REL, "Altitude AGL"},
21734 { SGDSN_LATITUDE_TAKEOFF, "Latitude Takeoff"},
21735 { SGDSN_LONGITUDE_TAKEOFF, "Longitude Takeoff"},
21736 { SGDSN_H_SPEED, "Horizontal Speed"},
21737 { SGDSN_HEADING, "Heading"},
21738 { 0, NULL((void*)0) }
21739};
21740
21741static void
21742dissect_vendor_ie_sgdsn(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21743 tvbuff_t *tvb, int offset, uint32_t tag_len,
21744 packet_info *pinfo)
21745{
21746 // Technical specification defined in French law "NOR: ECOI1934044A"
21747 // https://www.legifrance.gouv.fr/eli/arrete/2019/12/27/ECOI1934044A/jo/texte
21748
21749 uint8_t type = tvb_get_uint8(tvb, offset);
21750 offset += 1;
21751 tag_len -= 1;
21752
21753 if (type == 1) {
21754
21755 while (tag_len > 2) {
21756
21757 uint8_t tlv_type = tvb_get_uint8(tvb, offset);
21758 uint8_t tlv_len = tvb_get_uint8(tvb, offset+1);
21759
21760 if (tag_len < tlv_len) {
21761 break;
21762 }
21763
21764 proto_item *item_tlv = proto_tree_add_item(ietree, hf_ieee80211_vs_sgdsn_tag, tvb, offset, tlv_len + 2, ENC_NA0x00000000);
21765 proto_item *tree = proto_item_add_subtree(item_tlv, ett_sgdsn);
21766
21767 proto_tree_add_item(tree, hf_ieee80211_vs_sgdsn_type, tvb, offset, 1, ENC_NA0x00000000);
21768 proto_tree_add_item(tree, hf_ieee80211_vs_sgdsn_length, tvb, offset + 1, 1, ENC_NA0x00000000);
21769
21770 offset += 2;
21771 tag_len -= 2;
21772
21773 proto_item_append_text(tree, ": %s", val_to_str_const(tlv_type, ieee80211_vs_sgdsn_type_vals, "Unknown"));
21774
21775 switch(tlv_type) {
21776 case SGDSN_VERSION:
21777 if (tlv_len == 1) {
21778 uint32_t value;
21779 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_version, tvb, offset, 1, ENC_NA0x00000000, &value);
21780 proto_item_append_text(tree, ": %d", value);
21781 } else {
21782 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 1");
21783 }
21784 break;
21785 case SGDSN_IDFR:
21786 if (tlv_len == 30) {
21787 const uint8_t* string1;
21788 const uint8_t* string2;
21789 const uint8_t* string3;
21790 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_manufacturer, tvb, offset, 3, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &string1);
21791 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_model, tvb, offset+3, 3, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &string2);
21792 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_serialnumber, tvb, offset+6, tlv_len-6, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &string3);
21793 proto_item_append_text(tree, ": %s %s %s", string1, string2, string3);
21794 } else {
21795 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 30");
21796 }
21797 break;
21798 case SGDSN_IDANSI:
21799 if (tlv_len >= 6 && tlv_len <= 20) {
21800 // ANSI/CTA-2063 Small UAS Serial Number.
21801 // Doc (free): https://shop.cta.tech/products/small-unmanned-aerial-systems-serial-numbers
21802 const uint8_t* icao_mfr_code;
21803 uint32_t sn_len;
21804 const uint8_t* serial_number;
21805 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_icaomfrcode, tvb, offset, 4, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &icao_mfr_code);
21806 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_serialnumber_len, tvb, offset+4, 1, ENC_NA0x00000000, &sn_len);
21807 if(sn_len < 0x30 || (sn_len > 0x39 && sn_len < 0x41) || sn_len > 0x46) {
21808 expert_add_info_format(pinfo, tree, &ei_ieee80211_vs_sgdsn_serialnumber_invalid_len_val, "Serial Number Length must be '0' to '9', or 'A' to 'F'");
21809 } else if (sn_len != (uint32_t)tlv_len+(sn_len>0x39 ? 0x32 : 0x2A)) {
21810 // Check that sn_len equals tlv_len - 5 + ( 0x37 if sn_len is 'A' to 'F', 0x30 otherwise).
21811 // We suppressed the minus 5 in the check above to avoid a compilation warning
21812 expert_add_info_format(pinfo, tree, &ei_ieee80211_vs_sgdsn_serialnumber_unexpected_len_val, "Expected %d byte(s), got %d byte(s)", tlv_len-5, (sn_len>0x39?sn_len-0x37:sn_len-0x30));
21813 }
21814 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_serialnumber, tvb, offset+5, tlv_len-5, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &serial_number);
21815 proto_item_append_text(tree, ": %s %s", icao_mfr_code, serial_number);
21816 } else {
21817 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be between 6 and 20");
21818 }
21819 break;
21820 case SGDSN_LATITUDE_TAKEOFF:
21821 case SGDSN_LATITUDE:
21822 case SGDSN_LONGITUDE_TAKEOFF:
21823 case SGDSN_LONGITUDE:
21824 if (tlv_len == 4) {
21825 int32_t value;
21826 proto_tree_add_item_ret_int(tree, hf_ieee80211_vs_sgdsn_gpscoord, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000, &value);
21827 proto_item_append_text(tree, ": %.5f", value / 100000.0);
21828 } else {
21829 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 4");
21830 }
21831 break;
21832 case SGDSN_ALTITUDE_ABS:
21833 case SGDSN_ALTITUDE_REL:
21834 if (tlv_len == 2) {
21835 int32_t value;
21836 proto_tree_add_item_ret_int(tree, hf_ieee80211_vs_sgdsn_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &value);
21837 proto_item_append_text(tree, ": %d m", value);
21838 } else {
21839 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 4");
21840 }
21841 break;
21842 case SGDSN_H_SPEED:
21843 if (tlv_len == 1) {
21844 uint32_t value;
21845 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_speed, tvb, offset, 1, ENC_NA0x00000000, &value);
21846 proto_item_append_text(tree, ": %d m/s", value);
21847 } else {
21848 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 1");
21849 }
21850 break;
21851 case SGDSN_HEADING:
21852 if (tlv_len == 2) {
21853 uint32_t value;
21854 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_heading, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &value);
21855 proto_item_append_text(tree, ": %d deg", value);
21856 } else {
21857 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 2");
21858 }
21859 break;
21860 default:
21861 expert_add_info_format(pinfo, tree, &ei_ieee80211_extra_data, "Unknown type");
21862 break;
21863 }
21864
21865 offset += tlv_len;
21866 tag_len -= tlv_len;
21867 }
21868
21869 if (tag_len) {
21870 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length, "Remaining bytes, TLV structure error");
21871 }
21872 }
21873}
21874
21875enum vs_nintendo_type {
21876 NINTENDO_SERVICES = 0x11,
21877 NINTENDO_CONSOLEID = 0xF0
21878};
21879
21880static const value_string ieee80211_vs_nintendo_type_vals[] = {
21881 { NINTENDO_SERVICES, "Services"},
21882 { NINTENDO_CONSOLEID, "ConsoleID"},
21883 { 0, NULL((void*)0) }
21884};
21885
21886static proto_tree*
21887dissect_vendor_ie_nintendo_tlv(const int hfindex, proto_tree *ietree,
21888 tvbuff_t *tvb, int offset, uint32_t sublen)
21889{
21890 proto_item *nintendo_item;
21891 proto_tree *nintendo_tree;
21892
21893 nintendo_item = proto_tree_add_item(ietree, hfindex, tvb, offset, sublen, ENC_NA0x00000000);
21894 nintendo_tree = proto_item_add_subtree(nintendo_item, ett_nintendo);
21895
21896 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_type, tvb, offset, 1, ENC_NA0x00000000);
21897 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_length, tvb, offset + 1, 1, ENC_NA0x00000000);
21898
21899 return nintendo_tree;
21900}
21901
21902static void
21903dissect_vendor_ie_nintendo(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21904 tvbuff_t *tvb, int offset, uint32_t tag_len)
21905{
21906 proto_tree *nintendo_tree;
21907
21908 uint8_t subtype;
21909 uint8_t sublength;
21910 uint32_t length = tag_len;
21911
21912 /* Skip OUI type for now - the code is for type 1 (StreetPass) only */
21913 /* http://3dbrew.org/wiki/StreetPass */
21914 offset += 1;
21915 length -= 1;
21916
21917 while(length > 0 && length < 256) { /* otherwise we are < 0 but on unsigned */
21918 subtype = tvb_get_uint8(tvb, offset);
21919 sublength = tvb_get_uint8(tvb, offset + 1);
21920
21921 switch(subtype) {
21922 case NINTENDO_SERVICES:
21923 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_servicelist, ietree, tvb, offset, sublength + 2);
21924 offset += 2;
21925 length -= 2;
21926
21927 while (sublength > 4) {
21928
21929 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_service, tvb, offset, 5, ENC_NA0x00000000);
21930 offset += 5;
21931 length -= 5;
21932 sublength -= 5;
21933 }
21934 break;
21935 case NINTENDO_CONSOLEID:
21936 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_consoleid, ietree, tvb, offset, sublength + 2);
21937 offset += + 2;
21938 length -= + 2;
21939
21940 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_consoleid, tvb, offset, sublength, ENC_NA0x00000000);
21941 offset += sublength;
21942 length -= sublength;
21943 break;
21944 default:
21945 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_unknown, ietree, tvb, offset, sublength + 2);
21946 offset += + 2;
21947 length -= + 2;
21948
21949 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_unknown, tvb, offset, sublength, ENC_NA0x00000000);
21950 offset += sublength;
21951 length -= sublength;
21952 break;
21953 }
21954 }
21955}
21956
21957static void
21958dissect_vendor_ie_meru(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21959 tvbuff_t *tvb, int offset, uint32_t tag_len,
21960 packet_info *pinfo)
21961{
21962 uint32_t type, length;
21963 proto_item *subitem, *ti_len;
21964 proto_tree *subtree;
21965
21966 while (tag_len >= 2) {
21967 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_meru_subitem, tvb, offset, 2, ENC_NA0x00000000);
21968 subtree = proto_item_add_subtree(subitem, ett_meru);
21969
21970 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_vs_meru_subtype, tvb, offset, 1, ENC_NA0x00000000, &type);
21971 offset += 1;
21972 tag_len -= 1;
21973
21974 ti_len = proto_tree_add_item_ret_uint(subtree, hf_ieee80211_vs_meru_sublength, tvb, offset, 1, ENC_NA0x00000000, &length);
21975 offset += 1;
21976 tag_len -= 1;
21977
21978 if (tag_len < length) {
21979 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < Sub Length");
21980 length = tag_len;
21981 }
21982
21983 proto_item_append_text(subitem, " (t=%d, l=%d)", type, length);
21984 proto_item_set_len(subitem, 2+length);
21985
21986 proto_tree_add_item(subtree, hf_ieee80211_vs_meru_subdata, tvb, offset, length, ENC_NA0x00000000);
21987 offset += length;
21988 tag_len -= length;
21989
21990 }
21991}
21992
21993static const value_string ieee80211_vs_extreme_subtype_vals[] = {
21994 { 1, "AP Name"},
21995 { 0, NULL((void*)0) }
21996};
21997
21998static void
21999dissect_vendor_ie_extreme(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
22000 tvbuff_t *tvb, int offset, uint32_t tag_len,
22001 packet_info *pinfo)
22002{
22003 uint32_t type, length;
22004 proto_item *ti_len;
22005
22006 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_subtype, tvb, offset, 1, ENC_NA0x00000000, &type);
22007 offset += 1;
22008 tag_len -= 1;
22009
22010 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_subdata, tvb, offset, tag_len, ENC_NA0x00000000);
22011
22012 switch(type){
22013 case 1: /* Unknown (7 bytes) + AP Name Length (1 byte) + AP Name */
22014
22015 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_unknown, tvb, offset, 7, ENC_NA0x00000000);
22016 offset += 7;
22017 tag_len -= 1;
22018
22019 ti_len = proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_ap_length, tvb, offset, 1, ENC_NA0x00000000, &length);
22020 offset += 1;
22021 tag_len -= 1;
22022
22023 if (tag_len < length) {
22024 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < AP Length");
22025 length = tag_len;
22026 }
22027
22028 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_ap_name, tvb, offset, length, ENC_ASCII0x00000000);
22029
22030 break;
22031 default:
22032 /* Expert info ? */
22033 break;
22034 }
22035}
22036
22037#define FORTINET_SYSTEM10 10
22038static const value_string ieee80211_vs_fortinet_subtype_vals[] = {
22039 { FORTINET_SYSTEM10, "SYSTEM"},
22040 { 0, NULL((void*)0) }
22041};
22042
22043#define FORTINET_SYSTEM_APNAME1 1
22044#define FORTINET_SYSTEM_APMODEL2 2
22045#define FORTINET_SYSTEM_APSERIAL3 3
22046static const value_string ieee80211_vs_fortinet_system_type_vals[] = {
22047 { FORTINET_SYSTEM_APNAME1, "AP NAME"},
22048 { FORTINET_SYSTEM_APMODEL2, "AP MODEL"},
22049 { FORTINET_SYSTEM_APSERIAL3, "AP SERIAL"},
22050 { 0, NULL((void*)0) }
22051};
22052
22053static void
22054dissect_vendor_ie_fortinet(proto_item *item, proto_tree *ietree,
22055 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22056{
22057 uint32_t type;
22058
22059
22060 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_subtype, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &type);
22061 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_fortinet_subtype_vals, "Unknown"));
22062 offset += 2;
22063 tag_len -= 2;
22064
22065 switch (type) {
22066 case FORTINET_SYSTEM10:
22067 while (tag_len > 2) {
22068 uint32_t system_type, system_length;
22069
22070 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_system_type, tvb, offset, 1, ENC_NA0x00000000, &system_type);
22071 proto_item_append_text(item, " - %s:", val_to_str_const(system_type, ieee80211_vs_fortinet_system_type_vals, "Unknown"));
22072 offset += 1;
22073 tag_len -= 1;
22074
22075 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_system_length, tvb, offset, 1, ENC_NA0x00000000, &system_length);
22076 offset += 1;
22077 tag_len -= 1;
22078
22079 switch (system_type) {
22080 case FORTINET_SYSTEM_APNAME1:{
22081 const uint8_t* name;
22082 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apname, tvb,
22083 offset, system_length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &name);
22084 proto_item_append_text(item, " %s", name);
22085 }
22086 break;
22087 case FORTINET_SYSTEM_APMODEL2:{
22088 const uint8_t* model;
22089 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apmodel, tvb,
22090 offset, system_length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &model);
22091 proto_item_append_text(item, " %s", model);
22092 }
22093 break;
22094 case FORTINET_SYSTEM_APSERIAL3:{
22095 const uint8_t* serial;
22096 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apserial, tvb,
22097 offset, system_length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &serial);
22098 proto_item_append_text(item, " %s", serial);
22099 }
22100 break;
22101 }
22102 offset += system_length;
22103 tag_len -= system_length;
22104 }
22105 break;
22106
22107 default:
22108 proto_tree_add_item(ietree, hf_ieee80211_vs_fortinet_data, tvb, offset,
22109 tag_len, ENC_NA0x00000000);
22110 if (tag_len > 0)
22111 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22112 break;
22113 }
22114}
22115
22116#define ARISTA_APNAME6 6
22117static const value_string ieee80211_vs_arista_subtype_vals[] = {
22118 { ARISTA_APNAME6, "AP Name"},
22119 { 0, NULL((void*)0) }
22120};
22121static void
22122dissect_vendor_ie_arista(proto_item *item, proto_tree *ietree,
22123 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22124{
22125 uint8_t type;
22126 const uint8_t* name;
22127
22128 offset += 1; /* VS OUI Type */
22129 tag_len -= 1;
22130
22131 type = tvb_get_uint8(tvb, offset);
22132 proto_tree_add_item(ietree, hf_ieee80211_vs_arista_subtype, tvb, offset, 1, ENC_NA0x00000000);
22133 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_arista_subtype_vals, "Unknown"));
22134 offset += 1;
22135 tag_len -= 1;
22136
22137 switch (type) {
22138 case ARISTA_APNAME6:
22139 offset += 1;
22140 tag_len -= 1;
22141
22142 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_arista_apname, tvb,
22143 offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &name);
22144 proto_item_append_text(item, " (%s)", name);
22145 break;
22146
22147 default:
22148 proto_tree_add_item(ietree, hf_ieee80211_vs_arista_data, tvb, offset,
22149 tag_len, ENC_NA0x00000000);
22150 if (tag_len > 0)
22151 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22152 break;
22153 }
22154}
22155
22156#define WISUN_PTKID1 1
22157#define WISUN_GTKL2 2
22158#define WISUN_NR3 3
22159#define WISUN_LGTKL4 4
22160#define WISUN_LGTK5 5
22161
22162static const value_string ieee80211_vs_wisun_type_vals[] = {
22163 { WISUN_PTKID1, "PTKID" },
22164 { WISUN_GTKL2, "GTKL" },
22165 { WISUN_NR3, "NR" },
22166 { WISUN_LGTKL4, "LGTKL" },
22167 { WISUN_LGTK5, "LGTK" },
22168 { 0, NULL((void*)0) }
22169};
22170
22171#define WISUN_GTKL_GTK00x01 0x01
22172#define WISUN_GTKL_GTK10x02 0x02
22173#define WISUN_GTKL_GTK20x04 0x04
22174#define WISUN_GTKL_GTK30x08 0x08
22175
22176#define WISUN_NR_BR0 0
22177#define WISUN_NR_ROUTER1 1
22178#define WISUN_NR_LFN2 2
22179
22180static const value_string ieee80211_vs_wisun_nr_vals[] = {
22181 { WISUN_NR_BR0, "Border Router" },
22182 { WISUN_NR_ROUTER1, "Router" },
22183 { WISUN_NR_LFN2, "LFN" },
22184 { 0, NULL((void*)0) }
22185};
22186
22187#define WISUN_LGTKL_LGTK00x01 0x01
22188#define WISUN_LGTKL_LGTK10x02 0x02
22189#define WISUN_LGTKL_LGTK20x04 0x04
22190
22191static void
22192dissect_vendor_ie_wisun(proto_item *item, proto_tree *ietree,
22193 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22194{
22195 uint32_t type;
22196
22197 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_wisun_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &type);
22198 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_wisun_type_vals, "Unknown"));
22199 offset += 1;
22200 tag_len -= 1;
22201
22202 switch(type) {
22203 case WISUN_PTKID1:
22204 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_ptkid, tvb, offset, 16, ENC_NA0x00000000);
22205 break;
22206 case WISUN_GTKL2: {
22207 static int * const wisun_gtkl[] = {
22208 &hf_ieee80211_vs_wisun_gtkl_gtk0,
22209 &hf_ieee80211_vs_wisun_gtkl_gtk1,
22210 &hf_ieee80211_vs_wisun_gtkl_gtk2,
22211 &hf_ieee80211_vs_wisun_gtkl_gtk3,
22212 NULL((void*)0),
22213 };
22214
22215 proto_tree_add_bitmask(ietree, tvb, offset, hf_ieee80211_vs_wisun_gtkl,
22216 ett_wisun_gtkl, wisun_gtkl, ENC_LITTLE_ENDIAN0x80000000);
22217 break;
22218 }
22219 case WISUN_NR3:
22220 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_nr, tvb,
22221 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
22222 break;
22223 case WISUN_LGTKL4: {
22224 static int * const wisun_lgtkl[] = {
22225 &hf_ieee80211_vs_wisun_lgtkl_lgtk0,
22226 &hf_ieee80211_vs_wisun_lgtkl_lgtk1,
22227 &hf_ieee80211_vs_wisun_lgtkl_lgtk2,
22228 NULL((void*)0),
22229 };
22230
22231 proto_tree_add_bitmask(ietree, tvb, offset, hf_ieee80211_vs_wisun_lgtkl,
22232 ett_wisun_lgtkl, wisun_lgtkl, ENC_LITTLE_ENDIAN0x80000000);
22233 break;
22234 }
22235 case WISUN_LGTK5:
22236 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_lgtk_key_id, tvb,
22237 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
22238 offset += 2;
22239 tag_len -= 2;
22240 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_lgtk_lgtk, tvb,
22241 offset, tag_len, ENC_NA0x00000000);
22242 break;
22243 default:
22244 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_data, tvb, offset, tag_len, ENC_NA0x00000000);
22245 if (tag_len > 0)
22246 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22247 break;
22248 }
22249}
22250
22251static const value_string ieee80211_vs_apple_subtype_vals[] = {
22252 { 0, NULL((void*)0) }
22253};
22254
22255static void
22256dissect_vendor_ie_apple(proto_item *item, proto_tree *ietree,
22257 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22258{
22259 uint32_t subtype, type, length;
22260
22261 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_apple_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &type);
22262 offset += 1;
22263 tag_len -= 1;
22264
22265 if(type == 6) { /* when type is 6, there is some subtype...*/
22266 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_apple_subtype, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &subtype);
22267 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_apple_subtype_vals, "Unknown"));
22268 offset += 2;
22269 tag_len -= 2;
22270
22271 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_apple_length, tvb, offset, 1, ENC_NA0x00000000, &length);
22272 offset += 1;
22273 tag_len -= 1;
22274
22275 switch (subtype) {
22276 default:
22277 proto_tree_add_item(ietree, hf_ieee80211_vs_apple_data, tvb, offset, tag_len, ENC_NA0x00000000);
22278 if (tag_len > 0)
22279 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22280 break;
22281 }
22282 } else{
22283 proto_tree_add_item(ietree, hf_ieee80211_vs_apple_data, tvb, offset, tag_len, ENC_NA0x00000000);
22284 if (tag_len > 0)
22285 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22286 }
22287
22288}
22289
22290/* 802.11-2012 8.4.2.37 QoS Capability element */
22291static int
22292dissect_qos_capability(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
22293{
22294 switch (ftype) {
22295 case MGT_ASSOC_REQ0x00:
22296 case MGT_PROBE_REQ0x04:
22297 case MGT_REASSOC_REQ0x02:
22298 {
22299 /* To AP so decode Qos Info as STA */
22300 offset += add_ff_qos_info_sta(tree, tvb, pinfo, offset);
22301 break;
22302 }
22303
22304 case MGT_BEACON0x08:
22305 case MGT_PROBE_RESP0x05:
22306 case MGT_ASSOC_RESP0x01:
22307 case MGT_REASSOC_RESP0x03:
22308 {
22309 /* From AP so decode QoS Info as AP */
22310 offset += add_ff_qos_info_ap(tree, tvb, pinfo, offset);
22311 break;
22312 }
22313
22314 default:
22315 expert_add_info_format(pinfo, proto_tree_get_parent(tree), &ei_ieee80211_qos_info_bad_ftype,
22316 "Could not deduce direction to decode correctly, ftype %u", ftype);
22317 break;
22318 }
22319
22320 return offset;
22321}
22322
22323static ieee80211_packet_data_t* get_or_create_packet_data(packet_info *pinfo) {
22324 ieee80211_packet_data_t *packet_data =
22325 (ieee80211_packet_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, PACKET_DATA_KEY);
22326 if (!packet_data) {
22327 packet_data = wmem_new(pinfo->pool, ieee80211_packet_data_t)((ieee80211_packet_data_t*)wmem_alloc((pinfo->pool), sizeof
(ieee80211_packet_data_t)))
;
22328 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, PACKET_DATA_KEY, packet_data);
22329 memset(packet_data, 0, sizeof(ieee80211_packet_data_t));
22330 }
22331 return packet_data;
22332}
22333
22334/* See ieee80211_rsn_keymgmt_vals */
22335static bool_Bool is_ft_akm_suite(uint32_t akm_suite)
22336{
22337 switch (akm_suite) {
22338 case AKMS_FT_IEEE802_1X0x000FAC03:
22339 case AKMS_FT_PSK0x000FAC04:
22340 case AKMS_FT_SAE0x000FAC09:
22341 case AKMS_FT_IEEE802_1X_SHA3840x000FAC0D:
22342 case AKMS_FT_FILS_SHA2560x000FAC10:
22343 case AKMS_FT_FILS_SHA3840x000FAC11:
22344 return true1;
22345 default:
22346 return false0;
22347 }
22348}
22349
22350static void
22351save_proto_data(tvbuff_t *tvb, packet_info *pinfo, int offset, size_t size, int key)
22352{
22353 uint8_t *data;
22354
22355 if (!enable_decryption) {
22356 return;
22357 }
22358 data = (uint8_t *)wmem_alloc(pinfo->pool, size);
22359 tvb_memcpy(tvb, data, offset, size);
22360 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, key, data);
22361}
22362
22363static void
22364save_proto_data_value(packet_info *pinfo, unsigned value, int key)
22365{
22366 if (!enable_decryption) {
22367 return;
22368 }
22369 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, key, GUINT_TO_POINTER(value)((gpointer) (gulong) (value)));
22370}
22371
22372static void
22373save_tag_for_dot11decrypt(tvbuff_t *tvb, packet_info *pinfo, int offset)
22374{
22375 uint8_t tag_no;
22376 uint8_t tag_len;
22377
22378 if (!enable_decryption) {
22379 return;
22380 }
22381 tag_no = tvb_get_uint8(tvb, offset);
22382 tag_len = tvb_get_uint8(tvb, offset + 1);
22383
22384 switch (tag_no) {
22385 case TAG_MOBILITY_DOMAIN54:
22386 save_proto_data(tvb, pinfo, offset, tag_len + 2, MDE_TAG_KEY);
22387 break;
22388 case TAG_FAST_BSS_TRANSITION55:
22389 save_proto_data(tvb, pinfo, offset, tag_len + 2, FTE_TAG_KEY);
22390 break;
22391 case TAG_RIC_DATA57:
22392 save_proto_data(tvb, pinfo, offset, tag_len + 2, RDE_TAG_KEY);
22393 break;
22394 case TAG_RSN_IE48:
22395 save_proto_data(tvb, pinfo, offset, tag_len + 2, RSNE_TAG_KEY);
22396 break;
22397 case TAG_RSNX244:
22398 save_proto_data(tvb, pinfo, offset, tag_len + 2, RSNXE_TAG_KEY);
22399 break;
22400 default:
22401 break;
22402 }
22403}
22404
22405static void
22406set_packet_data_last_akm_suite(ieee80211_packet_data_t *packet_data,
22407 uint32_t last_akm_suite)
22408{
22409 packet_data->last_akm_suite_set = true1;
22410 packet_data->last_akm_suite = last_akm_suite;
22411}
22412
22413static void
22414set_conversation_last_akm_suite(ieee80211_conversation_data_t *conv,
22415 uint32_t last_akm_suite)
22416{
22417 conv->last_akm_suite_set = true1;
22418 conv->last_akm_suite = last_akm_suite;
22419}
22420
22421/*
22422 * 7.3.2.25 RSNE information element. Common format with OSEN except the
22423 * version... should refactor
22424 */
22425static int
22426dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
22427 int offset, uint32_t tag_len, association_sanity_check_t *association_sanity_check)
22428{
22429 proto_item *rsn_gcs_item, *rsn_pcs_item, *rsn_akms_item, *rsn_pmkid_item, *rsn_gmcs_item;
22430 proto_item *rsn_sub_pcs_item, *rsn_sub_akms_item;
22431 proto_item *rsn_pcs_count, *rsn_akms_count, *rsn_pmkid_count;
22432 proto_tree *rsn_gcs_tree, *rsn_pcs_tree, *rsn_akms_tree, *rsn_pmkid_tree, *rsn_gmcs_tree;
22433 proto_tree *rsn_sub_pcs_tree, *rsn_sub_akms_tree;
22434 uint16_t pcs_count, akms_count, pmkid_count;
22435 unsigned ii;
22436 int tag_end = offset + tag_len;
22437 static int * const ieee80211_rsn_cap[] = {
22438 &hf_ieee80211_rsn_cap_preauth,
22439 &hf_ieee80211_rsn_cap_no_pairwise,
22440 &hf_ieee80211_rsn_cap_ptksa_replay_counter,
22441 &hf_ieee80211_rsn_cap_gtksa_replay_counter,
22442 &hf_ieee80211_rsn_cap_mfpr,
22443 &hf_ieee80211_rsn_cap_mfpc,
22444 &hf_ieee80211_rsn_cap_jmr,
22445 &hf_ieee80211_rsn_cap_peerkey,
22446 &hf_ieee80211_rsn_cap_spp_amsdu_cap,
22447 &hf_ieee80211_rsn_cap_spp_amsdu_req,
22448 &hf_ieee80211_rsn_cap_pbac,
22449 &hf_ieee80211_rsn_cap_extended_key_id_iaf,
22450 &hf_ieee80211_rsn_cap_ocvc,
22451 NULL((void*)0)
22452 };
22453
22454 proto_tree_add_item(tree, hf_ieee80211_rsn_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22455 offset += 2;
22456
22457 if (offset >= tag_end)
22458 return offset;
22459
22460 /* 7.3.2.25.1 Group Cipher suites */
22461 rsn_gcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22462 rsn_gcs_tree = proto_item_add_subtree(rsn_gcs_item, ett_rsn_gcs_tree);
22463 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22464
22465 /* Check if OUI is 00:0F:AC (ieee80211) */
22466 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22467 {
22468 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22469 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), GROUP_CIPHER_KEY);
22470 } else {
22471 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22472 }
22473 offset += 4;
22474
22475 if (offset >= tag_end)
22476 return offset;
22477
22478 /* 7.3.2.25.2 Pairwise Cipher suites */
22479 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22480 pcs_count = tvb_get_letohs(tvb, offset);
22481 offset += 2;
22482
22483 if (offset + (pcs_count * 4) > tag_end)
22484 {
22485 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
22486 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
22487 pcs_count = (tag_end - offset) / 4;
22488 }
22489
22490 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA0x00000000);
22491 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
22492 for (ii = 0; ii < pcs_count; ii++)
22493 {
22494 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22495 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
22496 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22497
22498 /* Check if OUI is 00:0F:AC (ieee80211) */
22499 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22500 {
22501 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22502 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
22503 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), CIPHER_KEY);
22504 } else {
22505 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22506 }
22507 offset += 4;
22508 }
22509
22510 if (offset >= tag_end)
22511 {
22512 return offset;
22513 }
22514
22515 /* 7.3.2.25.2 AKM suites */
22516 rsn_akms_count = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22517 akms_count = tvb_get_letohs(tvb, offset);
22518 offset += 2;
22519
22520 if (offset + (akms_count * 4) > tag_end)
22521 {
22522 expert_add_info_format(pinfo, rsn_akms_count, &ei_ieee80211_rsn_pmkid_count,
22523 "Auth Key Management (AKM) Suite Count too large, 4*%u > %d", akms_count, tag_end - offset);
22524 akms_count = (tag_end - offset) / 4;
22525 }
22526
22527 rsn_akms_item = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_list, tvb, offset, akms_count * 4, ENC_NA0x00000000);
22528 rsn_akms_tree = proto_item_add_subtree(rsn_akms_item, ett_rsn_akms_tree);
22529
22530 ieee80211_packet_data_t *packet_data = get_or_create_packet_data(pinfo);
22531
22532 for (ii = 0; ii < akms_count; ii++)
22533 {
22534 rsn_sub_akms_item = proto_tree_add_item(rsn_akms_tree, hf_ieee80211_rsn_akms, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22535 rsn_sub_akms_tree = proto_item_add_subtree(rsn_sub_akms_item, ett_rsn_sub_akms_tree);
22536 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22537
22538 /* Check if OUI is 00:0F:AC (ieee80211) */
22539 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22540 {
22541 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22542 proto_item_append_text(rsn_akms_item, " %s", rsn_akms_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
22543 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), AKM_KEY);
22544
22545 set_packet_data_last_akm_suite(packet_data, tvb_get_ntohl(tvb, offset));
22546 if (association_sanity_check) {
22547 uint32_t akm_suite = tvb_get_ntohl(tvb, offset);
22548 association_sanity_check->last_akm_suite = akm_suite;
22549
22550 if (is_ft_akm_suite(akm_suite)) {
22551 /* This is an FT AKM suite */
22552 association_sanity_check->has_ft_akm_suite = true1;
22553 if (association_sanity_check->rsn_first_ft_akm_suite == NULL((void*)0) && rsn_sub_akms_tree != NULL((void*)0)) {
22554 association_sanity_check->rsn_first_ft_akm_suite = rsn_sub_akms_tree->last_child;
22555 }
22556 } else {
22557 /* This is a non-FT AKM suite */
22558 association_sanity_check->has_non_ft_akm_suite = true1;
22559 if (association_sanity_check->rsn_first_non_ft_akm_suite == NULL((void*)0) && rsn_sub_akms_tree != NULL((void*)0)) {
22560 association_sanity_check->rsn_first_non_ft_akm_suite = rsn_sub_akms_tree->last_child;
22561 }
22562 }
22563 }
22564 } else {
22565 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22566 }
22567 offset += 4;
22568 }
22569
22570 /* 7.3.2.25.3 RSN capabilities */
22571 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_rsn_cap,
22572 ett_rsn_cap_tree, ieee80211_rsn_cap,
22573 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22574 offset += 2;
22575 if (offset >= tag_end)
22576 {
22577 return offset;
22578 }
22579 /* 7.3.2.25.4 PMKID */
22580 rsn_pmkid_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22581 pmkid_count = tvb_get_letohs(tvb, offset);
22582 offset += 2;
22583
22584 if (offset + (pmkid_count * 16) > tag_end)
22585 {
22586 expert_add_info_format(pinfo, rsn_pmkid_count, &ei_ieee80211_pmkid_count_too_large,
22587 "PMKID Count too large, 16*%u > %d", pmkid_count, tag_end - offset);
22588 pmkid_count = (tag_end - offset) / 16;
22589 }
22590
22591 rsn_pmkid_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_list, tvb, offset, pmkid_count * 16, ENC_NA0x00000000);
22592 rsn_pmkid_tree = proto_item_add_subtree(rsn_pmkid_item, ett_rsn_pmkid_tree);
22593 for (ii = 0; ii < pmkid_count; ii++)
22594 {
22595 proto_tree_add_item(rsn_pmkid_tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA0x00000000);
22596 offset += 16;
22597 }
22598
22599 if (offset >= tag_end)
22600 {
22601 return offset;
22602 }
22603 /* Group Management Cipher Suite (802.11w)*/
22604 rsn_gmcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gmcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22605 rsn_gmcs_tree = proto_item_add_subtree(rsn_gmcs_item, ett_rsn_gmcs_tree);
22606 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22607 /* Check if OUI is 00:0F:AC (ieee80211) */
22608 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22609 {
22610 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22611 } else {
22612 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22613 }
22614 offset += 4;
22615
22616 return offset;
22617}
22618
22619/* 7.3.2.27 Extended Capabilities information element (127) */
22620static int
22621dissect_extended_capabilities_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
22622{
22623 int tag_len = tvb_reported_length(tvb);
22624 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
22625 int offset = 0;
22626 proto_item *ti_ex_cap;
22627 static int * const ieee80211_tag_extended_capabilities_byte1[] = {
22628 &hf_ieee80211_tag_extended_capabilities_b0,
22629 &hf_ieee80211_tag_extended_capabilities_b1,
22630 &hf_ieee80211_tag_extended_capabilities_b2,
22631 &hf_ieee80211_tag_extended_capabilities_b3,
22632 &hf_ieee80211_tag_extended_capabilities_b4,
22633 &hf_ieee80211_tag_extended_capabilities_b5,
22634 &hf_ieee80211_tag_extended_capabilities_b6,
22635 &hf_ieee80211_tag_extended_capabilities_b7,
22636 NULL((void*)0)
22637 };
22638 static int * const ieee80211_tag_extended_capabilities_byte2[] = {
22639 &hf_ieee80211_tag_extended_capabilities_b8,
22640 &hf_ieee80211_tag_extended_capabilities_b9,
22641 &hf_ieee80211_tag_extended_capabilities_b10,
22642 &hf_ieee80211_tag_extended_capabilities_b11,
22643 &hf_ieee80211_tag_extended_capabilities_b12,
22644 &hf_ieee80211_tag_extended_capabilities_b13,
22645 &hf_ieee80211_tag_extended_capabilities_b14,
22646 &hf_ieee80211_tag_extended_capabilities_b15,
22647 NULL((void*)0)
22648 };
22649 static int * const ieee80211_tag_extended_capabilities_byte3[] = {
22650 &hf_ieee80211_tag_extended_capabilities_b16,
22651 &hf_ieee80211_tag_extended_capabilities_b17,
22652 &hf_ieee80211_tag_extended_capabilities_b18,
22653 &hf_ieee80211_tag_extended_capabilities_b19,
22654 &hf_ieee80211_tag_extended_capabilities_b20,
22655 &hf_ieee80211_tag_extended_capabilities_b21,
22656 &hf_ieee80211_tag_extended_capabilities_b22,
22657 &hf_ieee80211_tag_extended_capabilities_b23,
22658 NULL((void*)0)
22659 };
22660 static int * const ieee80211_tag_extended_capabilities_byte4[] = {
22661 &hf_ieee80211_tag_extended_capabilities_b24,
22662 &hf_ieee80211_tag_extended_capabilities_b25,
22663 &hf_ieee80211_tag_extended_capabilities_b26,
22664 &hf_ieee80211_tag_extended_capabilities_b27,
22665 &hf_ieee80211_tag_extended_capabilities_b28,
22666 &hf_ieee80211_tag_extended_capabilities_b29,
22667 &hf_ieee80211_tag_extended_capabilities_b30,
22668 &hf_ieee80211_tag_extended_capabilities_b31,
22669 NULL((void*)0)
22670 };
22671 static int * const ieee80211_tag_extended_capabilities_byte5[] = {
22672 &hf_ieee80211_tag_extended_capabilities_b32,
22673 &hf_ieee80211_tag_extended_capabilities_b33,
22674 &hf_ieee80211_tag_extended_capabilities_b34,
22675 &hf_ieee80211_tag_extended_capabilities_b35,
22676 &hf_ieee80211_tag_extended_capabilities_b36,
22677 &hf_ieee80211_tag_extended_capabilities_b37,
22678 &hf_ieee80211_tag_extended_capabilities_b38,
22679 &hf_ieee80211_tag_extended_capabilities_b39,
22680 NULL((void*)0)
22681 };
22682 static int * const ieee80211_tag_extended_capabilities_byte6[] = {
22683 &hf_ieee80211_tag_extended_capabilities_b40,
22684 &hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
22685 &hf_ieee80211_tag_extended_capabilities_b44,
22686 &hf_ieee80211_tag_extended_capabilities_b45,
22687 &hf_ieee80211_tag_extended_capabilities_b46,
22688 &hf_ieee80211_tag_extended_capabilities_b47,
22689 NULL((void*)0)
22690 };
22691 static int * const ieee80211_tag_extended_capabilities_byte7[] = {
22692 &hf_ieee80211_tag_extended_capabilities_b48,
22693 &hf_ieee80211_tag_extended_capabilities_b49,
22694 &hf_ieee80211_tag_extended_capabilities_b50,
22695 &hf_ieee80211_tag_extended_capabilities_b51,
22696 &hf_ieee80211_tag_extended_capabilities_b52,
22697 &hf_ieee80211_tag_extended_capabilities_b53,
22698 &hf_ieee80211_tag_extended_capabilities_b54,
22699 &hf_ieee80211_tag_extended_capabilities_b55,
22700 NULL((void*)0)
22701 };
22702
22703 static int * const ieee80211_tag_extended_capabilities_byte8[] = {
22704 &hf_ieee80211_tag_extended_capabilities_b56,
22705 &hf_ieee80211_tag_extended_capabilities_b57,
22706 &hf_ieee80211_tag_extended_capabilities_b58,
22707 &hf_ieee80211_tag_extended_capabilities_b59,
22708 &hf_ieee80211_tag_extended_capabilities_b60,
22709 &hf_ieee80211_tag_extended_capabilities_b61,
22710 &hf_ieee80211_tag_extended_capabilities_b62,
22711 &hf_ieee80211_tag_extended_capabilities_b63,
22712 NULL((void*)0)
22713 };
22714
22715 static int * const ieee80211_tag_extended_capabilities_bytes89[] = {
22716 &hf_ieee80211_tag_extended_capabilities_b56_2,
22717 &hf_ieee80211_tag_extended_capabilities_b57_2,
22718 &hf_ieee80211_tag_extended_capabilities_b58_2,
22719 &hf_ieee80211_tag_extended_capabilities_b59_2,
22720 &hf_ieee80211_tag_extended_capabilities_b60_2,
22721 &hf_ieee80211_tag_extended_capabilities_b61_2,
22722 &hf_ieee80211_tag_extended_capabilities_b62_2,
22723 &hf_ieee80211_tag_extended_capabilities_max_num_msdus,
22724 &hf_ieee80211_tag_extended_capabilities_b65_2,
22725 &hf_ieee80211_tag_extended_capabilities_b66_2,
22726 &hf_ieee80211_tag_extended_capabilities_b67_2,
22727 &hf_ieee80211_tag_extended_capabilities_b68_2,
22728 &hf_ieee80211_tag_extended_capabilities_b69_2,
22729 &hf_ieee80211_tag_extended_capabilities_b70_2,
22730 &hf_ieee80211_tag_extended_capabilities_b71_2,
22731 NULL((void*)0)
22732 };
22733
22734 static int * const ieee80211_tag_extended_capabilities_byte10[] = {
22735 &hf_ieee80211_tag_extended_capabilities_b72,
22736 &hf_ieee80211_tag_extended_capabilities_b73,
22737 &hf_ieee80211_tag_extended_capabilities_b74,
22738 &hf_ieee80211_tag_extended_capabilities_b75,
22739 &hf_ieee80211_tag_extended_capabilities_b76,
22740 &hf_ieee80211_tag_extended_capabilities_b77,
22741 &hf_ieee80211_tag_extended_capabilities_b78,
22742 &hf_ieee80211_tag_extended_capabilities_b79,
22743 NULL((void*)0)
22744 };
22745
22746 static int * const ieee80211_tag_extended_capabilities_byte11[] = {
22747 &hf_ieee80211_tag_extended_capabilities_b80,
22748 &hf_ieee80211_tag_extended_capabilities_b81,
22749 &hf_ieee80211_tag_extended_capabilities_b82,
22750 &hf_ieee80211_tag_extended_capabilities_b83,
22751 &hf_ieee80211_tag_extended_capabilities_b84,
22752 &hf_ieee80211_tag_extended_capabilities_b85,
22753 &hf_ieee80211_tag_extended_capabilities_b86,
22754 &hf_ieee80211_tag_extended_capabilities_b87,
22755 NULL((void*)0)
22756 };
22757
22758 static int * const ieee80211_tag_extended_capabilities_byte12[] = {
22759 &hf_ieee80211_tag_extended_capabilities_b88,
22760 &hf_ieee80211_tag_extended_capabilities_b89,
22761 &hf_ieee80211_tag_extended_capabilities_b90,
22762 &hf_ieee80211_tag_extended_capabilities_b91,
22763 &hf_ieee80211_tag_extended_capabilities_b92,
22764 &hf_ieee80211_tag_extended_capabilities_b93,
22765 &hf_ieee80211_tag_extended_capabilities_b94,
22766 &hf_ieee80211_tag_extended_capabilities_b95,
22767 NULL((void*)0)
22768 };
22769
22770 static int * const ieee80211_tag_extended_capabilities_byte13[] = {
22771 &hf_ieee80211_tag_extended_capabilities_b96,
22772 &hf_ieee80211_tag_extended_capabilities_b97,
22773 &hf_ieee80211_tag_extended_capabilities_b98,
22774 &hf_ieee80211_tag_extended_capabilities_b99,
22775 &hf_ieee80211_tag_extended_capabilities_b100,
22776 &hf_ieee80211_tag_extended_capabilities_b101,
22777 &hf_ieee80211_tag_extended_capabilities_b102,
22778 &hf_ieee80211_tag_extended_capabilities_b103,
22779 NULL((void*)0)
22780 };
22781
22782 static int * const ieee80211_tag_extended_capabilities_byte14[] = {
22783 &hf_ieee80211_tag_extended_capabilities_b104,
22784 &hf_ieee80211_tag_extended_capabilities_b105,
22785 &hf_ieee80211_tag_extended_capabilities_reserved2,
22786 NULL((void*)0)
22787 };
22788
22789 if (tag_len < 1)
22790 {
22791 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be greater than 0", tag_len);
22792 return 1;
22793 }
22794 proto_item_append_text(field_data->item_tag, " (%u octet%s)", tag_len, plurality(tag_len, "", "s")((tag_len) == 1 ? ("") : ("s")));
22795
22796 /* Extended Capability octet 1 */
22797 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22798 ett_tag_ex_cap1, ieee80211_tag_extended_capabilities_byte1,
22799 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22800 proto_item_append_text(ti_ex_cap, " (octet 1)");
22801 offset += 1;
22802
22803 /* Extended Capability octet 2 */
22804 if (offset >= tag_len) {
22805 return offset;
22806 }
22807 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22808 ett_tag_ex_cap2, ieee80211_tag_extended_capabilities_byte2,
22809 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22810 proto_item_append_text(ti_ex_cap, " (octet 2)");
22811 offset += 1;
22812
22813 /* Extended Capability octet 3 */
22814 if (offset >= tag_len) {
22815 return offset;
22816 }
22817 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22818 ett_tag_ex_cap3, ieee80211_tag_extended_capabilities_byte3,
22819 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22820 proto_item_append_text(ti_ex_cap, " (octet 3)");
22821 offset += 1;
22822
22823 /* Extended Capability octet 4 */
22824 if (offset >= tag_len) {
22825 return offset;
22826 }
22827 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22828 ett_tag_ex_cap4, ieee80211_tag_extended_capabilities_byte4,
22829 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22830 proto_item_append_text(ti_ex_cap, " (octet 4)");
22831 offset += 1;
22832
22833 /* Extended Capability octet 5 */
22834 if (offset >= tag_len) {
22835 return offset;
22836 }
22837 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22838 ett_tag_ex_cap5, ieee80211_tag_extended_capabilities_byte5,
22839 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22840 proto_item_append_text(ti_ex_cap, " (octet 5)");
22841 offset += 1;
22842
22843 /* Extended Capability octet 6 */
22844 if (offset >= tag_len) {
22845 return offset;
22846 }
22847
22848 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22849 ett_tag_ex_cap6, ieee80211_tag_extended_capabilities_byte6,
22850 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22851 proto_item_append_text(ti_ex_cap, " (octet 6)");
22852 offset += 1;
22853
22854
22855 /* Extended Capability octet 7 */
22856 if (offset >= tag_len) {
22857 return offset;
22858 }
22859 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22860 ett_tag_ex_cap7, ieee80211_tag_extended_capabilities_byte7,
22861 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22862 proto_item_append_text(ti_ex_cap, " (octet 7)");
22863 offset += 1;
22864
22865 /* Extended Capability octet 8 & 9 since two bits cross the boundary */
22866 if (offset >= tag_len) {
22867 return offset;
22868 }
22869
22870 /* If only the first of the two bytes is present, do the best we can */
22871 if (offset == tag_len - 1) {
22872 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22873 ett_tag_ex_cap8, ieee80211_tag_extended_capabilities_byte8,
22874 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22875 proto_item_append_text(ti_ex_cap, " (octet 8)");
22876 offset += 1;
22877 } else { /* Both bytes are there */
22878 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities_2,
22879 ett_tag_ex_cap89, ieee80211_tag_extended_capabilities_bytes89,
22880 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22881 proto_item_append_text(ti_ex_cap, " (octets 8 & 9)");
22882 offset += 2;
22883 }
22884
22885 if (offset >= tag_len) {
22886 return offset;
22887 }
22888
22889 /* Extended Capability octet 10 */
22890 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22891 ett_tag_ex_cap10, ieee80211_tag_extended_capabilities_byte10,
22892 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22893 proto_item_append_text(ti_ex_cap, " (octet 10)");
22894 offset += 1;
22895
22896 if (offset >= tag_len) {
22897 return offset;
22898 }
22899
22900 /* Extended Capability octet 11 */
22901#if 0
22902 /* Added for SAE support */
22903 sae_byte = tvb_get_uint8(tvb, offset);
22904 /*
22905 * If one of the SAE bits is set, assume we will see Password identifiers
22906 */
22907 if (sae_byte & 0x6) {
22908 bool_Bool sae_val = true1;
22909 uint64_t *key = NULL((void*)0);
22910
22911 /* Must be for the source of the request */
22912 key = (uint64_t *)wmem_new(wmem_file_scope(), uint64_t)((uint64_t*)wmem_alloc((wmem_file_scope()), sizeof(uint64_t))
)
;
22913 *key = *(uint64_t *)pinfo->src.data;
22914 wmem_map_insert(sae_prop_hash, key, GINT_TO_POINTER(sae_val)((gpointer) (glong) (sae_val)));
22915 }
22916#endif
22917 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22918 ett_tag_ex_cap11, ieee80211_tag_extended_capabilities_byte11,
22919 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22920 proto_item_append_text(ti_ex_cap, " (octet 11)");
22921 offset += 1;
22922
22923 if (offset >= tag_len) {
22924 return offset;
22925 }
22926
22927 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
22928 hf_ieee80211_tag_extended_capabilities,
22929 ett_tag_ex_cap12,
22930 ieee80211_tag_extended_capabilities_byte12,
22931 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22932 proto_item_append_text(ti_ex_cap, " (octet 12)");
22933 offset += 1;
22934
22935 if (offset >= tag_len) {
22936 return offset;
22937 }
22938
22939 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
22940 hf_ieee80211_tag_extended_capabilities,
22941 ett_tag_ex_cap13,
22942 ieee80211_tag_extended_capabilities_byte13,
22943 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22944 proto_item_append_text(ti_ex_cap, " (octet 13)");
22945 offset += 1;
22946
22947 if (offset >= tag_len) {
22948 return offset;
22949 }
22950
22951 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
22952 hf_ieee80211_tag_extended_capabilities,
22953 ett_tag_ex_cap14,
22954 ieee80211_tag_extended_capabilities_byte14,
22955 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22956 proto_item_append_text(ti_ex_cap, " (octet 14)");
22957 offset += 1;
22958
22959 return offset;
22960}
22961
22962static int
22963dissect_vht_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset)
22964{
22965 proto_item *ti;
22966 proto_tree *mcs_tree;
22967 static int * const ieee80211_vht_mcsset_rx_max_mcs[] = {
22968 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
22969 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
22970 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
22971 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
22972 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
22973 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
22974 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
22975 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
22976 NULL((void*)0)
22977 };
22978 static int * const ieee80211_vht_mcsset_tx_max_mcs[] = {
22979 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
22980 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
22981 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
22982 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
22983 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
22984 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
22985 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
22986 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
22987 NULL((void*)0)
22988 };
22989
22990 /* 8 byte Supported MCS set */
22991 ti = proto_tree_add_item(tree, hf_ieee80211_vht_mcsset, tvb, offset, 8, ENC_NA0x00000000);
22992
22993 mcs_tree = proto_item_add_subtree(ti, ett_vht_mcsset_tree);
22994
22995 /* B0 - B15 */
22996 proto_tree_add_bitmask_with_flags(mcs_tree, tvb, offset, hf_ieee80211_vht_mcsset_rx_mcs_map,
22997 ett_vht_rx_mcsbit_tree, ieee80211_vht_mcsset_rx_max_mcs,
22998 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22999 offset += 2;
23000
23001 /* B16 - B28 13 bits*/
23002 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23003
23004 /* B29 - B31 2 Max NSTS, total*/
23005
23006 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_max_nsts_total, tvb, offset,
23007 2, ENC_LITTLE_ENDIAN0x80000000);
23008 offset += 2;
23009
23010 /* B32 - B47 */
23011 proto_tree_add_bitmask_with_flags(mcs_tree, tvb, offset, hf_ieee80211_vht_mcsset_tx_mcs_map,
23012 ett_vht_tx_mcsbit_tree, ieee80211_vht_mcsset_tx_max_mcs,
23013 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23014 offset += 2;
23015 /* B48 - B60 13 bits */
23016 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23017 /* B61 */
23018 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_extended_nss_bw_capable,
23019 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23020
23021 /* B62 - B63 2 reserved bits*/
23022 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_reserved, tvb, offset, 2,
23023 ENC_LITTLE_ENDIAN0x80000000);offset += 2;
23024
23025 return offset;
23026}
23027
23028static int
23029dissect_vht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23030{
23031 int tag_len = tvb_reported_length(tvb);
23032 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23033 int offset = 0;
23034 static int * const ieee80211_vht_caps[] = {
23035 &hf_ieee80211_vht_max_mpdu_length,
23036 &hf_ieee80211_vht_supported_chan_width_set,
23037 &hf_ieee80211_vht_rx_ldpc,
23038 &hf_ieee80211_vht_short_gi_for_80,
23039 &hf_ieee80211_vht_short_gi_for_160,
23040 &hf_ieee80211_vht_tx_stbc,
23041 /* End of first byte */
23042 &hf_ieee80211_vht_rx_stbc,
23043 &hf_ieee80211_vht_su_beamformer_cap,
23044 &hf_ieee80211_vht_su_beamformee_cap,
23045 &hf_ieee80211_vht_beamformer_antennas,
23046 /* End of second byte */
23047 &hf_ieee80211_vht_sounding_dimensions,
23048 &hf_ieee80211_vht_mu_beamformer_cap,
23049 &hf_ieee80211_vht_mu_beamformee_cap,
23050 &hf_ieee80211_vht_txop_ps,
23051 &hf_ieee80211_vht_var_htc_field,
23052 &hf_ieee80211_vht_max_ampdu,
23053 &hf_ieee80211_vht_link_adaptation_cap,
23054 &hf_ieee80211_vht_rx_pattern,
23055 &hf_ieee80211_vht_tx_pattern,
23056 &hf_ieee80211_vht_ext_nss_bw_support,
23057 NULL((void*)0)
23058 };
23059
23060 if (tag_len != 12) {
23061 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23062 "VHT Capabilities IE length %u wrong, must be = 12", tag_len);
23063 return 1;
23064 }
23065
23066 /* 4 byte VHT Capabilities Info*/
23067 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_cap,
23068 ett_vht_cap_tree, ieee80211_vht_caps,
23069 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23070 offset += 4;
23071
23072 /* 8 byte MCS set */
23073 offset = dissect_vht_mcs_set(tree, tvb, offset);
23074
23075 return offset;
23076}
23077
23078static int
23079dissect_vht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23080{
23081 int tag_len = tvb_reported_length(tvb);
23082 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23083 int offset = 0;
23084 proto_item *op_item;
23085 proto_tree *op_tree;
23086 static int * const ieee80211_vht_op_max_basic_mcs[] = {
23087 &hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
23088 &hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
23089 &hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
23090 &hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
23091 &hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
23092 &hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
23093 &hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
23094 &hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
23095 NULL((void*)0)
23096 };
23097
23098 if (tag_len != 5) {
23099 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23100 "VHT Operation IE length %u wrong, must be = 5", tag_len);
23101 return 1;
23102 }
23103
23104 /* 3 byte VHT Operation Info*/
23105 op_item = proto_tree_add_item(tree, hf_ieee80211_vht_op, tvb, offset, 3, ENC_NA0x00000000);
23106 op_tree = proto_item_add_subtree(op_item, ett_vht_op_tree);
23107 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23108 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center0, tvb, offset+1, 1, ENC_LITTLE_ENDIAN0x80000000);
23109 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center1, tvb, offset+2, 1, ENC_LITTLE_ENDIAN0x80000000);
23110
23111 offset += 3;
23112 /* VHT Basic MCS Set */
23113 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_op_basic_mcs_map,
23114 ett_vht_basic_mcsbit_tree, ieee80211_vht_op_max_basic_mcs,
23115 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23116 offset += 2;
23117
23118 return offset;
23119}
23120
23121static int
23122dissect_vht_tx_pwr_envelope(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23123{
23124 int tag_len = tvb_reported_length(tvb);
23125 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23126 int offset = 0;
23127 proto_item *tx_pwr_item, *ti, *unit_ti;
23128 proto_tree *tx_pwr_info_tree;
23129 uint8_t opt_ie_cnt=0;
23130 uint8_t i;
23131 unsigned mtpi;
23132
23133 if (tag_len < 2 || tag_len > 18) {
23134 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23135 "VHT TX PWR Envelope IE length %u wrong, must be >= 2 and <= 18", tag_len);
23136 return 1;
23137 }
23138
23139 mtpi = (tvb_get_uint8(tvb, offset) >> 3) & 0x7;
23140 tx_pwr_item = proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_info, tvb, offset, 1, ENC_NA0x00000000);
23141 tx_pwr_info_tree = proto_item_add_subtree(tx_pwr_item, ett_vht_tpe_info_tree);
23142
23143 ti = proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23144 unit_ti = proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_unit, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23145 proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_category, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23146
23147 opt_ie_cnt = tvb_get_uint8(tvb, offset) & 0x07;
23148
23149 offset += 1;
23150
23151 switch (mtpi) {
23152
23153 case 1:
23154 case 3:
23155 case 5:
23156 /* Is it a power spectral density? */
23157 /* Handle the zero case */
23158 if (opt_ie_cnt == 0) {
23159 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_any_bw_psd, tvb, offset,
23160 1, ENC_NA0x00000000);
23161 offset += 1;
23162 return offset;
23163 }
23164 switch (opt_ie_cnt) {
23165 case 0:
23166 opt_ie_cnt = 0;
23167 break;
23168 case 1:
23169 opt_ie_cnt = 1;
23170 break;
23171 case 2:
23172 opt_ie_cnt = 2;
23173 break;
23174 case 3:
23175 opt_ie_cnt = 4;
23176 break;
23177 case 4:
23178 opt_ie_cnt = 8;
23179 break;
23180 default:
23181 opt_ie_cnt = 1; /* Add an expert info here ... */
23182 break;
23183 }
23184 for (i = 0; i < opt_ie_cnt; i++) {
23185 proto_tree *psd_tree;
23186 psd_tree = proto_tree_add_subtree_format(tree, tvb, offset, 1,
23187 ett_tpe_psd, NULL((void*)0),
23188 "20 MHz Channel #%u", i);
23189 proto_tree_add_item(psd_tree, hf_ieee80211_vht_tpe_psd,
23190 tvb, offset, 1, ENC_NA0x00000000);
23191 offset += 1;
23192 }
23193 /* Extension Max Tx Power */
23194 if (offset < tag_len) {
23195 proto_tree *psd_tree;
23196 uint8_t j;
23197 uint8_t ext_cnt = tvb_get_uint8(tvb, offset) & 0x0f;
23198
23199 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_ext_count, tvb, offset, 1, ENC_NA0x00000000);
23200 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_ext_reserved, tvb, offset, 1, ENC_NA0x00000000);
23201 offset += 1;
23202 for (j = 0; j < ext_cnt; j++) {
23203 psd_tree = proto_tree_add_subtree_format(tree, tvb, offset, 1,
23204 ett_tpe_psd, NULL((void*)0),
23205 "20 MHz Channel #%u", i+j);
23206 proto_tree_add_item(psd_tree, hf_ieee80211_vht_tpe_psd,
23207 tvb, offset, 1, ENC_NA0x00000000);
23208 offset += 1;
23209 }
23210 }
23211 break;
23212
23213 case 0:
23214 case 2:
23215 case 4:
23216 /* Power Constraint info is mandatory only for 20MHz, others are optional*/
23217 /* Power is expressed in terms of 0.5dBm from -64 to 63 and is encoded
23218 * as 8-bit 2's complement */
23219 for (i = 0; i <= opt_ie_cnt; i++) {
23220 switch(i) {
23221 case 0:
23222 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_20, tvb, offset, 1, ENC_NA0x00000000);
23223 offset += 1;
23224 break;
23225 case 1:
23226 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_40, tvb, offset, 1, ENC_NA0x00000000);
23227 offset += 1;
23228 break;
23229 case 2:
23230 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_80, tvb, offset, 1, ENC_NA0x00000000);
23231 offset += 1;
23232 break;
23233 case 3:
23234 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_160, tvb, offset, 1, ENC_NA0x00000000);
23235 offset += 1;
23236 break;
23237 default:
23238 expert_add_info(pinfo, ti, &ei_ieee80211_vht_tpe_pwr_info_count);
23239 offset += 1;
23240 break;
23241 }
23242 }
23243 /* Extension Max Tx Power */
23244 if (offset < tag_len) {
23245 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_320, tvb, offset, 1, ENC_NA0x00000000);
23246 offset += 1;
23247 }
23248 break;
23249 default:
23250 /* Reserved in 802.11ax-2021. 802.11be? */
23251 expert_add_info(pinfo, unit_ti, &ei_ieee80211_vht_tpe_pwr_info_unit);
23252 }
23253
23254 return offset;
23255}
23256
23257static int
23258dissect_mobility_domain(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23259{
23260 int tag_len = tvb_reported_length(tvb);
23261 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23262 int offset = 0;
23263
23264 if (field_data->sanity_check != NULL((void*)0)) {
23265 field_data->sanity_check->association_has_mobility_domain_element = true1;
23266 }
23267
23268 if (tag_len < 3) {
23269 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23270 "MDIE content length must be at least 3 bytes");
23271 return 1;
23272 }
23273
23274 save_proto_data(tvb, pinfo, offset, 2, MDID_KEY);
23275 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_mdid,
23276 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23277 proto_tree_add_bitmask_with_flags(tree, tvb, offset + 2,
23278 hf_ieee80211_tag_mobility_domain_ft_capab,
23279 ett_tag_mobility_domain_ft_capab_tree,
23280 ieee80211_tag_mobility_domain_ft_capab_fields,
23281 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23282 return tvb_captured_length(tvb);
23283}
23284
23285static uint16_t get_mic_len_owe(uint16_t group) {
23286 switch(group) {
23287 // FFC, len(p) <= 2048
23288 case 1:
23289 case 2:
23290 case 5:
23291 case 14:
23292 case 22:
23293 case 23:
23294 case 24:
23295 // ECC, len(p) <= 256
23296 case 19:
23297 case 25:
23298 case 26:
23299 case 27:
23300 case 28:
23301 case 31:
23302 // HMAC-SHA-256
23303 return 16;
23304
23305 // FFC, 2048 < len(p) <= 3072
23306 case 15:
23307 // ECC, 256 < len(p) <= 384
23308 case 20:
23309 case 29:
23310 // HMAC-SHA-384
23311 return 24;
23312
23313 // FCC, 3072 < len(p)
23314 case 16:
23315 case 17:
23316 case 18:
23317 // ECC, 384 < len(p)
23318 case 21:
23319 case 30:
23320 case 32:
23321 // HMAC-SHA-512
23322 return 32;
23323
23324 default:
23325 return 16;
23326 }
23327}
23328
23329static uint16_t get_mic_len(uint32_t akm_suite) {
23330 switch(akm_suite) {
23331 case AKMS_WPA_SHA384_SUITEB0x000FAC0C:
23332 case AKMS_FT_IEEE802_1X_SHA3840x000FAC0D:
23333 case AKMS_FT_FILS_SHA3840x000FAC11:
23334 // HMAC-SHA-384
23335 return 24;
23336
23337 case AKMS_FILS_SHA2560x000FAC0E:
23338 case AKMS_FILS_SHA3840x000FAC0F:
23339 // AES-SIV-256 and AES-SIV-512
23340 return 0;
23341
23342 default:
23343 // HMAC-SHA-1-128, AES-128-CMAC, HMAC-SHA-256, AKMS_FT_FILS_SHA256
23344 return 16;
23345 }
23346}
23347
23348static conversation_t *find_wlan_conversation_pinfo(packet_info *pinfo)
23349{
23350 /* HACK to avoid collision with conversation in EAP dissector */
23351 pinfo->srcport = GPOINTER_TO_UINT(((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, ASSOC_COUNTER_KEY)))
23352 p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, ASSOC_COUNTER_KEY)))
;
23353 pinfo->destport = pinfo->srcport;
23354 return find_conversation_pinfo(pinfo, 0);
23355}
23356
23357static bool_Bool determine_nonce_is_set(tvbuff_t *tvb) {
23358 int offset;
23359
23360 for (offset = 12; offset < 12 + 32; offset++)
23361 if (tvb_get_uint8(tvb, offset))
23362 return true1;
23363 return false0;
23364}
23365
23366static uint16_t determine_mic_len(packet_info *pinfo, bool_Bool assoc_frame,
23367 bool_Bool *defaulted) {
23368 uint16_t eapol_key_mic_len = 16; /* Default MIC length */
23369 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
23370 ieee80211_conversation_data_t *conversation_data = NULL((void*)0);
23371 ieee80211_packet_data_t *packet_data =
23372 (ieee80211_packet_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, PACKET_DATA_KEY);
23373 if (conversation) {
23374 conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
23375 }
23376
23377 if (wlan_key_mic_len_enable) {
23378 /* 1st - Use user overridden MIC length setting */
23379 eapol_key_mic_len = wlan_key_mic_len;
23380 }
23381 else if (!assoc_frame && conversation_data &&
23382 conversation_data->discovered_key_mic_len) {
23383 /*
23384 * 2nd - Use the discovered key mic len.
23385 * We will only set the discovered key mic len if it was defaulted
23386 * in an earlier call to determine_mic_len, so it should be tested second.
23387 */
23388 eapol_key_mic_len = conversation_data->discovered_key_mic_len;
23389 }
23390 else if (!assoc_frame && conversation_data &&
23391 conversation_data->last_akm_suite_set) {
23392 /* 3rd - Use AKMS negotiated during association to determine MIC length */
23393 if (conversation_data->last_akm_suite == AKMS_OWE0x000FAC12) {
23394 /* For OWE the length of MIC depends on the selected group */
23395 eapol_key_mic_len = get_mic_len_owe(conversation_data->owe_group);
23396 } else if (conversation_data->last_akm_suite == AKMS_SAE_GROUP_DEPEND0x000FAC18 ||
23397 conversation_data->last_akm_suite == AKMS_FT_SAE_GROUP_DEPEND0x000FAC19) {
23398 *defaulted = true1;
23399 }
23400 else {
23401 eapol_key_mic_len = get_mic_len(conversation_data->last_akm_suite);
23402 }
23403 }
23404 else if (packet_data && packet_data->last_akm_suite_set) {
23405 /* 3rd - Use AKMS from current packet to determine MIC length */
23406 if (packet_data->last_akm_suite == AKMS_OWE0x000FAC12) {
23407 /* For OWE the length of MIC depends on the selected group */
23408 eapol_key_mic_len = get_mic_len_owe(packet_data->owe_group);
23409 } else if (packet_data->last_akm_suite == AKMS_SAE_GROUP_DEPEND0x000FAC18 ||
23410 packet_data->last_akm_suite == AKMS_FT_SAE_GROUP_DEPEND0x000FAC19) {
23411 *defaulted = true1;
23412 }
23413 else {
23414 eapol_key_mic_len = get_mic_len(packet_data->last_akm_suite);
23415 }
23416 } else {
23417 /*
23418 * We used the default so say so.
23419 */
23420 *defaulted = true1;
23421 }
23422 return eapol_key_mic_len;
23423}
23424
23425static int
23426dissect_fast_bss_transition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23427{
23428 int tag_len = tvb_reported_length(tvb);
23429 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23430 bool_Bool assoc_frame = field_data->sanity_check != NULL((void*)0);
23431 int offset = 0;
23432 if (tag_len < 82) {
23433 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23434 "FTIE content length must be at least 82 bytes");
23435 return 1;
23436 }
23437
23438 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_ft_mic_control,
23439 ett_tag_ft_mic_control_tree,
23440 ieee80211_tag_ft_mic_control_fields,
23441 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23442 offset += 2;
23443
23444 bool_Bool defaulted_mic_len = false0;
23445 int mic_len = determine_mic_len(pinfo, assoc_frame, &defaulted_mic_len);
23446 save_proto_data(tvb, pinfo, offset, mic_len, FTE_MIC_KEY);
23447 save_proto_data_value(pinfo, mic_len, FTE_MIC_LEN_KEY);
23448 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic,
23449 tvb, offset, mic_len, ENC_NA0x00000000);
23450 offset += mic_len;
23451
23452 save_proto_data(tvb, pinfo, offset, 32, FTE_ANONCE_KEY);
23453 proto_tree_add_item(tree, hf_ieee80211_tag_ft_anonce,
23454 tvb, offset, 32, ENC_NA0x00000000);
23455 offset += 32;
23456
23457 save_proto_data(tvb, pinfo, offset, 32, FTE_SNONCE_KEY);
23458 proto_tree_add_item(tree, hf_ieee80211_tag_ft_snonce,
23459 tvb, offset, 32, ENC_NA0x00000000);
23460 offset += 32;
23461
23462 while (offset + 2 <= tag_len) {
23463 uint8_t id, len;
23464 int s_end;
23465 proto_item *ti;
23466 proto_tree *subtree;
23467 const char *subtree_name;
23468 proto_keydata_t *proto;
23469
23470 id = tvb_get_uint8(tvb, offset);
23471 len = tvb_get_uint8(tvb, offset + 1);
23472 subtree_name = val_to_str_const(id, ft_subelem_id_vals, "Unknown");
23473 subtree = proto_tree_add_subtree_format(tree, tvb, offset, len + 2,
23474 ett_tag_ft_subelem_tree, NULL((void*)0),
23475 "Subelement: %s", subtree_name);
23476
23477 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_id,
23478 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23479 offset += 1;
23480
23481 ti = proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_len,
23482 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23483 offset += 1;
23484
23485 if (offset + len > tag_len) {
23486 expert_add_info_format(pinfo, ti, &ei_ieee80211_tag_length,
23487 "FTIE subelement length is too large for the FTIE content length");
23488 return offset;
23489 }
23490
23491 s_end = offset + len;
23492 switch (id) {
23493 case 1:
23494 save_proto_data(tvb, pinfo, offset, len, FTE_R1KH_ID_KEY);
23495 save_proto_data_value(pinfo, len, FTE_R1KH_ID_LEN_KEY);
23496 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_r1kh_id,
23497 tvb, offset, len, ENC_NA0x00000000);
23498 break;
23499 case 2:
23500 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_info,
23501 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23502 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_id,
23503 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23504 offset += 2;
23505 if (offset > s_end)
23506 break;
23507 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset), GTK_SUBELEM_KEY_LEN_KEY);
23508 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_length,
23509 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23510 offset += 1;
23511 if (offset > s_end)
23512 break;
23513 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_rsc,
23514 tvb, offset, 8, ENC_NA0x00000000);
23515 offset += 8;
23516 if (offset > s_end)
23517 break;
23518 save_proto_data_value(pinfo, s_end - offset, GTK_LEN_KEY);
23519 save_proto_data(tvb, pinfo, offset, s_end - offset, GTK_KEY);
23520
23521 proto = (proto_keydata_t *)
23522 p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_GTK_KEY);
23523 if (proto) {
23524 unsigned keydata_len = proto->keydata_len;
23525 tvbuff_t *next_tvb = tvb_new_child_real_data(tvb, proto->keydata,
23526 keydata_len, keydata_len);
23527 add_new_data_source(pinfo, next_tvb, "Decrypted GTK");
23528 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key,
23529 next_tvb, 0, keydata_len, ENC_NA0x00000000);
23530 add_ptk_analysis(tvb, subtree, &proto->used_key);
23531 } else {
23532 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_encrypted,
23533 tvb, offset, s_end - offset, ENC_NA0x00000000);
23534 }
23535 break;
23536 case 3:
23537 save_proto_data(tvb, pinfo, offset, len, FTE_R0KH_ID_KEY);
23538 save_proto_data_value(pinfo, len, FTE_R0KH_ID_LEN_KEY);
23539 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_r0kh_id,
23540 tvb, offset, len, ENC_NA0x00000000);
23541 break;
23542 case 4:
23543 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_key_id,
23544 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23545 offset += 2;
23546 if (offset > s_end)
23547 break;
23548 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_ipn,
23549 tvb, offset, 6, ENC_NA0x00000000);
23550 offset += 6;
23551 if (offset > s_end)
23552 break;
23553 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_key_length,
23554 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23555 offset += 1;
23556 if (offset > s_end)
23557 break;
23558 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_key,
23559 tvb, offset, 24, ENC_NA0x00000000);
23560 break;
23561 case 5:
23562 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_op_class,
23563 tvb, offset, 1, ENC_NA0x00000000);
23564 offset += 1;
23565 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_prim_chan_num,
23566 tvb, offset, 1, ENC_NA0x00000000);
23567 offset += 1;
23568 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_freq_seg_1,
23569 tvb, offset, 1, ENC_NA0x00000000);
23570 offset += 1;
23571 if (offset >= s_end)
23572 break;
23573 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_oct_op_class,
23574 tvb, offset, 1, ENC_NA0x00000000);
23575 offset += 1;
23576 if (offset >= s_end)
23577 break;
23578 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_oct_prim_chan_num,
23579 tvb, offset, 1, ENC_NA0x00000000);
23580 offset += 1;
23581 if (offset >= s_end)
23582 break;
23583 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_oct_freq_seg_1,
23584 tvb, offset, 1, ENC_NA0x00000000);
23585 break;
23586 case 6:
23587 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_key_id,
23588 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23589 offset += 2;
23590 if (offset > s_end)
23591 break;
23592 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_bipn,
23593 tvb, offset, 6, ENC_NA0x00000000);
23594 offset += 6;
23595 if (offset > s_end)
23596 break;
23597 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_key_length,
23598 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23599 offset += 1;
23600 if (offset > s_end)
23601 break;
23602 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_key,
23603 tvb, offset, s_end - offset, ENC_NA0x00000000);
23604 break;
23605 case 8: /* MLO GTK */
23606 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key_info,
23607 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23608 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key_id,
23609 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23610 offset += 2;
23611 if (offset > s_end)
23612 break;
23613 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id_info,
23614 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23615 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id,
23616 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23617 offset += 1;
23618 if (offset > s_end)
23619 break;
23620 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key_length,
23621 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23622 offset += 1;
23623 if (offset > s_end)
23624 break;
23625 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_rsc,
23626 tvb, offset, 8, ENC_NA0x00000000);
23627 offset += 8;
23628 if (offset > s_end)
23629 break;
23630 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key,
23631 tvb, offset, s_end - offset, ENC_NA0x00000000);
23632 break;
23633 case 9: /* MLO IGTK */
23634 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_key_id,
23635 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23636 offset += 2;
23637 if (offset > s_end)
23638 break;
23639 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_ipn,
23640 tvb, offset, 6, ENC_NA0x00000000);
23641 offset += 6;
23642 if (offset > s_end)
23643 break;
23644 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id_info,
23645 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23646 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id,
23647 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23648 offset += 1;
23649 if (offset > s_end)
23650 break;
23651 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_key_length,
23652 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23653 offset += 1;
23654 if (offset > s_end)
23655 break;
23656 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_key,
23657 tvb, offset, s_end - offset, ENC_NA0x00000000);
23658 break;
23659 case 10: /* MLO BIGTK */
23660 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_id,
23661 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23662 offset += 2;
23663 if (offset > s_end)
23664 break;
23665 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_bipn,
23666 tvb, offset, 6, ENC_NA0x00000000);
23667 offset += 6;
23668 if (offset > s_end)
23669 break;
23670 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id_info,
23671 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23672 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id,
23673 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23674 offset += 1;
23675 if (offset > s_end)
23676 break;
23677 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_length,
23678 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23679 offset += 1;
23680 if (offset > s_end)
23681 break;
23682 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_key,
23683 tvb, offset, s_end - offset, ENC_NA0x00000000);
23684 break;
23685 default:
23686 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_data,
23687 tvb, offset, len, ENC_NA0x00000000);
23688 break;
23689 }
23690 offset = s_end;
23691 }
23692
23693 return tvb_captured_length(tvb);
23694}
23695
23696static int
23697dissect_mmie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23698{
23699 int tag_len = tvb_reported_length(tvb);
23700 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23701 int offset = 0;
23702 int mic_len = 8;
23703
23704 if (!(tag_len == 16 || tag_len == 24)) {
23705 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23706 "MMIE content length must be 16 or 24 bytes");
23707 return 1;
23708 }
23709
23710 if (tag_len == 24) {
23711 mic_len = 16;
23712 }
23713 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_keyid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23714 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_ipn, tvb, offset + 2, 6,
23715 ENC_LITTLE_ENDIAN0x80000000);
23716 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_mic, tvb, offset + 8, mic_len,
23717 ENC_NA0x00000000);
23718 return tvb_captured_length(tvb);
23719}
23720
23721static int
23722ieee80211_tag_dmg_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data);
23723
23724static int
23725dissect_no_bssid_capability(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data)
23726{
23727 int tag_len = tvb_reported_length(tvb);
23728 int offset = 0;
23729
23730 static int * const ieee80211_tag_no_bssid_capability_dmg_bss_control[] = {
23731 &hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_type,
23732 &hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_reserved,
23733 NULL((void*)0)
23734 };
23735
23736 add_ff_cap_info(tree, tvb, pinfo, offset);
23737 offset += 2;
23738 tag_len -= 2;
23739
23740 /* On nontransmitted BSSID, there is only DMG Capability Info */
23741 if (tag_len) {
23742 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_no_bssid_capability_dmg_bss_control,
23743 ett_tag_no_bssid_capability_dmg_bss_control_tree,
23744 ieee80211_tag_no_bssid_capability_dmg_bss_control,
23745 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23746 /* offset += 1; */
23747
23748 ieee80211_tag_dmg_capabilities(tvb, pinfo, tree, data);
23749 }
23750
23751 return tvb_captured_length(tvb);
23752}
23753
23754static int
23755dissect_ssid_list(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
23756{
23757 int tag_len = tvb_reported_length(tvb);
23758 int offset = 0;
23759 proto_tree *entry;
23760 bool_Bool first = true1;
23761
23762 while (offset + 1 <= tag_len) {
23763 uint8_t len = tvb_get_uint8(tvb, offset + 1);
23764 char *str;
23765
23766 if (offset + 2 + len > tag_len)
23767 break;
23768
23769 str = tvb_format_text(pinfo->pool, tvb, offset + 2, len);
23770 proto_item_append_text(tree, "%c %s", (first ? ':' : ','), str);
23771 first = false0;
23772 entry = proto_tree_add_subtree_format(tree, tvb, offset, 2 + len, ett_ssid_list, NULL((void*)0), "SSID: %s", str);
23773 proto_tree_add_item(entry, hf_ieee80211_tag_number, tvb, offset, 1,
23774 ENC_LITTLE_ENDIAN0x80000000);
23775 offset++;
23776 proto_tree_add_uint(entry, hf_ieee80211_tag_length, tvb, offset, 1, len);
23777 offset++;
23778 /* XXX: IEEE 802.11-2020 seems to say that these SSIDs are also affected
23779 * by the UTF-8 Encoding bit in the Extended Capabilities element
23780 * (though at least SSID List comes after Extended Capabilities).
23781 */
23782 proto_tree_add_item(entry, hf_ieee80211_tag_ssid, tvb, offset, len,
23783 ENC_NA0x00000000);
23784 offset += len;
23785 }
23786
23787 return tvb_captured_length(tvb);
23788}
23789
23790static int
23791dissect_multiple_bssid_index(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
23792{
23793 int tag_len = tvb_reported_length(tvb);
23794 int offset = 0;
23795
23796 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid_index_bssid_index, tvb, offset, 1, ENC_NA0x00000000);
23797 offset += 1;
23798 tag_len -= 1;
23799
23800 if (tag_len) {
23801 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid_index_dtim_period, tvb, offset, 1, ENC_NA0x00000000);
23802 offset += 1;
23803
23804 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid_index_dtim_count, tvb, offset, 1, ENC_NA0x00000000);
23805 offset += 1;
23806 }
23807
23808 return offset;
23809}
23810
23811static int
23812dissect_link_identifier(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23813{
23814 int tag_len = tvb_reported_length(tvb);
23815 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23816 int offset = 0;
23817
23818 if (tag_len < 18) {
23819 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23820 "Link Identifier content length must be at least "
23821 "18 bytes");
23822 return tvb_captured_length(tvb);
23823 }
23824
23825 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_bssid, tvb,
23826 offset, 6, ENC_NA0x00000000);
23827 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_init_sta, tvb,
23828 offset + 6, 6, ENC_NA0x00000000);
23829 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_resp_sta, tvb,
23830 offset + 12, 6, ENC_NA0x00000000);
23831 return tvb_captured_length(tvb);
23832}
23833
23834static int
23835dissect_wakeup_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23836{
23837 int tag_len = tvb_reported_length(tvb);
23838 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23839 int offset = 0;
23840
23841 if (tag_len < 18) {
23842 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23843 "Wakeup Schedule content length must be at least "
23844 "18 bytes");
23845 return tvb_captured_length(tvb);
23846 }
23847
23848 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_offset, tvb,
23849 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
23850 offset += 4;
23851
23852 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_interval, tvb,
23853 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
23854 offset += 4;
23855
23856 proto_tree_add_item(tree,
23857 hf_ieee80211_tag_wakeup_schedule_awake_window_slots, tvb,
23858 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
23859 offset += 4;
23860
23861 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
23862 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
23863 offset += 4;
23864
23865 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_idle_count, tvb,
23866 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23867 return tvb_captured_length(tvb);
23868}
23869
23870static int
23871dissect_channel_switch_timing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23872{
23873 int tag_len = tvb_reported_length(tvb);
23874 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23875 int offset = 0;
23876
23877 if (tag_len < 4) {
23878 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23879 "Channel Switch Timing content length must be at "
23880 "least 4 bytes");
23881 return tvb_captured_length(tvb);
23882 }
23883
23884 proto_tree_add_item(tree, hf_ieee80211_tag_channel_switch_timing_switch_time,
23885 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23886 offset += 2;
23887
23888 proto_tree_add_item(tree,
23889 hf_ieee80211_tag_channel_switch_timing_switch_timeout,
23890 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23891 return tvb_captured_length(tvb);
23892}
23893
23894static int
23895dissect_pti_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23896{
23897 int tag_len = tvb_reported_length(tvb);
23898 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23899 int offset = 0;
23900
23901 if (tag_len < 3) {
23902 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "PTI Control content length must be at least 3 bytes");
23903 return tvb_captured_length(tvb);
23904 }
23905
23906 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_tid, tvb,
23907 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23908 offset += 1;
23909
23910 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_sequence_control, tvb,
23911 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23912 return tvb_captured_length(tvb);
23913}
23914
23915static int
23916dissect_pu_buffer_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23917{
23918 int tag_len = tvb_reported_length(tvb);
23919 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23920 int offset = 0;
23921 static int * const ieee80211_pu_buffer_status[] = {
23922 &hf_ieee80211_tag_pu_buffer_status_ac_bk,
23923 &hf_ieee80211_tag_pu_buffer_status_ac_be,
23924 &hf_ieee80211_tag_pu_buffer_status_ac_vi,
23925 &hf_ieee80211_tag_pu_buffer_status_ac_vo,
23926 NULL((void*)0)
23927 };
23928
23929 if (tag_len < 1) {
23930 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "PU Buffer Status content length must be at least 1 byte");
23931 return tvb_captured_length(tvb);
23932 }
23933
23934 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_pu_buffer_status, ENC_LITTLE_ENDIAN0x80000000);
23935 return tvb_captured_length(tvb);
23936}
23937
23938static int
23939dissect_timeout_interval(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
23940{
23941 int tag_len = tvb_reported_length(tvb);
23942 int offset = 0;
23943 proto_item *pi;
23944
23945 pi = proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_type, tvb,
23946 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23947 if (tag_len < 5) {
23948 expert_add_info_format(pinfo, pi, &ei_ieee80211_tag_length,
23949 "Timeout Interval content length must be at least "
23950 "5 bytes");
23951 return 1;
23952 }
23953
23954 proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_value, tvb,
23955 offset + 1, 4, ENC_LITTLE_ENDIAN0x80000000);
23956 return tvb_captured_length(tvb);
23957}
23958
23959static int
23960dissect_ric_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23961{
23962 int tag_len = tvb_reported_length(tvb);
23963 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23964 int offset = 0;
23965 proto_tree *sub_tree;
23966 uint8_t desc_cnt = 0;
23967 uint32_t next_ie;
23968 int offset_r = 0;
23969 const uint8_t ids[] = { TAG_RIC_DESCRIPTOR75 };
23970
23971 if (tag_len != 4) {
23972 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23973 "RIC Data Length must be 4 bytes");
23974 return 0;
23975 }
23976
23977 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_id, tvb,
23978 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23979 offset += 1;
23980
23981 desc_cnt = tvb_get_uint8(tvb, offset);
23982 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_desc_cnt, tvb,
23983 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23984 offset += 1;
23985
23986 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_status_code, tvb,
23987 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23988 offset += 2;
23989
23990 /* Our Design is such that all the Resource request IE's part of the RIC
23991 * must be in the sub tree of RIC for better readability
23992 * Even omnipeek does the same way.
23993 */
23994 sub_tree = proto_item_add_subtree(tree, ett_tag_ric_data_desc_ie);
23995
23996 proto_item_append_text(field_data->item_tag, " :Resource Descriptor List");
23997 if (desc_cnt == 0) {
23998 proto_item_append_text(field_data->item_tag, " :0 (Weird?)");
23999 }
24000
24001 while ( desc_cnt != 0 ) {
24002
24003 next_ie = tvb_get_uint8(tvb, offset);
24004 proto_item_append_text(field_data->item_tag, " :(%d:%s)", desc_cnt, val_to_str_ext(pinfo->pool, next_ie, &tag_num_vals_ext, "Reserved (%d)"));
24005 /* Recursive call to avoid duplication of code*/
24006 offset_r = add_tagged_field(pinfo, sub_tree, tvb, offset, field_data->ftype, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
24007 if (offset_r == 0 )/* should never happen, returns a min of 2*/
24008 break;
24009 /* This will ensure that the IE after RIC is processed
24010 * only once. This gives us a good looking RIC IE :-)
24011 */
24012 tag_len += offset_r;
24013 desc_cnt--;
24014 }
24015
24016 return tvb_captured_length(tvb);
24017}
24018
24019/* Overlapping BSS Scan Parameters (74) */
24020static int
24021dissect_overlap_bss_scan_par(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24022{
24023 int offset = 0;
24024 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24025 int tag_len = tvb_reported_length(tvb);
24026
24027 if (tag_len != 14) {
24028 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24029 "OBSS Length must be 14 bytes");
24030 return 1;
24031 }
24032
24033 proto_tree_add_item(tree, hf_ieee80211_tag_obss_spd, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24034 offset += 2;
24035
24036 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sad, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24037 offset += 2;
24038
24039 proto_tree_add_item(tree, hf_ieee80211_tag_obss_cwtsi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24040 offset += 2;
24041
24042 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sptpc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24043 offset += 2;
24044
24045 proto_tree_add_item(tree, hf_ieee80211_tag_obss_satpc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24046 offset += 2;
24047
24048 proto_tree_add_item(tree, hf_ieee80211_tag_obss_wctdf, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24049 offset += 2;
24050
24051 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sat, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24052 offset += 2;
24053
24054 return offset;
24055}
24056
24057/* RIC Descriptor (75) */
24058static int
24059dissect_ric_descriptor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24060{
24061 int offset = 0;
24062 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24063 int tag_len = tvb_reported_length(tvb);
24064 uint8_t rsrc_type = 0;
24065
24066 if (tag_len < 1) {
24067 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24068 "RIC Data Length must be at least 1 byte");
24069 return 1;
24070 }
24071
24072 rsrc_type = tvb_get_uint8(tvb, offset);
24073 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_rsrc_type, tvb,
24074 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24075 offset += 1;
24076
24077 if (rsrc_type == 1) {
24078 /* Block ACK params
24079 * 802.11-2012: 8.4.2.53 RIC Descriptor element
24080 * Block Ack parameter set as defined in 8.4.1.14,
24081 * Block Ack timeout value as defined in 8.4.1.15, and
24082 * Block Ack starting sequence control as defined in 8.3.1.8
24083 */
24084 /* TODO: Still figuring out how to parse these ones,
24085 * need a sample capture with at least HEX Dump
24086 */
24087 proto_item_append_text(field_data->item_tag, " : Block ACK Params");
24088 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_var_params, tvb,
24089 offset, tag_len-1, ENC_NA0x00000000);
24090 offset += tag_len -1;
24091 }else {
24092 /* 0, 2-255 are reserved*/
24093 proto_item_append_text(field_data->item_tag, " :Reserved (type != 1)");
24094 }
24095
24096 return offset;
24097}
24098
24099static int
24100dissect_ext_bss_load(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24101{
24102 int offset = 0;
24103 proto_tree_add_item(tree, hf_ieee80211_ext_bss_mu_mimo_capable_sta_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24104 offset += 2;
24105 proto_tree_add_item(tree, hf_ieee80211_ext_bss_ss_underutilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24106 offset += 1;
24107 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_20mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24108 offset += 1;
24109 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_40mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24110 offset += 1;
24111 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_80mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24112 offset += 1;
24113
24114 return offset;
24115}
24116
24117static int
24118dissect_wide_bw_channel_switch(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24119{
24120 int offset = 0;
24121
24122 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24123 offset += 1;
24124 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment0, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24125 offset += 1;
24126 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment1, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24127 offset += 1;
24128
24129 return offset;
24130}
24131
24132static int
24133dissect_channel_switch_wrapper(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24134{
24135 int tag_len = tvb_reported_length(tvb);
24136 int offset = 0;
24137 int tmp_sublen;
24138 const uint8_t ids[] = { TAG_COUNTRY_INFO7, TAG_WIDE_BW_CHANNEL_SWITCH194,
24139 TAG_TX_PWR_ENVELOPE195 };
24140 const uint8_t ext_ids[] = {ETAG_BANDWIDTH_INDICATION135};
24141
24142 /*
24143 Decode three subelement in IE-196(Channel Switch Wrapper element):
24144 (1) New Country subelement
24145 (2) Wide Bandwidth Channel Switch subelement
24146 (3) New VHT Transmit Power Envelope subelement
24147 (4) Bandwidth Indication subelement
24148 */
24149 while (tag_len > 0){
24150 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
24151 if (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, ids,
24152 G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) == 0) {
24153 break;
24154 }
24155 tag_len -= (tmp_sublen + 2);
24156 offset += (tmp_sublen + 2);
24157 }
24158 return offset;
24159}
24160
24161static int
24162dissect_operating_mode_notification(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24163{
24164 int offset = 0;
24165 static int * const ieee80211_operat_mode_field[] = {
24166 &hf_ieee80211_operat_mode_field_channel_width,
24167 &hf_ieee80211_operat_mode_field_160_80plus80_bw,
24168 &hf_ieee80211_operat_mode_field_no_ldpc,
24169 &hf_ieee80211_operat_mode_field_rxnss,
24170 &hf_ieee80211_operat_mode_field_rxnsstype,
24171 NULL((void*)0)
24172 };
24173
24174 /* Operating Mode field */
24175 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_operat_notification_mode,
24176 ett_mcsbit_tree, ieee80211_operat_mode_field,
24177 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24178 offset += 1;
24179 return offset;
24180}
24181
24182static const range_string tbtt_info_length[] = {
24183 { 0, 0, "Reserved" },
24184 { 1, 1, "Neighbor AP TBTT Offset subfield" },
24185 { 2, 2, "Neighbor AP TBTT Offset subfield and the BSS Parameters subfield" },
24186 { 3, 4, "Reserved" },
24187 { 5, 5, "Neighbor AP TBTT Offset subfield and the Short-SSID subfield" },
24188 { 6, 6, "Neighbor AP TBTT offset subfield, the Short SSID subfield and the BSS Parameters subfield" },
24189 { 7, 7, "Neighbor AP TBTT Offset subfield and the BSSID subfield" },
24190 { 8, 8, "Neighbor AP TBTT Offset subfield, the BSSID subfield and the BSS Parameters subfield" },
24191 { 9, 9, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the BSS Parameters subfield and the 20 MHz PSD subfield" },
24192 { 10, 10, "Reserved" },
24193 { 11, 11, "Neighbor AP TBTT Offset subfield, the BSSID subfield and the Short-SSID subfield" },
24194 { 12, 12, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the Short SSID subfield and the BSS Parameters subfield" },
24195 { 13, 13, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the Short SSID subfield, the BSS Parameters subfield and the 20 MHz PSD subfield" },
24196 { 14, 15, "Reserved" },
24197 { 16, 16, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the Short SSID subfield, the BSS Parameters subfield, the 20 MHz PSD subfield and the MLD Parameters subfield" },
24198 { 17, 255, "First 16 octets contain Neighbor AP TBTT Offset, the BSSID, the Short SSID, the BSS Parameters, the 20 MHz PSD and the MLD Parameters subfield. The remaining octets are reserved"},
24199 { 0, 0, NULL((void*)0) }
24200};
24201
24202static int * const bss_params_headers[] = {
24203 &hf_ieee80211_rnr_oct_recommended,
24204 &hf_ieee80211_rnr_same_ssid,
24205 &hf_ieee80211_rnr_multiple_bssid,
24206 &hf_ieee80211_rnr_transmitted_bssid,
24207 &hf_ieee80211_rnr_ess_with_colocated_ap,
24208 &hf_ieee80211_rnr_unsolicited_probe_responses,
24209 &hf_ieee80211_rnr_same_colocated_ap,
24210 &hf_ieee80211_rnr_same_reserved,
24211 NULL((void*)0)
24212};
24213
24214static int * const mld_params_headers[] = {
24215 &hf_ieee80211_rnr_mld_id,
24216 &hf_ieee80211_rnr_mld_link_id,
24217 &hf_ieee80211_rnr_mld_bss_params_change_count,
24218 &hf_ieee80211_rnr_mld_all_updates_included,
24219 &hf_ieee80211_rnr_mld_disabled_link_indication,
24220 &hf_ieee80211_rnr_mld_reserved,
24221 NULL((void*)0)
24222};
24223
24224static int
24225dissect_neighbor_ap_info(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
24226 int offset)
24227{
24228 uint16_t tbtt_info_h;
24229 uint16_t tbtt_info_len;
24230 uint16_t tbtt_info_count;
24231 uint16_t len_remain = 0;
24232 int i = 0;
24233 bool_Bool display_tbtt_offset = false0;
24234 bool_Bool display_bssid_subfield = false0;
24235 bool_Bool display_short_bssid_subfield = false0;
24236 bool_Bool display_bss_parameters_subfield = false0;
24237 bool_Bool display_20mhz_psd_subfield = false0;
24238 bool_Bool display_mld_params_subfield = false0;
24239 bool_Bool display_reserved = false0;
24240
24241 proto_item *item;
24242 proto_tree *query;
24243
24244 tbtt_info_h = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
24245 tbtt_info_len = TBTT_INFO_LENGTH(tbtt_info_h)(((tbtt_info_h) & (0xff<<8)) >> 8);
24246 tbtt_info_count = TBTT_INFO_COUNT(tbtt_info_h)(((tbtt_info_h) & (0xf<<4)) >> 4);
24247 switch(tbtt_info_len) {
24248 case 0: case 3: case 4: case 10: case 14: case 15:
24249 /* Reserved cases */
24250 display_reserved = true1;
24251 len_remain = tbtt_info_len;
24252 break;
24253 case 1:
24254 display_tbtt_offset = true1;
24255 break;
24256 case 2:
24257 display_tbtt_offset = true1;
24258 display_bss_parameters_subfield = true1;
24259 break;
24260 case 5:
24261 display_tbtt_offset = true1;
24262 display_short_bssid_subfield = true1;
24263 break;
24264 case 6:
24265 display_tbtt_offset = true1;
24266 display_short_bssid_subfield = true1;
24267 display_bss_parameters_subfield = true1;
24268 break;
24269 case 7:
24270 display_tbtt_offset = true1;
24271 display_bssid_subfield = true1;
24272 break;
24273 case 8:
24274 display_tbtt_offset = true1;
24275 display_bssid_subfield = true1;
24276 display_bss_parameters_subfield = true1;
24277 break;
24278 case 9:
24279 display_tbtt_offset = true1;
24280 display_bssid_subfield = true1;
24281 display_bss_parameters_subfield = true1;
24282 display_20mhz_psd_subfield = true1;
24283 break;
24284 case 11:
24285 display_tbtt_offset = true1;
24286 display_bssid_subfield = true1;
24287 display_short_bssid_subfield = true1;
24288 break;
24289 case 12:
24290 display_tbtt_offset = true1;
24291 display_bssid_subfield = true1;
24292 display_short_bssid_subfield = true1;
24293 display_bss_parameters_subfield = true1;
24294 break;
24295 case 13:
24296 display_tbtt_offset = true1;
24297 display_bssid_subfield = true1;
24298 display_short_bssid_subfield = true1;
24299 display_bss_parameters_subfield = true1;
24300 display_20mhz_psd_subfield = true1;
24301 break;
24302 case 16: /* EHT stuff */
24303 display_tbtt_offset = true1;
24304 display_bssid_subfield = true1;
24305 display_short_bssid_subfield = true1;
24306 display_bss_parameters_subfield = true1;
24307 display_20mhz_psd_subfield = true1;
24308 display_mld_params_subfield = true1;
24309 break;
24310 default: /* 17- 255: Same as 16 but the remaining bytes are reserved. */
24311 display_tbtt_offset = true1;
24312 display_bssid_subfield = true1;
24313 display_short_bssid_subfield = true1;
24314 display_bss_parameters_subfield = true1;
24315 display_20mhz_psd_subfield = true1;
24316 display_mld_params_subfield = true1;
24317 display_reserved = true1;
24318 len_remain = tbtt_info_len - 16;
24319 break;
24320 }
24321
24322 proto_tree_add_item(tree, hf_ieee80211_tbtt_info, tvb, offset, 2,
24323 ENC_LITTLE_ENDIAN0x80000000);
24324 proto_tree_add_item(tree, hf_ieee80211_tbtt_filtered_nap, tvb, offset, 2,
24325 ENC_LITTLE_ENDIAN0x80000000);
24326 item = proto_tree_add_item(tree, hf_ieee80211_tbtt_info_count, tvb, offset, 2,
24327 ENC_LITTLE_ENDIAN0x80000000);
24328 proto_tree_add_item(tree, hf_ieee80211_tbtt_info_length, tvb, offset, 2,
24329 ENC_LITTLE_ENDIAN0x80000000);
24330 offset+=2;
24331
24332 proto_tree_add_item(tree, hf_ieee80211_tbtt_operating_class, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24333 offset+=1;
24334 proto_tree_add_item(tree, hf_ieee80211_tbtt_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24335 offset+=1;
24336
24337 for (i=0; i < tbtt_info_count + 1; i++) {
24338 query = proto_tree_add_subtree(tree, tvb, offset, tbtt_info_len,
24339 ett_tbtt_infos, &item, "TBTT Information");
24340
24341 if (display_tbtt_offset) {
24342 proto_tree_add_item(query, hf_ieee80211_tbtt_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24343 offset+=1;
24344 }
24345 if (display_bssid_subfield) {
24346 proto_tree_add_item(query, hf_ieee80211_tbtt_bssid, tvb, offset, 6, ENC_NA0x00000000);
24347 offset+=6;
24348 }
24349 if (display_short_bssid_subfield) {
24350 proto_tree_add_item(query, hf_ieee80211_tbtt_short_ssid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
24351 offset+=4;
24352 }
24353 if (display_bss_parameters_subfield) {
24354
24355 proto_tree_add_bitmask_with_flags(query, tvb, offset,
24356 hf_ieee80211_rnr_bss_params,
24357 ett_rnr_bss_params_tree,
24358 bss_params_headers,
24359 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24360 offset += 1;
24361 }
24362 if (display_20mhz_psd_subfield) {
24363 proto_tree_add_item(query, hf_ieee80211_rnr_20mhz_psd_subfield, tvb,
24364 offset, 1, ENC_NA0x00000000);
24365 offset += 1;
24366 }
24367 if (display_mld_params_subfield) {
24368
24369 proto_tree_add_bitmask_with_flags(query, tvb, offset,
24370 hf_ieee80211_rnr_mld_params,
24371 ett_rnr_mld_params_tree,
24372 mld_params_headers,
24373 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24374 offset += 3;
24375 }
24376 if (display_reserved) {
24377 proto_tree_add_item(query, hf_ieee80211_rnr_reserved_data, tvb, offset,
24378 len_remain, ENC_NA0x00000000);
24379 }
24380
24381 offset += len_remain;
24382 }
24383
24384 return offset;
24385}
24386
24387static int
24388dissect_reduced_neighbor_report(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24389{
24390 int offset = 0;
24391
24392 while (tvb_reported_length_remaining(tvb, offset)) {
24393 int start_offset;
24394 proto_tree *neighbor_ap_info = NULL((void*)0);
24395 proto_item *naii = NULL((void*)0);
24396
24397 start_offset = offset;
24398 neighbor_ap_info = proto_tree_add_subtree(tree, tvb, offset, -1,
24399 ett_neighbor_ap_info, &naii,
24400 "Neighbor AP Information");
24401 offset = dissect_neighbor_ap_info(tvb, pinfo, neighbor_ap_info, offset);
24402
24403 proto_item_set_len(naii, offset - start_offset);
24404 }
24405
24406 return tvb_reported_length(tvb);
24407}
24408
24409static const value_string s1g_supported_channel_width_vals[] = {
24410 { 0, "STA supports 1MHz and 2MHz operation" },
24411 { 1, "STA supports 1MHz, 2MHz and 4MHz operation" },
24412 { 2, "STA supports 1MHz, 2MHz, 4MHz and 8MHz operation" },
24413 { 3, "STA supports 1MHz, 2MHz, 4MHz, 8MHz and 16MHz operation" },
24414 { 0, NULL((void*)0) }
24415};
24416
24417static const value_string s1g_traveling_pilot_support_vals[] = {
24418 { 0, "Traveling Pilot Support not activated" },
24419 { 1, "Traveling Pilot Support activated for only one space-time stream" },
24420 { 2, "Reserved" },
24421 { 3, "Traveling Pilot Support activated for one and two space-time streams" },
24422 { 0, NULL((void*)0) }
24423};
24424
24425static const value_string s1g_max_mpdu_length_vals[] = {
24426 { 0, "3895" },
24427 { 1, "7991" },
24428 { 0, NULL((void*)0) }
24429};
24430
24431static const value_string s1g_min_mpdu_start_spacing_vals[] = {
24432 { 0, "No restriction" },
24433 { 1, "1/4 uS" },
24434 { 2, "1/2 uS" },
24435 { 3, "1 uS" },
24436 { 4, "2 uS" },
24437 { 5, "4 uS" },
24438 { 6, "8 uS" },
24439 { 7, "16 uS" },
24440 { 0, NULL((void*)0) }
24441};
24442
24443static const value_string s1g_sta_type_support_vals[] = {
24444 { 0, "AP-Only. Supports sensor and non-sensor STAs." },
24445 { 1, "AP supports only sensor STAs. STA is a sensor STA." },
24446 { 2, "AP supports only non-sensor STAs. STA is a non-sensor STA" },
24447 { 3, "Reserved" },
24448 { 0, NULL((void*)0) }
24449};
24450
24451static const value_string s1g_sectorized_beam_capable_vals[] = {
24452 { 0, "AP or non-AP: Not supported" },
24453 { 1, "AP: TXOP-based sectorization only. Non-AP: Both group and TXOP" },
24454 { 2, "AP: Group sectorization only. Non-AP: Reserved" },
24455 { 3, "AP: Both group and TXOP sectorization. Non-AP: Reserved" },
24456 { 0, NULL((void*)0) }
24457};
24458
24459static const value_string s1g_vht_link_adaptation_vals[] = {
24460 { 0, "STA does not provide VHT MFB" },
24461 { 1, "Reserved" },
24462 { 2, "STA can only provide unsolicited VHT MFB" },
24463 { 3, "STA can provide unsolicited and solicited VHT MFB" },
24464 { 0, NULL((void*)0) }
24465};
24466
24467#if 0
24468static const value_string s1g_mcs_map[] = {
24469 { 0, "Support for S1G-MCS 2 for n spatial streams" },
24470 { 1, "Support for S1G-MCS 7 for n spatial streamS" },
24471 { 2, "Support for S1G-MCS 9 for n spatial streams" },
24472 { 3, "n spatial streams not supported" },
24473 { 0, NULL((void*)0) }
24474};
24475#endif
24476
24477static int * const ieee80211_s1g_cap_byte1[] = {
24478 &hf_ieee80211_s1g_cap_s1g_long_support,
24479 &hf_ieee80211_s1g_cap_short_gi_for_1_mhz,
24480 &hf_ieee80211_s1g_cap_short_gi_for_2_mhz,
24481 &hf_ieee80211_s1g_cap_short_gi_for_4_mhz,
24482 &hf_ieee80211_s1g_cap_short_gi_for_8_mhz,
24483 &hf_ieee80211_s1g_cap_short_gi_for_16_mhz,
24484 &hf_ieee80211_s1g_cap_supported_channel_width,
24485 NULL((void*)0)
24486};
24487
24488static int * const ieee80211_s1g_cap_byte2[] = {
24489 &hf_ieee80211_s1g_cap_rx_ldpc,
24490 &hf_ieee80211_s1g_cap_tx_stbc,
24491 &hf_ieee80211_s1g_cap_rx_stbc,
24492 &hf_ieee80211_s1g_cap_su_beamformer_capable,
24493 &hf_ieee80211_s1g_cap_su_beamformee_capable,
24494 &hf_ieee80211_s1g_cap_beamformee_sts_capability, /* Needs global */
24495 NULL((void*)0)
24496};
24497
24498static int * const ieee80211_s1g_cap_byte3[] = {
24499 &hf_ieee80211_s1g_cap_number_sounding_dimensions,
24500 &hf_ieee80211_s1g_cap_mu_beamformer_capable,
24501 &hf_ieee80211_s1g_cap_mu_beamformee_capable,
24502 &hf_ieee80211_s1g_cap_htc_vht_capable,
24503 &hf_ieee80211_s1g_cap_travelling_pilot_support,
24504 NULL((void*)0)
24505};
24506
24507static int * const ieee80211_s1g_cap_byte4[] = {
24508 &hf_ieee80211_s1g_cap_rd_responder,
24509 &hf_ieee80211_s1g_cap_ht_delayed_block_ack,
24510 &hf_ieee80211_s1g_cap_maximum_mpdu_length,
24511 &hf_ieee80211_s1g_cap_maximum_a_mpdu_length_exp,
24512 &hf_ieee80211_s1g_cap_minimum_mpdu_start_spacing,
24513 NULL((void*)0)
24514};
24515
24516static int * const ieee80211_s1g_cap_byte5[] = {
24517 &hf_ieee80211_s1g_cap_uplink_sync_capable,
24518 &hf_ieee80211_s1g_cap_dynamic_aid,
24519 &hf_ieee80211_s1g_cap_bat_support,
24520 &hf_ieee80211_s1g_cap_tim_ade_support,
24521 &hf_ieee80211_s1g_cap_non_tim_support,
24522 &hf_ieee80211_s1g_cap_group_aid_support,
24523 &hf_ieee80211_s1g_cap_sta_type_support,
24524 NULL((void*)0)
24525};
24526
24527static int * const ieee80211_s1g_cap_byte6[] = {
24528 &hf_ieee80211_s1g_cap_centralized_authentication_control,
24529 &hf_ieee80211_s1g_cap_distributed_authentication_control,
24530 &hf_ieee80211_s1g_cap_a_msdu_support,
24531 &hf_ieee80211_s1g_cap_a_mpdu_support,
24532 &hf_ieee80211_s1g_cap_asymmetic_block_ack_support,
24533 &hf_ieee80211_s1g_cap_flow_control_support,
24534 &hf_ieee80211_s1g_cap_sectorized_beam_capable,
24535 NULL((void*)0)
24536};
24537
24538static int * const ieee80211_s1g_cap_byte7[] = {
24539 &hf_ieee80211_s1g_cap_obss_mitigation_support,
24540 &hf_ieee80211_s1g_cap_fragment_ba_support,
24541 &hf_ieee80211_s1g_cap_ndp_ps_poll_supported,
24542 &hf_ieee80211_s1g_cap_raw_operation_support,
24543 &hf_ieee80211_s1g_cap_page_slicing_support,
24544 &hf_ieee80211_s1g_cap_txop_sharing_implicit_ack_support,
24545 &hf_ieee80211_s1g_cap_vht_link_adaptation_capable,
24546 NULL((void*)0)
24547};
24548
24549static int * const ieee80211_s1g_cap_byte8[] = {
24550 &hf_ieee80211_s1g_cap_tack_support_as_ps_poll_response,
24551 &hf_ieee80211_s1g_cap_duplicate_1_mhz_support,
24552 &hf_ieee80211_s1g_cap_mcs_negotiation_support,
24553 &hf_ieee80211_s1g_cap_1_mhz_control_response_preamble_support,
24554 &hf_ieee80211_s1g_cap_ndp_beamforming_report_poll_support,
24555 &hf_ieee80211_s1g_cap_unsolicited_dynamic_aid,
24556 &hf_ieee80211_s1g_cap_sector_training_operation_supported,
24557 &hf_ieee80211_s1g_cap_temporary_ps_mode_switch,
24558 NULL((void*)0),
24559};
24560
24561static int * const ieee80211_s1g_cap_byte9[] = {
24562 &hf_ieee80211_s1g_cap_twt_grouping_support,
24563 &hf_ieee80211_s1g_cap_bdt_capable,
24564 &hf_ieee80211_s1g_cap_color,
24565 &hf_ieee80211_s1g_cap_twt_requester_support,
24566 &hf_ieee80211_s1g_cap_twt_responder_support,
24567 &hf_ieee80211_s1g_cap_pv1_frame_support,
24568 NULL((void*)0)
24569};
24570
24571static int * const ieee80211_s1g_cap_byte10[] = {
24572 &hf_ieee80211_s1g_cap_link_adaptation_per_normal_control_response_capable,
24573 &hf_ieee80211_s1g_cap_reserved,
24574 NULL((void*)0)
24575};
24576
24577static int * const ieee80211_s1g_mcs_and_nss_set[] = {
24578 &hf_ieee80211_s1g_rx_s1g_mcs_map,
24579 &hf_ieee80211_s1g_rx_highest_supported_long_gi_data_rate,
24580 &hf_ieee80211_s1g_tx_s1g_mcs_map,
24581 &hf_ieee80211_s1g_tx_highest_supported_long_gi_data_rate,
24582 &hf_ieee80211_s1g_rx_single_spatial_stream_map_for_1_mhz,
24583 &hf_ieee80211_s1g_tx_single_spatial_stream_map_for_1_mhz,
24584 &hf_ieee80211_s1g_mcs_and_nss_reserved,
24585 NULL((void*)0)
24586};
24587
24588static int
24589dissect_s1g_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24590{
24591 int offset = 0;
24592 proto_tree *s1g_cap_info = NULL((void*)0);
24593 proto_tree *s1g_caps = NULL((void*)0);
24594 proto_tree *sup_mcs_nss_set = NULL((void*)0);
24595
24596 s1g_cap_info = proto_tree_add_subtree(tree, tvb, offset, 15,
24597 ett_ieee80211_s1g_capabilities_info,
24598 NULL((void*)0), "S1G Capabilities Information");
24599
24600 s1g_caps = proto_tree_add_subtree(s1g_cap_info, tvb, offset, 10,
24601 ett_ieee80211_s1g_capabilities,
24602 NULL((void*)0), "S1G Capabilities");
24603
24604 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24605 hf_ieee80211_s1g_cap_byte1,
24606 ett_s1g_cap_byte1,
24607 ieee80211_s1g_cap_byte1,
24608 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24609 offset += 1;
24610
24611 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24612 hf_ieee80211_s1g_cap_byte2,
24613 ett_s1g_cap_byte2,
24614 ieee80211_s1g_cap_byte2,
24615 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24616 offset += 1;
24617
24618 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24619 hf_ieee80211_s1g_cap_byte3,
24620 ett_s1g_cap_byte3,
24621 ieee80211_s1g_cap_byte3,
24622 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24623 offset += 1;
24624
24625 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24626 hf_ieee80211_s1g_cap_byte4,
24627 ett_s1g_cap_byte4,
24628 ieee80211_s1g_cap_byte4,
24629 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24630 offset += 1;
24631
24632 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24633 hf_ieee80211_s1g_cap_byte5,
24634 ett_s1g_cap_byte5,
24635 ieee80211_s1g_cap_byte5,
24636 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24637 offset += 1;
24638
24639 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24640 hf_ieee80211_s1g_cap_byte6,
24641 ett_s1g_cap_byte6,
24642 ieee80211_s1g_cap_byte6,
24643 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24644 offset += 1;
24645
24646 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24647 hf_ieee80211_s1g_cap_byte7,
24648 ett_s1g_cap_byte7,
24649 ieee80211_s1g_cap_byte7,
24650 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24651 offset += 1;
24652
24653 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24654 hf_ieee80211_s1g_cap_byte8,
24655 ett_s1g_cap_byte8,
24656 ieee80211_s1g_cap_byte8,
24657 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24658 offset += 1;
24659
24660 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24661 hf_ieee80211_s1g_cap_byte9,
24662 ett_s1g_cap_byte9,
24663 ieee80211_s1g_cap_byte9,
24664 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24665 offset += 1;
24666
24667 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24668 hf_ieee80211_s1g_cap_byte10,
24669 ett_s1g_cap_byte10,
24670 ieee80211_s1g_cap_byte10,
24671 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24672 offset += 1;
24673
24674 sup_mcs_nss_set = proto_tree_add_subtree(s1g_cap_info, tvb, offset, 5,
24675 ett_ieee80211_s1g_sup_mcs_and_nss_set,
24676 NULL((void*)0), "Supported S1G-MCS and NSS Set");
24677
24678 proto_tree_add_bitmask_with_flags(sup_mcs_nss_set, tvb, offset,
24679 hf_ieee80211_s1g_mcs_and_nss_set,
24680 ett_s1g_mcs_and_mcs_set,
24681 ieee80211_s1g_mcs_and_nss_set,
24682 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24683 offset += 5;
24684
24685 return offset;
24686}
24687
24688static int * const s1g_subchannel_selective_transmission_headers0[] = {
24689 &hf_ieee80211_s1g_sst_sounding_option,
24690 &hf_ieee80211_s1g_channel_activity_bitmap,
24691 &hf_ieee80211_s1g_ul_activity,
24692 &hf_ieee80211_s1g_dl_activity,
24693 &hf_ieee80211_s1g_max_trans_width,
24694 &hf_ieee80211_s1g_activity_start_time,
24695 NULL((void*)0)
24696};
24697
24698static const value_string max_trans_width_vals[] = {
24699 { 0, "channel width unit" },
24700 { 1, "4MHz" },
24701 { 2, "8MHz" },
24702 { 3, "16MHz" },
24703 { 0, NULL((void*)0) }
24704};
24705
24706static int
24707dissect_subchannel_selective_transmission(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24708{
24709 int offset = 0;
24710 uint8_t control = tvb_get_uint8(tvb, offset);
24711
24712 /* Different if sounding option is 0 or 1 */
24713 if ((control & 0x01) == 0x00) {
24714 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
24715 hf_ieee80211_s1g_subchannel_selective_transmission,
24716 ett_s1g_subchannel_selective_transmission,
24717 s1g_subchannel_selective_transmission_headers0,
24718 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24719 offset += 4;
24720 } else {
24721 uint8_t control2 = tvb_get_uint8(tvb, offset + 1);
24722 proto_item *pi = NULL((void*)0);
24723 proto_tree *chan_tree = NULL((void*)0);
24724
24725 chan_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
24726 ett_s1g_subchannel_selective_transmission,
24727 &pi , "Channel Activity Schedule");
24728 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_sst_sounding_option1, tvb,
24729 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24730 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_channel_activity_bitmap1,
24731 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24732 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_sounding_start_time_present,
24733 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24734 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_channel_activity_reserved,
24735 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24736 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_max_trans_width1, tvb,
24737 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24738 offset += 2;
24739 /* sounding_start_time_present */
24740 if (control2 & 0x02) {
24741 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_sounding_start_time, tvb,
24742 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24743 offset += 2;
24744 proto_item_set_len(pi, 4);
24745 } else {
24746 proto_item_set_len(pi, 2);
24747 }
24748 }
24749
24750 return offset;
24751}
24752
24753static void
24754s1g_open_loop_link_margin_custom(char *result, uint8_t ollm_index)
24755{
24756 snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dB",
24757 (-128.0 + ollm_index * 0.5));
24758}
24759
24760static int
24761dissect_s1g_open_loop_link_margin_index(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24762{
24763 int offset = 0;
24764
24765 proto_tree_add_item(tree, hf_ieee80211_s1g_open_loop_link_margin, tvb,
24766 offset, 1, ENC_NA0x00000000);
24767 offset += 1;
24768
24769 return offset;
24770}
24771
24772#define RAW_START_TIME_INDICATION0x10 0x10
24773#define RAW_GROUP_INDICATION0x20 0x20
24774#define RAW_CHANNEL_INDICATION_PRESENCE0x40 0x40
24775#define RAW_PERIODIC_RAW_INDICATION0x80 0x80
24776
24777static const value_string s1g_raw_control_raw_type[] = {
24778 { 0, "Generic RAW" },
24779 { 1, "Sounding RAW" },
24780 { 2, "Simplex RAW" },
24781 { 3, "Triggering frame RAW" },
24782 { 0, NULL((void*)0) }
24783};
24784
24785static uint8_t global_s1g_raw_type;
24786
24787static void
24788s1g_raw_type_options_custom(char *result, uint8_t raw_type)
24789{
24790 switch (global_s1g_raw_type) {
24791 case 0x00:
24792 switch (raw_type) {
24793 case 0x00:
24794 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "None");
24795 break;
24796 case 0x01:
24797 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Paged STA");
24798 break;
24799 case 0x02:
24800 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "RA Frame");
24801 break;
24802 case 0x03:
24803 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Paged STA and RA Frame");
24804 break;
24805 }
24806 break;
24807 case 0x01:
24808 switch (raw_type) {
24809 case 0x00:
24810 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "SST sounding RAW");
24811 break;
24812 case 0x01:
24813 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "SST report RAW");
24814 break;
24815 case 0x02:
24816 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Sector sounding RAW");
24817 break;
24818 case 0x03:
24819 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Sector report RAW");
24820 break;
24821 }
24822 break;
24823 case 0x02:
24824 switch (raw_type) {
24825 case 0x00:
24826 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "AP PM RAW");
24827 break;
24828 case 0x01:
24829 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Non-TIM RAW");
24830 break;
24831 case 0x02:
24832 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Omni RAW");
24833 break;
24834 case 0x03:
24835 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Reserved");
24836 break;
24837 }
24838 break;
24839 case 0x03:
24840 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Reserved");
24841 break;
24842 }
24843}
24844
24845static void s1g_raw_slot_duration_custom(char *result, uint16_t slot_def)
24846{
24847 snprintf(result, ITEM_LABEL_LENGTH240, "%u (%u uS)", slot_def, (500 + slot_def * 120));
24848}
24849
24850static int * const s1g_raw_control_headers[] = {
24851 &hf_ieee80211_s1g_raw_type,
24852 &hf_ieee80211_s1g_raw_type_options,
24853 &hf_ieee80211_s1g_raw_start_time_indication,
24854 &hf_ieee80211_s1g_raw_raw_group_indication,
24855 &hf_ieee80211_s1g_raw_channel_indication_preference,
24856 &hf_ieee80211_s1g_raw_periodic_raw_indication,
24857 NULL((void*)0)
24858};
24859
24860static int * const s1g_slot_def_8_bit[] = {
24861 &hf_ieee80211_s1g_slot_def_format_indication,
24862 &hf_ieee80211_s1g_slot_def_cross_slot_boundary,
24863 &hf_ieee80211_s1g_slot_def_slot_duration_count8,
24864 &hf_ieee80211_s1g_slot_def_num_slots6,
24865 NULL((void*)0)
24866};
24867
24868static int * const s1g_slot_def_11_bit[] = {
24869 &hf_ieee80211_s1g_slot_def_format_indication,
24870 &hf_ieee80211_s1g_slot_def_cross_slot_boundary,
24871 &hf_ieee80211_s1g_slot_def_slot_duration_count11,
24872 &hf_ieee80211_s1g_slot_def_num_slots3,
24873 NULL((void*)0)
24874};
24875
24876static int * const s1g_raw_group_fields[] = {
24877 &hf_ieee80211_s1g_raw_group_page_index,
24878 &hf_ieee80211_s1g_raw_group_start_aid,
24879 &hf_ieee80211_s1g_raw_group_end_aid,
24880 NULL((void*)0)
24881};
24882
24883static int * const s1g_raw_channel_indication_fields[] = {
24884 &hf_ieee80211_s1g_raw_ci_channel_activity_bitmap,
24885 &hf_ieee80211_s1g_raw_ci_max_trans_width,
24886 &hf_ieee80211_s1g_raw_ci_ul_activity,
24887 &hf_ieee80211_s1g_raw_ci_dl_activity,
24888 &hf_ieee80211_s1g_raw_ci_reserved,
24889 NULL((void*)0)
24890};
24891
24892static int
24893dissect_rps(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24894{
24895 proto_tree *raw_assignment_tree;
24896 proto_tree *assn_tree;
24897 proto_item *rati;
24898 int offset = 0;
24899 int idx = 0;
24900 uint8_t rps_len = tvb_reported_length_remaining(tvb, offset);
24901
24902 raw_assignment_tree = proto_tree_add_subtree(tree, tvb, offset, rps_len,
24903 ett_s1g_raw_assignment, NULL((void*)0),
24904 "RAW assignments");
24905
24906 while (tvb_reported_length_remaining(tvb, offset) > 0) {
24907
24908 assn_tree = proto_tree_add_subtree_format(raw_assignment_tree, tvb, offset, -1,
24909 ett_s1g_raw_assn_tree, &rati,
24910 "Assignment %d", idx);
24911
24912 uint8_t raw_control = tvb_get_uint8(tvb, offset);
24913 uint8_t raw_slot_def = tvb_get_uint8(tvb, offset + 1);
24914
24915 global_s1g_raw_type = raw_control & 0x03;
24916
24917 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
24918 hf_ieee80211_s1g_raw_control,
24919 ett_s1g_raw_control,
24920 s1g_raw_control_headers,
24921 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24922 offset += 1;
24923
24924 if (((raw_slot_def & 0x01) == 0x00) || (global_s1g_raw_type == 0x01)) {
24925 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
24926 hf_ieee80211_s1g_raw_slot_def,
24927 ett_s1g_raw_slot_def,
24928 s1g_slot_def_8_bit,
24929 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24930 } else {
24931 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
24932 hf_ieee80211_s1g_raw_slot_def,
24933 ett_s1g_raw_slot_def,
24934 s1g_slot_def_11_bit,
24935 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24936 }
24937
24938 offset += 2;
24939
24940 if (raw_control & RAW_START_TIME_INDICATION0x10) {
24941 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_start_time, tvb, offset, 1,
24942 ENC_NA0x00000000);
24943 offset += 1;
24944 }
24945
24946 if (raw_control & RAW_GROUP_INDICATION0x20) {
24947 uint32_t raw_group = tvb_get_letoh24(tvb, offset);
24948
24949 if (raw_group == 0) {
24950 proto_item *it = NULL((void*)0);
24951
24952 it = proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_group_subfield, tvb,
24953 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
24954 proto_item_append_text(it, ": All STAs allowed access within the RAW");
24955 } else {
24956 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
24957 hf_ieee80211_s1g_raw_group_subfield,
24958 ett_s1g_raw_group_subfield,
24959 s1g_raw_group_fields,
24960 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24961 }
24962 offset += 3;
24963 }
24964
24965 if (raw_control & RAW_CHANNEL_INDICATION_PRESENCE0x40) {
24966 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
24967 hf_ieee80211_s1g_raw_channel_indication,
24968 ett_s1g_raw_channel_indication,
24969 s1g_raw_channel_indication_fields,
24970 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24971 offset += 2;
24972 }
24973
24974 if (raw_control & RAW_PERIODIC_RAW_INDICATION0x80) {
24975 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_praw_periodicity, tvb,
24976 offset, 1, ENC_NA0x00000000);
24977 offset += 1;
24978 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_praw_validity, tvb,
24979 offset, 1, ENC_NA0x00000000);
24980 offset += 1;
24981 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_praw_start_offset, tvb,
24982 offset, 1, ENC_NA0x00000000);
24983 offset += 1;
24984 }
24985
24986 idx += 1;
24987 }
24988 return offset;
24989}
24990
24991static int * const s1g_page_slice_headers[] = {
24992 &hf_ieee80211_s1g_page_slice_page_index,
24993 &hf_ieee80211_s1g_page_slice_page_slice_length,
24994 &hf_ieee80211_s1g_page_slice_page_slice_count,
24995 &hf_ieee80211_s1g_page_slice_block_offset,
24996 &hf_ieee80211_s1g_page_slice_tim_offset,
24997 &hf_ieee80211_s1g_page_slice_reserved,
24998 NULL((void*)0)
24999};
25000
25001static int
25002dissect_page_slice(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25003{
25004 int offset = 0;
25005 int len = 0;
25006
25007 proto_tree_add_item(tree, hf_ieee80211_s1g_page_slice_page_period, tvb,
25008 offset, 1, ENC_NA0x00000000);
25009 offset += 1;
25010
25011 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25012 hf_ieee80211_s1g_page_slice_control,
25013 ett_s1g_page_slice_control,
25014 s1g_page_slice_headers,
25015 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25016
25017 offset += 3;
25018
25019 len = tvb_reported_length_remaining(tvb, offset);
25020 if (len > 0) {
25021 proto_tree_add_item(tree, hf_ieee80211_s1g_page_slice_page_bitmap, tvb,
25022 offset, len, ENC_NA0x00000000);
25023 offset += len;
25024 }
25025
25026 return offset;
25027}
25028
25029#define AID_REQUEST_INTERVAL_PRESENT0x01 0x01
25030#define PER_STA_ADDRESS_PRESENT0x02 0x02
25031#define SERVICE_CHARACTERISTIC_PRESENT0x04 0x04
25032#define GROUP_ADDRESS_PRESENT0x20 0x20
25033
25034static int * const s1g_aid_request_mode_headers[] = {
25035 &hf_ieee80211_s1g_aid_request_interval_present,
25036 &hf_ieee80211_s1g_aid_request_per_sta_address_present,
25037 &hf_ieee80211_s1g_aid_request_service_characteristic_present,
25038 &hf_ieee80211_s1g_aid_request_non_tim_mode_switch,
25039 &hf_ieee80211_s1g_aid_request_tim_mode_switch,
25040 &hf_ieee80211_s1g_aid_request_group_address_present,
25041 &hf_ieee80211_s1g_aid_request_reserved,
25042 NULL((void*)0)
25043};
25044
25045static int * const s1g_aid_request_characteristic_headers[] = {
25046 &hf_ieee80211_s1g_aid_request_characteristic_sensor,
25047 &hf_ieee80211_s1g_aid_request_characteristic_offload,
25048 &hf_ieee80211_s1g_aid_request_characteristic_official_service,
25049 &hf_ieee80211_s1g_aid_request_characteristic_reserved,
25050 NULL((void*)0)
25051};
25052
25053static int
25054dissect_aid_request(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25055{
25056 int offset = 0;
25057 uint8_t mode = tvb_get_uint8(tvb, offset);
25058
25059 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25060 hf_ieee80211_s1g_aid_request_mode,
25061 ett_s1g_aid_request_mode,
25062 s1g_aid_request_mode_headers,
25063 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25064 offset += 1;
25065
25066 if (mode & AID_REQUEST_INTERVAL_PRESENT0x01) {
25067 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_request_interval, tvb,
25068 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25069 offset += 2;
25070 }
25071
25072 if (mode & PER_STA_ADDRESS_PRESENT0x02) {
25073 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_req_peer_sta_addr, tvb,
25074 offset, 6, ENC_NA0x00000000);
25075 offset += 6;
25076 }
25077
25078 if (mode & SERVICE_CHARACTERISTIC_PRESENT0x04) {
25079 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25080 hf_ieee80211_s1g_aid_request_characteristic,
25081 ett_s1g_aid_characteristic,
25082 s1g_aid_request_characteristic_headers,
25083 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25084 offset += 1;
25085 }
25086
25087 if (mode & GROUP_ADDRESS_PRESENT0x20) {
25088 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_req_group_addr, tvb, offset,
25089 6, ENC_NA0x00000000);
25090 offset += 6;
25091 }
25092
25093 return offset;
25094}
25095
25096static int
25097dissect_aid_response(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25098{
25099 int offset = 0;
25100
25101 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_rsp_aid_group_aid, tvb,
25102 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25103 offset += 2;
25104
25105 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_rsp_aid_switch_count,
25106 tvb, offset, 1, ENC_NA0x00000000);
25107 offset += 1;
25108
25109 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_rsp_aid_response_interval,
25110 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25111 offset += 2;
25112
25113 return offset;
25114}
25115
25116static int * const s1g_sector_op_control_headers[] = {
25117 &hf_ieee80211_s1g_sector_op_sectorization_type,
25118 &hf_ieee80211_s1g_sector_op_period,
25119 &hf_ieee80211_s1g_sector_op_omni,
25120 NULL((void*)0)
25121};
25122
25123static int * const s1g_txop_sector_op_control_headers[] = {
25124 &hf_ieee80211_s1g_sector_op_sectorization_type_b16,
25125 &hf_ieee80211_s1g_sector_op_periodic_training_indicator,
25126 &hf_ieee80211_s1g_sector_op_training_period,
25127 &hf_ieee80211_s1g_sector_op_remaining_beacon_interval,
25128 &hf_ieee80211_s1g_sector_op_reserved_b16,
25129 NULL((void*)0)
25130};
25131
25132static const true_false_string sectorization_type_tfs = {
25133 "Reserved",
25134 "Group Sectorization Operation"
25135};
25136
25137static const true_false_string sectorization_omni_tfs = {
25138 "Omnidirectional",
25139 "Sectorized"
25140};
25141
25142static int
25143dissect_s1g_sector_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25144{
25145 int offset = 0;
25146 int len = 0;
25147 uint8_t control = tvb_get_uint8(tvb, offset);
25148
25149 if (control & 0x01) {
25150 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25151 hf_ieee80211_s1g_sector_op_control_16b,
25152 ett_s1g_sector_operation,
25153 s1g_txop_sector_op_control_headers,
25154 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25155
25156 offset += 2;
25157 } else {
25158 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25159 hf_ieee80211_s1g_sector_op_control,
25160 ett_s1g_sector_operation,
25161 s1g_sector_op_control_headers,
25162 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25163 offset += 1;
25164 }
25165
25166 /* Break this out more */
25167 len = tvb_reported_length_remaining(tvb, offset);
25168 proto_tree_add_item(tree, hf_ieee80211_s1g_sector_op_group_info, tvb,
25169 offset, len, ENC_NA0x00000000);
25170 offset += len;
25171
25172 return offset;
25173}
25174
25175static int
25176dissect_s1g_beacon_compatibility(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25177{
25178 int offset = 0;
25179
25180 proto_tree_add_item(tree, hf_ieee80211_s1g_beacon_compatibility_info, tvb,
25181 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25182 offset += 2;
25183
25184 proto_tree_add_item(tree, hf_ieee80211_s1g_beacon_interval, tvb, offset,
25185 2, ENC_LITTLE_ENDIAN0x80000000);
25186 offset += 2;
25187
25188 proto_tree_add_item(tree, hf_ieee80211_s1g_tsf_completion, tvb, offset,
25189 4, ENC_LITTLE_ENDIAN0x80000000);
25190 offset += 4;
25191
25192 return offset;
25193}
25194
25195static int
25196dissect_s1g_short_beacon_interval(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25197{
25198 int offset = 0;
25199
25200 proto_tree_add_item(tree, hf_ieee80211_s1g_short_beacon_interval, tvb,
25201 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25202 offset += 2;
25203
25204 return offset;
25205}
25206
25207static int
25208dissect_s1g_change_sequence(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25209{
25210 int offset = 0;
25211
25212 proto_tree_add_item(tree, hf_ieee80211_s1g_change_sequence, tvb, offset, 1,
25213 ENC_NA0x00000000);
25214 offset += 1;
25215
25216 return offset;
25217}
25218
25219static int
25220dissect_authentication_control(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25221{
25222 int offset = 0;
25223 uint16_t control_params = tvb_get_letohs(tvb, offset);
25224 proto_tree *auth_tree = NULL((void*)0);
25225
25226 if ((control_params & 0x0001) == 0) {
25227 auth_tree = proto_tree_add_subtree(tree, tvb, offset, 2,
25228 ett_ieee80211_s1g_auth_control,
25229 NULL((void*)0),
25230 "Centralized Authentication Control Parameters");
25231 } else {
25232 auth_tree = proto_tree_add_subtree(tree, tvb, offset, 3,
25233 ett_ieee80211_s1g_auth_control,
25234 NULL((void*)0),
25235 "Distributed Authentication Control Parameters");
25236 }
25237
25238 if ((control_params & 0x0001) == 0) { /* This is all there should be here */
25239 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_control,
25240 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25241 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_deferral,
25242 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25243 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_reserved,
25244 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25245
25246 if ((control_params & 0x0002) == 0) { /* Deferral or not */
25247 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_thresh,
25248 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25249 } else {
25250 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_thresh_tus,
25251 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25252 }
25253 offset += 2;
25254 } else {
25255 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_control,
25256 tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25257 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_slot_duration, tvb,
25258 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25259 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_max_trans_int, tvb,
25260 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25261 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_min_trans_int, tvb,
25262 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25263 offset += 3;
25264 }
25265 return offset;
25266}
25267
25268static int
25269dissect_tsf_timer_accuracy(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25270{
25271 int offset = 0;
25272
25273 proto_tree_add_item(tree, hf_ieee80211_s1g_tsf_timer_accuracy, tvb, offset,
25274 1, ENC_NA0x00000000);
25275 offset += 1;
25276
25277 return offset;
25278}
25279
25280static int * const relay_control_headers[] = {
25281 &hf_ieee80211_s1g_relay_hierarchy_identifier,
25282 &hf_ieee80211_s1g_relay_no_more_relay_flag,
25283 NULL((void*)0)
25284};
25285
25286static const range_string relay_hierarchy_rstrs[] = {
25287 { 0, 0, "Root AP" },
25288 { 1, 1, "S1G Relay AP" },
25289 { 2, 127, "Reserved" },
25290 { 0, 0, NULL((void*)0) }
25291};
25292
25293static const true_false_string no_more_relay_flag_tfs = {
25294 "AP does not accept any requests for relaying",
25295 "AP does accept requests for relaying"
25296};
25297
25298static int
25299dissect_s1g_relay(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25300{
25301 int offset = 0;
25302 uint8_t relay_control = tvb_get_uint8(tvb, offset);
25303
25304 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25305 hf_ieee80211_s1g_relay_control,
25306 ett_s1g_relay_control,
25307 relay_control_headers,
25308 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25309 offset += 1;
25310 if ((relay_control & 0x7F) == 1) {
25311 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_rootap_bssid,
25312 tvb, offset, 6, ENC_NA0x00000000);
25313 offset += 6;
25314 }
25315
25316 return offset;
25317}
25318
25319static const true_false_string relay_activation_mode_tfs = {
25320 "Relay Activation Request",
25321 "Relay Activation Response"
25322};
25323
25324static const true_false_string relay_direction_tfs = {
25325 "Sent by an AP",
25326 "Sent by a non-AP STA"
25327};
25328
25329static unsigned relay_function_field;
25330
25331static void
25332enable_relay_function_custom(char *result, uint8_t enable_relay_function)
25333{
25334 switch (relay_function_field & 0x03) {
25335 case 0x00: /* Relay Activation Mode == 0 && Direction == 0 */
25336 if (enable_relay_function)
25337 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA activates its relay function");
25338 else
25339 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA terminates its relay function");
25340 break;
25341 case 0x01: /* Relay Activation Mode == 1 && Direction == 0 */
25342 if (enable_relay_function)
25343 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA requests to activate relay function");
25344 else
25345 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA requests to terminate relay function");
25346 break;
25347 case 0x02: /* Relay Activation Mode == 0 && Direction == 1 */
25348 if (enable_relay_function)
25349 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA is allowed to operate as a relay");
25350 else
25351 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA must not operate as a relay");
25352 break;
25353 case 0x03: /* Relay Activation Mode == 1 && Direction == 1 */
25354 if (enable_relay_function)
25355 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Non-AP STA can operate as a relay");
25356 else
25357 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Non-AP STA must terminate relay function");
25358 break;
25359 }
25360}
25361
25362static int
25363dissect_s1g_relay_activation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25364{
25365 int offset = 0;
25366 proto_tree *relay_activ = NULL((void*)0);
25367
25368 relay_function_field = tvb_get_uint8(tvb, offset);
25369
25370 relay_activ = proto_tree_add_subtree_format(tree, tvb, offset, 1,
25371 ett_s1g_relay_function,
25372 NULL((void*)0), "Relay Activation: 0x%0x",
25373 relay_function_field);
25374
25375 proto_tree_add_item(relay_activ,
25376 hf_ieee80211_s1g_relay_function_activation_mode, tvb,
25377 offset, 1, ENC_NA0x00000000);
25378 proto_tree_add_item(relay_activ, hf_ieee80211_s1g_relay_function_direction,
25379 tvb, offset, 1, ENC_NA0x00000000);
25380 proto_tree_add_item(relay_activ,
25381 hf_ieee80211_s1g_relay_function_enable_relay_function,
25382 tvb, offset, 1, ENC_NA0x00000000);
25383 proto_tree_add_item(relay_activ,
25384 hf_ieee80211_s1g_relay_function_stas_present_indic,
25385 tvb, offset, 1, ENC_NA0x00000000);
25386 proto_tree_add_item(relay_activ, hf_ieee80211_s1g_relay_function_reserved,
25387 tvb, offset, 1, ENC_NA0x00000000);
25388 offset += 1;
25389
25390 if (relay_function_field & 0x04) {
25391 proto_tree_add_item(tree, hf_ieee80211_s1g_number_of_stas, tvb, offset,
25392 1, ENC_NA0x00000000);
25393 offset += 1;
25394 }
25395
25396 return offset;
25397}
25398
25399static const true_false_string reachable_address_add_remove_tfs = {
25400 "STA joining the relay",
25401 "STA leaving the relay"
25402};
25403
25404static int
25405dissect_reachable_address(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25406{
25407 int offset = 0;
25408 proto_tree *reach_list = NULL((void*)0);
25409 uint8_t addr_count = 0, addr_num = 0;
25410
25411 proto_tree_add_item(tree, hf_ieee80211_s1g_initiator_mac_address, tvb,
25412 offset, 6, ENC_NA0x00000000);
25413 offset += 6;
25414
25415 addr_count = tvb_get_uint8(tvb, offset);
25416 proto_tree_add_item(tree, hf_ieee80211_s1g_address_count, tvb, offset, 1,
25417 ENC_NA0x00000000);
25418 offset++;
25419
25420 reach_list = proto_tree_add_subtree(tree, tvb, offset, 7 * addr_count,
25421 ett_ieee80211_s1g_addr_list,
25422 NULL((void*)0), "Reachable Addresses");
25423 while (addr_count != 0) {
25424 proto_tree *reach_addr = NULL((void*)0);
25425
25426 reach_addr = proto_tree_add_subtree_format(reach_list, tvb, offset, 7,
25427 ett_ieee80211_s1g_reach_addr,
25428 NULL((void*)0), "Reachable Address %u", addr_num);
25429
25430 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_add_remove,
25431 tvb, offset, 1, ENC_NA0x00000000);
25432 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_relay_capable,
25433 tvb, offset, 1, ENC_NA0x00000000);
25434 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_reserved,
25435 tvb, offset, 1, ENC_NA0x00000000);
25436 offset += 1;
25437
25438 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_mac_address,
25439 tvb, offset, 6, ENC_NA0x00000000);
25440 offset += 6;
25441
25442 addr_num++;
25443 addr_count--;
25444 }
25445 return offset;
25446}
25447
25448static int * const relay_discovery_control_headers[] = {
25449 &hf_ieee80211_s1g_min_data_rate_included,
25450 &hf_ieee80211_s1g_mean_data_rate_included,
25451 &hf_ieee80211_s1g_max_data_rate_included,
25452 &hf_ieee80211_s1g_delay_and_min_phy_rate,
25453 &hf_ieee80211_s1g_information_not_available,
25454 &hf_ieee80211_s1g_relay_discovery_reserved,
25455 NULL((void*)0)
25456};
25457
25458static int
25459dissect_s1g_relay_discovery(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25460{
25461 int offset = 0;
25462 uint8_t relay_discovery_control = tvb_get_uint8(tvb, offset);
25463
25464 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25465 hf_ieee80211_s1g_relay_discovery_control,
25466 ett_s1g_relay_discovery_control,
25467 relay_discovery_control_headers,
25468 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25469 offset += 1;
25470
25471 if (relay_discovery_control & 0x01) {
25472 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_ul_min, tvb,
25473 offset, 1, ENC_NA0x00000000);
25474 offset += 1;
25475 }
25476
25477 if (relay_discovery_control & 0x02) {
25478 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_ul_mean, tvb,
25479 offset, 1, ENC_NA0x00000000);
25480 offset += 1;
25481 }
25482
25483 if (relay_discovery_control & 0x04) {
25484 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_ul_max, tvb,
25485 offset, 1, ENC_NA0x00000000);
25486 offset += 1;
25487 }
25488
25489 if (relay_discovery_control & 0x01) {
25490 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_dl_min, tvb,
25491 offset, 1, ENC_NA0x00000000);
25492 offset += 1;
25493 }
25494
25495 if (relay_discovery_control & 0x02) {
25496 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_dl_mean, tvb,
25497 offset, 1, ENC_NA0x00000000);
25498 offset += 1;
25499 }
25500
25501 if (relay_discovery_control & 0x04) {
25502 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_dl_max, tvb,
25503 offset, 1, ENC_NA0x00000000);
25504 offset += 1;
25505 }
25506
25507 if (relay_discovery_control & 0x08) {
25508
25509 }
25510
25511 return offset;
25512}
25513
25514static int
25515dissect_aid_announcement(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25516{
25517 int offset = 0;
25518 int entry_no = 0;
25519
25520 /*
25521 * There should be 8N bytes ...
25522 */
25523 while (tvb_reported_length_remaining(tvb, offset) >= 8) {
25524 proto_tree *aid_entry = NULL((void*)0);
25525
25526 aid_entry = proto_tree_add_subtree_format(tree, tvb, offset, 8,
25527 ett_ieee80211_s1g_aid_entry,
25528 NULL((void*)0), "AID Entry %d", entry_no++);
25529 proto_tree_add_item(aid_entry, hf_ieee80211_s1g_aid_entry_mac_addr,
25530 tvb, offset, 6, ENC_NA0x00000000);
25531 offset += 6;
25532
25533 proto_tree_add_item(aid_entry, hf_ieee80211_s1g_aid_entry_assoc_id,
25534 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25535 offset += 2;
25536 }
25537
25538 /* TODO: EI if bytes remaining. */
25539
25540 return offset;
25541}
25542
25543static int * const subfield_0[] = {
25544 &hf_ieee80211_pv1_probe_response_req_full_ssid,
25545 &hf_ieee80211_pv1_probe_response_req_next_tbtt,
25546 &hf_ieee80211_pv1_probe_response_req_access_network_option,
25547 &hf_ieee80211_pv1_probe_response_req_s1g_beacon_compatibility,
25548 &hf_ieee80211_pv1_probe_response_req_supported_rates,
25549 &hf_ieee80211_pv1_probe_response_req_s1g_capability,
25550 &hf_ieee80211_pv1_probe_response_req_s1g_operation,
25551 &hf_ieee80211_pv1_probe_response_req_rsn,
25552 NULL((void*)0)
25553};
25554
25555static int
25556dissect_pv1_probe_response_option(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25557{
25558 int offset = 0;
25559
25560 /*
25561 * TODO: Check that the number of bytes matches what the probe response
25562 * group bitmap says should be there.
25563 */
25564 if (tvb_reported_length_remaining(tvb, offset) == 1) {
25565 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25566 hf_ieee80211_s1g_probe_resp_subfield_0,
25567 ett_s1g_probe_resp_subfield_0,
25568 subfield_0,
25569 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25570 offset += 1;
25571 } else if (tvb_reported_length_remaining(tvb, offset) > 1) {
25572 uint8_t opt_bitmaps = tvb_get_uint8(tvb, offset);
25573
25574 proto_tree_add_item(tree, hf_ieee80211_s1g_probe_response_group_bitmap,
25575 tvb, offset, 1, ENC_NA0x00000000);
25576 offset += 1;
25577 if (opt_bitmaps & 0x01) { /* Default Bitmap */
25578 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25579 hf_ieee80211_s1g_probe_resp_subfield_0,
25580 ett_s1g_probe_resp_subfield_0,
25581 subfield_0,
25582 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25583 offset += 1;
25584 }
25585 }
25586
25587 return offset;
25588}
25589
25590static void
25591s1g_max_awake_duration_custom(char *result, uint16_t duration)
25592{
25593 if (duration == 0)
25594 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "No limit applies");
25595 else
25596 snprintf(result, ITEM_LABEL_LENGTH240, "%d uS", (int)duration * 40);
25597}
25598
25599static void
25600s1g_recovery_time_duration_custom(char *result, uint16_t duration)
25601{
25602 snprintf(result, ITEM_LABEL_LENGTH240, "%d uS", (int)duration * 40);
25603}
25604
25605static int
25606dissect_el_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25607{
25608 int offset = 0;
25609
25610 proto_tree_add_item(tree, hf_ieee80211_s1g_el_op_max_awake_duration, tvb,
25611 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25612 offset += 2;
25613
25614 proto_tree_add_item(tree, hf_ieee80211_s1g_el_op_recovery_time_duration, tvb,
25615 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25616 offset += 2;
25617
25618 return offset;
25619}
25620
25621static int
25622dissect_sectorized_group_id_list(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25623{
25624 int offset = 0;
25625 int len = tvb_reported_length_remaining(tvb, offset);
25626
25627 /* Break this out some more */
25628 proto_tree_add_item(tree, hf_ieee80211_s1g_sectorized_group_id_list, tvb,
25629 offset, len, ENC_NA0x00000000);
25630 offset += len;
25631
25632 return offset;
25633}
25634
25635static int * const channel_width_fields[] = {
25636 &hf_ieee80211_s1g_primary_channel_width,
25637 &hf_ieee80211_s1g_bss_operating_channel_width,
25638 &hf_ieee80211_s1g_primary_channel_location,
25639 &hf_ieee80211_s1g_reserved_b6,
25640 &hf_ieee80211_s1g_mcs10_use,
25641 NULL((void*)0)
25642};
25643
25644static const value_string one_mhz_primary_channel_vals[] = {
25645 { 0, "1 MHz BSS operating channel width" },
25646 { 1, "2 MHz BSS operating channel width" },
25647 { 3, "4 MHz BSS operating channel width" },
25648 { 7, "8 MHz BSS operating channel width" },
25649 { 15, "16 MHz BSS operating channel width" },
25650 { 0, NULL((void*)0) },
25651};
25652
25653static const value_string two_mhz_primary_channel_vals[] = {
25654 { 1, "2 MHz BSS operating channel width" },
25655 { 3, "4 MHz BSS operating channel width" },
25656 { 7, "8 MHz BSS operating channel width" },
25657 { 15, "16 MHz BSS operating channel width" },
25658 { 0, NULL((void*)0) },
25659};
25660
25661static const value_string primary_channel_width_vals[] = {
25662 { 0, "2MHz BSS Primary Channel Width" },
25663 { 1, "1MHz BSS Primary Channel Width" },
25664 { 0, NULL((void*)0) }
25665};
25666
25667static const value_string one_mhz_primary_channel_location_vals[] = {
25668 { 0, "Located on lower side of 2MHz primary channel" },
25669 { 1, "Located on upper side of 2MHz primary channel" },
25670 { 0, NULL((void*)0) }
25671};
25672
25673static const value_string mcs10_use_vals[] = {
25674 { 0, "Use of MCS10 possible" },
25675 { 1, "Use of MCS10 not recommended" },
25676 { 0, NULL((void*)0) }
25677};
25678
25679static int
25680dissect_s1g_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25681{
25682 int offset = 0;
25683 proto_tree *s1g_op_info = NULL((void*)0);
25684 proto_item *cw_item = NULL((void*)0);
25685 uint8_t chan_width = 0;
25686
25687 s1g_op_info = proto_tree_add_subtree(tree, tvb, offset, 4,
25688 ett_s1g_operation_info,
25689 NULL((void*)0), "S1G Operation Information");
25690
25691 chan_width = tvb_get_uint8(tvb, offset);
25692 cw_item = proto_tree_add_bitmask_with_flags(s1g_op_info, tvb, offset,
25693 hf_ieee80211_s1g_channel_width,
25694 ett_s1g_channel_width,
25695 channel_width_fields,
25696 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25697 if (chan_width & 0x01) {
25698 proto_item_append_text(cw_item, ": %s",
25699 val_to_str(pinfo->pool, (chan_width >> 1) & 0x0F,
25700 one_mhz_primary_channel_vals,
25701 "Invalid BSS Channel Width value"));
25702 } else {
25703 proto_item_append_text(cw_item, ": %s",
25704 val_to_str(pinfo->pool, (chan_width >> 1) & 0x0F,
25705 two_mhz_primary_channel_vals,
25706 "Invalid BSS Channel Width value"));
25707 }
25708 offset += 1;
25709
25710 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_operating_class, tvb,
25711 offset, 1, ENC_NA0x00000000);
25712 offset += 1;
25713
25714 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_primary_channel_number, tvb,
25715 offset, 1, ENC_NA0x00000000);
25716 offset += 1;
25717
25718 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_channel_center_frequency,
25719 tvb, offset, 1, ENC_NA0x00000000);
25720 offset += 1;
25721
25722 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_basic_mcs_and_nss_set,
25723 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25724 offset += 2;
25725
25726 return offset;
25727}
25728
25729#define HEADER_COMP_STORE_A30x02 0x02
25730#define HEADER_COMP_STORE_A40x04 0x04
25731#define HEADER_COMP_CCMP_UPDATE0x08 0x08
25732
25733static int * const header_compression_control_headers[] = {
25734 &hf_ieee80211_s1g_header_comp_req_resp,
25735 &hf_ieee80211_s1g_header_comp_store_a3,
25736 &hf_ieee80211_s1g_header_comp_store_a4,
25737 &hf_ieee80211_s1g_header_comp_ccmp_update_present,
25738 &hf_ieee80211_s1g_header_comp_pv1_data_type_3_supported,
25739 &hf_ieee80211_s1g_header_comp_reserved,
25740 NULL((void*)0)
25741};
25742
25743static int
25744dissect_header_compression(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25745{
25746 int offset = 0;
25747 uint8_t control = tvb_get_uint8(tvb, offset);
25748
25749 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25750 hf_ieee80211_s1g_header_comp_control,
25751 ett_s1g_header_comp_control,
25752 header_compression_control_headers,
25753 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25754 offset += 1;
25755
25756 if (control & HEADER_COMP_STORE_A30x02) {
25757 proto_tree_add_item(tree, hf_ieee80211_s1g_header_comp_a3, tvb,
25758 offset, 6, ENC_NA0x00000000);
25759 offset += 6;
25760 }
25761
25762 if (control & HEADER_COMP_STORE_A40x04) {
25763 proto_tree_add_item(tree, hf_ieee80211_s1g_header_comp_a4, tvb,
25764 offset, 6, ENC_NA0x00000000);
25765 offset += 6;
25766 }
25767
25768 /* TODO: Break this out */
25769 if (control & HEADER_COMP_CCMP_UPDATE0x08) {
25770 proto_tree_add_item(tree, hf_ieee80211_s1g_header_comp_ccmp_update, tvb,
25771 offset, 5, ENC_NA0x00000000);
25772 offset += 5;
25773 }
25774
25775 return offset;
25776}
25777
25778static const value_string sst_channel_unit_vals[] = {
25779 { 0, "Channel Width Unit is 2 MHz" },
25780 { 1, "Channel Width Unit is 1 MHz" },
25781 { 0, NULL((void*)0) }
25782};
25783
25784static int
25785dissect_sst_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25786{
25787 int offset = 0;
25788
25789 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_enabled_channel_bitmap, tvb,
25790 offset, 1, ENC_NA0x00000000);
25791 offset += 1;
25792
25793 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_primary_channel_offset, tvb,
25794 offset, 1, ENC_NA0x00000000);
25795 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_channel_unit, tvb, offset,
25796 1, ENC_NA0x00000000);
25797 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_reserved, tvb, offset, 1,
25798 ENC_NA0x00000000);
25799 offset += 1;
25800
25801 return offset;
25802}
25803
25804static int
25805dissect_max_away_duration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25806{
25807 int offset = 0;
25808
25809 proto_tree_add_item(tree, hf_ieee80211_s1g_max_away_duration, tvb, offset,
25810 2, ENC_LITTLE_ENDIAN0x80000000);
25811 offset += 2;
25812
25813 return offset;
25814}
25815
25816static int
25817dissect_mcs_set(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, int offset, bool_Bool basic, bool_Bool vendorspecific)
25818{
25819 proto_item *ti;
25820 proto_tree *mcs_tree, *bit_tree;
25821 uint8_t rx_nss, tx_nss; /* 0-4 for HT and 0-8 for VHT*/
25822 uint32_t value_mcs_0_31, value_mcs_32_52, value_mcs_53_76;
25823 uint16_t tx_mcs_set;
25824 rx_nss = tx_nss = 8;
25825 /* 16 byte Supported MCS set */
25826 if (vendorspecific)
25827 {
25828 ti = proto_tree_add_item(tree, hf_ieee80211_mcsset_vs, tvb, offset, 16, ENC_NA0x00000000);
25829 } else
25830 {
25831 ti = proto_tree_add_item(tree, hf_ieee80211_mcsset, tvb, offset, 16, ENC_NA0x00000000);
25832 }
25833 proto_item_append_text(ti, ": %s", basic ? "Basic MCS Set" : "MCS Set");
25834 mcs_tree = proto_item_add_subtree(ti, ett_mcsset_tree);
25835
25836 /* Rx MCS Bitmask */
25837 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_rx_bitmask, tvb, offset, 10, ENC_NA0x00000000);
25838 bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
25839
25840 /* Bits 0 - 31 */
25841 value_mcs_0_31 = tvb_get_letohl(tvb, offset);
25842
25843 /* Handle all zeroes/ff's case..*/
25844 if (value_mcs_0_31 != 0x0)
25845 {
25846 if (!(value_mcs_0_31 & (0xffffff00))) {
25847 /*
25848 * At least one MCS from 0-7 is supported, but no MCS from 8-31 are
25849 * supported, so only 1 spatial stream is supported.
25850 */
25851 rx_nss = 0;
25852 } else if (!(value_mcs_0_31 & (0xffff0000))) {
25853 /*
25854 * At least one MCS from 8-15 is supported, but no MCS from 16-31 are
25855 * supported, so only 2 spatial streams are supported.
25856 */
25857 rx_nss = 1;
25858 } else if (!(value_mcs_0_31 & (0xff000000))) {
25859 /*
25860 * At least one MCS from 16-23 is supported, but no MCS from 24-31 are
25861 * supported, so only 3 spatial streams are supported.
25862 */
25863 rx_nss = 2;
25864 } else {
25865 /*
25866 * At least one MCS from 24-31 is supported, so 4 spatial streams
25867 * are supported.
25868 */
25869 rx_nss = 3;
25870 }
25871 }
25872
25873 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_0to7, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25874 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_8to15, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25875 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_16to23, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25876 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_24to31, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25877 offset += 4;
25878
25879 /* Should be we check UEQM Supported?*/
25880 /* Bits 32 - 52 */
25881 value_mcs_32_52 = tvb_get_letohl(tvb, offset);
25882 if (!(value_mcs_32_52 & (0x1ffffe))) {
25883 /*
25884 * MCS 33-52 aren't supported, so the number of spatial streams we get
25885 * from whichever MCSes from 0-31 that we support is the total number
25886 * of spatial streams we support.
25887 */
25888 ;
25889 } else if (!(value_mcs_32_52 & (0x1fff80))) {
25890 /*
25891 * At least one MCS from 33-38 is supported, but no MCS from 39-52 is
25892 * supported, so we have at least 2 spatial streams, but none of the
25893 * MCSs in that range give us any more.
25894 */
25895 rx_nss = MAX(1, rx_nss)(((1) > (rx_nss)) ? (1) : (rx_nss));
25896 } else {
25897 /*
25898 * At least one MCS from 39-52 is supported, so we have at least 3
25899 * spatial streams.
25900 */
25901 rx_nss = MAX(2, rx_nss)(((2) > (rx_nss)) ? (2) : (rx_nss));
25902 }
25903
25904 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_32, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25905 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_33to38, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25906 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_39to52, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25907 offset += 2;
25908
25909 /* Bits 53 - 76 */
25910 value_mcs_53_76 = tvb_get_letohl(tvb, offset);
25911 if ((value_mcs_53_76 & (0x1fffffe0))) {
25912 /*
25913 * At least one MCS from 53-76 is supported, so we have at least 4
25914 * spatial streams.
25915 */
25916 rx_nss = MAX(3, rx_nss)(((3) > (rx_nss)) ? (3) : (rx_nss));
25917 }
25918
25919 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_53to76, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25920 offset += 4;
25921
25922 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_highest_data_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25923 offset += 2;
25924
25925 /* Follow table 8-126 from 802.11-2012 */
25926 tx_mcs_set = tvb_get_letohs(tvb, offset);
25927
25928 if (!(tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
25929 {
25930 /* TX MCS Set is not defined
25931 * so there is no interpretation for Max Tx Spatial Streams
25932 */
25933 tx_nss = 4; /* Not Defined*/
25934 }
25935
25936 if ((tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
25937 {
25938 /* TX MCS Set is defined to be equal to Rx MCS Set
25939 * So, get the Max Spatial Streams from Rx
25940 * MCS set
25941 */
25942 tx_nss = rx_nss;
25943 }
25944 proto_item_append_text(ti, ": %s", val_to_str(pinfo->pool, rx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
25945
25946 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_mcs_set_defined, tvb, offset, 1,
25947 ENC_LITTLE_ENDIAN0x80000000);
25948 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal, tvb, offset, 1,
25949 ENC_LITTLE_ENDIAN0x80000000);
25950 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_max_spatial_streams, tvb, offset, 1,
25951 ENC_LITTLE_ENDIAN0x80000000);
25952 proto_item_append_text(ti, ", %s", val_to_str(pinfo->pool, tx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
25953 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_unequal_modulation, tvb, offset, 1,
25954 ENC_LITTLE_ENDIAN0x80000000);
25955 offset += 1;
25956
25957 offset += 3;
25958 return offset;
25959}
25960
25961/* 802.11n - HT Operation IE */
25962static int
25963dissect_ht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
25964{
25965 int tag_len = tvb_reported_length(tvb);
25966 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
25967 int offset = 0;
25968 static int * const ieee80211_ht_operation_info1_field[] = {
25969 &hf_ieee80211_ht_operation_info_secondary_channel_offset,
25970 &hf_ieee80211_ht_operation_info_sta_channel_width,
25971 &hf_ieee80211_ht_operation_info_rifs_mode,
25972 &hf_ieee80211_ht_operation_info_reserved_b4_b7,
25973 NULL((void*)0)
25974 };
25975
25976 static int * const ieee80211_ht_operation_info2_field[] = {
25977 &hf_ieee80211_ht_operation_info_protection,
25978 &hf_ieee80211_ht_operation_info_non_greenfield_sta_present,
25979 &hf_ieee80211_ht_operation_info_reserved_b11,
25980 &hf_ieee80211_ht_operation_info_obss_non_ht_stas_present,
25981 &hf_ieee80211_ht_operation_info_channel_center_freq_seg_2,
25982 &hf_ieee80211_ht_operation_info_reserved_b21_b23,
25983 NULL((void*)0)
25984 };
25985
25986 static int * const ieee80211_ht_operation_info3_field[] = {
25987 &hf_ieee80211_ht_operation_info_reserved_b24_b29,
25988 &hf_ieee80211_ht_operation_info_dual_beacon,
25989 &hf_ieee80211_ht_operation_info_dual_cts_protection,
25990 &hf_ieee80211_ht_operation_info_stbc_beacon,
25991 &hf_ieee80211_ht_operation_info_reserved_b33_b39,
25992 NULL((void*)0)
25993 };
25994
25995 if (tag_len < 22) {
25996 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
25997 "HT Operation IE content length %u wrong, must be at least 22 bytes", tag_len);
25998 return 1;
25999 }
26000
26001 proto_tree_add_item(tree, hf_ieee80211_ht_operation_primary_channel, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26002 offset += 1;
26003
26004 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_operation_info_delimiter1,
26005 ett_ht_operation_info_delimiter1_tree, ieee80211_ht_operation_info1_field,
26006 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26007 offset += 1;
26008
26009
26010 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_operation_info_delimiter2,
26011 ett_ht_operation_info_delimiter2_tree, ieee80211_ht_operation_info2_field,
26012 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26013 offset += 2;
26014
26015 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_operation_info_delimiter3,
26016 ett_ht_operation_info_delimiter3_tree, ieee80211_ht_operation_info3_field,
26017 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26018 offset += 2;
26019
26020 /* Basic HT-MCS Set present in Beacon, Probe Response, Mesh Peering Open and Mesh Peering
26021 * Confirm frames. Otherwise reserved.
26022 */
26023 if ((field_data->ftype && (field_data->ftype == MGT_BEACON0x08 || field_data->ftype == MGT_PROBE_RESP0x05)) ||
26024 (field_data->sanity_check && field_data->sanity_check->ampe_frame &&
26025 (field_data->sanity_check->ampe_frame == SELFPROT_ACTION_MESH_PEERING_OPEN1 ||
26026 field_data->sanity_check->ampe_frame == SELFPROT_ACTION_MESH_PEERING_CONFIRM2))) {
26027 offset = dissect_mcs_set(tree, pinfo, tvb, offset, true1, false0);
26028 } else {
26029 proto_tree_add_item(tree, hf_ieee80211_ht_operation_mcsset_reserved,
26030 tvb, offset, 16, ENC_NA0x00000000);
26031 offset += 16;
26032 }
26033
26034 return offset;
26035}
26036
26037static int
26038dissect_wapi_param_set(tvbuff_t *tvb, packet_info *pinfo,
26039 proto_tree *tree, int offset, uint32_t tag_len, proto_item *ti_len,
26040 proto_item *ti, int ftype)
26041{
26042 /* Parse the WAPI Parameter Set IE Here*/
26043 proto_item *item;
26044 proto_tree *subtree;
26045 uint16_t loop_cnt, version, akm_cnt = 1, ucast_cnt = 1, bkid_cnt = 1;
26046 uint8_t akm_suite_type = 0, ucast_cipher_type = 0, mcast_cipher_type = 0;
26047 static int * const ieee80211_tag_wapi_param_set[] = {
26048 &hf_ieee80211_tag_wapi_param_set_capab_preauth,
26049 &hf_ieee80211_tag_wapi_param_set_capab_rsvd,
26050 NULL((void*)0)
26051 };
26052
26053 version = tvb_get_letohs(tvb, offset);
26054 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26055 offset += 2;
26056
26057 /*MIN: 2 + (2+4)+ (2+4) + 4 + 2 + 0 (BKID CNT and LIST) =20*/
26058 if (tag_len < 20) {
26059 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
26060 "tag_len is %d, it's neither WAPI not BSS-AC-Access-Delay", tag_len);
26061 return offset;
26062 }
26063
26064 if (version != 1) {
26065 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
26066 "Version of WAPI protocol is %d, must be = 1", version);
26067 return offset;
26068 }
26069
26070 /* AKM Suites: list can't be 0*/
26071 akm_cnt = tvb_get_letohs(tvb, offset);
26072 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_akm_suite_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26073 offset += 2;
26074 if (akm_cnt != 0) {
26075 proto_item_append_text(ti, " : AKM Suite List:");
26076 for (loop_cnt = 0; loop_cnt < akm_cnt; loop_cnt++) {
26077 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_akm_tree);
26078 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
26079 offset += 3;
26080 akm_suite_type = tvb_get_uint8(tvb, offset);
26081 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26082 offset += 1;
26083 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(pinfo->pool, akm_suite_type,
26084 ieee80211_wapi_suite_type_short, "Reserved: %d"));
26085 }
26086 proto_item_append_text(ti, " /");
26087 } else {
26088 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of AKM suites is 0, must be min 1");
26089 return offset;
26090
26091 }
26092 /* Unicast Cipher Suites: list can't be 0*/
26093 ucast_cnt = tvb_get_letohs(tvb, offset);
26094 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
26095 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26096 offset += 2;
26097 if (ucast_cnt != 0) {
26098 proto_item_append_text(ti, " Unicast Cipher List:");
26099 for (loop_cnt = 0; loop_cnt < ucast_cnt; loop_cnt++) {
26100 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_ucast_tree);
26101 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
26102 offset += 3;
26103 ucast_cipher_type = tvb_get_uint8(tvb, offset);
26104 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26105 offset += 1;
26106 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(pinfo->pool, ucast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
26107 }
26108 proto_item_append_text(ti, " /");
26109 } else {
26110 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of Unicast Cipher suites is 0, must be min 1");
26111 return offset;
26112
26113 }
26114
26115 /* Multicast Cipher Suites*/
26116 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
26117 offset += 3;
26118 mcast_cipher_type = tvb_get_uint8(tvb, offset);
26119 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26120 offset += 1;
26121 proto_item_append_text(ti, " Multicast Cipher: %s", val_to_str(pinfo->pool, mcast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
26122
26123 /* WAPI capability */
26124 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_wapi_param_set_capab,
26125 ett_tag_wapi_param_set_preauth_tree, ieee80211_tag_wapi_param_set,
26126 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26127 offset += 2;
26128
26129 /* BKID List: The list can be 0
26130 * Applicable only for assoc/re-assoc
26131 */
26132 if (ftype == MGT_ASSOC_REQ0x00 || ftype == MGT_REASSOC_REQ0x02 ) {
26133 bkid_cnt = tvb_get_letohs(tvb, offset);
26134 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26135 offset += 2;
26136 if (bkid_cnt != 0) {
26137 for (loop_cnt = 0; loop_cnt < bkid_cnt; loop_cnt++) {
26138 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_list, tvb, offset, 16, ENC_NA0x00000000);
26139 offset += 16;
26140 }
26141 }
26142 }
26143 return offset;
26144}
26145
26146static int * const ieee80211_bss_max_idle_options[] = {
26147 &hf_ieee80211_tag_bss_max_idle_options_protected,
26148 &hf_ieee80211_tag_bss_idle_options_reserved,
26149 NULL((void*)0)
26150};
26151
26152static int
26153dissect_bss_max_idle_period(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26154{
26155 int offset = 0;
26156
26157 proto_tree_add_item(tree, hf_ieee80211_tag_bss_max_idle_period,
26158 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26159 offset += 2;
26160
26161 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
26162 hf_ieee80211_tag_bss_max_idle_options,
26163 ett_max_idle_period_options,
26164 ieee80211_bss_max_idle_options,
26165 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26166 offset++;
26167
26168 return offset;
26169}
26170
26171enum tfs_request_subelem_id {
26172 TFS_REQ_SUBELEM_TFS = 1,
26173 TFS_REQ_SUBELEM_VENDOR_SPECIFIC = 221
26174};
26175
26176static const value_string tfs_request_subelem_ids[] = {
26177 { TFS_REQ_SUBELEM_TFS, "TFS subelement" },
26178 { TFS_REQ_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
26179 { 0, NULL((void*)0) }
26180};
26181
26182static int
26183dissect_tfs_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26184{
26185 int tag_len = tvb_reported_length(tvb);
26186 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26187 int offset = 0;
26188 const uint8_t ids[] = {
26189 1, /* TFS Subelement */
26190 TAG_VENDOR_SPECIFIC_IE221
26191 };
26192
26193 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_id,
26194 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26195 offset++;
26196 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_delete_after_match,
26197 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26198 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_notify,
26199 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26200 offset++;
26201 if (offset + 1 >= tag_len) {
26202 expert_add_info_format(pinfo, tree, &ei_ieee80211_missing_data,
26203 "No TFS Request subelements in TFS Request");
26204 return tvb_captured_length(tvb);
26205 }
26206
26207 while (offset + 1 < tag_len) {
26208 uint8_t id, len;
26209 int s_offset, s_end;
26210
26211 id = tvb_get_uint8(tvb, offset);
26212 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_id,
26213 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26214 offset++;
26215 len = tvb_get_uint8(tvb, offset);
26216 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_len,
26217 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26218 offset++;
26219 if (offset + len > tag_len) {
26220 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
26221 "Not enough data for TFS Request subelement");
26222 return tvb_captured_length(tvb);
26223 }
26224 switch (id) {
26225 case TFS_REQ_SUBELEM_TFS:
26226 s_offset = offset;
26227 s_end = offset + len;
26228 while (s_offset < s_end) {
26229 /* TODO 1 is interpreted as TAG_SUPP_RATES, fix this! */
26230 int tlen = add_tagged_field(pinfo, tree, tvb, s_offset, field_data->ftype, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
26231 if (tlen==0)
26232 break;
26233 s_offset += tlen;
26234 }
26235 break;
26236 default:
26237 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem,
26238 tvb, offset, len, ENC_NA0x00000000);
26239 break;
26240 }
26241 offset += len;
26242 }
26243
26244 if (offset < tag_len) {
26245 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
26246 tvb, offset, tag_len - offset, "Extra data after TFS Subelements");
26247 }
26248
26249 return tvb_captured_length(tvb);
26250}
26251
26252enum tfs_response_subelem_id {
26253 TFS_RESP_SUBELEM_TFS_STATUS = 1,
26254 TFS_RESP_SUBELEM_TFS = 2,
26255 TFS_RESP_SUBELEM_VENDOR_SPECIFIC = 221
26256};
26257
26258static const value_string tfs_response_subelem_ids[] = {
26259 { TFS_RESP_SUBELEM_TFS_STATUS, "TFS Status subelement" },
26260 { TFS_RESP_SUBELEM_TFS, "TFS subelement" },
26261 { TFS_RESP_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
26262 { 0, NULL((void*)0) }
26263};
26264
26265static int
26266dissect_tfs_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26267{
26268 int tag_len = tvb_reported_length(tvb);
26269 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26270 int offset = 0;
26271 const uint8_t ids[] = {
26272 1, /* TFS Status subelement*/
26273 2, /* TFS subelement */
26274 TAG_VENDOR_SPECIFIC_IE221
26275 };
26276
26277 while (offset + 3 <= tag_len) {
26278 uint8_t id, len;
26279 int s_offset, s_end;
26280
26281 id = tvb_get_uint8(tvb, offset);
26282 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_id,
26283 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26284 offset++;
26285 len = tvb_get_uint8(tvb, offset);
26286 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_len,
26287 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26288 offset++;
26289 if (offset + len > tag_len) {
26290 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
26291 "Not enough data for TFS Request subelement");
26292 return tvb_captured_length(tvb);
26293 }
26294 switch (id) {
26295 case TFS_RESP_SUBELEM_TFS_STATUS:
26296 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_status,
26297 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26298 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_id,
26299 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
26300 break;
26301 case TFS_RESP_SUBELEM_TFS:
26302 s_offset = offset;
26303 s_end = offset + len;
26304 while (s_offset < s_end) {
26305 /* TODO Element IDs 1 and 2 are misinterpreted! */
26306 int tlen = add_tagged_field(pinfo, tree, tvb, s_offset, field_data->ftype, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
26307 if (tlen==0)
26308 break;
26309 s_offset += tlen;
26310 }
26311 break;
26312 default:
26313 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem,
26314 tvb, offset, len, ENC_NA0x00000000);
26315 break;
26316 }
26317
26318 offset += len;
26319 }
26320
26321 if (offset < tag_len) {
26322 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
26323 tvb, offset, tag_len - offset, "Extra data after TFS Subelements");
26324 }
26325
26326 return tvb_captured_length(tvb);
26327}
26328
26329static const value_string wnm_sleep_mode_action_types[] = {
26330 { 0, "Enter WNM-Sleep Mode" },
26331 { 1, "Exit WNM-Sleep Mode" },
26332 { 0, NULL((void*)0) }
26333};
26334
26335static const value_string wnm_sleep_mode_response_status_vals[] = {
26336 { 0, "Enter/Exit WNM-Sleep Mode Accept" },
26337 { 1, "Exit WNM-Sleep Mode Accept, GTK/IGTK update required" },
26338 { 2, "Denied. The AP is unable to perform the requested action." },
26339 { 3, "Denied temporarily. The AP is unable to perform the requested action "
26340 "at the current time. The request can be submitted again at a later time."
26341 },
26342 { 4, "Denied. Due to the pending key expiration." },
26343 { 5, "Denied. The requested action was not granted due to other WNM services "
26344 "in use by the requesting STA." },
26345 { 0, NULL((void*)0) }
26346};
26347
26348static int
26349dissect_wnm_sleep_mode(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26350{
26351 int offset = 0;
26352 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_action_type,
26353 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26354 offset++;
26355 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_response_status,
26356 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26357 offset++;
26358 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_interval,
26359 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26360 offset += 2;
26361 return offset;
26362}
26363
26364static const value_string time_adv_timing_capab_vals[] = {
26365 { 0, "No standardized external time source" },
26366 { 1, "Timestamp offset based on UTC" },
26367 { 2, "UTC time at which the TSF timer is 0" },
26368 { 0, NULL((void*)0) }
26369};
26370
26371static int
26372dissect_time_adv(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26373{
26374 int offset = 0;
26375 uint8_t capab;
26376 proto_item *item;
26377 proto_tree *subtree;
26378 struct tm tm, *now;
26379 time_t t;
26380
26381 capab = tvb_get_uint8(tvb, offset);
26382 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_timing_capab,
26383 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26384 offset += 1;
26385
26386 switch (capab) {
26387 case 1:
26388 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
26389 tvb, offset, 10, ENC_NA0x00000000);
26390 offset += 10;
26391
26392 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
26393 tvb, offset, 5, ENC_NA0x00000000);
26394 offset += 5;
26395 break;
26396 case 2:
26397 item = proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
26398 tvb, offset, 10, ENC_NA0x00000000);
26399 subtree = proto_item_add_subtree(item, ett_tag_time_adv_tree);
26400 memset(&tm, 0, sizeof(tm));
26401 tm.tm_year = tvb_get_letohs(tvb, offset) - 1900;
26402 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_year,
26403 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26404 offset += 2;
26405 tm.tm_mon = tvb_get_uint8(tvb, offset) - 1;
26406 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_month,
26407 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26408 offset += 1;
26409 tm.tm_mday = tvb_get_uint8(tvb, offset);
26410 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_day,
26411 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26412 offset += 1;
26413 tm.tm_hour = tvb_get_uint8(tvb, offset);
26414 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_hours,
26415 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26416 offset += 1;
26417 tm.tm_min = tvb_get_uint8(tvb, offset);
26418 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_minutes,
26419 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26420 offset += 1;
26421 tm.tm_sec = tvb_get_uint8(tvb, offset);
26422 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_seconds,
26423 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26424 offset += 1;
26425 proto_tree_add_item(subtree,
26426 hf_ieee80211_tag_time_adv_time_value_milliseconds,
26427 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26428 offset += 2;
26429 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_reserved,
26430 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26431 offset += 1;
26432
26433 tm.tm_isdst = -1;
26434 t = mktime(&tm);
26435 if (t != -1) {
26436 t += (time_t)(last_timestamp / 1000000);
26437 now = localtime(&t);
26438 if (now)
26439 proto_item_append_text(item,
26440 ": current time=%u-%02u-%02u %02u:%02u:%02u",
26441 now->tm_year + 1900, now->tm_mon + 1,
26442 now->tm_mday, now->tm_hour, now->tm_min,
26443 now->tm_sec);
26444 }
26445
26446 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
26447 tvb, offset, 5, ENC_NA0x00000000);
26448 offset += 5;
26449
26450 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_update_counter,
26451 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26452 offset += 1;
26453 break;
26454 }
26455
26456 return offset;
26457}
26458
26459static int
26460dissect_time_zone(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26461{
26462 int tag_len = tvb_reported_length(tvb);
26463 int offset = 0;
26464
26465 proto_tree_add_item(tree, hf_ieee80211_tag_time_zone, tvb, offset, tag_len,
26466 ENC_ASCII0x00000000);
26467 return tvb_captured_length(tvb);
26468}
26469
26470static int
26471dissect_ap_channel_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26472{
26473 int tag_len = tvb_reported_length(tvb);
26474 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26475 int offset = 0;
26476
26477 if (tag_len < 1) {
26478 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26479 "AP Channel Report length %u wrong, must be > 1", tag_len);
26480 return tvb_captured_length(tvb);
26481 }
26482
26483 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_operating_class, tvb,
26484 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26485 proto_item_append_text(field_data->item_tag, ": Operating Class %u, Channel List :", tvb_get_uint8(tvb, offset));
26486 offset += 1;
26487
26488 while (offset < tag_len)
26489 {
26490 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_channel_list, tvb, offset, 1, ENC_NA0x00000000);
26491 proto_item_append_text(field_data->item_tag, " %u,", tvb_get_uint8(tvb, offset));
26492 offset += 1;
26493 }
26494 return tvb_captured_length(tvb);
26495}
26496
26497static int
26498dissect_secondary_channel_offset_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26499{
26500 int tag_len = tvb_reported_length(tvb);
26501 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26502 int offset = 0;
26503 if (tag_len != 1) {
26504 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26505 "Secondary Channel Offset length %u wrong, must be = 1", tag_len);
26506 return 1;
26507 }
26508
26509 proto_tree_add_item(tree, hf_ieee80211_tag_secondary_channel_offset, tvb,
26510 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26511 return tvb_captured_length(tvb);
26512}
26513
26514/* RCPI (53) */
26515static int
26516dissect_rcpi_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26517{
26518 int tag_len = tvb_reported_length(tvb);
26519 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26520 int offset = 0;
26521
26522 if (tag_len != 1)
26523 {
26524 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26525 "RCPI length %u wrong, must = 1", tag_len);
26526 return 1;
26527 }
26528
26529 proto_tree_add_item(tree, hf_ieee80211_tag_rcpi, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26530 offset += 1;
26531
26532 return offset;
26533}
26534
26535/* BSS Average Access Delay element (63) */
26536static int
26537dissect_bss_avg_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26538{
26539 int tag_len = tvb_reported_length(tvb);
26540 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26541 int offset = 0;
26542 if (tag_len != 1) {
26543 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26544 "BSS Average Access Delay length %u wrong, must be = 1", tag_len);
26545 return 1;
26546 }
26547
26548 proto_tree_add_item(tree, hf_ieee80211_tag_bss_ap_avg_access_delay, tvb,
26549 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26550 return tvb_captured_length(tvb);
26551}
26552
26553static int
26554dissect_antenna_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26555{
26556 int tag_len = tvb_reported_length(tvb);
26557 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26558 int offset = 0;
26559
26560 if (tag_len != 1) {
26561 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26562 "Antenna length %u wrong, must be = 1", tag_len);
26563 return 1;
26564 }
26565
26566 proto_tree_add_item(tree, hf_ieee80211_tag_antenna_id, tvb,
26567 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26568
26569 return tvb_captured_length(tvb);
26570}
26571
26572static int
26573dissect_rsni_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26574{
26575 int tag_len = tvb_reported_length(tvb);
26576 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26577 int offset = 0;
26578
26579 if (tag_len != 1) {
26580 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26581 "RSNI length %u wrong, must be = 1", tag_len);
26582 return 1;
26583 }
26584
26585 proto_tree_add_item(tree, hf_ieee80211_tag_rsni, tvb,
26586 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26587
26588 return tvb_captured_length(tvb);
26589}
26590
26591static int
26592dissect_measurement_pilot_trans_ie(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26593{
26594 int tag_len = tvb_reported_length(tvb);
26595 int offset = 0;
26596 const uint8_t ids[] = { TAG_VENDOR_SPECIFIC_IE221 };
26597
26598 /* The tag len can be 1 or more if there are sub-elements */
26599
26600 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
26601 1, ENC_NA0x00000000);
26602
26603 tag_len--;
26604 offset++;
26605
26606 /* Also handle the optional sub-elements */
26607
26608 if (tag_len > 0) {
26609 while (tag_len > 0) {
26610 uint8_t elt_len;
26611
26612 if (tvb_reported_length_remaining(tvb, offset) < 2) {
26613 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_bad_length,
26614 tvb, offset, tag_len - offset,
26615 "Remaining data does not include the tag length");
26616 break;
26617 }
26618 elt_len = tvb_get_uint8(tvb, offset + 1);
26619
26620 if(add_tagged_field(pinfo, tree, tvb, offset + 2, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
26621 /* TODO: Add an expert info here and skip the field. */
26622 break;
26623 }
26624
26625 tag_len -= elt_len + 2;
26626 offset += elt_len + 2;
26627 }
26628 }
26629
26630 return tvb_captured_length(tvb);
26631}
26632
26633static int
26634dissect_bss_available_admission_capacity_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26635{
26636 int tag_len = tvb_reported_length(tvb);
26637 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26638 int offset = 0;
26639 uint16_t bitmask;
26640 static int * const ieee80211_tag_bss_avb_adm_cap_bitmask[] = {
26641 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
26642 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
26643 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
26644 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
26645 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
26646 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
26647 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
26648 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
26649 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
26650 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
26651 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
26652 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
26653 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
26654 NULL((void*)0)
26655 };
26656
26657 if (tag_len < 2) {
26658 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26659 "BSS Available Admission Capacity length %u wrong, must > = 2", tag_len);
26660 return offset;
26661 }
26662
26663 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
26664 ett_tag_bss_bitmask_tree, ieee80211_tag_bss_avb_adm_cap_bitmask,
26665 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26666 bitmask = tvb_get_letohs(tvb, offset);
26667 offset += 2;
26668
26669 if(bitmask & BSS_BITMASK_UP00x0001)
26670 {
26671 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up0, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26672 offset += 2;
26673 }
26674 if(bitmask & BSS_BITMASK_UP10x0002)
26675 {
26676 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up1, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26677 offset += 2;
26678 }
26679 if(bitmask & BSS_BITMASK_UP20x0004)
26680 {
26681 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up2, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26682 offset += 2;
26683 }
26684 if(bitmask & BSS_BITMASK_UP30x0008)
26685 {
26686 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up3, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26687 offset += 2;
26688 }
26689 if(bitmask & BSS_BITMASK_UP40x0010)
26690 {
26691 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up4, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26692 offset += 2;
26693 }
26694 if(bitmask & BSS_BITMASK_UP50x0020)
26695 {
26696 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up5, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26697 offset += 2;
26698 }
26699 if(bitmask & BSS_BITMASK_UP60x0040)
26700 {
26701 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up6, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26702 offset += 2;
26703 }
26704 if(bitmask & BSS_BITMASK_UP70x0080)
26705 {
26706 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up7, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26707 offset += 2;
26708 }
26709 if(bitmask & BSS_BITMASK_AC00x0100)
26710 {
26711 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac0, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26712 offset += 2;
26713 }
26714 if(bitmask & BSS_BITMASK_AC10x0200)
26715 {
26716 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac1, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26717 offset += 2;
26718 }
26719 if(bitmask & BSS_BITMASK_AC20x0400)
26720 {
26721 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac2, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26722 offset += 2;
26723 }
26724 if(bitmask & BSS_BITMASK_AC30x0800)
26725 {
26726 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac3, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26727 offset += 2;
26728 }
26729 return offset;
26730}
26731
26732static int
26733dissect_bss_ac_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo,
26734 proto_tree *tree, int offset, uint32_t tag_len, proto_item *ti_len)
26735{
26736
26737 if (tag_len != 4) {
26738 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
26739 "BSS AC Access Delay length %u wrong, must = 4", tag_len);
26740 return offset;
26741 }
26742
26743 /* TODO: Display the scaled representation of the average
26744 medium access delay (a big (precalculated) value_string ?)
26745 See 8.4.2.46 BSS AC Access Delay element ... */
26746
26747 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_be, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26748 offset += 1;
26749 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_bk, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26750 offset += 1;
26751 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vi, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26752 offset += 1;
26753 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vo, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26754 offset += 1;
26755
26756 return offset;
26757}
26758
26759/* RM Enabled Capabilities (70) */
26760static int
26761dissect_rm_enabled_capabilities_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26762{
26763 int tag_len = tvb_reported_length(tvb);
26764 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26765 int offset = 0;
26766 proto_item *ti_ex_cap;
26767 static int * const ieee80211_tag_rm_enabled_capabilities_octet1[] = {
26768 &hf_ieee80211_tag_rm_enabled_capabilities_b0,
26769 &hf_ieee80211_tag_rm_enabled_capabilities_b1,
26770 &hf_ieee80211_tag_rm_enabled_capabilities_b2,
26771 &hf_ieee80211_tag_rm_enabled_capabilities_b3,
26772 &hf_ieee80211_tag_rm_enabled_capabilities_b4,
26773 &hf_ieee80211_tag_rm_enabled_capabilities_b5,
26774 &hf_ieee80211_tag_rm_enabled_capabilities_b6,
26775 &hf_ieee80211_tag_rm_enabled_capabilities_b7,
26776 NULL((void*)0)
26777 };
26778
26779 static int * const ieee80211_tag_rm_enabled_capabilities_octet2[] = {
26780 &hf_ieee80211_tag_rm_enabled_capabilities_b8,
26781 &hf_ieee80211_tag_rm_enabled_capabilities_b9,
26782 &hf_ieee80211_tag_rm_enabled_capabilities_b10,
26783 &hf_ieee80211_tag_rm_enabled_capabilities_b11,
26784 &hf_ieee80211_tag_rm_enabled_capabilities_b12,
26785 &hf_ieee80211_tag_rm_enabled_capabilities_b13,
26786 &hf_ieee80211_tag_rm_enabled_capabilities_b14,
26787 &hf_ieee80211_tag_rm_enabled_capabilities_b15,
26788 NULL((void*)0)
26789 };
26790
26791 static int * const ieee80211_tag_rm_enabled_capabilities_octet3[] = {
26792 &hf_ieee80211_tag_rm_enabled_capabilities_b16,
26793 &hf_ieee80211_tag_rm_enabled_capabilities_b17,
26794 &hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
26795 &hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
26796 NULL((void*)0)
26797 };
26798
26799 static int * const ieee80211_tag_rm_enabled_capabilities_octet4[] = {
26800 &hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
26801 &hf_ieee80211_tag_rm_enabled_capabilities_b27,
26802 &hf_ieee80211_tag_rm_enabled_capabilities_b28,
26803 &hf_ieee80211_tag_rm_enabled_capabilities_b29,
26804 &hf_ieee80211_tag_rm_enabled_capabilities_b30,
26805 &hf_ieee80211_tag_rm_enabled_capabilities_b31,
26806 NULL((void*)0)
26807 };
26808
26809 static int * const ieee80211_tag_rm_enabled_capabilities_octet5[] = {
26810 &hf_ieee80211_tag_rm_enabled_capabilities_b32,
26811 &hf_ieee80211_tag_rm_enabled_capabilities_b33,
26812 &hf_ieee80211_tag_rm_enabled_capabilities_b34,
26813 &hf_ieee80211_tag_rm_enabled_capabilities_b35,
26814 &hf_ieee80211_tag_rm_enabled_capabilities_o5,
26815 NULL((void*)0)
26816 };
26817
26818 if (tag_len != 5)
26819 {
26820 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "RM Enabled Capabilities length %u wrong, must = 5", tag_len);
26821 return 1;
26822 }
26823 proto_item_append_text(field_data->item_tag, " (%d octets)", tag_len);
26824
26825 /* RM Enabled Capability octet 1 */
26826 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26827 ett_tag_rm_cap1, ieee80211_tag_rm_enabled_capabilities_octet1,
26828 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26829 proto_item_append_text(ti_ex_cap, " (octet 1)");
26830 offset += 1;
26831
26832 /* RM Enabled Capability octet 2 */
26833 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26834 ett_tag_rm_cap2, ieee80211_tag_rm_enabled_capabilities_octet2,
26835 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26836 proto_item_append_text(ti_ex_cap, " (octet 2)");
26837 offset += 1;
26838
26839 /* RM Enabled Capability octet 3 */
26840 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26841 ett_tag_rm_cap3, ieee80211_tag_rm_enabled_capabilities_octet3,
26842 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26843 proto_item_append_text(ti_ex_cap, " (octet 3)");
26844 offset += 1;
26845
26846 /* RM Enabled Capability octet 4 */
26847 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26848 ett_tag_rm_cap4, ieee80211_tag_rm_enabled_capabilities_octet4,
26849 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26850 proto_item_append_text(ti_ex_cap, " (octet 4)");
26851 offset += 1;
26852
26853 /* RM Enabled Capability octet 5 */
26854 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26855 ett_tag_rm_cap5, ieee80211_tag_rm_enabled_capabilities_octet5,
26856 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26857 proto_item_append_text(ti_ex_cap, " (octet 5)");
26858 offset += 1;
26859
26860 return offset;
26861}
26862
26863/* Multiple BSSID (71) */
26864enum multiple_bssid_subelem_id {
26865 MULTIPLE_BSSID_SUBELEM_NO_BSSID_PROFILE = 0,
26866 MULTIPLE_BSSID_SUBELEM_VENDOR_SPECIFIC = 221
26867};
26868
26869static const value_string multiple_bssid_subelem_ids[] = {
26870 { MULTIPLE_BSSID_SUBELEM_NO_BSSID_PROFILE, "Nontransmitted BSSID Profile" },
26871 { MULTIPLE_BSSID_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific" },
26872 { 0, NULL((void*)0) }
26873};
26874
26875static int
26876dissect_multiple_bssid_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26877{
26878 unsigned tag_len = tvb_reported_length(tvb);
26879 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26880 unsigned offset = 0;
26881 uint8_t sub_tag_id, sub_tag_len;
26882 const char *sub_tag_name;
26883 proto_tree *sub_tag_tree;
26884 const uint8_t valid_ids[] = { TAG_VENDOR_SPECIFIC_IE221 };
26885 const uint8_t invalid_ids[] = { TAG_TIM5, TAG_DS_PARAMETER3, TAG_IBSS_PARAMETER6,
26886 TAG_COUNTRY_INFO7, TAG_CHANNEL_SWITCH_ANN37, TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60,
26887 TAG_WIDE_BW_CHANNEL_SWITCH194, TAG_TX_PWR_ENVELOPE195, TAG_SUPPORTED_OPERATING_CLASSES59, TAG_IBSS_DFS41,
26888 TAG_ERP_INFO42, TAG_ERP_INFO_OLD47, TAG_HT_CAPABILITY45, TAG_HT_OPERATION61, TAG_VHT_CAPABILITY191,
26889 TAG_VHT_OPERATION192, TAG_S1G_BEACON_COMPATIBILITY213, TAG_SHORT_BEACON_INTERVAL214,
26890 TAG_S1G_CAPABILITIES217, TAG_S1G_OPERATION232 };
26891 const uint8_t invalid_ext_ids[] = { ETAG_HE_CAPABILITIES35, ETAG_HE_OPERATION36,
26892 ETAG_HE_6GHZ_BAND_CAPABILITIES59, ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42, ETAG_SPATIAL_REUSE_PARAMETER_SET39 };
26893 uint32_t s_offset, s_end;
26894
26895 if (tag_len < 1)
26896 {
26897 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Multiple BSSID length %u wrong, must be at least 1", tag_len);
26898 return 1;
26899 }
26900
26901 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26902 offset++;
26903
26904 /* Optional sub-elements */
26905
26906 while (offset + 1 < tag_len) {
26907 sub_tag_id = tvb_get_uint8(tvb, offset);
26908 sub_tag_len = tvb_get_uint8(tvb, offset + 1);
26909 sub_tag_name = val_to_str_const(sub_tag_id, multiple_bssid_subelem_ids, "Unknown");
26910
26911 sub_tag_tree = proto_tree_add_subtree_format(tree, tvb, offset, sub_tag_len + 2, ett_tag_multiple_bssid_subelem_tree, NULL((void*)0), "Subelement: %s", sub_tag_name);
26912
26913 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26914 offset += 1;
26915
26916 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_len, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26917 offset += 1;
26918
26919 if (offset + sub_tag_len > tag_len) {
26920 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Not enough data for subelement");
26921 break;
26922 }
26923
26924 switch (sub_tag_id)
26925 {
26926 case MULTIPLE_BSSID_SUBELEM_NO_BSSID_PROFILE:
26927 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_nontrans_profile, tvb, offset, sub_tag_len, ENC_NA0x00000000);
26928
26929 s_offset = offset;
26930 s_end = offset + sub_tag_len;
26931 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
26932 while (s_offset < s_end) {
26933 int tlen = add_tagged_field_with_validation(pinfo, sub_tag_tree, tvb, s_offset, 0,
26934 invalid_ids, G_N_ELEMENTS(invalid_ids)(sizeof (invalid_ids) / sizeof ((invalid_ids)[0])), true1,
26935 invalid_ext_ids, G_N_ELEMENTS(invalid_ext_ids)(sizeof (invalid_ext_ids) / sizeof ((invalid_ext_ids)[0])), true1, NULL((void*)0));
26936 if (tlen==0)
26937 break;
26938 s_offset += tlen;
26939 }
26940
26941 break;
26942
26943 case MULTIPLE_BSSID_SUBELEM_VENDOR_SPECIFIC:
26944 /*
26945 * add_tagged_field will insert expert info if there is a problem so
26946 * we ignore the return value.
26947 */
26948 add_tagged_field(pinfo, sub_tag_tree, tvb, offset, 0, valid_ids, G_N_ELEMENTS(valid_ids)(sizeof (valid_ids) / sizeof ((valid_ids)[0])), NULL((void*)0));
26949 break;
26950
26951 default:
26952 /* RESERVED */
26953 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_reserved, tvb, offset, sub_tag_len, ENC_NA0x00000000);
26954 break;
26955 }
26956
26957 offset += sub_tag_len;
26958
26959 }
26960
26961 if (offset < tag_len) {
26962 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
26963 tvb, offset, tag_len - offset, "Extra data after subelements");
26964 }
26965
26966 return tvb_captured_length(tvb);
26967}
26968
26969/* 20/40 BSS Coexistence (72) */
26970static int
26971dissect_20_40_bss_coexistence(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26972{
26973 int tag_len = tvb_reported_length(tvb);
26974 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26975 int offset = 0;
26976 static int * const ieee80211_20_40_bss_coexistence_fields[] = {
26977 &hf_ieee80211_tag_20_40_bc_information_request,
26978 &hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant,
26979 &hf_ieee80211_tag_20_40_bc_20_mhz_bss_width_request,
26980 &hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request,
26981 &hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant,
26982 &hf_ieee80211_tag_20_40_bc_reserved,
26983 NULL((void*)0)
26984 };
26985
26986 if (tag_len != 1)
26987 {
26988 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "20/40 BSS Coexistence length %u wrong, must = 1", tag_len);
26989 return 1;
26990 }
26991
26992 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_20_40_bc,
26993 ett_tag_20_40_bc, ieee80211_20_40_bss_coexistence_fields,
26994 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26995
26996 offset += 1;
26997
26998 return offset;
26999}
27000
27001/* 20/40 BSS Intolerant Channel Report (73) */
27002static int
27003dissect_20_40_bss_intolerant(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27004{
27005 proto_item *intolerant_item;
27006 proto_tree *intolerant_tree;
27007 int tag_len = tvb_reported_length(tvb);
27008 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27009 int offset = 0;
27010 int channel_report_size = tag_len - 1; // minus regulator_class field
27011 int i;
27012
27013 if (tag_len < 2) {
27014 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
27015 "20/40 BSS Intolerant Channel Report length %u wrong, must > 1", tag_len);
27016 }
27017
27018 proto_tree_add_item(tree, hf_ieee80211_tag_intolerant_operating_class, tvb, offset, 1, ENC_NA0x00000000);
27019 offset += 1;
27020
27021 intolerant_item = proto_tree_add_item(tree, hf_ieee80211_tag_intolerant_channel_list, tvb, offset, channel_report_size, ENC_NA0x00000000);
27022 intolerant_tree = proto_item_add_subtree(intolerant_item, ett_tag_intolerant_tree);
27023 for (i = 0; i < channel_report_size; i++)
27024 {
27025 proto_tree_add_item(intolerant_tree, hf_ieee80211_tag_intolerant_channel, tvb, offset, 1, ENC_NA0x00000000);
27026 offset += 1;
27027 }
27028
27029 return offset;
27030}
27031
27032static int
27033dissect_ht_capability_ie_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
27034 uint32_t tag_len, proto_item *ti_len, bool_Bool vendorspecific)
27035{
27036 proto_item *cap_item, *ti;
27037 proto_tree *cap_tree;
27038 static int * const ieee80211_ht[] = {
27039 &hf_ieee80211_ht_ldpc_coding,
27040 &hf_ieee80211_ht_chan_width,
27041 &hf_ieee80211_ht_sm_pwsave,
27042 &hf_ieee80211_ht_green,
27043 &hf_ieee80211_ht_short20,
27044 &hf_ieee80211_ht_short40,
27045 &hf_ieee80211_ht_tx_stbc,
27046 &hf_ieee80211_ht_rx_stbc,
27047 &hf_ieee80211_ht_reserved_b10,
27048 &hf_ieee80211_ht_max_amsdu,
27049 &hf_ieee80211_ht_dss_cck_40,
27050 &hf_ieee80211_ht_reserved_b13,
27051 &hf_ieee80211_ht_40_mhz_intolerant,
27052 &hf_ieee80211_ht_reserved_b15,
27053 NULL((void*)0)
27054 };
27055
27056 static int * const ieee80211_htex[] = {
27057 &hf_ieee80211_htex_reserved_b0_b7,
27058 &hf_ieee80211_htex_mcs,
27059 &hf_ieee80211_htex_htc_support,
27060 &hf_ieee80211_htex_rd_responder,
27061 &hf_ieee80211_htex_reserved_b12_b15,
27062 NULL((void*)0)
27063 };
27064
27065 static int * const ieee80211_txbf[] = {
27066 &hf_ieee80211_txbf_cap,
27067 &hf_ieee80211_txbf_rcv_ssc,
27068 &hf_ieee80211_txbf_tx_ssc,
27069 &hf_ieee80211_txbf_rcv_ndp,
27070 &hf_ieee80211_txbf_tx_ndp,
27071 &hf_ieee80211_txbf_impl_txbf,
27072 &hf_ieee80211_txbf_calib,
27073 &hf_ieee80211_txbf_expl_csi,
27074 &hf_ieee80211_txbf_expl_uncomp_fm,
27075 &hf_ieee80211_txbf_expl_comp_fm,
27076 &hf_ieee80211_txbf_expl_bf_csi,
27077 &hf_ieee80211_txbf_expl_uncomp_fm_feed,
27078 &hf_ieee80211_txbf_expl_comp_fm_feed,
27079 &hf_ieee80211_txbf_min_group,
27080 &hf_ieee80211_txbf_csi_num_bf_ant,
27081 &hf_ieee80211_txbf_uncomp_sm_bf_ant,
27082 &hf_ieee80211_txbf_comp_sm_bf_ant,
27083 &hf_ieee80211_txbf_csi_max_rows_bf,
27084 &hf_ieee80211_txbf_chan_est,
27085 &hf_ieee80211_txbf_resrv,
27086 NULL((void*)0)
27087 };
27088
27089 static int * const ieee80211_antsel[] = {
27090 &hf_ieee80211_antsel_b0,
27091 &hf_ieee80211_antsel_b1,
27092 &hf_ieee80211_antsel_b2,
27093 &hf_ieee80211_antsel_b3,
27094 &hf_ieee80211_antsel_b4,
27095 &hf_ieee80211_antsel_b5,
27096 &hf_ieee80211_antsel_b6,
27097 &hf_ieee80211_antsel_b7,
27098 NULL((void*)0)
27099 };
27100
27101 if (tag_len != 26) {
27102 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
27103 "HT Capabilities IE length %u wrong, must be = 26", tag_len);
27104 return (offset > 0) ? offset : 1;
27105 }
27106
27107 if (wlan_ignore_draft_ht && vendorspecific)
27108 return (offset > 0) ? offset : 1;
27109
27110 /* 2 byte HT Capabilities Info*/
27111 if (vendorspecific)
27112 {
27113 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_vs_cap,
27114 ett_ht_cap_tree, ieee80211_ht,
27115 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27116 }
27117 else
27118 {
27119 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_cap,
27120 ett_ht_cap_tree, ieee80211_ht,
27121 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27122 }
27123 offset += 2;
27124
27125 /* 1 byte A-MPDU Parameters */
27126 if (vendorspecific)
27127 {
27128 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27129 } else
27130 {
27131 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27132 }
27133 cap_tree = proto_item_add_subtree(cap_item, ett_ampduparam_tree);
27134 ti = proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27135 proto_item_append_text(ti, " (%04.0f[Bytes])", pow(2, 13+(tvb_get_uint8(tvb, offset) & 0x3))-1);
27136 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu_start_spacing, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27137 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27138 offset += 1;
27139
27140 /* 16 byte MCS set */
27141 offset = dissect_mcs_set(tree, pinfo, tvb, offset, false0, vendorspecific);
27142
27143
27144 /* 2 byte HT Extended Capabilities */
27145 if (vendorspecific)
27146 {
27147 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_htex_vs_cap,
27148 ett_htex_cap_tree, ieee80211_htex,
27149 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27150 } else {
27151 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_htex_cap,
27152 ett_htex_cap_tree, ieee80211_htex,
27153 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27154 }
27155 offset += 2;
27156
27157
27158 /* 4 byte TxBF capabilities */
27159 if (vendorspecific)
27160 {
27161 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_txbf_vs,
27162 ett_txbf_tree, ieee80211_txbf,
27163 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27164 } else {
27165 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_txbf,
27166 ett_txbf_tree, ieee80211_txbf,
27167 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27168 }
27169 offset += 4;
27170
27171 /* 1 byte Antenna Selection (ASEL) capabilities */
27172 if (vendorspecific)
27173 {
27174 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_antsel_vs,
27175 ett_antsel_tree, ieee80211_antsel,
27176 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27177 }
27178 else
27179 {
27180 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_antsel,
27181 ett_antsel_tree, ieee80211_antsel,
27182 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27183 }
27184 offset += 1;
27185
27186 return offset;
27187}
27188
27189static int
27190dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27191{
27192 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27193
27194 return dissect_ht_capability_ie_common(tvb, pinfo, tree, 0, tvb_reported_length(tvb),
27195 field_data->item_tag_length, false0);
27196}
27197
27198static int
27199dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
27200 uint32_t tag_len, proto_item *ti_len)
27201{
27202 static int * const ieee80211_hta1[] = {
27203 &hf_ieee80211_hta_ext_chan_offset,
27204 &hf_ieee80211_hta_rec_tx_width,
27205 &hf_ieee80211_hta_rifs_mode,
27206 &hf_ieee80211_hta_controlled_access,
27207 &hf_ieee80211_hta_service_interval,
27208 NULL((void*)0)
27209 };
27210
27211 static int * const ieee80211_hta2[] = {
27212 &hf_ieee80211_hta_operating_mode,
27213 &hf_ieee80211_hta_non_gf_devices,
27214 NULL((void*)0)
27215 };
27216
27217 static int * const ieee80211_hta3[] = {
27218 &hf_ieee80211_hta_basic_stbc_mcs,
27219 &hf_ieee80211_hta_dual_stbc_protection,
27220 &hf_ieee80211_hta_secondary_beacon,
27221 &hf_ieee80211_hta_lsig_txop_protection,
27222 &hf_ieee80211_hta_pco_active,
27223 &hf_ieee80211_hta_pco_phase,
27224 NULL((void*)0)
27225 };
27226
27227 if (tag_len != 22) {
27228 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
27229 "Tag length %u wrong, must be = 22", tag_len);
27230 return offset;
27231 }
27232
27233 if (wlan_ignore_draft_ht)
27234 return offset;
27235
27236 /* 1 HT Control Channel */
27237 proto_tree_add_item(tree, hf_ieee80211_hta_cc, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27238 offset += 1;
27239
27240 /* 1 byte HT additional capabilities */
27241 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap1,
27242 ett_hta_cap_tree, ieee80211_hta1,
27243 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27244 offset += 1;
27245
27246 /* 2 byte HT additional capabilities */
27247 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap2,
27248 ett_hta_cap1_tree, ieee80211_hta2,
27249 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27250 offset += 2;
27251
27252 /* 2 byte HT additional capabilities */
27253 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap2,
27254 ett_hta_cap2_tree, ieee80211_hta3,
27255 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27256 offset += 2;
27257
27258 /* 16 byte Supported MCS set */
27259 offset = dissect_mcs_set(tree, pinfo, tvb, offset, false0, true1);
27260
27261 return offset;
27262}
27263
27264/* 802.11n-D1.10 and 802.11n-D2.0, 7.1.3.5a */
27265
27266/*
27267 * IEEE 802.11-2016 section 9.2.4.6 "HT Control field" says that B0 of
27268 * the field is 0 for HT and 1 for VHT, bits B1 through B29 are the
27269 * "HT Control Middle" subfield, the format of which differs between
27270 * HT and VHT, bit B30 is the "AC Constraint" subfield, and bit B31
27271 * is the "RDG/More PPDU" subfield.
27272 *
27273 * 802.11ax changes the meaning of the first two bits:
27274 *
27275 * B0 = 0 means High Throughput
27276 * B0 = 1, B1 = 0 means Very High Throughput
27277 * B0 = 1, B1 = 1 means High Efficiency
27278 *
27279 * taking a reserved bit from the VHT version of the "HT Control Middle"
27280 * field.
27281 */
27282#define A_CONTROL_TRS0 0
27283#define A_CONTROL_OM1 1
27284#define A_CONTROL_HLA2 2
27285#define A_CONTROL_BSR3 3
27286#define A_CONTROL_UPH4 4
27287#define A_CONTROL_BQR5 5
27288#define A_CONTROL_CCI6 6
27289#define A_CONTROL_EHT_OM7 7
27290#define A_CONTROL_SRS8 8
27291#define A_CONTROL_AAR9 9
27292#define A_CONTROL_ONES15 15
27293
27294static const value_string a_control_control_id_vals[] = {
27295 { A_CONTROL_TRS0, "Triggered response scheduling" },
27296 { A_CONTROL_OM1, "Operating mode" },
27297 { A_CONTROL_HLA2, "HE link adaptation" },
27298 { A_CONTROL_BSR3, "Buffer status report" },
27299 { A_CONTROL_UPH4, "UL power headroom" },
27300 { A_CONTROL_BQR5, "Bandwidth query report" },
27301 { A_CONTROL_CCI6, "Command Control Indication" },
27302 { A_CONTROL_EHT_OM7, "EHT operating mode" },
27303 { A_CONTROL_SRS8, "Single response scheduling" },
27304 { A_CONTROL_AAR9, "AP assistance request" },
27305 { A_CONTROL_ONES15, "Ones need expansion surely" },
27306 { 0, NULL((void*)0) }
27307};
27308
27309/*
27310 * Print the UL target RSSI field as per the spec.
27311 * 0->30 map to -90 to -30 dBm.
27312 * 31 maps to Max ransmit power
27313 */
27314static void
27315ul_target_rssi_base_custom(char *result, uint32_t target_rssi)
27316{
27317 if (target_rssi <= 30) {
27318 snprintf(result, ITEM_LABEL_LENGTH240, "%ddBm", -90 + (2 * target_rssi));
27319 } else if (target_rssi == 31) {
27320 snprintf(result, ITEM_LABEL_LENGTH240, "Max transmit power");
27321 }
27322}
27323
27324static void
27325dissect_a_control_padding(proto_tree *tree, tvbuff_t *tvb, int offset,
27326 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27327{
27328 proto_tree *trs_tree = NULL((void*)0);
27329 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27330 unsigned offset_in_bits = (offset << 3) + start_bit;
27331
27332 /*
27333 * We isolated the bits and moved them to the bottom ... so display them
27334 */
27335 trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27336 ett_ieee80211_a_control_padding,
27337 NULL((void*)0), "Padding: 0x%x(%u bits)", the_bits, 32 - start_bit);
27338
27339 proto_tree_add_bits_item(trs_tree, hf_ieee80211_he_a_control_padding, tvb, offset_in_bits,
27340 32 - start_bit, ENC_LITTLE_ENDIAN0x80000000);
27341}
27342
27343static void
27344dissect_a_control_ones(proto_tree *tree, tvbuff_t *tvb, int offset,
27345 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27346{
27347 proto_tree *trs_tree = NULL((void*)0);
27348 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27349
27350 /*
27351 * We isolated the bits and moved them to the bottom ... so display them
27352 */
27353 trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27354 ett_ieee80211_a_control_ones,
27355 NULL((void*)0), "ONES: 0x%0x", the_bits);
27356
27357 proto_tree_add_uint(trs_tree, hf_ieee80211_he_a_control_ones, tvb,
27358 offset, 4, the_bits);
27359}
27360
27361static void
27362dissect_a_control_trs(proto_tree *tree, tvbuff_t *tvb, int offset,
27363 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27364{
27365 proto_tree *trs_tree = NULL((void*)0);
27366 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27367
27368 /*
27369 * We isolated the bits and moved them to the bottom ... so display them
27370 */
27371 trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27372 ett_ieee80211_triggered_response_schedule,
27373 NULL((void*)0), "TRS Control: 0x%08x", the_bits);
27374
27375 proto_tree_add_uint(trs_tree, hf_ieee80211_he_trs_he_tb_ppdu_len, tvb,
27376 offset, 4, the_bits);
27377 proto_tree_add_uint(trs_tree, hf_ieee80211_he_trs_ru_allocation, tvb,
27378 offset, 4, the_bits);
27379 proto_tree_add_uint(trs_tree, hf_ieee80211_he_dl_tx_power, tvb,
27380 offset, 4, the_bits);
27381 proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_target_rssi, tvb,
27382 offset, 4, the_bits);
27383 proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_mcs, tvb,
27384 offset, 4, the_bits);
27385 proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_reserved, tvb,
27386 offset, 4, the_bits);
27387}
27388
27389static void
27390dissect_a_control_om(proto_tree *tree, tvbuff_t *tvb, int offset,
27391 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27392{
27393 proto_tree *om_tree = NULL((void*)0);
27394 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x00000FFF;
27395
27396 /*
27397 * We isolated the bits and moved them to the bottom ... so display them
27398 */
27399 om_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27400 ett_ieee80211_control_om,
27401 NULL((void*)0), "OM Control: 0x%04x", the_bits);
27402
27403 proto_tree_add_uint(om_tree, hf_ieee80211_he_om_rx_nss, tvb,
27404 offset, 4, the_bits);
27405 proto_tree_add_uint(om_tree, hf_ieee80211_he_om_channel_width, tvb,
27406 offset, 4, the_bits);
27407 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_ul_mu_disable, tvb,
27408 offset, 4, the_bits);
27409 proto_tree_add_uint(om_tree, hf_ieee80211_he_om_tx_nsts, tvb,
27410 offset, 4, the_bits);
27411 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_er_su_disable, tvb,
27412 offset, 4, the_bits);
27413 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_dl_mu_mimo_resound, tvb,
27414 offset, 4, the_bits);
27415 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_ul_mu_data_disable, tvb,
27416 offset, 4, the_bits);
27417}
27418
27419static const true_false_string he_hla_tx_bf_tfs = {
27420 "beamformed PPDU",
27421 "non-beamformed PPDU"
27422};
27423
27424static void
27425dissect_a_control_hla(proto_tree *tree, tvbuff_t *tvb, int offset,
27426 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27427{
27428 proto_tree *hla_tree = NULL((void*)0);
27429 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27430
27431 /*
27432 * We isolated the bits and moved them to the bottom ... so display them
27433 */
27434 hla_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27435 ett_ieee80211_hla_control,
27436 NULL((void*)0), "HLA Control: 0x%08x", the_bits);
27437
27438 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_unsolicited_mfb, tvb,
27439 offset, 4, the_bits);
27440 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_mrq, tvb,
27441 offset, 4, the_bits);
27442 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_nss, tvb,
27443 offset, 4, the_bits);
27444 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_he_mcs, tvb,
27445 offset, 4, the_bits);
27446 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_dcm, tvb,
27447 offset, 4, the_bits);
27448 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_ru, tvb,
27449 offset, 4, the_bits);
27450 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_bw, tvb,
27451 offset, 4, the_bits);
27452 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_msi_ppdu_type, tvb,
27453 offset, 4, the_bits);
27454 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_tx_bf, tvb,
27455 offset, 4, the_bits);
27456 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_reserved, tvb,
27457 offset, 4, the_bits);
27458}
27459
27460static void
27461dissect_a_control_bsr(proto_tree *tree, tvbuff_t *tvb, int offset,
27462 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27463{
27464 proto_tree *bsr_tree = NULL((void*)0);
27465 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27466
27467 /*
27468 * We isolated the bits and moved them to the bottom ... so display them
27469 */
27470 bsr_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27471 ett_ieee80211_buffer_status_report,
27472 NULL((void*)0), "Buffer Status Report: 0x%08x", the_bits);
27473
27474 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_aci_bitmap, tvb,
27475 offset, 4, the_bits);
27476 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_delta_tid, tvb,
27477 offset, 4, the_bits);
27478 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_aci_high, tvb,
27479 offset, 4, the_bits);
27480 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_scaling_factor, tvb,
27481 offset, 4, the_bits);
27482 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_queue_size_high, tvb,
27483 offset, 4, the_bits);
27484 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_queue_size_all, tvb,
27485 offset, 4, the_bits);
27486}
27487
27488static void
27489dissect_a_control_uph(proto_tree *tree, tvbuff_t *tvb, int offset,
27490 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27491{
27492 proto_tree *uph_tree = NULL((void*)0);
27493 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000000FF;
27494
27495 /*
27496 * We isolated the bits and moved them to the bottom ... so display them
27497 */
27498 uph_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27499 ett_ieee80211_control_uph,
27500 NULL((void*)0), "UPH Control: 0x%02x", the_bits);
27501
27502 proto_tree_add_uint(uph_tree, hf_ieee80211_he_uph_ul_power_headroom, tvb,
27503 offset, 4, the_bits);
27504 proto_tree_add_boolean(uph_tree, hf_ieee80211_he_uph_ul_min_transmit_power_flag,
27505 tvb, offset, 4, the_bits);
27506 proto_tree_add_uint(uph_tree, hf_ieee80211_he_uph_reserved,
27507 tvb, offset, 4, the_bits);
27508}
27509
27510static void
27511dissect_a_control_bqr(proto_tree *tree, tvbuff_t *tvb, int offset,
27512 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27513{
27514 proto_tree *bqr_tree = NULL((void*)0);
27515 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FF;
27516
27517 /*
27518 * We isolated the bits and moved them to the bottom ... so display them
27519 */
27520 bqr_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27521 ett_ieee80211_buffer_control_bqr,
27522 NULL((void*)0), "BQR Control: 0x%04x", the_bits);
27523
27524 proto_tree_add_uint(bqr_tree, hf_ieee80211_he_btc_avail_chan, tvb,
27525 offset, 4, the_bits);
27526 proto_tree_add_uint(bqr_tree, hf_ieee80211_he_btc_reserved, tvb,
27527 offset, 4, the_bits);
27528}
27529
27530static void
27531dissect_a_control_cci(proto_tree *tree, tvbuff_t *tvb, int offset,
27532 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27533{
27534 proto_tree *cci_tree = NULL((void*)0);
27535 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000000FF;
27536
27537 /*
27538 * We isolated the bits and moved them to the bottom ... so display them
27539 */
27540 cci_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27541 ett_ieee80211_control_cci,
27542 NULL((void*)0), "Command and status: 0x%02x", the_bits);
27543
27544 proto_tree_add_boolean(cci_tree, hf_ieee80211_he_cci_ac_constraint, tvb,
27545 offset, 4, the_bits);
27546 proto_tree_add_boolean(cci_tree, hf_ieee80211_he_cci_rdg_more_ppdu, tvb,
27547 offset, 4, the_bits);
27548 proto_tree_add_boolean(cci_tree, hf_ieee80211_he_cci_sr_ppdu_indic, tvb,
27549 offset, 4, the_bits);
27550 proto_tree_add_uint(cci_tree, hf_ieee80211_he_cci_reserved, tvb,
27551 offset, 4, the_bits);
27552}
27553
27554static void
27555dissect_a_control_eht_om(proto_tree *tree, tvbuff_t *tvb, int offset,
27556 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27557{
27558 proto_tree *eht_om_tree = NULL((void*)0);
27559 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x0000003F;
27560
27561 /*
27562 * We isolated the bits and moved them to the bottom ... so display them
27563 */
27564 eht_om_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27565 ett_ieee80211_control_eht_om,
27566 NULL((void*)0), "EHT operating mode: 0x%02x", the_bits);
27567 proto_tree_add_boolean(eht_om_tree, hf_ieee80211_he_eht_om_rx_nss_ext, tvb,
27568 offset, 4, the_bits);
27569 proto_tree_add_boolean(eht_om_tree, hf_ieee80211_he_eht_om_chan_w_ext, tvb,
27570 offset, 4, the_bits);
27571 proto_tree_add_boolean(eht_om_tree, hf_ieee80211_he_eht_om_tx_nsts_ext, tvb,
27572 offset, 4, the_bits);
27573 proto_tree_add_uint(eht_om_tree, hf_ieee80211_he_eht_om_reserved, tvb,
27574 offset, 4, the_bits);
27575
27576}
27577
27578static void
27579dissect_a_control_srs(proto_tree *tree, tvbuff_t *tvb, int offset,
27580 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27581{
27582 proto_tree *srs_tree = NULL((void*)0);
27583 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000003FF;
27584
27585 srs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27586 ett_ieee80211_control_srs,
27587 NULL((void*)0), "Simple response scheduling: 0x%02x",
27588 the_bits);
27589 proto_tree_add_uint(srs_tree, hf_ieee80211_he_srs_ppdu_resp_dur, tvb,
27590 offset, 4, the_bits);
27591 proto_tree_add_uint(srs_tree, hf_ieee80211_he_srs_reserved, tvb, offset, 4,
27592 the_bits);
27593}
27594
27595static void
27596dissect_a_control_aar(proto_tree *tree, tvbuff_t *tvb, int offset,
27597 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27598{
27599 proto_tree *aar_tree = NULL((void*)0);
27600 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000FFFFF;
27601
27602 aar_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27603 ett_ieee80211_control_aar,
27604 NULL((void*)0), "AP assistance request: 0x%02x",
27605 the_bits);
27606 proto_tree_add_uint(aar_tree, hf_ieee80211_he_aar_assisted_ap_bitmap, tvb,
27607 offset, 4, the_bits);
27608 proto_tree_add_uint(aar_tree, hf_ieee80211_he_aar_reserved, tvb, offset, 4,
27609 the_bits);
27610}
27611
27612static void
27613dissect_ht_control(packet_info* pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
27614{
27615 proto_item *ti;
27616 proto_tree *htc_tree, *lac_subtree, *mfb_subtree;
27617 uint32_t htc;
27618 bool_Bool is_s1g = sta_is_s1g(pinfo);
27619
27620 htc = tvb_get_letohl(tvb, offset);
27621
27622 ti = proto_tree_add_item(tree, hf_ieee80211_htc, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27623 htc_tree = proto_item_add_subtree(ti, ett_htc_tree);
27624
27625 /* Check the HT vs. VHT bit. */
27626 proto_tree_add_item(htc_tree, hf_ieee80211_htc_vht, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27627 if (htc & HTC_VHT0x00000001) {
27628 /* VHT or HE */
27629 proto_tree_add_item(htc_tree, hf_ieee80211_htc_he, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27630 if (htc & HTC_HE0x00000002) {
27631 /*
27632 * We have a 30-bit field, of which the first is a 4-bit Control ID which
27633 * determines how the rest is handled. There can be multiple fields.
27634 */
27635 proto_tree *a_control_tree = NULL((void*)0);
27636 proto_item *pi = NULL((void*)0);
27637 uint8_t start_bit_offset = 2;
27638
27639 a_control_tree = proto_tree_add_subtree_format(htc_tree, tvb, offset, 4,
27640 ett_htc_he_a_control, NULL((void*)0),
27641 "Aggregate Control: 0x%0x", htc >> 2);
27642 while (start_bit_offset < 32) {
27643 /* No enough space for Control ID */
27644 if (start_bit_offset >= 28) {
27645 dissect_a_control_padding(a_control_tree, tvb, offset, htc,
27646 start_bit_offset);
27647 break;
27648 }
27649 uint8_t control_id = (htc >> start_bit_offset) & 0x0F;
27650 start_bit_offset += 4;
27651 if (control_id != 0 || start_bit_offset == 6) {
27652 pi = proto_tree_add_uint(a_control_tree, hf_ieee80211_htc_he_ctrl_id,
27653 tvb, offset, 4, control_id);
27654 proto_item_append_text(pi, ": %s",
27655 val_to_str(pinfo->pool, control_id, a_control_control_id_vals,
27656 "Reserved (%u)"));
27657 }
27658 if (start_bit_offset > 31) {
27659 expert_add_info(pinfo, a_control_tree, &ei_ieee80211_invalid_control_word);
27660 break;
27661 }
27662 switch (control_id) {
27663 case A_CONTROL_TRS0:
27664 /*
27665 * Padding looks like TRS ... so distinguish. If there are not
27666 * enough bits left it must be padding
27667 */
27668 if (start_bit_offset == 6)
27669 dissect_a_control_trs(a_control_tree, tvb, offset, htc,
27670 start_bit_offset);
27671 else
27672 dissect_a_control_padding(a_control_tree, tvb, offset, htc,
27673 start_bit_offset - 4);
27674 start_bit_offset += 26;
27675 break;
27676 case A_CONTROL_OM1:
27677 dissect_a_control_om(a_control_tree, tvb, offset, htc,
27678 start_bit_offset);
27679 start_bit_offset += 12;
27680 break;
27681 case A_CONTROL_HLA2:
27682 dissect_a_control_hla(a_control_tree, tvb, offset, htc,
27683 start_bit_offset);
27684 start_bit_offset += 26;
27685 break;
27686 case A_CONTROL_BSR3:
27687 dissect_a_control_bsr(a_control_tree, tvb, offset, htc,
27688 start_bit_offset);
27689 start_bit_offset += 26;
27690 break;
27691 case A_CONTROL_UPH4:
27692 dissect_a_control_uph(a_control_tree, tvb, offset, htc,
27693 start_bit_offset);
27694 start_bit_offset += 8;
27695 break;
27696 case A_CONTROL_BQR5:
27697 dissect_a_control_bqr(a_control_tree, tvb, offset, htc,
27698 start_bit_offset);
27699 start_bit_offset += 10;
27700 break;
27701 case A_CONTROL_CCI6:
27702 dissect_a_control_cci(a_control_tree, tvb, offset, htc,
27703 start_bit_offset);
27704 start_bit_offset += 8;
27705 break;
27706 case A_CONTROL_EHT_OM7:
27707 dissect_a_control_eht_om(a_control_tree, tvb, offset, htc,
27708 start_bit_offset);
27709 start_bit_offset += 6;
27710 break;
27711 case A_CONTROL_SRS8:
27712 dissect_a_control_srs(a_control_tree, tvb, offset, htc,
27713 start_bit_offset);
27714 start_bit_offset += 10;
27715 break;
27716 case A_CONTROL_AAR9:
27717 dissect_a_control_aar(a_control_tree, tvb, offset, htc,
27718 start_bit_offset);
27719 start_bit_offset += 20;
27720 break;
27721 case A_CONTROL_ONES15:
27722 if (start_bit_offset == 6) {
27723 dissect_a_control_ones(a_control_tree, tvb, offset, htc,
27724 start_bit_offset);
27725 } else {
27726 expert_add_info(pinfo, a_control_tree, &ei_ieee80211_invalid_control_length);
27727 }
27728 start_bit_offset += 26;
27729 break;
27730 default:
27731 expert_add_info(pinfo, a_control_tree, &ei_ieee80211_invalid_control_id);
27732 start_bit_offset += 32; /* Abandon */
27733 break;
27734 }
27735 }
27736 } else {
27737 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mrq, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27738 if (!(htc & HTC_UNSOLICITED_MFB0x20000000)) {
27739 if (htc & HTC_MRQ0x00000004) {
27740 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27741 } else {
27742 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27743 }
27744 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfsi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27745 } else {
27746 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))((((((htc) >> 9) & 0x7FFF)) & 0x7F) == 0x7F)) {
27747 proto_tree_add_item(htc_tree, hf_ieee80211_htc_compressed_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27748 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ppdu_stbc_encoded, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27749 } else {
27750 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27751 }
27752 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_l, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27753 }
27754 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27755 mfb_subtree = proto_item_add_subtree(ti, ett_mfb_subtree);
27756 if (is_s1g) {
27757 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_s1g_num_sts, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27758 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_s1g_vht_mcs, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27759 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_s1g_bw, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27760 } else {
27761 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_num_sts, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27762 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_vht_mcs, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27763 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_bw, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27764 }
27765 /* This should be converted to dB by adding 22 */
27766 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_snr, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27767 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))((((((htc) >> 9) & 0x7FFF)) & 0x7F) == 0x7F)) {
27768 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_h, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27769 proto_tree_add_item(htc_tree, hf_ieee80211_htc_coding_type, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27770 proto_tree_add_item(htc_tree, hf_ieee80211_htc_fb_tx_type, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27771 } else {
27772 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved3, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27773 }
27774 proto_tree_add_item(htc_tree, hf_ieee80211_htc_unsolicited_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27775 }
27776 } else {
27777 /* Start: Link Adaptation Control */
27778 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_ht_lac, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27779 lac_subtree = proto_item_add_subtree(ti, ett_lac_subtree);
27780 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27781
27782 if (HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE)) {
27783 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27784 } else {
27785 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27786 if (HTC_LAC_MAI_MRQ(htc)(((((htc) >> 2) & 0xF)) & 0x1)) {
27787 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27788 } else {
27789 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27790 }
27791 }
27792
27793 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27794
27795 if (HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE)) {
27796 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27797 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27798 } else {
27799 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27800 }
27801 /* End: Link Adaptation Control */
27802
27803 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27804 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27805 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27806 proto_tree_add_item(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27807
27808 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27809 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27810 }
27811
27812 /*
27813 * These bits are part of the Aggregate Control field for 802.11ax
27814 */
27815 if (!(htc & HTC_HE0x00000002)) {
27816 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27817 proto_tree_add_item(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27818 }
27819
27820 /* offset += 2; */
27821}
27822
27823#define IEEE80211_COMMON_OPT_BROKEN_FC0x00000001 0x00000001
27824#define IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002 0x00000002
27825#define IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004 0x00000004
27826
27827static void
27828dissect_frame_control(proto_tree *tree, tvbuff_t *tvb, uint32_t option_flags,
27829 uint32_t offset, packet_info *pinfo, bool_Bool isDMG)
27830{
27831 uint16_t fcf, flags, frame_type_subtype;
27832 proto_tree *fc_tree, *flag_tree;
27833 proto_item *fc_item, *flag_item, *hidden_item, *ti;
27834 uint32_t swap_offset = 0;
27835 bool_Bool is_s1g = sta_is_s1g(pinfo);
27836 bool_Bool s1g_has_protected_htc_order;
27837
27838 fcf = FETCH_FCF(offset)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, offset)) >> 8) | (guint16
) ((guint16) (tvb_get_letohs(tvb, offset)) << 8)))) : tvb_get_letohs
(tvb, offset))
;
27839
27840 flags = FCF_FLAGS(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))
;
27841 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
;
27842
27843 /* Swap offset... */
27844 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001)
27845 {
27846 swap_offset += 1;
27847 }
27848
27849 proto_tree_add_uint(tree, hf_ieee80211_fc_frame_type_subtype, tvb, offset + swap_offset, 1, frame_type_subtype);
27850
27851 fc_item = proto_tree_add_item(tree, hf_ieee80211_fc_field, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
27852
27853 fc_tree = proto_item_add_subtree(fc_item, ett_fc_tree);
27854
27855 /* at this point, we can permanently fix the offset, so that it will be used to parse the fcf first 8 bits */
27856 offset += swap_offset;
27857
27858 proto_tree_add_item(fc_tree, hf_ieee80211_fc_proto_version, tvb, offset, 1, ENC_NA0x00000000);
27859 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_type, tvb, offset, 1, ENC_NA0x00000000);
27860 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_subtype, tvb, offset, 1, ENC_NA0x00000000);
27861 /* Changing control frame extension for extension frames */
27862 if(IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 1) {
27863 proto_tree_add_uint(fc_tree, hf_ieee80211_fc_frame_extension, tvb, offset, 1, FCF_FRAME_EXTENSION(fcf)(((fcf) & 0xF00) >> 8));
27864 }
27865
27866 /* Reswap offset...*/
27867 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001)
27868 {
27869 offset -= 1;
27870 proto_item_append_text(fc_item, "(Swapped)");
27871 } else {
27872 offset += 1;
27873 }
27874
27875 /*
27876 * S1G has a different format in the flags portion.
27877 */
27878 if (frame_type_subtype == EXTENSION_S1G_BEACON0x31) {
27879 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_next_tbtt_present, tvb,
27880 offset, 1, ENC_NA0x00000000);
27881 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_compressed_ssid_present,
27882 tvb, offset, 1, ENC_NA0x00000000);
27883 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_ano_present, tvb,
27884 offset, 1, ENC_NA0x00000000);
27885 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_bss_bw, tvb, offset, 1,
27886 ENC_NA0x00000000);
27887 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_security, tvb, offset, 1,
27888 ENC_NA0x00000000);
27889 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_ap_pm, tvb, offset, 1,
27890 ENC_NA0x00000000);
27891
27892 return;
27893 }
27894
27895 /* Flags */
27896 flag_item = proto_tree_add_item(fc_tree, hf_ieee80211_fc_flags, tvb, offset, 1, ENC_NA0x00000000);
27897 flag_tree = proto_item_add_subtree(flag_item, ett_proto_flags);
27898 if (is_s1g && FCF_FRAME_TYPE(fcf)(((fcf) & 0xC) >> 2) == CONTROL_FRAME0x01) {
27899 proto_tree_add_item(flag_tree, hf_ieee80211_fc_s1g_bw_indication, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27900 proto_tree_add_item(flag_tree, hf_ieee80211_fc_s1g_dynamic_indication, tvb, offset, 1, ENC_NA0x00000000);
27901 } else if(IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 0) {
27902 /* Changing control frame flags for extension frames */
27903 proto_tree_add_item(flag_tree, hf_ieee80211_fc_data_ds, tvb, offset, 1, ENC_NA0x00000000);
27904 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_to_ds, tvb, offset, 1, ENC_NA0x00000000);
27905 proto_item_set_hidden(hidden_item);
27906 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_from_ds, tvb, offset, 1, ENC_NA0x00000000);
27907 proto_item_set_hidden(hidden_item);
27908 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_frag, tvb, offset, 1, ENC_NA0x00000000);
27909 ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_retry, tvb, offset, 1, ENC_NA0x00000000);
27910 if( IS_RETRY(flags)((flags) & 0x08) )
27911 {
27912 expert_add_info(pinfo, ti, &ei_ieee80211_fc_retry);
27913 wlan_stats.fc_retry = 1;
27914 }
27915 }
27916 proto_tree_add_item(flag_tree, hf_ieee80211_fc_pwr_mgt, tvb, offset, 1, ENC_NA0x00000000);
27917 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_data, tvb, offset, 1, ENC_NA0x00000000);
27918 /* Changing control frame flags for extension frames */
27919 /* TODO: add support for S1G subtypes 3 and 10 fields: flow control, next TWT
27920 info present, more data, poll type */
27921 /* All S1G frames have the Protected Frame and +HTC/Order subfields except for
27922 Control frames with subtypes 3 and 10 */
27923 s1g_has_protected_htc_order = is_s1g && (FCF_FRAME_TYPE(fcf)(((fcf) & 0xC) >> 2) != CONTROL_FRAME0x01
27924 || (FCF_FRAME_SUBTYPE(fcf)(((fcf) & 0xF0) >> 4) != 3 && FCF_FRAME_SUBTYPE(fcf)(((fcf) & 0xF0) >> 4) != 10));
27925 if (s1g_has_protected_htc_order || (!is_s1g && IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 0)) {
27926 proto_tree_add_item(flag_tree, hf_ieee80211_fc_protected, tvb, offset, 1, ENC_NA0x00000000);
27927 }
27928 if (s1g_has_protected_htc_order || !is_s1g) {
27929 ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_order, tvb, offset, 1, ENC_NA0x00000000);
27930 if (option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) {
27931 if (DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
27932 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
27933 /*
27934 * IEEE 802.11-2016 section 9.2.4.1.10 "+HTC/Order subfield" says:
27935 *
27936 * The +HTC/Order subfield is 1 bit in length. It is used for two
27937 * purposes:
27938 *
27939 * -- It is set to 1 in a non-QoS Data frame transmitted by a
27940 * non-QoS STA to indicate that the frame contains an MSDU,
27941 * or fragment thereof, that is being transferred using the
27942 * StrictlyOrdered service class.
27943 *
27944 * -- It is set to 1 in a QoS Data or Management frame transmitted
27945 * with a value of HT_GF, HT_MF, or VHT for the FORMAT parameter
27946 * of the TXVECTOR to indicate that the frame contains an
27947 * HT Control field.
27948 *
27949 * Otherwise, the +HTC/Order subfield is set to 0.
27950 *
27951 * NOTE -- The +HTC/Order subfield is always set to 0 for frames
27952 * transmitted by a DMG STA.
27953 *
27954 * and 802.11ax drafts appear to say that the +HTC/Order flag, for
27955 * QoS frames, also indicates that there's an HT Control field.
27956 *
27957 * For DMG frames, we flag this as an error.
27958 *
27959 * XXX - as I read the above, this shouldn't be set except for
27960 * HT, VHT, or HE PHYs; however, some QoS frames appear to have
27961 * it set, and have an HT Control field, even though they don't
27962 * have HT/VHT/HE radiotap fields. That might be because the
27963 * code that provided the header didn't provide those radiotap
27964 * fields, or because there is no radiotap header, meaning that
27965 * they might still be HT/VHT/HE frames, so we don't report it
27966 * as an error.
27967 */
27968 if (isDMG) {
27969 /*
27970 * DMG, so flag this as having +HTC/Order set, as it's not supposed
27971 * to be set.
27972 */
27973 expert_add_info(pinfo, ti, &ei_ieee80211_htc_in_dmg_packet);
27974 }
27975 }
27976 }
27977 }
27978 }
27979}
27980
27981static void
27982dissect_durid(proto_tree *hdr_tree, tvbuff_t *tvb, uint16_t fts, int offset)
27983{
27984 uint16_t durid = tvb_get_letohs(tvb, offset);
27985
27986 if (durid < 0x8000) {
27987 proto_tree_add_uint_format_value(hdr_tree, hf_ieee80211_did_duration, tvb,
27988 offset, 2, durid, "%u microseconds", durid);
27989 } else if (((durid & 0xC000) == 0xC000) &&
27990 ((durid & 0x3FFF) > 0) && ((durid & 0x3FFF) <= 2007) &&
27991 (fts == CTRL_PS_POLL0x1A)) {
27992 proto_tree_add_item(hdr_tree, hf_ieee80211_assoc_id, tvb, offset, 2,
27993 ENC_LITTLE_ENDIAN0x80000000);
27994 } else if (durid == 0x8000) {
27995 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
27996 offset, 2, durid, "Duration/ID: %u", durid);
27997 } else {
27998 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
27999 offset, 2, durid, "Duration/ID: %u (reserved)", durid & 0x3FFF);
28000 }
28001}
28002
28003
28004static void
28005dissect_vendor_ie_ht(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
28006 unsigned offset, proto_item *item, proto_item *ti_len, int tag_len)
28007{
28008
28009 uint8_t type;
28010
28011 proto_tree_add_item(tree, hf_ieee80211_ht_pren_type, tvb, offset, 1, ENC_NA0x00000000);
28012 type = tvb_get_uint8(tvb, offset);
28013 offset += 1;
28014 tag_len -= 1;
28015
28016
28017 switch(type){
28018 case 51:
28019 dissect_ht_capability_ie_common(tvb, pinfo, tree, offset, tag_len, ti_len, true1);
28020 proto_item_append_text(item, ": HT Capabilities (802.11n D1.10)");
28021 break;
28022
28023 case 52:
28024 dissect_ht_info_ie_1_0(tvb, pinfo, tree, offset, tag_len, ti_len);
28025 proto_item_append_text(item, ": HT Additional Capabilities (802.11n D1.00)");
28026 break;
28027
28028 default:
28029 proto_tree_add_item(tree, hf_ieee80211_ht_pren_unknown, tvb, offset, tag_len, ENC_NA0x00000000);
28030 break;
28031 }
28032
28033}
28034
28035static int
28036dissect_interworking(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
28037{
28038 int tag_len = tvb_reported_length(tvb);
28039 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
28040 int offset = 0;
28041 static int * const ieee80211_tag_interworking[] = {
28042 &hf_ieee80211_tag_interworking_access_network_type,
28043 &hf_ieee80211_tag_interworking_internet,
28044 &hf_ieee80211_tag_interworking_asra,
28045 &hf_ieee80211_tag_interworking_esr,
28046 &hf_ieee80211_tag_interworking_uesa,
28047 NULL((void*)0)
28048 };
28049
28050 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_interworking, ENC_LITTLE_ENDIAN0x80000000);
28051 offset += 1;
28052
28053 if ((tag_len == (1 + 2)) || (tag_len == (1 + 2 + 6))) {
28054 dissect_venue_info(tree, tvb, offset);
28055 offset += 2;
28056 }
28057
28058 if ((tag_len == (1 + 6)) || (tag_len == (1 + 2 + 6))) {
28059 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_hessid,
28060 tvb, offset, 6, ENC_NA0x00000000);
28061 offset += 6;
28062 }
28063
28064 if ((tag_len != 1) && (tag_len != (1 + 2)) && (tag_len != (1 + 6)) && (tag_len != (1 + 2 + 6))) {
28065 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
28066 "Invalid Interworking element length");
28067 }
28068
28069 return offset;
28070}
28071
28072static int
28073dissect_qos_map_set(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
28074{
28075 int tag_len = tvb_reported_length(tvb);
28076 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
28077 int offset = 0;
28078 uint8_t left;
28079 uint8_t val, val2;
28080 int i;
28081 proto_item *dscp_item, *item;
28082 proto_tree *dscp_tree;
28083
28084 if (tag_len < 16 || tag_len & 1) {
28085 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_bad_length,
28086 "Truncated QoS Map Set element");
28087 return tvb_captured_length(tvb);
28088 }
28089
28090 left = tag_len - 16;
28091 while (left >= 2) {
28092 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_dscp_exc,
28093 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28094 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
28095
28096 item = proto_tree_add_item(dscp_tree,
28097 hf_ieee80211_tag_qos_map_set_dscp_exc_val,
28098 tvb, offset, 1, ENC_NA0x00000000);
28099 val = tvb_get_uint8(tvb, offset);
28100 if (val > 63 && val != 255) {
28101 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28102 "Invalid DSCP Value");
28103 }
28104 offset++;
28105
28106 item = proto_tree_add_item(dscp_tree,
28107 hf_ieee80211_tag_qos_map_set_dscp_exc_up,
28108 tvb, offset, 1, ENC_NA0x00000000);
28109 val2 = tvb_get_uint8(tvb, offset);
28110 if (val2 > 7) {
28111 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28112 "Invalid User Priority");
28113 }
28114 offset++;
28115
28116 proto_item_append_text(dscp_item, " (0x%02x: UP %u)", val, val2);
28117
28118 left -= 2;
28119 }
28120
28121 for (i = 0; i < 8; i++) {
28122 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_range,
28123 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28124 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
28125
28126 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_low,
28127 tvb, offset, 1, ENC_NA0x00000000);
28128 val = tvb_get_uint8(tvb, offset);
28129 if (val > 63 && val != 255) {
28130 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28131 "Invalid DSCP Value");
28132 }
28133 offset++;
28134
28135 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_high,
28136 tvb, offset, 1, ENC_NA0x00000000);
28137 val2 = tvb_get_uint8(tvb, offset);
28138 if ((val2 > 63 && val2 != 255) || val2 < val ||
28139 (val == 255 && val2 != 255) || (val != 255 && val2 == 255)) {
28140 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28141 "Invalid DSCP Value");
28142 }
28143 offset++;
28144
28145 if (val == 255 && val2 == 255) {
28146 proto_item_append_text(dscp_item, " (UP %u not in use)", i);
28147 } else {
28148 proto_item_append_text(dscp_item, " (0x%02x-0x%02x: UP %u)",
28149 val, val2, i);
28150 }
28151 }
28152
28153 return tvb_captured_length(tvb);
28154}
28155
28156static int
28157dissect_roaming_consortium(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
28158{
28159 int tag_len = tvb_reported_length(tvb);
28160 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
28161 int offset = 0;
28162 proto_item* item;
28163 uint8_t oi_lens, oi1_len, oi2_len;
28164
28165 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
28166 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28167 offset += 1;
28168
28169 oi_lens = tvb_get_uint8(tvb, offset);
28170 oi1_len = oi_lens & 0x0f;
28171 oi2_len = (oi_lens & 0xf0) >> 4;
28172 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1_len,
28173 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28174 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2_len,
28175 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28176 offset += 1;
28177
28178 if (offset + oi1_len > tag_len) {
28179 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
28180 "Truncated Roaming Consortium element");
28181 return tvb_captured_length(tvb);
28182 }
28183
28184 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1,
28185 tvb, offset, oi1_len, ENC_NA0x00000000);
28186 add_manuf(item, tvb, offset);
28187 offset += oi1_len;
28188
28189 if (offset + oi2_len > tag_len) {
28190 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
28191 "Truncated Roaming Consortium element");
28192 return tvb_captured_length(tvb);
28193 }
28194
28195 if (oi2_len > 0) {
28196 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2,
28197 tvb, offset, oi2_len, ENC_NA0x00000000);
28198 add_manuf(item, tvb, offset);
28199 offset += oi2_len;
28200 }
28201
28202 if (tag_len > offset) {
28203 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi3,
28204 tvb, offset, tag_len - offset, ENC_NA0x00000000);
28205 }
28206
28207 return tvb_captured_length(tvb);
28208}
28209
28210static void
28211dissect_extended_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
28212{
28213 if (len < 2) {
28214 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
28215 "Extended Request must be at least 2 octets long");
28216 return;
28217 }
28218
28219 proto_tree_add_item(tree, hf_ieee80211_tag_extended_request_id, tvb, offset, 1, ENC_NA0x00000000);
28220 offset += 1;
28221 len -= 1;
28222
28223 while (len--) {
28224 proto_tree_add_item(tree, hf_ieee80211_tag_extended_request_extension, tvb, offset, 1, ENC_NA0x00000000);
28225 offset += 1;
28226 }
28227}
28228
28229static void
28230dissect_he_6ghz_band_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
28231{
28232 if (len != 2) {
28233 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
28234 "HE 6 GHz Band Capabilities must be at 2 octets long");
28235 return;
28236 }
28237
28238 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_he_6ghz_cap_inf,
28239 ett_tag_he_6ghz_cap_inf_tree,
28240 ieee80211_tag_he_6ghz_cap_inf,
28241 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
28242}
28243
28244static void
28245dissect_secure_ltf_parameters(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
28246 proto_tree *tree, int offset, int len _U___attribute__((unused)))
28247{
28248 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_params_counter, tvb,
28249 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
28250 offset += 6;
28251
28252 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_generation_sac, tvb,
28253 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28254 offset += 2;
28255
28256 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_management_sac, tvb,
28257 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28258 offset += 2;
28259
28260 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_result_ltf_ofs, tvb,
28261 offset, 1, ENC_NA0x00000000);
28262}
28263
28264static void
28265dissect_ista_availability_window(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, int offset, int len)
28266{
28267 uint16_t count = tvb_get_letohs(tvb, offset) & 0x1FF;
28268 char avail_string[513];
28269 char pad_string[8];
28270 int i = 0, j;
28271 int avail_bits_offset;
28272 int8_t bits;
28273
28274 memset(avail_string, 0x0, sizeof(avail_string));
28275 memset(pad_string, 0x0, sizeof(pad_string));
28276
28277 /* These are at the same level as the avail bits */
28278 proto_tree_add_item(tree, hf_ieee80211_ftm_ista_availability_count,
28279 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28280 proto_tree_add_item(tree, hf_ieee80211_ftm_ista_availability_reserved,
28281 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28282 offset += 2;
28283
28284 avail_bits_offset = offset;
28285
28286 /* Now, extract count bits and set up the string 8-bits at a time */
28287 for (i = 1; i <= (count / 8); i++) {
28288 bits = tvb_get_uint8(tvb, offset);
28289
28290 for (j = 0; j < 8; j++) {
28291 avail_string[(i - 1) * 8 + j] = (bits & 0x01) ? '1' : '0';
28292 bits = bits >> 1;
28293 }
28294
28295 offset += 1;
28296 }
28297
28298 avail_string[i * 8] = 0;
28299
28300 if (count % 8) {
28301 /* Deal with the remaining bits */
28302 bits = tvb_get_uint8(tvb, offset);
28303
28304 for (j = (i - 1) * 8; j < count; j++) {
28305 avail_string[j] = (bits & 0x01) ? '1' : '0';
28306 bits = bits >> 1;
28307 }
28308
28309 avail_string[j] = 0;
28310
28311 /* Deal with the padding */
28312 for (j = 0; j < 8 - (count % 8); j++) {
28313 pad_string[j] = (bits & 0x01) ? '1' : '0';
28314 bits = bits >> 1;
28315 }
28316
28317 pad_string[j] = 0;
28318 }
28319
28320 proto_tree_add_string(tree, hf_ieee80211_ftm_ista_avail_bits, tvb,
28321 avail_bits_offset, (count + 7) / 8, avail_string);
28322
28323 if (((len - 2) * 8) != count) {
28324 proto_tree_add_string(tree, hf_ieee80211_ftm_ista_avail_pad, tvb,
28325 offset, 1, pad_string);
28326 }
28327}
28328
28329static int * const rsta_avail_info_header[] = {
28330 &hf_ieee80211_ftm_rsta_count,
28331 &hf_ieee80211_ftm_rsta_avail_window_bcast_fmt,
28332 NULL((void*)0)
28333};
28334
28335static int * const rsta_availability_subfield_hdr1[] = {
28336 &hf_ieee80211_ftm_rsta_partial_tsf_timer1,
28337 &hf_ieee80211_ftm_rsta_duration1,
28338 &hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved1,
28339 &hf_ieee80211_ftm_rsta_periodicity1,
28340 NULL((void*)0)
28341};
28342
28343static int * const rsta_availability_subfield_hdr2[] = {
28344 &hf_ieee80211_ftm_rsta_partial_tsf_timer,
28345 &hf_ieee80211_ftm_rsta_duration,
28346 &hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved,
28347 &hf_ieee80211_ftm_rsta_periodicity,
28348 &hf_ieee80211_ftm_rsta_format_and_bandwidth,
28349 &hf_ieee80211_ftm_rsta_reserved,
28350 NULL((void*)0)
28351};
28352
28353static void
28354dissect_rsta_availability_window(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
28355 proto_tree *tree, int offset, int len _U___attribute__((unused)))
28356{
28357 uint8_t count = tvb_get_uint8(tvb, offset) &0x7F;
28358 int i;
28359
28360 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ftm_rsta_header,
28361 ett_rsta_avail_header, rsta_avail_info_header, ENC_NA0x00000000);
28362
28363 offset += 1;
28364
28365 for (i = 0; i < count; i++) {
28366 proto_tree *subfield_tree = NULL((void*)0);
28367 bool_Bool has_passive_ranging_params =
28368 (tvb_get_letohl(tvb, offset) >> 23) & 1;
28369
28370 subfield_tree = proto_tree_add_subtree_format(tree, tvb, offset,
28371 has_passive_ranging_params ? 5 : 4,
28372 ett_rsta_avail_tree, NULL((void*)0),
28373 "Availability Window Information %d",
28374 i);
28375 if (has_passive_ranging_params) {
28376 proto_tree_add_bitmask(subfield_tree, tvb, offset,
28377 hf_ieee80211_ftm_rsta_avail_subfield_long,
28378 ett_rsta_avail_subfield,
28379 rsta_availability_subfield_hdr2,
28380 ENC_LITTLE_ENDIAN0x80000000);
28381 offset += 5;
28382 } else {
28383 proto_tree_add_bitmask(subfield_tree, tvb, offset,
28384 hf_ieee80211_ftm_rsta_avail_subfield_short,
28385 ett_rsta_avail_subfield,
28386 rsta_availability_subfield_hdr1,
28387 ENC_LITTLE_ENDIAN0x80000000);
28388 offset += 4;
28389 }
28390 }
28391}
28392
28393/*
28394 * "Comeback after subfield shall not be present (ie, zero octets) in PASN
28395 * authentication frames from a non-AP STA."
28396 *
28397 * Attempt to figure out if the Comeback After field is present.
28398 */
28399#define PASN_COMEBACK_INFO_PRESENT0x01 0x01
28400#define PASN_GROUP_KEY_PRESENT0x02 0x02
28401
28402static bool_Bool
28403has_comeback_after(uint8_t flags, tvbuff_t *tvb, int offset, int len _U___attribute__((unused)))
28404{
28405 int tvb_left = tvb_captured_length_remaining(tvb, offset);
28406 bool_Bool comeback_after = false0;
28407 //int cookie_len = 0;
28408 int fixed_len = 0;
28409
28410 if (flags & PASN_GROUP_KEY_PRESENT0x02) { /* Group and Key present */
28411 fixed_len += 2;
28412 }
28413
28414 /*
28415 * If there is a comeback field and the comeback_after is present ...
28416 */
28417 if (flags & 0x01) {
28418 /* Check if the comeback_after field is there? */
28419 if (tvb_get_letohs(tvb, offset) <= (tvb_left - fixed_len)) {
28420 comeback_after = true1;
28421 }
28422 }
28423
28424 return comeback_after;
28425}
28426
28427static int * const pasn_params_fields[] = {
28428 &hf_ieee80211_tag_pasn_params_comeback_info_present,
28429 &hf_ieee80211_tag_pasn_params_group_and_key_present,
28430 &hf_ieee80211_tag_pasn_parameters_reserved,
28431 NULL((void*)0)
28432};
28433
28434static const range_string wrapped_data_fmt_rvals[] = {
28435 { 0, 0, "No wrapped data" },
28436 { 1, 1, "Fast BSS Transition Wrapped Data" },
28437 { 2, 2, "FILS Shared Key authentication without PFS Wrapped Data" },
28438 { 3, 3, "SAE Wrapped Data" },
28439 { 4, 255, "Reserved" },
28440 { 0, 0, NULL((void*)0) }
28441};
28442
28443static void
28444dissect_pasn_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
28445{
28446 int public_key_len = 0;
28447 unsigned pasn_control = tvb_get_uint8(tvb, offset);
28448
28449 if (len < 2) {
28450 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
28451 "PASN Parameters must be at least 2 octets long");
28452 return;
28453 }
28454
28455 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
28456 hf_ieee80211_tag_pasn_parameters_control,
28457 ett_pasn_parameters, pasn_params_fields,
28458 ENC_LITTLE_ENDIAN0x80000000,
28459 BMT_NO_FALSE0x04 | BMT_NO_INT0x02);
28460 offset += 1;
28461
28462 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_parameters_wrapped_fmt,
28463 tvb, offset, 1, ENC_NA0x00000000);
28464 offset += 1;
28465
28466 /*
28467 * If the Comeback field is present, it might not have a Comeback After
28468 * field. Use the following heuristic function to check.
28469 */
28470 if (pasn_control & PASN_COMEBACK_INFO_PRESENT0x01) {
28471 proto_tree *comeback_tree = NULL((void*)0);
28472 proto_item *cbi = NULL((void*)0);
28473 uint8_t cookie_len;
28474
28475 comeback_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
28476 ett_pasn_comeback_tree, &cbi, "Comeback field");
28477
28478 if (has_comeback_after(pasn_control, tvb, offset, len)) {
28479 proto_tree_add_item(comeback_tree, hf_ieee80211_tag_pasn_comeback_after,
28480 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28481 offset += 2;
28482 }
28483
28484 cookie_len = tvb_get_uint8(tvb, offset);
28485
28486 proto_tree_add_item(comeback_tree, hf_ieee80211_tag_pasn_cookie_length,
28487 tvb, offset, 1, ENC_NA0x00000000);
28488 offset += 1;
28489
28490 if (cookie_len) {
28491 proto_tree_add_item(comeback_tree, hf_ieee80211_tag_pasn_cookie,
28492 tvb, offset, cookie_len, ENC_NA0x00000000);
28493 offset += cookie_len;
28494 }
28495 }
28496
28497 if (pasn_control & PASN_GROUP_KEY_PRESENT0x02) {
28498 public_key_len = tvb_get_uint8(tvb, offset + 2);
28499
28500 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_finite_cyclic_group_id, tvb,
28501 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28502 offset += 2;
28503
28504 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_ephemeral_public_key_len,
28505 tvb, offset, 1, ENC_NA0x00000000);
28506 offset += 1;
28507
28508 if (public_key_len) {
28509 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_ephemeral_public_key, tvb,
28510 offset, public_key_len, ENC_NA0x00000000);
28511 }
28512 }
28513}
28514
28515static int * const sta_control_hdrs[] = {
28516 &hf_ieee80211_eht_profile_link_id,
28517 &hf_ieee80211_eht_profile_complete_profile,
28518 &hf_ieee80211_eht_profile_mac_address_present,
28519 &hf_ieee80211_eht_profile_beacon_interval_present,
28520 &hf_ieee80211_eht_profile_tsf_offset_present,
28521 &hf_ieee80211_eht_profile_dtim_info_present,
28522 &hf_ieee80211_eht_profile_nstr_link_pair_present,
28523 &hf_ieee80211_eht_profile_nstr_bitmap_size,
28524 &hf_ieee80211_eht_profile_bss_params_change_count_present,
28525 &hf_ieee80211_eht_profile_reserved,
28526 NULL((void*)0)
28527};
28528
28529static int * const probe_sta_control_hdrs[] = {
28530 &hf_ieee80211_eht_profile_link_id,
28531 &hf_ieee80211_eht_profile_complete_profile,
28532 &hf_ieee80211_eht_profile_probe_reserved,
28533 NULL((void*)0)
28534};
28535
28536static const range_string eht_reconfig_op_type_rvals[] = {
28537 { 0, 0, "AP Removal" },
28538 { 1, 1, "Operation Parameter Update" },
28539 { 2, 2, "Add Link" },
28540 { 3, 3, "Delete Link" },
28541 { 4, 15, "Reserved" },
28542 { 0, 0, NULL((void*)0) }
28543};
28544
28545static int * const reconfig_sta_control_hdrs[] = {
28546 &hf_ieee80211_eht_profile_link_id,
28547 &hf_ieee80211_eht_profile_complete_profile,
28548 &hf_ieee80211_eht_profile_mac_address_present,
28549 &hf_ieee80211_eht_profile_removal_timer_present,
28550 &hf_ieee80211_eht_profile_reconfig_operation_type,
28551 &hf_ieee80211_eht_profile_operation_para_present,
28552 &hf_ieee80211_eht_profile_reconfig_nstr_bitmap_size,
28553 &hf_ieee80211_eht_profile_reconfig_nstr_bitmap_present,
28554 &hf_ieee80211_eht_profile_reconfig_reserved,
28555 NULL((void*)0)
28556};
28557
28558static int * const prio_access_sta_control_hdrs[] = {
28559 &hf_ieee80211_eht_profile_link_id,
28560 &hf_ieee80211_eht_profile_prio_acc_reserved,
28561 NULL((void*)0)
28562};
28563
28564static int * const reconfig_presence_indi_hdrs[] = {
28565 &hf_ieee80211_eht_sta_profile_presence_indi_max_mpdu_length_present,
28566 &hf_ieee80211_eht_sta_profile_presence_indi_max_amsdu_length_present,
28567 &hf_ieee80211_eht_sta_profile_presence_indi_reserved,
28568 NULL((void*)0)
28569};
28570
28571static int * const reconfig_operation_para_info_hdrs[] = {
28572 &hf_ieee80211_eht_sta_profile_operation_para_info_max_mpdu_length,
28573 &hf_ieee80211_eht_sta_profile_operation_para_info_amsdu_length,
28574 &hf_ieee80211_eht_sta_profile_operation_para_info_pad,
28575 NULL((void*)0)
28576};
28577
28578/* Presence Bitmap in ML Control */
28579/* Basic */
28580#define EHT_LINK_ID0x01 0x01
28581#define EHT_BSS_PARAMS0x02 0x02
28582#define EHT_MEDIUM_SYNC0x04 0x04
28583#define EHT_EML_CAPA0x08 0x08
28584#define EHT_MLD_CAPA0x10 0x10
28585#define EHT_MLD_ID0x20 0x20
28586#define EHT_EXT_MLD_CAPA0x40 0x40
28587/* Probe */
28588#define EHT_PML_MLD_ID0x01 0x01
28589#define EHT_PML_MLD_MAC0x02 0x02
28590/* Reconf */
28591#define EHT_RECONF_MLD_MAC0x01 0x01
28592#define EHT_RECONF_EML_CAPA0x02 0x02
28593#define EHT_RECONF_MLD_CAPA0x04 0x04
28594#define EHT_RECONF_EXT_MLD_CAPA0x08 0x08
28595
28596#define BASIC_MULTI_LINK0 0
28597#define PROBE_MULTI_LINK1 1
28598#define RECONFIGURATION_MULTI_LINK2 2
28599#define TDLS_MULTI_LINK3 3
28600#define PRIORITY_ACCESS_MULTI_LINK4 4
28601
28602/* Bits from the STA Control field */
28603/* Basic */
28604#define STA_CTRL_LINK_ID0x000F 0x000F
28605#define STA_CTRL_COMPLETE_PROFILE0x0010 0x0010
28606#define STA_CTRL_MAC_ADDR_PRESENT0x0020 0x0020
28607#define STA_CTRL_BEACON_INT_PRESENT0x0040 0x0040
28608#define STA_CTRL_TSF_OFFSET_PRESENT0x0080 0x0080
28609#define STA_CTRL_DTIM_INFO_PRESENT0x0100 0x0100
28610#define STA_CTRL_NSTR_LINK_PAIR_PRESENT0x0200 0x0200
28611#define STA_CTRL_NSTR_BITMAP_SIZE0x0400 0x0400
28612#define STA_CTRL_BSS_PARAMS_CHANGE_CNT_PRESENT0x0800 0x0800
28613#define STA_CTRL_RESERVED0xF000 0xF000
28614
28615/* Reconf */
28616#define AP_REMOVAL_TIMER_PRESENT0x0040 0x0040
28617#define OPERATION_PARAMS_PRESENT0x0800 0x0800
28618#define RECONF_NSTR_BITMAP_SIZE0x1000 0x1000
28619#define RECONF_NSTR_BITMAP_PRESENT0x2000 0x2000
28620
28621static int
28622dissect_multi_link_per_sta(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
28623 proto_tree *tree,
28624 uint8_t multi_link_type,
28625 int *found_link_id)
28626{
28627 proto_tree *subelt_tree = NULL((void*)0), *sta_info_tree = NULL((void*)0);
28628 int offset = 0;
28629 int len = tvb_captured_length_remaining(tvb, offset);
28630 uint16_t sta_control = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
28631 uint8_t sta_info_len = 0;
28632 int start_offset = offset;
28633 uint8_t link_id;
28634
28635 subelt_tree = proto_tree_add_subtree(tree, tvb, offset, len,
28636 ett_eht_multi_link_per_sta,
28637 NULL((void*)0), "Per-STA Profile");
28638
28639 switch (multi_link_type) {
28640 case BASIC_MULTI_LINK0:
28641 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
28642 *found_link_id = link_id;
28643 proto_item_append_text(subelt_tree, ", Link-ID = %d", link_id);
28644
28645 proto_tree_add_bitmask(subelt_tree, tvb, offset,
28646 hf_ieee80211_eht_profile_sta_control,
28647 ett_eht_multi_link_sta_control,
28648 sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
28649 offset += 2;
28650
28651 /* Check the length of STA Info is 0 */
28652 if (offset >= start_offset + len) {
28653 return len;
28654 }
28655
28656 sta_info_len = tvb_get_uint8(tvb, offset);
28657 sta_info_tree = proto_tree_add_subtree(subelt_tree, tvb, offset,
28658 sta_info_len,
28659 ett_eht_multi_link_per_sta_info,
28660 NULL((void*)0), "STA Info");
28661
28662 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_len,
28663 tvb, offset, 1, ENC_NA0x00000000);
28664 offset += 1;
28665
28666 if (sta_control & STA_CTRL_MAC_ADDR_PRESENT0x0020) {
28667 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_mac,
28668 tvb, offset, 6, ENC_NA0x00000000);
28669 offset += 6;
28670 }
28671
28672 if (sta_control & STA_CTRL_BEACON_INT_PRESENT0x0040) {
28673 proto_tree_add_item(sta_info_tree,
28674 hf_ieee80211_eht_sta_profile_info_beacon,
28675 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28676 offset += 2;
28677 }
28678
28679 if (sta_control & STA_CTRL_TSF_OFFSET_PRESENT0x0080) {
28680 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_tsf_offset,
28681 tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
28682 offset += 8;
28683 }
28684
28685 if (sta_control & STA_CTRL_DTIM_INFO_PRESENT0x0100) {
28686 proto_tree * dtim_tree;
28687
28688 dtim_tree = proto_tree_add_subtree(sta_info_tree, tvb, offset, 2,
28689 ett_eht_multi_link_sta_dtim, NULL((void*)0), "DTIM Info");
28690
28691 proto_tree_add_item(dtim_tree,
28692 hf_ieee80211_eht_sta_profile_info_dtim_count,
28693 tvb, offset, 1, ENC_NA0x00000000);
28694 offset += 1;
28695
28696 proto_tree_add_item(dtim_tree,
28697 hf_ieee80211_eht_sta_profile_info_dtim_period,
28698 tvb, offset, 1, ENC_NA0x00000000);
28699 offset += 1;
28700 }
28701
28702 if (sta_control & STA_CTRL_NSTR_LINK_PAIR_PRESENT0x0200) {
28703 int bitmap_size = (sta_control & STA_CTRL_NSTR_BITMAP_SIZE0x0400) ? 2 : 1;
28704
28705 proto_tree_add_item(sta_info_tree,
28706 hf_ieee80211_eht_sta_profile_info_bitmap,
28707 tvb, offset, bitmap_size, ENC_NA0x00000000);
28708 offset += bitmap_size;
28709 }
28710
28711 if (sta_control & STA_CTRL_BSS_PARAMS_CHANGE_CNT_PRESENT0x0800) {
28712 proto_tree_add_item(sta_info_tree,
28713 hf_ieee80211_eht_sta_profile_bss_params_change_count,
28714 tvb, offset, 1, ENC_NA0x00000000);
28715 offset += 1;
28716 }
28717 break;
28718 case PROBE_MULTI_LINK1:
28719 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
28720 *found_link_id = link_id;
28721
28722 proto_tree_add_bitmask(subelt_tree, tvb, offset,
28723 hf_ieee80211_eht_profile_sta_control,
28724 ett_eht_multi_link_sta_control,
28725 probe_sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
28726 offset += 2;
28727
28728 /*
28729 * Now there will be some elements if complete profile is 0
28730 *
28731 * There can be one Request element, one Extended Request Element or
28732 * one of both.
28733 */
28734 if ((sta_control & STA_CTRL_COMPLETE_PROFILE0x0010) == 0) {
28735 bool_Bool seen_request = false0, seen_ext_request = false0;
28736
28737 while (tvb_captured_length_remaining(tvb, offset) >= 2) {
28738 static const uint8_t ids[] = { TAG_TSPEC13 };
28739 uint8_t elt_type = 0;
28740
28741 if (tvb_captured_length_remaining(tvb, offset) < 2) {
28742 expert_add_info_format(pinfo, subelt_tree,
28743 &ei_ieee80211_eht_invalid_multi_link,
28744 "Invalid Probe Request Multi-Link element "
28745 "STA Control field, should contain a Request "
28746 "element or an Extended Request element or both "
28747 "but there are insufficient bytes");
28748
28749 return len;
28750 }
28751
28752 elt_type = tvb_get_uint8(tvb, offset);
28753
28754 if ((elt_type != TAG_REQUEST10 && elt_type != TAG_ELEMENT_ID_EXTENSION255) ||
28755 (elt_type == TAG_ELEMENT_ID_EXTENSION255 &&
28756 (tvb_get_uint8(tvb, offset + 1) < 3 ||
28757 tvb_get_uint8(tvb, offset + 2) != ETAG_EXTENDED_REQUEST10))) {
28758 /* Add an expert Info */
28759
28760 expert_add_info_format(pinfo, subelt_tree,
28761 &ei_ieee80211_eht_invalid_multi_link,
28762 "Invalid Probe Request Multi-Link element "
28763 "STA Control field, should contain a Request "
28764 "element or an Extended Request element or both "
28765 "but it contains other elements or there are "
28766 "insufficient bytes for an extended element");
28767 return len;
28768 }
28769
28770 if (elt_type == TAG_REQUEST10) {
28771 if (!seen_request) {
28772 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, ids,
28773 G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
28774 seen_request = true1;
28775 } else {
28776 expert_add_info_format(pinfo, subelt_tree,
28777 &ei_ieee80211_eht_invalid_multi_link,
28778 "Invalid Probe Request Multi-Link element "
28779 "STA Control field. May only contain one Request "
28780 "element");
28781
28782 return len;
28783 }
28784 } else { /* It can only be a ETAG_EXTENDED_REQUEST */
28785 if (!seen_ext_request) {
28786 uint8_t ext_tag_len = tvb_get_uint8(tvb, offset + 1);
28787
28788 offset += 3;
28789 dissect_extended_request(tvb, pinfo, tree, offset, ext_tag_len);
28790
28791 offset += ext_tag_len;
28792 seen_ext_request = true1;
28793 } else {
28794 expert_add_info_format(pinfo, subelt_tree,
28795 &ei_ieee80211_eht_invalid_multi_link,
28796 "Invalid Probe Request Multi-Link element "
28797 "STA Control field. May only contain one Extended "
28798 "Request element");
28799
28800 return len;
28801 }
28802 }
28803 }
28804 }
28805 break;
28806 case RECONFIGURATION_MULTI_LINK2:
28807 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
28808 *found_link_id = link_id;
28809
28810 proto_tree_add_bitmask(subelt_tree, tvb, offset,
28811 hf_ieee80211_eht_profile_sta_control,
28812 ett_eht_multi_link_sta_control,
28813 reconfig_sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
28814 offset += 2;
28815
28816 /* Check the length of STA Info is 0 */
28817 if (offset >= start_offset + len) {
28818 return len;
28819 }
28820
28821 sta_info_len = tvb_get_uint8(tvb, offset);
28822 sta_info_tree = proto_tree_add_subtree(subelt_tree, tvb, offset, sta_info_len,
28823 ett_eht_multi_link_per_sta_info,
28824 NULL((void*)0), "STA Info");
28825
28826 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_len,
28827 tvb, offset, 1, ENC_NA0x00000000);
28828 offset += 1;
28829
28830 if (sta_control & STA_CTRL_MAC_ADDR_PRESENT0x0020) {
28831 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_mac,
28832 tvb, offset, 6, ENC_NA0x00000000);
28833 offset += 6;
28834 }
28835
28836 if (sta_control & AP_REMOVAL_TIMER_PRESENT0x0040) {
28837 proto_tree_add_item(sta_info_tree,
28838 hf_ieee80211_eht_sta_profile_removal_timer,
28839 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28840 offset += 2;
28841 }
28842
28843 if (sta_control & OPERATION_PARAMS_PRESENT0x0800) {
28844 proto_tree * oper_tree;
28845
28846 oper_tree = proto_tree_add_subtree(sta_info_tree, tvb, offset, 3,
28847 ett_eht_multi_link_reconf_oper_param, NULL((void*)0), "Operation Parameters");
28848
28849 proto_tree_add_bitmask_with_flags(oper_tree, tvb, offset,
28850 hf_ieee80211_eht_sta_profile_presence_indi,
28851 ett_eht_multi_link_reconfig_presence_indi,
28852 reconfig_presence_indi_hdrs, ENC_LITTLE_ENDIAN0x80000000,
28853 BMT_NO_APPEND0x01);
28854 offset += 1;
28855
28856 proto_tree_add_bitmask_with_flags(oper_tree, tvb, offset,
28857 hf_ieee80211_eht_sta_profile_operation_para_info,
28858 ett_eht_multi_link_reconfig_operation_para_info,
28859 reconfig_operation_para_info_hdrs, ENC_LITTLE_ENDIAN0x80000000,
28860 BMT_NO_APPEND0x01);
28861 offset += 2;
28862 }
28863
28864 if (sta_control & RECONF_NSTR_BITMAP_PRESENT0x2000) {
28865 int bitmap_size = (sta_control & RECONF_NSTR_BITMAP_SIZE0x1000) ? 2 : 1;
28866
28867 proto_tree_add_item(sta_info_tree,
28868 hf_ieee80211_eht_sta_profile_info_bitmap,
28869 tvb, offset, bitmap_size, ENC_NA0x00000000);
28870 offset += bitmap_size;
28871 }
28872 break;
28873 case TDLS_MULTI_LINK3:
28874 expert_add_info_format(pinfo, subelt_tree,
28875 &ei_ieee80211_eht_invalid_multi_link,
28876 "Invalid TDLS Multi-Link element. There should not "
28877 "be any Link Info fields.");
28878
28879 break;
28880 case PRIORITY_ACCESS_MULTI_LINK4:
28881 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
28882 *found_link_id = link_id;
28883 proto_tree_add_bitmask(subelt_tree, tvb, offset,
28884 hf_ieee80211_eht_profile_sta_control,
28885 ett_eht_multi_link_sta_control,
28886 prio_access_sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
28887 offset += 2;
28888
28889 /*
28890 * Could contain the EDCA Parameter Set elt or the MU EDCA Parameter Set
28891 * elt, or none.
28892 */
28893 if (tvb_captured_length_remaining(tvb, offset) > 2) {
28894
28895 }
28896 break;
28897 default:
28898 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 28898))
;
28899 break;
28900 }
28901
28902 // Sta Profile
28903 // Save HE capa settings
28904 {
28905 unsigned *p_channel_width_set =
28906 (unsigned *)p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan,
28907 HE_CHANNEL_WIDTH_KEY);
28908 unsigned channel_width_set = GPOINTER_TO_INT(p_channel_width_set)((gint) (glong) (p_channel_width_set));
28909 uint32_t ftype = GPOINTER_TO_UINT(p_get_proto_data(wmem_file_scope(),((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
28910 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
28911 FRAME_TYPE_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
;
28912
28913 int end_offset = start_offset + len;
28914 if (offset < end_offset) {
28915 /* Check CSA, EX CSA or MAX CST elements to skip parsing cap info */
28916 uint8_t elem = tvb_get_uint8(tvb, offset);
28917 uint8_t elem_len = tvb_get_uint8(tvb, offset+1);
28918 uint8_t ext_elem = 0;
28919 if (elem == TAG_ELEMENT_ID_EXTENSION255) {
28920 ext_elem = tvb_get_uint8(tvb, offset+2);
28921 }
28922 if (multi_link_type == PRIORITY_ACCESS_MULTI_LINK4) {
28923 } else if ((elem == TAG_CHANNEL_SWITCH_ANN37 && elem_len == 3) ||
28924 (elem == TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60 && elem_len == 4) ||
28925 (ext_elem == ETAG_MAX_CHANNEL_SWITCH_TIME52 && elem_len == 4)) {
28926 } else {
28927 offset += add_ff_cap_info(subelt_tree, tvb, pinfo, offset);
28928 }
28929 /*
28930 * If it is an association or re-association response, deal with the
28931 * status code.
28932 */
28933 if ((ftype == MGT_ASSOC_RESP0x01 || ftype == MGT_REASSOC_RESP0x03) &&
28934 multi_link_type == BASIC_MULTI_LINK0) {
28935 offset += add_ff_status_code(subelt_tree, tvb, pinfo, offset);
28936 }
28937 }
28938 while (offset < end_offset) {
28939 int tag_len = tvb_get_uint8(tvb, offset+1);
28940 if (offset + 1 + tag_len >= end_offset) {
28941 /* Detect wrong format to avoid from corrupting default_context */
28942 expert_add_info_format(pinfo, subelt_tree, &ei_ieee80211_eht_invalid_subelement,
28943 "Per-STA Profile subelements had wrong element/length");
28944 *found_link_id = -1;
28945 return len;
28946 }
28947 offset += add_tagged_field(pinfo, subelt_tree, tvb, offset, ftype, NULL((void*)0), 0, NULL((void*)0));
28948 }
28949
28950 // Set he capa settings back
28951 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, HE_CHANNEL_WIDTH_KEY,
28952 GINT_TO_POINTER(channel_width_set | (1<<31))((gpointer) (glong) (channel_width_set | (1<<31))));
28953 }
28954 return len;
28955}
28956
28957static const value_string multi_link_type_vals[] = {
28958 { BASIC_MULTI_LINK0, "Basic" },
28959 { PROBE_MULTI_LINK1, "Probe Request" },
28960 { RECONFIGURATION_MULTI_LINK2, "Reconfiguration" },
28961 { TDLS_MULTI_LINK3, "TDLS" },
28962 { PRIORITY_ACCESS_MULTI_LINK4, "Priority Access" },
28963 { 5, "Reserved" },
28964 { 6, "Reserved" },
28965 { 7, "Reserved" },
28966 { 0, NULL((void*)0) }
28967};
28968
28969static const range_string multi_link_sub_elt_string[] = {
28970 { 0, 0, "Per-STA Profile" },
28971 { 1, 220, "Reserved" },
28972 { 221, 221, "Vendor Specific" },
28973 { 222, 255, "Reserved" },
28974 { 0, 0, NULL((void*)0) }
28975};
28976
28977static int * const eht_link_id_hdrs[] = {
28978 &hf_ieee80211_eht_common_info_link_id,
28979 &hf_ieee80211_eht_common_info_link_id_reserved,
28980 NULL((void*)0)
28981};
28982
28983static int * const eht_medium_sync_delay_hdrs[] = {
28984 &hf_ieee80211_eht_common_info_medium_sync_duration,
28985 &hf_ieee80211_eht_common_info_medium_sync_threshold,
28986 &hf_ieee80211_eht_common_info_medium_sync_max_txops,
28987 NULL((void*)0)
28988};
28989
28990static int * const eht_eml_capabilities_hdrs[] = {
28991 &hf_ieee80211_eht_common_info_eml_capa_emlsr_support,
28992 &hf_ieee80211_eht_common_info_eml_capa_emlsr_padding_delay,
28993 &hf_ieee80211_eht_common_info_eml_capa_emlsr_transition_delay,
28994 &hf_ieee80211_eht_common_info_eml_capa_emlmr_support,
28995 &hf_ieee80211_eht_common_info_eml_capa_emlmr_delay,
28996 &hf_ieee80211_eht_common_info_eml_capa_transition_timeout,
28997 &hf_ieee80211_eht_common_info_eml_capa_reserved,
28998 NULL((void*)0)
28999};
29000
29001static int * const eht_mld_capabilities_hdrs[] = {
29002 &hf_ieee80211_eht_common_info_mld_max_simul_links,
29003 &hf_ieee80211_eht_common_info_mld_srs_support,
29004 &hf_ieee80211_eht_common_info_mld_tid_to_link_map_neg,
29005 &hf_ieee80211_eht_common_info_mld_freq_sep_for_str,
29006 &hf_ieee80211_eht_common_info_mld_aar_support,
29007 &hf_ieee80211_eht_common_info_mld_link_reconf_op_support,
29008 &hf_ieee80211_eht_common_info_mld_aligned_twt_support,
29009 &hf_ieee80211_eht_common_info_mld_reserved,
29010 NULL((void*)0)
29011};
29012
29013static int * const eht_ext_mld_capabilities_hdrs[] = {
29014 &hf_ieee80211_eht_common_info_ext_mld_op_update_support,
29015 &hf_ieee80211_eht_common_info_ext_mld_max_simul_links,
29016 &hf_ieee80211_eht_common_info_ext_mld_nstr_status_support,
29017 &hf_ieee80211_eht_common_info_ext_mld_emlsr_enable_one_link_support,
29018 &hf_ieee80211_eht_common_info_ext_mld_btm_mld_recom_aps_support,
29019 &hf_ieee80211_eht_common_info_ext_mld_reserved,
29020 NULL((void*)0)
29021};
29022
29023/*
29024 * Build a TVB containing the sub-elt. Offset will point to the subelt id in
29025 * tvb, and the sub-elt might span several fragments. Subsequent fragments
29026 * will have an id of 254.
29027 */
29028static tvbuff_t *
29029get_subelt_tvb(tvbuff_t *tvb, packet_info *pinfo, int offset, int *overhead)
29030{
29031 uint8_t subelt_len = tvb_get_uint8(tvb, offset + 1);
29032 tvbuff_t *tmp_tvb;
29033 int ohead = 0;
29034
29035 if (subelt_len == 255 &&
29036 tvb_captured_length_remaining(tvb, offset) > 259 &&
29037 tvb_get_uint8(tvb, offset + 255 + 2) == 0xfe) {
29038 tvbuff_t *tvb_comp;
29039 uint8_t frag_len;
29040
29041 tvb_comp = tvb_new_composite();
29042
29043 do {
29044 offset += 1;
29045 frag_len = tvb_get_uint8(tvb, offset);
29046 offset += 1;
29047 tmp_tvb = tvb_new_subset_length(tvb, offset, frag_len);
29048 /* Insert this fragment ... */
29049 tvb_composite_append(tvb_comp, tmp_tvb);
29050 offset += frag_len;
29051 ohead += 2;
29052 } while (frag_len == 255 &&
29053 tvb_captured_length_remaining(tvb, offset) > 2 &&
29054 tvb_get_uint8(tvb, offset) == 0xfe);
29055
29056 tvb_composite_finalize(tvb_comp);
29057
29058 *overhead = ohead - 2;
29059 add_new_data_source(pinfo, tvb_comp, "Reassembled Subelt");
29060 return tvb_comp;
29061 } else {
29062 *overhead = 0;
29063 return tvb_new_subset_length(tvb, offset + 2, subelt_len);
29064 }
29065}
29066
29067static void
29068dissect_multi_link(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
29069 int offset, int len _U___attribute__((unused)))
29070{
29071 proto_item *control = NULL((void*)0), *type = NULL((void*)0);
29072 proto_tree *ctl_tree = NULL((void*)0), *common_tree = NULL((void*)0), *subelt_tree = NULL((void*)0);
29073 uint8_t common_info_len = 0;
29074 uint16_t multi_link_control = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
29075 uint8_t multi_link_type = multi_link_control & 0x0007;
29076 uint16_t present = multi_link_control >> 4;
29077 int elt = 0, hf_index;
29078 int local_link_ids[16];
29079 int is_ap;
29080
29081 control = proto_tree_add_item(tree, hf_ieee80211_eht_multi_link_control, tvb,
29082 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29083 ctl_tree = proto_item_add_subtree(control, ett_eht_multi_link_control);
29084
29085 type = proto_tree_add_item(ctl_tree, hf_ieee80211_eht_multi_link_control_type,
29086 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29087 proto_tree_add_item(ctl_tree, hf_ieee80211_eht_multi_link_control_reserved,
29088 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29089
29090 /* Handle the control elt here, separate items */
29091 if (multi_link_type == BASIC_MULTI_LINK0) {
29092 proto_item_append_text(control, " Basic");
29093 proto_tree_add_item(ctl_tree,
29094 hf_ieee80211_eht_multi_link_control_link_id_present,
29095 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29096 proto_tree_add_item(ctl_tree,
29097 hf_ieee80211_eht_multi_link_control_bss_parms_ch_count,
29098 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29099 proto_tree_add_item(ctl_tree,
29100 hf_ieee80211_eht_multi_link_control_medium_sync_delay,
29101 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29102 proto_tree_add_item(ctl_tree,
29103 hf_ieee80211_eht_multi_link_control_eml_capa,
29104 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29105 proto_tree_add_item(ctl_tree,
29106 hf_ieee80211_eht_multi_link_control_mld_capa,
29107 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29108 proto_tree_add_item(ctl_tree,
29109 hf_ieee80211_eht_multi_link_control_basic_mld_id_present,
29110 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29111 proto_tree_add_item(ctl_tree,
29112 hf_ieee80211_eht_multi_link_control_ext_mld_capa,
29113 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29114 proto_tree_add_item(ctl_tree,
29115 hf_ieee80211_eht_multi_link_control_bitmap_reserved,
29116 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29117 hf_index = hf_ieee80211_eht_multi_link_type_0_link_count;
29118 } else if (multi_link_type == PROBE_MULTI_LINK1) {
29119 proto_item_append_text(control, " Probe Request");
29120 proto_tree_add_item(ctl_tree,
29121 hf_ieee80211_eht_multi_link_control_probe_mld_id_present,
29122 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29123 proto_tree_add_item(ctl_tree,
29124 hf_ieee80211_eht_multi_link_control_probe_mld_mac_addr_present,
29125 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29126 proto_tree_add_item(ctl_tree,
29127 hf_ieee80211_eht_multi_link_control_probe_reserved,
29128 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29129 hf_index = hf_ieee80211_eht_multi_link_type_1_link_count;
29130 } else if (multi_link_type == RECONFIGURATION_MULTI_LINK2) {
29131 proto_item_append_text(control, " Reconfiguration");
29132 proto_tree_add_item(ctl_tree,
29133 hf_ieee80211_eht_multi_link_control_reconfig_mld_mac,
29134 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29135 proto_tree_add_item(ctl_tree,
29136 hf_ieee80211_eht_multi_link_control_reconfig_eml_capa,
29137 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29138 proto_tree_add_item(ctl_tree,
29139 hf_ieee80211_eht_multi_link_control_reconfig_mld_capa_oper,
29140 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29141 proto_tree_add_item(ctl_tree,
29142 hf_ieee80211_eht_multi_link_control_reconfig_ext_mld_capa_oper,
29143 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29144 proto_tree_add_item(ctl_tree,
29145 hf_ieee80211_eht_multi_link_control_reconfig_reserved,
29146 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29147 hf_index = hf_ieee80211_eht_multi_link_type_2_link_count;
29148 } else if (multi_link_type == TDLS_MULTI_LINK3) {
29149 proto_item_append_text(control, " TDLS");
29150 /* Presence bitmap is reserved */
29151 proto_tree_add_item(ctl_tree,
29152 hf_ieee80211_eht_multi_link_control_tdls_reserved, tvb,
29153 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29154 hf_index = hf_ieee80211_eht_multi_link_type_3_link_count;
29155 } else if (multi_link_type == PRIORITY_ACCESS_MULTI_LINK4) {
29156 proto_item_append_text(control, " Priority Access");
29157 proto_tree_add_item(ctl_tree,
29158 hf_ieee80211_eht_multi_link_control_prio_access_reserved,
29159 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29160 hf_index = hf_ieee80211_eht_multi_link_type_4_link_count;
29161 } else {
29162 expert_add_info_format(pinfo, type, &ei_ieee80211_eht_invalid_multi_link,
29163 "Invalid Multi-Link Control type, value is %u",
29164 multi_link_type);
29165 return;
29166 }
29167 offset += 2;
29168
29169 switch (multi_link_type) {
29170 case BASIC_MULTI_LINK0:
29171 /* Handle common info for basic element */
29172 common_info_len = tvb_get_uint8(tvb, offset);
29173 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29174 ett_eht_multi_link_common_info,
29175 NULL((void*)0), "Common Info");
29176 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29177 offset, 1, ENC_NA0x00000000);
29178 offset += 1;
29179
29180 is_ap = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool,((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
29181 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
29182 IS_AP_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
;
29183 if (assoc_counter_in_auth) {
29184 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
29185 if (conversation) {
29186 ieee80211_conversation_data_t *conversation_data =
29187 (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
29188 if (is_ap) {
29189 tvb_memcpy(tvb, conversation_data->ap_mld, offset, 6);
29190 conversation_data->mld_set = TRUE(!(0));
29191 } else {
29192 tvb_memcpy(tvb, conversation_data->sta_mld, offset, 6);
29193 conversation_data->mld_set = TRUE(!(0));
29194 }
29195 }
29196 }
29197
29198 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_mac,
29199 tvb, offset, 6, ENC_NA0x00000000);
29200 offset += 6;
29201
29202 if (present & EHT_LINK_ID0x01) {
29203 proto_tree_add_bitmask(common_tree, tvb, offset,
29204 hf_ieee80211_eht_common_field_link_id_field,
29205 ett_eht_multi_link_common_info_link_id,
29206 eht_link_id_hdrs, ENC_NA0x00000000);
29207 offset += 1;
29208 }
29209
29210 if (present & EHT_BSS_PARAMS0x02) {
29211 proto_tree_add_item(common_tree,
29212 hf_ieee80211_eht_common_field_bss_param_change_count,
29213 tvb, offset, 1, ENC_NA0x00000000);
29214 offset += 1;
29215 }
29216
29217 if (present & EHT_MEDIUM_SYNC0x04) {
29218 proto_tree_add_bitmask(common_tree, tvb, offset,
29219 hf_ieee80211_eht_common_field_medium_sync_field,
29220 ett_eht_multi_link_common_info_medium_sync,
29221 eht_medium_sync_delay_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29222 offset += 2;
29223 }
29224
29225 if (present & EHT_EML_CAPA0x08) {
29226 proto_tree_add_bitmask(common_tree, tvb, offset,
29227 hf_ieee80211_eht_common_field_eml_capabilities,
29228 ett_eht_multi_link_common_info_eml_capa,
29229 eht_eml_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29230 offset += 2;
29231 }
29232
29233 if (present & EHT_MLD_CAPA0x10) {
29234 proto_tree_add_bitmask(common_tree, tvb, offset,
29235 hf_ieee80211_eht_common_field_mld_capabilities,
29236 ett_eht_multi_link_common_info_mld_capa,
29237 eht_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29238 offset += 2;
29239 }
29240
29241 if (present & EHT_MLD_ID0x20) {
29242 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_id,
29243 tvb, offset, 1, ENC_NA0x00000000);
29244 offset += 1;
29245 }
29246
29247 if (present & EHT_EXT_MLD_CAPA0x40) {
29248 proto_tree_add_bitmask(common_tree, tvb, offset,
29249 hf_ieee80211_eht_common_field_ext_mld_capabilities,
29250 ett_eht_multi_link_common_info_ext_mld_capa,
29251 eht_ext_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29252 offset += 2;
29253 }
29254 break;
29255 case PROBE_MULTI_LINK1:
29256 /* Handle common info for probe request element */
29257 common_info_len = tvb_get_uint8(tvb, offset);
29258 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29259 ett_eht_multi_link_common_info,
29260 NULL((void*)0), "Common Info");
29261 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29262 offset, 1, ENC_NA0x00000000);
29263 offset += 1;
29264
29265 if (present & EHT_PML_MLD_ID0x01) {
29266 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_id,
29267 tvb, offset, 1, ENC_NA0x00000000);
29268 offset += 1;
29269 }
29270
29271 if (present & EHT_PML_MLD_MAC0x02) {
29272 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_mac,
29273 tvb, offset, 6, ENC_NA0x00000000);
29274 offset += 6;
29275 }
29276 break;
29277 case RECONFIGURATION_MULTI_LINK2:
29278 common_info_len = tvb_get_uint8(tvb, offset);
29279 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29280 ett_eht_multi_link_common_info,
29281 NULL((void*)0), "Common Info");
29282 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29283 offset, 1, ENC_NA0x00000000);
29284 offset += 1;
29285
29286 if (present & EHT_RECONF_MLD_MAC0x01) {
29287 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_mac,
29288 tvb, offset, 6, ENC_NA0x00000000);
29289 offset += 6;
29290 }
29291
29292 if (present & EHT_RECONF_EML_CAPA0x02) {
29293 proto_tree_add_bitmask(common_tree, tvb, offset,
29294 hf_ieee80211_eht_common_field_eml_capabilities,
29295 ett_eht_multi_link_common_info_eml_capa,
29296 eht_eml_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29297 offset += 2;
29298 }
29299
29300 if (present & EHT_RECONF_MLD_CAPA0x04) {
29301 proto_tree_add_bitmask(common_tree, tvb, offset,
29302 hf_ieee80211_eht_common_field_mld_capabilities,
29303 ett_eht_multi_link_common_info_mld_capa,
29304 eht_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29305 offset += 2;
29306 }
29307 if (present & EHT_RECONF_EXT_MLD_CAPA0x08) {
29308 proto_tree_add_bitmask(common_tree, tvb, offset,
29309 hf_ieee80211_eht_common_field_ext_mld_capabilities,
29310 ett_eht_multi_link_common_info_ext_mld_capa,
29311 eht_ext_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29312 offset += 2;
29313 }
29314 break;
29315 case TDLS_MULTI_LINK3:
29316 common_info_len = tvb_get_uint8(tvb, offset);
29317 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29318 ett_eht_multi_link_common_info,
29319 NULL((void*)0), "Common Info");
29320 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29321 offset, 1, ENC_NA0x00000000);
29322 offset += 1;
29323 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_ap_mld_mac,
29324 tvb, offset, 6, ENC_NA0x00000000);
29325 offset += 6;
29326 break;
29327 case PRIORITY_ACCESS_MULTI_LINK4:
29328 common_info_len = tvb_get_uint8(tvb, offset);
29329 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29330 ett_eht_multi_link_common_info,
29331 NULL((void*)0), "Common Info");
29332 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29333 offset, 1, ENC_NA0x00000000);
29334 offset += 1;
29335
29336 proto_tree_add_item(common_tree,
29337 hf_ieee80211_eht_common_field_ap_mld_mac, tvb,
29338 offset, 6, ENC_NA0x00000000);
29339 offset += 6;
29340 break;
29341 default:
29342 /* We should not reach here as we filtered out non-valid values above */
29343 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 29343))
;
29344 }
29345
29346 /* Handle the link info. It is 0 or more subelements */
29347 while (tvb_reported_length_remaining(tvb, offset)) {
29348 uint8_t tag, subelt_len;
29349 int link_id = -1;
29350
29351 if (tvb_reported_length_remaining(tvb, offset) < 2) {
29352 expert_add_info_format(pinfo, tree, &ei_ieee80211_eht_invalid_subelement,
29353 "Per-STA Profile subelements must contain at least 2 bytes");
29354 return;
29355 }
29356
29357 tag = tvb_get_uint8(tvb, offset);
29358 subelt_len = tvb_get_uint8(tvb, offset + 1);
29359
29360 tvbuff_t *new_tvb;
29361 int overhead = 0;
29362 int full_subelt_len;
29363
29364 switch (tag) {
29365 case 0:
29366 /*
29367 * We have to assemble the sub-elt if there is a continuations. And
29368 * it will have to be a composite TVB etc.
29369 */
29370 new_tvb = get_subelt_tvb(tvb, pinfo, offset, &overhead);
29371 full_subelt_len = tvb_captured_length_remaining(new_tvb, 0);
29372
29373 proto_tree_add_item(tree,
29374 hf_ieee80211_eht_multi_link_subelt_tag, tvb,
29375 offset, 1, ENC_NA0x00000000);
29376 offset += 1;
29377 if (full_subelt_len <= 255) {
29378 proto_tree_add_item(tree,
29379 hf_ieee80211_eht_multi_link_subelt_len, tvb,
29380 offset, 1, ENC_NA0x00000000);
29381 } else {
29382 proto_tree_add_uint(tree, hf_ieee80211_eht_multi_link_subelt_len, tvb,
29383 0, 0, full_subelt_len);
29384 }
29385 offset += 1;
29386
29387 subelt_tree = proto_tree_add_subtree_format(tree, new_tvb, 0,
29388 full_subelt_len,
29389 ett_eht_multi_link_subelt,
29390 NULL((void*)0), "Per-STA Profile %d", elt + 1);
29391 /*
29392 * There might be some per-STA elements that do not contain link IDs.
29393 */
29394
29395 /*
29396 * We use the sta profile num here. But we need to ensure it is not
29397 * seen as NULL and we send it in zero based. Will be incremented
29398 * before use.
29399 */
29400
29401 offset += dissect_multi_link_per_sta(new_tvb, pinfo, subelt_tree,
29402 multi_link_type, &link_id);
29403
29404 offset += overhead; /* Account for the overhead in the subelt */
29405 if (link_id != -1) {
29406 local_link_ids[elt] = link_id;
29407 }
29408 break;
29409 case 221:
29410 /* Add an expert info saying there are none so far? */
29411 offset += subelt_len + 2;
29412 break;
29413 default:
29414 offset += subelt_len + 2;
29415 break;
29416 }
29417 if (link_id != -1) {
29418 elt++;
29419 }
29420 }
29421 proto_tree_add_uint(tree, hf_index, tvb, 0, 0, elt);
29422
29423 if (elt) {
29424 wmem_strbuf_t *link_id_list = wmem_strbuf_new_sized(pinfo->pool, elt * 2);
29425 for (int i = 0; i < elt; i++) {
29426 if (local_link_ids[i] != -1) {
29427 wmem_strbuf_append_printf(link_id_list, (i == 0) ? "%d" : "_%d", local_link_ids[i]);
29428 }
29429 }
29430 proto_tree_add_string(tree, hf_ieee80211_eht_multi_link_link_id_list, tvb,
29431 0, 0, link_id_list->str);
29432 }
29433}
29434
29435static int * const eht_operation_hdrs[] = {
29436 &hf_ieee80211_eht_operation_info_present,
29437 &hf_ieee80211_eht_operation_subchannel_bitmap_present,
29438 &hf_ieee80211_eht_operation_default_pe_duration,
29439 &hf_ieee80211_eht_operation_group_addressed_bu_indication_limit,
29440 &hf_ieee80211_eht_operation_group_addressed_bu_indication_exp,
29441 &hf_ieee80211_eht_operation_mcs15_disable,
29442 &hf_ieee80211_eht_operation_reserved,
29443 NULL((void*)0)
29444};
29445
29446static int *const eht_op_control_hdrs[] = {
29447 &hf_ieee80211_eht_operation_control_chan_width,
29448 &hf_ieee80211_eht_operation_control_reserved,
29449 NULL((void*)0)
29450};
29451
29452static const value_string eht_operation_control_chan_wid_vals[] = {
29453 { 0, "20 MHz EHT BSS bandwidth" },
29454 { 1, "40 MHz EHT BSS bandwidth" },
29455 { 2, "80 MHz EHT BSS bandwidth" },
29456 { 3, "160 MHz EHT BSS bandwidth" },
29457 { 4, "320 MHz EHT BSS bandwidth" },
29458 { 5, "Reserved" },
29459 { 6, "Reserved" },
29460 { 7, "Reserved" },
29461 { 0, NULL((void*)0) },
29462};
29463
29464static void
29465dissect_eht_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
29466 int offset, int len _U___attribute__((unused)))
29467{
29468 uint8_t params = tvb_get_uint8(tvb, offset);
29469
29470 proto_tree_add_bitmask(tree, tvb, offset,
29471 hf_ieee80211_eht_operation_parameters,
29472 ett_eht_operation_params, eht_operation_hdrs,
29473 ENC_LITTLE_ENDIAN0x80000000);
29474 offset++;
29475
29476 if (len < 5) {
29477 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
29478 "This IE appears to conform to an earlier draft than D2.0 and lacks the Basic EHT MCS And MSS Set, len=%d", len);
29479 return;
29480
29481 } else {
29482 proto_tree_add_item(tree, hf_ieee80211_eht_basic_eht_mcs_nss_set, tvb,
29483 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29484
29485 offset += 4;
29486 }
29487
29488 if (params & 0x01) { /* EHT Operations Info present */
29489 proto_tree_add_bitmask(tree, tvb, offset,
29490 hf_ieee80211_eht_operation_control,
29491 ett_eht_operation_control,
29492 eht_op_control_hdrs,
29493 ENC_NA0x00000000);
29494 offset++;
29495
29496 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs0, tvb, offset, 1,
29497 ENC_NA0x00000000);
29498 offset++;
29499
29500 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs1, tvb, offset, 1,
29501 ENC_NA0x00000000);
29502 offset++;
29503 }
29504
29505 if (params & 0x02) { /* Disabled subchannel bitmap present */
29506 proto_tree_add_item(tree, hf_ieee80211_eht_operation_disabled_bitmap, tvb,
29507 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29508 }
29509}
29510
29511static const value_string eht_link_adaptation_vals[] = {
29512 { 0, "No feedback" },
29513 { 1, "Reserved" },
29514 { 2, "Unsolicited" },
29515 { 3, "Solicited and unsolicited" },
29516 { 0, NULL((void*)0) },
29517};
29518
29519static int * const eht_mac_capa_hdrs[] = {
29520 &hf_ieee80211_eht_mac_capa_epcs_prio_access_support,
29521 &hf_ieee80211_eht_mac_capa_eht_om_control_support,
29522 &hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_1_support,
29523 &hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_2_support,
29524 &hf_ieee80211_eht_mac_capa_restricted_twt_support,
29525 &hf_ieee80211_eht_mac_capa_scs_traffic_description_support,
29526 &hf_ieee80211_eht_mac_capa_maximum_mpdu_length,
29527 &hf_ieee80211_eht_mac_capa_maximum_ampdu_length_exp_ext,
29528 &hf_ieee80211_eht_mac_capa_eht_trs_support,
29529 &hf_ieee80211_eht_mac_capa_txop_return_support_txop_sha_mode,
29530 &hf_ieee80211_eht_mac_capa_two_bqrs_support,
29531 &hf_ieee80211_eht_mac_capa_eht_link_adaptation_support,
29532 &hf_ieee80211_eht_mac_capa_unsolicited_epcs_update,
29533 &hf_ieee80211_eht_mac_capa_reserved,
29534 NULL((void*)0)
29535};
29536
29537static int * const eht_phy_bits_0_15[] = {
29538 &hf_ieee80211_eht_phy_bits_0_15_reserved,
29539 &hf_ieee80211_eht_phy_bits_0_15_320_mhz_in_6ghz,
29540 &hf_ieee80211_eht_phy_bits_0_15_242_tone_ru_bw_wider_20mhz,
29541 &hf_ieee80211_eht_phy_bits_0_15_ndp_and_3_2_us_gi,
29542 &hf_ieee80211_eht_phy_bits_0_15_partial_bw_ul_mu_mimo,
29543 &hf_ieee80211_eht_phy_bits_0_15_su_beamformer,
29544 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee,
29545 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee_le_80mhz,
29546 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_160mhz,
29547 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_320mhz,
29548 NULL((void*)0)
29549};
29550
29551static int * const eht_phy_bits_16_31[] = {
29552 &hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_lt_80mhz,
29553 &hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_160mhz,
29554 &hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_320mhz,
29555 &hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_su_feedback,
29556 &hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_mu_feedback,
29557 &hf_ieee80211_eht_phy_bits_16_31_codebook_size_4_2_su_fbck,
29558 &hf_ieee80211_eht_phy_bits_16_31_codebook_size_7_5_mu_fbck,
29559 &hf_ieee80211_eht_phy_bits_16_31_triggered_su_beemform_fbck,
29560 &hf_ieee80211_eht_phy_bits_16_31_triggered_mu_beemform_p_bw_fbck,
29561 &hf_ieee80211_eht_phy_bits_16_31_triggered_cqi_feedback,
29562 NULL((void*)0)
29563};
29564
29565static int * const eht_phy_bits_32_39[] = {
29566 &hf_ieee80211_eht_phy_bits_32_39_partial_bw_dl_mu_mimo,
29567 &hf_ieee80211_eht_phy_bits_32_39_eht_psr_based_sr_support,
29568 &hf_ieee80211_eht_phy_bits_32_39_power_boost_factor_support,
29569 &hf_ieee80211_eht_phy_bits_32_39_eht_mu_ppdu_w_4x_eht_ltf_08_gi,
29570 &hf_ieee80211_eht_phy_bits_32_39_max_nc,
29571 NULL((void*)0)
29572};
29573
29574static int * const eht_phy_bits_40_63[] = {
29575 &hf_ieee80211_eht_phy_bits_40_63_non_triggered_cqi_fbck,
29576 &hf_ieee80211_eht_phy_bits_40_63_tx_1024_4096_qam_lt_242_ru_support,
29577 &hf_ieee80211_eht_phy_bits_40_63_rx_1024_4096_qam_lt_242_ru_support,
29578 &hf_ieee80211_eht_phy_bits_40_63_ppe_thresholds_present,
29579 &hf_ieee80211_eht_phy_bits_40_63_common_nominal_packet_padding,
29580 &hf_ieee80211_eht_phy_bits_40_63_max_num_supported_eht_ltfs,
29581 &hf_ieee80211_eht_phy_bits_40_63_support_of_mcx_15,
29582 &hf_ieee80211_eht_phy_bits_40_63_support_of_eht_dup_in_6_ghz,
29583 &hf_ieee80211_eht_phy_bits_40_63_support_20_mhz_sta_ndp_wide_bw,
29584 &hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_le_80_mhz,
29585 &hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_160_mhz,
29586 &hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_320_mhz,
29587 &hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_le_80_mhz,
29588 &hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_160_mhz,
29589 &hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_320_mhz,
29590 &hf_ieee80211_eht_phy_bits_40_63_tb_sounding_feedback_rate_limit,
29591 NULL((void*)0)
29592};
29593
29594static int * const eht_phy_bits_64_71[] = {
29595 &hf_ieee80211_eht_phy_bits_64_71_rx_1024_qam_wid_bw_dl_ofdma_sup,
29596 &hf_ieee80211_eht_phy_bits_64_71_rx_4096_qam_wid_bw_dl_ofdma_sup,
29597 &hf_ieee80211_eht_phy_bits_64_71_20m_limit_capa_support,
29598 &hf_ieee80211_eht_phy_bits_64_71_20m_mu_beam_feedback_dl_mu_mimo,
29599 &hf_ieee80211_eht_phy_bits_64_71_20m_mru_support,
29600 &hf_ieee80211_eht_phy_bits_64_71_reserved,
29601 NULL((void*)0)
29602};
29603
29604static int * const eht_mcs_20mhz_map_hdrs[] = {
29605 &hf_ieee80211_eht_rx_max_nss_20mhz_0_7,
29606 &hf_ieee80211_eht_tx_max_nss_20mhz_0_7,
29607 &hf_ieee80211_eht_rx_max_nss_20mhz_8_9,
29608 &hf_ieee80211_eht_tx_max_nss_20mhz_8_9,
29609 &hf_ieee80211_eht_rx_max_nss_20mhz_10_11,
29610 &hf_ieee80211_eht_tx_max_nss_20mhz_10_11,
29611 &hf_ieee80211_eht_rx_max_nss_20mhz_12_13,
29612 &hf_ieee80211_eht_tx_max_nss_20mhz_12_13,
29613 NULL((void*)0)
29614};
29615
29616static void
29617dissect_eht_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
29618 proto_tree *tree, int offset, int len _U___attribute__((unused)))
29619{
29620 proto_tree *eht_phy_capa = NULL((void*)0), *eht_mcs_nss = NULL((void*)0);
29621 bool_Bool ch_320mhz_in_6ghz = false0;
29622 bool_Bool ppe_thresholds_present = false0;
29623
29624 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_eht_mac_capabilities,
29625 ett_eht_mac_capa, eht_mac_capa_hdrs,
29626 ENC_LITTLE_ENDIAN0x80000000);
29627 offset += 2;
29628
29629 ch_320mhz_in_6ghz = tvb_get_uint8(tvb, offset) & 0x02;
29630
29631 eht_phy_capa = proto_tree_add_subtree(tree, tvb, offset, 9,
29632 ett_eht_phy_capa, NULL((void*)0),
29633 "EHT PHY Capabilities Information");
29634 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29635 hf_ieee80211_eht_phy_bits_0_15,
29636 ett_eht_phy_bits_0_15, eht_phy_bits_0_15,
29637 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29638 offset += 2;
29639
29640 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29641 hf_ieee80211_eht_phy_bits_16_31,
29642 ett_eht_phy_bits_16_31, eht_phy_bits_16_31,
29643 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29644 offset += 2;
29645
29646 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29647 hf_ieee80211_eht_phy_bits_32_39,
29648 ett_eht_phy_bits_32_39, eht_phy_bits_32_39,
29649 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29650 offset += 1;
29651
29652 ppe_thresholds_present = tvb_get_uint8(tvb, offset) & 0x08;
29653 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29654 hf_ieee80211_eht_phy_bits_40_63,
29655 ett_eht_phy_bits_40_63, eht_phy_bits_40_63,
29656 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29657 offset += 3;
29658
29659 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29660 hf_ieee80211_eht_phy_bits_64_71,
29661 ett_eht_phy_bits_64_71, eht_phy_bits_64_71,
29662 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29663 offset += 1;
29664
29665 /*
29666 * We need to figure out the channel width set and frequency for this but it
29667 * is only possible if we got the frequency info and the channel width set
29668 * was added to the pinfo. If we don't have that simply add the rest as
29669 * uninterpreted bytes.
29670 */
29671 eht_mcs_nss = proto_tree_add_subtree(tree, tvb, offset,
29672 tvb_captured_length_remaining(tvb, offset),
29673 ett_eht_phy_mcs_nss, NULL((void*)0),
29674 "Supported EHT-MCS and NSS Set");
29675
29676 if (pinfo->pseudo_header->ieee_802_11.has_frequency) {
29677 unsigned *p_channel_width_set =
29678 (unsigned *)p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan,
29679 HE_CHANNEL_WIDTH_KEY);
29680 unsigned channel_width_set = 0;
29681 /*
29682 * If we got it, we can handle the rest, otherwise not. Note,
29683 * we can determine if it was ever set by checking for non-zero because
29684 * we set at least one bit when saving it..
29685 */
29686 if (p_channel_width_set) {
29687 bool_Bool is_ap = GPOINTER_TO_UINT(p_get_proto_data(wmem_file_scope(),((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, IS_AP_KEY)))
29688 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, IS_AP_KEY)))
29689 IS_AP_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, IS_AP_KEY)))
;
29690 channel_width_set = GPOINTER_TO_UINT(p_channel_width_set)((guint) (gulong) (p_channel_width_set));
29691
29692 /* Distinguish between the AP and the non-AP cases as the logis is easier
29693 * even if that means some duplicate code.
29694 */
29695 if (is_ap) {
29696 /* The EHT-MCS and NSS set for BW <= 80MHz Ap etc */
29697 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29698 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29699 "Insufficient bytes for EHT Capabilities. Need 3. "
29700 "Perhaps the EHT Capabilities field is malformed.");
29701 return;
29702 }
29703 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29704 hf_ieee80211_eht_mcs_and_nss_le_80mhz,
29705 ett_eht_phy_mcs_nss_set,
29706 eht_le_80_mcs_map_hdrs,
29707 ENC_LITTLE_ENDIAN0x80000000);
29708 offset += 3;
29709
29710 if (channel_width_set & 0x04) { /* B2 is set */
29711 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29712 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29713 "Insufficient bytes for EHT Capabilities. Need 3 for AP 160MHz. "
29714 "Perhaps the EHT Capabilities field is malformed.");
29715 return;
29716 }
29717 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29718 hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
29719 ett_eht_phy_mcs_nss_set,
29720 eht_160_mcs_map_hdrs,
29721 ENC_LITTLE_ENDIAN0x80000000);
29722 offset += 3;
29723 }
29724 if (ch_320mhz_in_6ghz &&
29725 IS_6_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 5955
)
) {
29726 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29727 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29728 "Insufficient bytes for EHT Capabilities. Need 3. "
29729 "Perhaps the EHT Capabilities field is malformed.");
29730 return;
29731 }
29732 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29733 hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
29734 ett_eht_phy_mcs_nss_set,
29735 eht_320_mcs_map_hdrs,
29736 ENC_LITTLE_ENDIAN0x80000000);
29737 offset += 3;
29738 }
29739 } else {
29740 /* Add the info for a 20MHz-Only Non-AP. But have to check both
29741 * frequency sets for some cases */
29742 if ((channel_width_set & 0x07) == 0) {
29743 if (tvb_captured_length_remaining(tvb, offset) < 4) {
29744 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29745 "Insufficient bytes for EHT Capabilities. Need 4. "
29746 "Perhaps the EHT Capabilities field is malformed.");
29747 return;
29748 }
29749 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29750 hf_ieee80211_eht_mcs_and_nss_non_ap,
29751 ett_eht_phy_mcs_nss_set,
29752 eht_mcs_20mhz_map_hdrs,
29753 ENC_LITTLE_ENDIAN0x80000000);
29754 offset += 4;
29755 }
29756 /* Now, the next set BW <= 80MHz except ...
29757 * If 2.4GHz and B0 is 1, or 5GHz or 6GHz and B1 */
29758 if ((IS_2_4_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 2400
&& pinfo->pseudo_header->ieee_802_11.frequency
<= 2500)
&&
29759 channel_width_set & 0x01) ||
29760 (channel_width_set & 0x02)) {
29761 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29762 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29763 "Insufficient bytes for EHT Capabilities. Need 3 for le 80MHz. "
29764 "Perhaps the EHT Capabilities field is malformed.");
29765 return;
29766 }
29767 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29768 hf_ieee80211_eht_mcs_and_nss_le_80mhz,
29769 ett_eht_phy_mcs_nss_set,
29770 eht_le_80_mcs_map_hdrs,
29771 ENC_LITTLE_ENDIAN0x80000000);
29772 offset += 3;
29773
29774 }
29775 if (!IS_2_4_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 2400
&& pinfo->pseudo_header->ieee_802_11.frequency
<= 2500)
&&
29776 channel_width_set & 0x04) { /* B2 is set */
29777 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29778 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29779 "Insufficient bytes for EHT Capabilities. Need 3 for 160MHz. "
29780 "Perhaps the EHT Capabilities field is malformed.");
29781 return;
29782 }
29783 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29784 hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
29785 ett_eht_phy_mcs_nss_set,
29786 eht_160_mcs_map_hdrs,
29787 ENC_LITTLE_ENDIAN0x80000000);
29788 offset += 3;
29789 }
29790 if (ch_320mhz_in_6ghz &&
29791 IS_6_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 5955
)
) {
29792 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29793 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29794 "Insufficient bytes for EHT Capabilities. Need 3 for 320MHz. "
29795 "Perhaps the EHT Capabilities field is malformed.");
29796 return;
29797 }
29798 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29799 hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
29800 ett_eht_phy_mcs_nss_set,
29801 eht_320_mcs_map_hdrs,
29802 ENC_LITTLE_ENDIAN0x80000000);
29803 offset += 3;
29804 }
29805 }
29806 } else {
29807 proto_tree_add_item(eht_mcs_nss, hf_ieee80211_eht_supported_mcs_nss_bytes,
29808 tvb, offset,
29809 tvb_captured_length_remaining(tvb, offset), ENC_NA0x00000000);
29810 offset += tvb_captured_length_remaining(tvb, offset);
29811 }
29812 }
29813
29814 /*
29815 * If the PPE thresholds are present, add them.
29816 */
29817 if (ppe_thresholds_present) {
29818 proto_tree_add_item(tree, hf_ieee80211_eht_ppe_thresholds, tvb, offset,
29819 tvb_captured_length_remaining(tvb, offset), ENC_NA0x00000000);
29820 }
29821}
29822
29823static const value_string tid_to_link_mapping_dirn_vals[] = {
29824 { 0, "Uplink" },
29825 { 1, "Downlink" },
29826 { 2, "Bidirectional link" },
29827 { 0, NULL((void*)0) }
29828};
29829
29830static const value_string ttl_link_mapping_size_vals[] = {
29831 { 0, "2 octets" },
29832 { 1, "1 octet" },
29833 { 0, NULL((void*)0) }
29834};
29835
29836static int * const eht_ttl_mapping_control_hdrs[] = {
29837 &hf_ieee80211_eht_ttl_mapping_direction,
29838 &hf_ieee80211_eht_ttl_default_link_mapping,
29839 &hf_ieee80211_eht_ttl_mapping_switch_time_pres,
29840 &hf_ieee80211_eht_ttl_expected_dura_pres,
29841 &hf_ieee80211_eht_ttl_link_mapping_size,
29842 &hf_ieee80211_eht_ttl_mapping_reserved,
29843 NULL((void*)0)
29844};
29845
29846static void
29847dissect_tid_to_link_mapping(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
29848 proto_tree *tree, int offset, int len _U___attribute__((unused)))
29849{
29850 proto_item *control = NULL((void*)0);
29851 uint8_t presence;
29852 uint8_t control_byte = tvb_get_uint8(tvb, offset);
29853 uint8_t map_size = 2;
29854 int hf_array[8] = {hf_ieee80211_eht_ttl_mapping_tid_0_link_mapping,
29855 hf_ieee80211_eht_ttl_mapping_tid_1_link_mapping,
29856 hf_ieee80211_eht_ttl_mapping_tid_2_link_mapping,
29857 hf_ieee80211_eht_ttl_mapping_tid_3_link_mapping,
29858 hf_ieee80211_eht_ttl_mapping_tid_4_link_mapping,
29859 hf_ieee80211_eht_ttl_mapping_tid_5_link_mapping,
29860 hf_ieee80211_eht_ttl_mapping_tid_6_link_mapping,
29861 hf_ieee80211_eht_ttl_mapping_tid_7_link_mapping};
29862 int hf_index = 0;
29863
29864 /*
29865 * If the Default Link Mapping bit is set, we only have 1 byte, otherwise 2
29866 */
29867 control = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
29868 hf_ieee80211_eht_ttl_mapping_control,
29869 ett_eht_ttl_mapping,
29870 eht_ttl_mapping_control_hdrs,
29871 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29872 offset += 1;
29873
29874 if (len == 1) {
29875 return;
29876 }
29877
29878 presence = tvb_get_uint8(tvb, offset);
29879
29880 proto_tree_add_item(control, hf_ieee80211_eht_ttl_mapping_presence, tvb,
29881 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
29882 offset += 1;
29883
29884 if (control_byte & 0x08) {
29885 proto_tree_add_item(tree, hf_ieee80211_eht_ttl_mapping_switch_time, tvb,
29886 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29887 offset += 2;
29888 }
29889
29890 if (control_byte & 0x10) {
29891 proto_tree_add_item(tree, hf_ieee80211_eht_ttl_mapping_expected_duration, tvb,
29892 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
29893 offset += 3;
29894 }
29895
29896 if (control_byte & 0x20) {
29897 map_size = 1;
29898 }
29899 while (presence) {
29900 if (presence & 0x01) {
29901 proto_tree_add_item(tree, hf_array[hf_index], tvb,
29902 offset, map_size, ENC_LITTLE_ENDIAN0x80000000);
29903 offset += map_size;
29904 }
29905 hf_index++;
29906 presence = presence >> 1;
29907 }
29908}
29909
29910static int * const ml_traffic_control_hdrs[] = {
29911 &hf_ieee80211_eht_multi_link_tc_bitmap_size,
29912 &hf_ieee80211_eht_multi_link_tc_aid_offset,
29913 &hf_ieee80211_eht_multi_link_tc_reserved,
29914 NULL((void*)0)
29915};
29916
29917static void
29918dissect_multi_link_traffic(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
29919 proto_tree *tree, int offset, int len _U___attribute__((unused)))
29920{
29921 proto_tree_add_bitmask(tree, tvb, offset,
29922 hf_ieee80211_eht_multi_link_traffic_control,
29923 ett_eht_eht_multi_link_tc,
29924 ml_traffic_control_hdrs,
29925 ENC_LITTLE_ENDIAN0x80000000);
29926 offset += 2;
29927 len -= 2;
29928
29929 /* If there is nothing more, bail. */
29930 if (len <= 0)
29931 return;
29932
29933 /* Now, add the traffic indication list as a byte string for the moment */
29934 proto_tree_add_item(tree, hf_ieee80211_eht_multi_link_traffic_indication,
29935 tvb, offset, tvb_captured_length_remaining(tvb, offset),
29936 ENC_NA0x00000000);
29937}
29938
29939#define MAX_MSDU_SIZE_PRESENT0x0001 0x0001
29940#define SERVICE_START_TIME_PRESENT0x0002 0x0002
29941#define SERVICE_START_TIME_LID_PRESENT0x0004 0x0004
29942#define MEAN_DATA_RATE_PRESENT0x0008 0x0008
29943#define BURST_SIZE_PRESENT0x0010 0x0010
29944#define MSDU_LIFETIME_PRESENT0x0020 0x0020
29945#define MSDU_DELIVERY_INFO_PRESENT0x0040 0x0040
29946#define MEDIUM_TIME_PRESENT0x0080 0x0080
29947
29948static const value_string qos_chars_dirn_vals[] = {
29949 { 0, "Uplink" },
29950 { 1, "Downlink" },
29951 { 2, "Direct link" },
29952 { 3, "Reserved" },
29953 { 0, NULL((void*)0) }
29954};
29955
29956static void
29957dissect_qos_characteristics(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
29958 proto_tree *tree, int offset, int len _U___attribute__((unused)))
29959{
29960 proto_tree *control_tree = NULL((void*)0);
29961 uint16_t presence_bitmap = (tvb_get_letohl(tvb, offset) >> 9) & 0xFFFF;
29962
29963 control_tree = proto_tree_add_subtree(tree, tvb, offset, 4,
29964 ett_eht_qos_characteristics,
29965 NULL((void*)0), "Control Info");
29966
29967 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_dirn, tvb,
29968 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29969 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_tid, tvb,
29970 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29971 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_user_prio, tvb,
29972 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29973 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_bitmap, tvb,
29974 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29975 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_linkid, tvb,
29976 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29977 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_resrvd, tvb,
29978 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29979 offset += 4;
29980
29981 /* Now add the fields, including the optional ones. */
29982 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_min_svc_interval, tvb,
29983 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29984 offset += 4;
29985
29986 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_max_svc_interval, tvb,
29987 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29988 offset += 4;
29989
29990 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_min_data_rate, tvb,
29991 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
29992 offset += 3;
29993
29994 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_delay_bound, tvb,
29995 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
29996 offset += 3;
29997
29998 /* Now the optional ones */
29999 if (presence_bitmap & MAX_MSDU_SIZE_PRESENT0x0001) {
30000 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_max_msdu_size, tvb,
30001 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30002 offset += 2;
30003 }
30004
30005 if (presence_bitmap & SERVICE_START_TIME_PRESENT0x0002) {
30006 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_service_start_time,
30007 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30008 offset += 4;
30009 }
30010
30011 if (presence_bitmap & SERVICE_START_TIME_LID_PRESENT0x0004) {
30012 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_service_start_time_linkid,
30013 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30014 offset += 1;
30015 }
30016
30017 if (presence_bitmap & MEAN_DATA_RATE_PRESENT0x0008) {
30018 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_mean_data_rate, tvb,
30019 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
30020 offset += 3;
30021 }
30022
30023 if (presence_bitmap & BURST_SIZE_PRESENT0x0010) {
30024 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_burst_size, tvb,
30025 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30026 offset += 4;
30027 }
30028
30029 if (presence_bitmap & MSDU_LIFETIME_PRESENT0x0020) {
30030 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_msdu_lifetime, tvb,
30031 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30032 offset += 2;
30033 }
30034
30035 if (presence_bitmap & MSDU_DELIVERY_INFO_PRESENT0x0040) {
30036 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_msdu_delivery_ratio,
30037 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30038 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_msdu_count_exponent,
30039 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30040 offset += 1;
30041 }
30042
30043 if (presence_bitmap & MEDIUM_TIME_PRESENT0x0080) {
30044 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_medium_time, tvb,
30045 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30046 }
30047}
30048
30049static void
30050dissect_akm_suite_selector(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30051 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30052{
30053 proto_tree_add_item(tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
30054 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
30055 {
30056 proto_tree_add_item(tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
30057 } else {
30058 proto_tree_add_item(tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
30059 }
30060}
30061
30062static void
30063dissect_mlo_link_information(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30064 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30065{
30066 proto_tree_add_item(tree, hf_ieee80211_eht_link_id_bitmap, tvb, offset, 2,
30067 ENC_LITTLE_ENDIAN0x80000000);
30068}
30069
30070static int * const ieee80211_eht_aid_bmapctl[] = {
30071 &hf_ieee80211_eht_aid_bitmap_control_reserved,
30072 &hf_ieee80211_eht_aid_bitmap_control_offset,
30073 NULL((void*)0)
30074};
30075
30076static void
30077dissect_aid_bitmap(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30078 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30079{
30080 unsigned aid, pab_len, n1, i, j, byte;
30081
30082 pab_len = tvb_get_uint8(tvb, offset);
30083 proto_tree_add_item(tree, hf_ieee80211_eht_aid_bitmap_length, tvb, offset, 1,
30084 ENC_LITTLE_ENDIAN0x80000000);
30085 offset += 1;
30086
30087 n1 = tvb_get_uint8(tvb, offset) & 0xFE;
30088 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
30089 hf_ieee80211_eht_aid_bitmap_control,
30090 ett_eht_aid_bmapctl_tree,
30091 ieee80211_eht_aid_bmapctl,
30092 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30093 offset += 1;
30094
30095 proto_tree_add_item(tree, hf_ieee80211_eht_aid_bitmap_partial_aid_bitmap,
30096 tvb, offset, pab_len, ENC_NA0x00000000);
30097 for (i = 0; i < pab_len; i++) {
30098 byte = tvb_get_uint8(tvb, offset + i);
30099 for (j = 0; j < 8; j++) {
30100 if (byte & (1 << j)) {
30101 aid = 8*n1 + 8*i + j;
30102 proto_tree_add_uint(tree, hf_ieee80211_eht_aid_bitmap_aid, tvb,
30103 offset + i, 1, aid);
30104 }
30105 }
30106 }
30107}
30108
30109static int *const eht_bw_indi_param_hdrs[] = {
30110 &hf_ieee80211_eht_bw_indi_param_reserved,
30111 &hf_ieee80211_eht_bw_indi_param_disabled_subchan_bitmap,
30112 &hf_ieee80211_eht_bw_indi_param_reserved1,
30113 NULL((void*)0)
30114};
30115
30116static void
30117dissect_bandwidth_indication(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30118 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30119{
30120 uint8_t params;
30121
30122 params = tvb_get_uint8(tvb, offset);
30123 proto_tree_add_bitmask(tree, tvb, offset,
30124 hf_ieee80211_eht_bw_indi_param,
30125 ett_eht_bw_indication_param,
30126 eht_bw_indi_param_hdrs,
30127 ENC_NA0x00000000);
30128 offset++;
30129
30130 proto_tree_add_bitmask(tree, tvb, offset,
30131 hf_ieee80211_eht_operation_control,
30132 ett_eht_operation_control,
30133 eht_op_control_hdrs,
30134 ENC_NA0x00000000);
30135 offset++;
30136
30137 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs0, tvb, offset, 1,
30138 ENC_NA0x00000000);
30139 offset++;
30140
30141 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs1, tvb, offset, 1,
30142 ENC_NA0x00000000);
30143 offset++;
30144
30145 if (params & 0x02) { /* Disabled subchannel bitmap present */
30146 proto_item *item;
30147 int8_t i;
30148 char bitmap_binary[32];
30149 uint16_t bitmap = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
30150 item = proto_tree_add_item(tree, hf_ieee80211_eht_bw_indi_diabled_bitmap, tvb,
30151 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30152 memset(bitmap_binary, 0 ,sizeof(bitmap_binary));
30153 for (i = 15; i >= 0; i--) {
30154 if (bitmap & (1 << i))
30155 bitmap_binary[15-i] = '1';
30156 else
30157 bitmap_binary[15-i] = '0';
30158 }
30159 proto_item_append_text(item, " (%s)", bitmap_binary);
30160 }
30161}
30162
30163static int *const eht_nonap_sta_regu_conn_hdrs[] = {
30164 &hf_ieee80211_nonap_sta_regu_conn_indoor_ap_valid,
30165 &hf_ieee80211_nonap_sta_regu_conn_indoor_ap,
30166 &hf_ieee80211_nonap_sta_regu_conn_sp_ap_valid,
30167 &hf_ieee80211_nonap_sta_regu_conn_sp_ap,
30168 &hf_ieee80211_nonap_sta_regu_conn_reserved,
30169 NULL((void*)0)
30170};
30171
30172static void
30173dissect_nonap_sta_regulatory_connect(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30174 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30175{
30176 proto_tree_add_bitmask(tree, tvb, offset,
30177 hf_ieee80211_nonap_sta_regulatory_conn,
30178 ett_nonap_sta_regulatory_conn,
30179 eht_nonap_sta_regu_conn_hdrs,
30180 ENC_NA0x00000000);
30181}
30182
30183static void
30184add_min_max_time_between_measurements(proto_item *item, tvbuff_t *tvb, packet_info *pinfo, int offset, int sub_length)
30185{
30186 uint64_t ntb_specific, min, max;
30187
30188 if (sub_length < 6) {
30189 return;
30190 }
30191
30192 ntb_specific = tvb_get_int48(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
30193
30194 min = (ntb_specific >> 1) & GENMASK(22, 0)(((1U << ((22) - (0) + 1)) - 1) << (0));
30195 max = (ntb_specific >> 24) & GENMASK(19, 0)(((1U << ((19) - (0) + 1)) - 1) << (0));
30196
30197 /* convert to microseconds */
30198 min *= 100; /* min time is in units of 100 microseconds */
30199 max *= 10 * 1000; /* max time is in units of 10 milliseconds */
30200
30201 float minf = (float)(min / 1E6);
30202 float maxf = (float)(max / 1E6);
30203
30204 proto_item_append_text(item, " (Min=%.6gs, Max=%.6gs)", minf, maxf);
30205 col_append_fstr(pinfo->cinfo, COL_INFO, ", Min=%.6gs, Max=%.6gs", minf, maxf);
30206}
30207
30208static void
30209dissect_ntb_specific(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int sub_length)
30210{
30211 static int * const nontb_fields[] = {
30212 &hf_ieee80211_tag_ranging_ntb_reserved1,
30213 &hf_ieee80211_tag_ranging_ntb_min_time_msmts,
30214 &hf_ieee80211_tag_ranging_ntb_max_time_msmts,
30215 &hf_ieee80211_tag_ranging_ntb_r2i_tx_power,
30216 &hf_ieee80211_tag_ranging_ntb_i2r_tx_power,
30217 &hf_ieee80211_tag_ranging_ntb_reserved2,
30218 NULL((void*)0)};
30219 proto_tree *item;
30220
30221 item = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_ranging_ntb,
30222 ett_tag_ranging_ntb, nontb_fields,
30223 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30224 col_append_str(pinfo->cinfo, COL_INFO, ", NTB");
30225 add_min_max_time_between_measurements(item, tvb, pinfo, offset, sub_length);
30226}
30227
30228static const range_string ranging_subelt_types[] = {
30229 { 0, 0, "Non-TB specific" },
30230 { 1, 1, "TB-specific" },
30231 { 2, 2, "Secure HE-LTF" },
30232 { 3, 220, "Reserved" },
30233 { 221, 221, "Vendor Specific" },
30234 { 222, 255, "Reserved" },
30235 { 0, 0, NULL((void*)0) }
30236};
30237
30238static int
30239dissect_tb_specific(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
30240 int offset, int sub_length _U___attribute__((unused)))
30241{
30242
30243 /* Now add the extra 32-bits of items */
30244 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_aid_rsid, tvb,
30245 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30246 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_device_class, tvb,
30247 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30248 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_full_bw_ul_mu_mimo, tvb,
30249 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30250 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_trigger_frame_paddur,
30251 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30252 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_max_sess_exp, tvb,
30253 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30254 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_passive_tb_ranging, tvb,
30255 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30256 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_tb_specific_reserved,
30257 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30258 offset += 4;
30259
30260 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
30261
30262 return offset;
30263}
30264
30265static int * const ranging_subelement_secure_he_ltf_fields[] = {
30266 &hf_ieee80211_tag_ranging_secure_he_ltf_version,
30267 &hf_ieee80211_tag_ranging_secure_he_ltf_req,
30268 &hf_ieee80211_tag_ranging_secure_he_ltf_r2i_tx_window,
30269 &hf_ieee80211_tag_ranging_secure_he_ltf_i2r_tx_window,
30270 &hf_ieee80211_tag_ranging_secure_he_ltf_reserved,
30271 NULL((void*)0)};
30272
30273static void
30274dissect_ranging_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
30275{
30276 int tag_len = tvb_reported_length(tvb);
30277 unsigned subelt = 0;
30278 static int * const ranging_params_fields[] = {
30279 &hf_ieee80211_tag_ranging_status_indication,
30280 &hf_ieee80211_tag_ranging_value,
30281 &hf_ieee80211_tag_ranging_i2r_lmr_feedback,
30282 &hf_ieee80211_tag_ranging_secure_ltf_required,
30283 &hf_ieee80211_tag_ranging_secure_ltf_support,
30284 &hf_ieee80211_tag_ranging_ranging_priority,
30285 &hf_ieee80211_tag_ranging_r2i_toa_type,
30286 &hf_ieee80211_tag_ranging_i2r_toa_type,
30287 &hf_ieee80211_tag_ranging_r2i_aoa_requested,
30288 &hf_ieee80211_tag_ranging_i2r_aoa_requested,
30289 &hf_ieee80211_tag_ranging_format_and_bandwidth,
30290 &hf_ieee80211_tag_ranging_immediate_r2i_feedback,
30291 &hf_ieee80211_tag_ranging_immediate_i2r_feedback,
30292 &hf_ieee80211_tag_ranging_max_i2r_repetition,
30293 &hf_ieee80211_tag_ranging_max_r2i_repetition,
30294 &hf_ieee80211_tag_ranging_reserved1,
30295 &hf_ieee80211_tag_ranging_reserved2,
30296 &hf_ieee80211_tag_ranging_max_r2i_sts_le_80_mhz,
30297 &hf_ieee80211_tag_ranging_max_r2i_sts_gt_80_mhz,
30298 &hf_ieee80211_tag_ranging_max_r2i_ltf_total,
30299 &hf_ieee80211_tag_ranging_max_i2r_ltf_total,
30300 &hf_ieee80211_tag_ranging_max_i2r_sts_le_80_mhz,
30301 &hf_ieee80211_tag_ranging_max_i2r_sts_gt_80_mhz,
30302 &hf_ieee80211_tag_ranging_bss_color_info,
30303 NULL((void*)0)};
30304 static const value_string short_status[] = {
30305 { 0, "Reserved" },
30306 { 1, "Successful" },
30307 { 2, "Request incapable" },
30308 { 3, "Request failed" },
30309 { 0, NULL((void*)0) }
30310 };
30311
30312 if (len < 6) {
30313 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
30314 "Ranging Parameters must be at least 6 octets long");
30315 return;
30316 }
30317
30318 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_ranging_parameters,
30319 ett_tag_ranging, ranging_params_fields,
30320 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30321 uint8_t status = tvb_get_uint8(tvb, offset) & GENMASK(1, 0)(((1U << ((1) - (0) + 1)) - 1) << (0));
30322 if (status != 0) {
30323 col_append_fstr(pinfo->cinfo, COL_INFO, ", Status=%d (%s)", status,
30324 val_to_str_const(status, short_status, "Unknown"));
30325 }
30326
30327 offset += 7;
30328
30329 while (offset < len) {
30330 uint8_t sub_id, sub_length;
30331 proto_item *sub_elt_len, *rsti;
30332 proto_tree *sub_tree;
30333 unsigned start_offset = offset;
30334
30335 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
30336 ett_ranging_subelement_tree, &rsti,
30337 "Ranging Subelement %d", subelt);
30338
30339
30340 sub_id = tvb_get_uint8(tvb, offset);
30341 proto_item_append_text(sub_tree, ": %s",
30342 rval_to_str_const(sub_id, ranging_subelt_types, "Reserved"));
30343 proto_tree_add_item(sub_tree, hf_ieee80211_tag_ranging_subelt_tag, tvb,
30344 offset, 1, ENC_NA0x00000000);
30345 offset += 1;
30346
30347 sub_length = tvb_get_uint8(tvb, offset);
30348 sub_elt_len = proto_tree_add_item(sub_tree,
30349 hf_ieee80211_tag_ranging_subelt_len,
30350 tvb, offset, 1, ENC_NA0x00000000);
30351 offset += 1;
30352
30353 if (offset + sub_length > tag_len) {
30354 expert_add_info_format(pinfo, sub_elt_len, &ei_ieee80211_tag_length,
30355 "Subelement length (%u) exceeds remaining tag length (%u)",
30356 sub_length, tvb_captured_length_remaining(tvb, offset));
30357 proto_item_set_len(rsti, offset - start_offset);
30358 return;
30359 }
30360
30361 switch (sub_id) {
30362 case 0: /* non-TB specific */
30363 dissect_ntb_specific(tvb, pinfo, tree, offset, sub_length);
30364 break;
30365 case 1: /* Ranging SUB_TB_SPECIFIC */
30366 /* TODO: Specify the acceptable tagged elements */
30367 offset = dissect_tb_specific(tvb, pinfo, tree, offset, sub_length);
30368 break;
30369 case 2: /* Secure HE-LTF */
30370 proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset,
30371 hf_ieee80211_tag_ranging_secure_he_ltf,
30372 ett_tag_ranging_secure_he_ltf,
30373 ranging_subelement_secure_he_ltf_fields,
30374 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30375 break;
30376 default: /* skip unknown elements which may be defined in the future */
30377 break;
30378 }
30379
30380 offset += sub_length;
30381 subelt++;
30382 proto_item_set_len(rsti, offset - start_offset);
30383 }
30384}
30385
30386static int * const aoa_results_fields[] = {
30387 &hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth,
30388 &hf_ieee80211_tag_ftm_aoa_results_aoa_elevation,
30389 &hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth_accuracy,
30390 &hf_ieee80211_tag_ftm_aoa_results_aoa_elevation_accuracy,
30391 &hf_ieee80211_tag_ftm_aoa_results_best_awv_id,
30392 &hf_ieee80211_tag_ftm_aoa_results_aoa_reference,
30393 &hf_ieee80211_tag_ftm_aoa_results_reserved,
30394 NULL((void*)0)
30395};
30396
30397static const true_false_string aoa_reference_tfs = {
30398 "Earth coordinates",
30399 "STA-relative coordinated"
30400};
30401
30402static void
30403aoa_azimuth_custom(char *result, uint32_t aoa_azimuth)
30404{
30405 float az = aoa_azimuth * (360.0f / 2048.0f);
30406
30407 snprintf(result, ITEM_LABEL_LENGTH240, "%f7.3", az);
30408}
30409
30410static void
30411aoa_elevation_custom(char *result, uint32_t aoa_elevation)
30412{
30413 float el = (aoa_elevation - 512) * (180.0f / 1024.0f);
30414
30415 snprintf(result, ITEM_LABEL_LENGTH240, "%f7.3", el);
30416}
30417
30418static void
30419aoa_accuracy_custom(char *result, uint32_t aoa_accuracy)
30420{
30421 float ac = aoa_accuracy * (360.0f / 1024.0f);
30422
30423 if (aoa_accuracy == 127) {
30424 snprintf(result, ITEM_LABEL_LENGTH240, "No ability to estimate accuracy");
30425 } else if (aoa_accuracy == 126) {
30426 snprintf(result, ITEM_LABEL_LENGTH240, "No measurement");
30427 } else if (aoa_accuracy == 125) {
30428 snprintf(result, ITEM_LABEL_LENGTH240, "Larger than %7.3f", ac);
30429 } else {
30430 snprintf(result, ITEM_LABEL_LENGTH240, "%f7.3", ac);
30431 }
30432}
30433
30434static void
30435dissect_direction_measurement_results(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30436 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30437{
30438 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
30439 hf_ieee80211_tag_dirn_meas_results_aoa_results,
30440 ett_tag_direct_meas_results,
30441 aoa_results_fields,
30442 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30443}
30444
30445/* ************************************************************************* */
30446/* Dissect and add tagged (optional) fields to proto tree */
30447/* ************************************************************************* */
30448
30449static int
30450ieee80211_tag_ssid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30451{
30452 int tag_len = tvb_reported_length(tvb);
30453 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30454 int offset = 0;
30455 /* 7.3.2.1 SSID element (0) */
30456 char ssid[MAX_SSID_LEN32]; /* The SSID may consist of arbitrary bytes */
30457 int ssid_len;
30458
30459 if (beacon_padding != 0) /* padding bug */
30460 return offset;
30461
30462 if (tag_len > MAX_SSID_LEN32) {
30463 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30464 "SSID length (%u) greater than maximum (%u)",
30465 tag_len, MAX_SSID_LEN32);
30466 }
30467
30468 /*
30469 * XXX - the 802.11 specs aren't particularly clear on how the SSID
30470 * is to be interpreted.
30471 *
30472 * IEEE Std 802.11-1999, section 7.3.2.2 "Service Set Identity (SSID)
30473 * element" says just
30474 *
30475 * The length of the SSID information field is between 0 and 32
30476 * octets. A 0 length information field indicates the broadcast SSID.
30477 *
30478 * with no indication that those octets encode a string.
30479 *
30480 * IEEE Std 802.11-2012, section 8.4.2.2 "SSID element", says that *but*
30481 * says after it
30482 *
30483 * When the UTF-8 SSID subfield of the Extended Capabilities element
30484 * is equal to 1 in the frame that includes the SSID element, the
30485 * SSID is interpreted using UTF-8 encoding.
30486 *
30487 * NOTE -- This is true for Beacon and Probe Response frames when the
30488 * MLME-START.request primitive was issued with the SSIDEncoding
30489 * parameter equal to UTF-8.
30490 *
30491 * and the SSIDEncoding parameter can either be UNSPECIFIED or UTF-8.
30492 *
30493 * IEEE Std 802.11-2020, section 9.4.2.2 "SSID element" changes the
30494 * wording to:
30495 *
30496 * When the UTF-8 SSID subfield of the Extended Capabilities element is
30497 * equal to 1 in the frame that includes the SSID element, or the Extended
30498 * Capabilities of the source of the SSID information is known to include
30499 * the UTF-8 SSID capability based on a previously received Extended
30500 * Capabilities element, the SSID is a sequence of UTF-8 encoded code
30501 * points. Otherwise, the character encoding of the octets in this SSID
30502 * element is unspecified.
30503 *
30504 * NOTE—If the SSID is a sequence of UTF-8 encoded code points, a
30505 * terminating null might or might not be present.
30506 *
30507 * So I *guess* that means that, if the UTF-8 SSID subfield isn't
30508 * equal to 1, the SSID is, in theory, just a bunch of octets, but
30509 * in practice, *probably* UTF-8 as that's the typical convention,
30510 * and, if it is equal to 1, it's a possibly null-terminated UTF-8
30511 * string. (Of course, a host can put anything there it wants to,
30512 * so we shouldn't just assume that it's *valid* ASCII or *valid* UTF-8.)
30513 *
30514 * So we really should extract it as an array of ssid_len bytes,
30515 * pass those bytes to Dot11DecryptSetLastSSID(), and:
30516 *
30517 * If the UTF-8 SSID subfield isn't set to 1, put the SSID in
30518 * a FT_BYTES as BASE_SHOW_UTF_8_PRINTABLE;
30519 *
30520 * If the UTF-8 SSID subfield is set to 1, put it in as an
30521 * ENC_UTF_8 string;
30522 *
30523 * XXX: Note that the Extended Capabilities tagged parameter is specified
30524 * to come *after* the SSID parameter (and "Fields and elements appear
30525 * in the specified, relative order" per 9.3.3.1 of IEEE 802.11 2020),
30526 * isn't sent with Response frames, and isn't guaranteed to appear with
30527 * Request frames (if none of the bits would be set, then it isn't
30528 * mandatory). We could store the bit if it appears in the conversation
30529 * data, which would handle Response frames and subsequent passes, but
30530 * for the first pass we don't know the value of the subfield until later.
30531 * We could store the proto_item with the ssid and add the string version
30532 * later, or add the string always as a hidden item and make it visible
30533 * later, or something else.
30534 *
30535 * Addendum: 802.11 2012 points out that a Zero-length SSID means
30536 * the Wildcard SSID. Make it so. From 8.4.2.2 of 802.11 2012:
30537 *
30538 * "The length of the SSID field is between 0 and 32 octets. A SSID
30539 * field of length 0 is used within Probe Request management frames to
30540 * indicate the wildcard SSID. The wildcard SSID is also used in
30541 * Beacon and Probe Response frames transmitted by mesh STAs."
30542 *
30543 * Also, we have to return a non-zero value here to prevent an ugly
30544 * undissected field warning. Since this code is only called from
30545 * one place and is used in call to dissector_try_uint_with_data, it is
30546 * OK to do so.
30547 */
30548 ssid_len = tvb_get_raw_bytes_as_string(tvb_new_subset_length(tvb, offset, tag_len), offset, ssid, MAX_SSID_LEN32);
30549 if (ssid_len == (int)tag_len) {
30550 Dot11DecryptSetLastSSID(&dot11decrypt_ctx, (char *) ssid, ssid_len);
30551 }
30552 char *s;
30553 /* XXX: 802.11-2020 9.4.2.2 notes that it might or might not include
30554 * a terminating null when the UTF-8 SSID bit is set; if we handle
30555 * that properly and add it as a ENC_UTF_8 FT_STRING, that will work,
30556 * but the FT_BYTES BASE_SHOW_*_PRINTABLE doesn't handle an optional
30557 * terminating null. (Maybe it should?) */
30558 proto_tree_add_item_ret_display_string(tree, hf_ieee80211_tag_ssid, tvb,
30559 offset, tag_len, ENC_NA0x00000000, pinfo->pool, &s);
30560
30561 if (ssid_len > 0) {
30562 proto_item_append_text(field_data->item_tag, ": %s", s);
30563 col_append_fstr(pinfo->cinfo, COL_INFO, ", SSID=%s", s);
30564
30565 /* Wlan Stats */
30566 memcpy(wlan_stats.ssid, ssid, MIN(ssid_len, MAX_SSID_LEN)(((ssid_len) < (32)) ? (ssid_len) : (32)));
30567 wlan_stats.ssid_len = ssid_len;
30568 } else {
30569 proto_item_append_text(field_data->item_tag, ": Wildcard SSID");
30570
30571 col_append_str(pinfo->cinfo, COL_INFO, ", SSID=Wildcard (Broadcast)");
30572 offset += 1; // Make sure we return non-zero
30573 }
30574
30575 beacon_padding += 1; /* padding bug */
30576
30577 return offset + tag_len;
30578}
30579
30580static void
30581dissect_he_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
30582 int offset, int len);
30583
30584static void
30585dissect_he_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
30586 int offset, int len _U___attribute__((unused)));
30587
30588static const value_string phy_type_vals[] = {
30589 { 2, "DSSS 2.4 GHz" },
30590 { 4, "OFDM" },
30591 { 5, "HRDSSS" },
30592 { 6, "ERP" },
30593 { 7, "HT" },
30594 { 8, "DMG" },
30595 { 9, "VHT" },
30596 { 10, "TVHT" },
30597 { 11, "S1G" },
30598 { 12, "CDMG" },
30599 { 13, "CMMG" },
30600 { 14, "HE" },
30601 { 15, "EDMG" },
30602 { 17, "NGV" },
30603 { 18, "EHT" },
30604 { 0, NULL((void*)0) }
30605};
30606
30607static int
30608dissect_neighbor_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30609{
30610 int tag_len = tvb_reported_length(tvb);
30611 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30612 int offset = 0;
30613 uint8_t sub_tag_id;
30614 uint32_t sub_tag_len;
30615 const char *sub_tag_name;
30616 proto_item *parent_item;
30617 proto_tree *bssid_info_subtree, *bssid_info_cap_subtree, *sub_tag_tree;
30618 tvbuff_t *sub_tag_tvb = NULL((void*)0);
30619
30620 if (tag_len < 13) {
30621 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30622 "Neighbor Report length %u wrong, must be > 13", tag_len);
30623 return tvb_captured_length(tvb);
30624 }
30625
30626 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid, tvb, offset, 6, ENC_NA0x00000000);
30627 offset += 6;
30628
30629 /*** Begin: BSSID Information ***/
30630
30631 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid_info, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30632 bssid_info_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_tree);
30633
30634 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reachability, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30635 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_security, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30636 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_key_scope, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30637 parent_item = proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30638 bssid_info_cap_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_capability_tree);
30639 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30640 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30641 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30642 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30643 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b4, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30644 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b5, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30645 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30646 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30647 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30648 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_ftm, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30649 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_efficiency, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30650 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_er_bss, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30651 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_colocated_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30652 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_unsolicited_probe_responses_active, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30653 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_ess_with_colocated_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30654 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_oct_supported_with_reporting_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30655 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_colocated_6ghz_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30656 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_eht, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30657 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_dmg_positioning, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30658 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30659 offset += 4;
30660
30661 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_ope_class, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30662 offset += 1;
30663
30664 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30665 offset += 1;
30666
30667 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_phy_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30668 offset += 1;
30669
30670 /* The Optional Subelements field format contains zero or more subelements */
30671 if (tag_len == 13){ /* tag_len == 13 => no Subelements */
30672 return tvb_captured_length(tvb);
30673 }
30674
30675 while (offset < tag_len)
30676 {
30677 sub_tag_id = tvb_get_uint8(tvb, offset);
30678 sub_tag_len = tvb_get_uint8(tvb, offset + 1);
30679 sub_tag_name = val_to_str_const(sub_tag_id, ieee80211_neighbor_report_subelement_id_vals, "Unknown");
30680
30681 sub_tag_tree = proto_tree_add_subtree_format(tree, tvb, offset, sub_tag_len + 2, ett_tag_neighbor_report_subelement_tree, NULL((void*)0), "Subelement: %s", sub_tag_name);
30682
30683 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30684 offset += 1;
30685
30686 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30687 offset += 1;
30688
30689 sub_tag_tvb = tvb_new_subset_length(tvb, offset, sub_tag_len);
30690
30691 switch (sub_tag_id) {
30692 case NR_SUB_ID_TSF_INFO1:
30693 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_tsf_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30694 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_beacon_interval, tvb, offset + 2, 2, ENC_LITTLE_ENDIAN0x80000000);
30695 break;
30696 case NR_SUB_ID_MEASUREMENT_PILOT_INFO66:
30697 dissect_measurement_pilot_trans_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
30698 break;
30699 case NR_SUB_ID_CON_COU_STR2:
30700 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_country_code, tvb, offset, 2, ENC_ASCII0x00000000);
30701 break;
30702 case NR_SUB_ID_BSS_TRN_CAN_PREF3:
30703 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref, tvb, offset, 1, ENC_NA0x00000000);
30704 break;
30705 case NR_SUB_ID_BSS_TER_DUR4:
30706 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
30707 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_dur, tvb, offset + 8, 2, ENC_LITTLE_ENDIAN0x80000000);
30708 break;
30709 case NR_SUB_ID_HT_CAPABILITIES45:
30710 dissect_ht_capability_ie_common(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len, field_data->item_tag_length, false0);
30711 break;
30712 case NR_SUB_ID_HT_OPERATION61:
30713 dissect_ht_operation_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
30714 break;
30715 case NR_SUB_ID_SEC_CHANNEL_OFFSET62:
30716 dissect_secondary_channel_offset_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
30717 break;
30718 case NR_SUB_ID_HT_MULTIPLE_BSSID71:
30719 dissect_multiple_bssid_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
30720 break;
30721 case NR_SUB_ID_HE_CAPABILITIES193:
30722 dissect_he_capabilities(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30723 break;
30724 case NR_SUB_ID_HE_OPERATION194:
30725 dissect_he_operation(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30726 break;
30727 case NR_SUB_ID_EHT_CAPABILITIES199:
30728 dissect_eht_capabilities(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30729 break;
30730 case NR_SUB_ID_EHT_OPERATION200:
30731 dissect_eht_operation(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30732 break;
30733 case NR_SUB_ID_BASIC_MULTI_LINK201:
30734 dissect_multi_link(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30735 break;
30736 case NR_SUB_ID_VENDOR_SPECIFIC221:
30737 default:
30738 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_data, tvb, offset, sub_tag_len, ENC_NA0x00000000);
30739 break;
30740 }
30741
30742 offset += sub_tag_len;
30743 }
30744
30745 return offset;
30746}
30747
30748static int
30749ieee80211_tag_supp_rates(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30750{
30751 int tag_len = tvb_reported_length(tvb);
30752 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30753 int offset = 0;
30754 /* 7.3.2.2 Supported Rates element (1) */
30755 if (tag_len < 1) {
30756 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30757 "Tag length %u too short, must be greater than 0",
30758 tag_len);
30759 return offset;
30760 }
30761
30762 while (offset < tag_len) {
30763 proto_tree_add_item(tree, hf_ieee80211_tag_supp_rates, tvb, offset, 1,
30764 ENC_LITTLE_ENDIAN0x80000000);
30765 proto_item_append_text(field_data->item_tag, " %s,",
30766 val_to_str_ext_const(tvb_get_uint8(tvb, offset),
30767 &ieee80211_supported_rates_vals_ext,
30768 "Unknown Rate"));
30769 offset += 1;
30770 }
30771
30772 proto_item_append_text(field_data->item_tag, " [Mbit/sec]");
30773
30774 return offset;
30775}
30776
30777static int
30778ieee80211_tag_fh_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30779{
30780 int tag_len = tvb_reported_length(tvb);
30781 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30782 int offset = 0;
30783 /* 7.3.2.3 FH Parameter Set element (2) */
30784 if (tag_len < 5) {
30785 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30786 "Tag length %u too short, must be >= 5", tag_len);
30787 return 1;
30788 }
30789
30790 proto_tree_add_item(tree, hf_ieee80211_tag_fh_dwell_time,
30791 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30792 offset += 2;
30793
30794 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_set,
30795 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30796 offset += 1;
30797
30798 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_pattern,
30799 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30800 offset += 1;
30801
30802 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_index,
30803 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30804 offset += 1;
30805
30806 return offset;
30807}
30808
30809static int
30810ieee80211_tag_ds_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30811{
30812 int tag_len = tvb_reported_length(tvb);
30813 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30814 int offset = 0;
30815 /* 7.3.2.4 DS Parameter Set element (3) */
30816 if (tag_len != 1) {
30817 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30818 "Tag length %u wrong, must be = 1", tag_len);
30819 return 1;
30820 }
30821
30822 proto_tree_add_item(tree, hf_ieee80211_tag_ds_param_channel,
30823 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30824
30825 proto_item_append_text(field_data->item_tag, ": Current Channel: %u",
30826 tvb_get_uint8(tvb, offset));
30827
30828 wlan_stats.channel = tvb_get_uint8(tvb, offset);
30829 offset += 1;
30830
30831 return offset;
30832}
30833
30834static int
30835ieee80211_tag_cf_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30836{
30837 int tag_len = tvb_reported_length(tvb);
30838 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30839 int offset = 0;
30840 /* 7.3.2.5 CF Parameter Set element (4) */
30841 if (tag_len != 6) {
30842 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30843 "Tag length %u wrong, must be = 6", tag_len);
30844 return offset;
30845 }
30846
30847 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_count,
30848 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30849 proto_item_append_text(field_data->item_tag, ": CFP count %u", tvb_get_uint8(tvb, offset));
30850 offset += 1;
30851
30852 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_period,
30853 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30854 proto_item_append_text(field_data->item_tag, ": CFP Period %u", tvb_get_uint8(tvb, offset));
30855 offset += 1;
30856
30857 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_max_duration,
30858 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30859 proto_item_append_text(field_data->item_tag, ": CFP Max Duration %u",
30860 tvb_get_letohs(tvb, offset));
30861 offset += 2;
30862
30863 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_dur_remaining,
30864 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30865 proto_item_append_text(field_data->item_tag, ": CFP Dur Remaining %u",
30866 tvb_get_letohs(tvb, offset));
30867 offset += 1;
30868
30869 return offset;
30870}
30871
30872static int
30873dissect_pvb_encoded_block_bitmap(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30874 proto_tree *tree, int offset,
30875 bool_Bool inverse_bm _U___attribute__((unused)),
30876 uint8_t block_offset _U___attribute__((unused)),
30877 uint8_t page_index _U___attribute__((unused)))
30878{
30879 uint8_t block_bitmap = tvb_get_uint8(tvb, offset);
30880 proto_tree *bb_tree;
30881 proto_item *bbi;
30882 proto_item *bb;
30883 int start_offset = offset;
30884 uint8_t subblock = 0;
30885
30886 /*
30887 * Walk the block bitmap to figure out how many subblocks there are an
30888 * handle each of them.
30889 */
30890 bb_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
30891 ett_s1g_pvb_block_bitmap_tree, &bbi,
30892 "Block Bitmap");
30893
30894 bb = proto_tree_add_item(bb_tree, hf_ieee80211_s1g_block_bitmap, tvb, offset,
30895 1, ENC_NA0x00000000);
30896 offset += 1;
30897
30898 while (block_bitmap) {
30899 bool_Bool subblock_present = block_bitmap & 0x01;
30900 proto_tree *sb_tree;
30901 uint8_t bit_pos = 0;
30902
30903 if (subblock_present) {
30904 uint8_t subblock_val = tvb_get_uint8(tvb, offset);
30905
30906 sb_tree = proto_tree_add_subtree_format(bb_tree, tvb, offset, 1,
30907 ett_s1g_pvb_subblock_tree, NULL((void*)0),
30908 "Subblock %u", subblock);
30909 while (subblock_val) {
30910
30911 if (subblock_val & 0x01) {
30912 proto_item_append_text(bb, ", Subblock %d present", bit_pos);
30913 uint16_t aid13 = (page_index << 11) | (block_offset << 6) |
30914 (subblock << 3) | bit_pos;
30915 proto_tree_add_uint_bits_format_value(sb_tree,
30916 hf_ieee80211_s1g_block_bitmap_sta_aid13,
30917 tvb, offset * 8 + (7 - bit_pos), 1, 1,
30918 ENC_BIG_ENDIAN0x00000000, " 0x%0x", aid13);
30919 }
30920
30921 bit_pos += 1;
30922 subblock_val = subblock_val >> 1;
30923 }
30924
30925 offset += 1;
30926 }
30927
30928 block_bitmap = block_bitmap >> 1;
30929 subblock += 1;
30930 }
30931
30932 proto_item_set_len(bbi, offset - start_offset);
30933 return offset;
30934}
30935
30936static int
30937dissect_pvb_encoded_single_aid(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30938 proto_tree *tree, int offset,
30939 bool_Bool inverse_bm _U___attribute__((unused)),
30940 uint8_t block_offset,
30941 uint8_t page_index)
30942{
30943 uint8_t single_aid = tvb_get_uint8(tvb, offset);
30944 uint16_t aid13 = (page_index << 11) | (block_offset << 6) |
30945 (single_aid & 0x3F);
30946
30947 proto_tree_add_uint_format(tree, hf_ieee80211_s1g_block_bitmap_single_aid,
30948 tvb, offset, 1, single_aid,
30949 "Single AID13: 0x%0x", aid13);
30950 offset += 1;
30951
30952 return offset;
30953}
30954
30955static int
30956dissect_pvb_encoded_olb(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30957 proto_tree *tree, int offset,
30958 bool_Bool inverse_bm _U___attribute__((unused)),
30959 uint8_t block_offset _U___attribute__((unused)),
30960 uint8_t page_index _U___attribute__((unused)))
30961{
30962 uint8_t length = tvb_get_uint8(tvb, offset);
30963 proto_tree *olb_tree;
30964 int k;
30965
30966 olb_tree = proto_tree_add_subtree(tree, tvb, offset, length + 1,
30967 ett_s1g_pvb_olb_tree, NULL((void*)0),
30968 "OLB Mode");
30969
30970 proto_tree_add_item(olb_tree, hf_ieee80211_s1g_block_bitmap_olb_length,
30971 tvb, offset, 1, ENC_NA0x00000000);
30972 offset += 1;
30973
30974 for (k = 0; k < length; k++) {
30975 uint8_t subblock_val = tvb_get_uint8(tvb, offset);
30976 proto_tree *sb_tree;
30977 uint8_t bit_pos = 0;
30978
30979 sb_tree = proto_tree_add_subtree_format(olb_tree, tvb, offset, 1,
30980 ett_s1g_pvb_olb_subblock, NULL((void*)0),
30981 "Subblock %u", k);
30982 while (subblock_val) {
30983
30984 if (subblock_val & 0x01) {
30985 uint16_t aid13 = (page_index << 11) | (block_offset << 6) |
30986 (k << 3) | bit_pos;
30987 proto_tree_add_uint_bits_format_value(sb_tree,
30988 hf_ieee80211_s1g_block_bitmap_sta_aid13,
30989 tvb, offset * 8 + (7 - bit_pos), 1, 1,
30990 ENC_BIG_ENDIAN0x00000000, " 0x%0x", aid13);
30991 }
30992
30993 bit_pos += 1;
30994 subblock_val = subblock_val >> 1;
30995 }
30996
30997 offset += 1;
30998 }
30999
31000 offset += length;
31001
31002 return offset;
31003}
31004
31005static int
31006dissect_pvb_encoded_ade(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
31007 proto_tree *tree, int offset,
31008 bool_Bool inverse_bm _U___attribute__((unused)),
31009 uint8_t block_offset _U___attribute__((unused)),
31010 uint8_t page_index _U___attribute__((unused)))
31011{
31012 uint8_t ade_control = tvb_get_uint8(tvb, offset);
31013 uint8_t ewl = (ade_control & 0x03) + 1;
31014 uint8_t ade_bytes = ade_control >> 3;
31015 proto_tree *ade_tree;
31016 proto_item *cntl_item;
31017 proto_tree *cntl_tree;
31018
31019 ade_tree = proto_tree_add_subtree(tree, tvb, offset, ade_bytes + 1,
31020 ett_s1g_pvb_ade_tree, NULL((void*)0),
31021 "ADE Mode");
31022
31023 cntl_item = proto_tree_add_item(ade_tree, hf_ieee80211_s1g_block_bitmap_ade,
31024 tvb, offset, 1, ENC_NA0x00000000);
31025
31026 cntl_tree = proto_item_add_subtree(cntl_item, ett_s1g_pvb_ade_control);
31027
31028 proto_tree_add_uint_bits_format_value(cntl_tree,
31029 hf_ieee80211_s1g_block_bitmap_ewl,
31030 tvb, offset *8, 3, ewl,
31031 ENC_BIG_ENDIAN0x00000000, "EWL: %u", ewl);
31032 proto_tree_add_uint_bits_format_value(cntl_tree,
31033 hf_ieee80211_s1g_block_bitmap_len,
31034 tvb, offset * 8 + 3, 5, ade_bytes,
31035 ENC_BIG_ENDIAN0x00000000, "Length: %u", ade_bytes);
31036 offset += 1;
31037
31038 /* TODO: Add each subblock */
31039 proto_tree_add_item(ade_tree, hf_ieee80211_s1g_block_bitmap_ade_bytes, tvb,
31040 offset, ade_bytes, ENC_NA0x00000000);
31041
31042 offset += ade_bytes;
31043
31044 return offset;
31045}
31046
31047static int * const s1g_pvb_encoded_block_control[] = {
31048 &hf_ieee80211_s1g_pvb_encoding_mode,
31049 &hf_ieee80211_s1g_pvb_inverse_bitmap,
31050 &hf_ieee80211_s1g_pvb_block_offset,
31051 NULL((void*)0)
31052};
31053
31054#define PVB_BLOCK_BITMAP0x0 0x0
31055#define PVB_SINGLE_AID0x1 0x1
31056#define PVB_OLB0x2 0x2
31057#define PVB_ADE0x3 0x3
31058
31059static const value_string s1g_block_control_encoding_mode_vals[] = {
31060 { 0, "Block Bitmap" },
31061 { 1, "Single AID" },
31062 { 2, "OLB" },
31063 { 3, "ADE" },
31064 { 0, NULL((void*)0) }
31065};
31066
31067static int
31068dissect_pvb_encoded_block(tvbuff_t *tvb, packet_info *pinfo,
31069 proto_tree *tree, int offset, int idx,
31070 uint8_t page_index)
31071{
31072 uint8_t block_control = tvb_get_uint8(tvb, offset);
31073 uint8_t enc_mode = block_control & 0x03;
31074 uint8_t inverse_bm = (enc_mode >> 2) & 0x01;
31075 uint8_t block_offset = block_control >> 3;
31076 proto_tree *eb_tree;
31077 proto_item *ebti;
31078
31079 eb_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
31080 ett_s1g_pvb_eb_tree, &ebti,
31081 "Encoded Block %d", idx);
31082
31083 proto_tree_add_bitmask_with_flags(eb_tree, tvb, offset,
31084 hf_ieee80211_s1g_pvb_block_control_byte,
31085 ett_s1g_pvb_block_control_byte,
31086 s1g_pvb_encoded_block_control,
31087 ENC_NA0x00000000, BMT_NO_APPEND0x01);
31088 offset += 1;
31089
31090 /*
31091 * If there are no bytes, add an EI and get out of here
31092 */
31093 switch (enc_mode) {
31094 case PVB_BLOCK_BITMAP0x0:
31095 offset = dissect_pvb_encoded_block_bitmap(tvb, pinfo, eb_tree, offset,
31096 inverse_bm, block_offset,
31097 page_index);
31098 break;
31099 case PVB_SINGLE_AID0x1:
31100 offset = dissect_pvb_encoded_single_aid(tvb, pinfo, eb_tree, offset,
31101 inverse_bm, block_offset,
31102 page_index);
31103 break;
31104 case PVB_OLB0x2:
31105 offset = dissect_pvb_encoded_olb(tvb, pinfo, eb_tree, offset,
31106 inverse_bm, block_offset, page_index);
31107 break;
31108 case PVB_ADE0x3:
31109 offset = dissect_pvb_encoded_ade(tvb, pinfo, eb_tree, offset, inverse_bm,
31110 block_offset, page_index);
31111 break;
31112 }
31113
31114 return offset;
31115}
31116
31117static int
31118dissect_partial_virtual_bitmap(tvbuff_t *tvb, packet_info *pinfo,
31119 proto_tree *tree, int offset, int pvb_len,
31120 uint8_t page_index)
31121{
31122 proto_tree *pvb_tree;
31123 int idx = 0;
31124
31125 pvb_tree = proto_tree_add_subtree(tree, tvb, offset, pvb_len,
31126 ett_s1g_pvb_tree, NULL((void*)0),
31127 "Partial Virtual Bitmap");
31128
31129 while (tvb_reported_length_remaining(tvb, offset) > 0) {
31130 offset = dissect_pvb_encoded_block(tvb, pinfo, pvb_tree, offset, idx,
31131 page_index);
31132 idx++;
31133 }
31134
31135 return offset;
31136}
31137
31138static int
31139ieee80211_tag_tim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31140{
31141 int tag_len = tvb_reported_length(tvb);
31142 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31143 int offset = 0;
31144 unsigned aid, pvb_len, n1, i, j, byte;
31145 bool_Bool is_s1g = sta_is_s1g(pinfo);
31146 static int * const ieee80211_tim_bmapctl[] = {
31147 &hf_ieee80211_tim_bmapctl_mcast,
31148 &hf_ieee80211_tim_bmapctl_offset,
31149 NULL((void*)0)
31150 };
31151 static int * const ieee80211_s1g_bmapctl[] = {
31152 &hf_ieee80211_s1g_tim_bmapctl_traffic_indicator,
31153 &hf_ieee80211_s1g_tim_page_slice_number,
31154 &hf_ieee80211_s1g_tim_page_index,
31155 NULL((void*)0)
31156 };
31157
31158 /*
31159 * 802.11-2012: 8.4.2.7 TIM element (5), however, if this is an S1G frame
31160 * then it is different. S1G TIM elements can be 2, 3, or longer bytes.
31161 */
31162 if (is_s1g) {
31163 if (tag_len < 2) {
31164 expert_add_info_format(pinfo, field_data->item_tag_length,
31165 &ei_ieee80211_tag_length,
31166 "Tag length %u too short for S1G frame, must be >= 3",
31167 tag_len);
31168 return tag_len;
31169 }
31170 } else {
31171 if (tag_len < 4) {
31172 expert_add_info_format(pinfo, field_data->item_tag_length,
31173 &ei_ieee80211_tag_length,
31174 "Tag length %u too short for Non-S1G frame, must be >= 4",
31175 tag_len);
31176 return tag_len;
31177 }
31178 }
31179
31180 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_count,
31181 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31182 proto_item_append_text(field_data->item_tag, ": DTIM %u of",
31183 tvb_get_uint8(tvb, offset));
31184 offset += 1;
31185
31186 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_period,
31187 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31188 proto_item_append_text(field_data->item_tag, " %u bitmap",
31189 tvb_get_uint8(tvb, offset));
31190 offset += 1;
31191
31192 if (offset >= tag_len)
31193 return offset;
31194
31195 if (is_s1g) {
31196 unsigned bitmap_len = 0;
31197
31198 if (tag_len >= 3) {
31199 uint8_t page_index = tvb_get_uint8(tvb, offset) >> 6;
31200
31201 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
31202 hf_ieee80211_s1g_tim_bmapctrl,
31203 ett_tag_bmapctl_tree,
31204 ieee80211_s1g_bmapctl,
31205 ENC_NA0x00000000, BMT_NO_APPEND0x01);
31206 offset += 1;
31207 bitmap_len = tvb_reported_length_remaining(tvb, offset);
31208 if (bitmap_len > 0) {
31209 offset = dissect_partial_virtual_bitmap(tvb, pinfo, tree, offset,
31210 bitmap_len, page_index);
31211 }
31212 }
31213 } else {
31214 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
31215 hf_ieee80211_tim_bmapctl,
31216 ett_tag_bmapctl_tree,
31217 ieee80211_tim_bmapctl,
31218 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
31219 pvb_len = tag_len - 3;
31220 n1 = tvb_get_uint8(tvb, offset) & 0xFE;
31221 offset += 1;
31222 proto_tree_add_item(tree, hf_ieee80211_tim_partial_virtual_bitmap,
31223 tvb, offset, pvb_len, ENC_NA0x00000000);
31224 /* FIXME: Handles dot11MgmtOptionMultiBSSIDActivated = false only */
31225 for (i = 0; i < pvb_len; i++) {
31226 byte = tvb_get_uint8(tvb, offset + i);
31227 for (j = 0; j < 8; j++) {
31228 if (byte & (1 << j)) {
31229 aid = 8*n1 + 8*i + j;
31230 proto_tree_add_uint(tree, hf_ieee80211_tim_aid, tvb, offset + i,
31231 1, aid);
31232 }
31233 }
31234 }
31235 offset += pvb_len;
31236 }
31237
31238 return offset;
31239}
31240
31241static int
31242ieee80211_tag_ibss_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31243{
31244 int tag_len = tvb_reported_length(tvb);
31245 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31246 int offset = 0;
31247 /* 7.3.2.7 IBSS Parameter Set element (6) */
31248
31249 if (tag_len != 2) {
31250 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31251 "Tag length %u wrong, must be = 2", tag_len);
31252 return 1;
31253 }
31254
31255 proto_tree_add_item(tree, hf_ieee80211_tag_ibss_atim_window,
31256 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31257 proto_item_append_text(field_data->item_tag, ": ATIM window 0x%x",
31258 tvb_get_letohs(tvb, offset));
31259 offset += 2;
31260
31261 return offset;
31262}
31263
31264/* IEEE 802.11-2020, C.3 MIB detail, dot11CountryString */
31265static const value_string environment_vals[] = {
31266 { 0x1, "Operating classes in the United States" }, /* Table E-1 */
31267 { 0x2, "Operating classes in Europe" }, /* Table E-2 */
31268 { 0x3, "Operating classes in Japan" }, /* Table E-3 */
31269 { 0x4, "Global operating classes" }, /* Table E-4 */
31270 { 0x5, "S1G operating classes" }, /* Table E-5 */
31271 { 0x6, "Operating classes in China" }, /* Table E-6 */
31272 { ' ', "All" }, /* All environments for this band */
31273 { 'I', "Indoor" },
31274 { 'O', "Outdoor" },
31275 { 'X', "Non Country Entity" },
31276 { 0, NULL((void*)0) }
31277};
31278
31279static int
31280ieee80211_tag_country_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31281{
31282 int tag_len = tvb_reported_length(tvb);
31283 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31284 int offset = 0;
31285 /* 7.3.2.9 Country information element (7) */
31286 proto_tree *sub_tree;
31287 proto_item *sub_item;
31288 const uint8_t* country_code;
31289
31290 if (tag_len < 6) {
31291 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31292 "Tag length %u too short, must be >= 6", tag_len);
31293 return 1;
31294 }
31295
31296 /* FIXME: If environment is 'X', the only allowed CC is "XX" */
31297 proto_tree_add_item_ret_string(tree, hf_ieee80211_tag_country_info_code,
31298 tvb, offset, 2, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &country_code);
31299 proto_item_append_text(field_data->item_tag, ": Country Code %s", country_code);
31300 offset += 2;
31301
31302 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
31303 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31304 proto_item_append_text(field_data->item_tag, ", Environment %s",
31305 val_to_str(pinfo->pool, tvb_get_uint8(tvb, offset),
31306 environment_vals, "0x%02x"));
31307 offset += 1;
31308
31309 while (offset < tag_len) {
31310 /* Padding ? */
31311 if ((tag_len - offset) < 3) {
31312 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_pad,
31313 tvb, offset, 1, ENC_NA0x00000000);
31314 offset += 1;
31315 continue;
31316 }
31317 if (tvb_get_uint8(tvb, offset) <= 200) { /* 802.11d */
31318 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_fnm,
31319 tvb, offset, 3, ENC_NA0x00000000);
31320 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_fnm_tree);
31321
31322 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_fcn,
31323 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31324 proto_item_append_text(sub_item, ": First Channel Number: %u",
31325 tvb_get_uint8(tvb, offset));
31326 offset += 1;
31327 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_nc,
31328 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31329 proto_item_append_text(sub_item, ", Number of Channels: %u",
31330 tvb_get_uint8(tvb, offset));
31331 offset += 1;
31332 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_mtpl,
31333 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31334 proto_item_append_text(sub_item,
31335 ", Maximum Transmit Power Level: %d dBm",
31336 tvb_get_uint8(tvb, offset));
31337 offset += 1;
31338 } else { /* 802.11j */
31339 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_rrc,
31340 tvb, offset, 3, ENC_NA0x00000000);
31341 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_rcc_tree);
31342
31343 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oei,
31344 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31345 proto_item_append_text(sub_item,
31346 ": Operating Extension Identifier: %u",
31347 tvb_get_uint8(tvb, offset));
31348 offset += 1;
31349 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oc,
31350 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31351 proto_item_append_text(sub_item, ", Operating Class: %u",
31352 tvb_get_uint8(tvb, offset));
31353 offset += 1;
31354 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_cc,
31355 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31356 proto_item_append_text(sub_item, ", Coverage Class: %u",
31357 tvb_get_uint8(tvb, offset));
31358 offset += 1;
31359 }
31360 }
31361
31362 return offset;
31363}
31364
31365static int
31366ieee80211_tag_fh_hopping_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31367{
31368 int tag_len = tvb_reported_length(tvb);
31369 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31370 int offset = 0;
31371
31372 /* 7.3.2.10 Hopping Pattern Parameters information element (8) */
31373 if (tag_len < 2) {
31374 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31375 "Tag length %u too short, must be >= 2", tag_len);
31376 return 1;
31377 }
31378
31379 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
31380 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31381 proto_item_append_text(field_data->item_tag, ": Prime Radix: %u", tvb_get_uint8(tvb, offset));
31382 offset += 1;
31383
31384 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
31385 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31386 proto_item_append_text(field_data->item_tag, ", Number of Channels: %u",
31387 tvb_get_uint8(tvb, offset));
31388 offset += 1;
31389
31390 return offset;
31391}
31392
31393static int
31394ieee80211_tag_fh_hopping_table(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31395{
31396 int tag_len = tvb_reported_length(tvb);
31397 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31398 int offset = 0;
31399
31400 /* 7.3.2.11 Hopping Pattern Table information element (9) */
31401 if (tag_len < 4) {
31402 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31403 "Tag length %u too short, must be >= 4", tag_len);
31404 return 1;
31405 }
31406
31407 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_flag,
31408 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31409 offset += 1;
31410
31411 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_number_of_sets,
31412 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31413 offset += 1;
31414
31415 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_modulus,
31416 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31417 offset += 1;
31418
31419 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_offset,
31420 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31421 offset += 1;
31422
31423 while (offset < tag_len) {
31424 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_random_table,
31425 tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
31426 offset += 2;
31427 }
31428
31429 return offset;
31430}
31431
31432int
31433add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype,
31434 const uint8_t *valid_element_ids, unsigned valid_element_ids_count,
31435 association_sanity_check_t *association_sanity_check)
31436{
31437 return add_tagged_field_with_validation(pinfo, tree, tvb, offset, ftype, valid_element_ids,
31438 valid_element_ids_count, false0, NULL((void*)0), 0, false0, association_sanity_check);
31439}
31440
31441/*
31442 * Build a composite TVB from the current TVB and the next ones that are
31443 * fragment elements.
31444 *
31445 * We also add the fragments to the tree. And add an expert info if there are
31446 * problems.
31447 *
31448 * When called we know we have two fragments, at least.
31449 */
31450static tvbuff_t *
31451build_defrag_tvb(packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)), tvbuff_t *tvb,
31452 int offset, uint32_t *tag_len, uint32_t *tag_overhead)
31453{
31454 tvbuff_t *new_tvb = tvb_new_composite();
31455 tvbuff_t *tmp_tvb = NULL((void*)0);
31456 uint32_t new_len = 0, overhead = 0;
31457 uint8_t frag_len = 0;
31458
31459 /*
31460 * We come in here pointing to the first fragment and on each iteration
31461 * We are pointing to the next fragment
31462 */
31463 do {
31464 offset += 1;
31465 frag_len = tvb_get_uint8(tvb, offset);
31466 offset += 1;
31467 tmp_tvb = tvb_new_subset_length(tvb, offset, frag_len);
31468 /* Insert this fragment ... */
31469 tvb_composite_append(new_tvb, tmp_tvb);
31470 new_len += frag_len;
31471 offset += frag_len;
31472 overhead += 2;
31473 } while (frag_len == 255 &&
31474 tvb_captured_length_remaining(tvb, offset) > 2 &&
31475 tvb_get_uint8(tvb, offset) == TAG_FRAGMENT242);
31476
31477 *tag_len = new_len;
31478 *tag_overhead = overhead;
31479 tvb_composite_finalize(new_tvb);
31480
31481 return new_tvb;
31482}
31483
31484int
31485add_tagged_field_with_validation(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype,
31486 const uint8_t *element_ids, unsigned element_ids_count, bool_Bool element_ids_assume_invalid,
31487 const uint8_t *ext_element_ids, unsigned ext_element_ids_count, bool_Bool ext_element_ids_assume_invalid,
31488 association_sanity_check_t *association_sanity_check)
31489{
31490 tvbuff_t *tag_tvb;
31491 uint32_t tag_no, tag_len, tag_overhead;
31492 uint32_t ext_tag_no = 0;
31493 proto_tree *orig_tree = tree;
31494 proto_item *ti = NULL((void*)0);
31495 proto_item *ti_len, *ti_tag;
31496 bool_Bool isDMG;
31497
31498 isDMG = GPOINTER_TO_INT(p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY))((gint) (glong) (p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan
, IS_DMG_KEY)))
;
31499
31500 tag_no = tvb_get_uint8(tvb, offset);
31501 tag_len = tvb_get_uint8(tvb, offset + 1);
31502 save_tag_for_dot11decrypt(tvb, pinfo, offset);
31503
31504 /*
31505 * If we have element fragmentation, construct a composite TVB with the
31506 * fragments. Rules are:
31507 * 1. Must be in the one MMPDU (so cannot exceed the TVB we are given.)
31508 * 2. If the next element is a fragment, this one must have a length of 255.
31509 * 3. We don't care about extensions here.
31510 * 4. The fragment element has an id of 254.
31511 */
31512 if (tag_len == 255 &&
31513 tvb_captured_length_remaining(tvb, offset) > (255 + 2) &&
31514 tvb_get_uint8(tvb, offset + 255 + 2) == TAG_FRAGMENT242) {
31515 tag_tvb = build_defrag_tvb(pinfo, tree, tvb, offset, &tag_len,
31516 &tag_overhead);
31517 add_new_data_source(pinfo, tag_tvb, "Reassembled IE");
31518 } else {
31519 tag_tvb = tvb_new_subset_length(tvb, offset+2, tag_len);
31520 tag_overhead = 2;
31521 }
31522
31523 if (tree) {
31524 if (tag_no == TAG_ELEMENT_ID_EXTENSION255) {
31525 ext_tag_no = tvb_get_uint8(tvb, offset + 2);
31526 ti = proto_tree_add_item(orig_tree, hf_ieee80211_ext_tag, tvb, offset + 2, tag_len + tag_overhead - 2, ENC_NA0x00000000);
31527 proto_item_append_text(ti, ": %s", val_to_str_ext(pinfo->pool, ext_tag_no, &tag_num_vals_eid_ext_ext, "Unknown (%d)"));
31528 } else {
31529 ti = proto_tree_add_item(orig_tree, hf_ieee80211_tag, tvb, offset, 2 + tag_len + tag_overhead - 2, ENC_NA0x00000000);
31530 proto_item_append_text(ti, ": %s", val_to_str_ext(pinfo->pool, tag_no, &tag_num_vals_ext, "Unknown (%d)"));
31531 }
31532
31533 tree = proto_item_add_subtree(ti, ett_80211_mgt_ie);
31534
31535 }
31536
31537 if (tag_no == TAG_ELEMENT_ID_EXTENSION255) {
31538 ti_len = proto_tree_add_uint(tree, hf_ieee80211_ext_tag_length, tvb, offset + 1, 1, tag_len - 1);
31539 ti_tag = proto_tree_add_item(tree, hf_ieee80211_ext_tag_number, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
31540 proto_item_append_text(ti_len, " (Tag len: %u)", tag_len);
31541 } else {
31542 ti_tag = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31543 ti_len = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
31544 }
31545 if (tag_len > (unsigned)tvb_reported_length_remaining(tvb, offset)) {
31546 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
31547 "Tag Length is longer than remaining payload");
31548 }
31549
31550 /* If the list enumerates valid element IDs, require the Element ID to be
31551 * present in that list, otherwise, if the list enumerates invalid element IDs,
31552 * check the Element ID is not in the list. If either check fails, stop decoding
31553 * the value to prevent possible infinite recursions due to unexpected elements. */
31554 if (element_ids_count) {
31555 bool_Bool current_tag_no = false0;
31556 unsigned i;
31557
31558 for (i = 0; i < element_ids_count; i++) {
31559 current_tag_no = element_ids[i] == tag_no;
31560 if (current_tag_no)
31561 break;
31562 }
31563
31564 if ((!current_tag_no && !element_ids_assume_invalid && !(ext_tag_no && ext_element_ids_count)) ||
31565 (current_tag_no && element_ids_assume_invalid)) {
31566 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_number,
31567 "Unexpected Element ID %d", tag_no);
31568 return tag_len + 1 + 1;
31569 }
31570 }
31571
31572 /* Same as above, but for Extended Element IDs */
31573 if (ext_tag_no && ext_element_ids_count) {
31574 bool_Bool current_ext_tag_no = false0;
31575 unsigned i;
31576
31577 for (i = 0; i < ext_element_ids_count; i++) {
31578 current_ext_tag_no = ext_element_ids[i] == ext_tag_no;
31579 if (current_ext_tag_no)
31580 break;
31581 }
31582
31583 if ((!current_ext_tag_no && !ext_element_ids_assume_invalid) ||
31584 (current_ext_tag_no && ext_element_ids_assume_invalid)) {
31585 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_number,
31586 "Unexpected Extended Element ID %d", ext_tag_no);
31587 return tag_len + tag_overhead;
31588 }
31589 }
31590
31591 ieee80211_tagged_field_data_t field_data = {
31592 .ftype = ftype,
31593 .sanity_check = association_sanity_check,
31594 .isDMG = isDMG,
31595 .item_tag = ti,
31596 .item_tag_length = ti_len
31597 };
31598 if (!dissector_try_uint_with_data(tagged_field_table, tag_no, tag_tvb, pinfo, tree, false0, &field_data))
31599 {
31600 proto_tree_add_item(tree, hf_ieee80211_tag_data, tvb, offset + 2, tag_len, ENC_NA0x00000000);
31601 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_data,
31602 "Dissector for 802.11 IE Tag"
31603 " (%s) code not implemented, Contact"
31604 " Wireshark developers if you want this supported", val_to_str_ext(pinfo->pool, tag_no,
31605 &tag_num_vals_ext, "(%d)"));
31606 proto_item_append_text(ti, ": Undecoded");
31607 }
31608
31609 return tag_len + tag_overhead;
31610}
31611
31612/* 7.3.2.12 Request information element (10) */
31613static int
31614ieee80211_tag_request(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
31615{
31616 int tag_len = tvb_reported_length(tvb);
31617 int offset = 0;
31618
31619 while (offset < tag_len)
31620 {
31621 proto_tree_add_item(tree, hf_ieee80211_tag_request, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31622 offset += 1;
31623 }
31624 return ((tag_len > 0) ? tag_len : 1);
31625}
31626
31627/* 7.3.2.28 BSS Load element (11) */
31628/* 8.4.2.30 in 802.11-2012 */
31629static int
31630ieee80211_tag_qbss_load(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31631{
31632 int tag_len = tvb_reported_length(tvb);
31633 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31634 int offset = 0;
31635
31636 if ((tag_len < 4) || (tag_len > 5))
31637 {
31638 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4 or 5", tag_len);
31639 return tvb_captured_length(tvb);
31640 }
31641
31642 if (tag_len == 4)
31643 {
31644 /* QBSS Version 1 */
31645 proto_item_append_text(field_data->item_tag, " Cisco QBSS Version 1 - non CCA");
31646
31647 /* Extract Values */
31648 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset, tag_len, 1);
31649 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31650 proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
31651 proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
31652 }
31653 else if (tag_len == 5)
31654 {
31655 proto_item *base_item;
31656
31657 /* QBSS Version 2 */
31658 proto_item_append_text(field_data->item_tag, " 802.11e CCA Version");
31659
31660 /* Extract Values */
31661 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset, tag_len, 2);
31662 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31663 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
31664 proto_item_append_text(base_item, " (%d%%)", 100*tvb_get_uint8(tvb, offset + 2)/255);
31665 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 3, 2, ENC_LITTLE_ENDIAN0x80000000);
31666 proto_item_append_text(base_item, " (%d us/s)", tvb_get_letohs(tvb, offset + 3)*32);
31667 }
31668
31669 return tvb_captured_length(tvb);
31670}
31671
31672/* 8.4.2.31 in 802-11-2012 */
31673static int
31674ieee80211_tag_edca_param_set(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31675{
31676 int tag_len = tvb_reported_length(tvb);
31677 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31678 int offset = 0;
31679
31680 if ((tag_len != 18))
31681 {
31682 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 18", tag_len);
31683 return tvb_captured_length(tvb);
31684 }
31685
31686 decode_qos_parameter_set(tree, tvb, pinfo, offset, field_data->ftype);
31687
31688 return tvb_captured_length(tvb);
31689}
31690
31691/* TSPEC element (13) */
31692static int
31693ieee80211_tag_tspec(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31694{
31695 int tag_len = tvb_reported_length(tvb);
31696 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31697 int offset = 0;
31698
31699 if (field_data->isDMG == false0 && tag_len != 55)
31700 {
31701 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 55", tag_len);
31702 return tvb_captured_length(tvb);
31703 }
31704 if (field_data->isDMG == true1 && tag_len != 57)
31705 {
31706 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 57", tag_len);
31707 return tvb_captured_length(tvb);
31708 }
31709
31710 add_ff_qos_ts_info(tree, tvb, pinfo, offset);
31711 offset += 3;
31712
31713 proto_tree_add_item(tree, hf_ieee80211_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31714 offset += 2;
31715
31716 proto_tree_add_item(tree, hf_ieee80211_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31717 offset += 2;
31718
31719 proto_tree_add_item(tree, hf_ieee80211_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31720 offset += 4;
31721
31722 proto_tree_add_item(tree, hf_ieee80211_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31723 offset += 4;
31724
31725 proto_tree_add_item(tree, hf_ieee80211_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31726 offset += 4;
31727
31728 proto_tree_add_item(tree, hf_ieee80211_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31729 offset += 4;
31730
31731 proto_tree_add_item(tree, hf_ieee80211_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31732 offset += 4;
31733
31734 proto_tree_add_item(tree, hf_ieee80211_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31735 offset += 4;
31736
31737 proto_tree_add_item(tree, hf_ieee80211_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31738 offset += 4;
31739
31740 proto_tree_add_item(tree, hf_ieee80211_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31741 offset += 4;
31742
31743 proto_tree_add_item(tree, hf_ieee80211_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31744 offset += 4;
31745
31746 proto_tree_add_item(tree, hf_ieee80211_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31747 offset += 4;
31748
31749 proto_tree_add_item(tree, hf_ieee80211_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31750 offset += 4;
31751
31752 proto_tree_add_item(tree, hf_ieee80211_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31753 offset += 2;
31754
31755 proto_tree_add_item(tree, hf_ieee80211_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31756 offset += 2;
31757
31758 if(field_data->isDMG == true1) {
31759 proto_tree_add_item(tree, hf_ieee80211_tspec_dmg, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31760 /*offset +=2;*/
31761 }
31762
31763 return tvb_captured_length(tvb);
31764}
31765
31766/* 7.3.2.31 TCLAS element (14) */
31767static const range_string user_prio_rvals[] = {
31768 { 0, 7, "The User Priority value of an MSDU" },
31769 { 8, 8, "The AC value of an MPDU is AC-VO" },
31770 { 9, 9, "The AC value of an MPDU is AC-VI" },
31771 { 10, 10, "The AC value of an MPDU is AC-BE" },
31772 { 11, 11, "The AC value of an MPDU is AC-BK" },
31773 { 0, 0, NULL((void*)0) }
31774};
31775
31776static int * const ieee80211_tclas_class_mask0[] = {
31777 &hf_ieee80211_tclas_class_mask0_src_addr,
31778 &hf_ieee80211_tclas_class_mask0_dst_addr,
31779 &hf_ieee80211_tclas_class_mask0_type,
31780 NULL((void*)0)
31781};
31782
31783static int * const ieee80211_tclas_class_mask1[] = {
31784 &hf_ieee80211_tclas_class_mask1_ver,
31785 &hf_ieee80211_tclas_class_mask1_src_ip,
31786 &hf_ieee80211_tclas_class_mask1_dst_ip,
31787 &hf_ieee80211_tclas_class_mask1_src_port,
31788 &hf_ieee80211_tclas_class_mask1_dst_port,
31789 &hf_ieee80211_tclas_class_mask1_ipv6_flow,
31790 NULL((void*)0)
31791};
31792
31793static int * const ieee80211_tclas_class_mask1_4[] = {
31794 &hf_ieee80211_tclas_class_mask1_ver,
31795 &hf_ieee80211_tclas_class_mask1_src_ip,
31796 &hf_ieee80211_tclas_class_mask1_dst_ip,
31797 &hf_ieee80211_tclas_class_mask1_src_port,
31798 &hf_ieee80211_tclas_class_mask1_dst_port,
31799 &hf_ieee80211_tclas_class_mask1_ipv4_dscp,
31800 &hf_ieee80211_tclas_class_mask1_ipv4_proto,
31801 &hf_ieee80211_tclas_class_mask1_reserved,
31802 NULL((void*)0)
31803};
31804
31805static int * const ieee80211_tclas_class_mask2[] = {
31806 &hf_ieee80211_tclas_class_mask2_tci,
31807 NULL((void*)0)
31808};
31809
31810static int * const ieee80211_tclas_class_mask4_4[] = {
31811 &hf_ieee80211_tclas_class_mask4_ver,
31812 &hf_ieee80211_tclas_class_mask4_4_src_ip,
31813 &hf_ieee80211_tclas_class_mask4_4_dst_ip,
31814 &hf_ieee80211_tclas_class_mask4_src_port,
31815 &hf_ieee80211_tclas_class_mask4_dst_port,
31816 &hf_ieee80211_tclas_class_mask4_dscp,
31817 &hf_ieee80211_tclas_class_mask4_ipv4_proto,
31818 &hf_ieee80211_tclas_class_mask4_reserved,
31819 NULL((void*)0)
31820};
31821
31822static int * const ieee80211_tclas_class_mask4_6[] = {
31823 &hf_ieee80211_tclas_class_mask4_ver,
31824 &hf_ieee80211_tclas_class_mask4_6_src_ip,
31825 &hf_ieee80211_tclas_class_mask4_6_dst_ip,
31826 &hf_ieee80211_tclas_class_mask4_src_port,
31827 &hf_ieee80211_tclas_class_mask4_dst_port,
31828 &hf_ieee80211_tclas_class_mask4_dscp,
31829 &hf_ieee80211_tclas_class_mask4_next_hdr,
31830 &hf_ieee80211_tclas_class_mask4_flow_label,
31831 NULL((void*)0)
31832};
31833
31834static int * const ieee80211_tclas_class_mask5[] = {
31835 &hf_ieee80211_tclas_class_mask5_up_prio,
31836 &hf_ieee80211_tclas_class_mask5_dei,
31837 &hf_ieee80211_tclas_class_mask5_vid,
31838 &hf_ieee80211_tclas_class_mask5_reserved,
31839 NULL((void*)0)
31840};
31841
31842/*
31843 * Two control bits in the next few. Lower bit specifies if the classifier
31844 * uses the field (the match value is present, upper bit specifies is a
31845 * mask is present.
31846 */
31847static const value_string frame_control_mask_vals[] = {
31848 { 0x0 , "Frame Control is not included in the Classifier" },
31849 { 0x1 , "Frame Control is included in the Classifier. A Match Spec is not included" },
31850 { 0x2 , "Invalid Frame Control Classifier Mask Control value" },
31851 { 0x3 , "Frame Control is included in the Classifier. A Match Spec is included" },
31852 { 0, NULL((void*)0) }
31853};
31854
31855static const value_string duration_id_mask_vals[] = {
31856 { 0x0 , "Duration/ID is not included in the Classifier" },
31857 { 0x1 , "Duration/ID is included in the Classifier. A Match Spec is not included" },
31858 { 0x2 , "Invalid Duration/ID Classifier Mask Control value" },
31859 { 0x3 , "Duration/ID is included in the Classifier. A Match Spec is included" },
31860 { 0, NULL((void*)0) }
31861};
31862
31863static const value_string address_1_mask_vals[] = {
31864 { 0x0 , "Address 1 is not included in the Classifier" },
31865 { 0x1 , "Address 1 is included in the Classifier. A Match Spec is not included" },
31866 { 0x2 , "Invalid Address 1 Classifier Mask Control value" },
31867 { 0x3 , "Address 1 is included in the Classifier. A Match Spec is included" },
31868 { 0, NULL((void*)0) }
31869};
31870
31871static const value_string address_2_mask_vals[] = {
31872 { 0x0 , "Address 2 is not included in the Classifier" },
31873 { 0x1 , "Address 2 is included in the Classifier. A Match Spec is not included" },
31874 { 0x2 , "Invalid Address 2 Classifier Mask Control value" },
31875 { 0x3 , "Address 2 is included in the Classifier. A Match Spec is included" },
31876 { 0, NULL((void*)0) }
31877};
31878
31879static const value_string address_3_mask_vals[] = {
31880 { 0x0 , "Address 3 is not included in the Classifier" },
31881 { 0x1 , "Address 3 is included in the Classifier. A Match Spec is not included" },
31882 { 0x2 , "Invalid Address 3 Classifier Mask Control value" },
31883 { 0x3 , "Address 3 is included in the Classifier. A Match Spec is included" },
31884 { 0, NULL((void*)0) }
31885};
31886
31887static const value_string sequence_control_mask_vals[] = {
31888 { 0x0 , "Sequence Control is not included in the Classifier" },
31889 { 0x1 , "Sequence Control is included in the Classifier. A Match Spec is not included" },
31890 { 0x2 , "Invalid Sequence Control Classifier Mask Control value" },
31891 { 0x3 , "Sequence Control is included in the Classifier. A Match Spec is included" },
31892 { 0, NULL((void*)0) }
31893};
31894
31895static const value_string address_4_mask_vals[] = {
31896 { 0x0 , "Address 4 is not included in the Classifier" },
31897 { 0x1 , "Address 4 is included in the Classifier. A Match Spec is not included" },
31898 { 0x2 , "Invalid Address 4 Classifier Mask Control value" },
31899 { 0x3 , "Address 4 is included in the Classifier. A Match Spec is included" },
31900 { 0, NULL((void*)0) }
31901};
31902
31903static const value_string qos_control_mask_vals[] = {
31904 { 0x0 , "QoS Control is not included in the Classifier" },
31905 { 0x1 , "QoS Control is included in the Classifier. A Match Spec is not included" },
31906 { 0x2 , "Invalid QoS Control Classifier Mask Control value" },
31907 { 0x3 , "QoS Control is included in the Classifier. A Match Spec is included" },
31908 { 0, NULL((void*)0) }
31909};
31910
31911static const value_string ht_control_mask_vals[] = {
31912 { 0x0 , "HT Control is not included in the Classifier" },
31913 { 0x1 , "HT Control is included in the Classifier. A Match Spec is not included" },
31914 { 0x2 , "Invalid HT Control Classifier Mask Control value" },
31915 { 0x3 , "HT Control is included in the Classifier. A Match Spec is included" },
31916 { 0, NULL((void*)0) }
31917};
31918
31919static const value_string address_1_sid_mask_vals[] = {
31920 { 0x0 , "Address 1 (SID) is not included in the Classifier" },
31921 { 0x1 , "Address 1 (SID) is included in the Classifier. A Match Spec is not included" },
31922 { 0x2 , "Invalid Address 1 (SID) Classifier Mask Control value" },
31923 { 0x3 , "Address 1 (SID) is included in the Classifier. A match spec is included" },
31924 { 0, NULL((void*)0) }
31925};
31926
31927static const value_string address_1_bssid_mask_vals[] = {
31928 { 0x0 , "Address 1 (BSSID) is not included in the Classifier" },
31929 { 0x1 , "Address 1 (BSSID) is included in the Classifier. A Match Spec is not included" },
31930 { 0x2 , "Invalid Address 1 (SID) Classifier Mask Control value" },
31931 { 0x3 , "Address 1 (BSSID) is included in the Classifier. A match spec is included" },
31932 { 0, NULL((void*)0) }
31933};
31934
31935static int * const ieee80211_tclas_class_mask6[] = {
31936 &hf_ieee80211_tclas_class_mask6_frame_control_match_spec,
31937 &hf_ieee80211_tclas_class_mask6_duration_id_match_spec,
31938 &hf_ieee80211_tclas_class_mask6_address_1_match_spec,
31939 &hf_ieee80211_tclas_class_mask6_address_2_match_spec,
31940 &hf_ieee80211_tclas_class_mask6_address_3_match_spec,
31941 &hf_ieee80211_tclas_class_mask6_sequence_control_spec,
31942 &hf_ieee80211_tclas_class_mask6_address_4_match_spec,
31943 &hf_ieee80211_tclas_class_mask6_qos_control_spec,
31944 &hf_ieee80211_tclas_class_mask6_ht_control_spec,
31945 &hf_ieee80211_tclas_class_mask6_reserved,
31946 NULL((void*)0)
31947};
31948
31949static int * const ieee80211_tclas_class_mask7[] = {
31950 &hf_ieee80211_tclas_class_mask7_frame_control_match_spec,
31951 &hf_ieee80211_tclas_class_mask7_address_1_sid_match_spec,
31952 &hf_ieee80211_tclas_class_mask7_address_2_match_spec,
31953 &hf_ieee80211_tclas_class_mask7_sequence_control_spec,
31954 &hf_ieee80211_tclas_class_mask7_address_3_match_spec,
31955 &hf_ieee80211_tclas_class_mask7_address_4_match_spec,
31956 &hf_ieee80211_tclas_class_mask7_reserved,
31957 NULL((void*)0)
31958};
31959
31960static int * const ieee80211_tclas_class_mask8[] = {
31961 &hf_ieee80211_tclas_class_mask8_frame_control_match_spec,
31962 &hf_ieee80211_tclas_class_mask8_address_1_bssid_match_spec,
31963 &hf_ieee80211_tclas_class_mask8_address_2_sid_match_spec,
31964 &hf_ieee80211_tclas_class_mask8_sequence_control_spec,
31965 &hf_ieee80211_tclas_class_mask8_address_3_match_spec,
31966 &hf_ieee80211_tclas_class_mask8_address_4_match_spec,
31967 &hf_ieee80211_tclas_class_mask8_reserved,
31968 NULL((void*)0)
31969};
31970
31971/* TODO: the masks for these items are clearly wrong! */
31972static int * const ieee80211_tclas_class_mask9[] = {
31973 &hf_ieee80211_tclas_class_mask9_frame_control_match_spec,
31974 &hf_ieee80211_tclas_class_mask9_address_1_match_spec,
31975 &hf_ieee80211_tclas_class_mask9_address_2_match_spec,
31976 &hf_ieee80211_tclas_class_mask9_sequence_control_spec,
31977 &hf_ieee80211_tclas_class_mask9_reserved,
31978 NULL((void*)0)
31979};
31980
31981static int
31982ieee80211_frame_classifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
31983 proto_tree *tree, int offset, int tag_len)
31984{
31985 uint8_t type;
31986 uint8_t version;
31987 uint8_t filter_field_len;
31988 uint32_t class_mask;
31989
31990 type = tvb_get_uint8(tvb, offset);
31991 proto_tree_add_item(tree, hf_ieee80211_tclas_class_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31992 offset += 1;
31993
31994 switch (type)
31995 {
31996 case 0:
31997 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
31998 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask0,
31999 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32000 offset++;
32001
32002 proto_tree_add_item(tree, hf_ieee80211_tclas_src_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
32003 offset += 6;
32004
32005 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
32006 offset += 6;
32007
32008 proto_tree_add_item(tree, hf_ieee80211_tclas_ether_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32009 /*offset += 2;*/
32010 break;
32011
32012 case 1:
32013 version = tvb_get_uint8(tvb, offset+1);
32014 if (version == 4) {
32015 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32016 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask1_4,
32017 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32018 } else {
32019 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32020 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask1,
32021 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32022 }
32023 offset += 1;
32024
32025 proto_tree_add_item(tree, hf_ieee80211_tclas_version, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32026 offset += 1;
32027 if (version == 4)
32028 {
32029 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32030 offset += 4;
32031 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32032 offset += 4;
32033 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32034 offset += 2;
32035 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32036 offset += 2;
32037 proto_tree_add_item(tree, hf_ieee80211_tclas_dscp, tvb, offset, 1, ENC_NA0x00000000);
32038 offset += 1;
32039 proto_tree_add_item(tree, hf_ieee80211_tclas_protocol, tvb, offset, 1, ENC_NA0x00000000);
32040 /*offset += 1;*/
32041 }
32042 else if (version == 6)
32043 {
32044 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_src, tvb, offset, 16, ENC_NA0x00000000);
32045 offset += 16;
32046 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_dst, tvb, offset, 16, ENC_NA0x00000000);
32047 offset += 16;
32048 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32049 offset += 2;
32050 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32051 offset += 2;
32052 proto_tree_add_item(tree, hf_ieee80211_tclas_flow, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
32053 /*offset += 3;*/
32054 }
32055 break;
32056
32057 case 2:
32058 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32059 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask2,
32060 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32061 offset++;
32062
32063 proto_tree_add_item(tree, hf_ieee80211_tclas_tag_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32064 /*offset += 2;*/
32065 break;
32066
32067 case 3:
32068 proto_tree_add_item(tree, hf_ieee80211_tclas_mask_reserved, tvb, offset,
32069 1, ENC_NA0x00000000);
32070 offset += 1;
32071
32072 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_offset, tvb, offset,
32073 2, ENC_LITTLE_ENDIAN0x80000000);
32074 offset += 2;
32075
32076 filter_field_len = (tag_len - 4) / 2;
32077
32078 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_value, tvb, offset,
32079 filter_field_len, ENC_NA0x00000000);
32080 offset += filter_field_len;
32081
32082 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_mask, tvb, offset,
32083 filter_field_len, ENC_NA0x00000000);
32084 /*offset += filter_field_len;*/
32085 break;
32086
32087 case 4:
32088 version = tvb_get_uint8(tvb, offset+1);
32089 if (version == 4) {
32090 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32091 hf_ieee80211_tclas_class_mask,
32092 ett_tag_tclas_mask_tree,
32093 ieee80211_tclas_class_mask4_4,
32094 ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
32095 } else if (version == 6) {
32096 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32097 hf_ieee80211_tclas_class_mask,
32098 ett_tag_tclas_mask_tree,
32099 ieee80211_tclas_class_mask4_6,
32100 ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
32101 } else {
32102 proto_tree_add_item(tree, hf_ieee80211_tclas_class_mask, tvb, offset, 1,
32103 ENC_NA0x00000000);
32104 offset += 1;
32105
32106 proto_tree_add_item(tree, hf_ieee80211_tclas_reserved_bytes, tvb, offset,
32107 tag_len - offset + 1, ENC_NA0x00000000);
32108 break;
32109 }
32110
32111 offset += 1;
32112
32113 proto_tree_add_item(tree, hf_ieee80211_tclas4_version, tvb, offset, 1, ENC_NA0x00000000);
32114 offset += 1;
32115
32116 if (version == 4)
32117 {
32118 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32119 offset += 4;
32120 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32121 offset += 4;
32122 proto_tree_add_item(tree, hf_ieee80211_tclas4_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32123 offset += 2;
32124 proto_tree_add_item(tree, hf_ieee80211_tclas4_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32125 offset += 2;
32126 proto_tree_add_item(tree, hf_ieee80211_tclas4_dscp, tvb, offset, 1, ENC_NA0x00000000);
32127 offset += 1;
32128 proto_tree_add_item(tree, hf_ieee80211_tclas4_protocol, tvb, offset, 1, ENC_NA0x00000000);
32129 offset += 1;
32130 proto_tree_add_item(tree, hf_ieee80211_tclas4_reserved, tvb, offset, 1, ENC_NA0x00000000);
32131 /*offset += 1;*/
32132 }
32133 else if (version == 6)
32134 {
32135 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv6_src, tvb, offset, 16, ENC_NA0x00000000);
32136 offset += 16;
32137 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv6_dst, tvb, offset, 16, ENC_NA0x00000000);
32138 offset += 16;
32139 proto_tree_add_item(tree, hf_ieee80211_tclas4_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32140 offset += 2;
32141 proto_tree_add_item(tree, hf_ieee80211_tclas4_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32142 offset += 2;
32143 proto_tree_add_item(tree, hf_ieee80211_tclas4_dscp, tvb, offset, 1, ENC_NA0x00000000);
32144 offset += 1;
32145 proto_tree_add_item(tree, hf_ieee80211_tclas4_next_hdr, tvb, offset, 1, ENC_NA0x00000000);
32146 proto_tree_add_item(tree, hf_ieee80211_tclas4_flow, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
32147 /*offset += 3;*/
32148 }
32149 break;
32150
32151 case 5:
32152 /* Note, BIG Endian where more than one byte. */
32153 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32154 hf_ieee80211_tclas_class_mask,
32155 ett_tag_tclas_mask_tree,
32156 ieee80211_tclas_class_mask5,
32157 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32158 offset++;
32159
32160 proto_tree_add_item(tree, hf_ieee80211_tclas_tclas_8021d_up_pcp, tvb,
32161 offset, 1, ENC_NA0x00000000);
32162 offset += 1;
32163
32164 proto_tree_add_item(tree, hf_ieee80211_tclas_8021q_dei, tvb, offset, 1,
32165 ENC_NA0x00000000);
32166 offset += 1;
32167
32168 proto_tree_add_item(tree, hf_ieee80211_tclas_8021q_vid, tvb, offset, 2,
32169 ENC_BIG_ENDIAN0x00000000);
32170 break;
32171
32172 case 6:
32173 class_mask = tvb_get_letoh24(tvb, offset);
32174 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32175 hf_ieee80211_tclas_class_mask6_a_above,
32176 ett_tag_tclas_mask_tree,
32177 ieee80211_tclas_class_mask6,
32178 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32179 offset += 3;
32180
32181 /* Is the Frame Control info there? */
32182 if (class_mask & 0x01) {
32183 proto_tree_add_item(tree, hf_ieee80211_tclas6_frame_control_spec, tvb,
32184 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32185 offset += 2;
32186
32187 if (class_mask & 0x02) {
32188 proto_tree_add_item(tree, hf_ieee80211_tclas6_frame_control_mask, tvb,
32189 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32190 offset += 2;
32191 }
32192 }
32193 class_mask = class_mask >> 2; /* Get the next two bits */
32194
32195 /* Is the Duration info there? */
32196 if (class_mask & 0x01) {
32197 proto_tree_add_item(tree, hf_ieee80211_tclas6_duration_spec, tvb,
32198 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32199 offset += 2;
32200
32201 if (class_mask & 0x02) {
32202 proto_tree_add_item(tree, hf_ieee80211_tclas6_duration_mask, tvb,
32203 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32204 offset += 2;
32205 }
32206 }
32207 class_mask = class_mask >> 2; /* Get the next two bits */
32208
32209 /* Is the Address 1 info there? */
32210 if (class_mask & 0x01) {
32211 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_1_spec, tvb,
32212 offset, 6, ENC_NA0x00000000);
32213 offset += 6;
32214
32215 if (class_mask & 0x02) {
32216 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_1_mask, tvb,
32217 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32218 offset += 6;
32219 }
32220 }
32221 class_mask = class_mask >> 2; /* Get the next two bits */
32222
32223 /* Is the Address 2 info there? */
32224 if (class_mask & 0x01) {
32225 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_2_spec, tvb,
32226 offset, 6, ENC_NA0x00000000);
32227 offset += 6;
32228
32229 if (class_mask & 0x02) {
32230 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_2_mask, tvb,
32231 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32232 offset += 6;
32233 }
32234 }
32235 class_mask = class_mask >> 2; /* Get the next two bits */
32236
32237 /* Is the Address 3 info there? */
32238 if (class_mask & 0x01) {
32239 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_3_spec, tvb,
32240 offset, 6, ENC_NA0x00000000);
32241 offset += 6;
32242
32243 if (class_mask & 0x02) {
32244 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_3_mask, tvb,
32245 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32246 offset += 6;
32247 }
32248 }
32249 class_mask = class_mask >> 2; /* Get the next two bits */
32250
32251 /* Is the Sequence Control info there? */
32252 if (class_mask & 0x01) {
32253 proto_tree_add_item(tree, hf_ieee80211_tclas6_sequence_control_spec, tvb,
32254 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32255 offset += 2;
32256
32257 if (class_mask & 0x02) {
32258 proto_tree_add_item(tree, hf_ieee80211_tclas6_sequence_control_mask,
32259 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32260 offset += 2;
32261 }
32262 }
32263 class_mask = class_mask >> 2; /* Get the next two bits */
32264
32265 /* Is the Address 4 info there? */
32266 if (class_mask & 0x01) {
32267 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_4_spec, tvb,
32268 offset, 6, ENC_NA0x00000000);
32269 offset += 6;
32270
32271 if (class_mask & 0x02) {
32272 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_4_mask, tvb,
32273 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32274 offset += 6;
32275 }
32276 }
32277 class_mask = class_mask >> 2; /* Get the next two bits */
32278
32279 /* Is the QoS Control info there? */
32280 if (class_mask & 0x01) {
32281 proto_tree_add_item(tree, hf_ieee80211_tclas6_qos_control_spec, tvb,
32282 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32283 offset += 2;
32284
32285 if (class_mask & 0x02) {
32286 proto_tree_add_item(tree, hf_ieee80211_tclas6_qos_control_mask, tvb,
32287 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32288 offset += 2;
32289 }
32290 }
32291 class_mask = class_mask >> 2; /* Get the next two bits */
32292
32293 /* Is the HT Control info there? */
32294 if (class_mask & 0x01) {
32295 proto_tree_add_item(tree, hf_ieee80211_tclas6_ht_control_spec, tvb,
32296 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32297 offset += 4;
32298
32299 if (class_mask & 0x02) {
32300 proto_tree_add_item(tree, hf_ieee80211_tclas6_ht_control_mask, tvb,
32301 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32302 }
32303 }
32304 /* class_mask = class_mask >> 2; Get the next two bits */
32305
32306 break;
32307
32308 case 7:
32309 class_mask = tvb_get_letohs(tvb, offset);
32310 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32311 hf_ieee80211_tclas_class_mask6_a_above,
32312 ett_tag_tclas_mask_tree,
32313 ieee80211_tclas_class_mask7,
32314 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32315 offset += 3;
32316
32317 /* Is the Frame Control info there */
32318 if (class_mask & 0x01) {
32319 proto_tree_add_item(tree, hf_ieee80211_tclas7_frame_control_spec, tvb,
32320 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32321 offset += 2;
32322 if (class_mask & 0x02) {
32323 proto_tree_add_item(tree, hf_ieee80211_tclas7_frame_control_mask, tvb,
32324 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32325 offset += 2;
32326 }
32327 }
32328 class_mask = class_mask >> 2; /* Get the next two bits */
32329
32330 /* Is the Address 1 (SID) info there */
32331 if (class_mask & 0x01) {
32332 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_1_sid_spec, tvb,
32333 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32334 offset += 2;
32335 if (class_mask & 0x02) {
32336 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_1_sid_mask, tvb,
32337 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32338 offset += 2;
32339 }
32340 }
32341 class_mask = class_mask >> 2; /* Get the next two bits */
32342
32343 /* Is the Address 2 info there */
32344 if (class_mask & 0x01) {
32345 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_2_spec, tvb,
32346 offset, 6, ENC_NA0x00000000);
32347 offset += 6;
32348 if (class_mask & 0x02) {
32349 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_2_mask, tvb,
32350 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32351 offset += 6;
32352 }
32353 }
32354 class_mask = class_mask >> 2; /* Get the next two bits */
32355
32356 /* Is the Sequence Control info there */
32357 if (class_mask & 0x01) {
32358 proto_tree_add_item(tree, hf_ieee80211_tclas7_sequence_control_spec, tvb,
32359 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32360 offset += 2;
32361 if (class_mask & 0x02) {
32362 proto_tree_add_item(tree, hf_ieee80211_tclas7_sequence_control_mask,
32363 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32364 offset += 2;
32365 }
32366 }
32367 class_mask = class_mask >> 2; /* Get the next two bits */
32368
32369 /* Is the Address 3 info there */
32370 if (class_mask & 0x01) {
32371 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_3_spec, tvb,
32372 offset, 6, ENC_NA0x00000000);
32373 offset += 6;
32374 if (class_mask & 0x02) {
32375 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_3_mask, tvb,
32376 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32377 offset += 6;
32378 }
32379 }
32380 class_mask = class_mask >> 2; /* Get the next two bits */
32381
32382 /* Is the Address 4 info there */
32383 if (class_mask & 0x01) {
32384 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_4_spec, tvb,
32385 offset, 6, ENC_NA0x00000000);
32386 offset += 6;
32387 if (class_mask & 0x02) {
32388 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_4_mask, tvb,
32389 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32390 }
32391 }
32392 /*class_mask = class_mask >> 2; Get the next two bits */
32393
32394 break;
32395
32396 case 8:
32397 class_mask = tvb_get_letohs(tvb, offset);
32398 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32399 hf_ieee80211_tclas_class_mask6_a_above,
32400 ett_tag_tclas_mask_tree,
32401 ieee80211_tclas_class_mask8,
32402 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32403 offset += 3;
32404
32405 /* Is the Frame Control info there */
32406 if (class_mask & 0x01) {
32407 proto_tree_add_item(tree, hf_ieee80211_tclas8_frame_control_spec, tvb,
32408 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32409 offset += 2;
32410 if (class_mask & 0x02) {
32411 proto_tree_add_item(tree, hf_ieee80211_tclas8_frame_control_mask, tvb,
32412 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32413 offset += 2;
32414 }
32415 }
32416 class_mask = class_mask >> 2; /* Get the next two bits */
32417
32418 /* Is the Address 1 (BSSID) info there */
32419 if (class_mask & 0x01) {
32420 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_1_bssid_spec, tvb,
32421 offset, 6, ENC_NA0x00000000);
32422 offset += 6;
32423 if (class_mask & 0x02) {
32424 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_1_bssid_mask, tvb,
32425 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32426 offset += 6;
32427 }
32428 }
32429 class_mask = class_mask >> 2; /* Get the next two bits */
32430
32431 /* Is the Address 2 (SID) info there */
32432 if (class_mask & 0x01) {
32433 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_2_sid_spec, tvb,
32434 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32435 offset += 2;
32436 if (class_mask & 0x02) {
32437 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_2_sid_mask, tvb,
32438 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32439 offset += 2;
32440 }
32441 }
32442 class_mask = class_mask >> 2; /* Get the next two bits */
32443
32444 /* Is the Sequence Control info there */
32445 if (class_mask & 0x01) {
32446 proto_tree_add_item(tree, hf_ieee80211_tclas8_sequence_control_spec, tvb,
32447 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32448 offset += 2;
32449 if (class_mask & 0x02) {
32450 proto_tree_add_item(tree, hf_ieee80211_tclas8_sequence_control_mask,
32451 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32452 offset += 2;
32453 }
32454 }
32455 class_mask = class_mask >> 2; /* Get the next two bits */
32456
32457 /* Is the Address 3 info there */
32458 if (class_mask & 0x01) {
32459 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_3_spec, tvb,
32460 offset, 6, ENC_NA0x00000000);
32461 offset += 6;
32462 if (class_mask & 0x02) {
32463 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_3_mask, tvb,
32464 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32465 offset += 6;
32466 }
32467 }
32468 class_mask = class_mask >> 2; /* Get the next two bits */
32469
32470 /* Is the Address 4 info there */
32471 if (class_mask & 0x01) {
32472 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_4_spec, tvb,
32473 offset, 6, ENC_NA0x00000000);
32474 offset += 6;
32475 if (class_mask & 0x02) {
32476 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_4_mask, tvb,
32477 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32478 }
32479 }
32480 /* class_mask = class_mask >> 2; Get the next two bits */
32481
32482 break;
32483
32484 case 9:
32485 class_mask = tvb_get_letohs(tvb, offset);
32486 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32487 hf_ieee80211_tclas_class_mask6_a_above,
32488 ett_tag_tclas_mask_tree,
32489 ieee80211_tclas_class_mask9,
32490 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32491 offset += 3;
32492
32493 /* Is the Frame Control info there */
32494 if (class_mask & 0x01) {
32495 proto_tree_add_item(tree, hf_ieee80211_tclas9_frame_control_spec, tvb,
32496 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32497 offset += 2;
32498 if (class_mask & 0x02) {
32499 proto_tree_add_item(tree, hf_ieee80211_tclas9_frame_control_mask, tvb,
32500 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32501 offset += 2;
32502 }
32503 }
32504 class_mask = class_mask >> 2; /* Get the next two bits */
32505
32506 /* Is the Address 1 info there */
32507 if (class_mask & 0x01) {
32508 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_1_spec, tvb,
32509 offset, 6, ENC_NA0x00000000);
32510 offset += 6;
32511 if (class_mask & 0x02) {
32512 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_1_mask, tvb,
32513 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32514 offset += 6;
32515 }
32516 }
32517 class_mask = class_mask >> 2; /* Get the next two bits */
32518
32519 /* Is the Address 2 info there */
32520 if (class_mask & 0x01) {
32521 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_2_spec, tvb,
32522 offset, 6, ENC_NA0x00000000);
32523 offset += 6;
32524 if (class_mask & 0x02) {
32525 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_2_mask, tvb,
32526 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32527 offset += 6;
32528 }
32529 }
32530 class_mask = class_mask >> 2; /* Get the next two bits */
32531
32532 /* Is the Sequence Control info there */
32533 if (class_mask & 0x01) {
32534 proto_tree_add_item(tree, hf_ieee80211_tclas9_sequence_control_spec, tvb,
32535 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32536 offset += 2;
32537 if (class_mask & 0x02) {
32538 proto_tree_add_item(tree, hf_ieee80211_tclas9_sequence_control_mask,
32539 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32540 }
32541 }
32542 /* class_mask = class_mask >> 2; Get the next two bits */
32543
32544 break;
32545
32546 case 0x0A:
32547 proto_tree_add_item(tree, hf_ieee80211_tclas10_protocol_instance, tvb,
32548 offset, 1, ENC_NA0x00000000);
32549 offset += 1;
32550
32551 proto_tree_add_item(tree, hf_ieee80211_tclas10_protocol_num_next_hdr, tvb,
32552 offset, 1, ENC_NA0x00000000);
32553 offset += 1;
32554
32555 filter_field_len = (tag_len - 4) / 2;
32556
32557 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_value, tvb, offset,
32558 filter_field_len, ENC_NA0x00000000);
32559 offset += filter_field_len;
32560
32561 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_mask, tvb, offset,
32562 filter_field_len, ENC_NA0x00000000);
32563 /*offset += filter_field_len;*/
32564 break;
32565
32566 default:
32567 break;
32568 }
32569
32570 return tvb_captured_length(tvb);
32571}
32572
32573static int
32574ieee80211_tag_tclas(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32575{
32576 int tag_len = tvb_reported_length(tvb);
32577 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32578 int offset = 0;
32579
32580 if (tag_len < 5)
32581 {
32582 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 5", tag_len);
32583 return 1;
32584 }
32585
32586 proto_tree_add_item(tree, hf_ieee80211_tclas_up, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32587 offset += 1;
32588
32589 return ieee80211_frame_classifier(tvb, pinfo, tree, offset, tag_len);
32590}
32591
32592/* 7.3.2.34 Schedule element (15) */
32593static int
32594ieee80211_tag_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32595{
32596 int tag_len = tvb_reported_length(tvb);
32597 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32598 int offset = 0;
32599 if (tag_len != 14)
32600 {
32601 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 14", tag_len);
32602 return 1;
32603 }
32604
32605 add_ff_schedule_info(tree, tvb, pinfo, offset);
32606 offset += 2;
32607
32608 proto_tree_add_item(tree, hf_ieee80211_sched_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32609 offset += 4;
32610
32611 proto_tree_add_item(tree, hf_ieee80211_sched_srv_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32612 offset += 4;
32613
32614 proto_tree_add_item(tree, hf_ieee80211_sched_spec_int, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32615 return tvb_captured_length(tvb);
32616}
32617
32618/* 7.3.2.8 Challenge Text element (16) */
32619static int
32620ieee80211_tag_challenge_text(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
32621{
32622 int tag_len = tvb_reported_length(tvb);
32623 int offset = 0;
32624
32625 proto_tree_add_item(tree, hf_ieee80211_tag_challenge_text, tvb, offset, tag_len, ENC_NA0x00000000);
32626
32627 return ((tag_len > 0) ? tag_len : 1);
32628}
32629
32630/* 7.3.2.15 Power Constraint element (32) */
32631static int
32632ieee80211_tag_power_constraint(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32633{
32634 int tag_len = tvb_reported_length(tvb);
32635 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32636 int offset = 0;
32637 if (tag_len != 1)
32638 {
32639 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
32640 return 1;
32641 }
32642
32643 proto_tree_add_item(tree, hf_ieee80211_tag_power_constraint_local, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32644 proto_item_append_text(field_data->item_tag, ": %d", tvb_get_uint8(tvb, offset));
32645 return tvb_captured_length(tvb);
32646}
32647
32648/* 7.3.2.16 Power Capability element (33) */
32649static int
32650ieee80211_tag_power_capability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32651{
32652 int tag_len = tvb_reported_length(tvb);
32653 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32654 int offset = 0;
32655 if (tag_len != 2)
32656 {
32657 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
32658 return 1;
32659 }
32660
32661 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_min, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32662 proto_item_append_text(field_data->item_tag, " Min: %d", tvb_get_int8(tvb, offset));
32663 offset += 1;
32664
32665 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_max, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32666 proto_item_append_text(field_data->item_tag, ", Max: %d", tvb_get_int8(tvb, offset));
32667 return tvb_captured_length(tvb);
32668}
32669
32670/* 7.3.2.18 TPC Request element (34) */
32671static int
32672ieee80211_tag_tpc_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U___attribute__((unused)), void* data)
32673{
32674 int tag_len = tvb_reported_length(tvb);
32675 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32676 if (tag_len != 0)
32677 {
32678 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 0", tag_len);
32679 return 1; /* Even with no data, we can't return 0 */
32680 }
32681
32682 return 1; /* Even with no data, we can't return 0 */
32683}
32684
32685/* TPC Report element (35)
32686 * 7.3.2.18 (Std 802.11-2007), 8.4.2.19 (Std 802.11-2012),
32687 * 9.4.2.17 (Std 802.11-2016), 9.4.2.16 (Std 802.11-2020)
32688 */
32689static int
32690ieee80211_tag_tpc_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32691{
32692 int tag_len = tvb_reported_length(tvb);
32693 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32694 int offset = 0;
32695
32696 if (tag_len != 2)
32697 {
32698 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
32699 return 1;
32700 }
32701
32702 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_trsmt_pow, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32703 proto_item_append_text(field_data->item_tag, " Transmit Power: %d dBm", tvb_get_uint8(tvb, offset));
32704 offset += 1;
32705
32706 /*
32707 * "The Link Margin field is reserved when a TPC Report element is
32708 * included in a Beacon frame or Probe Response frame." - 2012 and later
32709 */
32710
32711 uint32_t ftype = GPOINTER_TO_UINT(p_get_proto_data(wmem_file_scope(),((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
32712 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
32713 FRAME_TYPE_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
;
32714
32715 if (ftype == MGT_BEACON0x08 || ftype == MGT_PROBE_RESP0x05) {
32716 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_reserved, tvb, offset, 1, ENC_NA0x00000000);
32717 } else {
32718 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_link_mrg, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32719
32720 proto_item_append_text(field_data->item_tag, ", Link Margin: %d dBm", tvb_get_uint8(tvb, offset));
32721 }
32722 return tvb_captured_length(tvb);
32723}
32724
32725/* 7.3.2.19 Supported Channels element (36) */
32726static int
32727ieee80211_tag_supported_channels(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32728{
32729 int tag_len = tvb_reported_length(tvb);
32730 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32731 int offset = 0;
32732
32733 proto_item *chan_item;
32734 proto_tree *chan_tree;
32735 unsigned i = 1;
32736
32737 if (tag_len % 2 == 1) {
32738 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u must be even", tag_len);
32739 return tvb_captured_length(tvb);
32740 }
32741
32742 while (offset < tag_len)
32743 {
32744 chan_item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_channels, tvb, offset, 2, ENC_NA0x00000000);
32745 proto_item_append_text(chan_item, " #%d", i);
32746 i += 1;
32747
32748 chan_tree = proto_item_add_subtree(chan_item , ett_tag_supported_channels);
32749
32750 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_first, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32751 proto_item_append_text(chan_item, " First: %d", tvb_get_uint8(tvb, offset));
32752 offset += 1;
32753
32754 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_range, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32755 proto_item_append_text(chan_item, ", Range: %d ", tvb_get_uint8(tvb, offset));
32756 offset += 1;
32757
32758 }
32759 return tvb_captured_length(tvb);
32760}
32761
32762/* 7.3.2.20 Channel Switch Announcement element (37) */
32763static int
32764ieee80211_tag_switch_ann(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32765{
32766 int tag_len = tvb_reported_length(tvb);
32767 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32768 int offset = 0;
32769 if (tag_len != 3)
32770 {
32771 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 3", tag_len);
32772 return 1;
32773 }
32774
32775 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32776 proto_item_append_text(field_data->item_tag, " Mode: %d", tvb_get_uint8(tvb, offset));
32777 offset += 1;
32778
32779 proto_tree_add_item(tree, hf_ieee80211_csa_new_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32780 proto_item_append_text(field_data->item_tag, ", Number: %d ", tvb_get_uint8(tvb, offset));
32781 offset += 1;
32782
32783 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32784 proto_item_append_text(field_data->item_tag, ", Count: %d ", tvb_get_uint8(tvb, offset));
32785 return tvb_captured_length(tvb);
32786}
32787
32788/* 7.3.2.21 Measurement Request element (38) with update from 802.11k-2008 */
32789static int
32790ieee80211_tag_measure_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32791{
32792 int tag_len = tvb_reported_length(tvb);
32793 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32794 int offset = 0;
32795 uint8_t request_type;
32796 proto_item *parent_item;
32797 proto_tree *sub_tree;
32798 static int * const ieee80211_tag_measure_request_mode[] = {
32799 &hf_ieee80211_tag_measure_request_mode_parallel,
32800 &hf_ieee80211_tag_measure_request_mode_enable,
32801 &hf_ieee80211_tag_measure_request_mode_request,
32802 &hf_ieee80211_tag_measure_request_mode_report,
32803 &hf_ieee80211_tag_measure_request_mode_duration_mandatory,
32804 &hf_ieee80211_tag_measure_request_mode_reserved,
32805 NULL((void*)0)
32806 };
32807
32808 if (tag_len < 3)
32809 {
32810 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
32811 return tvb_captured_length(tvb);
32812 }
32813 proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_token, tvb, offset, 1, ENC_NA0x00000000);
32814 offset += 1;
32815
32816 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_request_mode,
32817 ett_tag_measure_request_mode_tree, ieee80211_tag_measure_request_mode,
32818 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32819 offset += 1;
32820
32821 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_type, tvb, offset, 1, ENC_NA0x00000000);
32822 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_type_tree);
32823 request_type = tvb_get_uint8(tvb, offset);
32824 offset += 1;
32825
32826 switch (request_type) {
32827 case 0: /* Basic Request */
32828 case 1: /* Clear channel assessment (CCA) request */
32829 case 2: /* Receive power indication (RPI) histogram request */
32830 {
32831 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
32832 offset += 1;
32833
32834 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
32835 offset += 8;
32836
32837 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32838 offset += 2;
32839 break;
32840 }
32841 case 3: /* Channel Load Request */
32842 {
32843 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
32844 offset += 1;
32845
32846 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
32847 offset += 1;
32848
32849 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32850 offset += 2;
32851
32852 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32853 offset += 2;
32854
32855 while (offset < tag_len)
32856 {
32857 uint8_t sub_id;
32858 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_id, tvb, offset, 1, ENC_NA0x00000000);
32859 sub_id = tvb_get_uint8(tvb, offset);
32860 offset += 1;
32861
32862 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA0x00000000);
32863 offset += 1;
32864
32865 switch (sub_id) {
32866 case MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1: /* Channel Load Reporting Information (1) */
32867 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition, tvb, offset, 1, ENC_NA0x00000000);
32868 offset += 1;
32869 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref, tvb, offset, 1, ENC_NA0x00000000);
32870 offset += 1;
32871 break;
32872 default:
32873 /* no default action */
32874 break;
32875 }
32876 }
32877 break;
32878 }
32879 case 4: /* Noise Histogram Request */
32880 {
32881 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
32882 offset += 1;
32883
32884 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
32885 offset += 1;
32886
32887 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32888 offset += 2;
32889
32890 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32891 offset += 2;
32892
32893 while (offset < tag_len)
32894 {
32895 uint8_t sub_id;
32896 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_id, tvb, offset, 1, ENC_NA0x00000000);
32897 sub_id = tvb_get_uint8(tvb, offset);
32898 offset += 1;
32899
32900 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA0x00000000);
32901 offset += 1;
32902
32903 switch (sub_id) {
32904 case MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1: /* Noise Histogram Reporting Information (1) */
32905 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition, tvb, offset, 1, ENC_NA0x00000000);
32906 offset += 1;
32907 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref, tvb, offset, 1, ENC_NA0x00000000);
32908 offset += 1;
32909 break;
32910 default:
32911 /* no default action */
32912 break;
32913 }
32914 }
32915 break;
32916 }
32917 case 5: /* Beacon Request */
32918 {
32919 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
32920 offset += 1;
32921
32922 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
32923 offset += 1;
32924
32925 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32926 offset += 2;
32927
32928 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32929 offset += 2;
32930
32931 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_measurement_mode, tvb, offset, 1, ENC_NA0x00000000);
32932 offset += 1;
32933
32934 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_bssid, tvb, offset, 6, ENC_NA0x00000000);
32935 offset += 6;
32936
32937 while (offset < tag_len)
32938 {
32939 uint8_t sub_id, sub_length, sub_tag_end;
32940 proto_item *sub_elem_item, *sub_elem_len_item;
32941 proto_tree *sub_elem_tree;
32942
32943 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_id, tvb, offset, 1, ENC_NA0x00000000);
32944 sub_id = tvb_get_uint8(tvb, offset);
32945 offset += 1;
32946
32947 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_request_sub_element_tree);
32948
32949 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_subelement_length,
32950 tvb, offset, 1, ENC_NA0x00000000);
32951 sub_length = tvb_get_uint8(tvb, offset);
32952 offset += 1;
32953 sub_tag_end = offset + sub_length;
32954
32955 if (sub_tag_end > tag_len)
32956 {
32957 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
32958 return tvb_captured_length(tvb);
32959 }
32960
32961 switch (sub_id) {
32962 case MEASURE_REQ_BEACON_SUB_SSID0: /* SSID (0) */
32963 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_ssid, tvb, offset, sub_length, ENC_ASCII0x00000000);
32964 offset += sub_length;
32965 break;
32966 case MEASURE_REQ_BEACON_SUB_BRI1: /* Beacon Reporting Information (1) */
32967 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32968 offset += 1;
32969 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32970 offset += 1;
32971 break;
32972 case MEASURE_REQ_BEACON_SUB_RD2: /* Reporting Detail (2) */
32973 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32974 offset += 1;
32975 break;
32976 case MEASURE_REQ_BEACON_SUB_REQUEST10: /* Request (10) */
32977 {
32978 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
32979 offset += ieee80211_tag_request(sub_tvb, pinfo, sub_elem_tree, NULL((void*)0));
32980 break;
32981 }
32982 case MEASURE_REQ_BEACON_SUB_REQUEST_EXT11: /* Extended Request (11) */
32983 dissect_extended_request(tvb, pinfo, sub_elem_tree, offset, sub_length);
32984 offset += sub_length;
32985 break;
32986 case MEASURE_REQ_BEACON_SUB_APCP51: /* AP Channel Report (51) */
32987 {
32988 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
32989 ieee80211_tagged_field_data_t sub_data = {
32990 .ftype = 0,
32991 .sanity_check = NULL((void*)0),
32992 .isDMG = false0,
32993 .item_tag_length = sub_elem_len_item,
32994 .item_tag = sub_elem_item};
32995 offset += dissect_ap_channel_report(sub_tvb, pinfo, sub_elem_tree, &sub_data);
32996 break;
32997 }
32998 case MEASURE_REQ_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163:
32999 {
33000 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
33001 offset += dissect_wide_bw_channel_switch(sub_tvb, pinfo, sub_elem_tree, NULL((void*)0));
33002 break;
33003 }
33004 case MEASURE_REQ_BEACON_SUB_LAST_REPORT_REQ164:
33005 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_last_report_indication_request,
33006 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33007 offset += 1;
33008 break;
33009 default:
33010 /* no default action */
33011 break;
33012 }
33013 if (offset < sub_tag_end)
33014 {
33015 proto_item *tix;
33016 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_unknown, tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33017 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_beacon_unknown);
33018 offset = sub_tag_end;
33019 }
33020 }
33021
33022 break;
33023 }
33024 case 6: /* Frame Request */
33025 {
33026 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33027 offset += 1;
33028
33029 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33030 offset += 1;
33031
33032 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33033 offset += 2;
33034
33035 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33036 offset += 2;
33037
33038 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_frame_request_type, tvb, offset, 1, ENC_NA0x00000000);
33039 offset += 1;
33040
33041 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mac_address, tvb, offset, 6, ENC_NA0x00000000);
33042 offset += 6;
33043
33044 /* TODO Add Optional Subelements */
33045 break;
33046 }
33047 case 7: /* BSTA Statistics Request */
33048 {
33049 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_peer_mac_address, tvb, offset, 6, ENC_NA0x00000000);
33050 offset += 6;
33051
33052 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33053 offset += 2;
33054
33055 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33056 offset += 2;
33057
33058 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_group_id, tvb, offset, 1, ENC_NA0x00000000);
33059 offset += 1;
33060
33061 /* TODO Add Optional Subelements */
33062 break;
33063 }
33064 case 8: /* Location Configuration Indication (LCI) Request */
33065 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_subject, tvb, offset, 1, ENC_NA0x00000000);
33066 offset += 1;
33067
33068 /* TODO Add Optional Subelements */
33069 break;
33070 case 9: /* Transmit Stream Measurement Request */
33071 /* TODO */
33072 case 10: /* Multicast Diagnostics Request */
33073 /* TODO */
33074 case 11: /* Location Civic Request */
33075 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_subject, tvb, offset, 1, ENC_NA0x00000000);
33076 offset += 1;
33077
33078 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_civic_location_type, tvb, offset, 1, ENC_NA0x00000000);
33079 offset += 1;
33080
33081 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_service_interval_units, tvb, offset, 1, ENC_NA0x00000000);
33082 offset += 1;
33083
33084 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_service_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33085 offset += 2;
33086 /* TODO Add Optional Subelements */
33087 break;
33088 case 12: /* Location Identifier Request */
33089 /* TODO */
33090 case 13: /* Directional Channel Quality Request */
33091 /* TODO */
33092 case 14: /* Directional Measurement Request */
33093 /* TODO */
33094 case 15: /* Directional Statistics Request */
33095 /* TODO */
33096 case 16: /* Fine Timing Measurement Range Request */
33097 /* TODO */
33098 case 255: /* Measurement Pause Request */
33099 /* TODO */
33100 default: /* unknown */
33101 break;
33102 }
33103 if (offset < tag_len)
33104 {
33105 proto_item *tix;
33106 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_unknown, tvb, offset, tag_len - offset, ENC_NA0x00000000);
33107 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_unknown);
33108 }
33109
33110 return tvb_captured_length(tvb);
33111}
33112
33113/* 7.3.2.22 Measurement Report element (39) with update from 802.11k-2008 */
33114static int
33115ieee80211_tag_measure_rep(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33116{
33117 int tag_len = tvb_reported_length(tvb);
33118 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33119 int offset = 0;
33120 proto_item *parent_item;
33121 proto_tree *sub_tree;
33122 uint8_t report_type;
33123 static int * const ieee80211_tag_measure_report_mode[] = {
33124 &hf_ieee80211_tag_measure_report_mode_late,
33125 &hf_ieee80211_tag_measure_report_mode_incapable,
33126 &hf_ieee80211_tag_measure_report_mode_refused,
33127 &hf_ieee80211_tag_measure_report_mode_reserved,
33128 NULL((void*)0)
33129 };
33130 static int * const ieee80211_tag_measure_map_field[] = {
33131 &hf_ieee80211_tag_measure_map_field_bss,
33132 &hf_ieee80211_tag_measure_map_field_ofdm,
33133 &hf_ieee80211_tag_measure_map_field_unident_signal,
33134 &hf_ieee80211_tag_measure_map_field_radar,
33135 &hf_ieee80211_tag_measure_map_field_unmeasured,
33136 &hf_ieee80211_tag_measure_map_field_reserved,
33137 NULL((void*)0)
33138 };
33139 static int * const ieee80211_tag_measure_report_frame_info[] = {
33140 &hf_ieee80211_tag_measure_report_frame_info_phy_type,
33141 &hf_ieee80211_tag_measure_report_frame_info_frame_type,
33142 NULL((void*)0)
33143 };
33144
33145 if (tag_len < 3)
33146 {
33147 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
33148 return tvb_captured_length(tvb);
33149 }
33150 proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_measurement_token, tvb, offset, 1, ENC_NA0x00000000);
33151 offset += 1;
33152
33153 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_report_mode,
33154 ett_tag_measure_report_mode_tree, ieee80211_tag_measure_report_mode,
33155 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33156 offset += 1;
33157
33158 report_type = tvb_get_uint8(tvb, offset);
33159 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33160 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_type_tree);
33161 offset += 1;
33162
33163 if (tag_len == 3)
33164 return tvb_captured_length(tvb);
33165
33166 switch (report_type) {
33167 case 0: /* Basic Report */
33168 {
33169 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33170 offset += 1;
33171
33172 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33173 offset += 8;
33174
33175 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33176 offset += 2;
33177
33178 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_basic_map_field,
33179 ett_tag_measure_report_basic_map_tree, ieee80211_tag_measure_map_field,
33180 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33181 break;
33182 }
33183 case 1: /* Clear channel assessment (CCA) report */
33184 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33185 offset += 1;
33186
33187 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33188 offset += 8;
33189
33190 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33191 offset += 2;
33192
33193 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_cca_busy_fraction, tvb, offset, 1, ENC_NA0x00000000);
33194 offset += 1;
33195 break;
33196 case 2: /* Receive power indication (RPI) histogram report */
33197 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33198 offset += 1;
33199
33200 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33201 offset += 8;
33202
33203 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33204 offset += 2;
33205
33206 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report, tvb, offset, 8, ENC_NA0x00000000);
33207 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_rpi_tree);
33208
33209 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_0, tvb, offset, 1, ENC_NA0x00000000);
33210 offset += 1;
33211
33212 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_1, tvb, offset, 1, ENC_NA0x00000000);
33213 offset += 1;
33214
33215 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_2, tvb, offset, 1, ENC_NA0x00000000);
33216 offset += 1;
33217
33218 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_3, tvb, offset, 1, ENC_NA0x00000000);
33219 offset += 1;
33220
33221 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_4, tvb, offset, 1, ENC_NA0x00000000);
33222 offset += 1;
33223
33224 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_5, tvb, offset, 1, ENC_NA0x00000000);
33225 offset += 1;
33226
33227 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_6, tvb, offset, 1, ENC_NA0x00000000);
33228 offset += 1;
33229
33230 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_7, tvb, offset, 1, ENC_NA0x00000000);
33231 offset += 1;
33232 break;
33233 case 3: /* Channel Load Report */
33234 {
33235 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33236 offset += 1;
33237
33238 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33239 offset += 1;
33240
33241 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33242 offset += 8;
33243
33244 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33245 offset += 2;
33246
33247 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_load, tvb, offset, 1, ENC_NA0x00000000);
33248 offset += 1;
33249
33250 /* TODO Add Optional Subelements */
33251 break;
33252 }
33253 case 4: /* Noise Histogram Report */
33254 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33255 offset += 1;
33256
33257 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33258 offset += 1;
33259
33260 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33261 offset += 8;
33262
33263 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33264 offset += 2;
33265
33266 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA0x00000000);
33267 offset += 1;
33268
33269 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_anpi, tvb, offset, 1, ENC_NA0x00000000);
33270 offset += 1;
33271
33272 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_0, tvb, offset, 1, ENC_NA0x00000000);
33273 offset += 1;
33274
33275 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_1, tvb, offset, 1, ENC_NA0x00000000);
33276 offset += 1;
33277
33278 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_2, tvb, offset, 1, ENC_NA0x00000000);
33279 offset += 1;
33280
33281 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_3, tvb, offset, 1, ENC_NA0x00000000);
33282 offset += 1;
33283
33284 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_4, tvb, offset, 1, ENC_NA0x00000000);
33285 offset += 1;
33286
33287 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_5, tvb, offset, 1, ENC_NA0x00000000);
33288 offset += 1;
33289
33290 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_6, tvb, offset, 1, ENC_NA0x00000000);
33291 offset += 1;
33292
33293 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_7, tvb, offset, 1, ENC_NA0x00000000);
33294 offset += 1;
33295
33296 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_8, tvb, offset, 1, ENC_NA0x00000000);
33297 offset += 1;
33298
33299 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_9, tvb, offset, 1, ENC_NA0x00000000);
33300 offset += 1;
33301
33302 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_10, tvb, offset, 1, ENC_NA0x00000000);
33303 offset += 1;
33304
33305 /* TODO Add Optional Subelements */
33306 break;
33307 case 5: /* Beacon Report */
33308 {
33309 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33310 offset += 1;
33311
33312 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33313 offset += 1;
33314
33315 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33316 offset += 8;
33317
33318 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33319 offset += 2;
33320
33321 proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset, hf_ieee80211_tag_measure_report_frame_info,
33322 ett_tag_measure_report_frame_tree, ieee80211_tag_measure_report_frame_info,
33323 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33324 offset += 1;
33325
33326 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rcpi, tvb, offset, 1, ENC_NA0x00000000);
33327 offset += 1;
33328
33329 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rsni, tvb, offset, 1, ENC_NA0x00000000);
33330 offset += 1;
33331
33332 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_bssid, tvb, offset, 6, ENC_NA0x00000000);
33333 offset += 6;
33334
33335 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA0x00000000);
33336 offset += 1;
33337
33338 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
33339 offset += 4;
33340
33341 while (offset < tag_len)
33342 {
33343 uint8_t sub_id, sub_length, sub_tag_end;
33344 proto_item *sub_elem_item, *sub_elem_len_item;
33345 proto_tree *sub_elem_tree;
33346
33347 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_beacon_sub_id,
33348 tvb, offset, 1, ENC_NA0x00000000);
33349 sub_id = tvb_get_uint8(tvb, offset);
33350 offset += 1;
33351
33352 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_report_sub_element_tree);
33353
33354 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_subelement_length,
33355 tvb, offset, 1, ENC_NA0x00000000);
33356 sub_length = tvb_get_uint8(tvb, offset);
33357 offset += 1;
33358 sub_tag_end = offset + sub_length;
33359
33360 if (sub_tag_end > tag_len)
33361 {
33362 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33363 return tvb_captured_length(tvb);
33364 }
33365
33366 switch (sub_id) {
33367 case MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY1: /* Reported Frame Body (1) */
33368 {
33369 proto_tree *rep_tree;
33370 bool_Bool fixed_fields = true1;
33371
33372 rep_tree = proto_tree_add_subtree(sub_elem_tree, tvb, offset, sub_length,
33373 ett_tag_measure_reported_frame_tree, NULL((void*)0), "Reported Frame Body");
33374
33375 /* If reported frame body fragment ID sub element is present and this is not
33376 the first fragment then there are no fixed size fields */
33377 if (((tag_len - sub_tag_end) >= 4) &&
33378 (tvb_get_uint8(tvb, sub_tag_end) == MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2) &&
33379 ((tvb_get_uint8(tvb, sub_tag_end + 3) & 0x7f) > 0))
33380 fixed_fields = false0;
33381
33382 if (fixed_fields) {
33383 add_ff_timestamp(rep_tree, tvb, pinfo, offset);
33384 offset += 8;
33385 add_ff_beacon_interval(rep_tree, tvb, pinfo, offset);
33386 offset += 2;
33387 add_ff_cap_info(rep_tree, tvb, pinfo, offset);
33388 offset += 2;
33389 sub_length -= 12;
33390 }
33391
33392 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, rep_tree, sub_length, MGT_PROBE_RESP0x05, NULL((void*)0));
33393 offset += sub_length;
33394 break;
33395 }
33396 case MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2:
33397 {
33398 static int * const ieee80211_tag_measure_reported_frame_frag_id[] = {
33399 &hf_ieee80211_tag_measure_reported_frame_frag_rep_id,
33400 &hf_ieee80211_tag_measure_reported_frame_frag_number,
33401 &hf_ieee80211_tag_measure_reported_frame_frag_more,
33402 NULL((void*)0)
33403 };
33404 proto_tree_add_bitmask_with_flags(sub_elem_tree, tvb, offset,
33405 hf_ieee80211_tag_measure_reported_frame_frag_id,
33406 ett_tag_measure_reported_frame_frag_id_tree,
33407 ieee80211_tag_measure_reported_frame_frag_id,
33408 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33409 offset += 2;
33410 break;
33411 }
33412 case MEASURE_REP_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163:
33413 {
33414 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
33415 offset += dissect_wide_bw_channel_switch(sub_tvb, pinfo, sub_elem_tree, NULL((void*)0));
33416 break;
33417 }
33418 case MEASURE_REP_BEACON_SUB_LAST_REPORT_INDICATION164:
33419 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_beacon_sub_last_report_indication,
33420 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33421 offset += 1;
33422 break;
33423 default:
33424 /* no default action */
33425 break;
33426 }
33427
33428 if (offset < sub_tag_end)
33429 {
33430 proto_item *tix;
33431 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_beacon_unknown,
33432 tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33433 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_beacon_unknown);
33434 offset = sub_tag_end;
33435 }
33436 }
33437 break;
33438 }
33439 case 6: /* Frame Report */
33440 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33441 offset += 1;
33442
33443 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33444 offset += 1;
33445
33446 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33447 offset += 8;
33448
33449 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33450 offset += 2;
33451
33452 /* TODO Add Optional Subelements */
33453 break;
33454 case 7: /* BSTA Statistics Report */
33455 /* TODO */
33456 case 8: /* Location Configuration Information Report element */
33457 //proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
33458 //offset += 4;
33459
33460 while (offset < tag_len)
33461 {
33462 uint8_t sub_id, sub_length, sub_tag_end;
33463 proto_item *sub_elem_item, *sub_elem_len_item;
33464 proto_tree *sub_elem_tree;
33465
33466 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_lci_sub_id,
33467 tvb, offset, 1, ENC_NA0x00000000);
33468 sub_id = tvb_get_uint8(tvb, offset);
33469 offset += 1;
33470
33471 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_report_sub_element_tree);
33472
33473 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_subelement_length,
33474 tvb, offset, 1, ENC_NA0x00000000);
33475 sub_length = tvb_get_uint8(tvb, offset);
33476 offset += 1;
33477 sub_tag_end = offset + sub_length;
33478
33479 if (sub_tag_end > tag_len)
33480 {
33481 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33482 return tvb_captured_length(tvb);
33483 }
33484
33485 switch (sub_id) {
33486 case MEASURE_REP_LCI_SUB_REPORTED_LCI0: /* Location Configuration Information (0) */
33487 {
33488 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_lci,
33489 tvb, offset, 16, ENC_NA0x00000000);
33490 offset += 16;
33491 break;
33492 }
33493 case MEASURE_REP_LCI_SUB_REPORTED_Z4: /* Z (4) */
33494 {
33495 static int * const ieee80211_tag_measure_reported_lci_z_sta_floor_info[] = {
33496 &hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_expected_to_move,
33497 &hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_sta_floor_number,
33498 NULL((void*)0)
33499 };
33500 proto_tree_add_bitmask_with_flags(sub_elem_tree, tvb, offset,
33501 hf_ieee80211_tag_measure_report_lci_z_sta_floor_info,
33502 ett_tag_measure_reported_lci_z_tree,
33503 ieee80211_tag_measure_reported_lci_z_sta_floor_info,
33504 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33505 offset += 2;
33506
33507 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor,
33508 tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
33509 offset += 3;
33510
33511 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor_uncertainty,
33512 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33513 offset += 1;
33514 break;
33515 }
33516 case MEASURE_REP_LCI_SUB_REPORTED_URP6: /* Usage Rules/Policy (6) */
33517 {
33518 static int * const ieee80211_tag_measure_reported_lci_urp[] = {
33519 &hf_ieee80211_tag_measure_report_lci_urp_retransmission_allowed,
33520 &hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative_present,
33521 &hf_ieee80211_tag_measure_report_lci_urp_sta_location_policy,
33522 &hf_ieee80211_tag_measure_report_lci_urp_reserved,
33523 NULL((void*)0)
33524 };
33525 proto_tree_add_bitmask_with_flags(sub_elem_tree, tvb, offset,
33526 hf_ieee80211_tag_measure_report_lci_urp,
33527 ett_tag_measure_reported_lci_urp_tree,
33528 ieee80211_tag_measure_reported_lci_urp,
33529 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33530 offset += 1;
33531
33532 /* Retention Expires Relative (optional) */
33533 if ((sub_tag_end - 1) == 2 ) {
33534 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative,
33535 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33536 offset += 1;
33537 }
33538 break;
33539 }
33540 default:
33541 /* no default action */
33542 break;
33543 }
33544
33545 if (offset < sub_tag_end)
33546 {
33547 proto_item *tix;
33548 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_unknown,
33549 tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33550 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_lci_unknown);
33551 offset = sub_tag_end;
33552 }
33553 }
33554 break;
33555 case 9: /* Transmit Stream Measurement Report */
33556 /* TODO */
33557 case 10: /* Multicast Diagnostics Report */
33558 /* TODO */
33559 case 11: /* Location Civic Report */
33560 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_civic_location_type, tvb, offset, 1, ENC_NA0x00000000);
33561 offset += 1;
33562
33563 while (offset < tag_len)
33564 {
33565 uint8_t sub_id, sub_length, sub_tag_end;
33566 proto_item *sub_elem_item, *sub_elem_len_item;
33567 proto_tree *sub_elem_tree;
33568
33569 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_civic_sub_id,
33570 tvb, offset, 1, ENC_NA0x00000000);
33571 sub_id = tvb_get_uint8(tvb, offset);
33572 offset += 1;
33573
33574 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_report_sub_element_tree);
33575
33576 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_subelement_length,
33577 tvb, offset, 1, ENC_NA0x00000000);
33578 sub_length = tvb_get_uint8(tvb, offset);
33579 offset += 1;
33580 sub_tag_end = offset + sub_length;
33581
33582 if (sub_tag_end > tag_len)
33583 {
33584 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33585 return tvb_captured_length(tvb);
33586 }
33587
33588 switch (sub_id) {
33589 case MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_CIVIC0: /* Location Civic (0) */
33590 {
33591 uint32_t length;
33592 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic_country,
33593 tvb, offset, 2, ENC_ASCII0x00000000);
33594 offset += 2;
33595
33596 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic_type,
33597 tvb, offset, 1, ENC_NA0x00000000);
33598 offset += 1;
33599
33600 proto_tree_add_item_ret_uint(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic_length,
33601 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &length);
33602 offset += 1;
33603
33604 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic,
33605 tvb, offset, length, ENC_ASCII0x00000000);
33606 offset += length;
33607 break;
33608 }
33609 default:
33610 /* no default action */
33611 break;
33612 }
33613
33614 if (offset < sub_tag_end)
33615 {
33616 proto_item *tix;
33617 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_unknown,
33618 tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33619 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_lci_unknown);
33620 offset = sub_tag_end;
33621 }
33622 }
33623 break;
33624 case 12: /* Location Identifier Report */
33625 /* TODO */
33626 case 13: /* Directional Channel Quality Report */
33627 /* TODO */
33628 case 14: /* Directional Measurement Report */
33629 /* TODO */
33630 case 15: /* Directional Statistics Report */
33631 /* TODO */
33632 case 16: /* Fine Timing Measurement range Report */
33633 /* TODO */
33634 default: /* unknown */
33635 break;
33636 }
33637 if (offset < tag_len)
33638 {
33639 proto_item *tix;
33640 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_unknown, tvb, offset, tag_len - offset, ENC_NA0x00000000);
33641 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_unknown);
33642 }
33643 return tvb_captured_length(tvb);
33644}
33645
33646/* 7.3.2.23 Quiet element (40) */
33647static int
33648ieee80211_tag_quiet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33649{
33650 int tag_len = tvb_reported_length(tvb);
33651 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33652 int offset = 0;
33653 if (tag_len != 6)
33654 {
33655 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
33656 return tvb_captured_length(tvb);
33657 }
33658
33659 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_count, tvb, offset, 1, ENC_NA0x00000000);
33660 proto_item_append_text(field_data->item_tag, " Count: %d", tvb_get_uint8(tvb, offset));
33661 offset += 1;
33662
33663 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_period, tvb, offset, 1, ENC_NA0x00000000);
33664 proto_item_append_text(field_data->item_tag, " Period: %d", tvb_get_uint8(tvb, offset));
33665 offset += 1;
33666
33667 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33668 proto_item_append_text(field_data->item_tag, " Duration: %d", tvb_get_letohs(tvb, offset));
33669 offset += 2;
33670
33671 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33672 proto_item_append_text(field_data->item_tag, " Offset: %d", tvb_get_letohs(tvb, offset));
33673
33674 return tvb_captured_length(tvb);
33675}
33676
33677/* 7.3.2.24 IBSS DFS element (41) */
33678static int
33679ieee80211_tag_ibss_dfs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33680{
33681 int tag_len = tvb_reported_length(tvb);
33682 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33683 int offset = 0;
33684 proto_item *ti_sup_map;
33685 proto_tree *sub_map_tree;
33686 if (tag_len < 7)
33687 {
33688 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 7", tag_len);
33689 return tvb_captured_length(tvb);
33690 }
33691
33692 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_owner, tvb, offset, 6, ENC_NA0x00000000);
33693 proto_item_append_text(field_data->item_tag, " Owner: %s", tvb_ether_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_ETHER, offset));
33694 offset += 6;
33695
33696 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_recovery_interval, tvb, offset, 1, ENC_NA0x00000000);
33697 offset += 1;
33698
33699 while (offset < tag_len)
33700 {
33701 ti_sup_map = proto_tree_add_item(tree, hf_ieee80211_tag_dfs_channel_map, tvb, offset, 2, ENC_NA0x00000000);
33702 sub_map_tree = proto_item_add_subtree(ti_sup_map, ett_tag_dfs_map_tree);
33703 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33704 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_map, tvb, offset, 1, ENC_NA0x00000000);
33705 offset += 2;
33706 }
33707 return tvb_captured_length(tvb);
33708}
33709
33710/* 7.3.2.13 ERP Information element (42) */
33711static int
33712ieee80211_tag_erp_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33713{
33714 int tag_len = tvb_reported_length(tvb);
33715 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33716 int offset = 0;
33717 static int * const ieee80211_tag_erp_info_flags[] = {
33718 &hf_ieee80211_tag_erp_info_erp_present,
33719 &hf_ieee80211_tag_erp_info_use_protection,
33720 &hf_ieee80211_tag_erp_info_barker_preamble_mode,
33721 &hf_ieee80211_tag_erp_info_reserved,
33722 NULL((void*)0)
33723 };
33724
33725 if (tag_len != 1)
33726 {
33727 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
33728 return tvb_captured_length(tvb);
33729 }
33730
33731 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_erp_info,
33732 ett_tag_erp_info_tree, ieee80211_tag_erp_info_flags,
33733 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33734
33735 return tvb_captured_length(tvb);
33736}
33737
33738/* 7.3.2.32 TS Delay element (43) */
33739static int
33740ieee80211_tag_ts_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33741{
33742 int tag_len = tvb_reported_length(tvb);
33743 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33744 int offset = 0;
33745 if (tag_len != 4)
33746 {
33747 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
33748 return tvb_captured_length(tvb);
33749 }
33750
33751 proto_tree_add_item(tree, hf_ieee80211_ts_delay, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
33752 proto_item_append_text(field_data->item_tag, " : %d", tvb_get_ntohl(tvb, offset));
33753 return tvb_captured_length(tvb);
33754}
33755
33756/* 7.3.2.33 TCLAS Processing element (44) */
33757static int
33758ieee80211_tag_tclas_process(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33759{
33760 int tag_len = tvb_reported_length(tvb);
33761 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33762 int offset = 0;
33763 if (tag_len != 1)
33764 {
33765 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
33766 return tvb_captured_length(tvb);
33767 }
33768
33769 proto_tree_add_item(tree, hf_ieee80211_tclas_process, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33770 proto_item_append_text(field_data->item_tag, " : %s", val_to_str(pinfo->pool, tvb_get_uint8(tvb, offset), ieee80211_tclas_process_flag, "Unknown %d"));
33771 return tvb_captured_length(tvb);
33772}
33773
33774/* 802.11-2012 8.4.2.37 QoS Capability element (46) */
33775static int
33776ieee80211_tag_qos_capability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33777{
33778 int tag_len = tvb_reported_length(tvb);
33779 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33780 int offset = 0;
33781 if (tag_len != 1)
33782 {
33783 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
33784 return tvb_captured_length(tvb);
33785 }
33786 dissect_qos_capability(tree, tvb, pinfo, offset, field_data->ftype);
33787 return tvb_captured_length(tvb);
33788}
33789
33790static int
33791ieee80211_tag_rsn_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33792{
33793 int tag_len = tvb_reported_length(tvb);
33794 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33795 int offset = 0;
33796 if (tag_len < 2)
33797 {
33798 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
33799 return tvb_captured_length(tvb);
33800 }
33801
33802 dissect_rsn_ie(pinfo, tree, tvb, offset, tag_len, field_data->sanity_check);
33803 return tvb_captured_length(tvb);
33804}
33805
33806/* 7.3.2.14 Extended Supported Rates element (50) */
33807static int
33808ieee80211_tag_ext_supp_rates(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33809{
33810 int tag_len = tvb_reported_length(tvb);
33811 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33812 int offset = 0;
33813 if (tag_len < 1)
33814 {
33815 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be greater than 0", tag_len);
33816 return tvb_captured_length(tvb);
33817 }
33818
33819 while (offset < tag_len)
33820 {
33821 proto_tree_add_item(tree, hf_ieee80211_tag_ext_supp_rates, tvb, offset, 1, ENC_NA0x00000000);
33822 proto_item_append_text(field_data->item_tag, " %s,", val_to_str_ext_const(tvb_get_uint8(tvb, offset), &ieee80211_supported_rates_vals_ext, "Unknown Rate"));
33823 offset += 1;
33824 }
33825 proto_item_append_text(field_data->item_tag, " [Mbit/sec]");
33826 return tvb_captured_length(tvb);
33827}
33828
33829static int
33830ieee80211_tag_cisco_ccx1_ckip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33831{
33832 int tag_len = tvb_reported_length(tvb);
33833 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33834 int offset = 0;
33835 /* From WCS manual:
33836 * If Aironet IE support is enabled, the access point sends an Aironet
33837 * IE 0x85 (which contains the access point name, load, number of
33838 * associated clients, and so on) in the beacon and probe responses of
33839 * this WLAN, and the controller sends Aironet IEs 0x85 and 0x95
33840 * (which contains the management IP address of the controller and
33841 * the IP address of the access point) in the reassociation response
33842 * if it receives Aironet IE 0x85 in the reassociation request.
33843 */
33844
33845 if (tag_len < 26)
33846 {
33847 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u too short, must be >= 26", tag_len);
33848 return tvb_captured_length(tvb);
33849 }
33850 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown, tvb, offset, 10, ENC_NA0x00000000);
33851 offset += 10;
33852
33853 /* The Name of the sending device starts at offset 10 and is up to
33854 15 or 16 bytes in length, \0 padded */
33855 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_name, tvb, offset, 16, ENC_ASCII0x00000000);
33856 offset += 16;
33857
33858 /* Total number off associated clients and repeater access points */
33859 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_clients, tvb, offset, 1, ENC_NA0x00000000);
33860 offset += 1;
33861 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown2, tvb, offset, 3, ENC_NA0x00000000);
33862 return tvb_captured_length(tvb);
33863}
33864
33865static int
33866ieee80211_tag_vendor_specific_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33867{
33868 int tag_len = tvb_reported_length(tvb);
33869 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33870 int offset = 0;
33871 uint32_t tag_vs_len = tag_len;
33872 uint32_t oui;
33873
33874 if (tag_len < 3)
33875 {
33876 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
33877 return tvb_captured_length(tvb);
33878 }
33879
33880 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
33881 proto_item_append_text(field_data->item_tag, ": %s", uint_get_manuf_name_if_known(oui));
33882
33883 offset += 3;
33884 tag_vs_len -= 3;
33885
33886 if (tag_len > 0) {
33887 proto_tree_add_item(field_data->item_tag, hf_ieee80211_tag_vendor_oui_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33888 }
33889
33890 switch (oui) {
33891 /* 802.11 specific vendor ids */
33892 case OUI_WPAWME0x0050F2:
33893 dissect_vendor_ie_wpawme(tree, tvb, pinfo, offset, tag_vs_len, field_data->ftype);
33894 break;
33895 case OUI_RSN0x000FAC:
33896 dissect_vendor_ie_rsn(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33897 break;
33898 case OUI_PRE11N0x00904C:
33899 dissect_vendor_ie_ht(tvb, pinfo, tree, offset, field_data->item_tag, field_data->item_tag_length, tag_vs_len);
33900 break;
33901 case OUI_WFA0x506F9A:
33902 dissect_vendor_ie_wfa(pinfo, field_data->item_tag, tvb);
33903 break;
33904
33905 /* Normal IEEE vendor ids (from oui.h) */
33906 case OUI_CISCOWL0x004096: /* Cisco Wireless (Aironet) */
33907 dissect_vendor_ie_aironet(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33908 break;
33909 case OUI_MARVELL0x005043:
33910 dissect_vendor_ie_marvell(field_data->item_tag, tree, tvb, offset, tag_vs_len);
33911 break;
33912 case OUI_ATHEROS0x00037F:
33913 dissect_vendor_ie_atheros(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo, field_data->item_tag_length);
33914 break;
33915 case OUI_EXTREME_MESH0x000512:
33916 dissect_vendor_ie_extreme_mesh(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo, field_data->item_tag_length);
33917 break;
33918 case OUI_ARUBA0x000B86:
33919 dissect_vendor_ie_aruba(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33920 break;
33921 case OUI_NINTENDO0x001F32:
33922 dissect_vendor_ie_nintendo(field_data->item_tag, tree, tvb, offset, tag_vs_len);
33923 break;
33924 case OUI_ROUTERBOARD0x000C42:
33925 dissect_vendor_ie_routerboard(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33926 break;
33927 case OUI_MERU0x000CE6:
33928 dissect_vendor_ie_meru(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33929 break;
33930 case OUI_ZEBRA_EXTREME0x00A0F8:
33931 dissect_vendor_ie_extreme(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33932 break;
33933 case OUI_AEROHIVE0x001977:
33934 dissect_vendor_ie_aerohive(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33935 break;
33936 case OUI_MIST0x5C5B35:
33937 dissect_vendor_ie_mist(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33938 break;
33939 case OUI_UBIQUITI0x00156D:
33940 dissect_vendor_ie_ubiquiti(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33941 break;
33942 case OUI_RUCKUS0x001392:
33943 dissect_vendor_ie_ruckus(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33944 break;
33945 case OUI_ALCATEL_LUCENT0xDC0856:
33946 dissect_vendor_ie_alcatel(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33947 break;
33948 case OUI_SGDSN0x6A5C35:
33949 dissect_vendor_ie_sgdsn(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33950 break;
33951 case OUI_FORTINET0x00090F:
33952 dissect_vendor_ie_fortinet(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33953 break;
33954 case OUI_MOJO_ARISTA0x001174:
33955 dissect_vendor_ie_arista(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33956 break;
33957 case OUI_WISUN0x0C5A9E:
33958 dissect_vendor_ie_wisun(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33959 break;
33960 case OUI_APPLE0x0017f2:
33961 dissect_vendor_ie_apple(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33962 break;
33963 default:
33964 proto_tree_add_item(tree, hf_ieee80211_tag_vendor_data, tvb, offset + 1, tag_vs_len - 1, ENC_NA0x00000000);
33965 break;
33966 }
33967
33968 return tvb_captured_length(tvb);
33969}
33970
33971static void
33972dissect_symbol_proprietary_ie_extreme(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
33973 tvbuff_t *tvb, int offset, uint32_t tag_len _U___attribute__((unused)),
33974 packet_info *pinfo _U___attribute__((unused)))
33975{
33976 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_assoc_clients, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33977 offset += 2;
33978
33979 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_load_kbps, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33980 offset += 2;
33981
33982 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_load_pps, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33983 offset += 2;
33984
33985 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_client_tx_power, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33986 offset += 2;
33987
33988 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_timestamp, tvb, offset, 4, ENC_TIME_SECS0x00000012|ENC_LITTLE_ENDIAN0x80000000);
33989}
33990
33991static int
33992ieee80211_tag_symbol_proprietary_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33993{
33994 int tag_len = tvb_reported_length(tvb);
33995 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33996 int offset = 0;
33997 uint32_t tag_vs_len = tag_len;
33998 uint32_t oui;
33999
34000 if (tag_len < 3)
34001 {
34002 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
34003 return tvb_captured_length(tvb);
34004 }
34005
34006 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_symbol_proprietary_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
34007 proto_item_append_text(field_data->item_tag, ": %s", uint_get_manuf_name_if_known(oui));
34008
34009 offset += 3;
34010 tag_vs_len -= 3;
34011
34012 switch (oui) {
34013 /* 802.11 specific vendor ids */
34014 case OUI_ZEBRA_EXTREME0x00A0F8:
34015 dissect_symbol_proprietary_ie_extreme(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34016 break;
34017 default:
34018 proto_tree_add_item(tree, hf_ieee80211_tag_symbol_proprietary_data, tvb, offset, tag_vs_len, ENC_NA0x00000000);
34019 break;
34020 }
34021
34022 return tvb_captured_length(tvb);
34023}
34024
34025#define HE_HTC_HE_SUPPORT0x00000001 0x00000001
34026#define HE_DYNAMIC_FRAGMENTATION_SUPPORT0x00000018 0x00000018
34027#define HE_ALL_ACK_SUPPORT0x00000200 0x00000200
34028#define HE_UMRS_SUPPORT0x00000400 0x00000400
34029#define HE_BSR_SUPPORT0x00000800 0x00000800
34030
34031static const val64_string he_dynamic_fragmentation_support_vals[] = {
34032 { 0, "No support for dynamic fragmentation" },
34033 { 1, "Level 1 dynamic fragmentation support" },
34034 { 2, "Level 2 dynamic fragmentation support" },
34035 { 3, "Level 3 dynamic fragmentation support" },
34036 { 0, NULL((void*)0) }
34037};
34038
34039static const val64_string he_minimum_fragmentation_size_vals[] = {
34040 { 0, "No restriction on minimum payload size" },
34041 { 1, "Minimum payload size of 128 bytes" },
34042 { 2, "Minimum payload size of 256 bytes" },
34043 { 3, "Minimum payload size of 512 bytes" },
34044 { 0, NULL((void*)0) }
34045};
34046
34047static const val64_string he_trigger_mac_padding_dur_vals[] = {
34048 { 0, "0" },
34049 { 1, "8 uS" },
34050 { 2, "16 uS" },
34051 { 3, "Reserved" },
34052 { 0, NULL((void*)0) }
34053};
34054
34055static void
34056max_frag_msdus_base_custom(char *result, uint32_t max_frag_msdus_value)
34057{
34058 if (max_frag_msdus_value == 7)
34059 snprintf(result, ITEM_LABEL_LENGTH240, "No restriction");
34060 else
34061 snprintf(result, ITEM_LABEL_LENGTH240, "%u", 1 << max_frag_msdus_value);
34062}
34063
34064static const val64_string he_link_adaptation_support_vals[] = {
34065 { 0, "No feedback if the STA does not provide HE MFB" },
34066 { 1, "Reserved" },
34067 { 2, "Unsolicited if the STA can receive and provide only unsolicited HE MFB" },
34068 { 3, "Both" },
34069 { 0, NULL((void*)0) }
34070};
34071
34072static const val64_string he_mimo_cntrl_nc_index_vals[] = {
34073 {0x00, "1 Column"},
34074 {0x01, "2 Columns"},
34075 {0x02, "3 Columns"},
34076 {0x03, "4 Columns"},
34077 {0x04, "5 Columns"},
34078 {0x05, "6 Columns"},
34079 {0x06, "7 Columns"},
34080 {0x07, "8 Columns"},
34081 {0, NULL((void*)0)}
34082};
34083
34084static const val64_string he_mimo_cntrl_nr_index_vals[] = {
34085 {0x00, "1 Row"},
34086 {0x01, "2 Rows"},
34087 {0x02, "3 Rows"},
34088 {0x03, "4 Rows"},
34089 {0x04, "5 Rows"},
34090 {0x05, "6 Rows"},
34091 {0x06, "7 Rows"},
34092 {0x07, "8 Rows"},
34093 {0, NULL((void*)0)}
34094};
34095
34096static const val64_string he_mimo_cntrl_grouping_flags[] = {
34097 { 0x00, "Carrier Groups of 4" },
34098 { 0x01, "Carrier Groups of 16" },
34099 { 0, NULL((void*)0) }
34100};
34101
34102static const val64_string he_mimo_cntrl_feedback_vals[] = {
34103 { 0x00, "SU" },
34104 { 0x01, "MU" },
34105 { 0x02, "CQI feedback" },
34106 { 0x03, "Reserved" },
34107 { 0, NULL((void*)0) }
34108};
34109
34110static int * const he_phy_first_byte_headers[] = {
34111 &hf_ieee80211_he_phy_cap_reserved_b0,
34112 NULL((void*)0),
34113};
34114
34115static int * const he_phy_b8_to_b23_headers[] = {
34116 &hf_ieee80211_he_phy_cap_punctured_preamble_rx,
34117 &hf_ieee80211_he_phy_cap_device_class,
34118 &hf_ieee80211_he_phy_cap_ldpc_coding_in_payload,
34119 &hf_ieee80211_he_phy_cap_he_su_ppdu_1x_he_ltf_08us,
34120 &hf_ieee80211_he_phy_cap_midamble_tx_rx_max_nsts,
34121 &hf_ieee80211_he_phy_cap_ndp_with_4x_he_ltf_32us,
34122 &hf_ieee80211_he_phy_cap_stbc_tx_lt_80mhz,
34123 &hf_ieee80211_he_phy_cap_stbc_rx_lt_80mhz,
34124 &hf_ieee80211_he_phy_cap_doppler_tx,
34125 &hf_ieee80211_he_phy_cap_doppler_rx,
34126 &hf_ieee80211_he_phy_cap_full_bw_ul_mu_mimo,
34127 &hf_ieee80211_he_phy_cap_partial_bw_ul_mu_mimo,
34128 NULL((void*)0)
34129};
34130
34131static int * const he_phy_b24_to_b39_headers[] = {
34132 &hf_ieee80211_he_phy_cap_dcm_max_constellation_tx,
34133 &hf_ieee80211_he_phy_cap_dcm_max_nss_tx,
34134 &hf_ieee80211_he_phy_cap_dcm_max_constellation_rx,
34135 &hf_ieee80211_he_phy_cap_dcm_max_nss_rx,
34136 &hf_ieee80211_he_phy_cap_rx_partial_bw_su_20mhz_he_mu_ppdu,
34137 &hf_ieee80211_he_phy_cap_su_beamformer,
34138 &hf_ieee80211_he_phy_cap_su_beamformee,
34139 &hf_ieee80211_he_phy_cap_mu_beamformer,
34140 &hf_ieee80211_he_phy_cap_beamformee_sts_lte_80mhz,
34141 &hf_ieee80211_he_phy_cap_beamformee_sts_gt_80mhz,
34142 NULL((void*)0)
34143};
34144
34145static int * const he_phy_b40_to_b55_headers[] = {
34146 &hf_ieee80211_he_phy_cap_number_of_sounding_dims_lte_80,
34147 &hf_ieee80211_he_phy_cap_number_of_sounding_dims_gt_80,
34148 &hf_ieee80211_he_phy_cap_ng_eq_16_su_fb,
34149 &hf_ieee80211_he_phy_cap_ng_eq_16_mu_fb,
34150 &hf_ieee80211_he_phy_cap_codebook_size_eq_4_2_fb,
34151 &hf_ieee80211_he_phy_cap_codebook_size_eq_7_5_fb,
34152 &hf_ieee80211_he_phy_cap_triggered_su_beamforming_fb,
34153 &hf_ieee80211_he_phy_cap_triggered_mu_beamforming_fb,
34154 &hf_ieee80211_he_phy_cap_triggered_cqi_fb,
34155 &hf_ieee80211_he_phy_cap_partial_bw_extended_range,
34156 &hf_ieee80211_he_phy_cap_partial_bw_dl_mu_mimo,
34157 &hf_ieee80211_he_phy_cap_ppe_threshold_present,
34158 NULL((void*)0)
34159};
34160
34161static int * const he_phy_b56_to_b71_headers[] = {
34162 &hf_ieee80211_he_phy_cap_psr_based_sr_support,
34163 &hf_ieee80211_he_phy_cap_power_boost_factor_ar_support,
34164 &hf_ieee80211_he_phy_cap_he_su_ppdu_etc_gi,
34165 &hf_ieee80211_he_phy_cap_max_nc,
34166 &hf_ieee80211_he_phy_cap_stbc_tx_gt_80_mhz,
34167 &hf_ieee80211_he_phy_cap_stbc_rx_gt_80_mhz,
34168 &hf_ieee80211_he_phy_cap_he_er_su_ppdu_4xxx_gi,
34169 &hf_ieee80211_he_phy_cap_20mhz_in_40mhz_24ghz_band,
34170 &hf_ieee80211_he_phy_cap_20mhz_in_160_80p80_ppdu,
34171 &hf_ieee80211_he_phy_cap_80mgz_in_160_80p80_ppdu,
34172 &hf_ieee80211_he_phy_cap_he_er_su_ppdu_1xxx_gi,
34173 &hf_ieee80211_he_phy_cap_midamble_tx_rx_2x_xxx_ltf,
34174 &hf_ieee80211_he_phy_cap_dcm_max_ru,
34175 NULL((void*)0)
34176};
34177
34178static int * const he_phy_b72_to_b87_headers[] = {
34179 &hf_ieee80211_he_phy_cap_longer_than_16_he_sigb_ofdm_symbol_support,
34180 &hf_ieee80211_he_phy_cap_non_triggered_cqi_feedback,
34181 &hf_ieee80211_he_phy_cap_tx_1024_qam_242_tone_ru_support,
34182 &hf_ieee80211_he_phy_cap_rx_1024_qam_242_tone_ru_support,
34183 &hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_compressed_sigb,
34184 &hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_non_compressed_sigb,
34185 &hf_ieee80211_he_phy_cap_nominal_packet_padding,
34186 &hf_ieee80211_he_phy_cap_he_mu_ppdu_ru_rx_max,
34187 &hf_ieee80211_he_phy_cap_b81_b87_reserved,
34188 NULL((void*)0)
34189};
34190
34191static int * const he_mcs_map_80_rx_headers [] = {
34192 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_1_ss,
34193 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_2_ss,
34194 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_3_ss,
34195 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_4_ss,
34196 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_5_ss,
34197 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_6_ss,
34198 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_7_ss,
34199 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_8_ss,
34200 NULL((void*)0)
34201};
34202
34203static int * const he_mcs_map_80_tx_headers [] = {
34204 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_1_ss,
34205 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_2_ss,
34206 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_3_ss,
34207 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_4_ss,
34208 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_5_ss,
34209 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_6_ss,
34210 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_7_ss,
34211 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_8_ss,
34212 NULL((void*)0)
34213};
34214
34215static int * const he_mcs_map_80p80_rx_headers [] = {
34216 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_1_ss,
34217 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_2_ss,
34218 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_3_ss,
34219 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_4_ss,
34220 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_5_ss,
34221 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_6_ss,
34222 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_7_ss,
34223 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_8_ss,
34224 NULL((void*)0)
34225};
34226
34227static int * const he_mcs_map_80p80_tx_headers [] = {
34228 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_1_ss,
34229 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_2_ss,
34230 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_3_ss,
34231 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_4_ss,
34232 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_5_ss,
34233 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_6_ss,
34234 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_7_ss,
34235 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_8_ss,
34236 NULL((void*)0)
34237};
34238
34239static int * const he_mcs_map_160_rx_headers [] = {
34240 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_1_ss,
34241 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_2_ss,
34242 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_3_ss,
34243 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_4_ss,
34244 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_5_ss,
34245 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_6_ss,
34246 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_7_ss,
34247 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_8_ss,
34248 NULL((void*)0)
34249};
34250
34251static int * const he_mcs_map_160_tx_headers [] = {
34252 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_1_ss,
34253 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_2_ss,
34254 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_3_ss,
34255 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_4_ss,
34256 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_5_ss,
34257 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_6_ss,
34258 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_7_ss,
34259 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_8_ss,
34260 NULL((void*)0)
34261};
34262
34263static const value_string ru_alloc_vals[] = {
34264 { 0, "242" },
34265 { 1, "484" },
34266 { 2, "996" },
34267 { 3, "2x996" },
34268 { 0, NULL((void*)0) }
34269};
34270
34271static const value_string constellation_vals[] = {
34272 { 0, "BPSK" },
34273 { 1, "QPSK" },
34274 { 2, "16-QAM" },
34275 { 3, "64-QAM" },
34276 { 4, "256-QAM" },
34277 { 5, "1024-QAM" },
34278 { 6, "Reserved" },
34279 { 7, "None" },
34280 { 0, NULL((void*)0) }
34281};
34282
34283#define HE_CHANNEL_WIDTH_SET_B20x04 0x04
34284#define HE_CHANNEL_WIDTH_SET_B30x08 0x08
34285
34286static void
34287dissect_he_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34288 int offset, int len)
34289{
34290 int *he_mac_headers[] = {
34291 &hf_ieee80211_he_htc_he_support, /* 0 */
34292 &hf_ieee80211_he_twt_requester_support, /* 1 */
34293 &hf_ieee80211_he_twt_responder_support, /* 2 */
34294 &hf_ieee80211_he_dynamic_fragmentation_support, /* 3 */
34295 &hf_ieee80211_he_max_number_fragmented_msdus, /* 4 */
34296 &hf_ieee80211_he_min_fragment_size, /* 5 */
34297 &hf_ieee80211_he_trigger_frame_mac_padding_dur, /* 6 */
34298 &hf_ieee80211_he_multi_tid_aggregation_rx_support, /* 7 */
34299 &hf_ieee80211_he_he_link_adaptation_support, /* 8 */
34300 &hf_ieee80211_he_all_ack_support, /* 9 */
34301 &hf_ieee80211_he_trs_support, /* 10 */
34302 &hf_ieee80211_he_bsr_support, /* 11 */
34303 &hf_ieee80211_he_broadcast_twt_support, /* 12 */
34304 &hf_ieee80211_he_32_bit_ba_bitmap_support, /* 13 */
34305 &hf_ieee80211_he_mu_cascading_support, /* 14 */
34306 &hf_ieee80211_he_ack_enabled_aggregation_support, /* 15 */
34307 &hf_ieee80211_he_reserved_b24, /* 16 */
34308 &hf_ieee80211_he_om_control_support, /* 17 */
34309 &hf_ieee80211_he_ofdma_ra_support, /* 18 */
34310 &hf_ieee80211_he_max_a_mpdu_length_exponent_ext, /* 19 */
34311 &hf_ieee80211_he_a_msdu_fragmentation_support, /* 20 */
34312 &hf_ieee80211_he_flexible_twt_schedule_support, /* 21 */
34313 &hf_ieee80211_he_rx_control_frame_to_multibss, /* 22 */
34314 &hf_ieee80211_he_bsrp_bqrp_a_mpdu_aggregation, /* 23 */
34315 &hf_ieee80211_he_qtp_support, /* 24 */
34316 &hf_ieee80211_he_bqr_support, /* 25 */
34317 &hf_ieee80211_he_psr_responder, /* 26 */
34318 &hf_ieee80211_he_ndp_feedback_report_support, /* 27 */
34319 &hf_ieee80211_he_ops_support, /* 28 */
34320 &hf_ieee80211_he_a_msdu_in_a_mpdu_support, /* 29 */
34321 &hf_ieee80211_he_multi_tid_aggregation_tx_support, /* 30 */
34322 &hf_ieee80211_he_subchannel_selective_trans_support, /* 31 */
34323 &hf_ieee80211_he_2_996_tone_ru_support, /* 32 */
34324 &hf_ieee80211_he_om_control_ul_mu_data_disable_rx_support, /* 33 */
34325 &hf_ieee80211_he_dynamic_sm_power_save, /* 34 */
34326 &hf_ieee80211_he_punctured_sounding_support, /* 35 */
34327 &hf_ieee80211_he_ht_and_vht_trigger_frame_rx_support, /* 36 */
34328 NULL((void*)0)
34329 };
34330 int * he_phy_channel_width_set_headers[] = {
34331 &hf_ieee80211_he_40mhz_channel_2_4ghz,
34332 &hf_ieee80211_he_40_and_80_mhz_5ghz,
34333 &hf_ieee80211_he_160_mhz_5ghz,
34334 &hf_ieee80211_he_160_80_plus_80_mhz_5ghz,
34335 &hf_ieee80211_he_242_tone_rus_in_2_4ghz,
34336 &hf_ieee80211_he_242_tone_rus_in_5ghz,
34337 &hf_ieee80211_he_chan_width_reserved,
34338 NULL((void*)0)
34339 };
34340
34341 uint64_t he_mac_caps = tvb_get_letoh40(tvb, offset);
34342 uint8_t phy_channel_width_set = 0;
34343 proto_tree *phy_cap_tree = NULL((void*)0);
34344 unsigned he_mcs_and_nss_len = 4;
34345 proto_tree *sup_he_mcs_and_nss_tree = NULL((void*)0);
34346 proto_tree *rx_tx_he_mcs_map_80 = NULL((void*)0);
34347 proto_tree *rx_tx_he_mcs_map_160 = NULL((void*)0);
34348 proto_tree *rx_tx_he_mcs_map_80_80 = NULL((void*)0);
34349
34350 /* Is this 2.4GHz or 5GHz? */
34351 if (pinfo->pseudo_header->ieee_802_11.has_frequency) {
34352 if (IS_2_4_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 2400
&& pinfo->pseudo_header->ieee_802_11.frequency
<= 2500)
) {
34353 he_phy_channel_width_set_headers[1] = &hf_ieee80211_he_24ghz_b1_reserved;
34354 he_phy_channel_width_set_headers[2] = &hf_ieee80211_he_24ghz_b2_reserved;
34355 he_phy_channel_width_set_headers[3] = &hf_ieee80211_he_24ghz_b3_reserved;
34356 he_phy_channel_width_set_headers[5] = &hf_ieee80211_he_24ghz_b5_reserved;
34357 } else {
34358 he_phy_channel_width_set_headers[0] = &hf_ieee80211_he_5ghz_b0_reserved;
34359 he_phy_channel_width_set_headers[4] = &hf_ieee80211_he_5ghz_b4_reserved;
34360 }
34361 }
34362
34363 /* Change some header fields depending on HE_HTC_HE_SUPPORT and FRAGMENTATION */
34364 if (!(he_mac_caps & HE_HTC_HE_SUPPORT0x00000001)) {
34365 he_mac_headers[8] = &hf_ieee80211_he_reserved_bits_15_16;
34366 he_mac_headers[10] = &hf_ieee80211_he_reserved_bit_18;
34367 he_mac_headers[11] = &hf_ieee80211_he_reserved_bit_19;
34368 he_mac_headers[17] = &hf_ieee80211_he_reserved_bit_25;
34369 he_mac_headers[25] = &hf_ieee80211_he_reserved_bit_34;
34370 }
34371 if (!(he_mac_caps & HE_DYNAMIC_FRAGMENTATION_SUPPORT0x00000018)) {
34372 he_mac_headers[4] = &hf_ieee80211_he_reserved_bits_5_7;
34373 he_mac_headers[5] = &hf_ieee80211_he_reserved_bits_8_9;
34374 he_mac_headers[20] = &hf_ieee80211_he_reserved_bit_29;
34375 }
34376
34377 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_he_mac_capabilities,
34378 ett_he_mac_capabilities, he_mac_headers,
34379 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34380 offset += 6;
34381
34382 /* Get and isolate the phy channel width set */
34383 phy_channel_width_set = tvb_get_uint8(tvb, offset) >> 1;
34384 /* Save this info so we can refer to it later. It might need to be global */
34385 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, HE_CHANNEL_WIDTH_KEY,
34386 GINT_TO_POINTER(phy_channel_width_set | (1<<31))((gpointer) (glong) (phy_channel_width_set | (1<<31))));
34387
34388 phy_cap_tree = proto_tree_add_subtree(tree, tvb, offset, 11, ett_he_phy_capabilities,
34389 NULL((void*)0),
34390 "HE PHY Capabilities Information");
34391
34392 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34393 hf_ieee80211_he_phy_reserved_b0, ett_he_phy_cap_first_byte,
34394 he_phy_first_byte_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
34395 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34396 hf_ieee80211_he_phy_chan_width_set, ett_he_phy_cap_chan_width_set,
34397 he_phy_channel_width_set_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
34398 offset++;
34399 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34400 hf_ieee80211_he_phy_b8_to_b23, ett_he_phy_cap_b8_to_b23,
34401 he_phy_b8_to_b23_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34402 offset += 2;
34403 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34404 hf_ieee80211_he_phy_b24_to_b39, ett_he_phy_cap_b24_to_b39,
34405 he_phy_b24_to_b39_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34406 offset += 2;
34407 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34408 hf_ieee80211_he_phy_b40_to_b55, ett_he_phy_cap_b40_to_b55,
34409 he_phy_b40_to_b55_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34410 offset += 2;
34411 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34412 hf_ieee80211_he_phy_b56_to_b71, ett_he_phy_cap_b56_to_b71,
34413 he_phy_b56_to_b71_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34414 offset += 2;
34415 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34416 hf_ieee80211_he_phy_b72_to_b87, ett_he_phy_cap_b72_to_b87,
34417 he_phy_b72_to_b87_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34418 offset += 2;
34419
34420 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34421 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34422 "Insufficient bytes for Phy Capabilities "
34423 "Rx and Tx Maps 80MHz!");
34424 return;
34425 }
34426
34427 /* Need the length first */
34428 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B20x04)
34429 he_mcs_and_nss_len += 4;
34430
34431 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B30x08)
34432 he_mcs_and_nss_len += 4;
34433
34434 sup_he_mcs_and_nss_tree = proto_tree_add_subtree(tree, tvb, offset,
34435 he_mcs_and_nss_len, ett_he_mcs_and_nss_set, NULL((void*)0),
34436 "Supported HE-MCS and NSS Set");
34437 rx_tx_he_mcs_map_80 = proto_tree_add_subtree(sup_he_mcs_and_nss_tree, tvb,
34438 offset, 4, ett_he_rx_tx_he_mcs_map_lte_80, NULL((void*)0),
34439 "Rx and Tx MCS Maps <= 80 MHz");
34440 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80, tvb, offset,
34441 hf_ieee80211_he_rx_he_mcs_map_lte_80,
34442 ett_he_rx_mcs_map_lte_80, he_mcs_map_80_rx_headers,
34443 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34444 offset += 2;
34445
34446 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34447 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34448 "Insufficient bytes for Phy Capabilities "
34449 "Tx Maps 80MHz!");
34450 return;
34451 }
34452
34453 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80, tvb, offset,
34454 hf_ieee80211_he_tx_he_mcs_map_lte_80,
34455 ett_he_tx_mcs_map_lte_80, he_mcs_map_80_tx_headers,
34456 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34457 offset += 2;
34458
34459 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B20x04) {
34460 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34461 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34462 "Insufficient bytes for Phy Capabilities "
34463 "Rx and Tx MCS Maps 160MHz!");
34464 return;
34465 }
34466 rx_tx_he_mcs_map_160 = proto_tree_add_subtree(sup_he_mcs_and_nss_tree,
34467 tvb, offset, 4, ett_he_rx_tx_he_mcs_map_160, NULL((void*)0),
34468 "Rx and Tx MCS Maps 160 MHz");
34469 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_160, tvb, offset,
34470 hf_ieee80211_he_rx_he_mcs_map_160,
34471 ett_he_rx_mcs_map_160, he_mcs_map_160_rx_headers,
34472 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34473 offset += 2;
34474
34475 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34476 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34477 "Insufficient bytes for Phy Capabilities "
34478 "Tx MCS Maps 160MHz!");
34479 return;
34480 }
34481
34482 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_160, tvb, offset,
34483 hf_ieee80211_he_tx_he_mcs_map_160,
34484 ett_he_tx_mcs_map_160, he_mcs_map_160_tx_headers,
34485 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34486 offset += 2;
34487 }
34488
34489 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B30x08) {
34490 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34491 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34492 "Insufficient bytes for Phy Capabilities "
34493 "Rx and Tx MCS Maps 80+80 MHz!");
34494 return;
34495 }
34496
34497 rx_tx_he_mcs_map_80_80 = proto_tree_add_subtree(sup_he_mcs_and_nss_tree,
34498 tvb, offset, 4, ett_he_rx_tx_he_mcs_map_80_80, NULL((void*)0),
34499 "Rx and Tx MCS Maps 80+80 MHz");
34500 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80_80, tvb, offset,
34501 hf_ieee80211_he_rx_he_mcs_map_80_80,
34502 ett_he_rx_mcs_map_80_80, he_mcs_map_80p80_rx_headers,
34503 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34504 offset += 2;
34505 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80_80, tvb, offset,
34506 hf_ieee80211_he_tx_he_mcs_map_80_80,
34507 ett_he_tx_mcs_map_80_80, he_mcs_map_80p80_tx_headers,
34508 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34509 offset += 2;
34510 }
34511
34512 if (offset < len) {
34513 uint8_t ppe_thresholds_field = tvb_get_uint8(tvb, offset);
34514 uint8_t nss_count = ppe_thresholds_field & 0x07, nss_index = 0;
34515 uint8_t ru_index_bitmask = (ppe_thresholds_field >> 3) & 0x0F;
34516 proto_tree *ppe_tree = NULL((void*)0);
34517 int i = 0;
34518 int bit_offset = 7; /* How many bits we are into the bytes */
34519
34520 ppe_tree = proto_tree_add_subtree(tree, tvb, offset, len - offset + 1,
34521 ett_he_ppe_threshold, NULL((void*)0),
34522 "PPE Thresholds");
34523 proto_tree_add_item(ppe_tree, hf_ieee80211_he_ppe_thresholds_nss, tvb, offset,
34524 1, ENC_NA0x00000000);
34525 proto_tree_add_item(ppe_tree, hf_ieee80211_he_ppe_thresholds_ru_index_bitmask, tvb,
34526 offset, 1, ENC_NA0x00000000);
34527
34528 /*
34529 * Now, for each of the nss values, add a sub-tree with its thresholds.
34530 * The actual count is one more than the number in the first three bits.
34531 */
34532 while (nss_index < nss_count + 1) {
34533 int start_offset = 0;
34534 proto_tree *nss_tree = NULL((void*)0);
34535 proto_item *nssti = NULL((void*)0);
34536 uint8_t l_ru_bitmask = ru_index_bitmask;
34537
34538 nss_tree = proto_tree_add_subtree_format(ppe_tree, tvb, offset, -1,
34539 ett_he_ppe_nss, &nssti, "NSS %d", nss_index);
34540 start_offset = offset;
34541
34542 for (i = 0; i < 4; i++) {
34543 if (l_ru_bitmask & 0x01) {
34544 int bits_avail = 8 - bit_offset, bits_needed = 6 - bits_avail;
34545 uint8_t the_bits = 0;
34546 int ru_start_offset = offset;
34547 proto_tree *ru_alloc_tree = NULL((void*)0);
34548 proto_item *rualti = NULL((void*)0);
34549
34550 ru_alloc_tree = proto_tree_add_subtree_format(nss_tree, tvb, offset,
34551 -1, ett_he_ppe_ru_alloc, &rualti,
34552 "RU allocation: %s",
34553 val_to_str_const(i, ru_alloc_vals, "Unk"));
34554
34555 /*
34556 * Assemble the bits we require ... we need 6, or 2x3
34557 */
34558 if (bits_avail >= 6) { /* We can use the current byte */
34559 the_bits = (tvb_get_uint8(tvb, offset) >> bit_offset) & 0x3F;
34560 } else { /* We need two adjacent bytes */
34561 the_bits = (tvb_get_uint8(tvb, offset) >> bit_offset);
34562 offset++;
34563 the_bits = the_bits |
34564 ((tvb_get_uint8(tvb, offset) &
34565 ((1 << bits_needed) - 1)) << bits_avail);
34566 }
34567 /*
34568 * Now we have two three bit fields, use them.
34569 */
34570 proto_tree_add_uint(ru_alloc_tree, hf_ieee80211_he_ppe_ppet16, tvb, ru_start_offset,
34571 offset - ru_start_offset + 1, the_bits & 0x07);
34572 proto_tree_add_uint(ru_alloc_tree, hf_ieee80211_he_ppe_ppet8, tvb, ru_start_offset,
34573 offset - ru_start_offset + 1, the_bits >> 3);
34574
34575 bit_offset = (bit_offset + 6) % 8;
34576 proto_item_set_len(rualti, offset - ru_start_offset + 1);
34577 }
34578 l_ru_bitmask = l_ru_bitmask >> 1;
34579 }
34580
34581
34582 proto_item_set_len(nssti, offset - start_offset);
34583 nss_index++;
34584 }
34585 }
34586
34587 /* Add an Expert Info about extra bytes ... */
34588
34589}
34590
34591static int * const he_operation_headers[] = {
34592 &hf_ieee80211_he_operation_default_pe_duration,
34593 &hf_ieee80211_he_operation_twt_required,
34594 &hf_ieee80211_he_operation_txop_duration_rts_threshold,
34595 &hf_ieee80211_he_operation_vht_operation_information_present,
34596 &hf_ieee80211_he_operation_co_hosted_bss,
34597 &hf_ieee80211_he_operation_er_su_disable,
34598 &hf_ieee80211_he_operation_6ghz_operation_information_present,
34599 &hf_ieee80211_he_operation_reserved_b16_b23,
34600 NULL((void*)0)
34601};
34602
34603static int * const he_bss_color_info_headers[] = {
34604 &hf_ieee80211_he_bss_color_info_bss_color,
34605 &hf_ieee80211_he_bss_color_partial_bss_color,
34606 &hf_ieee80211_he_bss_color_bss_color_disabled,
34607 NULL((void*)0)
34608};
34609
34610static int * const he_operation_6ghz_control[] = {
34611 &hf_ieee80211_he_operation_6ghz_control_channel_width,
34612 &hf_ieee80211_he_operation_6ghz_control_duplicate_beacon,
34613 &hf_ieee80211_he_operation_6ghz_control_regulatory_info,
34614 &hf_ieee80211_he_operation_6ghz_control_reserved,
34615 NULL((void*)0)
34616};
34617
34618static const value_string he_mcs_map_vals[] = {
34619 { 0, "Support for HE-MCS 0-7" },
34620 { 1, "Support for HE-MCS 0-9" },
34621 { 2, "Support for HE-MCS 0-11" },
34622 { 3, "Not supported for HE PPDUs" },
34623 { 0, NULL((void*)0) }
34624};
34625
34626static int * const he_basic_he_mcs_header[] = {
34627 &hf_ieee80211_he_oper_max_he_mcs_for_1_ss,
34628 &hf_ieee80211_he_oper_max_he_mcs_for_2_ss,
34629 &hf_ieee80211_he_oper_max_he_mcs_for_3_ss,
34630 &hf_ieee80211_he_oper_max_he_mcs_for_4_ss,
34631 &hf_ieee80211_he_oper_max_he_mcs_for_5_ss,
34632 &hf_ieee80211_he_oper_max_he_mcs_for_6_ss,
34633 &hf_ieee80211_he_oper_max_he_mcs_for_7_ss,
34634 &hf_ieee80211_he_oper_max_he_mcs_for_8_ss,
34635 NULL((void*)0)
34636};
34637
34638#define VHT_OPERATION_INFORMATION_PRESENT0x004000 0x004000
34639#define CO_HOSTED_BSS0x008000 0x008000
34640#define SIXGHZ_OPERATION_INFORMATION_PRESENT0x020000 0x020000
34641
34642static const value_string channel_width_vals[] = {
34643 { 0, "20 MHz or 40 MHz BSS Bandwidth" },
34644 { 1, "80 MHz, 160 MHz or 80+80 MHz BSS Bandwidth" },
34645 { 2, "160 MHz BSS Bandwidth (deprecated)" },
34646 { 3, "Non-contiguous 80+80 MHz BSS Bandwidth (deprecated)" },
34647 { 0, NULL((void*)0) }
34648};
34649
34650static void
34651dissect_he_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34652 int offset, int len _U___attribute__((unused)))
34653{
34654 uint32_t op_params = tvb_get_letoh24(tvb, offset);
34655
34656 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34657 hf_ieee80211_he_operation_parameter, ett_he_operation_params,
34658 he_operation_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34659 offset += 3;
34660
34661 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34662 hf_ieee80211_he_bss_color_information, ett_he_bss_color_information,
34663 he_bss_color_info_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34664 offset += 1;
34665
34666 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34667 hf_ieee80211_he_operation_basic_mcs, ett_he_oper_basic_mcs,
34668 he_basic_he_mcs_header, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34669 offset += 2;
34670
34671 if (op_params & VHT_OPERATION_INFORMATION_PRESENT0x004000) {
34672 proto_tree *vht_op_info = NULL((void*)0);
34673
34674 vht_op_info = proto_tree_add_subtree(tree, tvb, offset, 3,
34675 ett_he_operation_vht_op_info, NULL((void*)0),
34676 "VHT Operation Information");
34677 proto_tree_add_item(vht_op_info, hf_ieee80211_he_operation_channel_width, tvb,
34678 offset, 1, ENC_NA0x00000000);
34679 offset++;
34680
34681 proto_tree_add_item(vht_op_info, hf_ieee80211_he_operation_channel_center_freq_0,
34682 tvb, offset, 1, ENC_NA0x00000000);
34683 offset++;
34684
34685 proto_tree_add_item(vht_op_info, hf_ieee80211_he_operation_channel_center_freq_1,
34686 tvb, offset, 1, ENC_NA0x00000000);
34687 offset++;
34688 }
34689
34690 if (op_params & CO_HOSTED_BSS0x008000) {
34691 proto_tree_add_item(tree, hf_ieee80211_he_operation_max_co_hosted_bssid_indicator,
34692 tvb, offset, 1, ENC_NA0x00000000);
34693 offset++;
34694 }
34695
34696 if (op_params & SIXGHZ_OPERATION_INFORMATION_PRESENT0x020000) {
34697 proto_tree *sixghz_tree = NULL((void*)0);
34698
34699 sixghz_tree = proto_tree_add_subtree(tree, tvb, offset, 5,
34700 ett_he_operation_6ghz, NULL((void*)0),
34701 "6 GHz Operation Information");
34702 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_primary_channel, tvb,
34703 offset, 1, ENC_NA0x00000000);
34704 offset++;
34705
34706 proto_tree_add_bitmask_with_flags(sixghz_tree, tvb, offset,
34707 hf_ieee80211_he_operation_6ghz_control, ett_he_operation_6ghz_control,
34708 he_operation_6ghz_control, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34709 offset++;
34710
34711 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_channel_center_freq_0,
34712 tvb, offset, 1, ENC_NA0x00000000);
34713 offset++;
34714
34715 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_channel_center_freq_1,
34716 tvb, offset, 1, ENC_NA0x00000000);
34717 offset++;
34718
34719 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_minimum_rate,
34720 tvb, offset, 1, ENC_NA0x00000000);
34721 offset++;
34722 }
34723}
34724
34725static int * const uora_headers[] = {
34726 &hf_ieee80211_he_uora_eocwmin,
34727 &hf_ieee80211_he_uora_owcwmax,
34728 &hf_ieee80211_he_uora_reserved,
34729 NULL((void*)0)
34730};
34731
34732static void
34733dissect_uora_parameter_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34734 int offset)
34735{
34736 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34737 hf_ieee80211_he_uora_field, ett_he_uora_tree, uora_headers,
34738 ENC_NA0x00000000, BMT_NO_APPEND0x01);
34739 offset++;
34740}
34741
34742static int * const muac_aci_aifsn_headers[] = {
34743 &hf_ieee80211_he_muac_aifsn,
34744 &hf_ieee80211_he_muac_acm,
34745 &hf_ieee80211_he_muac_aci,
34746 &hf_ieee80211_he_muac_reserved,
34747 NULL((void*)0)
34748};
34749
34750static int
34751dissect_muac_param_record(tvbuff_t *tvb, proto_tree *tree, int offset)
34752{
34753 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34754 hf_ieee80211_he_muac_aci_aifsn, ett_he_aic_aifsn,
34755 muac_aci_aifsn_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
34756 offset++;
34757
34758 proto_tree_add_item(tree, hf_ieee80211_he_muac_ecwmin_ecwmax, tvb, offset, 1, ENC_NA0x00000000);
34759 offset++;
34760
34761 proto_tree_add_item(tree, hf_ieee80211_he_mu_edca_timer, tvb, offset, 1, ENC_NA0x00000000);
34762 offset++;
34763
34764 return offset;
34765}
34766
34767static int
34768dissect_mu_edca_parameter_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34769 int offset, int len _U___attribute__((unused)))
34770{
34771 proto_tree *param_tree = NULL((void*)0);
34772
34773 /* Is this from an AP or an STA? */
34774 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
34775 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
34776 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34777 offset++;
34778
34779 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
34780 NULL((void*)0), "MUAC_BE Parameter Record");
34781 offset = dissect_muac_param_record(tvb, param_tree, offset);
34782
34783 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
34784 NULL((void*)0), "MUAC_BK Parameter Record");
34785 offset = dissect_muac_param_record(tvb, param_tree, offset);
34786
34787 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
34788 NULL((void*)0), "MUAC_VI Parameter Record");
34789 offset = dissect_muac_param_record(tvb, param_tree, offset);
34790
34791 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
34792 NULL((void*)0), "MUAC_VO Parameter Record");
34793 offset = dissect_muac_param_record(tvb, param_tree, offset);
34794
34795 return offset;
34796}
34797
34798#define SRP_DISALLOWED0x01 0x01
34799#define NON_SRG_OBSS_PD_SR_DISALLOWED0x02 0x02
34800#define NON_SRG_OFFSET_PRESENT0x04 0x04
34801#define SRG_INFORMATION_PRESENT0x08 0x08
34802#define HESIGA_SPATIAL_REUSE_VAL15_ALLOWED0x10 0x10
34803
34804static int * const sr_control_field_headers[] = {
34805 &hf_ieee80211_he_srp_disallowed,
34806 &hf_ieee80211_he_non_srg_obss_pd_sr_disallowed,
34807 &hf_ieee80211_he_non_srg_offset_present,
34808 &hf_ieee80211_he_srg_information_present,
34809 &hf_ieee80211_he_hesiga_spatial_reuse_value15_allowed,
34810 &hf_ieee80211_he_sr_control_reserved,
34811 NULL((void*)0)
34812};
34813
34814static int
34815dissect_spatial_reuse_parameter_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34816 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34817{
34818 uint8_t sr_control = tvb_get_uint8(tvb, offset);
34819
34820 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_he_spatial_reuse_sr_control,
34821 ett_he_spatial_reuse_control,
34822 sr_control_field_headers,
34823 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34824 offset++;
34825
34826 if (sr_control & NON_SRG_OFFSET_PRESENT0x04) {
34827 proto_tree_add_item(tree, hf_ieee80211_he_spatial_non_srg_obss_pd_max_offset,
34828 tvb, offset, 1, ENC_NA0x00000000);
34829 offset++;
34830 }
34831
34832 if (sr_control & SRG_INFORMATION_PRESENT0x08) {
34833 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_obss_pd_min_offset, tvb,
34834 offset, 1, ENC_NA0x00000000);
34835 offset++;
34836 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_obss_pd_max_offset, tvb,
34837 offset, 1, ENC_NA0x00000000);
34838 offset++;
34839 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_bss_color_bitmap, tvb,
34840 offset, 8, ENC_NA0x00000000);
34841 offset += 8;
34842 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_partial_bssid_bitmap,
34843 tvb, offset, 8, ENC_NA0x00000000);
34844 offset += 8;
34845 }
34846
34847 return offset;
34848}
34849
34850static void
34851dissect_ndp_feedback_report_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34852 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34853{
34854 proto_tree_add_item(tree, hf_ieee80211_he_resource_request_buffer_thresh, tvb, offset,
34855 1, ENC_NA0x00000000);
34856}
34857
34858static int * const bss_new_color_headers[] = {
34859 &hf_ieee80211_he_new_bss_color_info_color,
34860 &hf_ieee80211_he_new_bss_color_info_reserved,
34861 NULL((void*)0)
34862};
34863
34864static void
34865dissect_bss_color_change(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34866 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34867{
34868 proto_tree_add_item(tree, hf_ieee80211_he_bss_color_change_switch_countdown, tvb, offset,
34869 1, ENC_NA0x00000000);
34870 offset++;
34871
34872 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34873 hf_ieee80211_he_bss_color_change_new_color_info,
34874 ett_he_bss_new_color_info, bss_new_color_headers,
34875 ENC_NA0x00000000, BMT_NO_APPEND0x01);
34876}
34877
34878static int * const ess_info_field_headers[] = {
34879 &hf_ieee80211_he_ess_report_planned_ess,
34880 &hf_ieee80211_he_ess_report_edge_of_ess,
34881 NULL((void*)0)
34882};
34883
34884static void
34885dissect_ess_report(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34886 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34887{
34888 uint8_t bss_trans_thresh = tvb_get_uint8(tvb, offset) >> 2;
34889
34890
34891 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_he_ess_report_info_field,
34892 ett_he_ess_report_info_field,
34893 ess_info_field_headers,
34894 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34895 if (bss_trans_thresh == 63)
34896 proto_tree_add_int_format(tree, hf_ieee80211_he_ess_report_recommend_transition_thresh,
34897 tvb, offset, 1, bss_trans_thresh,
34898 "Recommended BSS Transition Threshold: %d (No recommendation)",
34899 bss_trans_thresh);
34900 else
34901 proto_tree_add_int_format(tree, hf_ieee80211_he_ess_report_recommend_transition_thresh, tvb,
34902 offset, 1, bss_trans_thresh,
34903 "Recommended BSS Transition Threshold: %d (%ddBm)",
34904 bss_trans_thresh, -100 + bss_trans_thresh);
34905}
34906
34907static void
34908dissect_ops(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34909 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34910{
34911 proto_tree_add_item(tree, hf_ieee80211_he_ops_duration, tvb, offset, 1,
34912 ENC_NA0x00000000);
34913}
34914
34915static void
34916dissect_max_channel_switch_time(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34917 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34918{
34919 proto_tree_add_item(tree, hf_ieee80211_max_channel_switch_time, tvb, offset,
34920 3, ENC_LITTLE_ENDIAN0x80000000);
34921}
34922
34923static void
34924dissect_oci(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34925 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34926{
34927 proto_tree_add_item(tree, hf_ieee80211_oci_operating_class, tvb, offset,
34928 1, ENC_NA0x00000000);
34929 offset += 1;
34930
34931 proto_tree_add_item(tree, hf_ieee80211_oci_primary_channel_number, tvb,
34932 offset, 1, ENC_NA0x00000000);
34933 offset += 1;
34934
34935 proto_tree_add_item(tree, hf_ieee80211_oci_frequency_segment_1, tvb,
34936 offset, 1, ENC_NA0x00000000);
34937 offset += 1;
34938
34939 /* Does it have the OCT fields? */
34940 if (len > 3) {
34941 if (len != 6) {
34942 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
34943 "OCI element with OCT field length must be 6 bytes");
34944 }
34945
34946 proto_tree_add_item(tree, hf_ieee80211_oci_oct_operating_class, tvb,
34947 offset, 1, ENC_NA0x00000000);
34948 offset += 1;
34949
34950 proto_tree_add_item(tree, hf_ieee80211_oci_oct_primary_channel_number, tvb,
34951 offset, 1, ENC_NA0x00000000);
34952 offset += 1;
34953
34954 proto_tree_add_item(tree, hf_ieee80211_oci_oct_frequency_segment_1, tvb,
34955 offset, 1, ENC_NA0x00000000);
34956 }
34957}
34958
34959static void
34960dissect_multiple_bssid_configuration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34961 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34962{
34963
34964 proto_tree_add_item(tree, hf_ieee80211_multiple_bssid_configuration_bssid_count, tvb, offset, 1, ENC_NA0x00000000);
34965 offset += 1;
34966
34967 proto_tree_add_item(tree, hf_ieee80211_multiple_bssid_configuration_full_set_rx_periodicity, tvb, offset, 1, ENC_NA0x00000000);
34968 /*offset += 1;*/
34969
34970}
34971
34972static void
34973dissect_non_inheritance(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34974 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34975{
34976 proto_tree *element_id_list = NULL((void*)0);
34977 proto_tree *element_id_ext_list = NULL((void*)0);
34978
34979 uint8_t element_id_list_length = tvb_get_uint8(tvb, offset);
34980
34981 element_id_list = proto_tree_add_subtree(tree, tvb, offset, element_id_list_length + 1,
34982 ett_non_inheritance_element_id_list,
34983 NULL((void*)0), "Element ID List");
34984
34985 proto_tree_add_item(element_id_list, hf_ieee80211_non_inheritance_element_id_list_length,
34986 tvb, offset, 1, ENC_NA0x00000000);
34987 offset += 1;
34988
34989 while (element_id_list_length > 0) {
34990 proto_tree_add_item(element_id_list, hf_ieee80211_non_inheritance_element_id_list_element_id,
34991 tvb, offset, 1, ENC_NA0x00000000);
34992 element_id_list_length--;
34993 offset++;
34994 }
34995
34996 uint8_t element_id_ext_list_length = tvb_get_uint8(tvb, offset);
34997
34998 element_id_ext_list = proto_tree_add_subtree(tree, tvb, offset, element_id_ext_list_length + 1,
34999 ett_non_inheritance_element_id_ext_list,
35000 NULL((void*)0), "Element ID Extension List");
35001
35002 proto_tree_add_item(element_id_ext_list, hf_ieee80211_non_inheritance_element_id_ext_list_length,
35003 tvb, offset, 1, ENC_NA0x00000000);
35004 offset += 1;
35005
35006 while (element_id_ext_list_length > 0) {
35007 proto_tree_add_item(element_id_ext_list, hf_ieee80211_non_inheritance_element_id_ext_list_element_id_ext,
35008 tvb, offset, 1, ENC_NA0x00000000);
35009 element_id_ext_list_length--;
35010 offset++;
35011 }
35012}
35013
35014static void
35015dissect_known_bssid(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35016 proto_tree *tree, int offset, int len)
35017{
35018
35019 proto_tree_add_item(tree, hf_ieee80211_known_bssid_bitmap, tvb, offset, len, ENC_NA0x00000000);
35020
35021}
35022
35023static void
35024dissect_short_ssid(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35025 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35026{
35027
35028 while(len > 0){
35029
35030 proto_tree_add_item(tree, hf_ieee80211_short_ssid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
35031 offset += 4;
35032 len -=4;
35033 }
35034}
35035
35036static int
35037dissect_password_identifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35038 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35039{
35040 proto_tree_add_item(tree, hf_ieee80211_sae_password_identifier, tvb, offset,
35041 len, ENC_ASCII0x00000000);
35042 offset += len;
35043
35044 return offset;
35045}
35046
35047#define SCS_ADD0 0
35048#define SCS_REMOVE1 1
35049#define SCS_CHANGE2 2
35050
35051static const range_string scs_request_type_rvals[] = {
35052 { SCS_ADD0, SCS_ADD0, "Add" },
35053 { SCS_REMOVE1, SCS_REMOVE1, "Remove" },
35054 { SCS_CHANGE2, SCS_CHANGE2, "Change" },
35055 { 3, 255, "Reserved" },
35056 { 0, 0, NULL((void*)0) }
35057};
35058
35059static int * const user_prio_bitmap_headers[] = {
35060 &hf_ieee80211_user_prio_bitmap_bit0,
35061 &hf_ieee80211_user_prio_bitmap_bit1,
35062 &hf_ieee80211_user_prio_bitmap_bit2,
35063 &hf_ieee80211_user_prio_bitmap_bit3,
35064 &hf_ieee80211_user_prio_bitmap_bit4,
35065 &hf_ieee80211_user_prio_bitmap_bit5,
35066 &hf_ieee80211_user_prio_bitmap_bit6,
35067 &hf_ieee80211_user_prio_bitmap_bit7,
35068 NULL((void*)0)
35069};
35070
35071static void
35072dissect_mscs_descriptor_element(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35073 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35074{
35075 uint8_t request_type = tvb_get_uint8(tvb, offset);
35076
35077 proto_tree_add_item(tree, hf_ieee80211_mscs_descriptor_type, tvb, offset, 1,
35078 ENC_NA0x00000000);
35079 offset += 1;
35080
35081 if (request_type == SCS_REMOVE1) {
35082 proto_tree_add_item(tree, hf_ieee80211_mscs_user_prio_control_reserved,
35083 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35084 offset += 2;
35085 } else {
35086 proto_tree *user_prio_tree = NULL((void*)0);
35087
35088 user_prio_tree = proto_tree_add_subtree(tree, tvb, offset, 2,
35089 ett_mscs_user_prio, NULL((void*)0),
35090 "User Priority Control");
35091 proto_tree_add_bitmask_with_flags(user_prio_tree, tvb, offset,
35092 hf_ieee80211_user_prio_bitmap,
35093 ett_ieee80211_user_prio_bitmap,
35094 user_prio_bitmap_headers,
35095 ENC_NA0x00000000, BMT_NO_APPEND0x01);
35096 offset += 1;
35097
35098 proto_tree_add_item(user_prio_tree, hf_ieee80211_user_prio_limit, tvb,
35099 offset, 1, ENC_NA0x00000000);
35100 proto_tree_add_item(user_prio_tree, hf_ieee80211_user_prio_reserved, tvb,
35101 offset, 1, ENC_NA0x00000000);
35102 offset += 1;
35103 }
35104
35105 if (request_type == SCS_REMOVE1) {
35106 proto_tree_add_item(tree, hf_ieee80211_stream_timeout_reserved, tvb,
35107 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
35108 } else {
35109 proto_tree_add_item(tree, hf_ieee80211_stream_timeout, tvb,
35110 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
35111 }
35112 offset += 4;
35113
35114 /*
35115 * If there is nothing more in the TVB we are done.
35116 */
35117 if (tvb_reported_length_remaining(tvb, offset) == 0)
35118 return;
35119
35120 /*
35121 * There may be tclas elements following and optional MSCS elements.
35122 * A TCLAS Mask element will start with 0xFF <len> 0x89
35123 */
35124 while (tvb_reported_length_remaining(tvb, offset) &&
35125 tvb_get_uint8(tvb, offset) == 0xFF) {
35126 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35127 }
35128
35129 /*
35130 * Any optional MSCS elements come next. Should be 1 byte ID, 1 byte len
35131 * and len bytes.
35132 */
35133 if (offset < len) {
35134 uint8_t sub_elt_len;
35135
35136 proto_tree_add_item(tree, hf_ieee80211_mscs_subelement_id, tvb, offset, 1,
35137 ENC_NA0x00000000);
35138 offset += 1;
35139
35140 sub_elt_len = tvb_get_uint8(tvb, offset);
35141 proto_tree_add_item(tree, hf_ieee80211_mscs_subelement_len, tvb, offset, 1,
35142 ENC_NA0x00000000);
35143 offset += 1;
35144
35145 proto_tree_add_item(tree, hf_ieee80211_mscs_subelement_data, tvb, offset,
35146 sub_elt_len, ENC_NA0x00000000);
35147 }
35148}
35149
35150static void
35151dissect_tclas_mask_element(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35152 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35153{
35154 ieee80211_frame_classifier(tvb, pinfo, tree, offset, len);
35155}
35156
35157static int * const intra_access_prio_headers[] = {
35158 &hf_ieee80211_intra_access_prio_user_prio,
35159 &hf_ieee80211_intra_access_prio_alt_queue,
35160 &hf_ieee80211_intra_access_prio_drop_elig,
35161 &hf_ieee80211_intra_access_prio_reserved,
35162 NULL((void*)0)
35163};
35164
35165static int
35166ieee80211_tag_intra_access_cat_prio(tvbuff_t *tvb, packet_info *pinfo,
35167 proto_tree *tree, void *data)
35168{
35169 int tag_len = tvb_reported_length(tvb);
35170 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t *)data;
35171 int offset = 0;
35172
35173 if (tag_len != 1) {
35174 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
35175 return tvb_captured_length(tvb);
35176 }
35177
35178 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35179 hf_ieee80211_intra_access_prio,
35180 ett_ieee80211_intra_access_prio,
35181 intra_access_prio_headers,
35182 ENC_NA0x00000000, BMT_NO_APPEND0x01);
35183
35184 return tvb_captured_length(tvb);
35185}
35186
35187static int
35188ieee80211_tag_scs_descriptor(tvbuff_t *tvb, packet_info *pinfo,
35189 proto_tree *tree, void *data _U___attribute__((unused)))
35190{
35191 int offset = 0;
35192 uint8_t request_type = tvb_get_uint8(tvb, offset + 1);
35193
35194 proto_tree_add_item(tree, hf_ieee80211_scs_descriptor_scsid, tvb, offset, 1,
35195 ENC_NA0x00000000);
35196 offset += 1;
35197
35198 proto_tree_add_item(tree, hf_ieee80211_scs_descriptor_type, tvb, offset, 1,
35199 ENC_NA0x00000000);
35200 offset += 1;
35201
35202 if (request_type == SCS_ADD0 || request_type == SCS_CHANGE2) {
35203 /* There will only be one intra access priority */
35204 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35205
35206 /* There will be at least one tclass element ... */
35207 while ((tvb_captured_length_remaining(tvb, offset) > 0) &&
35208 tvb_get_uint8(tvb, offset) == TAG_TCLAS14) {
35209 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35210 }
35211 /* There could be a TCLAS PROCESS element ... */
35212 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
35213 tvb_get_uint8(tvb, offset) == TAG_TCLAS_PROCESS44) {
35214 add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35215 }
35216
35217 /* There could be one QoS Char element ... */
35218 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
35219 tvb_get_uint8(tvb, offset) == TAG_ELEMENT_ID_EXTENSION255 &&
35220 tvb_get_uint8(tvb, offset+2) == ETAG_QOS_CHARACTERISTICS113) {
35221 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35222 }
35223
35224 /* There can be zero or one TSPEC elements */
35225 if (tvb_captured_length_remaining(tvb, offset) > 0) {
35226 static const uint8_t ids[] = { TAG_TSPEC13 };
35227 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
35228 /* Add an expert info */
35229 }
35230 }
35231
35232 }
35233
35234 /* There could be Optional subelements here too ... */
35235
35236 return tvb_captured_length(tvb);
35237}
35238
35239/*
35240 * Just a list of finite cyclic group numbers as 16-bit uints.
35241 */
35242static void
35243dissect_rejected_groups(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35244 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35245{
35246 while (tvb_reported_length_remaining(tvb, offset)) {
35247 proto_tree_add_item(tree, hf_ieee80211_rejected_groups_group, tvb, offset,
35248 2, ENC_LITTLE_ENDIAN0x80000000);
35249 offset += 2;
35250 }
35251}
35252
35253/*
35254 * Just a string of bytes
35255 */
35256static void
35257dissect_anti_clogging_token(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35258 proto_tree *tree, int offset, int len)
35259{
35260 proto_tree_add_item(tree, hf_ieee80211_sae_anti_clogging_token, tvb, offset,
35261 len, ENC_NA0x00000000);
35262}
35263
35264/*
35265 * There will be from 1 to 4 24-bit fields in the order of AC=BK, AC=BE,
35266 * AC=VI and AC=VO.
35267 */
35268
35269static int * const esp_headers[] = {
35270 &hf_ieee80211_esp_access_category,
35271 &hf_ieee80211_esp_reserved,
35272 &hf_ieee80211_esp_data_format,
35273 &hf_ieee80211_esp_ba_windows_size,
35274 &hf_ieee80211_esp_est_air_time_frac,
35275 &hf_ieee80211_esp_data_ppdu_duration_target,
35276 NULL((void*)0)
35277};
35278
35279static const value_string esp_access_category_vals[] = {
35280 { 0, "AC=BK" },
35281 { 1, "AC=BE" },
35282 { 2, "AC=VI" },
35283 { 3, "AC=VO" },
35284 { 0, NULL((void*)0) }
35285};
35286
35287static const value_string esp_data_format_vals[] = {
35288 { 0, "No aggregation is expected to be performed" },
35289 { 1, "A-MSDU aggregation is expected but not A-MPDUs when type is data" },
35290 { 2, "A-MSDU aggregation is NOT expected but A-MPDUs aggregation is when type is data" },
35291 { 3, "A-MSDU aggregation is expected and A-MPDU aggregation is when type is data" },
35292 { 0, NULL((void*)0) }
35293};
35294
35295static const value_string esp_ba_window_size_vals[] = {
35296 { 0, "Block Ack not expected to be used" },
35297 { 1, "2" },
35298 { 2, "4" },
35299 { 3, "6" },
35300 { 4, "8" },
35301 { 5, "16" },
35302 { 6, "32" },
35303 { 7, "64" },
35304 { 0, NULL((void*)0) }
35305};
35306
35307static int
35308dissect_estimated_service_params(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35309 proto_tree *tree, int offset, int len)
35310{
35311 while (len > 0) {
35312 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35313 hf_ieee80211_estimated_service_params, ett_ieee80211_esp,
35314 esp_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35315 offset += 3;
35316 len -= 3;
35317 }
35318
35319 return offset;
35320}
35321
35322static int
35323dissect_future_channel_guidance(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35324 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35325{
35326 proto_tree_add_item(tree, hf_ieee80211_fcg_new_channel_number, tvb, offset,
35327 4, ENC_LITTLE_ENDIAN0x80000000);
35328 offset += 4;
35329
35330 if (len - 4 > 0) {
35331 proto_tree_add_item(tree, hf_ieee80211_fcg_extra_info, tvb, offset, len - 4,
35332 ENC_NA0x00000000);
35333 offset += len - 4;
35334 }
35335
35336 return offset;
35337}
35338
35339/* IANA, "Transform Type 4 - Diffie-Hellman Group Transform IDs" */
35340static const value_string owe_dh_parameter_group_vals[] = {
35341 { 0, "None" },
35342 { 1, "768-bit MODP Group" },
35343 { 2, "1024-bit MODP Group" },
35344 { 5, "1536-bit MODP Group" },
35345 { 14, "2048-bit MODP Group"},
35346 { 15, "3072-bit MODP Group"},
35347 { 16, "4096-bit MODP Group"},
35348 { 17, "6144-bit MODP Group"},
35349 { 18, "8192-bit MODP Group"},
35350 { 19, "256-bit random ECP group"},
35351 { 20, "384-bit random ECP group"},
35352 { 21, "521-bit random ECP group"},
35353 { 22, "1024-bit MODP Group with 160-bit Prime Order Subgroup"},
35354 { 23, "2048-bit MODP Group with 224-bit Prime Order Subgroup"},
35355 { 24, "2048-bit MODP Group with 256-bit Prime Order Subgroup"},
35356 { 25, "192-bit Random ECP Group"},
35357 { 26, "224-bit Random ECP Group"},
35358 { 27, "brainpoolP224r1"},
35359 { 28, "brainpoolP256r1"},
35360 { 29, "brainpoolP384r1"},
35361 { 30, "brainpoolP512r1"},
35362 { 31, "Curve25519"},
35363 { 32, "Curve448"},
35364 { 0, NULL((void*)0) }
35365};
35366
35367static int
35368dissect_owe_dh_parameter(tvbuff_t *tvb, packet_info *pinfo,
35369 proto_tree *tree, int offset, int len _U___attribute__((unused)), association_sanity_check_t* sanity_check)
35370{
35371 if (len < 2) {
35372 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
35373 "OWE: Diffie-Hellman Parameter must be at least 2 "
35374 "octets long");
35375 return offset + len;
35376 }
35377
35378 ieee80211_packet_data_t *packet_data = get_or_create_packet_data(pinfo);
35379 packet_data->owe_group = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35380 if (sanity_check != NULL((void*)0)) {
35381 sanity_check->owe_group = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35382 }
35383
35384 proto_tree_add_item(tree, hf_ieee80211_owe_dh_parameter_group, tvb, offset,
35385 2, ENC_LITTLE_ENDIAN0x80000000);
35386 proto_tree_add_item(tree, hf_ieee80211_owe_dh_parameter_public_key, tvb, offset + 2,
35387 len - 2, ENC_NA0x00000000);
35388 offset += len;
35389
35390 return offset;
35391}
35392
35393static int * const ieee80211_twt_ctrl_field[] = {
35394 &hf_ieee80211_tag_twt_ndp_paging_indicator,
35395 &hf_ieee80211_tag_twt_responder_pm_mode,
35396 &hf_ieee80211_tag_twt_neg_type,
35397 &hf_ieee80211_tag_twt_info_frame_disabled,
35398 &hf_ieee80211_tag_twt_wake_duration_unit,
35399 &hf_ieee80211_tag_twt_link_id_bitmap_present,
35400 &hf_ieee80211_tag_twt_aligned_twt,
35401 NULL((void*)0),
35402};
35403
35404static int * const ieee80211_twt_req_type_field[] = {
35405 &hf_ieee80211_tag_twt_req_type_req,
35406 &hf_ieee80211_tag_twt_req_type_setup_cmd,
35407 &hf_ieee80211_tag_twt_req_type_trigger,
35408 &hf_ieee80211_tag_twt_req_type_implicit,
35409 &hf_ieee80211_tag_twt_req_type_flow_type,
35410 &hf_ieee80211_tag_twt_req_type_flow_id,
35411 &hf_ieee80211_tag_twt_req_type_wake_int_exp,
35412 &hf_ieee80211_tag_twt_req_type_prot,
35413 NULL((void*)0),
35414};
35415
35416static int * const ieee80211_bcst_twt_req_type_field[] = {
35417 &hf_ieee80211_tag_twt_req_type_req,
35418 &hf_ieee80211_tag_twt_req_type_setup_cmd,
35419 &hf_ieee80211_tag_twt_req_type_trigger,
35420 &hf_ieee80211_tag_twt_req_type_last_bcst_parm_set,
35421 &hf_ieee80211_tag_twt_req_type_flow_type,
35422 &hf_ieee80211_tag_twt_req_type_bcst_twt_recom,
35423 &hf_ieee80211_tag_twt_req_type_wake_int_exp,
35424 &hf_ieee80211_tag_twt_req_type_aligned,
35425 NULL((void*)0),
35426};
35427
35428static int * const ieee80211_twt_ndp_paging_field[] = {
35429 &hf_ieee80211_tag_twt_ndp_paging_p_id,
35430 &hf_ieee80211_tag_twt_ndp_max_ndp_paging_period,
35431 &hf_ieee80211_tag_twt_ndp_partial_tsf_offset,
35432 &hf_ieee80211_tag_twt_ndp_action,
35433 &hf_ieee80211_tag_twt_ndp_min_sleep_duration,
35434 &hf_ieee80211_tag_twt_ndp_reserved,
35435 NULL((void*)0)
35436};
35437
35438static int * const ieee80211_twt_broadcast_info_field[] = {
35439 &hf_ieee80211_tag_twt_bcast_info_persistence,
35440 &hf_ieee80211_tag_twt_bcast_info_id,
35441 &hf_ieee80211_tag_twt_bcast_info_rtwt_sche_info,
35442 &hf_ieee80211_tag_twt_bcast_info_rtwt_traffic_present,
35443 NULL((void*)0)
35444};
35445
35446static int * const ieee80211_twt_traffic_info_control_field[] = {
35447 &hf_ieee80211_tag_twt_traffic_info_dl_bitmap_valid,
35448 &hf_ieee80211_tag_twt_traffic_info_ul_bitmap_valid,
35449 &hf_ieee80211_tag_twt_traffic_info_reserved,
35450 NULL((void*)0)
35451};
35452
35453static const value_string twt_ndp_action_vals[] = {
35454 { 0, "Send a PD-Poll or uplink trigger frame" },
35455 { 1, "Wake up at the time indicated by Min Sleep Duration" },
35456 { 2, "Wake up to receive the Beacon" },
35457 { 3, "Wake up to receive the DTIM Beacon" },
35458 { 4, "Wake up at the time indicated by the sum of the Min Sleep Duration and the ASD" },
35459 { 5, "Reserved" },
35460 { 6, "Reserved" },
35461 { 7, "Reserved" },
35462 { 0, NULL((void*)0) }
35463};
35464
35465static int
35466ieee80211_tag_twt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35467{
35468 int tag_len;
35469 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35470 int offset = 0;
35471 proto_item *item = NULL((void*)0);
35472 bool_Bool twt_requester;
35473 uint8_t setup_command;
35474 uint8_t ctrl_field;
35475 uint16_t req_type;
35476 uint8_t neg_type;
35477 bool_Bool last_bcast = false0;
35478
35479 ctrl_field = tvb_get_uint8(tvb, offset);
35480 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35481 hf_ieee80211_tag_twt_control_field,
35482 ett_twt_control_field_tree,
35483 ieee80211_twt_ctrl_field,
35484 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FALSE0x04);
35485 offset += 1;
35486 neg_type = (ctrl_field & 0xc) >> 2;
35487
35488 while (!last_bcast) {
35489 tag_len = tvb_captured_length_remaining(tvb, offset);
35490 if (tag_len < 2) {
35491 expert_add_info(pinfo, item ? item : tree,
35492 &ei_ieee80211_twt_bcast_info_no_term);
35493 return tvb_captured_length(tvb);
35494 }
35495 req_type = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35496 if (neg_type & 0x2) { /* If a bcast TWT */
35497 // 2 bytes - request type
35498 // 2 bytes - target wake time
35499 // 1 byte - nominal minimum interval TWT wake duration
35500 // 2 bytes - TWT wake interval mantissa
35501 // 2 byte - Broadcast TWT info
35502 // total: 10 bytes.
35503 if (tag_len < 9) {
35504 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
35505 "Tag Length %u wrong, must be >= 9", tag_len);
35506 return tvb_captured_length(tvb);
35507 }
35508 item = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35509 hf_ieee80211_tag_twt_req_type_field,
35510 ett_twt_req_type_tree,
35511 ieee80211_bcst_twt_req_type_field,
35512 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35513 last_bcast = (req_type & 0x20) >> 5;
35514 } else {
35515 // 2 bytes - request type
35516 // 8 bytes - target wake time
35517 // 1 byte - nominal minimum interval TWT wake duration
35518 // 2 bytes - TWT wake interval mantissa
35519 // 1 byte - channel
35520 // total: 14 bytes.
35521 if (tag_len < 14) {
35522 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
35523 "Tag Length %u wrong, must be >= 14", tag_len);
35524 return tvb_captured_length(tvb);
35525 }
35526 item = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35527 hf_ieee80211_tag_twt_req_type_field,
35528 ett_twt_req_type_tree,
35529 ieee80211_twt_req_type_field,
35530 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35531 last_bcast = true1;
35532 }
35533
35534 twt_requester = req_type & 0x1;
35535 setup_command = (req_type & 0xe) >> 1;
35536
35537 switch (setup_command) {
35538 case REQUEST_TWT0:
35539 case SUGGEST_TWT1:
35540 case DEMAND_TWT2:
35541 // we must be TWT requester
35542 if (!twt_requester) {
35543 expert_add_info_format(pinfo, item,
35544 &ei_ieee80211_twt_setup_bad_command,
35545 "Command %d is not allowed if TWT Request is not set",
35546 setup_command);
35547 return tvb_captured_length(tvb);
35548 }
35549 break;
35550 case TWT_GROUPING3:
35551 // TODO: There are more tests needed here
35552 // Fall through since we can't be requester here as well.
35553 case ACCEPT_TWT4:
35554 case ALTERNATE_TWT5:
35555 // we can't be TWT requester
35556 if (twt_requester) {
35557 expert_add_info_format(pinfo, item,
35558 &ei_ieee80211_twt_setup_bad_command,
35559 "Command %d is not allowed if TWT Request is set",
35560 setup_command);
35561 return tvb_captured_length(tvb);
35562 }
35563 break;
35564 case DICTATE_TWT6:
35565 case REJECT_TWT7:
35566 // TODO: Unclear what to do here. Looks like we can't be Requester, OTOH
35567 // the spec doesn't say anything
35568 break;
35569 default:
35570 break;
35571 }
35572
35573 offset += 2;
35574
35575 if (neg_type & 0x2) { /* If a bcast TWT */
35576 uint16_t twt_info;
35577
35578 proto_tree_add_item(tree, hf_ieee80211_tag_twt_target_wake_time_short,
35579 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35580 offset += 2;
35581
35582 proto_tree_add_item(tree, hf_ieee80211_tag_twt_nom_min_twt_wake_dur, tvb,
35583 offset, 1, ENC_NA0x00000000);
35584 offset += 1;
35585
35586 proto_tree_add_item(tree, hf_ieee80211_tag_twt_wake_interval_mantissa,
35587 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35588 offset += 2;
35589
35590 twt_info = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35591 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35592 hf_ieee80211_tag_twt_broadcast_info,
35593 ett_twt_broadcast_info_tree,
35594 ieee80211_twt_broadcast_info_field,
35595 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35596 offset += 2;
35597 if (twt_info & 0x01) { /* RTWT Traffic Info */
35598 proto_tree *info_tree;
35599 info_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_twt_traffic_info_tree,
35600 NULL((void*)0), "Restricted TWT Traffic Info");
35601 proto_tree_add_bitmask_with_flags(info_tree, tvb, offset,
35602 hf_ieee80211_tag_twt_traffic_info_control,
35603 ett_twt_traffic_info_control_tree,
35604 ieee80211_twt_traffic_info_control_field,
35605 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FALSE0x04);
35606 offset += 1;
35607
35608 proto_tree_add_item(info_tree, hf_ieee80211_tag_twt_traffic_info_rtwt_dl_bitmap,
35609 tvb, offset, 1, ENC_NA0x00000000);
35610 offset += 1;
35611
35612 proto_tree_add_item(info_tree, hf_ieee80211_tag_twt_traffic_info_rtwt_ul_bitmap,
35613 tvb, offset, 1, ENC_NA0x00000000);
35614 offset += 1;
35615 }
35616 } else {
35617 proto_tree_add_item(tree, hf_ieee80211_tag_twt_target_wake_time, tvb,
35618 offset, 8, ENC_LITTLE_ENDIAN0x80000000);
35619 offset += 8;
35620
35621 proto_tree_add_item(tree, hf_ieee80211_tag_twt_nom_min_twt_wake_dur, tvb,
35622 offset, 1, ENC_NA0x00000000);
35623 offset += 1;
35624
35625 item = proto_tree_add_item(tree,
35626 hf_ieee80211_tag_twt_wake_interval_mantissa,
35627 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35628 offset += 2;
35629
35630 proto_tree_add_item(tree, hf_ieee80211_tag_twt_channel, tvb, offset, 1,
35631 ENC_NA0x00000000);
35632 offset += 1;
35633
35634 if (ctrl_field & 0x01) { /* NDP Paging */
35635 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35636 hf_ieee80211_tag_twt_ndp_paging_field,
35637 ett_twt_ndp_paging_field_tree,
35638 ieee80211_twt_ndp_paging_field,
35639 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FALSE0x04);
35640 offset += 4;
35641 }
35642
35643 if (ctrl_field & 0x40) { /* Link ID Bitmap */
35644 proto_tree_add_item(tree, hf_ieee80211_tag_twt_link_id_bitmap, tvb, offset, 2,
35645 ENC_LITTLE_ENDIAN0x80000000);
35646 offset += 2;
35647 }
35648
35649 if (ctrl_field & 0x80) { /* Aligned TWT Link Bitmap */
35650 proto_tree_add_item(tree, hf_ieee80211_tag_twt_aligned_twt_link_bitmap, tvb, offset, 2,
35651 ENC_LITTLE_ENDIAN0x80000000);
35652 offset += 2;
35653 }
35654 }
35655 }
35656
35657 return tvb_captured_length(tvb);
35658}
35659
35660static int
35661dissect_rsnx_ie(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, int tag_len)
35662{
35663 int offset = 0;
35664 proto_item *octet;
35665 static int * const octet1[] = {
35666 &hf_ieee80211_tag_rsnx_length,
35667 &hf_ieee80211_tag_rsnx_protected_twt_operations_support,
35668 &hf_ieee80211_tag_rsnx_sae_hash_to_element,
35669 &hf_ieee80211_tag_rsnx_sae_pk,
35670 &hf_ieee80211_tag_rsnx_protected_wur_frame_support,
35671 NULL((void*)0)
35672 };
35673 static int * const octet2[] = {
35674 &hf_ieee80211_tag_rsnx_secure_ltf_support,
35675 &hf_ieee80211_tag_rsnx_secure_rtt_supported,
35676 &hf_ieee80211_tag_rsnx_urnm_mfpr_x20,
35677 &hf_ieee80211_tag_rsnx_protected_announce_support,
35678 &hf_ieee80211_tag_rsnx_pbac,
35679 &hf_ieee80211_tag_rsnx_extended_s1g_action_protection,
35680 &hf_ieee80211_tag_rsnx_spp_amsdu_capable,
35681 &hf_ieee80211_tag_rsnx_urnm_mfpr,
35682 NULL((void*)0)
35683 };
35684
35685 /* octet 1 */
35686 octet = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rsnx, ett_tag_rsnx_octet1, octet1, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35687 proto_item_append_text(octet, " (octet %d)", offset + 1);
35688
35689 offset += 1;
35690 if (offset >= tag_len) {
35691 return offset;
35692 }
35693
35694 /* octet 2 */
35695 octet = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rsnx, ett_tag_rsnx_octet2, octet2, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35696 proto_item_append_text(octet, " (octet %d)", offset + 1);
35697
35698 offset += 1;
35699 if (offset >= tag_len) {
35700 return offset;
35701 }
35702
35703 /* all rest of payload is reserved... */
35704 while (offset < tag_len) {
35705 proto_tree_add_item(tree, hf_ieee80211_tag_rsnx_reserved, tvb, offset, 1,
35706 ENC_LITTLE_ENDIAN0x80000000);
35707 offset += 1;
35708 }
35709
35710 return offset;
35711}
35712
35713static int
35714ieee80211_tag_rsnx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35715{
35716 int tag_len = tvb_reported_length(tvb);
35717 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35718
35719 if (tag_len < 1) {
35720 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 1", tag_len);
35721 return 0;
35722 }
35723 proto_item_append_text(field_data->item_tag, " (%u octet%s)", tag_len, plurality(tag_len, "", "s")((tag_len) == 1 ? ("") : ("s")));
35724
35725 dissect_rsnx_ie(tvb, pinfo, tree, tag_len);
35726
35727 return tvb_captured_length(tvb);
35728}
35729
35730static int
35731ieee80211_tag_fils_indication(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35732{
35733 int tag_len = tvb_reported_length(tvb);
35734 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35735 int offset = 0;
35736 uint16_t info;
35737 uint8_t nr_realm, nr_pk, i, len;
35738 proto_item *item;
35739 proto_tree *subtree;
35740
35741 if (tag_len < 2)
35742 {
35743 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
35744 return tvb_captured_length(tvb);
35745 }
35746
35747 static int * const ieee80211_tag_fils_indication_info[] = {
35748 &hf_ieee80211_tag_fils_indication_info_nr_pk,
35749 &hf_ieee80211_tag_fils_indication_info_nr_realm,
35750 &hf_ieee80211_tag_fils_indication_info_ip_config,
35751 &hf_ieee80211_tag_fils_indication_info_cache_id_included,
35752 &hf_ieee80211_tag_fils_indication_info_hessid_included,
35753 &hf_ieee80211_tag_fils_indication_info_ska_without_pfs,
35754 &hf_ieee80211_tag_fils_indication_info_ska_with_pfs,
35755 &hf_ieee80211_tag_fils_indication_info_pka,
35756 &hf_ieee80211_tag_fils_indication_info_reserved,
35757 NULL((void*)0)
35758 };
35759
35760 info = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35761 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_fils_indication_info, ENC_LITTLE_ENDIAN0x80000000);
35762 offset += 2;
35763
35764 nr_pk = info & 0x07;
35765 nr_realm = (info >> 3) & 0x07;
35766
35767 /* Cache identifier */
35768 if (info & (1 << 7)) {
35769 proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_cache_identifier, tvb, offset, 2, ENC_NA0x00000000);
35770 offset += 2;
35771 }
35772
35773 /* HESSID */
35774 if (info & (1 << 8)) {
35775 proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_hessid, tvb, offset, 6, ENC_NA0x00000000);
35776 offset += 6;
35777 }
35778
35779 /* Realm identifiers */
35780 if (nr_realm > 0) {
35781 item = proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_realm_list, tvb, offset, nr_realm * 2, ENC_NA0x00000000);
35782 subtree = proto_item_add_subtree(item, ett_fils_indication_realm_list);
35783 proto_item_append_text(item, ": %u", nr_realm);
35784
35785 for (i = 0; i < nr_realm; i++) {
35786 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_realm_identifier, tvb, offset, 2, ENC_NA0x00000000);
35787 offset += 2;
35788 }
35789 }
35790
35791 /* PK identifiers */
35792 if (nr_pk > 0) {
35793 item = proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_public_key_list, tvb, offset, tag_len - offset, ENC_NA0x00000000);
35794 subtree = proto_item_add_subtree(item, ett_fils_indication_public_key_list);
35795 proto_item_append_text(item, ": %u", nr_pk);
35796
35797 for (i = 0; i < nr_pk; i++) {
35798 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_public_key_type, tvb, offset, 1, ENC_NA0x00000000);
35799 offset += 1;
35800
35801 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_public_key_length, tvb, offset, 1, ENC_NA0x00000000);
35802 len = tvb_get_uint8(tvb, offset);
35803 offset += 1;
35804
35805 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_public_key_indicator, tvb, offset, len, ENC_NA0x00000000);
35806 offset += len;
35807 }
35808 }
35809
35810 return tvb_captured_length(tvb);
35811}
35812
35813static int
35814ieee80211_tag_element_id_extension(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35815{
35816 int tag_len = tvb_reported_length(tvb);
35817 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35818 int offset = 0;
35819 int ext_tag_len;
35820 uint8_t ext_tag_no;
35821
35822 if (tag_len < 1)
35823 {
35824 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 1", tag_len);
35825 return tvb_captured_length(tvb);
35826 }
35827 ext_tag_no = tvb_get_uint8(tvb, offset++);
35828 ext_tag_len = tag_len - 1;
35829
35830 switch (ext_tag_no) {
35831 case ETAG_FILS_REQ_PARAMS2:
35832 dissect_fils_req_params(tree, pinfo, tvb, offset, ext_tag_len);
35833 break;
35834 case ETAG_FILS_SESSION4:
35835 proto_tree_add_item(tree, hf_ieee80211_fils_session, tvb, offset, ext_tag_len, ENC_NA0x00000000);
35836 if (field_data->sanity_check != NULL((void*)0)) {
35837 field_data->sanity_check->has_fils_session = true1;
35838 }
35839 break;
35840 case ETAG_FILS_WRAPPED_DATA8:
35841 dissect_wrapped_data(tree, pinfo, tvb, offset, ext_tag_len);
35842 break;
35843 case ETAG_FILS_NONCE13:
35844 proto_tree_add_item(tree, hf_ieee80211_fils_nonce, tvb, offset, ext_tag_len, ENC_NA0x00000000);
35845 break;
35846 case ETAG_ESTIMATED_SERVICE_PARAM11:
35847 dissect_estimated_service_params(tvb, pinfo, tree, offset, ext_tag_len);
35848 break;
35849 case ETAG_FUTURE_CHANNEL_GUIDANCE14:
35850 dissect_future_channel_guidance(tvb, pinfo, tree, offset, ext_tag_len);
35851 break;
35852 case ETAG_OWE_DH_PARAMETER32:
35853 dissect_owe_dh_parameter(tvb, pinfo, tree, offset, ext_tag_len, field_data->sanity_check);
35854 break;
35855 case ETAG_PASSWORD_IDENTIFIER33:
35856 dissect_password_identifier(tvb, pinfo, tree, offset, ext_tag_len);
35857 break;
35858 case ETAG_HE_CAPABILITIES35:
35859 dissect_he_capabilities(tvb, pinfo, tree, offset, ext_tag_len);
35860 break;
35861 case ETAG_HE_OPERATION36:
35862 dissect_he_operation(tvb, pinfo, tree, offset, ext_tag_len);
35863 break;
35864 case ETAG_UORA_PARAMETER_SET37:
35865 dissect_uora_parameter_set(tvb, pinfo, tree, offset);
35866 break;
35867 case ETAG_MU_EDCA_PARAMETER_SET38:
35868 dissect_mu_edca_parameter_set(tvb, pinfo, tree, offset, ext_tag_len);
35869 break;
35870 case ETAG_SPATIAL_REUSE_PARAMETER_SET39:
35871 dissect_spatial_reuse_parameter_set(tvb, pinfo, tree, offset, ext_tag_len);
35872 break;
35873 case ETAG_NDP_FEEDBACK_REPORT_PARAMETER_SET41:
35874 dissect_ndp_feedback_report_set(tvb, pinfo, tree, offset, ext_tag_len);
35875 break;
35876 case ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42:
35877 dissect_bss_color_change(tvb, pinfo, tree, offset, ext_tag_len);
35878 break;
35879 case ETAG_QUIET_TIME_PERIOD_SETUP43:
35880 dissect_quiet_time_period(tvb, pinfo, tree, offset, ext_tag_len);
35881 break;
35882 case ETAG_ESS_REPORT45:
35883 dissect_ess_report(tvb, pinfo, tree, offset, ext_tag_len);
35884 break;
35885 case ETAG_OPS46:
35886 dissect_ops(tvb, pinfo, tree, offset, ext_tag_len);
35887 break;
35888 case ETAG_MAX_CHANNEL_SWITCH_TIME52:
35889 dissect_max_channel_switch_time(tvb, pinfo, tree, offset, ext_tag_len);
35890 break;
35891 case ETAG_OCI54:
35892 dissect_oci(tvb, pinfo, tree, offset, ext_tag_len);
35893 break;
35894 case ETAG_MULTIPLE_BSSID_CONFIGURATION55:
35895 dissect_multiple_bssid_configuration(tvb, pinfo, tree, offset, ext_tag_len);
35896 break;
35897 case ETAG_NON_INHERITANCE56:
35898 dissect_non_inheritance(tvb, pinfo, tree, offset, ext_tag_len);
35899 break;
35900 case ETAG_KNOWN_BSSID57:
35901 dissect_known_bssid(tvb, pinfo, tree, offset, ext_tag_len);
35902 break;
35903 case ETAG_SHORT_SSID58:
35904 dissect_short_ssid(tvb, pinfo, tree, offset, ext_tag_len);
35905 break;
35906 case ETAG_MSCS_DESCRIPTOR_ELEMENT88:
35907 dissect_mscs_descriptor_element(tvb, pinfo, tree, offset, ext_tag_len);
35908 break;
35909 case ETAG_TCLAS_MASK89:
35910 dissect_tclas_mask_element(tvb, pinfo, tree, offset, ext_tag_len);
35911 break;
35912 case ETAG_REJECTED_GROUPS92:
35913 dissect_rejected_groups(tvb, pinfo, tree, offset, ext_tag_len);
35914 break;
35915 case ETAG_ANTI_CLOGGING_TOKEN93:
35916 dissect_anti_clogging_token(tvb, pinfo, tree, offset, ext_tag_len);
35917 break;
35918 case ETAG_EXTENDED_REQUEST10:
35919 dissect_extended_request(tvb, pinfo, tree, offset, ext_tag_len);
35920 break;
35921 case ETAG_HE_6GHZ_BAND_CAPABILITIES59:
35922 dissect_he_6ghz_band_capabilities(tvb, pinfo, tree, offset, ext_tag_len);
35923 break;
35924 case ETAG_RANGING_PARAMETERS101:
35925 dissect_ranging_parameters(tvb, pinfo, tree, offset, ext_tag_len);
35926 break;
35927 case ETAG_DIRECTION_MEASUREMENT_RESULTS102:
35928 dissect_direction_measurement_results(tvb, pinfo, tree, offset, ext_tag_len);
35929 break;
35930 case ETAG_FTM_SYNC_INFO9:
35931 proto_tree_add_item(tree, hf_ieee80211_tag_ftm_tsf_sync_info, tvb, offset, ext_tag_len, ENC_NA0x00000000);
35932 break;
35933 case ETAG_SECURE_LTF_PARAMETERS94:
35934 dissect_secure_ltf_parameters(tvb, pinfo, tree, offset, ext_tag_len);
35935 break;
35936 case ETAG_ISTA_AVAILABILITY_WINDOW98:
35937 dissect_ista_availability_window(tvb, pinfo, tree, offset, ext_tag_len);
35938 break;
35939 case ETAG_RSTA_AVAILABILITY_WINDOW99:
35940 dissect_rsta_availability_window(tvb, pinfo, tree, offset, ext_tag_len);
35941 break;
35942 case ETAG_PASN_PARAMETERS100:
35943 dissect_pasn_parameters(tvb, pinfo, tree, offset, ext_tag_len);
35944 break;
35945 case ETAG_MULTI_LINK107:
35946 dissect_multi_link(tvb, pinfo, tree, offset, ext_tag_len);
35947 break;
35948 case ETAG_EHT_OPERATION106:
35949 dissect_eht_operation(tvb, pinfo, tree, offset, ext_tag_len);
35950 break;
35951 case ETAG_EHT_CAPABILITIES108:
35952 dissect_eht_capabilities(tvb, pinfo, tree, offset, ext_tag_len);
35953 break;
35954 case ETAG_TID_TO_LINK_MAPPING109:
35955 dissect_tid_to_link_mapping(tvb, pinfo, tree, offset, ext_tag_len);
35956 break;
35957 case ETAG_MULTI_LINK_TRAFFIC110:
35958 dissect_multi_link_traffic(tvb, pinfo, tree, offset, ext_tag_len);
35959 break;
35960 case ETAG_QOS_CHARACTERISTICS113:
35961 dissect_qos_characteristics(tvb, pinfo, tree, offset, ext_tag_len);
35962 break;
35963 case ETAG_AKM_SUITE_SELECTOR114:
35964 dissect_akm_suite_selector(tvb, pinfo, tree, offset, ext_tag_len);
35965 break;
35966 case ETAG_MLO_LINK_INFORMATION133:
35967 dissect_mlo_link_information(tvb, pinfo, tree, offset, ext_tag_len);
35968 break;
35969 case ETAG_AID_BITMAP134:
35970 dissect_aid_bitmap(tvb, pinfo, tree, offset, ext_tag_len);
35971 break;
35972 case ETAG_BANDWIDTH_INDICATION135:
35973 dissect_bandwidth_indication(tvb, pinfo, tree, offset, ext_tag_len);
35974 break;
35975 case ETAG_NONAP_STA_REGULATORY_CONNECT137:
35976 dissect_nonap_sta_regulatory_connect(tvb, pinfo, tree, offset, ext_tag_len);
35977 break;
35978 default:
35979 proto_tree_add_item(tree, hf_ieee80211_ext_tag_data, tvb, offset, ext_tag_len, ENC_NA0x00000000);
35980 expert_add_info_format(pinfo, field_data->item_tag, &ei_ieee80211_tag_data,
35981 "Dissector for 802.11 Extension Tag"
35982 " (%s) code not implemented, Contact"
35983 " Wireshark developers if you want this supported", val_to_str_ext(pinfo->pool, ext_tag_no,
35984 &tag_num_vals_eid_ext_ext, "%d"));
35985 proto_item_append_text(field_data->item_tag, ": Undecoded");
35986 break;
35987 }
35988
35989 return tvb_captured_length(tvb);
35990}
35991
35992/* Conflict: WAPI Vs. IEEE */
35993static int
35994ieee80211_tag_ie_68_conflict(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35995{
35996 int tag_len = tvb_reported_length(tvb);
35997 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35998 if (tag_len >= 20) { /* It Might be WAPI*/
35999 dissect_wapi_param_set(tvb, pinfo, tree, 0, tag_len, field_data->item_tag_length, field_data->item_tag, field_data->ftype);
36000 }
36001 else { /* BSS AC Access Delay (68) */
36002 dissect_bss_ac_access_delay_ie(tvb, pinfo, tree, 0, tag_len, field_data->item_tag_length);
36003 }
36004 return tvb_captured_length(tvb);
36005}
36006
36007static int
36008ieee80211_tag_mesh_peering_mgmt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36009{
36010 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36011 int tag_len = tvb_reported_length(tvb);
36012 int offset = 0;
36013 int ampe_frame = 0;
36014
36015 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_proto, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36016 offset += 2;
36017 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_local_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36018 offset += 2;
36019
36020 if (field_data && field_data->sanity_check)
36021 ampe_frame = field_data->sanity_check->ampe_frame;
36022
36023 switch (ampe_frame)
36024 { /* Self-protected action field */
36025 case SELFPROT_ACTION_MESH_PEERING_OPEN1:
36026 break;
36027
36028 case SELFPROT_ACTION_MESH_PEERING_CONFIRM2:
36029 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36030 break;
36031
36032 case SELFPROT_ACTION_MESH_PEERING_CLOSE3:
36033 if ((tag_len == 8) || (tag_len == 24))
36034 {
36035 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36036 offset += 2;
36037 }
36038 add_ff_reason_code(tree, tvb, pinfo, offset);
36039 break;
36040
36041 /* unexpected values */
36042 default:
36043 proto_tree_add_expert(tree, pinfo, &ei_ieee80211_mesh_peering_unexpected , tvb, offset, tag_len);
36044 break;
36045 }
36046 if (tag_len - offset == 16)
36047 {
36048 proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA0x00000000);
36049 }
36050 return tvb_captured_length(tvb);
36051}
36052
36053static int
36054ieee80211_tag_mesh_configuration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36055{
36056
36057 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36058 int tag_len = tvb_reported_length(tvb);
36059 if (tag_len != 7)
36060 {
36061 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 7", tag_len);
36062 return tvb_captured_length(tvb);
36063 }
36064
36065 int offset = 0;
36066 proto_item *item;
36067 proto_tree *subtree;
36068 static int * const ieee80211_mesh_config_cap[] = {
36069 &hf_ieee80211_mesh_config_cap_accepting,
36070 &hf_ieee80211_mesh_config_cap_mcca_support,
36071 &hf_ieee80211_mesh_config_cap_mcca_enabled,
36072 &hf_ieee80211_mesh_config_cap_forwarding,
36073 &hf_ieee80211_mesh_config_cap_mbca_enabled,
36074 &hf_ieee80211_mesh_config_cap_tbtt_adjusting,
36075 &hf_ieee80211_mesh_config_cap_power_save_level,
36076 &hf_ieee80211_mesh_config_cap_reserved,
36077 NULL((void*)0)
36078 };
36079
36080 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_protocol, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36081 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_metric, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
36082 proto_tree_add_item(tree, hf_ieee80211_mesh_config_congestion_control, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
36083 proto_tree_add_item(tree, hf_ieee80211_mesh_config_sync_method, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
36084 proto_tree_add_item(tree, hf_ieee80211_mesh_config_auth_protocol, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN0x80000000);
36085 item = proto_tree_add_item(tree, hf_ieee80211_mesh_config_formation_info, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36086 subtree = proto_item_add_subtree(item, ett_mesh_formation_info_tree);
36087 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_conn_to_mesh_gate, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36088 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_num_of_peerings, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36089 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_conn_to_as, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36090
36091 proto_tree_add_bitmask_with_flags(tree, tvb, offset + 6, hf_ieee80211_mesh_config_capability,
36092 ett_mesh_config_cap_tree, ieee80211_mesh_config_cap,
36093 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36094 return tvb_captured_length(tvb);
36095}
36096
36097static int
36098ieee80211_tag_mesh_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36099{
36100 int offset = 0;
36101 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36102 int tag_len = tvb_reported_length(tvb);
36103 const uint8_t* mesh_id;
36104
36105 proto_tree_add_item_ret_string(tree, hf_ieee80211_mesh_id, tvb, offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &mesh_id);
36106 if (tag_len > 0) {
36107 char* s = format_text(pinfo->pool, (const char*)mesh_id, tag_len);
36108 col_append_fstr(pinfo->cinfo, COL_INFO, ", MESHID=%s", s);
36109 proto_item_append_text(field_data->item_tag, ": %s", s);
36110 }
36111 /* Make sure dissector is accepted */
36112 return ((tag_len > 0) ? tag_len : 1);
36113}
36114
36115static int
36116ieee80211_tag_beacon_timing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36117{
36118 int tag_len = tvb_reported_length(tvb);
36119 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36120 int offset = 0;
36121 uint32_t value;
36122 proto_item *item;
36123 proto_tree *subtree;
36124
36125 static int * const ieee80211_beacon_timing_rctrl_byte[] = {
36126 &hf_ieee80211_bcn_timing_rctrl_more,
36127 &hf_ieee80211_bcn_timing_rctrl_element_num,
36128 &hf_ieee80211_bcn_timing_rctrl_status_num,
36129 NULL((void*)0),
36130 };
36131
36132 /* Beacon timing element (120) */
36133 if (tag_len < 1) {
36134 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36135 "Tag length %u too short, must be greater than 1", tag_len);
36136 return tvb_captured_length(tvb);
36137 }
36138
36139 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_bcn_timing_rctrl,
36140 ett_bcn_timing_rctrl_tree, ieee80211_beacon_timing_rctrl_byte,
36141 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36142 offset += 1;
36143
36144 while (offset < tag_len) {
36145 item = proto_tree_add_item(tree, hf_ieee80211_bcn_timing_info, tvb, offset, 6, ENC_NA0x00000000);
36146 subtree = proto_item_add_subtree(item, ett_bcn_timing_info_tree);
36147 proto_item_append_text(item, " %u", ((offset / 6) + 1));
36148
36149 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_bcn_timing_info_nsta_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &value);
36150 proto_item_append_text(item, ": STA ID: %u", value);
36151 offset += 1;
36152
36153 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_bcn_timing_info_nsta_tbtt, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000, &value);
36154 proto_item_append_text(item, ", STA TBTT: %u", value);
36155 offset += 3;
36156
36157 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_bcn_timing_info_nsta_bi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &value);
36158 proto_item_append_text(item, ", STA BI: %u", value);
36159 offset += 2;
36160 }
36161
36162 proto_item_append_text(field_data->item_tag, " (%d entr%s)", offset / 6, plurality(offset / 6, "y", "ies")((offset / 6) == 1 ? ("y") : ("ies")));
36163
36164 return tvb_captured_length(tvb);
36165}
36166
36167static int
36168ieee80211_tag_gann(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36169{
36170 int tag_len = tvb_reported_length(tvb);
36171 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36172 int offset = 0;
36173
36174 static int * const ieee80211_gann_flags_byte[] = {
36175 &hf_ieee80211_gann_flags_reserved,
36176 NULL((void*)0),
36177 };
36178
36179 /* Gate Announcement (125) */
36180 if (tag_len != 15) {
36181 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36182 "Tag length %u wrong, must be = 15", tag_len);
36183 return tvb_captured_length(tvb);
36184 }
36185
36186 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_gann_flags,
36187 ett_gann_flags_tree, ieee80211_gann_flags_byte,
36188 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36189 offset += 1;
36190
36191 proto_tree_add_item(tree, hf_ieee80211_gann_hop_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36192 offset += 1;
36193 proto_tree_add_item(tree, hf_ieee80211_gann_elem_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36194 offset += 1;
36195 proto_tree_add_item(tree, hf_ieee80211_gann_mesh_gate_addr, tvb, offset, 6, ENC_NA0x00000000);
36196 offset += 6;
36197 proto_tree_add_item(tree, hf_ieee80211_gann_seq_num, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36198 offset += 4;
36199 proto_tree_add_item(tree, hf_ieee80211_gann_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36200
36201 return tvb_captured_length(tvb);
36202}
36203
36204static int
36205ieee80211_tag_mesh_preq(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36206{
36207 int offset = 0;
36208
36209 uint32_t flags;
36210 uint8_t targs, i;
36211
36212 proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &flags);
36213 offset += 1;
36214 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36215 offset += 1;
36216 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36217 offset += 1;
36218 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_pdid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36219 offset += 4;
36220 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA0x00000000);
36221 offset += 6;
36222 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36223 offset += 4;
36224
36225 if (flags & (1<<6)) {
36226 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_ext, tvb, offset, 6, ENC_NA0x00000000);
36227 offset += 6;
36228 }
36229 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36230 offset += 4;
36231 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36232 offset += 4;
36233 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36234 targs = tvb_get_uint8(tvb, offset);
36235 offset += 1;
36236 for (i = 0; i < targs; i++) {
36237 static int * const targ_flags[] = {
36238 &hf_ieee80211_ff_hwmp_targ_to_flags,
36239 &hf_ieee80211_ff_hwmp_targ_usn_flags,
36240 NULL((void*)0)
36241 };
36242
36243 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_hwmp_targ_flags,
36244 ett_hwmp_targ_flags_tree, targ_flags, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36245
36246 offset += 1;
36247 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
36248 offset += 6;
36249 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36250 offset += 4;
36251 }
36252
36253 return tvb_captured_length(tvb);
36254}
36255
36256static int
36257ieee80211_tag_mesh_prep(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36258{
36259 int offset = 0;
36260
36261 uint32_t flags;
36262 proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &flags);
36263 offset += 1;
36264 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36265 offset += 1;
36266 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset , 1, ENC_LITTLE_ENDIAN0x80000000);
36267 offset += 1;
36268 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
36269 offset += 6;
36270 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36271 offset += 4;
36272 if (flags & (1<<6)) {
36273 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA0x00000000);
36274 offset += 6;
36275 }
36276 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36277 offset += 4;
36278 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36279 offset += 4;
36280 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA0x00000000);
36281 offset += 6;
36282 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36283 return tvb_captured_length(tvb);
36284}
36285
36286static int
36287ieee80211_tag_mesh_perr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
36288{
36289 int offset = 0;
36290 uint8_t targs, i;
36291
36292 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36293 offset += 1;
36294 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36295 targs = tvb_get_uint8(tvb, offset);
36296 offset += 1;
36297 for (i = 0; i < targs; i++) {
36298 uint8_t flags = tvb_get_uint8(tvb, offset);
36299
36300 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36301 offset += 1;
36302 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
36303 offset += 6;
36304 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36305 offset += 4;
36306 if (flags & (1<<6)) {
36307 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA0x00000000);
36308 offset += 6;
36309 }
36310 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
36311 }
36312 return tvb_captured_length(tvb);
36313}
36314
36315static int
36316ieee80211_tag_pxu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
36317{
36318 int tag_len = tvb_reported_length(tvb);
36319 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36320 int offset = 0;
36321 uint32_t pxu_count = 0, i, proxy_info_len;
36322 uint8_t pxu_flag;
36323 proto_item *item;
36324 proto_tree *subtree;
36325
36326 static int * const ieee80211_pxu_proxy_info_flags_byte[] = {
36327 &hf_ieee80211_pxu_proxy_info_flags_delete,
36328 &hf_ieee80211_pxu_proxy_info_flags_orig_is_proxy,
36329 &hf_ieee80211_pxu_proxy_info_flags_lifetime,
36330 &hf_ieee80211_pxu_proxy_info_flags_reserved,
36331 NULL((void*)0),
36332 };
36333
36334 /* PXU element (137) */
36335 if (tag_len < 8) {
36336 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36337 "Tag length %u wrong, must be at least 8", tag_len);
36338 return tvb_captured_length(tvb);
36339 }
36340
36341 proto_tree_add_item(tree, hf_ieee80211_pxu_pxu_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36342 offset += 1;
36343 proto_tree_add_item(tree, hf_ieee80211_pxu_pxu_origin_mac, tvb, offset, 6, ENC_NA0x00000000);
36344 offset += 6;
36345 proto_tree_add_item_ret_uint(tree, hf_ieee80211_pxu_no_proxy_info, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &pxu_count);
36346 offset += 1;
36347
36348 for (i = 0; i < pxu_count; i++) {
36349 pxu_flag = tvb_get_uint8(tvb, offset);
36350 proxy_info_len = 1 + 6 + 4 + ((pxu_flag & 0x2) ? 0 : 6) + ((pxu_flag & 0x4) ? 4 : 0);
36351
36352 item = proto_tree_add_item(tree, hf_ieee80211_pxu_proxy_info, tvb, offset, proxy_info_len, ENC_NA0x00000000);
36353 subtree = proto_item_add_subtree(item, ett_pxu_proxy_info_tree);
36354 proto_item_append_text(item, " #%u", (i + 1));
36355
36356 proto_tree_add_bitmask_with_flags(subtree, tvb, offset, hf_ieee80211_pxu_proxy_info_flags,
36357 ett_pxu_proxy_info_flags_tree, ieee80211_pxu_proxy_info_flags_byte,
36358 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36359 offset += 1;
36360
36361 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_ext_mac, tvb, offset, 6, ENC_NA0x00000000);
36362 offset += 6;
36363
36364 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_seq_num, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36365 offset += 4;
36366
36367 if (!(pxu_flag & 0x2)) {
36368 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_proxy_mac, tvb, offset, 6, ENC_NA0x00000000);
36369 offset += 6;
36370 }
36371
36372 if (pxu_flag & 0x4) {
36373 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36374 offset += 4;
36375 }
36376 }
36377
36378 proto_item_append_text(field_data->item_tag, " (%d entr%s)", pxu_count, plurality(pxu_count, "y", "ies")((pxu_count) == 1 ? ("y") : ("ies")));
36379 return tvb_captured_length(tvb);
36380}
36381
36382static int
36383ieee80211_tag_pxuc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
36384{
36385 int tag_len = tvb_reported_length(tvb);
36386 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36387 int offset = 0;
36388
36389 /* PXUC element (138) */
36390 if (tag_len != 7) {
36391 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36392 "Tag length %u wrong, must be = 7", tag_len);
36393 return tvb_captured_length(tvb);
36394 }
36395
36396 proto_tree_add_item(tree, hf_ieee80211_pxuc_pxu_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36397 offset += 1;
36398 proto_tree_add_item(tree, hf_ieee80211_pxuc_pxu_recip_mac, tvb, offset, 6, ENC_NA0x00000000);
36399
36400 return tvb_captured_length(tvb);
36401}
36402
36403static int
36404ieee80211_tag_mic(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36405{
36406 int tag_len = tvb_reported_length(tvb);
36407 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36408
36409 if ((tag_len != 16) && (tag_len != 24))
36410 {
36411 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36412 "MIC Tag Length %u wrong, must be 16 or 24", tag_len);
36413 return tvb_captured_length(tvb);
36414 }
36415
36416 proto_tree_add_item(tree, hf_ieee80211_mesh_mic, tvb, 0, tag_len, ENC_NA0x00000000);
36417 return tvb_captured_length(tvb);
36418}
36419
36420static int
36421ieee80211_tag_rann(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36422{
36423 int offset = 0;
36424 proto_tree_add_item(tree, hf_ieee80211_rann_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36425 offset += 1;
36426 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36427 offset += 1;
36428 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36429 offset += 1;
36430 proto_tree_add_item(tree, hf_ieee80211_rann_root_sta, tvb, offset, 6, ENC_NA0x00000000);
36431 offset += 6;
36432 proto_tree_add_item(tree, hf_ieee80211_rann_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36433 offset += 4;
36434 proto_tree_add_item(tree, hf_ieee80211_rann_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36435 offset += 4;
36436 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36437 return tvb_captured_length(tvb);
36438}
36439
36440/* Mesh Channel Switch Parameters (118) */
36441static int
36442ieee80211_tag_mesh_channel_switch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36443{
36444 int tag_len = tvb_reported_length(tvb);
36445 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36446 int offset = 0;
36447 static int * const ieee80211_mesh_chswitch_flag[] = {
36448 &hf_ieee80211_mesh_chswitch_flag_initiator,
36449 &hf_ieee80211_mesh_chswitch_flag_txrestrict,
36450 NULL((void*)0)
36451 };
36452
36453 if (tag_len != 6)
36454 {
36455 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
36456 return tvb_captured_length(tvb);
36457 }
36458
36459 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36460 proto_item_append_text(field_data->item_tag, " TTL: %d", tvb_get_uint8(tvb, offset));
36461 offset += 1;
36462
36463 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_mesh_channel_switch_flag,
36464 ett_mesh_chswitch_flag_tree, ieee80211_mesh_chswitch_flag, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36465 offset += 1;
36466
36467 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_reason_code, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36468 offset += 2;
36469
36470 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_precedence_value, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36471 return tvb_captured_length(tvb);
36472}
36473
36474/* Mesh Awake Window Parameters (119) */
36475static int
36476ieee80211_tag_mesh_awake_window(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36477{
36478 int tag_len = tvb_reported_length(tvb);
36479 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36480 int offset = 0;
36481
36482 if (tag_len != 2) {
36483 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36484 "Tag length %u wrong, must be = 2", tag_len);
36485 return tvb_captured_length(tvb);
36486 }
36487
36488 proto_tree_add_item(tree, hf_ieee80211_mesh_awake_window, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36489 return tvb_captured_length(tvb);
36490}
36491
36492static int
36493ieee80211_tag_channel_switch_announcement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36494{
36495 int tag_len = tvb_reported_length(tvb);
36496 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36497 int offset = 0;
36498 if (tag_len != 4)
36499 {
36500 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
36501 return tvb_captured_length(tvb);
36502 }
36503
36504 add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
36505 return tvb_captured_length(tvb);
36506}
36507
36508static int
36509ieee80211_tag_supported_operating_classes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36510{
36511 int tag_len = tvb_reported_length(tvb);
36512 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36513 int offset = 0;
36514 proto_item* item = NULL((void*)0);
36515 uint8_t field_len = 0;
36516 uint8_t alt_op_class_field[256];
36517
36518 if (tag_len < 2) {
36519 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
36520 return tvb_captured_length(tvb);
36521 } else if (tag_len > 255) {
36522 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, uint8 <= 255", tag_len);
36523 return tvb_captured_length(tvb);
36524 }
36525
36526 proto_tree_add_item(tree, hf_ieee80211_tag_supported_ope_classes_current, tvb, offset++, 1, ENC_NA0x00000000);
36527
36528 for (int i = offset; i < tag_len; i++) {
36529 uint8_t op_class = tvb_get_uint8(tvb, i);
36530 /* Field terminates immediately before OneHundredAndThirty or Zero delimiter */
36531 if (op_class == 130 || op_class == 0) {
36532 break;
36533 }
36534 alt_op_class_field[field_len++] = op_class;
36535 }
36536 if (field_len) {
36537 item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_ope_classes_alternate, tvb, offset, field_len, ENC_NA0x00000000);
36538 }
36539 for (int i = 0; i < field_len; i++) {
36540 proto_item_append_text(item, i == 0 ? ": %d":", %d", alt_op_class_field[i]);
36541 }
36542
36543 /* TODO parse optional Current Operating Class Extension Sequence field */
36544 /* TODO parse optional Operating Class Duple Sequence field */
36545 return tvb_captured_length(tvb);
36546}
36547
36548static int
36549ieee80211_tag_bss_parameter_change(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36550{
36551 int tag_len = tvb_reported_length(tvb);
36552 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36553 int offset = 0;
36554 bool_Bool size;
36555 if (tag_len != 7)
36556 {
36557 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 7", tag_len);
36558 return tvb_captured_length(tvb);
36559 }
36560 size = (tvb_get_uint8(tvb, offset) & 0x02) >> 1;
36561 proto_tree_add_item(tree, hf_ieee80211_tag_move, tvb, offset, 1, ENC_NA0x00000000);
36562 proto_tree_add_item(tree, hf_ieee80211_tag_size, tvb, offset, 1, ENC_NA0x00000000);
36563 offset += 1;
36564 proto_tree_add_item(tree, hf_ieee80211_tag_tbtt_offset, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36565 offset += 4;
36566 if(size == true1) { /* if size bit is 0, the field is reserved. */
36567 proto_tree_add_item(tree, hf_ieee80211_tag_bi_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36568 }
36569 return tvb_captured_length(tvb);
36570}
36571
36572static int
36573ieee80211_tag_dmg_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36574{
36575 int tag_len = tvb_reported_length(tvb);
36576 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36577 int offset = 0;
36578 static int * const ieee80211_tag_dmg_cap1[] = {
36579 &hf_ieee80211_tag_reverse_direction,
36580 &hf_ieee80211_tag_hlts,
36581 &hf_ieee80211_tag_tpc,
36582 &hf_ieee80211_tag_spsh,
36583 &hf_ieee80211_tag_rx_antenna,
36584 &hf_ieee80211_tag_fast_link,
36585 &hf_ieee80211_tag_num_sectors,
36586 &hf_ieee80211_tag_rxss_length,
36587 &hf_ieee80211_tag_reciprocity,
36588 &hf_ieee80211_tag_max_ampdu_exp,
36589 NULL((void*)0)
36590 };
36591
36592 static int * const ieee80211_tag_dmg_cap2[] = {
36593 &hf_ieee80211_tag_min_mpdu_spacing,
36594 &hf_ieee80211_tag_ba_flow_control,
36595 &hf_ieee80211_tag_max_sc_rx_mcs,
36596 &hf_ieee80211_tag_max_ofdm_rx_mcs,
36597 &hf_ieee80211_tag_max_sc_tx_mcs,
36598 &hf_ieee80211_tag_max_ofdm_tx_mcs,
36599 NULL((void*)0)
36600 };
36601
36602 static int * const ieee80211_tag_dmg_cap3[] = {
36603 &hf_ieee80211_tag_low_power_supported,
36604 &hf_ieee80211_tag_code_rate,
36605 &hf_ieee80211_tag_dtp,
36606 &hf_ieee80211_tag_appdu_supp,
36607 &hf_ieee80211_tag_heartbeat,
36608 &hf_ieee80211_tag_other_aid,
36609 &hf_ieee80211_tag_pattern_recip,
36610 &hf_ieee80211_tag_heartbeat_elapsed,
36611 &hf_ieee80211_tag_grant_ack_supp,
36612 &hf_ieee80211_tag_RXSSTxRate_supp,
36613 NULL((void*)0)
36614 };
36615
36616 static int * const ieee80211_tag_dmg_cap4[] = {
36617 &hf_ieee80211_tag_pcp_tddti,
36618 &hf_ieee80211_tag_pcp_PSA,
36619 &hf_ieee80211_tag_pcp_handover,
36620 &hf_ieee80211_tag_pcp_max_assoc,
36621 &hf_ieee80211_tag_pcp_power_src,
36622 &hf_ieee80211_tag_pcp_decenter,
36623 &hf_ieee80211_tag_pcp_forwarding,
36624 &hf_ieee80211_tag_pcp_center,
36625 NULL((void*)0)
36626 };
36627
36628 static int * const ieee80211_tag_dmg_cap5[] = {
36629 &hf_ieee80211_tag_ext_sc_mcs_max_tx,
36630 &hf_ieee80211_tag_ext_sc_mcs_tx_code_7_8,
36631 &hf_ieee80211_tag_ext_sc_mcs_max_rx,
36632 &hf_ieee80211_tag_ext_sc_mcs_rx_code_7_8,
36633 NULL((void*)0)
36634 };
36635
36636 /*
36637 * Plenty of devices still do not conform to the older version of this
36638 * field. So, it must be at least 17 bytes in length.
36639 */
36640 if (tag_len < 17)
36641 {
36642 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must contain at least 17 bytes", tag_len);
36643 return tvb_captured_length(tvb);
36644 }
36645
36646 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_sta_addr, tvb, offset, 6, ENC_NA0x00000000);
36647 offset += 6;
36648 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_aid, tvb, offset, 1, ENC_NA0x00000000);
36649 offset += 1;
36650 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_dmg_cap1, ENC_LITTLE_ENDIAN0x80000000);
36651 offset += 3;
36652 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_dmg_cap2, ENC_LITTLE_ENDIAN0x80000000);
36653 offset += 3;
36654 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_dmg_cap3, ENC_LITTLE_ENDIAN0x80000000);
36655 offset += 2;
36656 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_dmg_cap4, ENC_LITTLE_ENDIAN0x80000000);
36657 offset += 2;
36658
36659 /*
36660 * There are many captures out there that do not conform to the 2016
36661 * version, so give them a malformed IE message now after we have dissected
36662 * the above
36663 */
36664 if (tag_len != 22)
36665 {
36666 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u does not conform to IEEE802.11-2016, should contain 22 bytes", tag_len);
36667 return tvb_captured_length(tvb);
36668 }
36669
36670 proto_tree_add_item(tree, hf_ieee80211_tag_sta_beam_track, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36671 offset += 2;
36672 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_dmg_cap5, ENC_LITTLE_ENDIAN0x80000000);
36673 offset += 1;
36674 proto_tree_add_item(tree, hf_ieee80211_tag_max_basic_sf_amsdu, tvb, offset, 1, ENC_NA0x00000000);
36675 offset += 1;
36676 proto_tree_add_item(tree, hf_ieee80211_tag_max_short_sf_amsdu, tvb, offset, 1, ENC_NA0x00000000);
36677
36678 return tvb_captured_length(tvb);
36679}
36680
36681static int
36682ieee80211_tag_dmg_operation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36683{
36684 int tag_len = tvb_reported_length(tvb);
36685 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36686 int offset = 0;
36687 static int * const ieee80211_tag_dmg_operation_flags[] = {
36688 &hf_ieee80211_tag_pcp_tddti,
36689 &hf_ieee80211_tag_pcp_PSA,
36690 &hf_ieee80211_tag_pcp_handover,
36691 NULL((void*)0)
36692 };
36693
36694 if (tag_len != 10)
36695 {
36696 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 10", tag_len);
36697 return tvb_captured_length(tvb);
36698 }
36699 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_dmg_operation_flags, ENC_LITTLE_ENDIAN0x80000000);
36700 offset += 2;
36701 proto_tree_add_item(tree, hf_ieee80211_tag_PSRSI, tvb, offset, 1, ENC_NA0x00000000);
36702 offset += 1;
36703 proto_tree_add_item(tree, hf_ieee80211_tag_min_BHI_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36704 offset += 2;
36705 proto_tree_add_item(tree, hf_ieee80211_tag_brdct_sta_info_dur, tvb, offset, 1, ENC_NA0x00000000);
36706 offset += 1;
36707 proto_tree_add_item(tree, hf_ieee80211_tag_assoc_resp_confirm_time, tvb, offset, 1, ENC_NA0x00000000);
36708 offset += 1;
36709 proto_tree_add_item(tree, hf_ieee80211_tag_min_pp_duration, tvb, offset, 1, ENC_NA0x00000000);
36710 offset += 1;
36711 proto_tree_add_item(tree, hf_ieee80211_tag_SP_idle_timeout, tvb, offset, 1, ENC_NA0x00000000);
36712 offset += 1;
36713 proto_tree_add_item(tree, hf_ieee80211_tag_max_lost_beacons, tvb, offset, 1, ENC_NA0x00000000);
36714 return tvb_captured_length(tvb);
36715}
36716
36717static int
36718ieee80211_tag_antenna_section_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36719{
36720 int tag_len = tvb_reported_length(tvb);
36721 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36722 int offset = 0;
36723 static int * const ieee80211_tag_antenna[] = {
36724 &hf_ieee80211_tag_type,
36725 &hf_ieee80211_tag_tap1,
36726 &hf_ieee80211_tag_state1,
36727 &hf_ieee80211_tag_tap2,
36728 &hf_ieee80211_tag_state2,
36729 NULL((void*)0)
36730 };
36731
36732 if (tag_len != 4)
36733 {
36734 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
36735 return tvb_captured_length(tvb);
36736 }
36737 proto_tree_add_bitmask_list(tree, tvb, offset, 4, ieee80211_tag_antenna, ENC_LITTLE_ENDIAN0x80000000);
36738 return tvb_captured_length(tvb);
36739}
36740
36741static int
36742ieee80211_tag_extended_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36743{
36744 int tag_len = tvb_reported_length(tvb);
36745 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36746 int offset = 0;
36747 int i;
36748 bool_Bool isGrant;
36749 proto_tree * alloc_tree;
36750 if ((tag_len%15) != 0)
36751 {
36752 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be N*15 where 0<=N<=17", tag_len);
36753 return tvb_captured_length(tvb);
36754 }
36755 isGrant = ((field_data->ftype==CTRL_GRANT0x164)||(field_data->ftype==CTRL_GRANT_ACK0x167));
36756 for(i=0; i < tag_len; i+=15) {
36757 alloc_tree = proto_tree_add_subtree_format(tree, tvb, offset, 15, ett_allocation_tree, NULL((void*)0), "Allocation %d", i/15);
36758 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36759 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36760 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pseudo_static, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36761 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_truncatable, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36762 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_extendable, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36763 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pcp_active, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36764 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_lp_sc_used, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36765 offset += 2;
36766 offset += add_ff_beamforming_ctrl(alloc_tree, tvb, pinfo, offset, isGrant);
36767 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_src_aid, tvb, offset, 1, ENC_NA0x00000000);
36768 offset += 1;
36769 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_dest_aid, tvb, offset, 1, ENC_NA0x00000000);
36770 offset += 1;
36771 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36772 offset += 4;
36773 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36774 offset += 2;
36775 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_num_blocks, tvb, offset, 1, ENC_NA0x00000000);
36776 offset += 1;
36777 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36778 offset += 2;
36779 }
36780 return tvb_captured_length(tvb);
36781}
36782
36783static int
36784ieee80211_tag_sta_availability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36785{
36786 int tag_len = tvb_reported_length(tvb);
36787 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36788 int offset = 0;
36789 int i;
36790 proto_tree * sta_info_tree;
36791 if ((tag_len%2) != 0)
36792 {
36793 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be N*2 where N>=0", tag_len);
36794 return tvb_captured_length(tvb);
36795 }
36796 for(i=0; i < tag_len; i+=2) {
36797 sta_info_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2, ett_sta_info, NULL((void*)0), "STA Info %d", i/2);
36798 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36799 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_cbap, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36800 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_pp_avail, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36801 offset += 2;
36802 }
36803 return tvb_captured_length(tvb);
36804}
36805
36806static int
36807ieee80211_tag_next_dmg_ati(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36808{
36809 int tag_len = tvb_reported_length(tvb);
36810 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36811 int offset = 0;
36812 if (tag_len != 6)
36813 {
36814 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
36815 return tvb_captured_length(tvb);
36816 }
36817 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36818 offset += 4;
36819 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36820 return tvb_captured_length(tvb);
36821}
36822
36823static int
36824ieee80211_tag_nextpcp_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36825{
36826 int tag_len = tvb_reported_length(tvb);
36827 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36828 int offset = 0;
36829 int i;
36830 if (tag_len < 1)
36831 {
36832 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 1", tag_len);
36833 return tvb_captured_length(tvb);
36834 }
36835 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_token, tvb, offset, 1, ENC_NA0x00000000);
36836 offset += 1;
36837 for(i=0; i < tag_len-1; i+=1) {
36838 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_list, tvb, offset, 1, ENC_NA0x00000000);
36839 offset += 1;
36840 }
36841 return tvb_captured_length(tvb);
36842}
36843
36844static int
36845ieee80211_tag_pcp_handover(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36846{
36847 int tag_len = tvb_reported_length(tvb);
36848 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36849 int offset = 0;
36850 if (tag_len != 13)
36851 {
36852 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 13", tag_len);
36853 return tvb_captured_length(tvb);
36854 }
36855 proto_tree_add_item(tree, hf_ieee80211_tag_old_bssid, tvb, offset, 6, ENC_NA0x00000000);
36856 offset += 6;
36857 proto_tree_add_item(tree, hf_ieee80211_tag_new_pcp_addr, tvb, offset, 6, ENC_NA0x00000000);
36858 offset += 6;
36859 proto_tree_add_item(tree, hf_ieee80211_tag_remaining_BI, tvb, offset, 1, ENC_NA0x00000000);
36860 return tvb_captured_length(tvb);
36861}
36862
36863static int
36864ieee80211_tag_beamlink_maintenance(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36865{
36866 int tag_len = tvb_reported_length(tvb);
36867 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36868 int offset = 0;
36869 if (tag_len != 1)
36870 {
36871 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
36872 return tvb_captured_length(tvb);
36873 }
36874 add_ff_beamformed_link(tree, tvb, pinfo, offset);
36875 return tvb_captured_length(tvb);
36876}
36877
36878static int
36879ieee80211_tag_quiet_period_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36880{
36881 int tag_len = tvb_reported_length(tvb);
36882 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36883 int offset = 0;
36884 if (tag_len != 10)
36885 {
36886 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 10", tag_len);
36887 return tvb_captured_length(tvb);
36888 }
36889 proto_tree_add_item(tree, hf_ieee80211_tag_request_token, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36890 offset += 2;
36891 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA0x00000000);
36892 offset += 6;
36893 add_ff_sta_address(tree, tvb, pinfo, offset);
36894 return tvb_captured_length(tvb);
36895}
36896
36897static int
36898ieee80211_tag_relay_transfer_param(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36899{
36900 int tag_len = tvb_reported_length(tvb);
36901 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36902 int offset = 0;
36903
36904 if (tag_len != 8)
36905 {
36906 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
36907 return tvb_captured_length(tvb);
36908 }
36909 proto_tree_add_item(tree, hf_ieee80211_tag_duplex_relay, tvb, offset, 1, ENC_NA0x00000000);
36910 proto_tree_add_item(tree, hf_ieee80211_tag_cooperation_relay, tvb, offset, 1, ENC_NA0x00000000);
36911 proto_tree_add_item(tree, hf_ieee80211_tag_tx_mode, tvb, offset, 1, ENC_NA0x00000000);
36912 proto_tree_add_item(tree, hf_ieee80211_tag_link_change_interval, tvb, offset+1, 1, ENC_NA0x00000000);
36913 proto_tree_add_item(tree, hf_ieee80211_tag_data_sensing_time, tvb, offset+2, 1, ENC_NA0x00000000);
36914 proto_tree_add_item(tree, hf_ieee80211_tag_first_period, tvb, offset+3, 2, ENC_LITTLE_ENDIAN0x80000000);
36915 proto_tree_add_item(tree, hf_ieee80211_tag_second_period, tvb, offset+5, 2, ENC_LITTLE_ENDIAN0x80000000);
36916 return tvb_captured_length(tvb);
36917}
36918
36919static int
36920ieee80211_tag_dmg_beam_refinement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36921{
36922 int tag_len = tvb_reported_length(tvb);
36923 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36924 int offset = 0;
36925 static int * const ieee80211_dmg_beam_refinement_fields[] = {
36926 &hf_ieee80211_tag_initiator,
36927 &hf_ieee80211_tag_tx_train_res,
36928 &hf_ieee80211_tag_rx_train_res,
36929 &hf_ieee80211_tag_tx_trn_ok,
36930 &hf_ieee80211_tag_txss_fbck_req,
36931 &hf_ieee80211_tag_bs_fbck,
36932 &hf_ieee80211_tag_bs_fbck_antenna_id,
36933 &hf_ieee80211_tag_snr_requested,
36934 &hf_ieee80211_tag_channel_measurement_requested,
36935 &hf_ieee80211_tag_number_of_taps_requested,
36936 &hf_ieee80211_tag_sector_id_order_req,
36937 &hf_ieee80211_tag_snr_present,
36938 &hf_ieee80211_tag_channel_measurement_present,
36939 &hf_ieee80211_tag_tap_delay_present,
36940 &hf_ieee80211_tag_number_of_taps_present,
36941 &hf_ieee80211_tag_number_of_measurement,
36942 &hf_ieee80211_tag_sector_id_order_present,
36943 &hf_ieee80211_tag_number_of_beams,
36944 &hf_ieee80211_tag_mid_extension,
36945 &hf_ieee80211_tag_capability_request,
36946 &hf_ieee80211_tag_beam_refine_reserved,
36947 NULL((void*)0)
36948 };
36949
36950 if (tag_len != 5)
36951 {
36952 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
36953 return tvb_captured_length(tvb);
36954 }
36955
36956 proto_tree_add_bitmask_list(tree, tvb, offset, 5, ieee80211_dmg_beam_refinement_fields, ENC_LITTLE_ENDIAN0x80000000);
36957 return tvb_captured_length(tvb);
36958}
36959
36960static int
36961ieee80211_tag_wakeup_schedule_ad(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36962{
36963 int tag_len = tvb_reported_length(tvb);
36964 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36965 int offset = 0;
36966
36967 if (tag_len != 8)
36968 {
36969 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
36970 return tvb_captured_length(tvb);
36971 }
36972 proto_tree_add_item(tree, hf_ieee80211_tag_bi_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36973 offset += 4;
36974 proto_tree_add_item(tree, hf_ieee80211_tag_sleep_cycle, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36975 offset += 2;
36976 proto_tree_add_item(tree, hf_ieee80211_tag_num_awake_bis, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36977 return tvb_captured_length(tvb);
36978}
36979
36980static int
36981ieee80211_tag_dmg_tspec(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36982{
36983 int tag_len = tvb_reported_length(tvb);
36984 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36985 int offset = 0;
36986
36987 bool_Bool isGrant;
36988 int num_constraints;
36989 if (tag_len < 14)
36990 {
36991 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 14", tag_len);
36992 return tvb_captured_length(tvb);
36993 }
36994 static int * const ieee80211_tag_tspec_flags[] = {
36995 &hf_ieee80211_tag_tspec_allocation_id,
36996 &hf_ieee80211_tag_tspec_allocation_type,
36997 &hf_ieee80211_tag_tspec_allocation_format,
36998 &hf_ieee80211_tag_tspec_pseudo_static,
36999 &hf_ieee80211_tag_tspec_truncatable,
37000 &hf_ieee80211_tag_tspec_extendable,
37001 &hf_ieee80211_tag_tspec_lp_sc_used,
37002 &hf_ieee80211_tag_tspec_up,
37003 &hf_ieee80211_tag_tap2,
37004 &hf_ieee80211_tag_tspec_dest_aid,
37005 NULL((void*)0)
37006 };
37007
37008 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_tspec_flags, ENC_LITTLE_ENDIAN0x80000000);
37009 offset += 3;
37010 isGrant = ((field_data->ftype==CTRL_GRANT0x164)||(field_data->ftype==CTRL_GRANT_ACK0x167));
37011 offset += add_ff_beamforming_ctrl(tree, tvb, pinfo, 2, isGrant);
37012 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37013 offset += 2;
37014 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37015 offset += 2;
37016 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_max_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37017 offset += 2;
37018 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37019 offset += 2;
37020 num_constraints = tvb_get_uint8(tvb, offset);
37021 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_num_of_constraints, tvb, offset, 1, ENC_NA0x00000000);
37022 offset += 1;
37023 while(num_constraints > 0) {
37024 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
37025 offset += 4;
37026 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37027 offset += 2;
37028 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37029 offset += 2;
37030 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_interferer_mac, tvb, offset, 2, ENC_NA0x00000000);
37031 offset += 6;
37032 num_constraints--;
37033 }
37034 return tvb_captured_length(tvb);
37035}
37036
37037static int
37038ieee80211_tag_channel_measurement_fb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37039{
37040 int tag_len = tvb_reported_length(tvb);
37041 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37042 int offset = 0;
37043
37044 int num_measurement;
37045 if (tag_len%5 != 0)
37046 {
37047 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be multiple of 5", tag_len);
37048 return tvb_captured_length(tvb);
37049 }
37050 num_measurement = tvb_get_uint8(tvb, offset+1);
37051 offset += 2;
37052 while(num_measurement > 0) {
37053 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA0x00000000);
37054 offset += 1;
37055 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_relative_I, tvb, offset, 1, ENC_NA0x00000000);
37056 offset += 1;
37057 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_relative_Q, tvb, offset, 1, ENC_NA0x00000000);
37058 offset += 1;
37059 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_tap_delay, tvb, offset, 1, ENC_NA0x00000000);
37060 offset += 1;
37061 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_sector_id, tvb, offset, 1, ENC_NA0x00000000);
37062 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
37063 offset += 1;
37064 num_measurement--;
37065 }
37066 return tvb_captured_length(tvb);
37067}
37068
37069static int
37070ieee80211_tag_awake_window(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37071{
37072 int tag_len = tvb_reported_length(tvb);
37073 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37074
37075 if (tag_len != 2)
37076 {
37077 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 2", tag_len);
37078 }
37079 else
37080 {
37081 proto_tree_add_item(tree, hf_ieee80211_tag_awake_window, tvb, 0, 2, ENC_LITTLE_ENDIAN0x80000000);
37082 }
37083 return tvb_captured_length(tvb);
37084}
37085
37086static int
37087ieee80211_tag_addba_ext(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37088{
37089 int tag_len = tvb_reported_length(tvb);
37090 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37091
37092 if (tag_len != 1)
37093 {
37094 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
37095 }
37096 else
37097 {
37098 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_no_frag, tvb, 0, 1, ENC_NA0x00000000);
37099 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_he_fragmentation_operation, tvb, 0, 1, ENC_NA0x00000000);
37100 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_reserved, tvb, 0, 1, ENC_NA0x00000000);
37101 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_buffer_size, tvb, 0, 1, ENC_NA0x00000000);
37102 }
37103 return tvb_captured_length(tvb);
37104}
37105
37106static int
37107ieee80211_tag_multi_band(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37108{
37109 int tag_len = tvb_reported_length(tvb);
37110 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37111 int offset = 0;
37112 bool_Bool chiper_present, addr_present;
37113 static int * const ieee80211_tag_multi_band_ctrl[] = {
37114 &hf_ieee80211_tag_multi_band_ctrl_sta_role,
37115 &hf_ieee80211_tag_multi_band_ctrl_addr_present,
37116 &hf_ieee80211_tag_multi_band_ctrl_cipher_present,
37117 NULL((void*)0)
37118 };
37119 static int * const ieee80211_tag_multi_band_conn[] = {
37120 &hf_ieee80211_tag_multi_band_conn_ap,
37121 &hf_ieee80211_tag_multi_band_conn_pcp,
37122 &hf_ieee80211_tag_multi_band_conn_dls,
37123 &hf_ieee80211_tag_multi_band_conn_tdls,
37124 &hf_ieee80211_tag_multi_band_conn_ibss,
37125 NULL((void*)0)
37126 };
37127
37128 if (tag_len < 22)
37129 {
37130 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 22", tag_len);
37131 return tvb_captured_length(tvb);
37132 }
37133 chiper_present = (tvb_get_letohs(tvb, offset) & 0x08) >> 3;
37134 addr_present = (tvb_get_letohs(tvb, offset) & 0x10) >> 4;
37135 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_multi_band_ctrl, ENC_NA0x00000000);
37136 offset += 1;
37137 offset += add_ff_band_id(tree, tvb, pinfo, 1);
37138 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_oper_class, tvb, offset, 1, ENC_NA0x00000000);
37139 offset += 1;
37140 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_channel_number, tvb, offset, 1, ENC_NA0x00000000);
37141 offset += 1;
37142 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA0x00000000);
37143 offset += 6;
37144 offset += add_ff_beacon_interval(tree, tvb, pinfo, 2);
37145 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_tsf_offset, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
37146 offset += 8;
37147
37148 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_multi_band_conn, ENC_NA0x00000000);
37149 offset += 1;
37150 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_fst_timeout, tvb, offset, 1, ENC_NA0x00000000);
37151 offset += 1;
37152 if(addr_present)
37153 {
37154 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_sta_mac, tvb, offset, 6, ENC_NA0x00000000);
37155 offset += 6;
37156 }
37157 if(chiper_present)
37158 {
37159 proto_item *rsn_pcs_count, *rsn_pcs_item, *rsn_sub_pcs_item;
37160 proto_tree *rsn_pcs_tree, *rsn_sub_pcs_tree;
37161 int ii;
37162 uint16_t pcs_count;
37163 int tag_end = tvb_reported_length(tvb);
37164 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37165 pcs_count = tvb_get_letohs(tvb, offset);
37166 offset += 2;
37167
37168 if (offset + (pcs_count * 4) > tag_end)
37169 {
37170 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
37171 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
37172 pcs_count = (tag_end - offset) / 4;
37173 }
37174
37175 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA0x00000000);
37176 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
37177 for (ii = 0; ii < pcs_count; ii++)
37178 {
37179 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
37180 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
37181 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
37182
37183 /* Check if OUI is 00:0F:AC (ieee80211) */
37184 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
37185 {
37186 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
37187 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
37188 } else {
37189 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
37190 }
37191 offset += 4;
37192 }
37193 }
37194
37195 return tvb_captured_length(tvb);
37196}
37197
37198static int
37199ieee80211_tag_dmg_link_margin(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37200{
37201 int tag_len = tvb_reported_length(tvb);
37202 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37203 int offset = 0;
37204
37205 if (tag_len != 8)
37206 {
37207 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
37208 return tvb_captured_length(tvb);
37209 }
37210 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA0x00000000);
37211 offset += 1;
37212 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_mcs, tvb, offset, 1, ENC_NA0x00000000);
37213 offset += 1;
37214 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_link_margin, tvb, offset, 1, ENC_NA0x00000000);
37215 offset += 1;
37216 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA0x00000000);
37217 offset += 1;
37218 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
37219 return tvb_captured_length(tvb);
37220}
37221
37222static int
37223ieee80211_tag_dmg_link_adaption_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37224{
37225 int tag_len = tvb_reported_length(tvb);
37226 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37227 int offset = 0;
37228
37229 if (tag_len != 5)
37230 {
37231 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
37232 return tvb_captured_length(tvb);
37233 }
37234 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA0x00000000);
37235 offset += 1;
37236 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
37237 return tvb_captured_length(tvb);
37238}
37239
37240static int
37241ieee80211_tag_switching_stream(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37242{
37243 int tag_len = tvb_reported_length(tvb);
37244 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37245 int offset = 0;
37246 static int * const ieee80211_tag_switching_stream_flags[] = {
37247 &hf_ieee80211_tag_switching_stream_old_tid,
37248 &hf_ieee80211_tag_switching_stream_old_direction,
37249 &hf_ieee80211_tag_switching_stream_new_tid,
37250 &hf_ieee80211_tag_switching_stream_new_direction,
37251 &hf_ieee80211_tag_switching_stream_new_valid_id,
37252 &hf_ieee80211_tag_switching_stream_llt_type,
37253 NULL((void*)0)
37254 };
37255
37256 int param_num;
37257 if (tag_len < 4)
37258 {
37259 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 4", tag_len);
37260 return tvb_captured_length(tvb);
37261 }
37262 offset += add_ff_band_id(tree, tvb, pinfo, 1);
37263 offset += add_ff_band_id(tree, tvb, pinfo, 1);
37264 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_non_qos, tvb, offset, 1, ENC_NA0x00000000);
37265 offset += 1;
37266 param_num = tvb_get_letohs(tvb, offset);
37267 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_param_num, tvb, offset, 1, ENC_NA0x00000000);
37268 offset += 1;
37269 while(param_num > 0)
37270 {
37271 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_switching_stream_flags, ENC_NA0x00000000);
37272 param_num--;
37273 offset += 2;
37274 }
37275 return tvb_captured_length(tvb);
37276}
37277
37278static const range_string channel_usage_mode[] = {
37279 { 0, 0, "Channel-usage-aidable BSS" },
37280 { 1, 1, "Off-channel TDLS Direct Link" },
37281 { 2, 2, "Channel-usage-aidable BSS in which none of the channel-usage-aiding BSSs that belong to the same ESS" },
37282 { 3, 3, "Unavailability Indication" },
37283 { 4, 4, "Channel-usage-aidable BSS Channel Switch Request" },
37284 { 5, 5, "Capability Notification" },
37285 { 6, 254, "Reserved" },
37286 { 255, 255, "Unknown Request" },
37287 { 0, 0, NULL((void*)0) }
37288};
37289
37290static int
37291ieee80211_tag_channel_usage(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37292{
37293 int tag_len = tvb_reported_length(tvb);
37294 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37295 int offset = 0;
37296
37297 if (tag_len < 1)
37298 {
37299 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 1", tag_len);
37300 return tvb_captured_length(tvb);
37301 }
37302
37303 proto_tree_add_item(tree, hf_ieee80211_tag_channel_usage_mode, tvb, offset, 1, ENC_NA0x00000000);
37304 offset += 1;
37305
37306 while (offset < tag_len) {
37307 offset += add_ff_operating_class(tree, tvb, pinfo, offset);
37308 offset += add_ff_channel(tree, tvb, pinfo, offset);
37309 }
37310
37311 return tvb_captured_length(tvb);
37312}
37313
37314static const range_string dms_req_type[] = {
37315 { 0, 0, "Add" },
37316 { 1, 1, "Remove" },
37317 { 2, 2, "Change" },
37318 { 3, 255, "Reserved" },
37319 { 0, 0, NULL((void*)0) }
37320};
37321
37322static int
37323ieee80211_tag_dms_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37324{
37325 int tag_len = tvb_reported_length(tvb);
37326 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37327 int offset = 0;
37328
37329 if (tag_len < 3)
37330 {
37331 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 3", tag_len);
37332 return tvb_captured_length(tvb);
37333 }
37334
37335 proto_tree_add_item(tree, hf_ieee80211_tag_dms_id, tvb, offset, 1, ENC_NA0x00000000);
37336 offset += 1;
37337
37338 proto_tree_add_item(tree, hf_ieee80211_tag_dms_length, tvb, offset, 1, ENC_NA0x00000000);
37339 offset += 1;
37340
37341 proto_tree_add_item(tree, hf_ieee80211_tag_dms_req_type, tvb, offset, 1, ENC_NA0x00000000);
37342 offset += 1;
37343
37344 /* There will be at least one tclass element ... */
37345 while ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37346 tvb_get_uint8(tvb, offset) == TAG_TCLAS14) {
37347 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37348 }
37349 /* There could be a TCLAS PROCESS element ... */
37350 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37351 tvb_get_uint8(tvb, offset) == TAG_TCLAS_PROCESS44) {
37352 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37353 }
37354 /* There could be a TSPEC element ... */
37355 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37356 tvb_get_uint8(tvb, offset) == TAG_TSPEC13) {
37357 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37358 }
37359 /* Subelements? */
37360
37361 return tvb_captured_length(tvb);
37362}
37363
37364static const range_string dms_resp_type[] = {
37365 { 0, 0, "Accept" },
37366 { 1, 1, "Denied" },
37367 { 2, 2, "Terminate" },
37368 { 3, 3, "GCR Advertise" },
37369 { 4, 255, "Reserved" },
37370 { 0, 0, NULL((void*)0) }
37371};
37372
37373static int
37374ieee80211_tag_dms_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37375{
37376 int tag_len = tvb_reported_length(tvb);
37377 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37378 int offset = 0;
37379
37380 if (tag_len < 5)
37381 {
37382 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 5", tag_len);
37383 return tvb_captured_length(tvb);
37384 }
37385
37386 proto_tree_add_item(tree, hf_ieee80211_tag_dms_id, tvb, offset, 1, ENC_NA0x00000000);
37387 offset += 1;
37388
37389 proto_tree_add_item(tree, hf_ieee80211_tag_dms_length, tvb, offset, 1, ENC_NA0x00000000);
37390 offset += 1;
37391
37392 proto_tree_add_item(tree, hf_ieee80211_tag_dms_resp_type, tvb, offset, 1, ENC_NA0x00000000);
37393 offset += 1;
37394
37395 proto_tree_add_item(tree, hf_ieee80211_tag_dms_last_seq_control, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37396 offset += 2;
37397
37398 /* There will be at least one tclass element ... */
37399 while ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37400 tvb_get_uint8(tvb, offset) == TAG_TCLAS14) {
37401 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37402 }
37403 /* There could be a TCLAS PROCESS element ... */
37404 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37405 tvb_get_uint8(tvb, offset) == TAG_TCLAS_PROCESS44) {
37406 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37407 }
37408 /* There could be a TSPEC element ... */
37409 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37410 tvb_get_uint8(tvb, offset) == TAG_TSPEC13) {
37411 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
Value stored to 'offset' is never read
37412 }
37413 /* Subelements? */
37414
37415 return tvb_captured_length(tvb);
37416}
37417
37418static void
37419ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
37420 proto_tree *tree, int tagged_parameters_len, int ftype,
37421 association_sanity_check_t *association_sanity_check)
37422{
37423 int next_len;
37424 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
37425 while (tagged_parameters_len > 0) {
37426 uint8_t tag_no = tvb_get_uint8(tvb, offset);
37427
37428 /* TODO make callers optionally specify the list of valid IE IDs? */
37429 if ((next_len=add_tagged_field (pinfo, tree, tvb, offset, ftype, NULL((void*)0), 0, association_sanity_check)) == 0)
37430 break;
37431 if (next_len > tagged_parameters_len) {
37432 /* XXX - flag this as an error? */
37433 next_len = tagged_parameters_len;
37434 }
37435 offset += next_len;
37436 tagged_parameters_len -= next_len;
37437
37438 /* If FILS is used, all data after the FILS Session tag in a (re)association message is encrypted */
37439 if (association_sanity_check != NULL((void*)0) && association_sanity_check->has_fils_session) {
37440 proto_tree_add_item(tree, hf_ieee80211_fils_encrypted_data, tvb, offset, tagged_parameters_len, ENC_NA0x00000000);
37441 break;
37442 }
37443
37444 /* In an AMPE frame the data following the MIC element is encrypted */
37445 if ((tag_no == TAG_MIC140) && (association_sanity_check != NULL((void*)0)) && association_sanity_check->ampe_frame) {
37446 proto_tree_add_item(tree, hf_ieee80211_mesh_ampe_encrypted_data, tvb, offset, tagged_parameters_len, ENC_NA0x00000000);
37447 break;
37448 }
37449 }
37450}
37451
37452static void
37453ieee_80211_do_association_sanity_check(packet_info *pinfo, association_sanity_check_t *sanity_check)
37454{
37455 /* Given a [re-]association request frame, consider it in its totality and
37456 add expert information as appropriate */
37457
37458 if (sanity_check->association_has_mobility_domain_element) {
37459 /* This is an FT association, warn about any non-FT AKM suites */
37460 if (sanity_check->has_non_ft_akm_suite) {
37461 expert_add_info_format(pinfo, sanity_check->rsn_first_non_ft_akm_suite, &ei_ieee80211_mismatched_akm_suite,
37462 "Non-FT AKM suite is prohibited for FT association request");
37463 }
37464 } else {
37465 /* This is a non-FT association, warn about any FT AKM suites */
37466 if (sanity_check->has_ft_akm_suite) {
37467 expert_add_info_format(pinfo, sanity_check->rsn_first_ft_akm_suite, &ei_ieee80211_mismatched_akm_suite,
37468 "FT AKM suite is prohibited for non-FT association request");
37469 }
37470 }
37471}
37472
37473/* ************************************************************************* */
37474/* Dissect 802.11 management frame */
37475/* ************************************************************************* */
37476static void dissect_mgt_action(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset, association_sanity_check_t *sanity_check)
37477{
37478 proto_item *lcl_fixed_hdr;
37479 proto_tree *lcl_fixed_tree;
37480 proto_tree *tagged_tree;
37481 int tagged_parameter_tree_len;
37482
37483 lcl_fixed_tree = proto_tree_add_subtree(tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
37484 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0, sanity_check);
37485
37486 proto_item_set_len(lcl_fixed_hdr, offset);
37487 if (ieee80211_tvb_invalid)
37488 return; /* Buffer not available for further processing */
37489 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37490 if (tagged_parameter_tree_len > 0) {
37491 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
37492 tagged_parameter_tree_len);
37493 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37494 tagged_parameter_tree_len, MGT_ACTION0x0D,
37495 sanity_check);
37496 }
37497}
37498
37499static void
37500dissect_ieee80211_mgt(uint16_t fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
37501{
37502 proto_item *ti;
37503 proto_tree *mgt_tree;
37504 proto_tree *fixed_tree;
37505 proto_tree *tagged_tree;
37506 int offset = 0;
37507 int tagged_parameter_tree_len;
37508 bool_Bool is_s1g = sta_is_s1g(pinfo);
37509
37510 conversation_t *conversation;
37511 ieee80211_conversation_data_t *conversation_data;
37512
37513 association_sanity_check_t association_sanity_check;
37514 memset(&association_sanity_check, 0, sizeof(association_sanity_check));
37515
37516
37517 ieee80211_tvb_invalid = false0;
37518
37519 ti = proto_tree_add_item(tree, hf_ieee80211_mgt, tvb, 0, -1, ENC_NA0x00000000);
37520 mgt_tree = proto_item_add_subtree(ti, ett_80211_mgt);
37521 /*
37522 * Add the frame type to the pinfo for those cases where it is needed
37523 * to determine other things.
37524 * XXX - Is there any reason why this is file scoped? Couldn't this
37525 * be pinfo->pool?
37526 */
37527 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, FRAME_TYPE_KEY, GINT_TO_POINTER(COMPOSE_FRAME_TYPE(fcf))((gpointer) (glong) ((((((fcf) & 0xC) >> 2) == 0x1 &&
(((fcf) & 0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)
<< 6) + ((fcf) & 0xF0) + (((fcf) & 0xF00) >>
8)) : (((fcf & 0x0C)<< 2)+(((fcf) & 0xF0) >>
4)))))
);
37528
37529 switch (COMPOSE_FRAME_TYPE(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
)
37530 {
37531
37532 case MGT_ASSOC_REQ0x00:
37533 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 4, false0);
37534 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37535 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
37536 offset = 4; /* Size of fixed fields */
37537
37538 tagged_parameter_tree_len =
37539 tvb_reported_length_remaining(tvb, offset);
37540 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37541 tagged_parameter_tree_len);
37542 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37543 tagged_parameter_tree_len, MGT_ASSOC_REQ0x00, &association_sanity_check);
37544 ieee_80211_do_association_sanity_check(pinfo, &association_sanity_check);
37545
37546 if (!pinfo->fd->visited) {
37547 if (!assoc_counter_in_auth) {
37548 association_counter++;
37549 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
37550 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
37551 } else {
37552 assoc_counter_in_auth = 0;
37553 }
37554 }
37555 conversation = find_or_create_wlan_conversation(pinfo);
37556 conversation_data = get_or_create_conversation_data(conversation);
37557 set_conversation_last_akm_suite(conversation_data,
37558 association_sanity_check.last_akm_suite);
37559 conversation_data->owe_group = association_sanity_check.owe_group;
37560 break;
37561
37562
37563 case MGT_ASSOC_RESP0x01:
37564 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, is_s1g ? 4 : 6,
37565 false0);
37566 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37567 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
37568 if (!is_s1g) {
37569 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
37570 offset = 6; /* Size of fixed fields */
37571 } else {
37572 offset = 4;
37573 }
37574
37575 tagged_parameter_tree_len =
37576 tvb_reported_length_remaining(tvb, offset);
37577 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37578 tagged_parameter_tree_len);
37579 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37580 tagged_parameter_tree_len, MGT_ASSOC_RESP0x01, &association_sanity_check);
37581 break;
37582
37583
37584 case MGT_REASSOC_REQ0x02:
37585 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 10, false0);
37586 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37587 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
37588 add_ff_current_ap_addr(fixed_tree, tvb, pinfo, 4);
37589 offset = 10; /* Size of fixed fields */
37590
37591 tagged_parameter_tree_len =
37592 tvb_reported_length_remaining(tvb, offset);
37593 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37594 tagged_parameter_tree_len);
37595 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37596 tagged_parameter_tree_len, MGT_REASSOC_REQ0x02, &association_sanity_check);
37597 ieee_80211_do_association_sanity_check(pinfo, &association_sanity_check);
37598
37599 if (!pinfo->fd->visited) {
37600 if (!assoc_counter_in_auth) {
37601 association_counter++;
37602 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
37603 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
37604 } else {
37605 assoc_counter_in_auth = 0;
37606 }
37607 }
37608 conversation = find_or_create_wlan_conversation(pinfo);
37609 conversation_data = get_or_create_conversation_data(conversation);
37610 set_conversation_last_akm_suite(conversation_data,
37611 association_sanity_check.last_akm_suite);
37612 conversation_data->owe_group = association_sanity_check.owe_group;
37613 break;
37614
37615 case MGT_REASSOC_RESP0x03:
37616 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6, false0);
37617 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37618 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
37619 if (!is_s1g) {
37620 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
37621 offset = 6; /* Size of fixed fields */
37622 } else {
37623 offset = 4;
37624 }
37625
37626 tagged_parameter_tree_len =
37627 tvb_reported_length_remaining(tvb, offset);
37628 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37629 tagged_parameter_tree_len);
37630 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37631 tagged_parameter_tree_len, MGT_REASSOC_RESP0x03, &association_sanity_check);
37632 break;
37633
37634
37635 case MGT_PROBE_REQ0x04:
37636 offset = 0;
37637 tagged_parameter_tree_len =
37638 tvb_reported_length_remaining(tvb, offset);
37639 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37640 tagged_parameter_tree_len);
37641 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37642 tagged_parameter_tree_len, MGT_PROBE_REQ0x04, NULL((void*)0));
37643 break;
37644
37645 case MGT_PROBE_RESP0x05:
37646 {
37647 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12, false0);
37648 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
37649 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
37650 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
37651 offset = 12; /* Size of fixed fields */
37652
37653 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37654 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
37655 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_PROBE_RESP0x05, NULL((void*)0));
37656 break;
37657 }
37658 case MGT_MEASUREMENT_PILOT0x06:
37659 {
37660 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12, false0);
37661 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
37662 offset += add_ff_measurement_pilot_int(fixed_tree, tvb, pinfo, offset);
37663 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
37664 offset += add_ff_cap_info(fixed_tree, tvb, pinfo, offset);
37665 offset += add_ff_country_str(fixed_tree, tvb, pinfo, offset);
37666 offset += add_ff_max_reg_pwr(fixed_tree, tvb, pinfo, offset);
37667 offset += add_ff_max_tx_pwr(fixed_tree, tvb, pinfo, offset);
37668 offset += add_ff_tx_pwr_used(fixed_tree, tvb, pinfo, offset);
37669 offset += add_ff_transceiver_noise_floor(fixed_tree, tvb, pinfo, offset);
37670 /* TODO DS Parameter Set ??? */
37671
37672 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37673 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
37674 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_MEASUREMENT_PILOT0x06, NULL((void*)0));
37675 break;
37676 }
37677 case MGT_BEACON0x08: /* Dissect protocol payload fields */
37678 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12, false0);
37679 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
37680 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
37681 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
37682 offset = 12; /* Size of fixed fields */
37683
37684 tagged_parameter_tree_len =
37685 tvb_reported_length_remaining(tvb, offset);
37686 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37687 tagged_parameter_tree_len);
37688 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37689 tagged_parameter_tree_len, MGT_BEACON0x08, NULL((void*)0));
37690 break;
37691
37692 case MGT_ATIM0x09:
37693 break;
37694
37695 case MGT_DISASS0x0A:
37696 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2, false0);
37697 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
37698 offset = 2; /* Size of fixed fields */
37699 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37700 if (tagged_parameter_tree_len > 0) {
37701 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37702 tagged_parameter_tree_len);
37703 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37704 tagged_parameter_tree_len, MGT_DISASS0x0A, NULL((void*)0));
37705 }
37706
37707 conversation = find_wlan_conversation_pinfo(pinfo);
37708 if (conversation) {
37709 conversation_delete_proto_data(conversation, proto_wlan);
37710 }
37711 break;
37712
37713 case MGT_AUTHENTICATION0x0B:
37714 offset = 6; /* Size of fixed fields */
37715
37716 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, offset, true1);
37717 offset = dissect_auth_frame(fixed_tree, pinfo, tvb);
37718 proto_item_append_text(fixed_tree, " (%d bytes)", offset);
37719 proto_item_set_len(fixed_tree, offset);
37720
37721 tagged_parameter_tree_len =
37722 tvb_reported_length_remaining(tvb, offset);
37723 if (tagged_parameter_tree_len > 0)
37724 {
37725 tagged_tree = get_tagged_parameter_tree(mgt_tree,
37726 tvb,
37727 offset,
37728 tagged_parameter_tree_len);
37729 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37730 tagged_parameter_tree_len, MGT_AUTHENTICATION0x0B, NULL((void*)0));
37731 }
37732 break;
37733
37734 case MGT_DEAUTHENTICATION0x0C:
37735 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2, false0);
37736 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
37737 offset = 2; /* Size of fixed fields */
37738 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37739 if (tagged_parameter_tree_len > 0) {
37740 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37741 tagged_parameter_tree_len);
37742 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37743 tagged_parameter_tree_len, MGT_DEAUTHENTICATION0x0C, NULL((void*)0));
37744 }
37745
37746 conversation = find_wlan_conversation_pinfo(pinfo);
37747 if (conversation) {
37748 conversation_delete_proto_data(conversation, proto_wlan);
37749 }
37750 break;
37751
37752 case MGT_ACTION0x0D:
37753 dissect_mgt_action(tvb, pinfo, mgt_tree, offset, &association_sanity_check);
37754 break;
37755
37756 case MGT_ACTION_NO_ACK0x0E:
37757 {
37758 proto_item *lcl_fixed_hdr;
37759 proto_tree *lcl_fixed_tree;
37760 lcl_fixed_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
37761
37762 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0, NULL((void*)0));
37763
37764 proto_item_set_len(lcl_fixed_hdr, offset);
37765 if (ieee80211_tvb_invalid)
37766 break; /* Buffer not available for further processing */
37767 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37768 if (tagged_parameter_tree_len > 0)
37769 {
37770 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37771 tagged_parameter_tree_len);
37772 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37773 tagged_parameter_tree_len, MGT_ACTION_NO_ACK0x0E, NULL((void*)0));
37774 }
37775 break;
37776 }
37777 case MGT_ARUBA_WLAN0x0F:
37778 {
37779 proto_tree *aruba_tree;
37780 uint16_t type;
37781 type = tvb_get_ntohs(tvb, offset);
37782
37783 aruba_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, NULL((void*)0), "Aruba Management");
37784
37785 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
37786 offset += 2;
37787 switch(type){
37788 case 0x0003: /* MTU Size */
37789 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_mtu, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
37790 break;
37791 case 0x0005: /* HeartBeat Sequence */
37792 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_hb_seq, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
37793 break;
37794 }
37795 break;
37796 }
37797 }
37798}
37799
37800/*
37801 * Dissect a Block Ack request (which is also used in Trigger frames).
37802 */
37803static int * const block_ack_control_headers[] = {
37804 &hf_ieee80211_block_ack_control_ack_policy,
37805 &hf_ieee80211_block_ack_control_type,
37806 &hf_ieee80211_block_ack_control_reserved,
37807 &hf_ieee80211_block_ack_control_tid_info,
37808 NULL((void*)0)
37809};
37810
37811static int * const multi_sta_aid_tid_headers[] = {
37812 &hf_ieee80211_block_ack_multi_sta_aid11,
37813 &hf_ieee80211_block_ack_multi_sta_ack_type,
37814 &hf_ieee80211_block_ack_multi_sta_tid,
37815 NULL((void*)0)
37816};
37817
37818/*
37819 * These bits are shown in reverse order in the spec.
37820 */
37821#define BASIC_BLOCK_ACK0x0 0x0
37822#define EXTENDED_COMPRESSED_BLOCK_ACK0x1 0x1
37823#define COMPRESSED_BLOCK_ACK0x2 0x2
37824#define MULTI_TID_BLOCK_ACK0x3 0x3
37825#define GCR_BLOCK_ACK0x6 0x6
37826#define GLK_GCR_BLOCK_ACK0xA 0xA
37827#define MULTI_STA_BLOCK_ACK0xB 0xB
37828
37829static const value_string block_ack_type_vals[] = {
37830 { BASIC_BLOCK_ACK0x0, "Basic BlockAck" },
37831 { EXTENDED_COMPRESSED_BLOCK_ACK0x1, "Extended Compressed BlockAck" },
37832 { COMPRESSED_BLOCK_ACK0x2, "Compressed BlockAck" },
37833 { MULTI_TID_BLOCK_ACK0x3, "Multi-TID BlockAck" },
37834 { GCR_BLOCK_ACK0x6, "GCR BlockAck" },
37835 { GLK_GCR_BLOCK_ACK0xA, "GLK-GCR BlockAck" },
37836 { MULTI_STA_BLOCK_ACK0xB, "Multi-STA BlockAck" },
37837 { 0, NULL((void*)0) }
37838};
37839
37840static int
37841dissect_ieee80211_block_ack_bitmap(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
37842 proto_tree *tree, int offset, uint16_t ssn, unsigned bitmap_size)
37843{
37844 uint64_t bitmap;
37845 uint16_t last_ack_frame_pos = 0;
37846 int f;
37847 int i;
37848 unsigned j;
37849
37850 proto_item *ba_bitmap_item = proto_tree_add_item(tree,
37851 hf_ieee80211_block_ack_bitmap,
37852 tvb, offset, bitmap_size, ENC_NA0x00000000);
37853 proto_item *ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item,
37854 ett_block_ack_bitmap);
37855 proto_item * last_ack_frame_item;
37856
37857 /* Handle bitmap_size = 4 for Multi-STA block ack */
37858 if (bitmap_size == 4)
37859 {
37860 bitmap = tvb_get_letohl(tvb, offset);
37861
37862 if (bitmap != 0)
37863 last_ack_frame_pos = ws_ilog2(bitmap);
37864
37865 for (f = 0; f < last_ack_frame_pos && f < 32; f++) {
37866 if (bitmap & (UINT64_C(1)1UL << f))
37867 continue;
37868 proto_tree_add_uint_format_value(ba_bitmap_tree,
37869 hf_ieee80211_block_ack_bitmap_missing_frame,
37870 tvb, offset + (f/8), 1, ssn + f, "%u",
37871 (ssn + f) & 0x0fff);
37872 }
37873
37874 } else {
37875 /* Browse the bitmap backwards to find the last acknowledged frame */
37876 for (i = bitmap_size - 8; i >= 0; i -= 8) {
37877 bitmap = tvb_get_letoh64(tvb, offset + i);
37878
37879 if (bitmap == 0)
37880 continue;
37881
37882 last_ack_frame_pos = i * 8 + ws_ilog2(bitmap);
37883 break;
37884 }
37885
37886 /* Browse the bitmap up to the last the last acknowledged frame */
37887 for (j = 0; j < bitmap_size * 8; j += 64) {
37888 bitmap = tvb_get_letoh64(tvb, offset + j/8);
37889 for (f = 0; f < 64 && (f + j) < last_ack_frame_pos; f++) {
37890 if (bitmap & (UINT64_C(1)1UL << f))
37891 continue;
37892 proto_tree_add_uint_format_value(ba_bitmap_tree,
37893 hf_ieee80211_block_ack_bitmap_missing_frame,
37894 tvb, offset + ((f + j)/8), 1, ssn + f + j, "%u",
37895 (ssn + f + j) & 0x0fff);
37896 }
37897 }
37898 }
37899
37900 last_ack_frame_item = proto_tree_add_uint_format_value(ba_bitmap_tree,
37901 hf_ieee80211_block_ack_bitmap_last_ack_frame,
37902 tvb, offset + (last_ack_frame_pos/8), 1, ssn + last_ack_frame_pos, "%u",
37903 (ssn + last_ack_frame_pos) & 0x0fff);
37904 proto_item_set_generated(last_ack_frame_item);
37905
37906 return offset + bitmap_size;
37907}
37908
37909static int
37910dissect_ieee80211_block_ack_details(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
37911 proto_tree *tree, int offset, bool_Bool isDMG, bool_Bool is_req, bool_Bool has_fcs)
37912{
37913 proto_item *pi;
37914 uint16_t ba_control;
37915 uint8_t block_ack_type;
37916 proto_tree *ba_tree;
37917 uint8_t tid_count, frag_num;
37918 unsigned i;
37919 proto_tree *ba_mtid_tree, *ba_mtid_sub_tree;
37920 uint16_t ssn;
37921 uint16_t aid_tid;
37922 proto_tree *ba_multi_sta_tree;
37923 int ba_start = offset;
37924
37925 ba_control = tvb_get_letohs(tvb, offset);
37926 block_ack_type = (ba_control & 0x001E) >> 1;
37927 ba_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_block_ack,
37928 &pi, is_req ? "%s Request" : "%s Response",
37929 val_to_str(pinfo->pool, block_ack_type, block_ack_type_vals,
37930 "Reserved (%d)"));
37931 proto_tree_add_bitmask_with_flags(ba_tree, tvb, offset,
37932 hf_ieee80211_block_ack_control,
37933 ett_block_ack_request_control,
37934 block_ack_control_headers,
37935 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
37936 offset += 2;
37937
37938 switch (block_ack_type) {
37939 case BASIC_BLOCK_ACK0x0:
37940 if (isDMG == true1) {
37941 expert_add_info_format(pinfo, ba_tree, &ei_ieee80211_dmg_subtype,
37942 "DMG STAs shouldn't transmit BlockAckReq frames "
37943 "with Basic BlockAckReqs");
37944 }
37945
37946 /* Both request and response have an SSC */
37947 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
37948
37949 if (!is_req) {
37950 proto_tree_add_item(ba_tree, hf_ieee80211_block_ack_bitmap, tvb, offset,
37951 128, ENC_NA0x00000000);
37952 offset += 128;
37953 }
37954 break;
37955
37956 case COMPRESSED_BLOCK_ACK0x2:
37957 ssn = tvb_get_letohs(tvb, offset);
37958 frag_num = ssn & 0x0F;
37959 ssn >>= 4;
37960 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
37961
37962 if (!is_req) {
37963 unsigned bytes = 0;
37964 if (((frag_num & 0x06) >> 1) == 2) {
37965 bytes = 32;
37966 } else if ((frag_num & 0x0f) == 0x08) {
37967 bytes = 64;
37968 } else if ((frag_num & 0x0f) == 0x0A) {
37969 bytes = 128;
37970 } else { /* Default length */
37971 bytes = 8;
37972 }
37973
37974 offset = dissect_ieee80211_block_ack_bitmap(tvb, pinfo, ba_tree, offset, ssn, bytes);
37975 }
37976 break;
37977
37978 case EXTENDED_COMPRESSED_BLOCK_ACK0x1:
37979 if (isDMG == false0) {
37980 expert_add_info_format(pinfo, ba_tree, &ei_ieee80211_dmg_subtype,
37981 "Non-DMG STAs shouldn't transmit BlockAckReq "
37982 "frames with Extended Compressed BlockAckReqs");
37983 }
37984
37985 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
37986
37987 if (!is_req) {
37988 ssn = tvb_get_letohs(tvb, offset);
37989 ssn >>= 4;
37990
37991 dissect_ieee80211_block_ack_bitmap(tvb, pinfo, ba_tree, offset, ssn, 8);
37992 offset += 8;
37993 proto_tree_add_item(ba_tree, hf_ieee80211_block_ack_RBUFCAP, tvb, offset,
37994 1, ENC_LITTLE_ENDIAN0x80000000);
37995 offset += 1;
37996 }
37997 break;
37998
37999 case MULTI_TID_BLOCK_ACK0x3:
38000
38001 if (isDMG == true1) {
38002 expert_add_info_format(pinfo, ba_tree, &ei_ieee80211_dmg_subtype,
38003 "DMG STAs shouldn't transmit BlockAckReq frames "
38004 "with Multi-TID BlockAckReqs");
38005 }
38006
38007 tid_count = ((ba_control & 0xF000) >> 12) + 1;
38008 if (is_req) {
38009 ba_mtid_tree = proto_tree_add_subtree(ba_tree, tvb, offset, tid_count*4,
38010 ett_block_ack, NULL((void*)0), "TID List");
38011 for (i = 0; i < tid_count; i++) {
38012 uint8_t tid = tvb_get_uint8(tvb, offset) & 0x0F;
38013 ba_mtid_sub_tree = proto_tree_add_subtree_format(ba_mtid_tree, tvb,
38014 offset, 4, ett_block_ack_tid, NULL((void*)0),
38015 "TID %u details", tid);
38016
38017 proto_tree_add_item(ba_mtid_sub_tree,
38018 hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2,
38019 ENC_LITTLE_ENDIAN0x80000000);
38020 proto_tree_add_item(ba_mtid_sub_tree,
38021 hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2,
38022 ENC_LITTLE_ENDIAN0x80000000);
38023 offset += 2;
38024
38025 offset += add_ff_block_ack_ssc(ba_mtid_sub_tree, tvb, pinfo, offset);
38026 }
38027 } else {
38028 ba_mtid_tree = proto_tree_add_subtree(ba_tree, tvb, offset, tid_count*4,
38029 ett_block_ack, NULL((void*)0), "TID List");
38030 for (i = 0; i < tid_count; i++) {
38031 uint8_t tid = tvb_get_uint8(tvb, offset) & 0x0F;
38032 ba_mtid_sub_tree = proto_tree_add_subtree_format(ba_mtid_tree, tvb,
38033 offset, 4, ett_block_ack_tid, NULL((void*)0),
38034 "TID %u details", tid);
38035
38036 proto_tree_add_item(ba_mtid_sub_tree,
38037 hf_ieee80211_block_ack_multi_tid_reserved,
38038 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38039 proto_tree_add_item(ba_mtid_sub_tree,
38040 hf_ieee80211_block_ack_multi_tid_value, tvb,
38041 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38042 offset += 2;
38043
38044 offset += add_ff_block_ack_ssc(ba_mtid_sub_tree, tvb, pinfo, offset);
38045 proto_tree_add_item(ba_mtid_sub_tree,
38046 hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA0x00000000);
38047 offset += 8;
38048 }
38049 }
38050 break;
38051
38052 case GCR_BLOCK_ACK0x6:
38053 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
38054
38055 proto_tree_add_item(ba_tree, hf_ieee80211_block_ack_gcr_addr, tvb,
38056 offset, 6, ENC_NA0x00000000);
38057 offset += 6;
38058
38059 if (!is_req) {
38060 proto_tree_add_item(ba_tree,
38061 hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA0x00000000);
38062 offset += 8;
38063 }
38064 break;
38065
38066 case MULTI_STA_BLOCK_ACK0xB:
38067 while (tvb_reported_length_remaining(tvb, offset) > (has_fcs ? 4 : 0)) {
38068 int start = offset;
38069 proto_item *msta_ti = NULL((void*)0);
38070 aid_tid = tvb_get_letohs(tvb, offset);
38071 ba_multi_sta_tree = proto_tree_add_subtree_format(ba_tree, tvb, offset, -1,
38072 ett_multi_sta_block_ack, &msta_ti,
38073 "Per AID TID Info: 0x%0x", aid_tid & 0x07ff);
38074 proto_tree_add_bitmask_with_flags(ba_multi_sta_tree, tvb, offset,
38075 hf_ieee80211_block_ack_multi_sta_aid_tid,
38076 ett_block_ack_request_multi_sta_aid_tid,
38077 multi_sta_aid_tid_headers,
38078 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38079 offset += 2;
38080
38081 if ((aid_tid & 0x07ff) != 2045) {
38082 if (((aid_tid & 0x0800) == 0) && ((aid_tid & 0xf000) >> 12) <= 7) {
38083 unsigned bitmap_size;
38084 ssn = tvb_get_letohs(tvb, offset);
38085 frag_num = ssn & 0x0F;
38086 ssn >>= 4;
38087 offset += add_ff_block_ack_ssc(ba_multi_sta_tree, tvb, pinfo, offset);
38088 if ((frag_num & 0x0f) == 0x8 || (frag_num & 0x0f) == 0xA) {
38089 bitmap_size = (frag_num & 0x0f) == 8 ? 64 : 128;
38090 } else {
38091 bitmap_size = ((frag_num + 2) & 0x6) >> 1; /* Turn into an exponent */
38092 bitmap_size = 4 << bitmap_size; /* It goes 4, 8, 16, 32 */
38093 }
38094 offset = dissect_ieee80211_block_ack_bitmap(tvb, pinfo, ba_multi_sta_tree, offset, ssn, bitmap_size);
38095 }
38096 } else {
38097 offset += add_ff_block_ack_ssc(ba_multi_sta_tree, tvb, pinfo, offset);
38098 proto_tree_add_item(ba_multi_sta_tree, hf_ieee80211_block_ack_multi_sta_reserved,
38099 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38100 offset += 2;
38101 proto_tree_add_item(ba_multi_sta_tree, hf_ieee80211_block_ack_multi_sta_ra,
38102 tvb, offset, 6, ENC_NA0x00000000);
38103 offset += 6;
38104 }
38105 proto_item_set_len(msta_ti, offset - start);
38106 }
38107 break;
38108 }
38109 proto_item_set_len(pi, offset - ba_start);
38110
38111 return offset;
38112}
38113
38114static void
38115dissect_ieee80211_block_ack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
38116 proto_tree *tree, int offset, bool_Bool isDMG, bool_Bool is_req, bool_Bool has_fcs)
38117{
38118 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
38119 offset += 6;
38120
38121 dissect_ieee80211_block_ack_details(tvb, pinfo, tree, offset, isDMG, is_req, has_fcs);
38122}
38123
38124/*
38125 * Dissect an 802.11ax HE Trigger frame and return the actual len including
38126 * padding!
38127 */
38128
38129typedef enum he_trigger_type {
38130 TRIGGER_TYPE_BASIC = 0,
38131 TRIGGER_TYPE_BRP,
38132 TRIGGER_TYPE_MU_BAR,
38133 TRIGGER_TYPE_MU_RTS,
38134 TRIGGER_TYPE_BSRP,
38135 TRIGGER_TYPE_GCR_MU_BAR,
38136 TRIGGER_TYPE_BQRP,
38137 TRIGGER_TYPE_NFRP,
38138 TRIGGER_TYPE_RANGING,
38139 TRIGGER_TYPE_MIN_RESERVED,
38140} he_trigger_type_t;
38141
38142typedef enum he_trigger_subtype {
38143 TRIGGER_SUBTYPE_POLL = 0,
38144 TRIGGER_SUBTYPE_SOUNDING,
38145 TRIGGER_SUBTYPE_SECURE_SOUNDING,
38146 TRIGGER_SUBTYPE_REPORT,
38147 TRIGGER_SUBTYPE_PASSIVE_TB_MEAS_EXCHANGE,
38148 TRIGGER_SUBTYPE_MIN_RESERVED,
38149} he_trigger_subtype_t;
38150
38151static const val64_string trigger_type_vals[] = {
38152 { 0, "Basic" },
38153 { 1, "Beamforming Report Poll (BRP)" },
38154 { 2, "MU-BAR" },
38155 { 3, "MU-RTS" },
38156 { 4, "Buffer Status Report Poll (BSRP)" },
38157 { 5, "GCR MU-BAR" },
38158 { 6, "Bandwidth Query Report Poll (BQRP)" },
38159 { 7, "NDP Feedback Report Poll (NFRP)" },
38160 { 8, "Ranging" },
38161 /* 9-15 reserved */
38162 { 0, NULL((void*)0) }
38163};
38164
38165static const val64_string bw_subfield_vals[] = {
38166 { 0, "20 MHz" },
38167 { 1, "40 MHz" },
38168 { 2, "80 MHz" },
38169 { 3, "80+80 MHz or 160 MHz" },
38170 { 0, NULL((void*)0) }
38171};
38172
38173static const val64_string gi_and_ltf_type_subfield_vals[] = {
38174 { 0, "1x LTF + 1.6 us GI" },
38175 { 1, "2x LTF + 1.6 us GI" },
38176 { 2, "4x LTF + 3.2 us GI" },
38177 { 3, "Reserved" },
38178 { 0, NULL((void*)0) }
38179};
38180
38181static const true_false_string mu_mimo_ltf_mode_tfs = {
38182 "HE masked HE LTF sequence mode",
38183 "HE single stream pilot HE LTF mode"
38184};
38185
38186static int * const he_trig_frm_bar_ctrl_fields[] = {
38187 &hf_ieee80211_he_trigger_bar_ctrl_ba_ack_policy,
38188 &hf_ieee80211_he_trigger_bar_ctrl_ba_type,
38189 &hf_ieee80211_he_trigger_bar_ctrl_reserved,
38190 &hf_ieee80211_he_trigger_bar_ctrl_tid_info,
38191 NULL((void*)0)
38192};
38193
38194static int * const he_trig_frm_bar_info_fields[] = {
38195 &hf_ieee80211_he_trigger_bar_info_blk_ack_seq_ctrl,
38196 NULL((void*)0)
38197};
38198
38199#define PRE_FEC_PADDING_FACTOR0x3 0x3
38200#define PE_DISAMBIGUITY0x4 0x4
38201
38202static void
38203ap_tx_power_custom(char *result, uint32_t ap_tx_power)
38204{
38205 if (ap_tx_power > 60)
38206 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Reserved");
38207 else
38208 snprintf(result, ITEM_LABEL_LENGTH240, "%d dBm", -20 + ap_tx_power);
38209}
38210
38211static void
38212add_gcr_mu_bar_trigger_frame_common_info(proto_tree *tree, tvbuff_t *tvb,
38213 int offset)
38214{
38215
38216 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38217 hf_ieee80211_he_trigger_bar_ctrl,
38218 ett_he_trigger_bar_ctrl,
38219 he_trig_frm_bar_ctrl_fields,
38220 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38221 offset += 2;
38222
38223 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38224 hf_ieee80211_he_trigger_bar_info,
38225 ett_he_trigger_bar_info,
38226 he_trig_frm_bar_info_fields,
38227 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38228}
38229
38230static int * const common_info_headers[] = {
38231 &hf_ieee80211_he_trigger_type,
38232 &hf_ieee80211_he_trigger_ul_length,
38233 &hf_ieee80211_he_trigger_more_tf,
38234 &hf_ieee80211_he_trigger_cs_required,
38235 &hf_ieee80211_he_trigger_ul_bw,
38236 &hf_ieee80211_he_trigger_gi_and_ltf_type,
38237 &hf_ieee80211_he_trigger_mu_mimo_ltf_mode,
38238 &hf_ieee80211_he_trigger_num_he_ltf_syms_etc,
38239 &hf_ieee80211_he_trigger_ul_stbc,
38240 &hf_ieee80211_he_trigger_ldpc_extra_sym_seg,
38241 &hf_ieee80211_he_trigger_ap_tx_power,
38242 &hf_ieee80211_he_trigger_pre_fec_padding_factor,
38243 &hf_ieee80211_he_trigger_pe_disambiguity,
38244 &hf_ieee80211_he_trigger_ul_spatial_reuse,
38245 &hf_ieee80211_he_trigger_doppler,
38246 &hf_ieee80211_he_trigger_ul_he_sig_a_reserved,
38247 &hf_ieee80211_he_trigger_reserved,
38248 NULL((void*)0)
38249};
38250
38251static int * const eht_common_info_headers[] = {
38252 &hf_ieee80211_eht_trigger_type,
38253 &hf_ieee80211_eht_trigger_ul_length,
38254 &hf_ieee80211_eht_trigger_more_tf,
38255 &hf_ieee80211_eht_trigger_cs_required,
38256 &hf_ieee80211_eht_trigger_ul_bw,
38257 &hf_ieee80211_eht_trigger_gi_and_eht_ltf_type,
38258 &hf_ieee80211_eht_trigger_reserved2,
38259 &hf_ieee80211_eht_trigger_num_he_eht_ltf_syms_etc,
38260 &hf_ieee80211_eht_trigger_reserved3,
38261 &hf_ieee80211_eht_trigger_ldpc_extra_sym_seg,
38262 &hf_ieee80211_eht_trigger_ap_tx_power,
38263 &hf_ieee80211_eht_trigger_pre_fec_padding_factor,
38264 &hf_ieee80211_eht_trigger_pe_disambiguity,
38265 &hf_ieee80211_eht_trigger_ul_spatial_reuse,
38266 &hf_ieee80211_eht_trigger_reserved4,
38267 &hf_ieee80211_eht_trigger_he_eht_p160,
38268 &hf_ieee80211_eht_trigger_special_user_info_flag,
38269 &hf_ieee80211_eht_trigger_eht_reserved,
38270 &hf_ieee80211_eht_trigger_reserved,
38271 NULL((void*)0)
38272};
38273
38274static int* const uhr_common_info_headers[] = {
38275 &hf_ieee80211_uhr_trigger_type,
38276 &hf_ieee80211_uhr_trigger_ul_length,
38277 &hf_ieee80211_uhr_trigger_more_tf,
38278 &hf_ieee80211_uhr_trigger_cs_required,
38279 &hf_ieee80211_uhr_trigger_ul_bw,
38280 &hf_ieee80211_uhr_trigger_gi_and_he_uhr_ltf_type,
38281 &hf_ieee80211_uhr_trigger_reserved2,
38282 &hf_ieee80211_uhr_trigger_num_he_uhr_ltf_syms_etc,
38283 &hf_ieee80211_uhr_trigger_reserved3,
38284 &hf_ieee80211_uhr_trigger_ldpc_extra_sym_seg,
38285 &hf_ieee80211_uhr_trigger_ap_tx_power,
38286 &hf_ieee80211_uhr_trigger_pre_fec_padding_factor,
38287 &hf_ieee80211_uhr_trigger_pe_disambiguity,
38288 &hf_ieee80211_uhr_trigger_ul_spatial_reuse,
38289 &hf_ieee80211_uhr_trigger_reserved4,
38290 &hf_ieee80211_uhr_trigger_he_uhr_p160,
38291 &hf_ieee80211_uhr_trigger_special_user_info_flag,
38292 &hf_ieee80211_uhr_trigger_dru_rru,
38293 &hf_ieee80211_uhr_trigger_ifcs,
38294 &hf_ieee80211_uhr_trigger_uhr_reserved,
38295 &hf_ieee80211_uhr_trigger_reserved,
38296 NULL((void*)0)
38297};
38298
38299static const val64_string pre_fec_padding_factor_vals[] = {
38300 { 0, "pre-FEC Padding Factor of 4" },
38301 { 1, "pre-FEC Padding Factor of 1" },
38302 { 2, "pre-FEC Padding Factor of 2" },
38303 { 3, "pre-FEC Padding Factor of 3" },
38304 { 0, NULL((void*)0) }
38305};
38306
38307static const true_false_string pe_disambiguity_tfs = {
38308 "PE Disambiguity",
38309 "no PE Disambiguity"
38310 };
38311
38312static int
38313add_trigger_common_info(proto_tree *tree, tvbuff_t *tvb, int offset,
38314 packet_info *pinfo _U___attribute__((unused)), uint8_t trigger_type, int *frame_len,
38315 proto_tree **common_tree)
38316{
38317 proto_item *pi = NULL((void*)0);
38318 proto_tree *common_info = NULL((void*)0);
38319 int length = 0;
38320 int start_offset = offset;
38321 uint64_t bw_etc = tvb_get_letoh64(tvb, offset);
38322 uint64_t special_user = tvb_get_letoh64(tvb, offset+8);
38323 bool_Bool is_uhr = (((bw_etc >> 54) & 0x03) != 0x03) && (((special_user >> 12) & 0x01) == 0x01);
38324 bool_Bool is_eht = (((bw_etc >> 54) & 0x03) != 0x03) && (((special_user >> 12) & 0x01) == 0x00);
38325
38326 global_he_trigger_bw = (bw_etc >> 18) & 0x03;
38327
38328 common_info = proto_tree_add_subtree(tree, tvb, offset, -1,
38329 ett_he_trigger_common_info, &pi, "Common Info");
38330 *common_tree = common_info;
38331
38332 if (is_eht) {
38333 proto_tree_add_bitmask_with_flags(common_info, tvb, offset,
38334 hf_ieee80211_eht_trigger_common_info,
38335 ett_he_trigger_base_common_info,
38336 eht_common_info_headers,
38337 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38338 } else if (is_uhr) {
38339 proto_tree_add_bitmask_with_flags(common_info, tvb, offset,
38340 hf_ieee80211_uhr_trigger_common_info,
38341 ett_he_trigger_base_common_info,
38342 uhr_common_info_headers,
38343 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38344 } else {
38345 proto_tree_add_bitmask_with_flags(common_info, tvb, offset,
38346 hf_ieee80211_he_trigger_common_info,
38347 ett_he_trigger_base_common_info,
38348 common_info_headers,
38349 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38350 }
38351 offset += 8;
38352 length += 8;
38353
38354 /*
38355 * Handle the trigger dependent common info
38356 */
38357 switch (trigger_type) {
38358 case TRIGGER_TYPE_GCR_MU_BAR: /* Actually two uint16 fields */
38359 add_gcr_mu_bar_trigger_frame_common_info(common_info, tvb, offset);
38360 offset += 4;
38361 length += 4;
38362 break;
38363 default: /* No other type has a trigger dependent common info subfield */
38364 break;
38365 }
38366 proto_item_set_len(pi, offset - start_offset);
38367
38368 *frame_len += length;
38369 return length;
38370}
38371
38372static const char * const he_trigger_ru_allocation_region_values[] = {
38373 "primary 80MHz channel for 80+80 and 160MHz",
38374 "secondary 80MHz channel for 80+80 and 160MHz",
38375};
38376
38377/*
38378 * Format the ru allocation region bit
38379 */
38380static void
38381he_trigger_ru_allocation_region_custom(char *result, uint32_t ru_alloc_val)
38382{
38383 if (global_he_trigger_bw == 3) {
38384 snprintf(result, ITEM_LABEL_LENGTH240, "%s",
38385 he_trigger_ru_allocation_region_values[ru_alloc_val & 0x01]);
38386 } else {
38387 snprintf(result, ITEM_LABEL_LENGTH240, "Not used for 20, 40 or 80MHz");
38388 }
38389}
38390
38391static void
38392he_trigger_minus_one_custom(char *result, unsigned ss_alloc_value)
38393{
38394 snprintf(result, ITEM_LABEL_LENGTH240, "%d", ss_alloc_value + 1);
38395}
38396
38397static const true_false_string he_trigger_ul_fec_coding_type_tfs = {
38398 "LDPC",
38399 "BCC"
38400};
38401
38402static const value_string preferred_ac_vals[] = {
38403 { 0, "AC_BE" },
38404 { 1, "AC_BK" },
38405 { 2, "AC_VI" },
38406 { 3, "AC_VO" },
38407 { 0, NULL((void*)0) }
38408};
38409
38410static int * const basic_trigger_dependent_user_headers[] = {
38411 &hf_ieee80211_he_trigger_mpdu_mu_spacing,
38412 &hf_ieee80211_he_trigger_tid_aggregation_limit,
38413 &hf_ieee80211_he_trigger_dependent_reserved1,
38414 &hf_ieee80211_he_trigger_preferred_ac,
38415 NULL((void*)0)
38416};
38417
38418static void
38419add_basic_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38420 int offset)
38421{
38422 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38423 hf_ieee80211_he_trigger_dep_basic_user_info,
38424 ett_he_trigger_dep_basic_user_info,
38425 basic_trigger_dependent_user_headers,
38426 ENC_NA0x00000000, BMT_NO_APPEND0x01);
38427}
38428
38429static void
38430add_brp_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38431 int offset)
38432{
38433 proto_tree_add_item(tree, hf_ieee80211_he_trigger_feedback_seg_retrans_bm,
38434 tvb, offset, 1, ENC_NA0x00000000);
38435}
38436
38437static int
38438add_mu_bar_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38439 int offset, packet_info *pinfo, int *frame_len)
38440{
38441 int start_offset = offset;
38442
38443 /*
38444 * It's a request and not DMG, I think. Also, it is only supposed to be
38445 * a compressed block ack or a multi-tid block ack request.
38446 */
38447 offset = dissect_ieee80211_block_ack_details(tvb, pinfo, tree, offset,
38448 false0, true1, false0);
38449
38450 *frame_len += offset - start_offset;
38451
38452 return offset;
38453}
38454
38455
38456static int * const nfrp_trigger_dependent_user_headers[] = {
38457 &hf_ieee80211_he_trigger_starting_aid,
38458 &hf_ieee80211_he_trigger_dependent_reserved2,
38459 &hf_ieee80211_he_trigger_feedback_type,
38460 &hf_ieee80211_he_trigger_dependent_reserved3,
38461 &hf_ieee80211_he_trigger_nfrp_target_rssi,
38462 &hf_ieee80211_he_trigger_multiplexing_flag,
38463 NULL((void*)0)
38464};
38465
38466static void
38467add_nfrp_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38468 int offset)
38469{
38470 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38471 hf_ieee80211_he_trigger_dep_nfrp_user_info,
38472 ett_he_trigger_dep_nfrp_user_info,
38473 nfrp_trigger_dependent_user_headers,
38474 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38475}
38476
38477/*
38478 * Dissect one of the ranging trigger types ...
38479 */
38480static int * const poll_rpt_hdrs[] = {
38481 &hf_ieee80211_ranging_pol_rpt_aid12_rsid12,
38482 &hf_ieee80211_ranging_pol_rpt_ru_alloc_region,
38483 &hf_ieee80211_ranging_pol_rpt_ru_alloc,
38484 &hf_ieee80211_ranging_pol_rpt_ul_fec_coding_type,
38485 &hf_ieee80211_ranging_pol_rpt_ulmcs,
38486 &hf_ieee80211_ranging_pol_rpt_uldcm,
38487 &hf_ieee80211_ranging_pol_rpt_starting_spatial_stream,
38488 &hf_ieee80211_ranging_pol_rpt_number_spatial_streams,
38489 &hf_ieee80211_ranging_pol_rpt_ul_target_rssi,
38490 &hf_ieee80211_ranging_pol_rpt_reserved,
38491 NULL((void*)0)
38492};
38493
38494static int * const sounding_hdrs[] = {
38495 &hf_ieee80211_ranging_sounding_aid12_rsid12,
38496 &hf_ieee80211_ranging_sounding_reserved1,
38497 &hf_ieee80211_ranging_sounding_i2r_rep,
38498 &hf_ieee80211_ranging_sounding_reserved2,
38499 &hf_ieee80211_ranging_sounding_starting_spatial_stream,
38500 &hf_ieee80211_ranging_sounding_number_spatial_streams,
38501 &hf_ieee80211_ranging_sounding_ul_target_rssi,
38502 &hf_ieee80211_ranging_sounding_reserved3,
38503 NULL((void*)0)
38504};
38505
38506static int * const sec_sound_hdrs[] = {
38507 &hf_ieee80211_ranging_sec_sound_aid12_rsid12,
38508 &hf_ieee80211_ranging_sec_sound_reserved1,
38509 &hf_ieee80211_ranging_sec_sound_i2r_rep,
38510 &hf_ieee80211_ranging_sec_sound_reserved2,
38511 &hf_ieee80211_ranging_sec_sound_starting_spatial_stream,
38512 &hf_ieee80211_ranging_sec_sound_number_spatial_streams,
38513 &hf_ieee80211_ranging_sec_sound_ul_target_rssi,
38514 &hf_ieee80211_ranging_sec_sound_reserved3,
38515 NULL((void*)0)
38516};
38517
38518static int
38519dissect_ieee80211_ranging_trigger_variant(proto_tree *tree, tvbuff_t *tvb,
38520 int offset, packet_info *pinfo _U___attribute__((unused)),
38521 uint8_t subtype)
38522{
38523 int saved_offset = offset;
38524
38525 switch (subtype) {
38526 case TRIGGER_SUBTYPE_POLL:
38527 case TRIGGER_SUBTYPE_REPORT:
38528 proto_tree_add_bitmask(tree, tvb, offset,
38529 hf_ieee80211_he_trigger_ranging_trigger_poll_rpt,
38530 ett_he_trigger_ranging_poll, poll_rpt_hdrs,
38531 ENC_LITTLE_ENDIAN0x80000000);
38532 offset += 5;
38533 break;
38534 case TRIGGER_SUBTYPE_SOUNDING: /* Sounding subvariant */
38535 proto_tree_add_bitmask(tree, tvb, offset,
38536 hf_ieee80211_he_trigger_ranging_trigger_sounding,
38537 ett_he_trigger_ranging_poll, sounding_hdrs,
38538 ENC_LITTLE_ENDIAN0x80000000);
38539 offset += 5;
38540 break;
38541 case TRIGGER_SUBTYPE_SECURE_SOUNDING:
38542 proto_tree_add_bitmask(tree, tvb, offset,
38543 hf_ieee80211_he_trigger_ranging_trigger_sec_sound,
38544 ett_he_trigger_ranging_poll, sec_sound_hdrs,
38545 ENC_LITTLE_ENDIAN0x80000000);
38546 offset += 5;
38547
38548 proto_tree_add_item(tree, hf_ieee80211_he_trigger_ranging_user_info_sac,
38549 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38550 offset += 2;
38551 break;
38552 case TRIGGER_SUBTYPE_PASSIVE_TB_MEAS_EXCHANGE:
38553 /* This is much the same as SOUNDING subtype */
38554 proto_tree_add_bitmask(tree, tvb, offset,
38555 hf_ieee80211_he_trigger_ranging_trigger_sounding,
38556 ett_he_trigger_ranging_poll, sounding_hdrs,
38557 ENC_LITTLE_ENDIAN0x80000000);
38558 offset += 5;
38559 break;
38560 default:
38561 /* Unknown subtypes are filtered out above us. Should not get here! */
38562 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 38562))
;
38563 break;
38564 }
38565
38566 return offset - saved_offset;
38567}
38568
38569/*
38570 * Print the target RSSI field as per the spec.
38571 * 0->90 map to -110 to -20 dBm.
38572 * 127 maps to Max ransmit power for assigned MCS
38573 * rest are reserved.
38574 */
38575static void
38576target_rssi_base_custom(char *result, uint32_t target_rssi)
38577{
38578 if (target_rssi <= 90) {
38579 snprintf(result, ITEM_LABEL_LENGTH240, "%ddBm", -110 + target_rssi);
38580 } else if (target_rssi == 127) {
38581 snprintf(result, ITEM_LABEL_LENGTH240, "Max transmit power");
38582 } else {
38583 snprintf(result, ITEM_LABEL_LENGTH240, "Reserved");
38584 }
38585}
38586
38587static int * const user_info_headers_no_2045[] = {
38588 &hf_ieee80211_he_trigger_aid12,
38589 &hf_ieee80211_he_trigger_ru_allocation_region,
38590 &hf_ieee80211_he_trigger_ru_allocation,
38591 &hf_ieee80211_he_trigger_ul_fec_coding_type,
38592 &hf_ieee80211_he_trigger_ul_mcs,
38593 &hf_ieee80211_he_trigger_ul_dcm,
38594 &hf_ieee80211_he_trigger_ru_starting_spatial_stream,
38595 &hf_ieee80211_he_trigger_ru_number_spatial_streams,
38596 &hf_ieee80211_he_trigger_ul_target_rssi,
38597 &hf_ieee80211_he_trigger_user_reserved,
38598 NULL((void*)0)
38599};
38600
38601static int * const user_info_headers_2045[] = {
38602 &hf_ieee80211_he_trigger_aid12,
38603 &hf_ieee80211_he_trigger_ru_allocation_region,
38604 &hf_ieee80211_he_trigger_ru_allocation,
38605 &hf_ieee80211_he_trigger_ul_fec_coding_type,
38606 &hf_ieee80211_he_trigger_ul_mcs,
38607 &hf_ieee80211_he_trigger_ul_dcm,
38608 &hf_ieee80211_he_trigger_ru_number_ra_ru,
38609 &hf_ieee80211_he_trigger_ru_no_more_ra_ru,
38610 &hf_ieee80211_he_trigger_ul_target_rssi,
38611 &hf_ieee80211_he_trigger_user_reserved,
38612 NULL((void*)0)
38613};
38614
38615static int * const user_info_headers_eht[] = {
38616 &hf_ieee80211_eht_trigger_aid12,
38617 &hf_ieee80211_eht_trigger_ru_allocation_region,
38618 &hf_ieee80211_eht_trigger_ru_allocation,
38619 &hf_ieee80211_eht_trigger_ul_fec_coding_type,
38620 &hf_ieee80211_eht_trigger_ul_eht_mcs,
38621 &hf_ieee80211_eht_trigger_user_info_reserved,
38622 &hf_ieee80211_eht_trigger_ru_starting_spatial_stream,
38623 &hf_ieee80211_eht_trigger_ru_number_spatial_streams,
38624 &hf_ieee80211_eht_trigger_ul_target_recv_power,
38625 &hf_ieee80211_eht_trigger_ps160,
38626 NULL((void*)0)
38627};
38628
38629static int * const special_user_info_headers_eht[] = {
38630 &hf_ieee80211_eht_trigger_aid12,
38631 &hf_ieee80211_eht_trigger_phy_version_identifier,
38632 &hf_ieee80211_eht_trigger_ul_bw_extenstion,
38633 &hf_ieee80211_eht_trigger_eht_spatial_reuse_1,
38634 &hf_ieee80211_eht_trigger_eht_spatial_reuse_2,
38635 &hf_ieee80211_eht_trigger_disregard_u_sig_1,
38636 &hf_ieee80211_eht_trigger_validate_u_sig_2,
38637 &hf_ieee80211_eht_trigger_disregard_u_sig_2_4lsb,
38638 &hf_ieee80211_eht_trigger_disregard_u_sig_2_msb,
38639 &hf_ieee80211_eht_trigger_special_reserved,
38640 NULL((void*)0)
38641};
38642
38643static int* const user_info_headers_uhr_rru[] = {
38644 &hf_ieee80211_uhr_trigger_aid12,
38645 &hf_ieee80211_uhr_trigger_ru_allocation_region,
38646 &hf_ieee80211_uhr_trigger_ru_allocation,
38647 &hf_ieee80211_uhr_trigger_ul_fec_coding_type,
38648 &hf_ieee80211_uhr_trigger_ul_uhr_mcs,
38649 &hf_ieee80211_uhr_trigger_2xldpc,
38650 &hf_ieee80211_uhr_trigger_ru_starting_spatial_stream,
38651 &hf_ieee80211_uhr_trigger_ru_number_spatial_streams,
38652 &hf_ieee80211_uhr_trigger_ul_target_recv_power,
38653 &hf_ieee80211_uhr_trigger_ps160,
38654 NULL((void*)0)
38655};
38656
38657static int* const user_info_headers_uhr_dru[] = {
38658 &hf_ieee80211_uhr_trigger_aid12,
38659 &hf_ieee80211_uhr_trigger_ru_allocation_region,
38660 &hf_ieee80211_uhr_trigger_ru_allocation,
38661 &hf_ieee80211_uhr_trigger_ul_fec_coding_type,
38662 &hf_ieee80211_uhr_trigger_ul_uhr_mcs,
38663 &hf_ieee80211_uhr_trigger_2xldpc,
38664 &hf_ieee80211_uhr_trigger_dru_distribution_bw,
38665 &hf_ieee80211_uhr_trigger_dru_reserved,
38666 &hf_ieee80211_uhr_trigger_ru_number_spatial_streams,
38667 &hf_ieee80211_uhr_trigger_ul_target_recv_power,
38668 &hf_ieee80211_uhr_trigger_ps160,
38669 NULL((void*)0)
38670};
38671
38672#define HE_USER_INFO0 0
38673#define EHT_USER_INFO1 1
38674#define SPECIAL_USER_INFO2 2
38675
38676static int
38677add_trigger_user_info(proto_tree *tree, tvbuff_t *tvb, int offset,
38678 packet_info *pinfo, uint8_t trigger_type, uint8_t subtype,
38679 uint8_t common_info_b54_55 _U___attribute__((unused)), int *frame_len, unsigned fcs_len)
38680{
38681 proto_item *pi = NULL((void*)0);
38682 proto_tree *user_info = NULL((void*)0);
38683 int length = 0, range_len = 0;
38684 int start_offset = offset;
38685 uint16_t aid12_subfield = 0;
38686 uint16_t phy_version_subfield = 0;
38687 unsigned len_remaining = 0;
38688 bool_Bool special_user_info;
38689 uint8_t user_info_b39;
38690 bool_Bool eht_variant = false0;
38691 uint8_t ddru_indication;
38692
38693 /*
38694 * If the AID12 subfield has the value 4095 it indicates the start of
38695 * the padding field.
38696 *
38697 * If the AID12 subfield has the value 2007, it indicates a special user
38698 * info field and combined with the common_info_b54_55 and B39 of the user
38699 * info field determines whether this field is an HE User Info field or an
38700 * EHT User Info field.
38701 */
38702 user_info = proto_tree_add_subtree(tree, tvb, offset, -1,
38703 ett_he_trigger_user_info, &pi, "User Info");
38704 aid12_subfield = tvb_get_letohs(tvb, offset) & 0x0FFF;
38705 phy_version_subfield = (tvb_get_letohs(tvb, offset) >> 12) & 0x01;
38706 /*9.3.1.22.2 of 802.11bn and Figure 9-90e1—DRU/RRU Indication subfield format*/
38707 ddru_indication = (tvb_get_letohs(tvb, offset - 1)) & 0x0F;
38708
38709 while (aid12_subfield != 4095) {
38710 /* Compute the special user info and EHT Variant for each one. */
38711 special_user_info = aid12_subfield == 2007;
38712 user_info_b39 = tvb_get_uint8(tvb, offset + 4) >> 7;
38713
38714 /* 9.3.1.22.4 of 802.11be and table 9-45a */
38715 if ((common_info_b54_55 == 0x01 && special_user_info && user_info_b39) ||
38716 (common_info_b54_55 == 0x00 && special_user_info))
38717 eht_variant = true1;
38718
38719 switch (trigger_type) {
38720 case TRIGGER_TYPE_BASIC:
38721 case TRIGGER_TYPE_BRP:
38722 case TRIGGER_TYPE_MU_BAR:
38723 case TRIGGER_TYPE_MU_RTS:
38724 case TRIGGER_TYPE_BSRP:
38725 case TRIGGER_TYPE_GCR_MU_BAR:
38726 case TRIGGER_TYPE_BQRP:
38727 if (!eht_variant) {
38728 if (aid12_subfield != 0 && aid12_subfield != 2045) {
38729 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38730 hf_ieee80211_he_trigger_user_info,
38731 ett_he_trigger_base_user_info,
38732 user_info_headers_no_2045,
38733 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38734 } else {
38735 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38736 hf_ieee80211_he_trigger_user_info,
38737 ett_he_trigger_base_user_info,
38738 user_info_headers_2045,
38739 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38740 }
38741 } else {
38742 /* Is it a special user info? */
38743 if (special_user_info) {
38744 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38745 hf_ieee80211_eht_trigger_special_user_info,
38746 ett_he_trigger_base_user_info,
38747 special_user_info_headers_eht,
38748 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38749 } else {
38750 if (!phy_version_subfield) {
38751 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38752 hf_ieee80211_eht_trigger_user_info,
38753 ett_he_trigger_base_user_info,
38754 user_info_headers_eht,
38755 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38756 } else {
38757 /* 9.3.1.22.6 of 802.11bn and Figure 9-90j2 and Figure 9-90j3 */
38758 if(ddru_indication != 0) {
38759 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38760 hf_ieee80211_uhr_trigger_user_info,
38761 ett_he_trigger_base_user_info,
38762 user_info_headers_uhr_rru,
38763 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38764 } else {
38765 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38766 hf_ieee80211_uhr_trigger_user_info,
38767 ett_he_trigger_base_user_info,
38768 user_info_headers_uhr_dru,
38769 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38770 }
38771 }
38772 }
38773 }
38774 offset += 5;
38775 length += 5;
38776 break;
38777 case TRIGGER_TYPE_NFRP:
38778 add_nfrp_trigger_dependent_user_info(user_info, tvb, offset);
38779 offset += 5;
38780 length += 5;
38781 break;
38782 case TRIGGER_TYPE_RANGING:
38783 range_len = dissect_ieee80211_ranging_trigger_variant(user_info, tvb,
38784 offset, pinfo, subtype);
38785 if (range_len == 0) {
38786 /* XXX - unknown subtype, report this somehow */
38787 goto out;
38788 }
38789 offset += range_len;
38790 length += range_len;
38791 break;
38792 default:
38793 /* Should never get here */
38794 break;
38795 }
38796
38797
38798 /*
38799 * Handle the trigger dependent user info
38800 */
38801 switch (trigger_type) {
38802 case TRIGGER_TYPE_BASIC:
38803 add_basic_trigger_dependent_user_info(user_info, tvb, offset);
38804 offset++;
38805 length++;
38806 break;
38807 case TRIGGER_TYPE_BRP:
38808 add_brp_trigger_dependent_user_info(user_info, tvb, offset);
38809 offset++;
38810 length++;
38811 break;
38812 case TRIGGER_TYPE_MU_BAR:
38813 /* This is variable length so we need it to update the length */
38814 offset = add_mu_bar_trigger_dependent_user_info(user_info, tvb,
38815 offset, pinfo, &length);
38816 break;
38817 default:
38818 break;
38819 }
38820
38821 len_remaining = tvb_reported_length_remaining(tvb, offset);
38822 if (len_remaining < 5)
38823 aid12_subfield = 4095;
38824 else
38825 aid12_subfield = tvb_get_letohs(tvb, offset) & 0xFFF;
38826 }
38827
38828out:
38829
38830 if (aid12_subfield == 4095 && len_remaining >= 5) {
38831 /* Show the Start of Padding field. */
38832 proto_tree_add_item(user_info,
38833 hf_ieee80211_he_trigger_user_info_padding_start,
38834 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38835 offset += 2;
38836
38837 }
38838
38839 proto_item_set_len(pi, offset - start_offset);
38840
38841 /* Now, treat all the rest of the frame as padding */
38842 if (aid12_subfield == 4095 && len_remaining >= 5) {
38843 proto_tree_add_item(tree, hf_ieee80211_he_trigger_padding, tvb, offset,
38844 tvb_reported_length_remaining(tvb, offset) - fcs_len,
38845 ENC_NA0x00000000);
38846 }
38847
38848 *frame_len += length;
38849 return length;
38850}
38851
38852static const range_string ranging_trigger_subtype_vals[] = {
38853 { 0, 0, "Poll" },
38854 { 1, 1, "Sounding" },
38855 { 2, 2, "Secured Sounding" },
38856 { 3, 3, "Report" },
38857 { 4, 4, "Passive TB Measurement Exchange" },
38858 { 5, 15, "Reserved" },
38859 { 0, 0, NULL((void*)0)},
38860};
38861
38862static int * const ranging_headers1[] = {
38863 &hf_ieee80211_ranging_trigger_subtype1,
38864 &hf_ieee80211_ranging_trigger_reserved1,
38865 &hf_ieee80211_ranging_trigger_token,
38866 NULL((void*)0)
38867};
38868
38869static int * const ranging_headers2[] = {
38870 &hf_ieee80211_ranging_trigger_subtype2,
38871 &hf_ieee80211_ranging_trigger_reserved2,
38872 &hf_ieee80211_ranging_trigger_sounding_dialog_token,
38873 NULL((void*)0)
38874};
38875
38876static int
38877dissect_ieee80211_he_eht_trigger(tvbuff_t *tvb, packet_info *pinfo,
38878 proto_tree *tree, int offset, unsigned fcs_len)
38879{
38880 proto_tree *common_tree = NULL((void*)0);
38881 uint8_t trigger_type;
38882 uint8_t phy_version;
38883 uint8_t subtype = 0;
38884 int length = 0;
38885 uint8_t common_info_b54_55;
38886 bool_Bool eht_trigger = true1;
38887
38888 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
38889
38890 offset += 6;
38891 length += 6;
38892
38893 if (tvb_captured_length_remaining(tvb, offset) < 8) {
38894 expert_add_info_format(pinfo, tree, &ei_ieee80211_missing_data,
38895 "Invalid Trigger frame, not enough data for the "
38896 "Common Info field.");
38897 return tvb_captured_length(tvb);
38898 }
38899
38900 trigger_type = tvb_get_uint8(tvb, offset) & 0x0F;
38901 common_info_b54_55 = tvb_get_uint8(tvb, offset + 6);
38902 phy_version = (tvb_get_letohs(tvb, offset + 8) >> 12) & 0x01;
38903 if ((common_info_b54_55 >> 6) == 0x03)
38904 eht_trigger = false0;
38905
38906 col_append_fstr(pinfo->cinfo, COL_INFO, " %s %s",
38907 eht_trigger ? (phy_version ? "UHR": "EHT") : "HE",
38908 val64_to_str_wmem(pinfo->pool, trigger_type, trigger_type_vals, "Reserved"));
38909
38910 if (trigger_type >= TRIGGER_TYPE_MIN_RESERVED) {
38911 /* Add an Expert Info and forget it */
38912 proto_item *item;
38913
38914 item = proto_tree_add_item(tree, hf_ieee80211_he_trigger_type, tvb, offset,
38915 1, ENC_NA0x00000000);
38916 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
38917 "Trigger type too large: %u", trigger_type);
38918 return tvb_captured_length_remaining(tvb, offset) + length;
38919 }
38920
38921 /*
38922 * Deal with the common Info and then any user info after that.
38923 */
38924 offset += add_trigger_common_info(tree, tvb, offset, pinfo,
38925 trigger_type, &length, &common_tree);
38926
38927 /*
38928 * If the trigger type is Ranging Trigger type, then deal with it separately.
38929 */
38930 if (trigger_type == TRIGGER_TYPE_RANGING) {
38931 subtype = tvb_get_uint8(tvb, offset) & 0x0f;
38932
38933 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s",
38934 rval_to_str_const(subtype, ranging_trigger_subtype_vals, "Reserved"));
38935
38936 if (subtype >= TRIGGER_SUBTYPE_MIN_RESERVED) {
38937 proto_item *item;
38938
38939 item = proto_tree_add_item(tree, hf_ieee80211_ranging_trigger_subtype1,
38940 tvb, offset, 1, ENC_NA0x00000000);
38941 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
38942 "Ranging trigger subtype too large: %u", subtype);
38943 return tvb_captured_length_remaining(tvb, offset) + length;
38944 }
38945
38946 switch (subtype) {
38947 case TRIGGER_SUBTYPE_POLL:
38948 case TRIGGER_SUBTYPE_SOUNDING:
38949 case TRIGGER_SUBTYPE_SECURE_SOUNDING:
38950 case TRIGGER_SUBTYPE_REPORT:
38951 proto_tree_add_bitmask(common_tree, tvb, offset,
38952 hf_ieee80211_he_trigger_ranging_common_info_1,
38953 ett_he_trigger_ranging, ranging_headers1,
38954 ENC_NA0x00000000);
38955 offset += 1;
38956 break;
38957 case TRIGGER_SUBTYPE_PASSIVE_TB_MEAS_EXCHANGE:
38958 proto_tree_add_bitmask(common_tree, tvb, offset,
38959 hf_ieee80211_he_trigger_ranging_common_info_2,
38960 ett_he_trigger_ranging, ranging_headers2,
38961 ENC_LITTLE_ENDIAN0x80000000);
38962 offset += 2;
38963 break;
38964 default:
38965 /* We should never get here! */
38966 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 38966))
;
38967 break;
38968 }
38969 }
38970
38971 add_trigger_user_info(tree, tvb, offset, pinfo, trigger_type, subtype,
38972 common_info_b54_55, &length, fcs_len);
38973
38974 /*
38975 * Padding should commence here ... TODO, deal with it.
38976 */
38977
38978 return length;
38979}
38980
38981static int * const tack_headers[] = {
38982 &hf_ieee80211_tack_next_twt,
38983 &hf_ieee80211_tack_flow_identifier,
38984 NULL((void*)0)
38985};
38986
38987static int
38988dissect_ieee80211_s1g_tack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
38989 proto_tree *tree, int offset, uint16_t flags)
38990{
38991 int length = 0;
38992
38993 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
38994
38995 offset += 6;
38996 length += 6;
38997
38998 proto_tree_add_item(tree, hf_ieee80211_beacon_sequence, tvb, offset, 1,
38999 ENC_NA0x00000000);
39000 offset += 1;
39001 length += 1;
39002
39003 proto_tree_add_item(tree, hf_ieee80211_pentapartial_timestamp, tvb, offset,
39004 5, ENC_LITTLE_ENDIAN0x80000000);
39005 offset += 5;
39006 length += 5;
39007
39008 if ((flags & 0xC0) == 0xC0) {
39009 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
39010 hf_ieee80211_tack_next_twt_info, ett_tack_info,
39011 tack_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39012 length += 6;
39013 }
39014
39015 return length;
39016}
39017
39018/*
39019 * Dissect a VHT or an HE NDP announcement frame. They differ past
39020 * the sounding dialog token with a bit in the SDT indicating VHT vs HE.
39021 */
39022#define NDP_ANNC_VHT_HE0x02 0x02
39023
39024static const value_string ndp_annc_variant_vals[] = {
39025 { 0, "VHT NDP Announcement" },
39026 { 1, "Ranging NDP Announcement" },
39027 { 2, "HE NDP Announcement" },
39028 { 3, "EHT NDP Announcement" },
39029 { 0, NULL((void*)0) }
39030};
39031
39032static int * const sta_info_ranging_2008[] = {
39033 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_aid11,
39034 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_ltf_offset,
39035 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_n_sts,
39036 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_rep,
39037 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_n_sts,
39038 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved1,
39039 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_disambiguation,
39040 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_rep,
39041 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved2,
39042 NULL((void*)0)
39043};
39044
39045static int * const sta_info_ranging_2043[] = {
39046 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_aid11,
39047 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_sac,
39048 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_disambiguation,
39049 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_reserved,
39050 NULL((void*)0)
39051};
39052
39053static int * const sta_info_ranging_2044[] = {
39054 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_aid11,
39055 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_partial_tsf,
39056 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_disambiguation,
39057 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_reserved,
39058 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_token,
39059 NULL((void*)0)
39060};
39061
39062static int * const sta_info_ranging_2045[] = {
39063 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_aid11,
39064 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_i2r_ndp_tx_power,
39065 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_r2i_ndp_target_rssi,
39066 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_disambiguation,
39067 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_reserved,
39068 NULL((void*)0)
39069};
39070
39071static int
39072dissect_ieee80211_ranging_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39073 proto_tree *tree, int offset, bool_Bool has_fcs)
39074{
39075 uint8_t len_fcs = 0;
39076 proto_tree *sta_list;
39077 proto_item *sta_info_item, *pi;
39078 int saved_offset = 0;
39079 int sta_index = 0;
39080
39081 if (has_fcs){
39082 len_fcs = 4;
39083 }
39084
39085 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39086 ett_ndp_ranging_annc_sta_list, &pi, "STA list");
39087 saved_offset = offset;
39088
39089 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39090 uint16_t aid11;
39091
39092 sta_info_item = proto_tree_add_subtree_format(sta_list, tvb, offset, 2,
39093 ett_ndp_ranging_annc_sta_info, NULL((void*)0), "STA %d",
39094 sta_index++);
39095
39096 aid11 = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000) & 0x7ff;
39097 if (aid11 < 2008) {
39098 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39099 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008,
39100 ett_vht_ranging_annc, sta_info_ranging_2008,
39101 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39102 } else if (aid11 == 2043) {
39103 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39104 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043,
39105 ett_vht_ranging_annc, sta_info_ranging_2043,
39106 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39107 } else if (aid11 == 2044) {
39108 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39109 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044,
39110 ett_vht_ranging_annc, sta_info_ranging_2044,
39111 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39112 } else if (aid11 == 2045) {
39113 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39114 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045,
39115 ett_vht_ranging_annc, sta_info_ranging_2045,
39116 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39117 }
39118 offset += 4;
39119 }
39120
39121 proto_item_set_len(pi, offset - saved_offset);
39122 return offset;
39123}
39124
39125static int
39126dissect_ieee80211_vht_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39127 proto_tree *tree, int offset, bool_Bool has_fcs)
39128{
39129 uint16_t sta_info;
39130 uint8_t len_fcs = 0;
39131 proto_tree *sta_list;
39132 proto_item *sta_info_item, *pi;
39133 int saved_offset = 0;
39134 int sta_index = 0;
39135
39136 if (has_fcs){
39137 len_fcs = 4;
39138 }
39139
39140 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39141 ett_ndp_vht_annc_sta_list, &pi, "STA list");
39142 saved_offset = offset;
39143
39144 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39145 sta_info_item = proto_tree_add_subtree_format(sta_list, tvb, offset, 2,
39146 ett_ndp_vht_annc_sta_info_tree, NULL((void*)0), "STA %d",
39147 sta_index++);
39148
39149 proto_tree_add_item(sta_info_item, hf_ieee80211_vht_ndp_annc_sta_info_aid12,
39150 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39151 proto_tree_add_item(sta_info_item,
39152 hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
39153 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39154
39155 sta_info = tvb_get_letohs(tvb, offset);
39156
39157 if (sta_info & 0x1000)
39158 proto_tree_add_uint(sta_info_item,
39159 hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
39160 tvb, offset, 2, sta_info);
39161 else
39162 proto_tree_add_item(sta_info_item,
39163 hf_ieee80211_vht_ndp_annc_sta_info_reserved,
39164 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39165 offset += 2;
39166 }
39167
39168 proto_item_set_len(pi, offset - saved_offset);
39169 return offset;
39170}
39171
39172static int * const he_ndp_sta_headers[] = {
39173 &hf_ieee80211_he_ndp_annc_aid11,
39174 &hf_ieee80211_he_ndp_annc_ru_start,
39175 &hf_ieee80211_he_ndp_annc_ru_end,
39176 &hf_ieee80211_he_ndp_annc_feedback_type_and_ng,
39177 &hf_ieee80211_he_ndp_annc_disambiguation,
39178 &hf_ieee80211_he_ndp_annc_codebook_size,
39179 &hf_ieee80211_he_ndp_annc_nc,
39180 NULL((void*)0)
39181};
39182
39183static int * const he_ndp_annc_2047_hdrs[] = {
39184 &hf_ieee80211_he_ndp_annc_aid11,
39185 &hf_ieee80211_he_ndp_annc_disallowed_bitmap,
39186 &hf_ieee80211_he_ndp_annc_reserved1,
39187 &hf_ieee80211_he_ndp_annc_disambiguation,
39188 &hf_ieee80211_he_ndp_annc_reserved2,
39189 NULL((void*)0)
39190};
39191
39192static int
39193dissect_ieee80211_he_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39194 proto_tree *tree, int offset, bool_Bool has_fcs)
39195{
39196 uint8_t len_fcs = 0;
39197 proto_tree *sta_list;
39198 proto_item *pi;
39199 int saved_offset;
39200 int sta_index = 0;
39201
39202 if (has_fcs){
39203 len_fcs = 4;
39204 }
39205
39206 saved_offset = offset;
39207 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39208 ett_ndp_he_annc_sta_list, &pi, "STA list");
39209
39210 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39211 proto_tree *sta_item;
39212 uint32_t sta_info = tvb_get_letohl(tvb, offset);
39213
39214 sta_item = proto_tree_add_subtree_format(sta_list, tvb, offset, 4,
39215 ett_ndp_he_annc_sta_item, NULL((void*)0), "STA %d", sta_index++);
39216 if ((sta_info & 0x000007ff) < 2047) {
39217 proto_tree_add_bitmask_with_flags(sta_item, tvb, offset,
39218 hf_ieee80211_he_ndp_annc_sta,
39219 ett_ndp_he_annc_sta_info,
39220 he_ndp_sta_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39221 } else {
39222 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
39223 hf_ieee80211_he_ndp_annc_sta,
39224 ett_ndp_he_annc_sta_info,
39225 he_ndp_annc_2047_hdrs, ENC_LITTLE_ENDIAN0x80000000,
39226 BMT_NO_APPEND0x01);
39227 }
39228
39229 offset += 4;
39230 }
39231
39232 proto_item_set_len(pi, offset - saved_offset);
39233 return offset;
39234}
39235
39236static int * const eht_ndp_annc_hdrs[] = {
39237 &hf_ieee80211_ndp_eht_annc_aid11,
39238 &hf_ieee80211_ndp_eht_annc_resolution,
39239 &hf_ieee80211_ndp_eht_annc_feedback_map,
39240 &hf_ieee80211_ndp_eht_annc_reserved1,
39241 &hf_ieee80211_ndp_eht_annc_nc_index,
39242 &hf_ieee80211_ndp_eht_annc_feedback_type,
39243 &hf_ieee80211_ndp_eht_annc_disambiguation,
39244 &hf_ieee80211_ndp_eht_annc_codebook_size,
39245 &hf_ieee80211_ndp_eht_annc_reserved2,
39246 NULL((void*)0)
39247};
39248
39249static int
39250dissect_ieee80211_eht_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39251 proto_tree *tree, int offset, bool_Bool has_fcs)
39252{
39253 uint8_t len_fcs = 0;
39254 proto_tree *sta_list;
39255 proto_item *pi;
39256 int saved_offset;
39257
39258 if (has_fcs){
39259 len_fcs = 4;
39260 }
39261
39262 saved_offset = offset;
39263 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39264 ett_ndp_eht_annc_sta_list, &pi, "STA list");
39265
39266 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39267
39268 proto_tree_add_bitmask_with_flags(sta_list, tvb, offset,
39269 hf_ieee80211_ndp_eht_annc_sta_info,
39270 ett_ndp_eht_annc_sta_info,
39271 eht_ndp_annc_hdrs, ENC_LITTLE_ENDIAN0x80000000,
39272 BMT_NO_APPEND0x01);
39273 offset += 4;
39274 }
39275
39276 proto_item_set_len(pi, offset - saved_offset);
39277 return offset;
39278}
39279
39280static int * const ndp_annc_headers[] = {
39281 &hf_ieee80211_ndp_annc_variant,
39282 &hf_ieee80211_ndp_annc_token_number,
39283 NULL((void*)0)
39284};
39285
39286static int
39287dissect_ieee80211_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39288 proto_tree *tree, int offset, bool_Bool has_fcs)
39289{
39290 proto_item *dialog;
39291 uint8_t dialog_token;
39292
39293 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
39294 offset += 6;
39295
39296 dialog_token = tvb_get_uint8(tvb, offset);
39297 col_append_fstr(pinfo->cinfo, COL_INFO, ", Sounding Dialog Token=%d",
39298 dialog_token);
39299
39300 dialog = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
39301 hf_ieee80211_ndp_annc_token, ett_ndp_annc,
39302 ndp_annc_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
39303
39304 offset++;
39305
39306 if ((dialog_token & 0x03) == 0x00) {
39307 proto_item_append_text(dialog, " VHT NDP Announcement");
39308 return dissect_ieee80211_vht_ndp_annc(tvb, pinfo, tree, offset, has_fcs);
39309 } else if ((dialog_token & 0x03) == 0x01) {
39310 proto_item_append_text(dialog, " Ranging NDP Announcement");
39311 return dissect_ieee80211_ranging_ndp_annc(tvb, pinfo, tree, offset,
39312 has_fcs);
39313 } else if ((dialog_token & 0x03) == 0x02) {
39314 proto_item_append_text(dialog, " HE NDP Announcement");
39315 return dissect_ieee80211_he_ndp_annc(tvb, pinfo, tree, offset, has_fcs);
39316 } else if ((dialog_token & 0x03) == 0x03) {
39317 proto_item_append_text(dialog, " EHT NDP Announcement");
39318 return dissect_ieee80211_eht_ndp_annc(tvb, pinfo, tree, offset, has_fcs);
39319 } else {
39320 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 39320))
;
39321 }
39322
39323 return offset;
39324}
39325
39326static void
39327set_src_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, int type)
39328{
39329 set_address_tvb(&pinfo->dl_src, type, 6, tvb, offset);
39330 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
39331 // Should we call proto_tree_add_mac48_detail here?
39332}
39333
39334static void
39335set_dst_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, int type)
39336{
39337 set_address_tvb(&pinfo->dl_dst, type, 6, tvb, offset);
39338 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
39339 // Should we call proto_tree_add_mac48_detail here?
39340}
39341
39342static uint32_t
39343crc32_802_tvb_padded(tvbuff_t *tvb, unsigned hdr_len, unsigned hdr_size, unsigned len)
39344{
39345 uint32_t c_crc;
39346
39347 c_crc = crc32_ccitt_tvb(tvb, hdr_len);
39348 c_crc = crc32_ccitt_tvb_offset_seed(tvb, hdr_size, len, ~c_crc);
39349
39350 return (c_crc);
39351}
39352
39353/*
39354 * Check if the SA at offset is that of an S1G STA, and if so, and the
39355 * IS_S1G_KEY with true.
39356 */
39357static void
39358check_s1g_setting(packet_info *pinfo, tvbuff_t *tvb, int offset)
39359{
39360 uint8_t *src_addr[6];
39361 tvb_memcpy(tvb, src_addr, offset, 6);
39362 unsigned result = GPOINTER_TO_UINT(wmem_map_lookup(sta_prop_hash, &src_addr))((guint) (gulong) (wmem_map_lookup(sta_prop_hash, &src_addr
)))
;
39363 if (result == STA_IS_S1G0x00000001) {
39364 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_S1G_KEY, GINT_TO_POINTER(true)((gpointer) (glong) (1)));
39365 }
39366}
39367
39368typedef enum {
39369 ENCAP_802_2,
39370 ENCAP_IPX,
39371 ENCAP_ETHERNET,
39372 ENCAP_EPD
39373} encap_t;
39374
39375/*
39376 * Dissect a Protocol Version 1 frame
39377 */
39378
39379static const value_string pv1_frame_type_vals[] = {
39380 { 0, "PV1 QoS Data - with one SID" },
39381 { 1, "PV1 Management" },
39382 { 2, "PV1 Control" } ,
39383 { 3, "PV1 QoS Data - no SIDs" },
39384 { 4, "PV1 Reserved" },
39385 { 5, "PV1 Reserved" },
39386 { 6, "PV1 Reserved" },
39387 { 7, "PV1 Extension (currently reserved)" },
39388 { 0, NULL((void*)0) }
39389};
39390
39391static const value_string pv1_control_frame_type_vals[] = {
39392 { 0, "STACK" },
39393 { 1, "BAT" },
39394 { 2, "Reserved" },
39395 { 3, "Reserved" },
39396 { 4, "Reserved" },
39397 { 5, "Reserved" },
39398 { 6, "Reserved" },
39399 { 7, "Reserved" },
39400 { 0, NULL((void*)0) }
39401};
39402
39403static const value_string pv1_management_frame_type_vals[] = {
39404 { 0, "Action" },
39405 { 1, "Action No Ack" },
39406 { 2, "PV1 Probe Response" },
39407 { 3, "Resource Allocation" },
39408 { 4, "Reserved" },
39409 { 5, "Reserved" },
39410 { 6, "Reserved" },
39411 { 7, "Reserved" },
39412 { 0, NULL((void*)0) }
39413};
39414
39415/* Also used for S1G PV0 */
39416static const value_string pv1_bandwidth_indic_vals[] = {
39417 { 0, "1 MHz" },
39418 { 1, "2 MHz" },
39419 { 2, "4 MHz" },
39420 { 3, "8 MHz" },
39421 { 4, "16 MHz" },
39422 { 5, "Reserved" },
39423 { 6, "Reserved" },
39424 { 7, "Reserved" },
39425 { 0, NULL((void*)0) },
39426};
39427
39428/*
39429 * Extract the three interesting flags from an SID, however, only set
39430 * the respective booleans if the flag is set in the SID.
39431 */
39432static void
39433extract_a3_a4_amsdu(uint16_t sid, bool_Bool *a3_present, bool_Bool *a4_present,
39434 bool_Bool *a_msdu)
39435{
39436 if (sid & SID_A3_PRESENT0x2000)
39437 *a3_present = true1;
39438 if (sid & SID_A4_PRESENT0x4000)
39439 *a4_present = true1;
39440 if (sid & SID_A_MSDU0x8000)
39441 *a_msdu = true1;
39442}
39443
39444static int
39445wlan_aid_to_str(const address* addr, char* buf, int buf_len)
39446{
39447 int ret;
39448
39449 ret = snprintf(buf, buf_len, "0x%04"PRIx16"x", *(uint16_t *)addr->data);
39450
39451 return ret + 1;
39452}
39453
39454static int
39455wlan_aid_str_len(const address* addr _U___attribute__((unused)))
39456{
39457 return sizeof("0x0000");
39458}
39459
39460#if 0
39461/* The length is 2 bytes, but tvb_address_to_str() etc. don't have a way of
39462 * dealing with addresses that need to mask out bits in the tvb. */
39463static int
39464wlan_aid_len(void)
39465{
39466 return 2;
39467}
39468#endif
39469
39470/*
39471 * If we know the AID, then translated it to an Ethernet addr, otherwise
39472 * just place the AID in the correct col
39473 */
39474static void
39475set_sid_addr_cols(packet_info *pinfo, uint16_t sid, bool_Bool dst)
39476{
39477 uint16_t* aid = wmem_new0(pinfo->pool, uint16_t)((uint16_t*)wmem_alloc0((pinfo->pool), sizeof(uint16_t)));
39478 *aid = sid & SID_AID_MASK0x1FFF;
39479 if (dst) {
39480 set_address(&pinfo->dl_dst, wlan_aid_address_type, (int)sizeof(*aid), aid);
39481 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
39482 } else {
39483 set_address(&pinfo->dl_src, wlan_aid_address_type, (int)sizeof(*aid), aid);
39484 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
39485 }
39486}
39487
39488static int * const sid_headers[] = {
39489 &hf_ieee80211_pv1_sid_association_id,
39490 &hf_ieee80211_pv1_sid_a3_present,
39491 &hf_ieee80211_pv1_sid_a4_present,
39492 &hf_ieee80211_pv1_sid_a_msdu,
39493 NULL((void*)0)
39494};
39495
39496static void
39497dissect_pv1_sid(proto_tree *tree, packet_info *pinfo _U___attribute__((unused)), tvbuff_t *tvb,
39498 unsigned offset)
39499{
39500 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_pv1_sid,
39501 ett_pv1_sid_field, sid_headers, ENC_LITTLE_ENDIAN0x80000000);
39502
39503}
39504
39505static void
39506dissect_pv1_sequence_control(proto_tree *tree, packet_info *pinfo _U___attribute__((unused)),
39507 tvbuff_t *tvb, unsigned offset)
39508{
39509 proto_tree *seq_ctrl_tree = NULL((void*)0);
39510
39511 seq_ctrl_tree = proto_tree_add_subtree(tree, tvb, offset, 2,
39512 ett_pv1_seq_control, NULL((void*)0),
39513 "Sequence Control");
39514 proto_tree_add_item(seq_ctrl_tree, hf_ieee80211_frag_number, tvb, offset, 2,
39515 ENC_LITTLE_ENDIAN0x80000000);
39516 proto_tree_add_item(seq_ctrl_tree, hf_ieee80211_seq_number, tvb, offset, 2,
39517 ENC_LITTLE_ENDIAN0x80000000);
39518}
39519
39520static int
39521dissect_pv1_data(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)),
39522 int offset, bool_Bool a_msdu _U___attribute__((unused)), struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39523 unsigned len_no_fcs _U___attribute__((unused)))
39524{
39525
39526 return offset;
39527}
39528
39529static int
39530dissect_pv1_mgmt_action(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39531 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39532 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39533 unsigned len _U___attribute__((unused)))
39534{
39535 proto_tree *mgmt_action_tree = NULL((void*)0);
39536
39537 mgmt_action_tree = proto_tree_add_subtree(tree, tvb, offset, 4,
39538 ett_pv1_mgmt_action, NULL((void*)0),
39539 "Action");
39540 dissect_mgt_action(tvb, pinfo, mgmt_action_tree, offset, NULL((void*)0));
39541
39542 return offset;
39543}
39544
39545static int
39546dissect_pv1_mgmt_action_no_ack(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39547 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39548 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39549 unsigned len _U___attribute__((unused)))
39550{
39551 proto_tree *mgmt_action_tree = NULL((void*)0);
39552
39553 mgmt_action_tree = proto_tree_add_subtree(tree, tvb, offset, 4,
39554 ett_pv1_mgmt_action, NULL((void*)0),
39555 "Action No Ack");
39556 dissect_mgt_action(tvb, pinfo, mgmt_action_tree, offset, NULL((void*)0));
39557
39558 return offset;
39559}
39560
39561#define PV1_NEXT_TBTT_PRESENT0x0100 0x0100
39562#define PV1_FULL_SSID_PRESENT0x0200 0x0200
39563#define PV1_ANO_PRESENT0x0400 0x0400
39564
39565static int
39566dissect_pv1_mgmt_probe_response(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39567 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39568 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39569 unsigned len _U___attribute__((unused)), uint16_t frame_control _U___attribute__((unused)))
39570{
39571
39572 return offset;
39573}
39574
39575static int
39576dissect_pv1_mgmt_resource_alloc(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39577 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39578 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39579 unsigned len _U___attribute__((unused)), uint16_t frame_control _U___attribute__((unused)))
39580{
39581
39582 return offset;
39583}
39584
39585static int
39586dissect_pv1_management(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)),
39587 int offset, struct ieee_802_11_phdr *phdr _U___attribute__((unused)), uint8_t subtype,
39588 unsigned len_no_fcs, uint16_t frame_control _U___attribute__((unused)))
39589{
39590
39591 /*
39592 * XXX - We add COMPOSE_FRAME_TYPE(fcf) (which doesn't work for PV1) as
39593 * proto_data FRAME_TYPE_KEY for PV0. Do we need to put something here?
39594 */
39595 switch (subtype) {
39596 case PV1_MANAGEMENT_ACTION0x00:
39597 offset = dissect_pv1_mgmt_action(tvb, pinfo, tree, offset, phdr, len_no_fcs);
39598 break;
39599 case PV1_MANAGEMENT_ACTION_NO_ACK0x01:
39600 offset = dissect_pv1_mgmt_action_no_ack(tvb, pinfo, tree, offset, phdr, len_no_fcs);
39601 break;
39602 case PV1_MANAGEMENT_PROBE_RESPONSE0x02:
39603 offset = dissect_pv1_mgmt_probe_response(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39604 break;
39605 case PV1_MANAGEMENT_RESOURCE_ALLOC0x03:
39606 offset = dissect_pv1_mgmt_resource_alloc(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39607 break;
39608 default:
39609 proto_tree_add_item(tree, hf_ieee80211_pv1_mgmt_reserved, tvb, offset,
39610 len_no_fcs, ENC_NA0x00000000);
39611 offset = len_no_fcs;
39612 }
39613
39614 return offset;
39615}
39616
39617static int
39618dissect_pv1_control_stack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39619 proto_tree *tree, int offset,
39620 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39621 unsigned len _U___attribute__((unused)), uint16_t frame_control _U___attribute__((unused)))
39622{
39623 proto_tree *stack_tree = NULL((void*)0);
39624
39625 stack_tree = proto_tree_add_subtree(tree, tvb, offset, 4, ett_pv1_cntl_stack,
39626 NULL((void*)0), "STACK");
39627 proto_tree_add_item(stack_tree, hf_ieee80211_pv1_cnt_stack_tetra_timest,
39628 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
39629 offset += 4;
39630
39631 return offset;
39632}
39633
39634static int
39635dissect_pv1_control_bat(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39636 proto_tree *tree, int offset,
39637 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39638 unsigned len _U___attribute__((unused)),
39639 uint16_t frame_control _U___attribute__((unused)))
39640{
39641 proto_tree *bat_tree = NULL((void*)0);
39642
39643 bat_tree = proto_tree_add_subtree(tree, tvb, offset, 4, ett_pv1_cntl_stack,
39644 NULL((void*)0), "BAT");
39645
39646 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_beacon_seq, tvb,
39647 offset, 1, ENC_NA0x00000000);
39648 offset += 1;
39649
39650 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_penta_timest, tvb,
39651 offset, 5, ENC_LITTLE_ENDIAN0x80000000);
39652 offset += 5;
39653
39654 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_next_twt_info, tvb,
39655 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
39656 offset += 6;
39657
39658 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_stating_seq_cntl, tvb,
39659 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39660 offset += 6;
39661
39662 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_bitmap, tvb, offset,
39663 4, ENC_LITTLE_ENDIAN0x80000000);
39664 offset += 4;
39665
39666 return offset;
39667}
39668
39669static int
39670dissect_pv1_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
39671 int offset, struct ieee_802_11_phdr *phdr, uint8_t subtype,
39672 unsigned len_no_fcs, uint16_t frame_control)
39673{
39674 switch (subtype) {
39675 case PV1_CONTROL_STACK0x00:
39676 offset = dissect_pv1_control_stack(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39677 break;
39678
39679 case PV1_CONTROL_BAT0x01:
39680 offset = dissect_pv1_control_bat(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39681 break;
39682
39683 default:
39684 proto_tree_add_item(tree, hf_ieee80211_pv1_cntl_reserved, tvb, offset,
39685 len_no_fcs, ENC_NA0x00000000);
39686 offset = len_no_fcs;
39687 }
39688
39689 return offset;
39690}
39691
39692static int
39693dissect_ieee80211_pv1(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
39694 struct ieee_802_11_phdr *phdr)
39695{
39696 uint16_t fcf;
39697 uint8_t type, subtype, from_ds;
39698 unsigned offset = 0;
39699 const char *fts_str = NULL((void*)0);
39700 proto_item *ti;
39701 proto_tree *hdr_tree;
39702 proto_item *fc_item = NULL((void*)0);
39703 proto_tree *fc_tree = NULL((void*)0);
39704 bool_Bool a1_is_sid = false0;
39705 bool_Bool a2_is_sid = false0;
39706 bool_Bool a3_present = false0;
39707 bool_Bool a4_present = false0;
39708 bool_Bool a_msdu = false0;
39709 unsigned len = tvb_reported_length_remaining(tvb, offset);
39710 unsigned len_no_fcs = len;
39711 proto_tree *mgt_tree;
39712
39713 fcf = tvb_get_letohs(tvb, offset);
39714
39715 type = FCF_PV1_TYPE(fcf)(((fcf) >> 2) & 0x7);
39716 subtype = FCF_PV1_SUBTYPE(fcf)(((fcf) >> 5) & 0x7);
39717
39718 fts_str = val_to_str(pinfo->pool, type, pv1_frame_type_vals, "Unrecognized frame type (%d)");
39719 col_set_str(pinfo->cinfo, COL_INFO, fts_str);
39720
39721 /* Create the protocol tree */
39722 ti = proto_tree_add_protocol_format (tree, proto_wlan, tvb, 0, -1,
39723 "IEEE 802.11 %s", fts_str);
39724 hdr_tree = proto_item_add_subtree(ti, ett_80211);
39725
39726 /* Add the FC and duration/id to the current tree */
39727 fc_item = proto_tree_add_item(hdr_tree, hf_ieee80211_fc_field, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39728
39729 fc_tree = proto_item_add_subtree(fc_item, ett_fc_tree);
39730
39731 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_proto_version, tvb, offset,
39732 2, ENC_LITTLE_ENDIAN0x80000000);
39733 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_type, tvb, offset, 2,
39734 ENC_LITTLE_ENDIAN0x80000000);
39735 /*
39736 * PDID/Subtype depends on ... whether it is a QoS data frame or Control
39737 * or Management frames
39738 */
39739 switch (type) {
39740 case PV1_QOS_DATA_1MAC0x00:
39741 case PV1_QOS_DATA_2MAC0x03:
39742 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_ptid, tvb, offset, 2,
39743 ENC_LITTLE_ENDIAN0x80000000);
39744 break;
39745
39746 case PV1_MANAGEMENT0x01:
39747 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_subtype, tvb, offset,
39748 2, ENC_LITTLE_ENDIAN0x80000000);
39749 break;
39750
39751 case PV1_CONTROL0x02:
39752 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_subtype, tvb, offset,
39753 2, ENC_LITTLE_ENDIAN0x80000000);
39754 break;
39755
39756 default: /* Assume all else just a 3-bit field */
39757 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_unk_field, tvb, offset, 2,
39758 ENC_LITTLE_ENDIAN0x80000000);
39759 break;
39760 }
39761
39762 from_ds = (fcf >> 8) & 0x01; /* It's also the slot assignment field */
39763
39764 switch (type) {
39765 case PV1_CONTROL0x02:
39766 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_bw_indication, tvb,
39767 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39768 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_dynamic_indication, tvb,
39769 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39770 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_power_mgmt, tvb,
39771 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39772 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_more_data, tvb,
39773 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39774 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_flow_control, tvb,
39775 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39776 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_next_twt_info, tvb,
39777 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39778 break;
39779 case PV1_MANAGEMENT0x01:
39780 if (subtype == PV1_MANAGEMENT_PROBE_RESPONSE0x02) {
39781 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_next_tbt, tvb,
39782 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39783 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_full_ssid, tvb,
39784 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39785 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_ano, tvb,
39786 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39787 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_bss_bw, tvb,
39788 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39789 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_security, tvb,
39790 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39791 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_1mhz_pc, tvb,
39792 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39793 } else if (subtype == PV1_MANAGEMENT_RESOURCE_ALLOC0x03) {
39794 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_slot_assign, tvb,
39795 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39796 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_more_frag, tvb,
39797 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39798 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_pwr_mgmt, tvb,
39799 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39800 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_grp_indic, tvb,
39801 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39802 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_protected, tvb,
39803 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39804 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_end_of_svc, tvb,
39805 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39806 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_relayed_frm, tvb,
39807 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39808 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_ack_policy, tvb,
39809 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39810 } else {
39811 // TODO: What about the rest
39812 }
39813 break;
39814
39815 default:
39816 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_from_ds, tvb, offset, 2,
39817 ENC_LITTLE_ENDIAN0x80000000);
39818 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_more_fragments, tvb,
39819 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39820 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_power_mgmt, tvb, offset, 2,
39821 ENC_LITTLE_ENDIAN0x80000000);
39822 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_more_data, tvb, offset, 2,
39823 ENC_LITTLE_ENDIAN0x80000000);
39824 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_protected_frame, tvb,
39825 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39826 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_end_service_per, tvb,
39827 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39828 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_relayed_frame, tvb, offset,
39829 2, ENC_LITTLE_ENDIAN0x80000000);
39830 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_ack_policy, tvb, offset, 2,
39831 ENC_LITTLE_ENDIAN0x80000000);
39832 }
39833
39834 offset += 2;
39835
39836 /*
39837 * Now, handle the MAC addresses or SIDs, which is dependent on the
39838 * Type and From DS etc.
39839 */
39840
39841 if (from_ds == 0x0) {
39842 a2_is_sid = true1;
39843 } else {
39844 a1_is_sid = true1;
39845 }
39846
39847 /* Now override where needed */
39848 switch (type) {
39849 case PV1_MANAGEMENT0x01:
39850 if (subtype == PV1_MANAGEMENT_PROBE_RESPONSE0x02) {
39851 a1_is_sid = false0;
39852 a2_is_sid = false0;
39853 }
39854 break;
39855 case PV1_CONTROL0x02:
39856 a1_is_sid = true1;
39857 break;
39858 case PV1_QOS_DATA_2MAC0x03:
39859 a1_is_sid = false0;
39860 a2_is_sid = false0;
39861 break;
39862 }
39863
39864 /*
39865 * Now handle the address fields.
39866 * If one of them is a SID, then it tells us if A3 and/or A4 is there.
39867 *
39868 * Also, add the SID (with MAC address if we know it), or the MAC
39869 * addr depending on type.
39870 *
39871 * XXX - For PV1_CONTROL frames (IEEE 802.11-2020 9.8.4), the A3 Present,
39872 * A4 Present, and A-MSDU subfields of the SID are reserved. Should
39873 * they be dissected differently, and ignored / expert info if set?
39874 *
39875 * For PV1_MANAGEMENT frames (9.8.5), A4 and A-MSDU cannot be present.
39876 * Ignore / expert info if set?
39877 */
39878 if (a1_is_sid) {
39879 uint16_t a1 = tvb_get_letohs(tvb, offset);
39880 proto_tree *dst_sid = NULL((void*)0);
39881
39882 extract_a3_a4_amsdu(a1, &a3_present, &a4_present, &a_msdu);
39883 set_sid_addr_cols(pinfo, a1, true1); /* Set the R SID address from A1 */
39884
39885 dst_sid = proto_tree_add_subtree(hdr_tree, tvb, offset, 2, ett_pv1_sid,
39886 NULL((void*)0), "Receiver SID");
39887 dissect_pv1_sid(dst_sid, pinfo, tvb, offset);
39888 offset += 2;
39889 } else {
39890 set_dst_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
39891 proto_tree_add_mac48_detail(&mac_ra, &mac_addr, ett_addr, tvb, hdr_tree, offset);
39892 offset += 6;
39893 }
39894
39895 if (a2_is_sid) {
39896 uint16_t a2 = tvb_get_letohs(tvb, offset);
39897 proto_tree *src_sid = NULL((void*)0);
39898
39899 extract_a3_a4_amsdu(a2, &a3_present, &a4_present, &a_msdu);
39900 set_sid_addr_cols(pinfo, a2, false0); /* Set the T SID address from A2 */
39901
39902 src_sid = proto_tree_add_subtree(hdr_tree, tvb, offset, 2, ett_pv1_sid,
39903 NULL((void*)0), "Transmitter SID");
39904 dissect_pv1_sid(src_sid, pinfo, tvb, offset);
39905 offset += 2;
39906 } else {
39907 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
39908 proto_tree_add_mac48_detail(&mac_ta, NULL((void*)0), ett_addr, tvb, hdr_tree, offset);
39909 offset += 6;
39910 }
39911
39912 /* Now, add the sequence control field if present */
39913 switch (type) {
39914 case PV1_QOS_DATA_1MAC0x00:
39915 case PV1_QOS_DATA_2MAC0x03:
39916 dissect_pv1_sequence_control(hdr_tree, pinfo, tvb, offset);
39917 offset += 2;
39918 break;
39919 case PV1_MANAGEMENT0x01:
39920 if (subtype != PV1_MANAGEMENT_PROBE_RESPONSE0x02) {
39921 dissect_pv1_sequence_control(hdr_tree, pinfo, tvb, offset);
39922 offset += 2;
39923 }
39924 break;
39925 }
39926 /* Now, add A3 and A4 if present */
39927 if (a3_present) {
39928 set_dst_addr_cols(pinfo, tvb, offset, wlan_address_type);
39929 proto_tree_add_mac48_detail(&mac_da, &mac_addr, ett_addr, tvb, hdr_tree, offset);
39930 offset += 6;
39931 }
39932
39933 if (a4_present) {
39934 set_src_addr_cols(pinfo, tvb, offset, wlan_address_type);
39935 proto_tree_add_mac48_detail(&mac_sa, &mac_addr, ett_addr, tvb, hdr_tree, offset);
39936 offset += 6;
39937 }
39938
39939 /* TODO: Properly handle the FCS len */
39940 if (phdr->fcs_len == 4)
39941 len_no_fcs -= 4;
39942
39943 /* Now, handle the body */
39944 switch (type) {
39945 case PV1_QOS_DATA_1MAC0x00:
39946 case PV1_QOS_DATA_2MAC0x03:
39947 offset = dissect_pv1_data(tvb, pinfo, tree, offset, a_msdu, phdr, len_no_fcs);
39948 break;
39949 case PV1_MANAGEMENT0x01:
39950 ti = proto_tree_add_item(tree, hf_ieee80211_mgt, tvb, 0, -1, ENC_NA0x00000000);
39951 mgt_tree = proto_item_add_subtree(ti, ett_80211_mgt);
39952 offset = dissect_pv1_management(tvb, pinfo, mgt_tree, offset, phdr, subtype, len_no_fcs, fcf);
39953 break;
39954 case PV1_CONTROL0x02:
39955 offset = dissect_pv1_control(tvb, pinfo, fc_tree, offset, phdr, subtype, len_no_fcs, fcf);
39956 break;
39957 default:
39958 /* Invalid so far. Insert as data and add an Expert Info */
39959 break;
39960 }
39961
39962 /* Now, handle the FCS, if present */
39963 if (phdr->fcs_len == 4) {
39964 proto_tree_add_checksum(hdr_tree, tvb, len - 4, hf_ieee80211_fcs, hf_ieee80211_fcs_status, &ei_ieee80211_fcs, pinfo, 0, ENC_LITTLE_ENDIAN0x80000000, PROTO_CHECKSUM_NO_FLAGS0x00);
39965 }
39966
39967 return offset;
39968}
39969
39970static int
39971dissect_ieee80211_pv0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
39972 uint32_t option_flags, wlan_hdr_t *whdr,
39973 struct ieee_802_11_phdr *phdr)
39974{
39975 uint16_t fcf, flags, frame_type_subtype, ctrl_fcf, ctrl_type_subtype;
39976 uint16_t cw_fcf;
39977 uint16_t seq_control;
39978 uint32_t seq_number, frag_number;
39979 bool_Bool more_frags;
39980 proto_item *ti = NULL((void*)0);
39981 proto_item *cw_item = NULL((void*)0);
39982 proto_tree *flags_item;
39983 proto_item *hidden_item;
39984 proto_tree *cw_tree = NULL((void*)0);
39985 uint16_t hdr_len, ohdr_len;
39986 uint16_t htc_len = 0;
39987 bool_Bool has_fcs;
39988 int len, reported_len, ivlen;
39989 int sta_addr_offset = 0;
39990 bool_Bool is_amsdu = 0;
39991 bool_Bool save_fragmented;
39992 uint32_t addr_type;
39993 uint8_t octet1, octet2;
39994 uint16_t etype;
39995 char out_buff[SHORT_STR256];
39996 int is_iv_bad;
39997 unsigned char iv_buff[4];
39998 int addr1_type = wlan_ra_ta_address_type;
39999 unsigned offset = 0;
40000 const char *fts_str;
40001 char flag_str[] = "opmPRMFTC";
40002 int ii;
40003 uint16_t qosoff = 0;
40004 uint16_t qos_control = 0;
40005 int meshctl_len = 0;
40006 uint8_t mesh_flags;
40007 uint16_t meshoff = 0;
40008 bool_Bool retransmitted;
40009 bool_Bool isDMG = (phdr->phy == PHDR_802_11_PHY_11AD9);
40010
40011 encap_t encap_type;
40012 proto_tree *hdr_tree = NULL((void*)0);
40013 tvbuff_t *next_tvb = NULL((void*)0);
40014
40015#define PROTECTION_ALG_WEP DOT11DECRYPT_KEY_TYPE_WEP0
40016#define PROTECTION_ALG_TKIP DOT11DECRYPT_KEY_TYPE_TKIP100
40017#define PROTECTION_ALG_CCMP DOT11DECRYPT_KEY_TYPE_CCMP101
40018#define PROTECTION_ALG_CCMP_256102 DOT11DECRYPT_KEY_TYPE_CCMP_256102
40019#define PROTECTION_ALG_GCMP103 DOT11DECRYPT_KEY_TYPE_GCMP103
40020#define PROTECTION_ALG_GCMP_256104 DOT11DECRYPT_KEY_TYPE_GCMP_256104
40021#define PROTECTION_ALG_RSNAPROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP PROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP
40022#define IS_TKIP(tvb, hdr_len) (tvb_get_uint8(tvb, hdr_len + 1) == \
40023 ((tvb_get_uint8(tvb, hdr_len) | 0x20) & 0x7f))
40024#define IS_CCMP(tvb, hdr_len) (tvb_get_uint8(tvb, hdr_len + 2) == 0)
40025 uint8_t algorithm=UINT8_MAX(255);
40026 uint32_t sec_trailer=0;
40027
40028 fcf = FETCH_FCF(0)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, 0)) >> 8) | (guint16) ((guint16
) (tvb_get_letohs(tvb, 0)) << 8)))) : tvb_get_letohs(tvb
, 0))
;
40029
40030 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
;
40031 whdr->type = frame_type_subtype;
40032 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17)
40033 ctrl_fcf = FETCH_FCF(10)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, 10)) >> 8) | (guint16) ((
guint16) (tvb_get_letohs(tvb, 10)) << 8)))) : tvb_get_letohs
(tvb, 10))
;
40034 else
40035 ctrl_fcf = 0;
40036
40037 fts_str = val_to_str_ext_const(frame_type_subtype, &frame_type_subtype_vals_ext,
40038 "Unrecognized (Reserved frame)");
40039 col_set_str(pinfo->cinfo, COL_INFO, fts_str);
40040
40041
40042# define FROM_TO_DS3 3
40043 flags = FCF_FLAGS(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))
;
40044 more_frags = HAVE_FRAGMENTS(flags)((flags) & 0x04);
40045
40046 for (ii = 0; ii < 8; ii++) {
40047 if (! (flags & 0x80 >> ii)) {
40048 flag_str[ii] = '.';
40049 }
40050 }
40051
40052 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2)) {
40053
40054 case MGT_FRAME0x00:
40055 hdr_len = MGT_FRAME_HDR_LEN24;
40056
40057 /*
40058 * IEEE 802.11-2016 section 9.2.4.1.10 "+HTC/Order subfield" says:
40059 *
40060 * The +HTC/Order subfield is 1 bit in length. It is used for two
40061 * purposes:
40062 *
40063 * -- It is set to 1 in a non-QoS Data frame transmitted by a
40064 * non-QoS STA to indicate that the frame contains an MSDU,
40065 * or fragment thereof, that is being transferred using the
40066 * StrictlyOrdered service class.
40067 *
40068 * -- It is set to 1 in a QoS Data or Management frame transmitted
40069 * with a value of HT_GF, HT_MF, or VHT for the FORMAT parameter
40070 * of the TXVECTOR to indicate that the frame contains an
40071 * HT Control field.
40072 *
40073 * Otherwise, the +HTC/Order subfield is set to 0.
40074 *
40075 * NOTE -- The +HTC/Order subfield is always set to 0 for frames
40076 * transmitted by a DMG STA.
40077 *
40078 * and 802.11ax drafts appear to say that the +HTC/Order flag, for
40079 * QoS frames, also indicates that there's an HT Control field.
40080 */
40081 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
40082 /*
40083 * For the DMG PHY, do *not* treat the +HTC field as an indication
40084 * that there's an HT Control field, because, in the ns-3 capture
40085 * in issue 11277, it's set in packets with a channel frequency
40086 * in the 60 GHz band, meaning DMG (802.11ad), but it's not
40087 * supposed to be set, and those packets lack an HT Control
40088 * field, so they would be dissected incorrectly if we treated
40089 * them as if they had an HT Control field.
40090 */
40091 if (!isDMG) {
40092 /*
40093 * Non-DMG PHY; treat this field as having an HT Control field.
40094 *
40095 * XXX - as I read the above, this shouldn't be set except for
40096 * HT, VHT, or HE PHYs; however, in the capture in issue 11351,
40097 * a frame with an HT Control field, with a radiotap header,
40098 * has no MCS, VHT, or HE field in that header, so Wireshark
40099 * has no clue that it's an HT, VHT, or HE field. assumed that
40100 * this meant that it wouldn't have an HT Control field even
40101 * if it's a QoS field with +HTC/Order set, and misdissected
40102 * it. Omnipeek, which also appeared to have no clue that it
40103 * was an HT or VHT field - it called it an 802.11b frame - *did*
40104 * dissect the HT Control field. Therefore, we must not require
40105 * an indication that a QoS frame is an HT, VHT, or HE frame
40106 * in order to dissect it a having an HT Control field.
40107 */
40108 hdr_len += 4;
40109 htc_len = 4;
40110 }
40111 }
40112 break;
40113
40114 case CONTROL_FRAME0x01:
40115 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
40116 hdr_len = 6;
40117 cw_fcf = ctrl_fcf;
40118 } else {
40119 hdr_len = 0;
40120 cw_fcf = fcf;
40121 }
40122 switch (COMPOSE_FRAME_TYPE (cw_fcf)(((((cw_fcf) & 0xC) >> 2) == 0x1 && (((cw_fcf
) & 0xF0) >> 4) == 0x6) ? (((cw_fcf & 0x0C)<<
6) + ((cw_fcf) & 0xF0) + (((cw_fcf) & 0xF00) >>
8)) : (((cw_fcf & 0x0C)<< 2)+(((cw_fcf) & 0xF0
) >> 4)))
) {
40123
40124 case CTRL_TRIGGER0x12:
40125 /*
40126 * This is a variable length frame ... we set the real length below
40127 * and since the common info is variable, just set the hdr len to
40128 * the fixed portion, 16. There can also be one or more user-info
40129 * sections, followed by padding.
40130 */
40131 hdr_len = 16;
40132 break;
40133
40134 case CTRL_TACK0x13:
40135 /*
40136 * This also is a variable length frame. Set to 22, the common portion
40137 */
40138 hdr_len = 22;
40139 break;
40140
40141 case CTRL_BEAMFORM_RPT_POLL0x14:
40142 hdr_len += 17;
40143 break;
40144
40145 case CTRL_VHT_NDP_ANNC0x15:
40146 hdr_len += 17;
40147 /* TODO: for now we only consider a single STA, add support for more */
40148 hdr_len += 2;
40149 break;
40150
40151 case CTRL_CTS0x1C:
40152 case CTRL_ACKNOWLEDGEMENT0x1D:
40153 hdr_len += 10;
40154 break;
40155
40156 case CTRL_POLL0x162:
40157 hdr_len += 18;
40158 break;
40159
40160 case CTRL_SPR0x163:
40161 case CTRL_GRANT0x164:
40162 case CTRL_GRANT_ACK0x167:
40163 hdr_len += 23;
40164 break;
40165
40166 case CTRL_DMG_CTS0x165:
40167 hdr_len += 16;
40168 break;
40169
40170 case CTRL_DMG_DTS0x166:
40171 case CTRL_SSW0x168:
40172 hdr_len += 22;
40173 break;
40174
40175 case CTRL_SSW_FEEDBACK0x169:
40176 case CTRL_SSW_ACK0x16A:
40177 hdr_len += 24;
40178 break;
40179
40180 case CTRL_RTS0x1B:
40181 case CTRL_PS_POLL0x1A:
40182 case CTRL_CFP_END0x1E:
40183 case CTRL_CFP_ENDACK0x1F:
40184 case CTRL_BLOCK_ACK_REQ0x18:
40185 case CTRL_BLOCK_ACK0x19:
40186 hdr_len += 16;
40187 break;
40188
40189 default:
40190 hdr_len += 4; /* XXX */
40191 break;
40192 }
40193 break;
40194
40195 case DATA_FRAME0x02:
40196 hdr_len = (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) ? DATA_LONG_HDR_LEN30 : DATA_SHORT_HDR_LEN24;
40197
40198 if (option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) {
40199 /*
40200 * IEEE 802.11-2016 section 9.2.4.1.10 "+HTC/Order subfield" says:
40201 *
40202 * The +HTC/Order subfield is 1 bit in length. It is used for two
40203 * purposes:
40204 *
40205 * -- It is set to 1 in a non-QoS Data frame transmitted by a
40206 * non-QoS STA to indicate that the frame contains an MSDU,
40207 * or fragment thereof, that is being transferred using the
40208 * StrictlyOrdered service class.
40209 *
40210 * -- It is set to 1 in a QoS Data or Management frame transmitted
40211 * with a value of HT_GF, HT_MF, or VHT for the FORMAT parameter
40212 * of the TXVECTOR to indicate that the frame contains an
40213 * HT Control field.
40214 *
40215 * Otherwise, the +HTC/Order subfield is set to 0.
40216 *
40217 * NOTE -- The +HTC/Order subfield is always set to 0 for frames
40218 * transmitted by a DMG STA.
40219 *
40220 * and 802.11ax drafts appear to say that the +HTC/Order flag, for
40221 * QoS frames, also indicates that there's an HT Control field.
40222 */
40223 if (DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
40224 /* QoS frame */
40225 qosoff = hdr_len;
40226 qos_control = tvb_get_letohs(tvb, qosoff);
40227 hdr_len += 2; /* Include the QoS field in the header length */
40228
40229 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
40230 /*
40231 * For the DMG PHY, do *not* treat the +HTC field as an indication
40232 * that there's an HT Control field, because, in the ns-3 capture
40233 * in issue 11277, it's set in packets with a channel frequency
40234 * in the 60 GHz band, meaning DMG (802.11ad), but it's not
40235 * supposed to be set, and those packets lack an HT Control
40236 * field, so they would be dissected incorrectly if we treated
40237 * them as if they had an HT Control field.
40238 */
40239 if (!isDMG) {
40240 /*
40241 * Non-DMG PHY; treat this field as having an HT Control field.
40242 *
40243 * XXX - as I read the above, this shouldn't be set except for
40244 * HT, VHT, or HE PHYs; however, in the capture in issue 11351,
40245 * a frame with an HT Control field, with a radiotap header,
40246 * has no MCS, VHT, or HE field in that header, so Wireshark
40247 * has no clue that it's an HT, VHT, or HE field. assumed that
40248 * this meant that it wouldn't have an HT Control field even
40249 * if it's a QoS field with +HTC/Order set, and misdissected
40250 * it. Omnipeek, which also appeared to have no clue that it
40251 * was an HT or VHT field - it called it an 802.11b frame - *did*
40252 * dissect the HT Control field. Therefore, we must not require
40253 * an indication that a QoS frame is an HT, VHT, or HE frame
40254 * in order to dissect it a having an HT Control field.
40255 */
40256 hdr_len += 4;
40257 htc_len = 4;
40258 }
40259 }
40260 }
40261 }
40262 break;
40263
40264 case EXTENSION_FRAME0x03:
40265 hdr_len = 10;
40266 break;
40267
40268 default:
40269 hdr_len = 4; /* XXX */
40270 break;
40271 }
40272
40273 /*
40274 * Some portions of this code calculate offsets relative to the end of the
40275 * header. But when the header has been padded to align the data this must
40276 * be done relative to true header size, not the padded/aligned value. To
40277 * simplify this work we stash the original header size in ohdr_len instead
40278 * of recalculating it every time we need it.
40279 */
40280 ohdr_len = hdr_len;
40281 if (phdr->datapad) {
40282 /*
40283 * Add in Atheros padding between the 802.11 header and body.
40284 *
40285 * In the Atheros mesh capture sample we have, the padding
40286 * is before the mesh header, possibly because it doesn't
40287 * recognize the mesh header.
40288 */
40289 hdr_len = WS_ROUNDUP_4(hdr_len)(((hdr_len) + ((unsigned)(4U-1U))) & (~((unsigned)(4U-1U)
)))
;
40290 }
40291
40292 if (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2) == DATA_FRAME0x02) {
40293 /*
40294 * Does it look as if we have a mesh header?
40295 *
40296 * For locally originated mesh frames, the QoS header may be added
40297 * by the hardware, and no present in wireshark captures. This
40298 * poses a problem as the QoS header indicates the presence of the
40299 * mesh control header.
40300 *
40301 * In addition, we have examples of mesh captures where the QoS
40302 * field indicates that there is no mesh control header, yet there
40303 * is one.
40304 *
40305 * Instead of QoS, we use a few heuristics to determine the presence
40306 * of the mesh control header, which is tricky because it can have a
40307 * variable length. We fall back to using the QoS field if it exists
40308 * and the packet isn't long enough (due to truncation or something
40309 * malformed that should be flagged.)
40310 *
40311 * Assume minimal length, and then correct if wrong.
40312 */
40313 if (tvb_bytes_exist(tvb, hdr_len, 1)) {
40314 meshoff = hdr_len;
40315 mesh_flags = tvb_get_uint8(tvb, meshoff);
40316 meshctl_len = find_mesh_control_length(mesh_flags);
40317 /* ... and try to read two bytes of next header */
40318 if (tvb_bytes_exist(tvb, hdr_len, meshctl_len + 2)) {
40319 uint16_t next_header = tvb_get_letohs(tvb, meshoff + meshctl_len);
40320 if (!has_mesh_control_local(fcf, mesh_flags, next_header)) {
40321 meshctl_len = 0;
40322 }
40323 } else {
40324 if (DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
40325 /* QoS frame */
40326 /*
40327 * Look at the Mesh Control subfield of the QoS field and at the
40328 * purported mesh flag fields.
40329 */
40330 if (!has_mesh_control(fcf, qos_control, mesh_flags)) {
40331 meshctl_len = 0;
40332 }
40333 } else {
40334 /* Not QoS frame, can't do the other heuristic, so assume no mesh */
40335 meshctl_len = 0;
40336 }
40337 }
40338 }
40339 hdr_len += meshctl_len;
40340 }
40341
40342 /* Create the protocol tree */
40343 ti = proto_tree_add_protocol_format(tree, proto_wlan, tvb, 0, hdr_len,
40344 "IEEE 802.11 %s", fts_str);
40345 hdr_tree = proto_item_add_subtree(ti, ett_80211);
40346
40347 /* Add the FC and duration/id to the current tree */
40348 dissect_frame_control(hdr_tree, tvb, option_flags, 0, pinfo, isDMG);
40349 dissect_durid(hdr_tree, tvb, frame_type_subtype, 2);
40350
40351 switch (phdr->fcs_len)
40352 {
40353 case 0: /* Definitely has no FCS */
40354 has_fcs = false0;
40355 break;
40356
40357 case 4: /* Definitely has an FCS */
40358 has_fcs = true1;
40359 break;
40360
40361 case -2: /* Data frames have no FCS, other frames may have an FCS */
40362 /* XXX: -2 currently used only in wiretap/netmon.c */
40363 if (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2) == DATA_FRAME0x02)
40364 has_fcs = false0;
40365 else /* Management, Control, Extension */
40366 has_fcs = wlan_check_fcs;
40367 break;
40368
40369 default: /* Don't know - use "wlan_check_fcs" */
40370 has_fcs = wlan_check_fcs;
40371 break;
40372 }
40373
40374 /*
40375 * Decode the part of the frame header that isn't the same for all
40376 * frame types.
40377 */
40378 seq_control = 0;
40379 frag_number = 0;
40380 seq_number = 0;
40381
40382 /* all frames have address 1 = RA */
40383 proto_tree_add_mac48_detail(&mac_ra, &mac_addr, ett_addr, tvb, hdr_tree, 4);
40384
40385 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
40386 {
40387
40388 case MGT_FRAME0x00:
40389 /*
40390 * All management frame types have the same header.
40391 */
40392 set_dst_addr_cols(pinfo, tvb, 4, wlan_address_type);
40393 set_src_addr_cols(pinfo, tvb, 10, wlan_address_type);
40394
40395 /* for tap */
40396 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, 16);
40397 copy_address_shallow(&whdr->src, &pinfo->dl_src);
40398 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
40399 if (addresses_data_equal(&whdr->bssid, &whdr->src)) {
40400 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, IS_AP_KEY, GINT_TO_POINTER(true)((gpointer) (glong) (1)));
40401 }
40402
40403 seq_control = tvb_get_letohs(tvb, 22);
40404 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control)((seq_control) & 0x000F);
40405 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control)(((seq_control) & 0xFFF0) >> 4);
40406
40407 col_append_fstr(pinfo->cinfo, COL_INFO,
40408 ", SN=%d", seq_number);
40409
40410 col_append_fstr(pinfo->cinfo, COL_INFO,
40411 ", FN=%d", frag_number);
40412
40413 if (tree)
40414 {
40415 proto_tree_add_mac48_detail(&mac_da, NULL((void*)0), ett_addr, tvb, hdr_tree, 4);
40416 proto_tree_add_mac48_detail(&mac_ta, NULL((void*)0), ett_addr, tvb, hdr_tree, 10);
40417 proto_tree_add_mac48_detail(&mac_sa, NULL((void*)0), ett_addr, tvb, hdr_tree, 10);
40418 check_s1g_setting(pinfo, tvb, 10);
40419 proto_tree_add_mac48_detail(&mac_bssid, NULL((void*)0), ett_addr, tvb, hdr_tree, 16);
40420
40421 /* FIXME: With mgmt frames FROM_TO_DS is always 0, perhaps compare address to bssid instead? */
40422 if ((flags & FROM_TO_DS3) == FLAG_FROM_DS0x02) { /* Receiver address */
40423 sta_addr_offset = 4;
40424 } else if ((flags & FROM_TO_DS3) == FLAG_TO_DS0x01) { /* Transmitter address */
40425 sta_addr_offset = 10;
40426 }
40427 if (sta_addr_offset > 0) {
40428 proto_tree_add_mac48_detail(&mac_staa, NULL((void*)0), ett_addr, tvb, hdr_tree, sta_addr_offset);
40429 }
40430 /* add items for wlan.addr filter */
40431 hidden_item = proto_tree_add_mac48_detail(&mac_addr_hidden, NULL((void*)0), -1, tvb, hdr_tree, 10);
40432 proto_item_set_hidden(hidden_item);
40433 hidden_item = proto_tree_add_mac48_detail(&mac_addr_hidden, NULL((void*)0), -1, tvb, hdr_tree, 16);
40434 proto_item_set_hidden(hidden_item);
40435 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40436 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40437 }
40438 break;
40439
40440 case CONTROL_FRAME0x01:
40441 {
40442 /*
40443 * Control Wrapper frames insert themselves between address 1
40444 * and address 2 in a normal control frame. Process address 1
40445 * first, then handle the rest of the frame in dissect_control.
40446 */
40447 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
40448 offset = 10; /* FC + D/ID + Address 1 + CFC + HTC */
40449 ctrl_fcf = FETCH_FCF(10)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, 10)) >> 8) | (guint16) ((
guint16) (tvb_get_letohs(tvb, 10)) << 8)))) : tvb_get_letohs
(tvb, 10))
;
40450 ctrl_type_subtype = COMPOSE_FRAME_TYPE(ctrl_fcf)(((((ctrl_fcf) & 0xC) >> 2) == 0x1 && (((ctrl_fcf
) & 0xF0) >> 4) == 0x6) ? (((ctrl_fcf & 0x0C)<<
6) + ((ctrl_fcf) & 0xF0) + (((ctrl_fcf) & 0xF00) >>
8)) : (((ctrl_fcf & 0x0C)<< 2)+(((ctrl_fcf) & 0xF0
) >> 4)))
;
40451 } else {
40452 offset = 10; /* FC + D/ID + Address 1 */
40453 ctrl_type_subtype = frame_type_subtype;
40454 }
40455 /* Added to disallow DMG STA to transfer packets of certain forbidden types. */
40456 switch (ctrl_type_subtype)
40457 {
40458 case CTRL_PS_POLL0x1A:
40459 case CTRL_CTS0x1C:
40460 case CTRL_CFP_ENDACK0x1F:
40461 if(isDMG == true1) {
40462 expert_add_info_format(pinfo, hdr_tree, &ei_ieee80211_dmg_subtype,
40463 "DMG STA shouldn't transmit control frame of type contention-free period end+ack");
40464 }
40465 break;
40466 default:
40467 break;
40468 }
40469
40470 if (ctrl_type_subtype == CTRL_PS_POLL0x1A) {
40471 addr1_type = wlan_bssid_address_type;
40472 proto_tree_add_mac48_detail(&mac_bssid, NULL((void*)0), ett_addr, tvb, hdr_tree, 4);
40473 }
40474
40475 /* Add address 1 */
40476 set_dst_addr_cols(pinfo, tvb, 4, addr1_type);
40477
40478 /*
40479 * Start shoving in other fields if needed.
40480 */
40481 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
40482 /* if (tree) */
40483 {
40484 cw_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
40485 ett_cntrl_wrapper_fc, NULL((void*)0), "Contained Frame Control");
40486 dissect_frame_control(cw_tree, tvb, 0, offset, pinfo, isDMG);
40487 dissect_ht_control(pinfo, hdr_tree, tvb, offset + 2);
40488 offset += 6;
40489 hdr_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
40490 ett_cntrl_wrapper_fc, &cw_item, "Carried Frame");
40491 if (isDMG) {
40492 expert_add_info_format(pinfo, cw_item, &ei_ieee80211_dmg_subtype,
40493 "DMG STA shouldn't transmit Control Wrapper frame");
40494 }
40495 }
40496 }
40497
40498 switch (ctrl_type_subtype)
40499 {
40500 case CTRL_PS_POLL0x1A:
40501 case CTRL_CFP_ENDACK0x1F:
40502 {
40503 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40504 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40505 offset += 6;
40506 break;
40507 }
40508
40509 case CTRL_CFP_END0x1E:
40510 {
40511 if (isDMG)
40512 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40513 else
40514 set_src_addr_cols(pinfo, tvb, offset, wlan_bssid_address_type);
40515 /* if (tree) */
40516 {
40517 if (isDMG) {
40518 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40519 } else {
40520 proto_tree_add_mac48_detail(&mac_bssid, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40521 }
40522 offset += 6;
40523 }
40524 break;
40525 }
40526
40527 case CTRL_TRIGGER0x12:
40528 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40529 /*
40530 * The len returned will be adjusted to include any padding required
40531 */
40532 hdr_len = dissect_ieee80211_he_eht_trigger(tvb, pinfo, hdr_tree, offset,
40533 phdr->fcs_len);
40534 ohdr_len = hdr_len;
40535 break;
40536
40537 case CTRL_TACK0x13:
40538 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40539 hdr_len = dissect_ieee80211_s1g_tack(tvb, pinfo, hdr_tree, offset,
40540 flags);
40541 break;
40542
40543 case CTRL_BEAMFORM_RPT_POLL0x14:
40544 {
40545 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40546 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40547 offset += 6;
40548 proto_tree_add_item(hdr_tree, hf_ieee80211_beamform_feedback_seg_retrans_bitmap, tvb, offset, 1, ENC_NA0x00000000);
40549 break;
40550 }
40551
40552 case CTRL_VHT_NDP_ANNC0x15:
40553 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40554
40555 dissect_ieee80211_ndp_annc(tvb, pinfo, hdr_tree, offset, has_fcs);
40556 break;
40557
40558 case CTRL_GRANT_ACK0x167:
40559 case CTRL_SSW0x168:
40560 case CTRL_SSW_FEEDBACK0x169:
40561 case CTRL_SSW_ACK0x16A:
40562 case CTRL_DMG_CTS0x165:
40563 case CTRL_GRANT0x164:
40564 case CTRL_SPR0x163:
40565 case CTRL_POLL0x162:
40566 case CTRL_RTS0x1B:
40567 {
40568 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40569 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40570 offset += 6;
40571 break;
40572 }
40573
40574 case CTRL_CONTROL_WRAPPER0x17:
40575 /* XXX - We shouldn't see this. Should we throw an error? */
40576 break;
40577
40578 case CTRL_BLOCK_ACK_REQ0x18:
40579 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40580
40581 dissect_ieee80211_block_ack(tvb, pinfo, hdr_tree, offset, isDMG, true1, has_fcs);
40582 break;
40583
40584 case CTRL_BLOCK_ACK0x19:
40585 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40586
40587 dissect_ieee80211_block_ack(tvb, pinfo, hdr_tree, offset, isDMG, false0, has_fcs);
40588 break;
40589 }
40590/*
40591 * 802.11ad : Used for extension types.
40592 */
40593 switch (ctrl_type_subtype) {
40594 case CTRL_POLL0x162: {
40595 proto_tree_add_item(hdr_tree, hf_ieee80211_cf_response_offset,
40596 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40597
40598 break;
40599 }
40600 case CTRL_GRANT0x164:
40601 case CTRL_GRANT_ACK0x167:
40602 case CTRL_SPR0x163: {
40603 bool_Bool isGrant;
40604 if(ctrl_type_subtype != CTRL_GRANT_ACK0x167) {
40605 offset += add_ff_dynamic_allocation(hdr_tree, tvb, pinfo, offset);
40606 } else { /* CTRL_GRANT_ACK have 5 octets that are reserved*/
40607 proto_tree_add_item(hdr_tree, hf_ieee80211_grant_ack_reserved, tvb, offset, 5, ENC_NA0x00000000);
40608 offset += 5;
40609 }
40610 isGrant = ((ctrl_type_subtype==CTRL_GRANT0x164)||(ctrl_type_subtype==CTRL_GRANT_ACK0x167));
40611 add_ff_beamforming_ctrl(hdr_tree, tvb, pinfo, offset, isGrant);
40612 /* offset += 2; */
40613 break;
40614 }
40615 case CTRL_SSW0x168: {
40616 uint32_t sector_sweep;
40617
40618 sector_sweep = tvb_get_letoh24(tvb, offset);
40619 offset += add_ff_sector_sweep(hdr_tree, tvb, pinfo, offset);
40620 /* if Sector Sweep Direction = Responder, use SW Feedback field format when not transmitted as part of an ISS */
40621 if(sector_sweep & 0x00001) {
40622 add_ff_sector_sweep_feedback_to_iss(hdr_tree, tvb, pinfo, offset);
40623 } else {
40624 add_ff_sector_sweep_feedback_from_iss(hdr_tree, tvb, pinfo, offset);
40625 }
40626 /* offset += 3; */
40627 break;
40628 }
40629 case CTRL_SSW_ACK0x16A:
40630 case CTRL_SSW_FEEDBACK0x169: {
40631 offset += add_ff_sector_sweep_feedback_to_iss(hdr_tree, tvb, pinfo, offset);
40632 offset += add_ff_BRP_request(hdr_tree, tvb, pinfo, offset);
40633 add_ff_beamformed_link(hdr_tree, tvb, pinfo, offset);
40634 /* offset += 1; */
40635 break;
40636 }
40637 case CTRL_DMG_DTS0x166: {
40638 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_sa, tvb, offset, 6, ENC_NA0x00000000);
40639 offset += 6;
40640 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_da, tvb, offset, 6, ENC_NA0x00000000);
40641 /* offset += 6; */
40642 break;
40643 }
40644 default:
40645 break;
40646 }
40647 break;
40648 }
40649
40650 case DATA_FRAME0x02:
40651 {
40652 uint32_t src_offset, dst_offset, da_offset, sa_offset, ta_offset = 10, bssid_offset;
40653 addr_type = FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8));
40654 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) && DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
40655 if (!phdr->no_a_msdus && !DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04)) {
40656 is_amsdu = QOS_AMSDU_PRESENT(qos_control)(((qos_control) & 0x0080) >> 6);
40657 }
40658 }
40659
40660 /* In order to show src/dst address we must always do the following */
40661 switch (addr_type)
40662 {
40663
40664 case DATA_ADDR_T10:
40665 da_offset = 4;
40666 sa_offset = 10;
40667 bssid_offset = 16;
40668 dst_offset = da_offset;
40669 src_offset = sa_offset;
40670 break;
40671
40672 case DATA_ADDR_T2(0x02 << 8):
40673 da_offset = 4;
40674 sa_offset = !is_amsdu ? 16 : 0;
40675 bssid_offset = 10;
40676 dst_offset = da_offset;
40677 src_offset = sa_offset;
40678 break;
40679
40680 case DATA_ADDR_T3(0x01 << 8):
40681 da_offset = !is_amsdu ? 16 : 0;
40682 sa_offset = 10;
40683 bssid_offset = 4;
40684 dst_offset = da_offset;
40685 src_offset = sa_offset;
40686 break;
40687
40688 case DATA_ADDR_T4((0x01|0x02) << 8):
40689 if (!is_amsdu) {
40690 da_offset = 16;
40691 sa_offset = 24;
40692 bssid_offset = 0;
40693 dst_offset = da_offset;
40694 src_offset = sa_offset;
40695 } else {
40696 da_offset = 0;
40697 sa_offset = 0;
40698 // The second BSSID (Addr4) is handled below.
40699 bssid_offset = 16;
40700 dst_offset = 4; // RA
40701 src_offset = 10; // TA
40702 }
40703 break;
40704
40705 default:
40706 /* All four cases are covered above. */
40707 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 40707))
;
40708 }
40709
40710 if (src_offset) {
40711 set_address_tvb(&pinfo->dl_src, wlan_address_type, 6, tvb, src_offset);
40712 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
40713 }
40714 if (dst_offset) {
40715 set_address_tvb(&pinfo->dl_dst, wlan_address_type, 6, tvb, dst_offset);
40716 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
40717 }
40718
40719 if (bssid_offset) {
40720 /* for tap */
40721 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, bssid_offset);
40722 /* for dot11decrypt */
40723 save_proto_data(tvb, pinfo, bssid_offset, 6, BSSID_KEY);
40724 }
40725
40726 if (src_offset) {
40727 copy_address_shallow(&whdr->src, &pinfo->dl_src);
40728 }
40729 if (dst_offset) {
40730 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
40731 }
40732
40733 if ((flags & FROM_TO_DS3) == FLAG_FROM_DS0x02) { /* Receiver address */
40734 sta_addr_offset = 4;
40735 } else if ((flags & FROM_TO_DS3) == FLAG_TO_DS0x01) { /* Transmitter address */
40736 sta_addr_offset = ta_offset;
40737 }
40738
40739 /* for dot11decrypt */
40740 if (sta_addr_offset > 0) {
40741 save_proto_data(tvb, pinfo, sta_addr_offset, 6, STA_KEY);
40742 }
40743
40744 seq_control = tvb_get_letohs(tvb, 22);
40745 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control)((seq_control) & 0x000F);
40746 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control)(((seq_control) & 0xFFF0) >> 4);
40747
40748 col_append_fstr(pinfo->cinfo, COL_INFO,
40749 ", SN=%d, FN=%d", seq_number, frag_number);
40750
40751 /* Now if we have a tree we start adding stuff */
40752 if (tree)
40753 {
40754 switch (addr_type)
40755 {
40756 case DATA_ADDR_T10:
40757 case DATA_ADDR_T2(0x02 << 8):
40758 case DATA_ADDR_T3(0x01 << 8):
40759 case DATA_ADDR_T4((0x01|0x02) << 8):
40760 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, ta_offset);
40761
40762 if (da_offset) {
40763 bool_Bool add_mac = (da_offset >= 16 && da_offset != sa_offset);
40764 proto_tree_add_mac48_detail(&mac_da, add_mac ? &mac_addr : NULL((void*)0), ett_addr, tvb, hdr_tree, da_offset);
40765 }
40766
40767 if (sa_offset) {
40768 bool_Bool add_mac = (sa_offset >= 16);
40769 proto_tree_add_mac48_detail(&mac_sa, add_mac ? &mac_addr : NULL((void*)0), ett_addr, tvb, hdr_tree, sa_offset);
40770 }
40771
40772 if (bssid_offset) {
40773 bool_Bool add_mac = (bssid_offset >= 16 && bssid_offset != sa_offset && bssid_offset != da_offset);
40774 proto_tree_add_mac48_detail(&mac_bssid, add_mac ? &mac_addr : NULL((void*)0), ett_addr, tvb, hdr_tree, bssid_offset);
40775 }
40776
40777 if (addr_type == DATA_ADDR_T4((0x01|0x02) << 8) && is_amsdu) {
40778 proto_tree_add_mac48_detail(&mac_bssid, NULL((void*)0), ett_addr, tvb, hdr_tree, 24);
40779 }
40780
40781 if (sta_addr_offset > 0) {
40782 proto_tree_add_mac48_detail(&mac_staa, NULL((void*)0), ett_addr, tvb, hdr_tree, sta_addr_offset);
40783 }
40784 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40785 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40786
40787 break;
40788 }
40789
40790 }
40791 break;
40792 }
40793 case EXTENSION_FRAME0x03: {
40794 switch (frame_type_subtype) {
40795 case EXTENSION_DMG_BEACON0x30: {
40796 set_dst_addr_cols(pinfo, tvb, 4, wlan_bssid_address_type);
40797 proto_tree_add_mac48_detail(&mac_bssid, &mac_addr, ett_addr, tvb, hdr_tree, 4);
40798 break;
40799 }
40800 case EXTENSION_S1G_BEACON0x31: {
40801 uint8_t *src_addr[6];
40802 tvb_memcpy(tvb, src_addr, 4, 6);
40803
40804 /* Insert this src_addr into the s1g sta hash */
40805 if (!wmem_map_lookup(sta_prop_hash, src_addr)) {
40806 wmem_map_insert(sta_prop_hash, wmem_memdup(wmem_file_scope(), src_addr, 6), GUINT_TO_POINTER(STA_IS_S1G)((gpointer) (gulong) (0x00000001)));
40807 }
40808
40809 check_s1g_setting(pinfo, tvb, 4);
40810
40811 set_src_addr_cols(pinfo, tvb, 4, wlan_address_type);
40812 proto_tree_add_mac48_detail(&mac_sa, &mac_addr, ett_addr, tvb, hdr_tree, 4);
40813 break;
40814 }
40815 }
40816 }
40817 }
40818
40819 len = tvb_captured_length_remaining(tvb, hdr_len);
40820 reported_len = tvb_reported_length_remaining(tvb, hdr_len);
40821
40822 if (has_fcs)
40823 {
40824 /*
40825 * Well, this packet should, in theory, have an FCS.
40826 * Do we have the entire packet, and does it have enough data for
40827 * the FCS?
40828 */
40829 if (reported_len < 4)
40830 {
40831 /*
40832 * The packet is claimed not to even have enough data for a 4-byte
40833 * FCS.
40834 * Pretend it doesn't have an FCS.
40835 */
40836 ;
40837 }
40838 else if (len < reported_len)
40839 {
40840 /*
40841 * The packet is claimed to have enough data for a 4-byte FCS, but
40842 * we didn't capture all of the packet.
40843 * Slice off the 4-byte FCS from the reported length, and trim the
40844 * captured length so it's no more than the reported length; that
40845 * will slice off what of the FCS, if any, is in the captured
40846 * length.
40847 */
40848 reported_len -= 4;
40849 if (len > reported_len)
40850 len = reported_len;
40851 }
40852 else
40853 {
40854 /*
40855 * We have the entire packet, and it includes a 4-byte FCS.
40856 * Slice it off, and put it into the tree.
40857 */
40858 len -= 4;
40859 reported_len -= 4;
40860 if (wlan_check_checksum)
40861 {
40862 uint32_t sent_fcs = tvb_get_letohl(tvb, hdr_len + len);
40863 uint32_t fcs;
40864
40865 if (phdr->datapad)
40866 fcs = crc32_802_tvb_padded(tvb, ohdr_len, hdr_len, len);
40867 else
40868 fcs = crc32_ccitt_tvb(tvb, hdr_len + len);
40869 if (fcs != sent_fcs) {
40870 flag_str[8] = '.';
40871 }
40872
40873 proto_tree_add_checksum(hdr_tree, tvb, hdr_len + len, hf_ieee80211_fcs, hf_ieee80211_fcs_status, &ei_ieee80211_fcs, pinfo, fcs, ENC_LITTLE_ENDIAN0x80000000, PROTO_CHECKSUM_VERIFY0x01);
40874 } else {
40875 proto_tree_add_checksum(hdr_tree, tvb, hdr_len + len, hf_ieee80211_fcs, hf_ieee80211_fcs_status, &ei_ieee80211_fcs, pinfo, 0, ENC_LITTLE_ENDIAN0x80000000, PROTO_CHECKSUM_NO_FLAGS0x00);
40876 }
40877 }
40878 }
40879 else
40880 {
40881 flag_str[8] = '\0';
40882 }
40883
40884 proto_item_append_text(ti, ", Flags: %s", flag_str);
40885 col_append_fstr(pinfo->cinfo, COL_INFO, ", Flags=%s", flag_str);
40886
40887 flags_item = proto_tree_add_string(hdr_tree, hf_ieee80211_fc_flags_str, tvb, 0, 0, flag_str);
40888 proto_item_set_generated(flags_item);
40889
40890 /*
40891 * Only management and data frames have a body, so we don't have
40892 * anything more to do for other types of frames.
40893 */
40894 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
40895 {
40896
40897 case MGT_FRAME0x00:
40898 if (htc_len == 4) {
40899 dissect_ht_control(pinfo, hdr_tree, tvb, ohdr_len - 4);
40900 }
40901 break;
40902
40903 case DATA_FRAME0x02:
40904 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) && tree && DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08))
40905 {
40906 proto_item *qos_fields, *qos_ti;
40907 proto_tree *qos_tree;
40908
40909 uint16_t qos_eosp;
40910 uint16_t qos_field_content;
40911
40912 qos_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_qos, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40913 qos_tree = proto_item_add_subtree(qos_fields, ett_qos_parameters);
40914
40915 qos_eosp = QOS_EOSP(qos_control)(((qos_control) & 0x0010) >> 4);
40916 qos_field_content = QOS_FIELD_CONTENT(qos_control)(((qos_control) & 0xFF00) >> 8);
40917
40918 proto_tree_add_item(qos_tree, hf_ieee80211_qos_tid, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40919
40920 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_priority, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40921 proto_item_set_generated(qos_ti);
40922
40923 if (FLAGS_DS_STATUS(flags)((flags) & (0x02|0x01)) == (FLAG_FROM_DS0x02|FLAG_TO_DS0x01)) {
40924 /* mesh frame */
40925 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40926 } else {
40927 /*
40928 * Table 9-3 from IEEE802.11-2016 tells us that FROM DS means from
40929 * an AP. And Table 9-6 tells us that we should treat bit 4 as
40930 * EOSP if from an AP otherwise as simply bit 4.
40931 */
40932 if (flags & FLAG_FROM_DS0x02) {
40933 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40934 } else {
40935 proto_tree_add_item(qos_tree, hf_ieee80211_qos_bit4, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40936 }
40937 }
40938
40939 proto_tree_add_item(qos_tree, hf_ieee80211_qos_ack_policy, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40940
40941 if (!DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04)) {
40942 proto_tree_add_item(qos_tree, hf_ieee80211_qos_amsdu_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40943 if (!phdr->no_a_msdus)
40944 is_amsdu = QOS_AMSDU_PRESENT(qos_control)(((qos_control) & 0x0080) >> 6);
40945 }
40946
40947 if (meshctl_len) {
40948 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ctl_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40949 if (POWER_MGT_STATUS(flags)((flags) & 0x10)) {
40950 if (tvb_get_uint8(tvb, 4) & 0x1)
40951 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ps_multicast, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40952 else
40953 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ps_unicast, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40954 } else {
40955 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ps_rsvd, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40956 }
40957 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_rspi, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40958 } else if (flags & FLAG_FROM_DS0x02) {
40959 if (DATA_FRAME_IS_CF_POLL(frame_type_subtype)((frame_type_subtype) & 0x02)) {
40960 /* txop limit */
40961 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_limit, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40962 if (qos_field_content == 0) {
40963 proto_item_append_text(qos_ti, " (transmit one frame immediately)");
40964 }
40965 } else {
40966 /* qap ps buffer state */
40967 proto_item *qos_ps_buf_state_fields;
40968 proto_tree *qos_ps_buf_state_tree;
40969
40970 qos_ps_buf_state_fields = proto_tree_add_item(qos_tree, hf_ieee80211_qos_ps_buf_state, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40971 qos_ps_buf_state_tree = proto_item_add_subtree(qos_ps_buf_state_fields, ett_qos_ps_buf_state);
40972
40973 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_buf_state_indicated, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40974
40975 if (QOS_PS_BUF_STATE_INDICATED(qos_field_content)(((qos_field_content) & 0x02) >> 1)) {
40976 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_highest_pri_buf_ac, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40977 qos_ti = proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40978 switch (QOS_PS_QAP_BUF_LOAD(qos_field_content)(((qos_field_content) & 0xF0) >> 4)) {
40979
40980 case 0:
40981 proto_item_append_text(qos_ti, " (no buffered traffic)");
40982 break;
40983
40984 default:
40985 proto_item_append_text(qos_ti, " (%d octets)", QOS_PS_QAP_BUF_LOAD(qos_field_content)(((qos_field_content) & 0xF0) >> 4)*4096);
40986 break;
40987
40988 case 15:
40989 proto_item_append_text(qos_ti, " (greater than 57344 octets)");
40990 break;
40991 }
40992
40993 }
40994 }
40995 } else {
40996 /*
40997 * Only QoS Data, Qos CF-ACK and NULL frames To-DS have a Queue Size
40998 * field.
40999 */
41000 uint16_t scaling_factor = QOS_SCALING_FACTOR(qos_field_content)(((qos_field_content) & 0xD0) >> 6);
41001 uint16_t unscaled_value = QOS_UNSCALED_VALUE(qos_field_content)((qos_field_content) & 0x3F);
41002
41003 if ((DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04) ||
41004 (frame_type_subtype & 0x7) == 0 ||
41005 DATA_FRAME_IS_CF_ACK(frame_type_subtype)((frame_type_subtype) & 0x01))) {
41006 if (qos_eosp) {
41007 /* queue size */
41008 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_queue_size, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41009 switch (qos_field_content) {
41010 case 0:
41011 proto_item_append_text(qos_ti, " (no buffered traffic in the queue)");
41012 break;
41013
41014 case 254:
41015 proto_item_append_text(qos_ti, " (more than 64768 octets)");
41016 break;
41017
41018 case 255:
41019 proto_item_append_text(qos_ti, " (unspecified or unknown)");
41020 break;
41021
41022 default:
41023 switch (scaling_factor) {
41024 case 0:
41025 proto_item_append_text(qos_ti, " (%u bytes)", 16 * unscaled_value);
41026 break;
41027 case 1:
41028 proto_item_append_text(qos_ti, " (%u bytes)", (1024 + (256 * unscaled_value)));
41029 break;
41030 case 2:
41031 proto_item_append_text(qos_ti, " (%u bytes)", (17408 + (2048 * unscaled_value)));
41032 break;
41033 case 3:
41034 if (unscaled_value < 62)
41035 proto_item_append_text(qos_ti, " (%u bytes)", (148480 + (32768 * unscaled_value)));
41036 else if (unscaled_value == 62)
41037 proto_item_append_text(qos_ti, " (> 2147328)");
41038 else if (unscaled_value == 63)
41039 proto_item_append_text(qos_ti, " (unspecified or unknown)");
41040 break;
41041 default:
41042 proto_item_append_text(qos_ti, " (unspecified or unknown)");
41043 break;
41044 }
41045 break;
41046 }
41047 } else {
41048 /* txop duration requested */
41049 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_dur_req,
41050 tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41051 if (qos_field_content == 0) {
41052 proto_item_append_text(qos_ti, " (no TXOP requested)");
41053 }
41054 }
41055 }
41056 }
41057
41058 /* Do we have +HTC? */
41059 if (htc_len == 4) {
41060 dissect_ht_control(pinfo, hdr_tree, tvb, ohdr_len - 4);
41061 }
41062
41063 } /* end of qos control field */
41064
41065 if (meshctl_len != 0) {
41066 proto_item *msh_fields;
41067 proto_tree *msh_tree;
41068
41069 msh_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_mesh_control_field, tvb, meshoff, meshctl_len, ENC_NA0x00000000);
41070 msh_tree = proto_item_add_subtree(msh_fields, ett_msh_control);
41071 add_ff_mesh_control(msh_tree, tvb, pinfo, meshoff);
41072 }
41073
41074 /*
41075 * No-data frames don't have a body.
41076 */
41077 if (DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04))
41078 goto end_of_wlan;
41079
41080 if (!wlan_subdissector) {
41081 unsigned fnum = 0;
41082
41083 /* key: bssid:src
41084 * data: last seq_control seen and frame number
41085 */
41086 retransmitted = false0;
41087 if (!pinfo->fd->visited) {
41088 retransmit_key key;
41089 retransmit_key *result;
41090
41091 if (whdr->bssid.type == wlan_bssid_address_type) {
41092 memcpy(key.bssid, whdr->bssid.data, 6);
41093 } else {
41094 memset(key.bssid, 0, 6);
41095 }
41096 if (whdr->src.type != AT_NONE) {
41097 memcpy(key.src, whdr->src.data, 6);
41098 } else {
41099 memset(key.src, 0, 6);
41100 }
41101 key.seq_control = 0;
41102 result = (retransmit_key *)g_hash_table_lookup(fc_analyse_retransmit_table, &key);
41103 if (result && (result->seq_control == seq_control)) {
41104 /* keep a pointer to the first seen frame, could be done with proto data? */
41105 fnum = result->fnum;
41106 g_hash_table_insert(fc_first_frame_table, GINT_TO_POINTER(pinfo->num)((gpointer) (glong) (pinfo->num)),
41107 GINT_TO_POINTER(fnum)((gpointer) (glong) (fnum)));
41108 retransmitted = true1;
41109 } else {
41110 /* first time or new seq*/
41111 if (!result) {
41112 result = wmem_new(wmem_file_scope(), retransmit_key)((retransmit_key*)wmem_alloc((wmem_file_scope()), sizeof(retransmit_key
)))
;
41113 *result = key;
41114 g_hash_table_insert(fc_analyse_retransmit_table, result, result);
41115 }
41116 result->seq_control = seq_control;
41117 result->fnum = pinfo->num;
41118 }
41119 }
41120 else if ((fnum = GPOINTER_TO_UINT(g_hash_table_lookup(fc_first_frame_table, GINT_TO_POINTER(pinfo->num)))((guint) (gulong) (g_hash_table_lookup(fc_first_frame_table, (
(gpointer) (glong) (pinfo->num)))))
)) {
41121 retransmitted = true1;
41122 }
41123
41124 if (retransmitted) {
41125 col_append_str(pinfo->cinfo, COL_INFO, " [retransmitted]");
41126 if (tree) {
41127 proto_item *item;
41128
41129 item=proto_tree_add_none_format(hdr_tree, hf_ieee80211_fc_analysis_retransmission, tvb, 0, 0,
41130 "Retransmitted frame");
41131 proto_item_set_generated(item);
41132 item=proto_tree_add_uint(hdr_tree, hf_ieee80211_fc_analysis_retransmission_frame, tvb, 0, 0, fnum);
41133 proto_item_set_generated(item);
41134 }
41135 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len, len, reported_len);
41136 call_data_dissector(next_tvb, pinfo, tree);
41137 goto end_of_wlan;
41138 }
41139 }
41140 break;
41141
41142 case CONTROL_FRAME0x01:
41143 goto end_of_wlan;
41144
41145 case EXTENSION_FRAME0x03:
41146 break;
41147
41148 default:
41149 goto end_of_wlan;
41150 }
41151
41152 if (IS_PROTECTED(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x40)
41153 && (frame_type_subtype != EXTENSION_S1G_BEACON0x31)
41154 && !phdr->decrypted
41155 && (wlan_ignore_prot != WLAN_IGNORE_PROT_WO_IV1)) {
41156 /*
41157 * It's a WEP or WPA encrypted frame, and it hasn't already been
41158 * decrypted; dissect the protections parameters and decrypt the data,
41159 * if we have a matching key. Otherwise display it as data.
41160 */
41161 bool_Bool can_decrypt = false0;
41162 proto_tree *wep_tree = NULL((void*)0);
41163 uint32_t iv;
41164 uint8_t wep_key, keybyte;
41165 DOT11DECRYPT_KEY_ITEM used_key = { 0 };
41166
41167 if (len == reported_len) {
41168 next_tvb = try_decrypt(tvb, pinfo, hdr_len, reported_len,
41169 &algorithm, &sec_trailer, &used_key);
41170 }
41171
41172 keybyte = tvb_get_uint8(tvb, hdr_len + 3);
41173 wep_key = KEY_OCTET_WEP_KEY(keybyte)(((keybyte) & 0xC0) >> 6);
41174 if ((keybyte & KEY_EXTIV0x20) && (len >= EXTIV_LEN8)) {
41175 /* Extended IV; this frame is likely encrypted with TKIP or CCMP */
41176 if (tree) {
41177 if (algorithm==PROTECTION_ALG_TKIP)
41178 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41179 ett_wep_parameters, NULL((void*)0), "TKIP parameters");
41180 else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102)
41181 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41182 ett_wep_parameters, NULL((void*)0), "CCMP parameters");
41183 else if (algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104)
41184 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41185 ett_wep_parameters, NULL((void*)0), "GCMP parameters");
41186 else {
41187 if (IS_TKIP(tvb, hdr_len)) {
41188 algorithm=PROTECTION_ALG_TKIP;
41189 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41190 ett_wep_parameters, NULL((void*)0), "TKIP parameters");
41191 } else if (IS_CCMP(tvb, hdr_len)) {
41192 algorithm=PROTECTION_ALG_CCMP;
41193 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41194 ett_wep_parameters, NULL((void*)0), "CCMP parameters");
41195 } else
41196 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41197 ett_wep_parameters, NULL((void*)0), "TKIP/CCMP parameters");
41198 }
41199 proto_item_set_len(ti, hdr_len + 8);
41200
41201 if (algorithm==PROTECTION_ALG_TKIP) {
41202 snprintf(out_buff, SHORT_STR256, "0x%08X%02X%02X",
41203 tvb_get_letohl(tvb, hdr_len + 4),
41204 tvb_get_uint8(tvb, hdr_len),
41205 tvb_get_uint8(tvb, hdr_len + 2));
41206 proto_tree_add_string(wep_tree, hf_ieee80211_tkip_extiv, tvb, hdr_len,
41207 EXTIV_LEN8, out_buff);
41208 } else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102 ||
41209 algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104) {
41210 snprintf(out_buff, SHORT_STR256, "0x%08X%02X%02X",
41211 tvb_get_letohl(tvb, hdr_len + 4),
41212 tvb_get_uint8(tvb, hdr_len + 1),
41213 tvb_get_uint8(tvb, hdr_len));
41214 proto_tree_add_string(wep_tree, hf_ieee80211_ccmp_extiv, tvb, hdr_len,
41215 EXTIV_LEN8, out_buff);
41216 }
41217
41218 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, wep_key);
41219 }
41220
41221 /* Subtract out the length of the IV. */
41222 len -= EXTIV_LEN8;
41223 reported_len -= EXTIV_LEN8;
41224 ivlen = EXTIV_LEN8;
41225 /* It is unknown whether this is TKIP or CCMP, so let's not even try to
41226 * parse TKIP Michael MIC+ICV or CCMP MIC. */
41227
41228 const uint8_t *key = NULL((void*)0);
41229 int key_len;
41230
41231 /* checking for the trailer */
41232 if (next_tvb!=NULL((void*)0)) {
41233 if (reported_len < (int) sec_trailer) {
41234 /* There is no space for a trailer, ignore it and don't decrypt */
41235 ;
41236 } else if (len < reported_len) {
41237 /* There is space for a trailer, but we haven't capture all the */
41238 /* packet. Slice off the trailer, but don't try to decrypt */
41239 reported_len -= sec_trailer;
41240 if (len > reported_len)
41241 len = reported_len;
41242 } else {
41243 /* Ok, we have a trailer and the whole packet. Decrypt it! */
41244 /* TODO: At the moment we won't add the trailer to the tree, */
41245 /* so don't remove the trailer from the packet */
41246 len -= sec_trailer;
41247 reported_len -= sec_trailer;
41248 can_decrypt = true1;
41249
41250 /* Add Key information to packet */
41251 if (!tvb_get_bits8(tvb, 39, 1)) { /* RA is unicast, encrypted with pairwise key */
41252 key_len = Dot11DecryptGetTK(&used_key, &key);
41253 bytes_to_hexstr(out_buff, key, key_len);
41254 out_buff[2 * key_len] = '\0';
41255 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_tk, tvb, 0, 0, out_buff);
41256 proto_item_set_generated(ti);
41257
41258 /* Also add the PMK used to decrypt the packet. (PMK==PSK) */
41259 if (used_key.KeyData.Wpa.PskLen > 0) {
41260
41261 bytes_to_hexstr(out_buff, used_key.KeyData.Wpa.Psk, used_key.KeyData.Wpa.PskLen);
41262 out_buff[2*used_key.KeyData.Wpa.PskLen] = '\0';
41263 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_pmk, tvb, 0, 0, out_buff);
41264 proto_item_set_generated(ti);
41265 }
41266
41267 } else { /* Encrypted with Group Key */
41268 key_len = Dot11DecryptGetGTK(&used_key, &key);
41269 bytes_to_hexstr(out_buff, key, key_len);
41270 out_buff[2 * key_len] = '\0';
41271 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_gtk, tvb, 0, 0, out_buff);
41272 proto_item_set_generated(ti);
41273 }
41274 }
41275 }
41276 } else {
41277 /* No Ext. IV - WEP packet */
41278 /*
41279 * XXX - pass the IV and key to "try_decrypt_wep()", and have it pass
41280 * them to "wep_decrypt()", rather than having "wep_decrypt()" extract
41281 * them itself.
41282 *
41283 * Also, just pass the data *following* the WEP parameters as the
41284 * buffer to decrypt.
41285 */
41286 iv = tvb_get_ntoh24(tvb, hdr_len);
41287 if (tree) {
41288 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 4,
41289 ett_wep_parameters, NULL((void*)0), "WEP parameters");
41290
41291 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_iv, tvb, hdr_len, 3, iv);
41292 tvb_memcpy(tvb, iv_buff, hdr_len, 3);
41293 is_iv_bad = weak_iv(iv_buff);
41294 if (is_iv_bad != -1) {
41295 proto_tree_add_boolean_format (wep_tree, hf_ieee80211_wep_iv_weak,
41296 tvb, 0, 0, true1,
41297 "Weak IV for key byte %d",
41298 is_iv_bad);
41299 }
41300 }
41301 if (tree)
41302 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, wep_key);
41303
41304 /* Subtract out the length of the IV. */
41305 len -= 4;
41306 reported_len -= 4;
41307 ivlen = 4;
41308
41309 /* Even if the decryption was not successful, set the algorithm */
41310 algorithm=PROTECTION_ALG_WEP;
41311
41312 /*
41313 * Well, this packet should, in theory, have an ICV.
41314 * Do we have the entire packet, and does it have enough data for
41315 * the ICV?
41316 */
41317 if (reported_len < 4) {
41318 /*
41319 * The packet is claimed not to even have enough data for a
41320 * 4-byte ICV.
41321 * Pretend it doesn't have an ICV.
41322 */
41323 ;
41324 } else if (len < reported_len) {
41325 /*
41326 * The packet is claimed to have enough data for a 4-byte ICV,
41327 * but we didn't capture all of the packet.
41328 * Slice off the 4-byte ICV from the reported length, and trim
41329 * the captured length so it's no more than the reported length;
41330 * that will slice off what of the ICV, if any, is in the
41331 * captured length.
41332 */
41333 reported_len -= 4;
41334 if (len > reported_len)
41335 len = reported_len;
41336 } else {
41337 /*
41338 * We have the entire packet, and it includes a 4-byte ICV.
41339 * Slice it off, and put it into the tree.
41340 *
41341 * We only support decrypting if we have the ICV.
41342 *
41343 * XXX - the ICV is encrypted; we're putting the encrypted
41344 * value, not the decrypted value, into the tree.
41345 */
41346 len -= 4;
41347 reported_len -= 4;
41348 can_decrypt = true1;
41349 }
41350 }
41351
41352 if (algorithm == PROTECTION_ALG_WEP) {
41353 (void) g_strlcpy(wlan_stats.protection, "WEP", MAX_PROTECT_LEN10);
41354 } else if (algorithm == PROTECTION_ALG_TKIP) {
41355 (void) g_strlcpy(wlan_stats.protection, "TKIP", MAX_PROTECT_LEN10);
41356 } else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102) {
41357 (void) g_strlcpy(wlan_stats.protection, "CCMP", MAX_PROTECT_LEN10);
41358 } else if (algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104) {
41359 (void) g_strlcpy(wlan_stats.protection, "GCMP", MAX_PROTECT_LEN10);
41360 } else {
41361 (void) g_strlcpy(wlan_stats.protection, "Unknown", MAX_PROTECT_LEN10);
41362 }
41363
41364 /* protection header */
41365 if (!can_decrypt || (next_tvb == NULL((void*)0))) {
41366 /*
41367 * WEP decode impossible or failed, treat payload as raw data
41368 * and don't attempt fragment reassembly or further dissection.
41369 */
41370 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len + ivlen, len, reported_len);
41371
41372 if (tree) {
41373 if (algorithm == PROTECTION_ALG_WEP) {
41374 if (can_decrypt)
41375 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
41376 hdr_len + ivlen + len, 4,
41377 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
41378 "0x%08x (not verified)",
41379 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
41380 } else if (algorithm == PROTECTION_ALG_CCMP) {
41381 } else if (algorithm == PROTECTION_ALG_TKIP) {
41382 }
41383 }
41384
41385 if ((!(option_flags & IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002)) && (wlan_ignore_prot == WLAN_IGNORE_PROT_NO0)) {
41386 /* Some wireless drivers (such as Centrino) WEP payload already decrypted */
41387 call_data_dissector(next_tvb, pinfo, tree);
41388 goto end_of_wlan;
41389 }
41390 } else {
41391 if (algorithm == PROTECTION_ALG_WEP) {
41392 if (tree)
41393 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
41394 hdr_len + ivlen + len, 4,
41395 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
41396 "0x%08x (correct)",
41397 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
41398
41399 add_new_data_source(pinfo, next_tvb, "Decrypted WEP data");
41400 } else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102) {
41401 add_new_data_source(pinfo, next_tvb, "Decrypted CCMP data");
41402 } else if (algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104) {
41403 add_new_data_source(pinfo, next_tvb, "Decrypted GCMP data");
41404 } else if (algorithm==PROTECTION_ALG_TKIP) {
41405 add_new_data_source(pinfo, next_tvb, "Decrypted TKIP data");
41406 }
41407#undef IS_TKIP
41408#undef IS_CCMP
41409#undef PROTECTION_ALG_CCMP
41410#undef PROTECTION_ALG_TKIP
41411#undef PROTECTION_ALG_WEP
41412 }
41413
41414 /*
41415 * WEP decryption successful!
41416 *
41417 * Use the tvbuff we got back from the decryption; the data starts at
41418 * the beginning. The lengths are already correct for the decoded WEP
41419 * payload.
41420 */
41421 hdr_len = 0;
41422
41423 } else {
41424 /*
41425 * Not a WEP-encrypted frame; just use the data from the tvbuff
41426 * handed to us.
41427 *
41428 * The payload starts at "hdr_len" (i.e., just past the 802.11
41429 * MAC header), the length of data in the tvbuff following the
41430 * 802.11 header is "len", and the length of data in the packet
41431 * following the 802.11 header is "reported_len".
41432 */
41433 next_tvb = tvb;
41434 }
41435
41436 /*
41437 * Do defragmentation if "wlan_defragment" is true, and we have more
41438 * fragments or this isn't the first fragment.
41439 *
41440 * We have to do some special handling to catch frames that
41441 * have the "More Fragments" indicator not set but that
41442 * don't show up as reassembled and don't have any other
41443 * fragments present. Some networking interfaces appear
41444 * to do reassembly even when you're capturing raw packets
41445 * *and* show the reassembled packet without the "More
41446 * Fragments" indicator set *but* with a non-zero fragment
41447 * number.
41448 *
41449 * "fragment_add_seq_802_11()" handles that; we want to call it
41450 * even if we have a short frame, so that it does those checks - if
41451 * the frame is short, it doesn't do reassembly on it.
41452 *
41453 * (This could get some false positives if we really *did* only
41454 * capture the last fragment of a fragmented packet, but that's
41455 * life.)
41456 */
41457 save_fragmented = pinfo->fragmented;
41458 if (wlan_defragment && (more_frags || (frag_number != 0))) {
41459 fragment_head *fd_head;
41460
41461 /*
41462 * If we've already seen this frame, look it up in the
41463 * table of reassembled packets, otherwise add it to
41464 * whatever reassembly is in progress, if any, and see
41465 * if it's done.
41466 */
41467 if (reported_len < 0)
41468 THROW(ReportedBoundsError)except_throw(1, (3), ((void*)0));
41469 fd_head = fragment_add_seq_802_11(&wlan_reassembly_table,
41470 next_tvb, hdr_len, pinfo, seq_number, NULL((void*)0),
41471 frag_number,
41472 reported_len,
41473 more_frags);
41474 next_tvb = process_reassembled_data(tvb, hdr_len, pinfo,
41475 "Reassembled 802.11", fd_head,
41476 &frag_items, NULL((void*)0), hdr_tree);
41477 } else {
41478 /*
41479 * If this is the first fragment, dissect its contents, otherwise
41480 * just show it as a fragment.
41481 */
41482 if (frag_number != 0) {
41483 /* Not the first fragment - don't dissect it. */
41484 next_tvb = NULL((void*)0);
41485 } else {
41486 /* First fragment, or not fragmented. Dissect what we have here. */
41487
41488 /* Get a tvbuff for the payload. */
41489 next_tvb = tvb_new_subset_length_caplen(next_tvb, hdr_len, len, reported_len);
41490
41491 /*
41492 * If this is the first fragment, but not the only fragment,
41493 * tell the next protocol that.
41494 */
41495 if (more_frags)
41496 pinfo->fragmented = true1;
41497 else
41498 pinfo->fragmented = false0;
41499 }
41500 }
41501
41502 if (next_tvb == NULL((void*)0)) {
41503 /* Just show this as an incomplete fragment. */
41504 col_set_str(pinfo->cinfo, COL_INFO, "Fragmented IEEE 802.11 frame");
41505 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len, len, reported_len);
41506 call_data_dissector(next_tvb, pinfo, tree);
41507 pinfo->fragmented = save_fragmented;
41508 goto end_of_wlan;
41509 }
41510
41511 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
41512 {
41513
41514 case MGT_FRAME0x00:
41515 dissect_ieee80211_mgt(fcf, next_tvb, pinfo, tree);
41516 try_scan_ft_assoc_keys(pinfo, whdr);
41517 break;
41518
41519 case DATA_FRAME0x02:
41520 if (is_amsdu && (tvb_reported_length_remaining(next_tvb, 0) > 4)) {
41521 proto_item *parent_item;
41522 proto_tree *mpdu_tree;
41523 uint32_t msdu_offset = 0;
41524 unsigned i = 1;
41525
41526 parent_item = proto_tree_add_protocol_format(tree, proto_aggregate, next_tvb, 0,
41527 tvb_reported_length_remaining(next_tvb, 0), "IEEE 802.11 Aggregate MSDU");
41528 mpdu_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_parent_tree);
41529
41530 do {
41531 tvbuff_t *msdu_tvb;
41532 uint16_t msdu_length;
41533 proto_tree *subframe_tree;
41534 bool_Bool last_subframe = false0;
41535 uint16_t subframe_length;
41536
41537 /*
41538 * IEEE Std 802.11-2012 says, in section 8.3.2.2 "A-MSDU format":
41539 *
41540 * The A-MSDU subframe header contains three fields: DA, SA, and
41541 * Length. The order of these fields and the bits within these
41542 * fields are the same as the IEEE 802.3 frame format.
41543 *
41544 * which means that the length field is big-endian, not
41545 * little-endian.
41546 */
41547 msdu_length = tvb_get_ntohs(next_tvb, msdu_offset+12);
41548
41549 if (tvb_reported_length_remaining(next_tvb, msdu_offset+14+msdu_length) <= 14)
41550 last_subframe = true1;
41551
41552 /* The last A-MSDU subframe has no padding. */
41553 if (last_subframe)
41554 subframe_length = 14+msdu_length;
41555 else
41556 subframe_length = WS_ROUNDUP_4(14+msdu_length)(((14+msdu_length) + ((unsigned)(4U-1U))) & (~((unsigned)
(4U-1U))))
;
41557
41558 parent_item = proto_tree_add_item(mpdu_tree, hf_ieee80211_amsdu_subframe, next_tvb,
41559 msdu_offset, subframe_length, ENC_NA0x00000000);
41560 proto_item_append_text(parent_item, " #%u", i);
41561 subframe_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
41562 i += 1;
41563
41564 proto_tree_add_mac48_detail(&mac_da, NULL((void*)0), ett_addr, next_tvb, subframe_tree, msdu_offset);
41565 proto_tree_add_mac48_detail(&mac_sa, NULL((void*)0), ett_addr, next_tvb, subframe_tree, msdu_offset+6);
41566 proto_tree_add_item(subframe_tree, hf_ieee80211_amsdu_length, next_tvb, msdu_offset+12, 2, ENC_BIG_ENDIAN0x00000000);
41567
41568 msdu_offset += 14;
41569 msdu_tvb = tvb_new_subset_length(next_tvb, msdu_offset, msdu_length);
41570 call_dissector(llc_handle, msdu_tvb, pinfo, subframe_tree);
41571 if (!last_subframe) {
41572 uint8_t padding = (4-((msdu_offset+msdu_length)&3))&3;
41573 if (padding > 0)
41574 proto_tree_add_item(subframe_tree, hf_ieee80211_amsdu_padding, next_tvb, msdu_offset+msdu_length, padding, ENC_NA0x00000000);
41575 }
41576
41577 msdu_offset = WS_ROUNDUP_4(msdu_offset+msdu_length)(((msdu_offset+msdu_length) + ((unsigned)(4U-1U))) & (~((
unsigned)(4U-1U))))
;
41578 } while (tvb_reported_length_remaining(next_tvb, msdu_offset) > 14);
41579 } else {
41580 /* I guess some bridges take Netware Ethernet_802_3 frames,
41581 which are 802.3 frames (with a length field rather than
41582 a type field, but with no 802.2 header in the payload),
41583 and just stick the payload into an 802.11 frame. I've seen
41584 captures that show frames of that sort.
41585
41586 We also handle some odd form of encapsulation in which a
41587 complete Ethernet frame is encapsulated within an 802.11
41588 data frame, with no 802.2 header. This has been seen
41589 from some hardware.
41590
41591 On top of that, at least at some point it appeared that
41592 the OLPC XO sent out frames with two bytes of 0 between
41593 the "end" of the 802.11 header and the beginning of
41594 the payload. Something similar has also been observed
41595 with Atheros chipsets. There the sequence control field
41596 seems repeated.
41597
41598 And, on top of *that*, IEEE Std 802.11-2018 section
41599 5.1.4 "MSDU format" says:
41600
41601 Logical Link Control (LLC) sublayer entities use the MAC
41602 sublayer service to exchange PDUs with peer LLC sublayer
41603 entities. These PDUs are termed MAC sublayer SDUs (MSDUs)
41604 when sent to the MAC sublayer. There are two LLC sublayer
41605 protocols used (see IEEE Std 802-2014); LLC Protocol
41606 Discrimination (LPD) (see ISO/IEC 8802-2:1998) and EtherType
41607 Protocol Discrimination (EPD) (see IEEE Std 802.3-2012).
41608 LPD is used for transmission of all IEEE 802.11 MSDUs with
41609 the exception of the 5.9 GHz bands where EPD is used
41610 (see E.2.3 and E.2.4).
41611
41612 and IEEE Std 1609.3-2016, section 5.2 "Logical link control",
41613 subsection 5.2.1 "General", says:
41614
41615 A Networking Services implementation shall use EPD in the
41616 LLC sublayer as described in IEEE Std 802, using an EtherType
41617 in the LLC sublayer header Type9 field (see Figure 5 and
41618 Figure 28). The LLC sublayer header consists solely of a
41619 2-octet field that contains an EtherType that identifies
41620 the higher layer protocol.
41621
41622 and ISO 21215, second edition, 2018-06, "Intelligent transport
41623 systems -- Localized communications -- ITS-M5", section 6.3
41624 "Logical link control sub-layer" says:
41625
41626 IEEE Std 802.11TM-2016 does not specify a logical link control
41627 sub-layer protocol. Related functionality is part of the
41628 communication adaptation sub-layer specified in 6.4.
41629
41630 The Length/Type field specified in IEEE 802.3-2015 contains
41631 a 2-octet unsigned Integer number. Dependent on the value,
41632 the field provides either length information or EtherType
41633 information. If the value contained in this field is equal
41634 to or larger than 1 536 = 0x06.00, the field contains an
41635 EtherType address. Ethertype addresses are assigned by the
41636 IEEE Registration Authority, and are used to identify the
41637 protocol employed directly above the ITS-S access layer.
41638 This method of addressing is named "EtherType Protocol
41639 Discrimination" (EPD). An ITS-M5 CI shall support EPD
41640 specified in IEEE Std 802.
41641
41642 ...
41643
41644 NOTE 2 EPD replaces LLC Protocol Discrimination (LPD).
41645 ETSI ITS-G5 is the only known ITS access technology still
41646 using LPD.
41647
41648 Different to the information in IEEE Std 802.11-2016, 5.1.4,
41649 EPD is applicable in all frequency bands as long as
41650 dot11OCBActivated is set to true, i.e. activating the operation
41651 mode "outside the context of a BSS" (OCB).
41652
41653 meaning that a packet might just begin with an Ethertype.
41654
41655 So, if the packet doesn't start with 0xaa 0xaa:
41656
41657 we first use the same scheme that linux-wlan-ng does to detect
41658 those encapsulated Ethernet frames, namely looking to see whether
41659 the frame either starts with 6 octets that match the destination
41660 address from the 802.11 header or has 6 octets that match the
41661 source address from the 802.11 header following the first 6 octets,
41662 and, if so, treat it as an encapsulated Ethernet frame;
41663
41664 otherwise, we use the same scheme that we use in the Ethernet
41665 dissector to recognize Netware 802.3 frames, namely checking
41666 whether the packet starts with 0xff 0xff and, if so, treat it
41667 as an encapsulated IPX frame;
41668
41669 otherwise, we check whether the packet starts with 0x00 0x00
41670 or with a copy of the sequence control field and, if so, treat
41671 those two octets as mysterious extra stuff preceding the
41672 payload (possibly OLPC stuff, possibly Ruckus Wireless stuff,
41673 possibly Atheros stuff), and treat what follows as a frame
41674 using LPD;
41675
41676 otherwise, we check whether the first two octets, treated
41677 as an Ethertype, has a dissector and, if so, treat this as
41678 a frame using EPD;
41679
41680 otherwise, we treat this as a frame using LPD. */
41681 heur_dtbl_entry_t *hdtbl_entry;
41682 if (dissector_try_heuristic(heur_subdissector_list, next_tvb, pinfo, tree, &hdtbl_entry, NULL((void*)0))) {
41683 pinfo->fragmented = save_fragmented;
41684 goto end_of_wlan; /* heuristics dissector handled it. */
41685 }
41686 encap_type = ENCAP_802_2;
41687 if (tvb_bytes_exist(next_tvb, 0, 2)) {
41688 octet1 = tvb_get_uint8(next_tvb, 0);
41689 octet2 = tvb_get_uint8(next_tvb, 1);
41690 if ((octet1 != 0xaa) || (octet2 != 0xaa)) {
41691 if ((tvb_memeql(next_tvb, 6, (const uint8_t *)pinfo->dl_src.data, 6) == 0) ||
41692 (tvb_memeql(next_tvb, 0, (const uint8_t *)pinfo->dl_dst.data, 6) == 0))
41693 encap_type = ENCAP_ETHERNET;
41694 else if ((octet1 == 0xff) && (octet2 == 0xff))
41695 encap_type = ENCAP_IPX;
41696 else if (((octet1 == 0x00) && (octet2 == 0x00)) &&
41697 tvb_bytes_exist(next_tvb, 0, 18) &&
41698 (tvb_memeql(next_tvb, 6, (const uint8_t*)pinfo->dl_dst.data, 6) == 0) &&
41699 (tvb_memeql(next_tvb, 12, (const uint8_t*)pinfo->dl_src.data, 6) == 0)) {
41700 proto_tree_add_item(tree, hf_ieee80211_mysterious_extra_stuff, next_tvb, 0, 6, ENC_NA0x00000000);
41701 next_tvb = tvb_new_subset_remaining(next_tvb, 6);
41702 encap_type = ENCAP_ETHERNET;
41703 } else if (((octet1 == 0x00) && (octet2 == 0x00)) ||
41704 (((octet2 << 8) | octet1) == seq_control)) {
41705 proto_tree_add_item(tree, hf_ieee80211_mysterious_extra_stuff, next_tvb, 0, 2, ENC_NA0x00000000);
41706 next_tvb = tvb_new_subset_remaining(next_tvb, 2);
41707 } else if ((etype = ((octet1 << 8) | octet2)) > ETHERNET_II_MIN_LEN1536) {
41708 /*
41709 * This might be an Ethertype, so maybe this is 802.11
41710 * using EPD rather than LPD. Is this a *known* Ethertype?
41711 */
41712 if (dissector_get_uint_handle(ethertype_subdissector_table,
41713 etype) != NULL((void*)0)) {
41714 /* Yes. */
41715 encap_type = ENCAP_EPD;
41716 }
41717 }
41718 }
41719 }
41720
41721 switch (encap_type) {
41722
41723 case ENCAP_802_2:
41724 /* 802.2 LPD */
41725 call_dissector(llc_handle, next_tvb, pinfo, tree);
41726 break;
41727
41728 case ENCAP_ETHERNET:
41729 call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, tree);
41730 break;
41731
41732 case ENCAP_IPX:
41733 call_dissector(ipx_handle, next_tvb, pinfo, tree);
41734 break;
41735
41736 case ENCAP_EPD:
41737 /* EPD */
41738 call_dissector(epd_llc_handle, next_tvb, pinfo, tree);
41739 break;
41740 }
41741 }
41742 break;
41743
41744 case EXTENSION_FRAME0x03:
41745 {
41746 dissect_ieee80211_extension(fcf, next_tvb, pinfo, tree, flags);
41747 break;
41748 }
41749 }
41750 pinfo->fragmented = save_fragmented;
41751
41752end_of_wlan:
41753 whdr->stats = wlan_stats;
41754 tap_queue_packet(wlan_tap, pinfo, whdr);
41755 memset(&wlan_stats, 0, sizeof wlan_stats);
41756
41757 return tvb_captured_length(tvb);
41758}
41759
41760static int
41761dissect_ieee80211_unknown_pv(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
41762 proto_tree *tree, uint8_t pv,
41763 struct ieee_802_11_phdr *phdr)
41764{
41765 proto_item *ti;
41766 int len;
41767 unsigned offset = 0;
41768 proto_tree *hdr_tree;
41769 tvbuff_t *next_tvb;
41770
41771 col_add_fstr(pinfo->cinfo, COL_INFO, "Unknown protocol version: %u", pv);
41772
41773 /* Create the protocol tree */
41774 len = tvb_reported_length_remaining(tvb, offset);
41775 ti = proto_tree_add_protocol_format(tree, proto_wlan, tvb, offset, len,
41776 "IEEE 802.11 Unknown Protocol Version:"
41777 "%d", pv);
41778 hdr_tree = proto_item_add_subtree(ti, ett_80211);
41779 /* The FCF is two bytes in known versions. The first 2 bits are the
41780 * protocol version. Let's use the PV1 version so that, among other
41781 * things, it will highlight the entire putative FCF and throw an
41782 * exception if we have fewer than two octets. */
41783 proto_tree_add_item(hdr_tree, hf_ieee80211_fc_pv1_proto_version, tvb, offset, 2, ENC_NA0x00000000);
41784 len -= 2; /* We have already dealt with two bytes (FCF) */
41785 if (phdr->fcs_len == 4) {
41786 /* This is claimed to have an FCS. Is there enough reported room for it? */
41787 if (len >= 4) {
41788 len -= 4;
41789 }
41790 }
41791 next_tvb = tvb_new_subset_length(tvb, 2, len);
41792 call_data_dissector(next_tvb, pinfo, hdr_tree);
41793 /* Below should throw an exception if we didn't have room for the FCS. */
41794 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);
41795
41796 return tvb_captured_length(tvb);
41797}
41798
41799/* ************************************************************************* */
41800/* Dissect 802.11 frame */
41801/* ************************************************************************* */
41802/*
41803 * The 802.11n specification makes some fairly significant changes to the
41804 * layout of the MAC header. The first two bits of the MAC header are the
41805 * protocol version. You'd think that the 802.11 committee would have
41806 * bumped the version to indicate a different MAC layout, but NOOOO -- we
41807 * have to go digging for bits in various locations instead.
41808 */
41809static int
41810dissect_ieee80211_common(tvbuff_t *tvb, packet_info *pinfo,
41811 proto_tree *tree, uint32_t option_flags,
41812 struct ieee_802_11_phdr *phdr)
41813{
41814 uint8_t pv = 0;
41815 bool_Bool isDMG = (phdr->phy == PHDR_802_11_PHY_11AD9);
41816 bool_Bool isS1G = (phdr->phy == PHDR_802_11_PHY_11AH10);
41817 uint16_t fcf;
41818 static wlan_hdr_t whdrs[4];
41819 wlan_hdr_t *whdr;
41820
41821 /* Update these so the info is available down the line */
41822 if (pinfo->pseudo_header) {
41823 pinfo->pseudo_header->ieee_802_11.has_frequency = phdr->has_frequency;
41824 pinfo->pseudo_header->ieee_802_11.frequency = phdr->frequency;
41825 }
41826
41827 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY, GINT_TO_POINTER(isDMG)((gpointer) (glong) (isDMG)));
41828
41829 memset(&whdrs[0], 0, sizeof(wlan_hdr_t) * 4);
41830 whdr= &whdrs[0];
41831
41832 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_S1G_KEY, GINT_TO_POINTER(isS1G)((gpointer) (glong) (isS1G)));
41833
41834 /* Handling for one-one mapping between associations and conversations */
41835 if (!pinfo->fd->visited) {
41836 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
41837 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
41838 }
41839
41840 col_set_str(pinfo->cinfo, COL_PROTOCOL, "802.11");
41841 col_clear(pinfo->cinfo, COL_INFO);
41842
41843 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))
;
41844
41845 /*
41846 * Handle PV0 and PV1 in separate functions.
41847 */
41848 pv = FCF_PROT_VERSION(fcf)((fcf) & 0x3);
41849 switch (pv) {
41850 case PV00x0:
41851 dissect_ieee80211_pv0(tvb, pinfo, tree, option_flags, whdr, phdr);
41852 break;
41853 case PV10x1:
41854 dissect_ieee80211_pv1(tvb, pinfo, tree, phdr);
41855 break;
41856 default: /* Unknown protocol version */
41857 dissect_ieee80211_unknown_pv(tvb, pinfo, tree, pv, phdr);
41858 break;
41859 }
41860 return tvb_captured_length(tvb);
41861}
41862
41863/*
41864 * Dissect 802.11 with a variable-length link-layer header and with the FCS
41865 * presence or absence indicated by the pseudo-header, if there is one.
41866 */
41867static int
41868dissect_ieee80211(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
41869{
41870 struct ieee_802_11_phdr *phdr = (struct ieee_802_11_phdr *)data;
41871 struct ieee_802_11_phdr ourphdr;
41872
41873 if (phdr == NULL((void*)0)) {
41874 /*
41875 * Fake a pseudo-header.
41876 * XXX - what are we supposed to do if the FCS length is unknown?
41877 */
41878 memset(&ourphdr, 0, sizeof(ourphdr));
41879 ourphdr.fcs_len = -1;
41880 ourphdr.decrypted = false0;
41881 ourphdr.datapad = false0;
41882 ourphdr.phy = PHDR_802_11_PHY_UNKNOWN0;
41883 phdr = &ourphdr;
41884 }
41885 return dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, phdr);
41886}
41887
41888/*
41889 * Dissect 802.11 with a variable-length link-layer header and with an
41890 * FCS, but no pseudo-header.
41891 */
41892static int
41893dissect_ieee80211_withfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
41894{
41895 struct ieee_802_11_phdr phdr;
41896
41897 /* Construct a pseudo-header to hand to the common code. */
41898 memset(&phdr, 0, sizeof(phdr));
41899 phdr.fcs_len = 4;
41900 phdr.decrypted = false0;
41901 phdr.datapad = false0;
41902 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
41903 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
41904 return tvb_captured_length(tvb);
41905}
41906
41907/*
41908 * Dissect 802.11 with a variable-length link-layer header and without an
41909 * FCS, but no pseudo-header.
41910 */
41911static int
41912dissect_ieee80211_withoutfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
41913{
41914 struct ieee_802_11_phdr phdr;
41915
41916 /* Construct a pseudo-header to hand to the common code. */
41917 memset(&phdr, 0, sizeof(phdr));
41918 phdr.decrypted = false0;
41919 phdr.datapad = false0;
41920 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
41921 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
41922 return tvb_captured_length(tvb);
41923}
41924
41925/*
41926 * Dissect 802.11 from an Intel 2200BG adapter in a Centrino laptop
41927 * running Windows XP.
41928 *
41929 * From
41930 *
41931 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00184.html
41932 *
41933 * and
41934 *
41935 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00393.html:
41936 *
41937 * I tried capturing from a Centrino laptop with the Intel 2200BG 802.11g
41938 * chipset. I saw a lot of "Ethernet II" frames with 0x2452 as ethertype.
41939 *
41940 * ...
41941 *
41942 * This behaviour has been observed on Windows XP. In my opinion it is
41943 * a "proprietary" behaviour of either the Centrino driver or the Centrino
41944 * hardware. Currently I have no Linux distro installed on the machine to
41945 * verify whether it is also the case.
41946 *
41947 * These packets are seen only in a promiscuous capture:
41948 * - Packets normally received by the Centrino computer have the normal
41949 * structure (no 802.11/LLC header but directly IP header).
41950 * - Packets that are supposed to be received by another computer have
41951 * the 802.11/LLC headers. ... Also I noticed that when WEP is enabled,
41952 * the 802.11 header has the flag "WEP" set to true, but the packet
41953 * is already decrypted. I added a test in the code to accommodate this.
41954 * For TKIP it seems to stay encrypted.
41955 */
41956static int
41957dissect_ieee80211_centrino(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
41958{
41959 struct ieee_802_11_phdr phdr;
41960
41961 /* Construct a pseudo-header to hand to the common code. */
41962 memset(&phdr, 0, sizeof(phdr));
41963 phdr.decrypted = false0;
41964 phdr.datapad = false0;
41965 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
41966 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002|IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
41967 return tvb_captured_length(tvb);
41968}
41969
41970/*
41971 * Dissect 802.11 with a variable-length link-layer header and a byte-swapped
41972 * control field and with no FCS (some hardware sends out LWAPP-encapsulated
41973 * 802.11 packets with the control field byte swapped).
41974 */
41975static int
41976dissect_ieee80211_bsfc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
41977{
41978 struct ieee_802_11_phdr phdr;
41979
41980 /* Construct a pseudo-header to hand to the common code. */
41981 memset(&phdr, 0, sizeof(phdr));
41982 phdr.decrypted = false0;
41983 phdr.datapad = false0;
41984 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
41985 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_BROKEN_FC0x00000001|IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
41986 return tvb_captured_length(tvb);
41987}
41988
41989/*
41990 * Dissect 802.11 with a variable-length link-layer header without qos elements
41991 * in data+qos frames and with no FCS (sent as WIDS frames by Cisco standalone
41992 * APs).
41993 */
41994static int
41995dissect_ieee80211_noqos(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
41996{
41997 struct ieee_802_11_phdr phdr;
41998
41999 /* Construct a pseudo-header to hand to the common code. */
42000 memset(&phdr, 0, sizeof(phdr));
42001 phdr.decrypted = false0;
42002 phdr.datapad = false0;
42003 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42004 dissect_ieee80211_common(tvb, pinfo, tree, 0, &phdr);
42005 return tvb_captured_length(tvb);
42006}
42007
42008
42009/* ------------- */
42010static unsigned
42011retransmit_hash(const void *k)
42012{
42013 const retransmit_key *key = (const retransmit_key *)k;
42014 unsigned hash_val;
42015 int i;
42016
42017 hash_val = 0;
42018 for (i = 0; i < 6; i++)
42019 hash_val += key->bssid[i];
42020
42021 for (i = 0; i < 6; i++)
42022 hash_val += key->src[i];
42023
42024 return hash_val;
42025}
42026
42027static int
42028retransmit_equal(const void *k1, const void *k2)
42029{
42030 const retransmit_key *key1 = (const retransmit_key *)k1;
42031 const retransmit_key *key2 = (const retransmit_key *)k2;
42032
42033 return ((!memcmp(key1->bssid, key2->bssid, 6) && !memcmp(key1->src, key2->src, 6)) ? true1:false0);
42034}
42035
42036static unsigned
42037frame_hash(const void *k)
42038{
42039 uint32_t frame = GPOINTER_TO_UINT(k)((guint) (gulong) (k));
42040
42041 return frame;
42042}
42043
42044static int
42045frame_equal(const void *k1, const void *k2)
42046{
42047 uint32_t frame1 = GPOINTER_TO_UINT(k1)((guint) (gulong) (k1));
42048 uint32_t frame2 = GPOINTER_TO_UINT(k2)((guint) (gulong) (k2));
42049
42050 return frame1==frame2;
42051}
42052
42053/*
42054 * EAPOL key description dissectors.
42055 */
42056#define KEY_INFO_KEYDES_VERSION_MASK0x0007 0x0007
42057#define KEY_INFO_KEY_TYPE_MASK0x0008 0x0008
42058#define KEY_INFO_KEY_INDEX_MASK0x0030 0x0030
42059#define KEY_INFO_INSTALL_MASK0x0040 0x0040
42060#define KEY_INFO_KEY_ACK_MASK0x0080 0x0080
42061#define KEY_INFO_KEY_MIC_MASK0x0100 0x0100
42062#define KEY_INFO_SECURE_MASK0x0200 0x0200
42063#define KEY_INFO_ERROR_MASK0x0400 0x0400
42064#define KEY_INFO_REQUEST_MASK0x0800 0x0800
42065#define KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000 0x1000
42066#define KEY_INFO_SMK_MESSAGE_MASK0x2000 0x2000
42067
42068#define KEYDES_VER_TYPE10x01 0x01
42069#define KEYDES_VER_TYPE20x02 0x02
42070#define KEYDES_VER_TYPE30x03 0x03
42071
42072static const value_string keydes_version_vals[] = {
42073 { KEYDES_VER_TYPE10x01, "RC4 Cipher, HMAC-MD5 MIC" },
42074 { KEYDES_VER_TYPE20x02, "AES Cipher, HMAC-SHA1 MIC" },
42075 { KEYDES_VER_TYPE30x03, "AES Cipher, AES-128-CMAC MIC" },
42076 { 0, NULL((void*)0) }
42077};
42078
42079static int proto_wlan_rsna_eapol;
42080
42081static int hf_wlan_rsna_eapol_wpa_keydes_msgnr;
42082static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo;
42083static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version;
42084static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type;
42085static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index;
42086static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install;
42087static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack;
42088static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic;
42089static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure;
42090static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error;
42091static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request;
42092static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data;
42093static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message;
42094static int hf_wlan_rsna_eapol_keydes_key_len;
42095static int hf_wlan_rsna_eapol_keydes_replay_counter;
42096static int hf_wlan_rsna_eapol_keydes_key_iv;
42097static int hf_wlan_rsna_eapol_wpa_keydes_nonce;
42098static int hf_wlan_rsna_eapol_wpa_keydes_rsc;
42099static int hf_wlan_rsna_eapol_wpa_keydes_id;
42100static int hf_wlan_rsna_eapol_wpa_keydes_mic;
42101static int hf_wlan_rsna_eapol_wpa_keydes_data_len;
42102static int hf_wlan_rsna_eapol_wpa_keydes_data;
42103static int hf_wlan_rsna_eapol_wpa_keydes_padding;
42104static int hf_wlan_rsna_eapol_wpa_extraneous;
42105
42106static int ett_keyinfo;
42107static int ett_wlan_rsna_eapol_keydes_data;
42108
42109static const true_false_string keyinfo_key_type_tfs = { "Pairwise Key", "Group Key" };
42110
42111static int
42112keydata_padding_len(tvbuff_t *tvb)
42113{
42114 int keydata_len = tvb_reported_length(tvb);
42115 int len_no_padding = keydata_len;
42116 const uint8_t *keydata = tvb_get_ptr(tvb, 0, keydata_len);
42117 while (len_no_padding > 0 && (keydata[len_no_padding - 1] == 0x00)) {
42118 len_no_padding--;
42119 }
42120 if (len_no_padding > 0 && keydata[len_no_padding - 1] == 0xdd) {
42121 len_no_padding--;
42122 return keydata_len - len_no_padding;
42123 }
42124 return 0;
42125}
42126
42127static void
42128get_eapol_parsed(packet_info *pinfo, PDOT11DECRYPT_EAPOL_PARSED eapol_parsed,
42129 ieee80211_conversation_data_t *conv_data)
42130{
42131 if (!eapol_parsed) {
42132 return;
42133 }
42134
42135 proto_eapol_key_frame_t *eapol_key =
42136 (proto_eapol_key_frame_t *)p_get_proto_data(pinfo->pool, pinfo, proto_eapol,
42137 EAPOL_KEY_FRAME_KEY0);
42138 if (!eapol_key) {
42139 return;
42140 }
42141 eapol_parsed->len = eapol_key->len;
42142 eapol_parsed->key_type = eapol_key->type;
42143 eapol_parsed->key_version = (uint8_t)
42144 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)))
;
42145 eapol_parsed->key_len = (uint16_t)
42146 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)))
;
42147 eapol_parsed->key_iv = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, KEY_IV_KEY);
42148 eapol_parsed->key_data = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, KEY_DATA_KEY);
42149 eapol_parsed->key_data_len = (uint16_t)
42150 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)))
;
42151 eapol_parsed->nonce = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, NONCE_KEY);
42152 eapol_parsed->group_cipher = (uint8_t)
42153 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)))
;
42154 eapol_parsed->cipher = (uint8_t)
42155 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)))
;
42156 eapol_parsed->akm = (uint8_t)
42157 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)))
;
42158 eapol_parsed->mic = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MIC_KEY);
42159 eapol_parsed->mic_len =
42160 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)))
;
42161 eapol_parsed->gtk = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GTK_KEY);
42162 eapol_parsed->gtk_len = (uint16_t)
42163 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)))
;
42164
42165 /* For fast bss transition akms */
42166 eapol_parsed->mdid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MDID_KEY);
42167 eapol_parsed->fte.r0kh_id =
42168 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R0KH_ID_KEY);
42169 eapol_parsed->fte.r0kh_id_len = (uint8_t)
42170 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)))
;
42171 eapol_parsed->fte.r1kh_id =
42172 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R1KH_ID_KEY);
42173 eapol_parsed->fte.r1kh_id_len = (uint8_t)
42174 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)))
;
42175
42176 if (conv_data) {
42177 eapol_parsed->dh_group = conv_data->sae_group;
42178 }
42179}
42180
42181static void
42182get_assoc_parsed(packet_info *pinfo, PDOT11DECRYPT_ASSOC_PARSED assoc_parsed)
42183{
42184 if (!assoc_parsed) {
42185 return;
42186 }
42187
42188 assoc_parsed->group_cipher = (uint8_t)
42189 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)))
;
42190 assoc_parsed->cipher = (uint8_t)
42191 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)))
;
42192 assoc_parsed->akm = (uint8_t)
42193 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)))
;
42194 assoc_parsed->fte.mic = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_MIC_KEY);
42195 assoc_parsed->fte.mic_len =
42196 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)))
;
42197 assoc_parsed->mdid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MDID_KEY);
42198 assoc_parsed->fte.anonce =
42199 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_ANONCE_KEY);
42200 assoc_parsed->fte.snonce =
42201 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_SNONCE_KEY);
42202 assoc_parsed->fte.r0kh_id =
42203 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R0KH_ID_KEY);
42204 assoc_parsed->fte.r0kh_id_len = (uint8_t)
42205 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)))
;
42206 assoc_parsed->fte.r1kh_id =
42207 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R1KH_ID_KEY);
42208 assoc_parsed->fte.r1kh_id_len = (uint8_t)
42209 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)))
;
42210 assoc_parsed->rsne_tag =
42211 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, RSNE_TAG_KEY);
42212 assoc_parsed->rsnxe_tag =
42213 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, RSNXE_TAG_KEY);
42214 assoc_parsed->mde_tag =
42215 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MDE_TAG_KEY);
42216 assoc_parsed->fte_tag =
42217 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_TAG_KEY);
42218 assoc_parsed->rde_tag =
42219 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, RDE_TAG_KEY);
42220 assoc_parsed->gtk = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GTK_KEY);
42221 assoc_parsed->gtk_len = (uint16_t)
42222 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)))
;
42223 assoc_parsed->gtk_subelem_key_len = (uint16_t)
42224 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)))
;
42225}
42226
42227static void
42228try_decrypt_keydata(packet_info *pinfo)
42229{
42230 uint32_t dec_caplen;
42231 unsigned char dec_data[DOT11DECRYPT_EAPOL_MAX_LEN1024U];
42232 DOT11DECRYPT_EAPOL_PARSED eapol_parsed;
42233 DOT11DECRYPT_KEY_ITEM used_key;
42234
42235 if (!enable_decryption) {
42236 return;
42237 }
42238
42239 uint8_t *bssid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, BSSID_KEY);
42240 uint8_t *sta = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, STA_KEY);
42241 if (!bssid || !sta) {
42242 return;
42243 }
42244
42245 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
42246 ieee80211_conversation_data_t *conversation_data = NULL((void*)0);
42247 if (conversation) {
42248 conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
42249 /* Use MLD MAC in EAPOL */
42250 if (conversation_data && conversation_data->mld_set) {
42251 bssid = conversation_data->ap_mld;
42252 sta = conversation_data->sta_mld;
42253 }
42254 }
42255
42256 memset(&eapol_parsed, 0, sizeof(eapol_parsed));
42257 get_eapol_parsed(pinfo, &eapol_parsed, conversation_data);
42258
42259 int ret = Dot11DecryptDecryptKeyData(&dot11decrypt_ctx,
42260 &eapol_parsed,
42261 bssid, sta,
42262 dec_data, &dec_caplen,
42263 &used_key);
42264 if (ret == DOT11DECRYPT_RET_SUCCESS0 && dec_caplen > 0) {
42265 proto_keydata_t *eapol = wmem_new(wmem_file_scope(), proto_keydata_t)((proto_keydata_t*)wmem_alloc((wmem_file_scope()), sizeof(proto_keydata_t
)))
;
42266 eapol->used_key = used_key;
42267 eapol->keydata_len = dec_caplen;
42268 eapol->keydata = (uint8_t *)wmem_memdup(wmem_file_scope(), dec_data, dec_caplen);
42269
42270 /* Save decrypted eapol keydata for rsna dissector */
42271 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_EAPOL_KEY, eapol);
42272 }
42273}
42274
42275static void
42276try_scan_eapol_keys(packet_info *pinfo, DOT11DECRYPT_HS_MSG_TYPE msg_type)
42277{
42278 DOT11DECRYPT_EAPOL_PARSED eapol_parsed;
42279
42280 if (!enable_decryption) {
42281 return;
42282 }
42283
42284 proto_eapol_key_frame_t *eapol_key =
42285 (proto_eapol_key_frame_t *)p_get_proto_data(pinfo->pool, pinfo, proto_eapol,
42286 EAPOL_KEY_FRAME_KEY0);
42287 uint8_t *bssid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, BSSID_KEY);
42288 uint8_t *sta = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, STA_KEY);
42289
42290 if (!eapol_key || !bssid || !sta) {
42291 return;
42292 }
42293
42294 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
42295 ieee80211_conversation_data_t *conversation_data = NULL((void*)0);
42296 if (conversation) {
42297 conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
42298 /* Use MLD MAC in EAPOL */
42299 if (conversation_data && conversation_data->mld_set) {
42300 bssid = conversation_data->ap_mld;
42301 sta = conversation_data->sta_mld;
42302 }
42303 }
42304
42305 memset(&eapol_parsed, 0, sizeof(eapol_parsed));
42306 get_eapol_parsed(pinfo, &eapol_parsed, conversation_data);
42307 eapol_parsed.msg_type = msg_type;
42308
42309 Dot11DecryptScanEapolForKeys(&dot11decrypt_ctx,
42310 &eapol_parsed,
42311 eapol_key->data, eapol_key->len,
42312 bssid, sta);
42313}
42314
42315static void
42316try_scan_ft_assoc_keys(packet_info *pinfo, const wlan_hdr_t *whdr)
42317{
42318 DOT11DECRYPT_ASSOC_PARSED assoc_parsed;
42319 uint8_t decrypted_buf[DOT11DECRYPT_WPA_PTK_MAX_LEN88];
42320 size_t decrypted_len = 0;
42321 DOT11DECRYPT_KEY_ITEM used_key;
42322 int ret;
42323
42324 if (!enable_decryption || pinfo->fd->visited || !whdr) {
42325 return;
42326 }
42327 if (whdr->type != MGT_ASSOC_REQ0x00 && whdr->type != MGT_ASSOC_RESP0x01 &&
42328 whdr->type != MGT_REASSOC_REQ0x02 && whdr->type != MGT_REASSOC_RESP0x03) {
42329 return;
42330 }
42331
42332 memset(&assoc_parsed, 0, sizeof(assoc_parsed));
42333 get_assoc_parsed(pinfo, &assoc_parsed);
42334 /* Implicit conversion from MGT_ASSOC_xxx to DOT11DECRYPT_SUBTYPE_xxx */
42335 assoc_parsed.frame_subtype = (uint8_t)whdr->type;
42336 memcpy(assoc_parsed.bssid, whdr->bssid.data, 6);
42337 memcpy(assoc_parsed.sa, whdr->src.data, 6);
42338 memcpy(assoc_parsed.da, whdr->dst.data, 6);
42339
42340 ret = Dot11DecryptScanFtAssocForKeys(&dot11decrypt_ctx, &assoc_parsed,
42341 decrypted_buf, &decrypted_len,
42342 &used_key);
42343 if (ret == DOT11DECRYPT_RET_SUCCESS_HANDSHAKE-1 && decrypted_len > 0) {
42344 proto_keydata_t *proto = wmem_new(wmem_file_scope(), proto_keydata_t)((proto_keydata_t*)wmem_alloc((wmem_file_scope()), sizeof(proto_keydata_t
)))
;
42345 proto->used_key = used_key;
42346 proto->keydata_len = (unsigned)decrypted_len;
42347 proto->keydata = (uint8_t *)wmem_memdup(wmem_file_scope(), decrypted_buf, decrypted_len);
42348
42349 /* Save decrypted GTK keydata for tag dissector */
42350 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_GTK_KEY, proto);
42351 }
42352}
42353
42354/*
42355 * In some cases we do not know the key mic len from other sources, however
42356 * we can figure it out from the first frame in the four-way handshake.
42357 *
42358 * It defaults to 16 bytes, but if there are more than 16 bytes of zeros before
42359 * the eapol data len, then we can adjust upwards. We used steps of 8 bytes
42360 * because the MIC len is usually a multiple of 8 in length.
42361 *
42362 * If we find it, set it in the conversation data for the wlan conversation
42363 * found via the pinfo.
42364 */
42365static void
42366discover_key_mic_len1(tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
42367{
42368 conversation_t *conversation = find_or_create_wlan_conversation(pinfo);
42369 ieee80211_conversation_data_t *conversation_data = get_or_create_conversation_data(conversation);
42370 uint16_t mic_len = 16;
42371
42372 /*
42373 * The first sixteen bytes at offset should 0. If not, get out of here
42374 */
42375 if (tvb_get_letoh64(tvb, offset) != 0 ||
42376 tvb_get_letoh64(tvb, offset + 8) != 0) {
42377 return;
42378 }
42379
42380 offset += 16;
42381 /*
42382 * Do we have another 8 bytes of zeros? But do not fall off the end!
42383 */
42384 while ((tvb_captured_length(tvb) > (offset + 8)) &&
42385 tvb_get_letoh64(tvb, offset) == 0) {
42386 /*
42387 * equal to the rest of the data.
42388 */
42389 mic_len += 8;
42390 offset += 8;
42391
42392 }
42393
42394 /*
42395 * Do the next two bytes give us the length of the remainder?
42396 */
42397 if (tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000) + 2 ==
42398 tvb_reported_length_remaining(tvb, offset)) {
42399 conversation_data->discovered_key_mic_len = mic_len;
42400 }
42401}
42402
42403/*
42404 * Sometimes we cannot discover it from the first frame of the four-way
42405 * handshake, however, we can still determine it from the second frame.
42406 */
42407static void
42408discover_key_mic_len2(tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
42409{
42410 conversation_t *conversation = find_or_create_wlan_conversation(pinfo);
42411 ieee80211_conversation_data_t *conversation_data = get_or_create_conversation_data(conversation);
42412 uint16_t mic_len = 16;
42413
42414 /*
42415 * The KeyMIC should have a 2-byte length field following it, and that
42416 * should cover the rest of the captured data ...
42417 */
42418 offset += 16;
42419
42420 while ((tvb_captured_length(tvb) > (offset + 2)) &&
42421 tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000) !=
42422 tvb_reported_length_remaining(tvb, offset + 2)) {
42423
42424 /*
42425 * Add 8 more bytes.
42426 */
42427 mic_len +=8;
42428 offset+= 8;
42429 }
42430
42431 /*
42432 * Check that we are correct ... ie, the two bytes where we are is the length
42433 * of the remaining data, because we might have walked off the end of the
42434 * tvb.
42435 *
42436 * We check against the reported length remaining because the capture might
42437 * have been truncated beyond the key data length field.
42438 */
42439 if (tvb_captured_length_remaining(tvb, offset) >= 2 &&
42440 tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000) + 2 ==
42441 tvb_reported_length_remaining(tvb, offset)) {
42442 conversation_data->discovered_key_mic_len = mic_len;
42443 }
42444}
42445
42446static int
42447dissect_wlan_rsna_eapol_wpa_or_rsn_key(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
42448{
42449 unsigned offset = 0;
42450 uint16_t keyinfo;
42451 uint16_t eapol_data_len;
42452 proto_tree *keydes_tree;
42453 proto_tree *ti = NULL((void*)0);
42454 static int * const wlan_rsna_eapol_wpa_keydes_keyinfo[] = {
42455 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version,
42456 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type,
42457 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index,
42458 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install,
42459 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack,
42460 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic,
42461 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure,
42462 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error,
42463 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request,
42464 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data,
42465 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message,
42466 NULL((void*)0)
42467 };
42468
42469 keyinfo = tvb_get_ntohs(tvb, offset);
42470 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
42471 /* Use link address to get correct conversation in MLD case */
42472 if (conversation == NULL((void*)0)) {
42473 uint8_t *bssid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, BSSID_KEY);
42474 uint8_t *sta = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, STA_KEY);
42475 /* bssid and sta might not be present if this is Bluetooth AMP (removed
42476 * in Bluetooth v5.3), because all data packets have ToDS and FromDS set.
42477 * XXX - Decryption might not work properly with AMP as a result. */
42478 if (bssid && sta) {
42479 if (keyinfo & KEY_INFO_KEY_ACK_MASK0x0080) { /* From AP */
42480 set_address(&pinfo->src, wlan_address_type, 6, bssid);
42481 set_address(&pinfo->dst, wlan_address_type, 6, sta);
42482
42483 } else {
42484 set_address(&pinfo->src, wlan_address_type, 6, sta);
42485 set_address(&pinfo->dst, wlan_address_type, 6, bssid);
42486 }
42487 }
42488 }
42489
42490 uint16_t eapol_data_offset = 76; /* 92 - 16 */
42491 bool_Bool has_nonce = determine_nonce_is_set(tvb);
42492 bool_Bool defaulted_mic_len = false0;
42493 uint16_t eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len);
42494 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42495 eapol_data_offset += eapol_key_mic_len;
42496 DOT11DECRYPT_HS_MSG_TYPE msg_type = DOT11DECRYPT_HS_MSG_TYPE_INVALID;
42497
42498 /*
42499 * RSNA key descriptors.
42500 */
42501 eapol_data_len = tvb_get_ntohs(tvb, offset+eapol_data_offset);
42502 if (keyinfo & KEY_INFO_REQUEST_MASK0x0800) {
42503 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request)");
42504 if (keyinfo & KEY_INFO_ERROR_MASK0x0400)
42505 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request, Error)");
42506 } else if (keyinfo & KEY_INFO_KEY_TYPE_MASK0x0008) {
42507 uint16_t masked;
42508 /* Windows is setting the Secure Bit on message 2 when rekeying, so we'll ignore it */
42509 /* When an AEAD cipher is used no MIC is included, so we cannot rely on the MIC flag */
42510 masked = keyinfo &
42511 (KEY_INFO_INSTALL_MASK0x0040 | KEY_INFO_KEY_ACK_MASK0x0080);
42512
42513 switch (masked) {
42514 case KEY_INFO_KEY_ACK_MASK0x0080:
42515 {
42516 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 1);
42517
42518 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 1 of 4)");
42519 /*
42520 * If we defaulted it, then try to determine the mic len and update
42521 * structures.
42522 */
42523 if (defaulted_mic_len) {
42524 discover_key_mic_len1(tvb, pinfo, 76);
42525 /* Must reset the MIC len */
42526 eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len);
42527 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42528 eapol_data_offset = 76 + eapol_key_mic_len;
42529 eapol_data_len = tvb_get_ntohs(tvb, offset + eapol_data_offset);
42530 }
42531 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_1;
42532 break;
42533 }
42534
42535 case (KEY_INFO_INSTALL_MASK0x0040 | KEY_INFO_KEY_ACK_MASK0x0080):
42536 {
42537 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 3);
42538
42539 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 3 of 4)");
42540 /* Get correct MIC LEN if there is no M1 and M2 */
42541 if (defaulted_mic_len) {
42542 discover_key_mic_len2(tvb, pinfo, 76);
42543 eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len);
42544 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42545 eapol_data_offset = 76 + eapol_key_mic_len;
42546 eapol_data_len = tvb_get_ntohs(tvb, offset + eapol_data_offset);
42547 }
42548 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_3;
42549 break;
42550 }
42551
42552 default:
42553 /* We check the key length to differentiate between message 2 and 4 and just hope that
42554 there are no strange implementations with key data and non-zero key length in message 4.
42555 According to the IEEE specification, sections 11.6.6.3 and 11.6.6.5 we should
42556 use the Secure Bit and/or the Nonce, but there are implementations ignoring the spec.
42557 The Secure Bit is incorrectly set on rekeys for Windows clients for Message 2 and the Nonce is non-zero
42558 in Message 4 in Bug 11994 (Apple?) */
42559 /* In Wi-SUN protocol, message 2 does not contains any data. However, all the implementations
42560 * respect 802.11X, so Secure Bit is set only on message 2 and Nonce is set only on message 4
42561 * (see section 6.5.2.3 of Wi-SUN specification) */
42562 /* When using AES-SIV without plaintext (i.e. only for integrity), the ciphertext has length 16 */
42563 /* With MLO message 4 will have 12 bytes of data */
42564 if (((eapol_key_mic_len == 0) && (eapol_data_len > 16)) ||
42565 ((eapol_key_mic_len > 0) && (eapol_data_len == 0) && !(keyinfo & KEY_INFO_SECURE_MASK0x0200) && has_nonce) ||
42566 ((eapol_key_mic_len > 0) && (eapol_data_len != 0) && (eapol_data_len != 12))) {
42567 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 2);
42568
42569 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 2 of 4)");
42570 if (defaulted_mic_len) {
42571 discover_key_mic_len2(tvb, pinfo, 76);
42572 eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len);
42573 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42574 eapol_data_offset = 76 + eapol_key_mic_len;
42575 eapol_data_len = tvb_get_ntohs(tvb, offset + eapol_data_offset);
42576 }
42577 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_2;
42578 } else {
42579 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 4);
42580
42581 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 4 of 4)");
42582 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_4;
42583 }
42584 break;
42585 }
42586 } else {
42587 if (keyinfo & KEY_INFO_KEY_ACK_MASK0x0080) {
42588 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 1);
42589
42590 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 1 of 2)");
42591 msg_type = DOT11DECRYPT_HS_MSG_TYPE_GHS_1;
42592 } else {
42593 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 2);
42594
42595 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 2 of 2)");
42596 msg_type = DOT11DECRYPT_HS_MSG_TYPE_GHS_2;
42597 }
42598 }
42599 proto_item_set_generated(ti);
42600
42601 uint16_t keydes_version = tvb_get_ntohs(tvb, offset) & KEY_INFO_KEYDES_VERSION_MASK0x0007;
42602 save_proto_data_value(pinfo, keydes_version, KEY_VERSION_KEY);
42603 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_wlan_rsna_eapol_wpa_keydes_keyinfo,
42604 ett_keyinfo, wlan_rsna_eapol_wpa_keydes_keyinfo,
42605 ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
42606 offset += 2;
42607
42608 uint16_t key_len = tvb_get_ntohs(tvb, offset);
42609 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_len, tvb, offset,
42610 2, ENC_BIG_ENDIAN0x00000000);
42611 save_proto_data_value(pinfo, tvb_get_ntohs(tvb, offset), KEY_LEN_KEY);
42612 offset += 2;
42613 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_replay_counter, tvb,
42614 offset, 8, ENC_BIG_ENDIAN0x00000000);
42615 offset += 8;
42616 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_nonce, tvb, offset,
42617 32, ENC_NA0x00000000);
42618 save_proto_data(tvb, pinfo, offset, 32, NONCE_KEY);
42619
42620 offset += 32;
42621 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_iv, tvb,
42622 offset, 16, ENC_NA0x00000000);
42623 save_proto_data(tvb, pinfo, offset, 16, KEY_IV_KEY);
42624 offset += 16;
42625 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_rsc, tvb, offset,
42626 8, ENC_NA0x00000000);
42627 offset += 8;
42628 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_id, tvb, offset, 8,
42629 ENC_NA0x00000000);
42630 offset += 8;
42631
42632 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_mic, tvb, offset,
42633 eapol_key_mic_len, ENC_NA0x00000000);
42634 save_proto_data(tvb, pinfo, offset, eapol_key_mic_len, MIC_KEY);
42635 offset += eapol_key_mic_len;
42636
42637 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data_len, tvb,
42638 offset, 2, ENC_BIG_ENDIAN0x00000000);
42639 save_proto_data_value(pinfo, tvb_get_ntohs(tvb, offset), KEY_DATA_LEN_KEY);
42640 offset += 2;
42641
42642 if (eapol_data_len != 0) {
42643 save_proto_data(tvb, pinfo, offset, eapol_data_len, KEY_DATA_KEY);
42644 ti = proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data,
42645 tvb, offset, eapol_data_len, ENC_NA0x00000000);
42646 if ((keyinfo & KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000) ||
42647 (!(keyinfo & KEY_INFO_KEY_TYPE_MASK0x0008) && key_len)) {
42648 /* RSN: EAPOL-Key Key Data is encrypted.
42649 * WPA: Group Keys use encrypted Key Data.
42650 * IEEE 802.11i-2004 8.5.2.
42651 * Having an encrypted data field without the Encrypted Key Data set
42652 * is not standard, but there are WPA implementation which assume
42653 * encryption when Key Type = 0. In Wi-SUN, the EAPOL-Key frame has
42654 * Key Type = 0 and Encrypted Key Data = 0, but the Key Data is not
42655 * encrypted. To differentiate this case from non standard WPA, we
42656 * check the Key Length, which is 0 for Wi-SUN.
42657 * Let decryption engine try to decrypt this and if successful it's
42658 * stored in EAPOL_KEY proto data.
42659 */
42660 if (!pinfo->fd->visited) {
42661 try_decrypt_keydata(pinfo);
42662 }
42663
42664 proto_keydata_t *eapol;
42665 eapol = (proto_keydata_t*)
42666 p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_EAPOL_KEY);
42667
42668 if (eapol) {
42669 int keydata_len = eapol->keydata_len;
42670 tvbuff_t *next_tvb = tvb_new_child_real_data(tvb, eapol->keydata,
42671 keydata_len, keydata_len);
42672 keydes_tree = proto_item_add_subtree(ti, ett_wlan_rsna_eapol_keydes_data);
42673
42674 if (keydes_version == KEYDES_VER_TYPE10x01) {
42675 add_new_data_source(pinfo, next_tvb, "Decrypted RC4 keydata");
42676 save_proto_data(next_tvb, pinfo, 0, keydata_len, GTK_KEY);
42677 save_proto_data_value(pinfo, keydata_len, GTK_LEN_KEY);
42678 } else {
42679 add_new_data_source(pinfo, next_tvb, "Decrypted AES keydata");
42680 int padding_len = keydata_padding_len(next_tvb);
42681 ieee_80211_add_tagged_parameters(next_tvb, 0, pinfo, keydes_tree,
42682 keydata_len - padding_len,
42683 -1, NULL((void*)0));
42684 if (padding_len) {
42685 proto_tree_add_item(keydes_tree, hf_wlan_rsna_eapol_wpa_keydes_padding,
42686 next_tvb, keydata_len - padding_len,
42687 padding_len, ENC_NA0x00000000);
42688 }
42689 }
42690 /* Also add the PTK used to decrypt and validate the keydata. */
42691 add_ptk_analysis(tvb, keydes_tree, &eapol->used_key);
42692 }
42693 } else {
42694 keydes_tree = proto_item_add_subtree(ti, ett_wlan_rsna_eapol_keydes_data);
42695 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, keydes_tree,
42696 tvb_reported_length_remaining(tvb, offset),
42697 -1, NULL((void*)0));
42698 }
42699
42700 offset += eapol_data_len;
42701 }
42702 if (!pinfo->fd->visited && msg_type != DOT11DECRYPT_HS_MSG_TYPE_INVALID) {
42703 /* Key data at this pointer was either not encrypted or dot11decrypt
42704 * engine has tried to decrypt keydata. Try to extract the keys now that
42705 * all fields from the EAPOL frame have been parsed.
42706 */
42707 try_scan_eapol_keys(pinfo, msg_type);
42708 }
42709
42710 /*
42711 * Do we have extraneous data at the end?
42712 */
42713 if (offset < (tvb_captured_length(tvb) - 1)) {
42714 proto_item *extra;
42715 extra = proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_extraneous, tvb,
42716 offset,
42717 tvb_captured_length_remaining(tvb, offset),
42718 ENC_NA0x00000000);
42719 expert_add_info_format(pinfo, extra, &ei_ieee80211_inv_val,
42720 "Extraneous and invalid data in EAPOL frame");
42721 }
42722 return tvb_captured_length(tvb);
42723}
42724
42725static void try_scan_tdls_keys(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
42726{
42727 if (!enable_decryption) {
42728 return;
42729 }
42730 int len = tvb_captured_length(tvb) - offset;
42731 const uint8_t *action = tvb_get_ptr(tvb, offset, len);
42732 if (action) {
42733 Dot11DecryptScanTdlsForKeys(&dot11decrypt_ctx, action, len);
42734 }
42735}
42736
42737/* It returns the algorithm used for decryption and trailer length. */
42738static tvbuff_t *
42739try_decrypt(tvbuff_t *tvb, packet_info *pinfo, unsigned offset, unsigned len,
42740 uint8_t *algorithm, uint32_t *sec_trailer,
42741 PDOT11DECRYPT_KEY_ITEM used_key)
42742{
42743 const uint8_t *enc_data;
42744 tvbuff_t *decr_tvb = NULL((void*)0);
42745 uint32_t dec_caplen;
42746 unsigned char dec_data[DOT11DECRYPT_MAX_CAPLEN(12 * 1024)];
42747
42748 if (!enable_decryption)
42749 return NULL((void*)0);
42750
42751 /* get the entire packet */
42752 enc_data = tvb_get_ptr(tvb, 0, len+offset);
42753
42754 /* decrypt packet with Dot11Decrypt */
42755 int ret = Dot11DecryptDecryptPacket(&dot11decrypt_ctx, enc_data, offset, offset+len,
42756 dec_data, &dec_caplen, used_key);
42757 if (ret == DOT11DECRYPT_RET_SUCCESS0) {
42758 uint8_t *tmp;
42759 *algorithm=used_key->KeyType;
42760 switch (*algorithm) {
42761 case DOT11DECRYPT_KEY_TYPE_WEP0:
42762 *sec_trailer=DOT11DECRYPT_WEP_TRAILER4;
42763 break;
42764 case DOT11DECRYPT_KEY_TYPE_CCMP101:
42765 *sec_trailer=DOT11DECRYPT_CCMP_TRAILER8;
42766 break;
42767 case DOT11DECRYPT_KEY_TYPE_CCMP_256102:
42768 *sec_trailer = DOT11DECRYPT_CCMP_256_TRAILER16;
42769 break;
42770 case DOT11DECRYPT_KEY_TYPE_GCMP103:
42771 case DOT11DECRYPT_KEY_TYPE_GCMP_256104:
42772 *sec_trailer = DOT11DECRYPT_GCMP_TRAILER16;
42773 break;
42774 case DOT11DECRYPT_KEY_TYPE_TKIP100:
42775 *sec_trailer=DOT11DECRYPT_TKIP_TRAILER8 + 4;
42776 break;
42777 default:
42778 return NULL((void*)0);
42779 }
42780 if (dec_caplen > offset) {
42781 /* allocate buffer for decrypted payload */
42782 tmp = (uint8_t *)wmem_memdup(pinfo->pool, dec_data+offset, dec_caplen-offset);
42783 len = dec_caplen-offset;
42784
42785 /* decrypt successful, let's set up a new data tvb. */
42786 decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
42787 }
42788 }
42789 return decr_tvb;
42790}
42791
42792/* Collect our WEP and WPA keys */
42793static void
42794set_dot11decrypt_keys(void)
42795{
42796 unsigned i;
42797 DOT11DECRYPT_KEYS_COLLECTION *keys = g_new(DOT11DECRYPT_KEYS_COLLECTION, 1)((DOT11DECRYPT_KEYS_COLLECTION *) g_malloc_n ((1), sizeof (DOT11DECRYPT_KEYS_COLLECTION
)))
;
42798
42799 keys->nKeys = 0;
42800
42801 for (i = 0; (uat_wep_key_records != NULL((void*)0)) && (i < num_wepkeys_uat) && (i < MAX_ENCRYPTION_KEYS64); i++)
42802 {
42803 decryption_key_t *dk;
42804 dk = parse_key_string(uat_wep_key_records[i].string, uat_wep_key_records[i].key, NULL((void*)0));
42805
42806 if (dk != NULL((void*)0))
42807 {
42808 /* parse_key_string() does validation, so if it doesn't
42809 * return NULL, we can just copy the results.
42810 */
42811 DOT11DECRYPT_KEY_ITEM key = { 0 };
42812 if (dk->type == DOT11DECRYPT_KEY_TYPE_WEP0)
42813 {
42814 key.KeyType = DOT11DECRYPT_KEY_TYPE_WEP0;
42815
42816 /*
42817 * WEP key is correct (well, at least no longer than
42818 * DOT11DECRYPT_WEP_KEY_MAXLEN)
42819 */
42820 memcpy(key.KeyData.Wep.WepKey, dk->key->data, dk->key->len);
42821 key.KeyData.Wep.WepKeyLen = dk->key->len;
42822 keys->Keys[keys->nKeys] = key;
42823 keys->nKeys += 1;
42824 }
42825 else if (dk->type == DOT11DECRYPT_KEY_TYPE_WPA_PWD3)
42826 {
42827 key.KeyType = DOT11DECRYPT_KEY_TYPE_WPA_PWD3;
42828
42829 /*
42830 * dk->key has a valid length, because otherwise
42831 * parse_key_string() would have returned NULL.
42832 */
42833 memcpy(key.UserPwd.Passphrase, dk->key->data, dk->key->len);
42834 key.UserPwd.PassphraseLen = dk->key->len;
42835
42836 key.UserPwd.SsidLen = 0;
42837 if ((dk->ssid != NULL((void*)0)) && (dk->ssid->len <= DOT11DECRYPT_WPA_SSID_MAX_LEN32))
42838 {
42839 memcpy(key.UserPwd.Ssid, dk->ssid->data, dk->ssid->len);
42840 key.UserPwd.SsidLen = dk->ssid->len;
42841 }
42842
42843 keys->Keys[keys->nKeys] = key;
42844 keys->nKeys += 1;
42845 }
42846 else if (dk->type == DOT11DECRYPT_KEY_TYPE_WPA_PSK4)
42847 {
42848 key.KeyType = DOT11DECRYPT_KEY_TYPE_WPA_PSK4;
42849
42850 memcpy(key.KeyData.Wpa.Psk, dk->key->data, dk->key->len);
42851 key.KeyData.Wpa.PskLen = dk->key->len;
42852 keys->Keys[keys->nKeys] = key;
42853 keys->nKeys += 1;
42854 }
42855 else if (dk->type == DOT11DECRYPT_KEY_TYPE_TK6)
42856 {
42857 key.KeyType = DOT11DECRYPT_KEY_TYPE_TK6;
42858
42859 memcpy(key.Tk.Tk, dk->key->data, dk->key->len);
42860 key.Tk.Len = dk->key->len;
42861 keys->Keys[keys->nKeys] = key;
42862 keys->nKeys += 1;
42863 }
42864 else if (dk->type == DOT11DECRYPT_KEY_TYPE_MSK7)
42865 {
42866 key.KeyType = DOT11DECRYPT_KEY_TYPE_MSK7;
42867
42868 memcpy(key.Msk.Msk, dk->key->data, dk->key->len);
42869 key.Msk.Len = dk->key->len;
42870 keys->Keys[keys->nKeys] = key;
42871 keys->nKeys += 1;
42872 }
42873 free_key_string(dk);
42874 }
42875 }
42876
42877 /* Now set the keys */
42878 Dot11DecryptSetKeys(&dot11decrypt_ctx, keys->Keys, keys->nKeys);
42879 g_free(keys);
42880}
42881
42882static void
42883init_wepkeys(void)
42884{
42885
42886 /*
42887 * XXX - Dot11Decrypt - That God sends it to us beautiful (che dio ce la mandi bona)
42888 * The next lines will add a key to the Dot11Decrypt context. The keystring will be added
42889 * to the old WEP array too, but we don't care, because the packets will come here
42890 * already decrypted... One of these days we will fix this too
42891 */
42892 set_dot11decrypt_keys();
42893}
42894
42895/*
42896 * This code had been taken from AirSnort crack.c function classify()
42897 * Permission granted by snax <at> shmoo dot com
42898 * weak_iv - determine which key byte an iv is useful in resolving
42899 * parm - p, pointer to the first byte of an IV
42900 * return - n - this IV is weak for byte n of a WEP key
42901 * -1 - this IV is not weak for any key bytes
42902 *
42903 * This function tests for IVs that are known to satisfy the criteria
42904 * for a weak IV as specified in FMS section 7.1
42905 *
42906 */
42907static int
42908weak_iv(unsigned char *iv)
42909{
42910 unsigned char sum, k;
42911
42912 if ((iv[1] == 255) && (iv[0] > 2) && (iv[0] < 16)) {
42913 return iv[0] -3;
42914 }
42915
42916 sum = iv[0] + iv[1];
42917 if (sum == 1) {
42918 if (iv[2] <= 0x0a) {
42919 return iv[2] +2;
42920 }
42921 else if (iv[2] == 0xff) {
42922 return 0;
42923 }
42924 }
42925 k = 0xfe - iv[2];
42926 if ((sum == k) && ((iv[2] >= 0xf2) && (iv[2] <= 0xfe) && (iv[2] != 0xfd))) {
42927 return k;
42928 }
42929 return -1;
42930}
42931
42932static void
42933wlan_retransmit_init(void)
42934{
42935 if (fc_analyse_retransmit_table) {
42936 g_hash_table_destroy(fc_analyse_retransmit_table);
42937 fc_analyse_retransmit_table = NULL((void*)0);
42938 }
42939
42940 if (fc_first_frame_table) {
42941 g_hash_table_destroy(fc_first_frame_table);
42942 fc_first_frame_table = NULL((void*)0);
42943 }
42944
42945 if (wlan_subdissector)
42946 return;
42947
42948 fc_analyse_retransmit_table= g_hash_table_new(retransmit_hash, retransmit_equal);
42949 fc_first_frame_table = g_hash_table_new(frame_hash, frame_equal);
42950
42951}
42952
42953static int
42954dissect_data_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
42955{
42956 int offset = 0;
42957 uint8_t type;
42958 int tagged_parameter_tree_len;
42959 proto_tree *tagged_tree;
42960
42961 type = tvb_get_uint8(tvb, offset);
42962 proto_tree_add_item(tree, hf_ieee80211_data_encap_payload_type, tvb, offset,
42963 1, ENC_LITTLE_ENDIAN0x80000000);
42964 offset += 1;
42965 switch (type) {
42966 case 1:
42967 col_set_str(pinfo->cinfo, COL_PROTOCOL, "RRB");
42968 /* TODO: IEEE 802.11r */
42969 break;
42970 case 2:
42971 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
42972 col_clear(pinfo->cinfo, COL_INFO);
42973 offset += add_ff_action(tree, tvb, pinfo, offset, NULL((void*)0));
42974 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
42975 if (tagged_parameter_tree_len > 0) {
42976 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
42977 tagged_parameter_tree_len);
42978 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
42979 tagged_parameter_tree_len, -1, NULL((void*)0));
42980 }
42981 break;
42982 }
42983 return tvb_captured_length(tvb);
42984}
42985
42986void
42987proto_register_ieee80211(void)
42988{
42989
42990 static hf_register_info hf[] = {
42991 {&hf_ieee80211_fc_field,
42992 {"Frame Control Field", "wlan.fc",
42993 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
42994 "MAC Frame control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
42995
42996 {&hf_ieee80211_fc_proto_version,
42997 {"Version", "wlan.fc.version",
42998 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
42999 "MAC Protocol version", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 0 */
43000
43001 {&hf_ieee80211_fc_frame_type,
43002 {"Type", "wlan.fc.type",
43003 FT_UINT8, BASE_DEC, VALS(frame_type)((0 ? (const struct _value_string*)0 : ((frame_type)))), 0x0C,
43004 "Frame type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43005
43006 {&hf_ieee80211_fc_frame_subtype,
43007 {"Subtype", "wlan.fc.subtype",
43008 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
43009 "Frame subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 2 */
43010
43011 {&hf_ieee80211_fc_frame_type_subtype,
43012 {"Type/Subtype", "wlan.fc.type_subtype",
43013 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &frame_type_subtype_vals_ext, 0x0,
43014 "Type and subtype combined (as bytes (for Control Frame Extension subtypes) or nibbles)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43015
43016 {&hf_ieee80211_fc_frame_extension,
43017 {"Control Frame Extension", "wlan.fc.extension",
43018 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
43019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43020
43021 {&hf_ieee80211_fc_flags,
43022 {"Flags", "wlan.flags",
43023 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
43024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43025
43026 {&hf_ieee80211_fc_flags_str,
43027 {"WLAN Flags", "wlan.flags.str",
43028 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43030
43031 {&hf_ieee80211_fc_data_ds,
43032 {"DS status", "wlan.fc.ds",
43033 FT_UINT8, BASE_HEX, VALS(tofrom_ds)((0 ? (const struct _value_string*)0 : ((tofrom_ds)))), (FLAG_FROM_DS0x02|FLAG_TO_DS0x01),
43034 "Data-frame DS-traversal status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 3 */
43035
43036 {&hf_ieee80211_fc_to_ds,
43037 {"To DS", "wlan.fc.tods",
43038 FT_BOOLEAN, 8, TFS(&tods_flag)((0 ? (const struct true_false_string*)0 : ((&tods_flag))
))
, FLAG_TO_DS0x01,
43039 "To DS flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 4 */
43040
43041 {&hf_ieee80211_fc_from_ds,
43042 {"From DS", "wlan.fc.fromds",
43043 FT_BOOLEAN, 8, TFS(&fromds_flag)((0 ? (const struct true_false_string*)0 : ((&fromds_flag
))))
, FLAG_FROM_DS0x02,
43044 "From DS flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 5 */
43045
43046 {&hf_ieee80211_fc_more_frag,
43047 {"More Fragments", "wlan.fc.frag",
43048 FT_BOOLEAN, 8, TFS(&more_fragments)((0 ? (const struct true_false_string*)0 : ((&more_fragments
))))
, FLAG_MORE_FRAGMENTS0x04,
43049 "More Fragments flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 6 */
43050
43051 {&hf_ieee80211_fc_retry,
43052 {"Retry", "wlan.fc.retry",
43053 FT_BOOLEAN, 8, TFS(&retry_flags)((0 ? (const struct true_false_string*)0 : ((&retry_flags
))))
, FLAG_RETRY0x08,
43054 "Retransmission flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43055
43056 {&hf_ieee80211_fc_analysis_retransmission,
43057 {"Retransmission", "wlan.analysis.retransmission",
43058 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
43059 "This frame is a suspected wireless retransmission", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43060
43061 {&hf_ieee80211_fc_analysis_retransmission_frame,
43062 {"Retransmission of frame", "wlan.analysis.retransmission_frame",
43063 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43064 "This is a retransmission of frame #", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43065
43066 {&hf_ieee80211_fc_pwr_mgt,
43067 {"PWR MGT", "wlan.fc.pwrmgt",
43068 FT_BOOLEAN, 8, TFS(&pm_flags)((0 ? (const struct true_false_string*)0 : ((&pm_flags)))
)
, FLAG_POWER_MGT0x10,
43069 "Power management status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43070
43071 {&hf_ieee80211_fc_more_data,
43072 {"More Data", "wlan.fc.moredata",
43073 FT_BOOLEAN, 8, TFS(&md_flags)((0 ? (const struct true_false_string*)0 : ((&md_flags)))
)
, FLAG_MORE_DATA0x20,
43074 "More data flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43075
43076 {&hf_ieee80211_fc_protected,
43077 {"Protected flag", "wlan.fc.protected",
43078 FT_BOOLEAN, 8, TFS(&protected_flags)((0 ? (const struct true_false_string*)0 : ((&protected_flags
))))
, FLAG_PROTECTED0x40,
43079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43080
43081 {&hf_ieee80211_fc_order,
43082 {"+HTC/Order flag", "wlan.fc.order",
43083 FT_BOOLEAN, 8, TFS(&order_flags)((0 ? (const struct true_false_string*)0 : ((&order_flags
))))
, FLAG_ORDER0x80,
43084 "HT Control present/strictly ordered flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43085
43086 {&hf_ieee80211_fc_s1g_bw_indication,
43087 {"Bandwidth Indication", "wlan.fc.control.bandwidth_indication",
43088 FT_UINT8, BASE_DEC, VALS(pv1_bandwidth_indic_vals)((0 ? (const struct _value_string*)0 : ((pv1_bandwidth_indic_vals
))))
,
43089 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43090
43091 {&hf_ieee80211_fc_s1g_dynamic_indication,
43092 {"Dynamic Indication", "wlan.fc.control.dynamic_indication",
43093 FT_BOOLEAN, 8, TFS(&s1g_dynamic_indication_flags)((0 ? (const struct true_false_string*)0 : ((&s1g_dynamic_indication_flags
))))
, FLAG_RETRY0x08,
43094 "Static/dynamic bandwidth negotiation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43095
43096 {&hf_ieee80211_fc_pv1_proto_version,
43097 {"Version", "wlan.fc.version",
43098 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43099
43100 {&hf_ieee80211_fc_pv1_type,
43101 {"Type", "wlan.fc.type",
43102 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) }},
43103
43104 {&hf_ieee80211_fc_pv1_ptid,
43105 {"PTID", "wlan.fc.ptid",
43106 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43107
43108 {&hf_ieee80211_fc_pv1_mgmt_subtype,
43109 {"Subtype", "wlan.fc.subtype",
43110 FT_UINT16, BASE_HEX, VALS(pv1_management_frame_type_vals)((0 ? (const struct _value_string*)0 : ((pv1_management_frame_type_vals
))))
,
43111 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43112
43113 {&hf_ieee80211_fc_pv1_cntl_subtype,
43114 {"Subtype", "wlan.fc.subtype",
43115 FT_UINT16, BASE_HEX, VALS(pv1_control_frame_type_vals)((0 ? (const struct _value_string*)0 : ((pv1_control_frame_type_vals
))))
,
43116 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43117
43118 {&hf_ieee80211_fc_pv1_unk_field,
43119 {"Unknown Subtype", "wlan.fc.unknown_subtype",
43120 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43121
43122 {&hf_ieee80211_fc_pv1_bw_indication,
43123 {"Bandwidth Indication", "wlan.fc.control.bandwidth_indication",
43124 FT_UINT16, BASE_DEC, VALS(pv1_bandwidth_indic_vals)((0 ? (const struct _value_string*)0 : ((pv1_bandwidth_indic_vals
))))
,
43125 0x0700, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43126
43127 {&hf_ieee80211_fc_pv1_dynamic_indication,
43128 {"Dynamic Indication", "wlan.fc.control.dynamic_indication",
43129 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43130
43131 {&hf_ieee80211_fc_pv1_cntl_power_mgmt,
43132 {"Power Management", "wlan.fc.control.power_management",
43133 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43134
43135 {&hf_ieee80211_fc_pv1_cntl_more_data,
43136 {"More Data", "wlan.fc.control.more_data",
43137 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43138
43139 {&hf_ieee80211_fc_pv1_cntl_flow_control,
43140 {"Flow Control", "wlan.fc.control.flow_control",
43141 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43142
43143 {&hf_ieee80211_fc_pv1_cntl_next_twt_info,
43144 {"Next TWT Info Present", "wlan.fc.control.next_twt_info_present",
43145 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43146
43147 {&hf_ieee80211_fc_pv1_mgmt_pr_next_tbt,
43148 {"Next TBTT Present", "wlan.fc.mgmt.next_tbtt_present",
43149 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43150 {&hf_ieee80211_fc_pv1_mgmt_pr_full_ssid,
43151 {"Full SSID Present", "wlan.fc.mgmt.full_ssid_present",
43152 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43153
43154 {&hf_ieee80211_fc_pv1_mgmt_pr_ano,
43155 {"AMO Present", "wlan.fc.mgmt.amo_present",
43156 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43157
43158 {&hf_ieee80211_fc_pv1_mgmt_pr_bss_bw,
43159 {"BSS BW", "wlan.fc.mgmt.bss_bw",
43160 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43161
43162 {&hf_ieee80211_fc_pv1_mgmt_pr_security,
43163 {"Security", "wlan.fc.mgmt.security",
43164 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43165
43166 {&hf_ieee80211_fc_pv1_mgmt_pr_1mhz_pc,
43167 {"1MHz Primary Channel Location",
43168 "wlan.fc.mgmt.1mhz_primary_channel_location",
43169 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43170
43171 {&hf_ieee80211_fc_pv1_mgmt_pr_slot_assign,
43172 {"Slot Assignment Mode", "wlan.fc.mgmt.slot_assignment_mode",
43173 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43174
43175 {&hf_ieee80211_fc_pv1_mgmt_pr_more_frag,
43176 {"More Fragments", "wlan.fc.mgmt.more_fragments",
43177 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43178
43179 {&hf_ieee80211_fc_pv1_mgmt_pr_pwr_mgmt,
43180 {"Power Management", "wlan.fc.mgmt.power_management",
43181 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43182
43183 {&hf_ieee80211_fc_pv1_mgmt_pr_grp_indic,
43184 {"Group Indication", "wlan.fc.mgmt.group_indication",
43185 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43186
43187 {&hf_ieee80211_fc_pv1_mgmt_pr_protected,
43188 {"Protected Frame", "wlan.fc.mgmt.protected_frame",
43189 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43190
43191 {&hf_ieee80211_fc_pv1_mgmt_pr_end_of_svc,
43192 {"End of Service Period", "wlan.fc.mgmt.end_of_service_period",
43193 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43194
43195 {&hf_ieee80211_fc_pv1_mgmt_pr_relayed_frm,
43196 {"Relayed Frame", "wlan.fc.mgmt.relayed_frame",
43197 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43198
43199 {&hf_ieee80211_fc_pv1_mgmt_pr_ack_policy,
43200 {"Ack Policy", "wlan.fc.mgmt.ack_policy",
43201 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43202
43203 {&hf_ieee80211_fc_pv1_from_ds,
43204 {"From DS", "wlan.fc.from_ds",
43205 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43206
43207 {&hf_ieee80211_fc_pv1_more_fragments,
43208 {"More Fragments", "wlan.fc.more_fragments",
43209 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43210
43211 {&hf_ieee80211_fc_pv1_power_mgmt,
43212 {"Power Management", "wlan.fc.power_management",
43213 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43214
43215 {&hf_ieee80211_fc_pv1_more_data,
43216 {"More Data", "wlan.fc.more_data",
43217 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43218
43219 {&hf_ieee80211_fc_pv1_protected_frame,
43220 {"Protected Frame", "wlan.fc.protected_frame",
43221 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43222
43223 {&hf_ieee80211_fc_pv1_end_service_per,
43224 {"End of Service Period", "wlan.fc.end_of_service_period",
43225 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43226
43227 {&hf_ieee80211_fc_pv1_relayed_frame,
43228 {"Relayed Frame", "wlan.fc.relayed_frame",
43229 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43230
43231 {&hf_ieee80211_fc_pv1_ack_policy,
43232 {"Ack Policy", "wlan.fc.ack_policy",
43233 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43234
43235 {&hf_ieee80211_pv1_sid,
43236 {"SID", "wlan.fc.sid",
43237 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43238
43239 {&hf_ieee80211_pv1_sid_association_id,
43240 {"Association ID", "wlan.fc.sid.association_id",
43241 FT_UINT16, BASE_HEX, NULL((void*)0), SID_AID_MASK0x1FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43242
43243 {&hf_ieee80211_pv1_sid_a3_present,
43244 {"A3 Present", "wlan.fc.sid.a3_present",
43245 FT_BOOLEAN, 16, NULL((void*)0), SID_A3_PRESENT0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43246
43247 {&hf_ieee80211_pv1_sid_a4_present,
43248 {"A4 Present", "wlan.fc.sid.a4_present",
43249 FT_BOOLEAN, 16, NULL((void*)0), SID_A4_PRESENT0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43250
43251 {&hf_ieee80211_pv1_sid_a_msdu,
43252 {"A MSDU", "wlan.fc.sid.a_msdu",
43253 FT_BOOLEAN, 16, NULL((void*)0), SID_A_MSDU0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43254
43255 {&hf_ieee80211_pv1_cnt_stack_tetra_timest,
43256 {"Tetrapartial Timestamp", "wlan.pv1.control.stack.tetrapartial_timestamp",
43257 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43258
43259 {&hf_ieee80211_pv1_cnt_bat_beacon_seq,
43260 {"Beacon Sequence", "wlan.pv1.control.bat.beacon_sequence",
43261 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43262
43263 {&hf_ieee80211_pv1_cnt_bat_penta_timest,
43264 {"Pentapartial Timestamp", "wlan.pv1.control.bat.pentapartial_timestamp",
43265 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43266
43267 {&hf_ieee80211_pv1_cnt_bat_next_twt_info,
43268 {"Next TWT Info", "wlan.pv1.control.bat.next_twt_info",
43269 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43270
43271 {&hf_ieee80211_pv1_cnt_bat_stating_seq_cntl,
43272 {"Starting Sequence Control", "wlan.pv1.control.bat.starting_sequence_control",
43273 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43274
43275 {&hf_ieee80211_pv1_cnt_bat_bitmap,
43276 {"BAT Bitmap", "wlan.pv1.control.bat.bat_bitmap",
43277 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43278
43279 {&hf_ieee80211_pv1_mgmt_reserved,
43280 {"PV1 Reserved Management frame", "wlan.pv1.management.reserved",
43281 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43282
43283 {&hf_ieee80211_pv1_cntl_reserved,
43284 {"PV1 Reserved Control frame", "wlan.pv1.control.reserved",
43285 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43286
43287 {&hf_ieee80211_fc_s1g_next_tbtt_present,
43288 {"Next TBTT Present", "wlan.fc.s1g.next_tbtt_present",
43289 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) }},
43290
43291 {&hf_ieee80211_fc_s1g_compressed_ssid_present,
43292 {"Compressed SSID Present", "wlan.fc.s1g.compressed_ssid_present",
43293 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) }},
43294
43295 {&hf_ieee80211_fc_s1g_ano_present,
43296 {"ANO Present", "wlan.fc.s1g.ano_present",
43297 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) }},
43298
43299 {&hf_ieee80211_fc_s1g_bss_bw,
43300 {"BSS BW", "wlan.fc.s1g.bss_bw",
43301 FT_UINT8, BASE_DEC, NULL((void*)0), 0x38, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43302
43303 {&hf_ieee80211_fc_s1g_security,
43304 {"Security", "wlan.fc.s1g.security",
43305 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) }},
43306
43307 {&hf_ieee80211_fc_s1g_ap_pm,
43308 {"AP PM", "wlan.fc.s1g.ap_pm",
43309 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) }},
43310
43311 {&hf_ieee80211_assoc_id,
43312 {"Association ID", "wlan.aid",
43313 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3FFF,
43314 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43315
43316 {&hf_ieee80211_did_duration,
43317 {"Duration", "wlan.duration",
43318 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7FFF,
43319 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43320
43321 {&hf_ieee80211_addr_da,
43322 {"Destination address", "wlan.da",
43323 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43324 "Destination Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43325
43326 {&hf_ieee80211_addr_da_resolved,
43327 {"Destination address (resolved)", "wlan.da_resolved", FT_STRING,
43328 BASE_NONE, NULL((void*)0), 0x0,
43329 "Destination Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43330
43331 {&hf_ieee80211_addr_da_oui,
43332 {"Destination OUI", "wlan.da.oui",
43333 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43334 "Destination Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43335
43336 {&hf_ieee80211_addr_da_oui_resolved,
43337 {"Destination OUI (resolved)", "wlan.da.oui_resolved",
43338 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43339 "Destination Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43340
43341 { &hf_ieee80211_addr_da_lg,
43342 { "LG bit", "wlan.da.lg",
43343 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43344 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43345
43346 { &hf_ieee80211_addr_da_ig,
43347 { "IG bit", "wlan.da.ig",
43348 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43349 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43350
43351 {&hf_ieee80211_addr_sa,
43352 {"Source address", "wlan.sa",
43353 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43354 "Source Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43355
43356 {&hf_ieee80211_addr_sa_resolved,
43357 {"Source address (resolved)", "wlan.sa_resolved", FT_STRING,
43358 BASE_NONE, NULL((void*)0), 0x0,
43359 "Source Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43360
43361 {&hf_ieee80211_addr_sa_oui,
43362 {"Source OUI", "wlan.sa.oui",
43363 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43364 "Source Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43365
43366 {&hf_ieee80211_addr_sa_oui_resolved,
43367 {"Source OUI (resolved)", "wlan.sa.oui_resolved",
43368 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43369 "Source Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43370
43371 { &hf_ieee80211_addr_sa_lg,
43372 { "LG bit", "wlan.sa.lg",
43373 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43374 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43375
43376 { &hf_ieee80211_addr_sa_ig,
43377 { "IG bit", "wlan.sa.ig",
43378 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43379 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43380
43381 {&hf_ieee80211_addr,
43382 {"Hardware address", "wlan.addr",
43383 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43384 "SA, DA, BSSID, RA or TA Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43385
43386 {&hf_ieee80211_addr_resolved,
43387 { "Hardware address (resolved)", "wlan.addr_resolved", FT_STRING,
43388 BASE_NONE, NULL((void*)0), 0x0,
43389 "SA, DA, BSSID, RA or TA Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43390
43391 {&hf_ieee80211_addr_oui,
43392 {"Hardware OUI", "wlan.oui",
43393 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43394 "Hardware Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43395
43396 {&hf_ieee80211_addr_oui_resolved,
43397 {"Hardware OUI (resolved)", "wlan.oui_resolved",
43398 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43399 "Hardware Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43400
43401 { &hf_ieee80211_addr_lg,
43402 { "LG bit", "wlan.addr.lg",
43403 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43404 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43405
43406 { &hf_ieee80211_addr_ig,
43407 { "IG bit", "wlan.addr.ig",
43408 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43409 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43410
43411 {&hf_ieee80211_addr_ra,
43412 {"Receiver address", "wlan.ra",
43413 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43414 "Receiving Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43415
43416 {&hf_ieee80211_addr_ra_resolved,
43417 {"Receiver address (resolved)", "wlan.ra_resolved", FT_STRING, BASE_NONE,
43418 NULL((void*)0), 0x0, "Receiving Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43419
43420 {&hf_ieee80211_addr_ra_oui,
43421 {"Receiver OUI", "wlan.ra.oui",
43422 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43423 "Receiver Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43424
43425 {&hf_ieee80211_addr_ra_oui_resolved,
43426 {"Receiver OUI (resolved)", "wlan.ra.oui_resolved",
43427 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43428 "Receiver Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43429
43430 { &hf_ieee80211_addr_ra_lg,
43431 { "LG bit", "wlan.ra.lg",
43432 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43433 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43434
43435 { &hf_ieee80211_addr_ra_ig,
43436 { "IG bit", "wlan.ra.ig",
43437 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43438 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43439
43440 {&hf_ieee80211_addr_ta,
43441 {"Transmitter address", "wlan.ta",
43442 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43443 "Transmitting Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43444
43445 {&hf_ieee80211_addr_ta_resolved,
43446 {"Transmitter address (resolved)", "wlan.ta_resolved", FT_STRING,
43447 BASE_NONE, NULL((void*)0), 0x0,
43448 "Transmitting Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43449
43450 {&hf_ieee80211_addr_ta_oui,
43451 {"Transmitter OUI", "wlan.ta.oui",
43452 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43453 "Transmitter Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43454
43455 {&hf_ieee80211_addr_ta_oui_resolved,
43456 {"Transmitter OUI (resolved)", "wlan.ta.oui_resolved",
43457 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43458 "Transmitter Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43459
43460 { &hf_ieee80211_addr_ta_lg,
43461 { "LG bit", "wlan.ta.lg",
43462 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43463 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43464
43465 { &hf_ieee80211_addr_ta_ig,
43466 { "IG bit", "wlan.ta.ig",
43467 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43468 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43469
43470 {&hf_ieee80211_addr_bssid,
43471 {"BSS Id", "wlan.bssid",
43472 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43473 "Basic Service Set ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43474
43475 {&hf_ieee80211_addr_bssid_resolved,
43476 {"BSS Id (resolved)", "wlan.bssid_resolved", FT_STRING, BASE_NONE, NULL((void*)0),
43477 0x0, "Basic Service Set ID (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43478
43479 {&hf_ieee80211_addr_bssid_oui,
43480 {"BSS Id OUI", "wlan.bssid.oui",
43481 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43482 "BSS Id Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43483
43484 {&hf_ieee80211_addr_bssid_oui_resolved,
43485 {"BSS Id OUI (resolved)", "wlan.bssid.oui_resolved",
43486 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43487 "BSS Id Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43488
43489 { &hf_ieee80211_addr_bssid_lg,
43490 { "LG bit", "wlan.bssid.lg",
43491 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43492 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43493
43494 { &hf_ieee80211_addr_bssid_ig,
43495 { "IG bit", "wlan.bssid.ig",
43496 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43497 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43498
43499 {&hf_ieee80211_addr_staa,
43500 {"STA address", "wlan.staa",
43501 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43502 "Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43503
43504 {&hf_ieee80211_addr_staa_resolved,
43505 {"STA address (resolved)", "wlan.staa_resolved", FT_STRING, BASE_NONE, NULL((void*)0),
43506 0x0, "Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43507
43508 {&hf_ieee80211_addr_staa_oui,
43509 {"STA OUI", "wlan.staa.oui",
43510 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43511 "STA Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43512
43513 {&hf_ieee80211_addr_staa_oui_resolved,
43514 {"STA OUI (resolved)", "wlan.staa.oui_resolved",
43515 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43516 "STA Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43517
43518 { &hf_ieee80211_addr_staa_lg,
43519 { "LG bit", "wlan.staa.lg",
43520 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43521 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43522
43523 { &hf_ieee80211_addr_staa_ig,
43524 { "IG bit", "wlan.staa.ig",
43525 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43526 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43527
43528 {&hf_ieee80211_frag_number,
43529 {"Fragment number", "wlan.frag",
43530 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F,
43531 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43532
43533 {&hf_ieee80211_seq_number,
43534 {"Sequence number", "wlan.seq",
43535 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFF0,
43536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43537
43538 {&hf_ieee80211_mesh_control_field,
43539 {"Mesh Control Field", "wlan.mesh.control_field",
43540 FT_NONE, BASE_NONE, NULL((void*)0), 0,
43541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43542
43543 {&hf_ieee80211_qos,
43544 {"Qos Control", "wlan.qos",
43545 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
43546 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43547
43548 {&hf_ieee80211_qos_tid,
43549 {"TID", "wlan.qos.tid",
43550 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F,
43551 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43552
43553 {&hf_ieee80211_qos_priority,
43554 {"Priority", "wlan.qos.priority",
43555 FT_UINT16, BASE_DEC, VALS(ieee80211_qos_tags_acs)((0 ? (const struct _value_string*)0 : ((ieee80211_qos_tags_acs
))))
, 0x0007,
43556 "802.1D Tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43557
43558 {&hf_ieee80211_qos_eosp,
43559 {"EOSP", "wlan.qos.eosp",
43560 FT_BOOLEAN, 16, TFS(&eosp_flag)((0 ? (const struct true_false_string*)0 : ((&eosp_flag))
))
, QOS_FLAG_EOSP0x0010,
43561 "EOSP Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43562
43563 {&hf_ieee80211_qos_bit4,
43564 {"QoS bit 4", "wlan.qos.bit4",
43565 FT_BOOLEAN, 16, TFS(&bit4_flag)((0 ? (const struct true_false_string*)0 : ((&bit4_flag))
))
, QOS_FLAG_EOSP0x0010,
43566 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43567
43568 {&hf_ieee80211_qos_ack_policy,
43569 {"Ack Policy", "wlan.qos.ack",
43570 FT_UINT16, BASE_HEX, VALS(ack_policy)((0 ? (const struct _value_string*)0 : ((ack_policy)))), 0x0060,
43571 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43572
43573 {&hf_ieee80211_qos_amsdu_present,
43574 {"Payload Type", "wlan.qos.amsdupresent",
43575 FT_BOOLEAN, 16, TFS(&ieee80211_qos_amsdu_present_flag)((0 ? (const struct true_false_string*)0 : ((&ieee80211_qos_amsdu_present_flag
))))
, 0x0080,
43576 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43577
43578 {&hf_ieee80211_qos_txop_limit,
43579 {"TXOP Limit", "wlan.qos.txop_limit",
43580 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
43581 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43582
43583 {&hf_ieee80211_qos_ps_buf_state,
43584 {"QAP PS Buffer State", "wlan.qos.ps_buf_state",
43585 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00,
43586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43587
43588 {&hf_ieee80211_qos_buf_state_indicated,
43589 {"Buffer State Indicated", "wlan.qos.buf_state_indicated",
43590 FT_BOOLEAN, 16, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x0200,
43591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43592
43593 {&hf_ieee80211_qos_highest_pri_buf_ac,
43594 {"Highest-Priority Buffered AC", "wlan.qos.highest_pri_buf_ac",
43595 FT_UINT16, BASE_DEC, VALS(wme_acs)((0 ? (const struct _value_string*)0 : ((wme_acs)))), 0x0C00,
43596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43597
43598 {&hf_ieee80211_qos_qap_buf_load,
43599 {"QAP Buffered Load", "wlan.qos.qap_buf_load",
43600 FT_UINT16, BASE_DEC, NULL((void*)0), 0xF000,
43601 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43602
43603 {&hf_ieee80211_qos_txop_dur_req,
43604 {"TXOP Duration Requested", "wlan.qos.txop_dur_req",
43605 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
43606 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43607
43608 {&hf_ieee80211_qos_queue_size,
43609 {"Queue Size", "wlan.qos.queue_size",
43610 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
43611 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43612
43613 {&hf_ieee80211_qos_mesh_ctl_present,
43614 {"Mesh Control Present", "wlan.qos.mesh_ctl_present",
43615 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0100,
43616 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43617
43618 {&hf_ieee80211_qos_mesh_ps_rsvd,
43619 {"Mesh Power Save Level (reserved)", "wlan.qos.mesh_ps.reserved",
43620 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0200,
43621 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43622
43623 {&hf_ieee80211_qos_mesh_ps_unicast,
43624 {"Mesh Power Save Level (for the receiving peer)", "wlan.qos.mesh_ps.unicast",
43625 FT_BOOLEAN, 16, TFS(&ieee80211_qos_mesh_ps)((0 ? (const struct true_false_string*)0 : ((&ieee80211_qos_mesh_ps
))))
, 0x0200,
43626 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43627
43628 {&hf_ieee80211_qos_mesh_ps_multicast,
43629 {"Mesh Power Save Level (for all receiving peers)", "wlan.qos.mesh_ps.multicast",
43630 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,
43631 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43632
43633 {&hf_ieee80211_qos_mesh_rspi,
43634 {"Receiver Service Period Initiated (RSPI)", "wlan.qos.mesh_rspi",
43635 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0400,
43636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43637
43638 {&hf_ieee80211_fcs,
43639 {"Frame check sequence", "wlan.fcs",
43640 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43641 "Frame Check Sequence (FCS)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43642
43643 {&hf_ieee80211_fcs_status,
43644 {"FCS Status", "wlan.fcs.status",
43645 FT_UINT8, BASE_NONE, VALS(proto_checksum_vals)((0 ? (const struct _value_string*)0 : ((proto_checksum_vals)
)))
, 0x0,
43646 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43647
43648 {&hf_ieee80211_fragment_overlap,
43649 {"Fragment overlap", "wlan.fragment.overlap",
43650 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43651 "Fragment overlaps with other fragments", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43652
43653 {&hf_ieee80211_fragment_overlap_conflict,
43654 {"Conflicting data in fragment overlap", "wlan.fragment.overlap.conflict",
43655 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43656 "Overlapping fragments contained conflicting data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43657
43658 {&hf_ieee80211_fragment_multiple_tails,
43659 {"Multiple tail fragments found", "wlan.fragment.multipletails",
43660 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43661 "Several tails were found when defragmenting the packet", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43662
43663 {&hf_ieee80211_fragment_too_long_fragment,
43664 {"Fragment too long", "wlan.fragment.toolongfragment",
43665 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43666 "Fragment contained data past end of packet", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43667
43668 {&hf_ieee80211_fragment_error,
43669 {"Defragmentation error", "wlan.fragment.error",
43670 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43671 "Defragmentation error due to illegal fragments", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43672
43673 {&hf_ieee80211_fragment_count,
43674 {"Fragment count", "wlan.fragment.count",
43675 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
43676 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43677
43678 {&hf_ieee80211_fragment,
43679 {"802.11 Fragment", "wlan.fragment",
43680 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43681 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43682
43683 {&hf_ieee80211_fragments,
43684 {"802.11 Fragments", "wlan.fragments",
43685 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
43686 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43687
43688 {&hf_ieee80211_reassembled_in,
43689 {"Reassembled 802.11 in frame", "wlan.reassembled_in",
43690 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43691 "This 802.11 packet is reassembled in this frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43692
43693 {&hf_ieee80211_reassembled_length,
43694 {"Reassembled 802.11 length", "wlan.reassembled.length",
43695 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
43696 "The total length of the reassembled payload", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43697
43698 {&hf_ieee80211_wep_iv,
43699 {"Initialization Vector", "wlan.wep.iv",
43700 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
43701 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43702
43703 {&hf_ieee80211_wep_iv_weak,
43704 {"Weak IV", "wlan.wep.weakiv",
43705 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43706 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
43707
43708 {&hf_ieee80211_tkip_extiv,
43709 {"TKIP Ext. Initialization Vector", "wlan.tkip.extiv",
43710 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43711 "TKIP Extended Initialization Vector", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43712
43713 {&hf_ieee80211_ccmp_extiv,
43714 {"CCMP Ext. Initialization Vector", "wlan.ccmp.extiv",
43715 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43716 "CCMP Extended Initialization Vector", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43717
43718 {&hf_ieee80211_wep_key,
43719 {"Key Index", "wlan.wep.key",
43720 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
43721 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43722
43723 {&hf_ieee80211_wep_icv,
43724 {"WEP ICV", "wlan.wep.icv",
43725 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43726 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43727
43728 {&hf_ieee80211_fc_analysis_pmk,
43729 {"PMK", "wlan.analysis.pmk",
43730 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43731 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43732
43733 {&hf_ieee80211_fc_analysis_kck,
43734 {"KCK", "wlan.analysis.kck",
43735 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43736 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43737
43738 {&hf_ieee80211_fc_analysis_kek,
43739 {"KEK", "wlan.analysis.kek",
43740 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43741 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43742
43743 {&hf_ieee80211_fc_analysis_tk,
43744 {"TK", "wlan.analysis.tk",
43745 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43746 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43747
43748 {&hf_ieee80211_fc_analysis_gtk,
43749 {"GTK", "wlan.analysis.gtk",
43750 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43751 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43752
43753 {&hf_ieee80211_mgt,
43754 {"IEEE 802.11 Wireless Management", "wlan.mgt",
43755 FT_PROTOCOL, BASE_NONE, NULL((void*)0), 0x0,
43756 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43757
43758 {&hf_ieee80211_block_ack_control,
43759 {"Block Ack Control", "wlan.ba.control",
43760 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
43761 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43762
43763 {&hf_ieee80211_block_ack_control_ack_policy,
43764 {"BA Ack Policy", "wlan.ba.control.ackpolicy",
43765 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,
43766 "Block Ack Request (BAR) Ack Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43767
43768 {&hf_ieee80211_block_ack_control_type,
43769 {"BA Type", "wlan.ba.control.ba_type",
43770 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) }},
43771
43772 {&hf_ieee80211_block_ack_control_reserved,
43773 {"Reserved", "wlan.ba.control.reserved",
43774 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0fe0,
43775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43776
43777 {&hf_ieee80211_block_ack_control_tid_info,
43778 {"TID for which a Basic BlockAck frame is requested", "wlan.ba.basic.tidinfo",
43779 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
43780 "Traffic Identifier (TID) for which a Basic BlockAck frame is requested", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43781
43782 {&hf_ieee80211_block_ack_multi_sta_aid11,
43783 {"AID11", "wlan.ba.multi_sta.aid11",
43784 FT_UINT16, BASE_HEX, NULL((void*)0), 0x07ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43785
43786 {&hf_ieee80211_block_ack_multi_sta_ack_type,
43787 {"Ack Type", "wlan.ba.multi_sta.ack_type",
43788 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43789
43790 {&hf_ieee80211_block_ack_multi_sta_tid,
43791 {"TID", "wlan.ba.multi_sta.tid",
43792 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43793
43794 {&hf_ieee80211_block_ack_multi_sta_aid_tid,
43795 {"AID TID Info", "wlan.ba.multi_sta.aid_tid_info",
43796 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43797
43798 {&hf_ieee80211_block_ack_multi_sta_reserved,
43799 {"Reserved", "wlan.ba.multi_sta.reserved",
43800 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43801
43802 {&hf_ieee80211_block_ack_multi_sta_ra,
43803 {"RA", "wlan.ba.multi_sta.ra",
43804 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43805
43806 {&hf_ieee80211_block_ack_multi_tid_reserved,
43807 {"Reserved", "wlan.bar.mtid.tidinfo.reserved",
43808 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0fff,
43809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43810
43811 {&hf_ieee80211_block_ack_multi_tid_value,
43812 {"Multi-TID Value", "wlan.bar.mtid.tidinfo.value",
43813 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
43814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43815
43816 {&hf_ieee80211_block_ack_bitmap,
43817 {"Block Ack Bitmap", "wlan.ba.bm",
43818 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
43819 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43820
43821 /* Used for Extended compressed BlockAck */
43822 {&hf_ieee80211_block_ack_RBUFCAP,
43823 {"Block Ack RBUFCAP", "wlan.ba.RBUFCAP",
43824 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0,
43825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43826
43827 {&hf_ieee80211_block_ack_bitmap_missing_frame,
43828 {"Not acknowledged frame", "wlan.ba.bm.missing_frame",
43829 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
43830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43831
43832 {&hf_ieee80211_block_ack_bitmap_last_ack_frame,
43833 {"Last acknowledged frame", "wlan.ba.bm.last_ack_frame",
43834 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
43835 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43836
43837 {&hf_ieee80211_block_ack_gcr_addr,
43838 {"GCR Group Address", "wlan.ba.gcr_group_addr",
43839 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43840
43841 {&hf_ieee80211_beamform_feedback_seg_retrans_bitmap,
43842 {"Feedback segment Retransmission Bitmap", "wlan.beamform.feedback_seg_retrans_bitmap",
43843 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
43844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43845
43846 {&hf_ieee80211_ndp_annc_token,
43847 {"Sounding Dialog Token", "wlan.ndp.token",
43848 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
43849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43850
43851 {&hf_ieee80211_ndp_annc_variant,
43852 {"NDP Announcement Variant", "wlan.ndp.token.variant",
43853 FT_UINT8, BASE_HEX, VALS(ndp_annc_variant_vals)((0 ? (const struct _value_string*)0 : ((ndp_annc_variant_vals
))))
, 0x03,
43854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43855
43856 {&hf_ieee80211_ndp_annc_token_number,
43857 {"Sounding Dialog Token", "wlan.ndp.token.number",
43858 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
43859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43860
43861 {&hf_ieee80211_vht_ndp_annc_sta_info_aid12,
43862 {"AID12", "wlan.vht_ndp.sta_info.aid12",
43863 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0FFF,
43864 "12 least significant bits of the AID of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43865
43866 {&hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
43867 {"Feedback Type", "wlan.vht_ndp.sta_info.feedback_type",
43868 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,
43869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43870
43871 {&hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
43872 {"Nc Index", "wlan.vht_ndp.sta_info.nc_index",
43873 FT_UINT16, BASE_DEC, VALS(num_plus_one_3bit_flag)((0 ? (const struct _value_string*)0 : ((num_plus_one_3bit_flag
))))
, 0xE000,
43874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43875
43876 {&hf_ieee80211_vht_ndp_annc_sta_info_reserved,
43877 {"Reserved", "wlan.vht_ndp.sta_info.reserved",
43878 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE000,
43879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43880
43881 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008,
43882 {"STA Info, AID11 < 2008", "wlan.vht_ndp.sta_info.ranging_2008",
43883 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43885
43886 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_aid11,
43887 {"AID11", "wlan.vht_ndp.sta_info.ranging_2008.aid11",
43888 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 0)(((1U << ((10) - (0) + 1)) - 1) << (0)),
43889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43890
43891 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_ltf_offset,
43892 {"LTF Offset", "wlan.vht_ndp.sta_info.ranging_2008.ltf_offset",
43893 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(16, 11)(((1U << ((16) - (11) + 1)) - 1) << (11)),
43894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43895
43896 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_n_sts,
43897 {"R2I N STS", "wlan.vht_ndp.sta_info.ranging_2008.r2i_n_sts",
43898 FT_UINT32, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK(19, 17)(((1U << ((19) - (17) + 1)) - 1) << (17)),
43899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43900
43901 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_rep,
43902 {"R2I Rep", "wlan.vht_ndp.sta_info.ranging_2008.r2i_rep",
43903 FT_UINT32, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(22, 20)(((1U << ((22) - (20) + 1)) - 1) << (20)),
43904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43905
43906 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_n_sts,
43907 {"I2R N STS", "wlan.vht_ndp.sta_info.ranging_2008.i2r_n_sts",
43908 FT_UINT32, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK(25, 23)(((1U << ((25) - (23) + 1)) - 1) << (23)),
43909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43910
43911 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved1,
43912 {"Reserved", "wlan.vht_ndp.sta_info.ranging_2008.reserved1",
43913 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(26, 26)(((1U << ((26) - (26) + 1)) - 1) << (26)),
43914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43915
43916 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_disambiguation,
43917 {"Disambiguation", "wlan.vht_ndp.sta_info.ranging_2008.disambiguation",
43918 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
43919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43920
43921 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_rep,
43922 {"I2R Rep", "wlan.vht_ndp.sta_info.ranging_2008.i2r_rep",
43923 FT_UINT32, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(30, 28)(((1U << ((30) - (28) + 1)) - 1) << (28)),
43924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43925
43926 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved2,
43927 {"Reserved", "wlan.vht_ndp.sta_info.ranging_2008.reserved2",
43928 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(31, 31)(((1U << ((31) - (31) + 1)) - 1) << (31)),
43929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43930
43931 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043,
43932 {"STA Info, AID11 == 2043", "wlan.sta_info_ranging_2043",
43933 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43935
43936 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_aid11,
43937 {"AID11", "wlan.sta_info_ranging_2043.aid11",
43938 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 1)(((1U << ((10) - (1) + 1)) - 1) << (1)),
43939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43940
43941 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_sac,
43942 {"SAC", "wlan.sta_info_ranging_2043.sac",
43943 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(26, 11)(((1U << ((26) - (11) + 1)) - 1) << (11)),
43944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43945
43946 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_disambiguation,
43947 {"Disambiguation", "wlan.sta_info_ranging_2043.disambiguation",
43948 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
43949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43950
43951 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_reserved,
43952 {"Reserved", "wlan.sta_info_ranging_2043.reserved",
43953 FT_UINT32, BASE_HEX, NULL((void*)0), GENMASK(31, 28)(((1U << ((31) - (28) + 1)) - 1) << (28)),
43954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43955
43956 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044,
43957 {"STA Info, AID11 == 2044", "wlan.sta_info_ranging_2044",
43958 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43960
43961 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_aid11,
43962 {"AID11", "wlan.sta_info_ranging_2044.aid11",
43963 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 1)(((1U << ((10) - (1) + 1)) - 1) << (1)),
43964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43965
43966 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_partial_tsf,
43967 {"Partial TSF", "wlan.sta_info_ranging_2044.partial_tsf",
43968 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)),
43969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43970
43971 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_disambiguation,
43972 {"Disambiguation", "wlan.sta_info_ranging_2044.disambiguation",
43973 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
43974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43975
43976 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_reserved,
43977 {"Reserved", "wlan.sta_info_ranging_2044.reserved",
43978 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(28, 28)(((1U << ((28) - (28) + 1)) - 1) << (28)),
43979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43980
43981 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_token,
43982 {"Token", "wlan.sta_info_ranging_2044.token",
43983 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(31, 29)(((1U << ((31) - (29) + 1)) - 1) << (29)),
43984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43985
43986 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045,
43987 {"STA Info Ranging, AID11 == 2045", "wlan.sta_info_ranging_2045",
43988 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43990
43991 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_aid11,
43992 {"AID11", "wlan.sta_info_ranging_2045.aid11",
43993 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 1)(((1U << ((10) - (1) + 1)) - 1) << (1)),
43994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43995
43996 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_i2r_ndp_tx_power,
43997 {"I2R NDP Tx Power", "wlan.sta_info_ranging_2045.i2r_ndp_tx_power",
43998 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(18, 11)(((1U << ((18) - (11) + 1)) - 1) << (11)),
43999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44000
44001 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_r2i_ndp_target_rssi,
44002 {"R2I NDP Target RSSI", "wlan.sta_info_ranging_2045.r2i_ndp_target_rssi",
44003 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(26, 19)(((1U << ((26) - (19) + 1)) - 1) << (19)),
44004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44005
44006 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_disambiguation,
44007 {"Disambiguation", "wlan.sta_info_ranging_2045.disambiguation",
44008 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
44009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44010
44011 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_reserved,
44012 {"Reserved", "wlan.sta_info_ranging_2045.reserved",
44013 FT_UINT32, BASE_HEX, NULL((void*)0), GENMASK(31, 28)(((1U << ((31) - (28) + 1)) - 1) << (28)),
44014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44015
44016 {&hf_ieee80211_ndp_eht_annc_sta_info,
44017 {"STA Info", "wlan.ndp_eht.sta_info",
44018 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44019
44020 {&hf_ieee80211_ndp_eht_annc_aid11,
44021 {"AID11", "wlan.ndp_eht.sta_info.aid11",
44022 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000007ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44023
44024 {&hf_ieee80211_ndp_eht_annc_resolution,
44025 {"Resolution", "wlan.ndp_eht.sta_info.resolution",
44026 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44027
44028 {&hf_ieee80211_ndp_eht_annc_feedback_map,
44029 {"Feedback Bitmap", "wlan.ndp_eht.sta_info.feedback_bitmap",
44030 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000ff000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44031
44032 {&hf_ieee80211_ndp_eht_annc_reserved1,
44033 {"Reserved", "wlan.ndp_eht.sta_info.reserved1",
44034 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44035
44036 {&hf_ieee80211_ndp_eht_annc_nc_index,
44037 {"Nc Index", "wlan.ndp_eht.sta_info.nc_index",
44038 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44039
44040 {&hf_ieee80211_ndp_eht_annc_feedback_type,
44041 {"Feedback Type And Ng", "wlan.ndp_eht.sta_info.feedback_type_and_ng",
44042 FT_UINT32, BASE_HEX, NULL((void*)0), 0x06000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44043
44044 {&hf_ieee80211_ndp_eht_annc_disambiguation,
44045 {"Disambiguation", "wlan.ndp_eht.sta_info.disambiguation",
44046 FT_UINT32, BASE_HEX, NULL((void*)0), 0x08000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44047
44048 {&hf_ieee80211_ndp_eht_annc_codebook_size,
44049 {"Codebook Size", "wlan.ndp_eht.sta_info.codebook_size",
44050 FT_UINT32, BASE_HEX, NULL((void*)0), 0x10000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44051
44052 {&hf_ieee80211_ndp_eht_annc_reserved2,
44053 {"Reserved", "wlan.ndp_eht.sta_info.reserved2",
44054 FT_UINT32, BASE_HEX, NULL((void*)0), 0xe0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44055
44056 {&hf_ieee80211_data_encap_payload_type,
44057 {"Payload Type", "wlan.data_encap.payload_type",
44058 FT_UINT8, BASE_DEC, VALS(ieee80211_data_encap_payload_types)((0 ? (const struct _value_string*)0 : ((ieee80211_data_encap_payload_types
))))
, 0,
44059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44060
44061 {&hf_ieee80211_ff_tdls_action_code,
44062 {"Action code", "wlan.fixed.action_code",
44063 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tdls_action_codes_ext, 0,
44064 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44065
44066 {&hf_ieee80211_ff_target_channel,
44067 {"Target Channel", "wlan.fixed.target_channel",
44068 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44070
44071 {&hf_ieee80211_ff_operating_class,
44072 {"Operating Class", "wlan.fixed.operating_class",
44073 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44075
44076 {&hf_ieee80211_ff_channel,
44077 {"Channel", "wlan.fixed.channel",
44078 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44080
44081 {&hf_ieee80211_ff_wnm_action_code,
44082 {"Action code", "wlan.fixed.action_code",
44083 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &wnm_action_codes_ext, 0,
44084 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44085
44086 {&hf_ieee80211_ff_unprotected_wnm_action_code,
44087 {"Action code", "wlan.fixed.action_code",
44088 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &unprotected_wnm_action_codes_ext, 0,
44089 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44090
44091 {&hf_ieee80211_ff_key_data,
44092 {"Key Data", "wlan.fixed.key_data",
44093 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44094
44095 {&hf_ieee80211_ff_key_data_length,
44096 {"Key Data Length", "wlan.fixed.key_data_length",
44097 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44098
44099 {&hf_ieee80211_ff_wnm_notification_type,
44100 {"WNM-Notification type", "wlan.fixed.wnm_notification_type",
44101 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &wnm_notification_types_ext, 0,
44102 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44103
44104 {&hf_ieee80211_ff_wnm_notification_response_status,
44105 {"Response Status", "wlan.fixed.wnm_notification_response_status",
44106 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(wnm_notification_response_code)((0 ? (const struct _range_string*)0 : ((wnm_notification_response_code
))))
, 0,
44107 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44108
44109 {&hf_ieee80211_ff_rm_action_code,
44110 {"Action code", "wlan.fixed.action_code",
44111 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &rm_action_codes_ext, 0,
44112 "Radio Measurement Action", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44113
44114 {&hf_ieee80211_ff_rm_dialog_token,
44115 {"Dialog token", "wlan.rm.dialog_token",
44116 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44117 "Non-zero Dialog Token identifies request/report transaction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44118
44119 {&hf_ieee80211_ff_rm_repetitions,
44120 {"Repetitions", "wlan.rm.repetitions",
44121 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
44122 "Number of Repetitions, 65535 indicates repeat until cancellation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44123
44124 {&hf_ieee80211_ff_rm_tx_power,
44125 {"Transmit Power Used", "wlan.rm.tx_power",
44126 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
44127 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44128
44129 {&hf_ieee80211_ff_rm_max_tx_power,
44130 {"Max Transmit Power", "wlan.rm.max_tx_power",
44131 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
44132 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44133
44134 {&hf_ieee80211_ff_tpc,
44135 {"TPC Report", "wlan.rm.tpc",
44136 FT_NONE, BASE_NONE, NULL((void*)0), 0,
44137 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44138
44139 {&hf_ieee80211_ff_tpc_element_id,
44140 {"TPC Element ID", "wlan.rm.tpc.element_id",
44141 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44142 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44143
44144 {&hf_ieee80211_ff_tpc_length,
44145 {"TPC Length", "wlan.rm.tpc.length",
44146 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44147 "Length of TPC Report element (always 2)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44148
44149 {&hf_ieee80211_ff_tpc_tx_power,
44150 {"TPC Transmit Power", "wlan.rm.tpc.tx_power",
44151 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
44152 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44153
44154 {&hf_ieee80211_ff_tpc_link_margin,
44155 {"TPC Link Margin", "wlan.rm.tpc.link_margin",
44156 FT_INT8, BASE_DEC, NULL((void*)0), 0,
44157 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44158
44159 {&hf_ieee80211_ff_rm_rx_antenna_id,
44160 {"Receive Antenna ID", "wlan.rm.rx_antenna_id",
44161 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44162 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44163
44164 {&hf_ieee80211_ff_rm_tx_antenna_id,
44165 {"Transmit Antenna ID", "wlan.rm.tx_antenna_id",
44166 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44167 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44168
44169 {&hf_ieee80211_ff_rm_rcpi,
44170 {"Received Channel Power", "wlan.rm.rcpi",
44171 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44172 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44173
44174 {&hf_ieee80211_ff_rm_rsni,
44175 {"Received Signal to noise indication", "wlan.rm.rsni",
44176 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44177 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44178
44179 {&hf_ieee80211_ff_request_mode_pref_cand,
44180 {"Preferred Candidate List Included", "wlan.fixed.request_mode.pref_cand",
44181 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
44182 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44183
44184 {&hf_ieee80211_ff_request_mode_abridged,
44185 {"Abridged", "wlan.fixed.request_mode.abridged",
44186 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
44187 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44188
44189 {&hf_ieee80211_ff_request_mode_disassoc_imminent,
44190 {"Disassociation Imminent", "wlan.fixed.request_mode.disassoc_imminent",
44191 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
44192 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44193
44194 {&hf_ieee80211_ff_request_mode_bss_term_included,
44195 {"BSS Termination Included", "wlan.fixed.request_mode.bss_term_included",
44196 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
44197 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44198
44199 {&hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
44200 {"ESS Disassociation Imminent", "wlan.fixed.request_mode.ess_disassoc_imminent",
44201 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
44202 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44203
44204 {&hf_ieee80211_ff_request_mode_link_removal_imminent,
44205 {"Link Removal Imminent", "wlan.fixed.request_mode.link_removal_imminent",
44206 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
44207 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44208
44209 {&hf_ieee80211_ff_request_mode_reserved,
44210 {"Reserved", "wlan.fixed.request_mode.reserved",
44211 FT_UINT8, BASE_HEX, NULL((void*)0), 0xc0,
44212 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44213
44214 {&hf_ieee80211_ff_disassoc_timer,
44215 {"Disassociation Timer", "wlan.fixed.disassoc_timer",
44216 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
44217 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44218
44219 {&hf_ieee80211_ff_bss_termination_delay,
44220 {"BSS Termination Delay", "wlan.fixed.bss_termination_delay",
44221 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44222 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44223
44224 {&hf_ieee80211_ff_bss_transition_status_code,
44225 {"BSS Transition Status Code", "wlan.fixed.bss_transition_status_code",
44226 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44227 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44228
44229 {&hf_ieee80211_ff_validity_interval,
44230 {"Validity Interval", "wlan.fixed.validity_interval",
44231 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44232 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44233
44234 {&hf_ieee80211_ff_url_len,
44235 {"Session Information URL Length",
44236 "wlan.fixed.session_information.url_length",
44237 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44238 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44239
44240 {&hf_ieee80211_ff_url,
44241 {"Session Information URL", "wlan.fixed.session_information.url",
44242 FT_STRING, BASE_NONE, NULL((void*)0), 0,
44243 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44244
44245 {&hf_ieee80211_ff_target_bss,
44246 {"BSS Transition Target BSS", "wlan.fixed.bss_transition_target_bss",
44247 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44248 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44249
44250 {&hf_ieee80211_ff_bss_transition_query_reason,
44251 {"BSS Transition Query Reason", "wlan.fixed.bss_transition_query_reason",
44252 FT_UINT8, BASE_DEC, VALS(ieee80211_transition_reasons)((0 ? (const struct _value_string*)0 : ((ieee80211_transition_reasons
))))
, 0,
44253 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44254
44255 {&hf_ieee80211_ff_bss_transition_candidate_list_entries,
44256 {"BSS Transition Candidate List Entries", "wlan.fixed.bss_transition_candidate_list_entries",
44257 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
44258 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44259
44260/* 802.11ai */
44261
44262 {&hf_ieee80211_ff_fils_discovery_frame_control,
44263 {"Frame Control", "wlan.fils_discovery.frame_control",
44264 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
44265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44266
44267 {&hf_ieee80211_ff_fils_discovery_frame_control_ssid_length,
44268 {"SSID Length", "wlan.fils_discovery.frame_control.ssid_length",
44269 FT_UINT16, BASE_HEX, NULL((void*)0), PA_FILS_FC_SSID_LENGTH0x001F,
44270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44271
44272 {&hf_ieee80211_ff_fils_discovery_frame_control_capability,
44273 {"Capability", "wlan.fils_discovery.frame_control.capability",
44274 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_CAPABILITY0x0020,
44275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44276
44277 {&hf_ieee80211_ff_fils_discovery_frame_control_short_ssid,
44278 {"Short SSID", "wlan.fils_discovery.frame_control.short_ssid",
44279 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_SHORT_SSID0x0040,
44280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44281
44282 {&hf_ieee80211_ff_fils_discovery_frame_control_ap_csn,
44283 {"AP-CSN", "wlan.fils_discovery.frame_control.ap_csn",
44284 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_AP_CSN0x0080,
44285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44286
44287 {&hf_ieee80211_ff_fils_discovery_frame_control_ano,
44288 {"ANO", "wlan.fils_discovery.frame_control.ano",
44289 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_ANO0x0100,
44290 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44291
44292 {&hf_ieee80211_ff_fils_discovery_frame_control_channel_center_frequency,
44293 {"Channel Center Frequency Segment 1", "wlan.fils_discovery.frame_control.channel_center_frequency",
44294 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_CCFS10x0200,
44295 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44296
44297 {&hf_ieee80211_ff_fils_discovery_frame_control_primary_channel,
44298 {"Primary Channel", "wlan.fils_discovery.frame_control.primary_channel",
44299 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_PC0x0400,
44300 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44301
44302 {&hf_ieee80211_ff_fils_discovery_frame_control_rsn_info,
44303 {"RSN Info", "wlan.fils_discovery.frame_control.rsn_info",
44304 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_RSN_INFO0x0800,
44305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44306
44307 {&hf_ieee80211_ff_fils_discovery_frame_control_length,
44308 {"Length", "wlan.fils_discovery.frame_control.length",
44309 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_LENGTH0x1000,
44310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44311
44312 {&hf_ieee80211_ff_fils_discovery_frame_control_md,
44313 {"MD", "wlan.fils_discovery.frame_control.md",
44314 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_MD0x2000,
44315 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44316
44317 {&hf_ieee80211_ff_fils_discovery_frame_control_reserved,
44318 {"Reserved", "wlan.fils_discovery.frame_control.reserved",
44319 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_RESERVED0xC000,
44320 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44321
44322 {&hf_ieee80211_ff_fils_discovery_ssid,
44323 {"SSID", "wlan.fils_discovery.ssid_length",
44324 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
44325 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44326
44327 {&hf_ieee80211_ff_fils_discovery_capability,
44328 {"Capability", "wlan.fils_discovery.capability",
44329 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
44330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44331
44332 {&hf_ieee80211_ff_fils_discovery_capability_ess,
44333 {"ESS", "wlan.fils_discovery.capability.ess",
44334 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001,
44335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44336
44337 {&hf_ieee80211_ff_fils_discovery_capability_privacy,
44338 {"Privacy", "wlan.fils_discovery.capability.privacy",
44339 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0002,
44340 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44341
44342 {&hf_ieee80211_ff_fils_discovery_capability_bss_operating_channel_width,
44343 {"BSS Operating Channel width", "wlan.fils_discovery.capability.bss_operating_channel_width",
44344 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,
44345 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44346
44347 {&hf_ieee80211_ff_fils_discovery_capability_max_number_of_spatial_streams,
44348 {"Maximum Number of Spatial Streams", "wlan.fils_discovery.maximum_number_of_spatial_streams",
44349 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,
44350 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44351
44352 {&hf_ieee80211_ff_fils_discovery_capability_reserved,
44353 {"Reserved", "wlan.fils_discovery.capability.reserved",
44354 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0100,
44355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44356
44357 {&hf_ieee80211_ff_fils_discovery_capability_multiple_bssid,
44358 {"Multiple BSSID", "wlan.fils_discovery.capability.multiple_bssid",
44359 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0200,
44360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44361
44362 {&hf_ieee80211_ff_fils_discovery_capability_phy_index,
44363 {"PHY Index", "wlan.fils_discovery.capability.phy_index",
44364 FT_UINT16, BASE_HEX, VALS(fils_discovery_capability_phy_index)((0 ? (const struct _value_string*)0 : ((fils_discovery_capability_phy_index
))))
, 0x1C00,
44365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44366
44367 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_dsss,
44368 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44369 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,
44370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44371
44372 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ofdm,
44373 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44374 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,
44375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44376
44377 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ht_vht_tvht,
44378 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44379 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,
44380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44381
44382 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_he,
44383 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44384 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,
44385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44386
44387 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate,
44388 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44389 FT_UINT16, BASE_HEX, NULL((void*)0), 0xE000,
44390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44391
44392 {&hf_ieee80211_ff_fils_discovery_short_ssid,
44393 {"Short SSID", "wlan.fils_discovery.short_ssid",
44394 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
44395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44396
44397 {&hf_ieee80211_ff_fils_discovery_ap_csn,
44398 {"AP Configuration Sequence Number", "wlan.fils_discovery.ap_csn",
44399 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44401
44402 {&hf_ieee80211_ff_fils_discovery_ano,
44403 {"Access Network Options", "wlan.fils_discovery.ano",
44404 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
44405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44406
44407 {&hf_ieee80211_ff_fils_discovery_ccfs1,
44408 {"Channel Center Frequency Segment 1", "wlan.fils_discovery.channel_center_frequency",
44409 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
44410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44411
44412 {&hf_ieee80211_ff_fils_discovery_operating_class,
44413 {"Operating Class", "wlan.fils_discovery.operating_class",
44414 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44416
44417 {&hf_ieee80211_ff_fils_discovery_primary_channel,
44418 {"Primary Channel", "wlan.fils_discovery.primary_channel",
44419 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44421
44422 {&hf_ieee80211_ff_fils_discovery_rsn_info,
44423 {"RSN Info", "wlan.fils_discovery.rsn_info",
44424 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
44425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44426
44427 {&hf_ieee80211_ff_fils_discovery_length,
44428 {"Length", "wlan.fils_discovery.length",
44429 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44431
44432 {&hf_ieee80211_ff_fils_discovery_md,
44433 {"MD", "wlan.fils_discovery.md",
44434 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
44435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44436
44437/* 802.11ad */
44438 {&hf_ieee80211_cf_response_offset,
44439 {"Response Offset", "wlan.res_offset",
44440 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
44441 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44442
44443 {&hf_ieee80211_grant_ack_reserved,
44444 {"Reserved", "wlan.grant_ack.reserved",
44445 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
44446 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44447
44448 {&hf_ieee80211_ff_dynamic_allocation,
44449 {"Dynamic Allocation", "wlan.dynamic_allocation",
44450 FT_UINT40, BASE_HEX, NULL((void*)0), 0,
44451 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44452
44453 {&hf_ieee80211_ff_TID,
44454 {"TID", "wlan.dynamic_allocation.tid",
44455 FT_UINT40, BASE_DEC, NULL((void*)0), 0x000000000F,
44456 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44457
44458 {&hf_ieee80211_ff_alloc_type,
44459 {"Allocation Type", "wlan.dynamic_allocation.alloc_type",
44460 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000070,
44461 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44462
44463 {&hf_ieee80211_ff_src_aid,
44464 {"Source AID", "wlan.dynamic_allocation.src_aid",
44465 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000007F80,
44466 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44467
44468 {&hf_ieee80211_ff_dest_aid,
44469 {"Destination AID", "wlan.dynamic_allocation.dest_aid",
44470 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00007f8000,
44471 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44472
44473 {&hf_ieee80211_ff_alloc_duration,
44474 {"Allocation Duration", "wlan.dynamic_allocation.alloc_duration",
44475 FT_UINT40, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (size_t) (allocation_duration_base_custom)), 0x7FFF800000,
44476 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44477
44478 {&hf_ieee80211_ff_b39,
44479 {"Reserved (b39)", "wlan.dynamic_allocation.b39",
44480 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000,
44481 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44482
44483 {&hf_ieee80211_ff_ssw,
44484 {"Sector Sweep", "wlan.ssw",
44485 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
44486 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44487
44488 {&hf_ieee80211_ff_ssw_direction,
44489 {"Sector Sweep Direction", "wlan.ssw.direction",
44490 FT_BOOLEAN, 24, TFS(&ieee80211_cf_ssw_direction)((0 ? (const struct true_false_string*)0 : ((&ieee80211_cf_ssw_direction
))))
, 0x000001,
44491 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
44492
44493 {&hf_ieee80211_ff_ssw_cdown,
44494 {"Sector Sweep CDOWN", "wlan.ssw.cdown",
44495 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0003fe,
44496 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44497
44498 {&hf_ieee80211_ff_ssw_sector_id,
44499 {"Sector Sweep Sector ID", "wlan.ssw.sector_id",
44500 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00fc00,
44501 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44502
44503 {&hf_ieee80211_ff_ssw_dmg_ant_id,
44504 {"Sector Sweep DMG Antenna ID", "wlan.ssw.dmg_ant_id",
44505 FT_UINT24, BASE_DEC, NULL((void*)0), 0x030000,
44506 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44507
44508 {&hf_ieee80211_ff_ssw_rxss_len,
44509 {"Sector Sweep RXSS Length", "wlan.ssw.rxss_len",
44510 FT_UINT24, BASE_DEC, NULL((void*)0), 0xfc0000,
44511 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44512
44513 {&hf_ieee80211_ff_bf,
44514 {"Beam Forming", "wlan.bf",
44515 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
44516 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44517
44518 {&hf_ieee80211_ff_bf_train,
44519 {"Beam Forming Training", "wlan.bf.train",
44520 FT_BOOLEAN, 16, NULL((void*)0), 0x0001,
44521 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44522
44523 {&hf_ieee80211_ff_bf_is_init,
44524 {"Beam Forming Is InitiatorTXSS", "wlan.bf.isInit",
44525 FT_BOOLEAN, 16, NULL((void*)0), 0x0002,
44526 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44527
44528 {&hf_ieee80211_ff_bf_is_resp,
44529 {"Beam Forming Is ResponderTXSS", "wlan.bf.isResp",
44530 FT_BOOLEAN, 16, NULL((void*)0), 0x0004,
44531 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44532
44533 {&hf_ieee80211_ff_bf_rxss_len,
44534 {"Beam Forming RXSS Length", "wlan.bf.rxss_len",
44535 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01f8,
44536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44537
44538 {&hf_ieee80211_ff_bf_rxss_rate,
44539 {"Beam Forming RXSS Rate", "wlan.bf.rxss_rate",
44540 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
44541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44542
44543 {&hf_ieee80211_ff_bf_b10b15,
44544 {"Reserved (B10-B15)", "wlan.bf.reserved",
44545 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFC00,
44546 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44547
44548 {&hf_ieee80211_ff_bf_num_sectors,
44549 {"Beam Forming Total Number of Sectors", "wlan.bf.num_sectors",
44550 FT_UINT16, BASE_DEC, NULL((void*)0), 0x03f8,
44551 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44552
44553 {&hf_ieee80211_ff_bf_num_rx_dmg_ants,
44554 {"Beam Forming Number of DMG Antennas", "wlan.bf.num_dmg_ants",
44555 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0c00,
44556 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44557
44558 {&hf_ieee80211_ff_bf_b12b15,
44559 {"Reserved (B12-B15)", "wlan.bf.reserved",
44560 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
44561 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44562
44563 {&hf_ieee80211_addr_nav_da,
44564 {"Destination address of STA that caused NAV update", "wlan.nav_da",
44565 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44566 "DMG Destination Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44567
44568 {&hf_ieee80211_addr_nav_sa,
44569 {"Source address of STA that caused NAV update", "wlan.nav_sa",
44570 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44571 "DMG Source Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44572
44573 {&hf_ieee80211_ff_sswf,
44574 {"Sector Sweep Feedback", "wlan.sswf",
44575 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
44576 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44577
44578 {&hf_ieee80211_ff_sswf_total_sectors,
44579 {"Sector Sweep Feedback total number of sectors", "wlan.sswf.num_sectors",
44580 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0001ff,
44581 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44582
44583 {&hf_ieee80211_ff_sswf_num_rx_dmg_ants,
44584 {"Sector Sweep Feedback Number of receive DMG Antennas", "wlan.sswf.num_dmg_ants",
44585 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000600,
44586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44587
44588 {&hf_ieee80211_ff_sswf_poll_required,
44589 {"Sector Sweep Feedback Poll required", "wlan.sswf.poll",
44590 FT_BOOLEAN, 24, NULL((void*)0), 0x010000,
44591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44592
44593 {&hf_ieee80211_ff_sswf_reserved1,
44594 {"Sector Sweep Feedback Reserved", "wlan.sswf.reserved",
44595 FT_UINT24, BASE_HEX, NULL((void*)0), 0x00F800,
44596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44597
44598 {&hf_ieee80211_ff_sswf_reserved2,
44599 {"Sector Sweep Feedback Reserved", "wlan.sswf.reserved",
44600 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFE0000,
44601 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44602
44603 {&hf_ieee80211_ff_sswf_sector_select,
44604 {"Sector Sweep Feedback Sector Select", "wlan.sswf.sector_select",
44605 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00003F,
44606 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44607
44608 {&hf_ieee80211_ff_sswf_dmg_antenna_select,
44609 {"Sector Sweep Feedback DMG Antenna Select", "wlan.sswf.dmg_antenna_select",
44610 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000C0,
44611 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44612
44613 {&hf_ieee80211_ff_sswf_snr_report,
44614 {"Sector Sweep Feedback SNR Report", "wlan.sswf.snr_report",
44615 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00FF00,
44616 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44617
44618
44619 {&hf_ieee80211_ff_brp,
44620 {"BRP Request", "wlan.brp",
44621 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44622 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44623
44624 {&hf_ieee80211_ff_brp_L_RX,
44625 {"BRP Request L-RX", "wlan.brp.l_rx",
44626 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f,
44627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44628
44629 {&hf_ieee80211_ff_brp_TX_TRN_REQ,
44630 {"BRP Request TX-TRN-REQ", "wlan.brp.tx_trn_req",
44631 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
44632 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44633
44634 {&hf_ieee80211_ff_brp_MID_REQ,
44635 {"BRP Request MID-REQ", "wlan.brp.mid_req",
44636 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
44637 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44638
44639 {&hf_ieee80211_ff_brp_BC_REQ,
44640 {"BRP Request BC-REQ", "wlan.brp.bc_req",
44641 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
44642 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44643
44644 {&hf_ieee80211_ff_brp_MID_GRANT,
44645 {"BRP Request MID-GRANT", "wlan.brp.mid_grant",
44646 FT_BOOLEAN, 32, NULL((void*)0), 0x00000100,
44647 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44648
44649 {&hf_ieee80211_ff_brp_BC_GRANT,
44650 {"BRP Request BC-GRANT", "wlan.brp.bc_grant",
44651 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
44652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44653
44654 {&hf_ieee80211_ff_brp_chan_FBCK_CAP,
44655 {"BRP Request Chan FBCK-CAP", "wlan.brp.chan_fbck_cap",
44656 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
44657 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44658
44659 {&hf_ieee80211_ff_brp_tx_sector,
44660 {"BRP Request TX Sector ID", "wlan.brp.tx_sector_id",
44661 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0001f800,
44662 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44663
44664 {&hf_ieee80211_ff_brp_other_aid,
44665 {"BRP Request Other AID", "wlan.brp.other_aid",
44666 FT_UINT32, BASE_DEC, NULL((void*)0), 0x01fe0000,
44667 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44668
44669 {&hf_ieee80211_ff_brp_tx_antenna,
44670 {"BRP Request TX Antenna ID", "wlan.brp.tx_antenna_id",
44671 FT_UINT32, BASE_DEC, NULL((void*)0), 0x06000000,
44672 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44673
44674 {&hf_ieee80211_ff_brp_reserved,
44675 {"BRP Request Reserved", "wlan.brp.reserved",
44676 FT_UINT32, BASE_HEX, NULL((void*)0), 0xF8000000,
44677 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44678
44679 {&hf_ieee80211_ff_blm,
44680 {"Beamformed Link Maintenance", "wlan.blm",
44681 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
44682 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44683
44684 {&hf_ieee80211_ff_blm_unit_index,
44685 {"BeamLink Maintenance Uint Index", "wlan.blm.uint_index",
44686 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
44687 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44688
44689 {&hf_ieee80211_ff_blm_maint_value,
44690 {"BeamLink Maintenance Value", "wlan.blm.value",
44691 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7e,
44692 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44693
44694 {&hf_ieee80211_ff_blm_is_master,
44695 {"BeamLink Is Master", "wlan.blm.is_master",
44696 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
44697 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44698
44699 {&hf_ieee80211_ff_bic,
44700 {"Beacon Interval Control", "wlan.bic",
44701 FT_UINT48, BASE_HEX, NULL((void*)0), 0,
44702 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44703
44704 {&hf_ieee80211_ff_bic_cc_present,
44705 {"Clustering Control Present", "wlan.bic.cc",
44706 FT_BOOLEAN, 48, NULL((void*)0), 0x000000000001,
44707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44708
44709 {&hf_ieee80211_ff_bic_discovery_mode,
44710 {"Discovery Mode", "wlan.bic.discovery_mode",
44711 FT_BOOLEAN, 48, NULL((void*)0), 0x000000000002,
44712 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44713
44714 {&hf_ieee80211_ff_bic_next_beacon,
44715 {"Next Beacon", "wlan.bic.next_beacon",
44716 FT_UINT48, BASE_DEC, NULL((void*)0), 0x00000000003c,
44717
44718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44719
44720 {&hf_ieee80211_ff_bic_ati_present,
44721 {"ATI Present", "wlan.bic.ati",
44722 FT_BOOLEAN, 48, NULL((void*)0), 0x000000000040,
44723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44724
44725 {&hf_ieee80211_ff_bic_abft_len,
44726 {"A-BFT length", "wlan.bic.abft_len",
44727 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000000380,
44728 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44729
44730 {&hf_ieee80211_ff_bic_fss,
44731 {"FSS", "wlan.bic.fss",
44732 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000003c00,
44733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44734
44735 {&hf_ieee80211_ff_bic_is_resp,
44736 {"Is TXSS Responder", "wlan.bic.is_responder",
44737 FT_BOOLEAN, 48, NULL((void*)0), 0x000000004000,
44738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44739
44740 {&hf_ieee80211_ff_bic_next_abft,
44741 {"Next A-BFT", "wlan.bic.next_abft",
44742 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000078000,
44743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44744
44745 {&hf_ieee80211_ff_bic_frag_txss,
44746 {"Fragmented TXSS", "wlan.bic.frag_txss",
44747 FT_BOOLEAN, 48, NULL((void*)0), 0x000000080000,
44748 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44749
44750 {&hf_ieee80211_ff_bic_txss_span,
44751 {"TXSS span", "wlan.bic.txss_span",
44752 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000007f00000,
44753 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44754
44755 {&hf_ieee80211_ff_bic_NBI_abft,
44756 {"Number of Beacon Intervals that are needed to allocate A-BFT", "wlan.bic.NBI_abft",
44757 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000078000000,
44758 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44759
44760 {&hf_ieee80211_ff_bic_abft_count,
44761 {"A-BFT Count", "wlan.bic.abft_count",
44762 FT_UINT48, BASE_DEC, NULL((void*)0), 0x001f80000000,
44763 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44764
44765 {&hf_ieee80211_ff_bic_nabft,
44766 {"Number of A-BFT's received from each Antenna", "wlan.bic.nabft",
44767 FT_UINT48, BASE_DEC, NULL((void*)0), 0x07e000000000,
44768 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44769
44770 {&hf_ieee80211_ff_bic_pcp,
44771 {"PCP Association Ready", "wlan.bic.pcp",
44772 FT_BOOLEAN, 48, NULL((void*)0), 0x080000000000,
44773 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44774
44775 {&hf_ieee80211_ff_bic_reserved,
44776 {"Reserved", "wlan.bic.reserved",
44777 FT_UINT48, BASE_HEX, NULL((void*)0), 0xF00000000000,
44778 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44779
44780 {&hf_ieee80211_ff_dmg_params,
44781 {"DMG Parameters", "wlan.dmg_params",
44782 FT_UINT8, BASE_HEX , NULL((void*)0), 0,
44783 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44784
44785 {&hf_ieee80211_ff_dmg_params_bss,
44786 {"BSS Type", "wlan.dmg_params.bss",
44787 FT_UINT8, BASE_DEC, VALS(bss_type)((0 ? (const struct _value_string*)0 : ((bss_type)))), 0x03,
44788 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44789
44790 {&hf_ieee80211_ff_dmg_params_cbap_only,
44791 {"CBAP Only", "wlan.dmg_params.cbap_only",
44792 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
44793 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44794
44795 {&hf_ieee80211_ff_dmg_params_cbap_src,
44796 {"CBAP Source", "wlan.dmg_params.cbap_src",
44797 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
44798 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44799
44800 {&hf_ieee80211_ff_dmg_params_privacy,
44801 {"DMG Privacy", "wlan.dmg_params.privacy",
44802 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
44803 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44804
44805 {&hf_ieee80211_ff_dmg_params_policy,
44806 {"ECAPC Policy Enforced", "wlan.dmg_params.policy",
44807 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
44808 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44809
44810 {&hf_ieee80211_ff_dmg_params_spec_mgmt,
44811 {"Spectrum Management", "wlan.dmg_params.spec_mgmt",
44812 FT_BOOLEAN, 8, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x40,
44813 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44814
44815 {&hf_ieee80211_ff_dmg_params_radio_measure,
44816 {"Radio Measurement", "wlan.dmg_params.radio_measure",
44817 FT_BOOLEAN, 8, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x80,
44818 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44819
44820 {&hf_ieee80211_ff_cc,
44821 {"Clustering Control", "wlan.cc",
44822 FT_UINT64, BASE_HEX , NULL((void*)0), 0,
44823 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44824
44825 {&hf_ieee80211_ff_cc_abft_resp_addr,
44826 {"A-BFT Responder Address", "wlan.cc.abft_resp_addr",
44827 FT_ETHER, BASE_NONE , NULL((void*)0), 0,
44828 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44829
44830 {&hf_ieee80211_ff_cc_sp_duration,
44831 {"Beacon SP Duration", "wlan.cc.sp_duration",
44832 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
44833 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44834
44835 {&hf_ieee80211_ff_cc_cluster_id,
44836 {"Cluster ID", "wlan.cc.cluster_id",
44837 FT_UINT64, BASE_DEC , NULL((void*)0), 0,
44838 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44839
44840 {&hf_ieee80211_ff_cc_role,
44841 {"Cluster Member Role", "wlan.cc.rold",
44842 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
44843 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44844
44845 {&hf_ieee80211_ff_cc_max_mem,
44846 {"Cluster MaxMem", "wlan.cc.max_mem",
44847 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
44848 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44849
44850 {&hf_ieee80211_tag_relay_support,
44851 {"Relay Supportability", "wlan.relay_capabilities.relay_support",
44852 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
44853 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44854
44855 {&hf_ieee80211_tag_relay_use,
44856 {"Relay Usability", "wlan.relay_capabilities.relay_use",
44857 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
44858 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44859
44860 {&hf_ieee80211_tag_relay_permission,
44861 {"Relay Permission", "wlan.relay_capabilities.relay_permission",
44862 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
44863 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44864
44865 {&hf_ieee80211_tag_AC_power,
44866 {"A/C Power", "wlan.relay_capabilities.AC_power",
44867 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
44868 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44869
44870 {&hf_ieee80211_tag_relay_prefer,
44871 {"Relay Preference", "wlan.relay_capabilities.relay_prefer",
44872 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
44873 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44874
44875 {&hf_ieee80211_tag_duplex,
44876 {"Duplex", "wlan.relay_capabilities.duplex",
44877 FT_UINT8, BASE_DEC, NULL((void*)0), 0x60,
44878 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44879
44880 {&hf_ieee80211_tag_cooperation,
44881 {"Cooperation", "wlan.relay_capabilities.cooperation",
44882 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
44883 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44884
44885#if 0
44886 {&hf_ieee80211_ff_rcsi,
44887 {"Relay Capable STA Info", "wlan.rcsi",
44888 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
44889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44890
44891 {&hf_ieee80211_ff_rcsi_aid,
44892 {"AID", "wlan.rcsi.aid",
44893 FT_UINT8, BASE_DEC, NULL((void*)0), 0xff,
44894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44895#endif
44896
44897 {&hf_ieee80211_ff_band_id,
44898 {"Band ID", "wlan.band_id",
44899 FT_UINT8, BASE_DEC, VALS(band_id)((0 ? (const struct _value_string*)0 : ((band_id)))), 0x0,
44900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44901
44902 {&hf_ieee80211_tag_move,
44903 {"Move", "wlan.dmg_bss_param_change.move",
44904 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
44905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44906
44907 {&hf_ieee80211_tag_size,
44908 {"Size", "wlan.dmg_bss_param_change.size",
44909 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
44910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44911
44912 {&hf_ieee80211_tag_tbtt_offset,
44913 {"TBTT Offset", "wlan.dmg_bss_param_change.tbtt_offset",
44914 FT_UINT32, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (size_t) (allocation_duration_base_custom)), 0x0,
44915 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44916
44917 {&hf_ieee80211_tag_bi_duration,
44918 {"BI Duration", "wlan.dmg_bss_param_change.bi_duration",
44919 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
44920 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44921
44922 {&hf_ieee80211_tag_dmg_capa_sta_addr,
44923 {"STA Address", "wlan.dmg_capa.sta_addr",
44924 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44925 "STA_Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44926
44927 {&hf_ieee80211_tag_dmg_capa_aid,
44928 {"AID", "wlan.dmg_capa.aid",
44929 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44930 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44931/* 8.4.2.127.2 DMG STA Capability Information field */
44932 {&hf_ieee80211_tag_reverse_direction, /* DMG STA capa, bits [0] */
44933 {"Reverse Direction", "wlan.dmg_capa.reverse_direction",
44934 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
44935 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44936
44937 {&hf_ieee80211_tag_hlts, /* DMG STA capa, bits [1] */
44938 {"Higher Layer Timer Synchronization", "wlan.dmg_capa.htls",
44939 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(1, 1)(((1U << ((1) - (1) + 1)) - 1) << (1)),
44940 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44941
44942 {&hf_ieee80211_tag_tpc, /* DMG STA capa, bits [2] */
44943 {"TPC", "wlan.dmg_capa.tpc",
44944 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(2, 2)(((1U << ((2) - (2) + 1)) - 1) << (2)),
44945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44946
44947 {&hf_ieee80211_tag_spsh, /* DMG STA capa, bits [3] */
44948 {"SPSH and Interference Mitigation", "wlan.dmg_capa.spsh",
44949 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(3, 3)(((1U << ((3) - (3) + 1)) - 1) << (3)),
44950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44951
44952 {&hf_ieee80211_tag_rx_antenna, /* DMG STA capa, bits [4..5] */
44953 {"Number of RX DMG Antennas", "wlan.dmg_capa.num_rx",
44954 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)),
44955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44956
44957 {&hf_ieee80211_tag_fast_link, /* DMG STA capa, bits [6] */
44958 {"Fast Link Adaptation", "wlan.dmg_capa.fast_link",
44959 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(6, 6)(((1U << ((6) - (6) + 1)) - 1) << (6)),
44960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44961
44962 {&hf_ieee80211_tag_num_sectors, /* DMG STA capa, bits [7..13] */
44963 {"Total Number of Sectors", "wlan.dmg_capa.num_sectors",
44964 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)),
44965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44966
44967 {&hf_ieee80211_tag_rxss_length, /* DMG STA capa, bits [14..19] */
44968 {"RXSS Length", "wlan.dmg_capa.rxss_len",
44969 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)),
44970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44971
44972 {&hf_ieee80211_tag_reciprocity, /* DMG STA capa, bits [20] */
44973 {"DMG Antenna Reciprocity", "wlan.dmg_capa.reciprocity",
44974 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(20, 20)(((1U << ((20) - (20) + 1)) - 1) << (20)),
44975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44976/* DMG STA capa, A-MPDU params, bits [21..26] */
44977 {&hf_ieee80211_tag_max_ampdu_exp, /* DMG STA capa, bits [21..23] */
44978 {"Maximum A-MPDU Length Exponent", "wlan.dmg_capa.max_ampdu_exp",
44979 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(23, 21)(((1U << ((23) - (21) + 1)) - 1) << (21)),
44980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44981
44982 {&hf_ieee80211_tag_min_mpdu_spacing, /* DMG STA capa, bits [24..26] */
44983 {"Minimum MPDU Start Spacing", "wlan.dmg_capa.min_mpdu_spacing",
44984 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(26-24, 24-24)(((1U << ((26-24) - (24-24) + 1)) - 1) << (24-24)
)
,
44985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44986
44987 {&hf_ieee80211_tag_ba_flow_control , /* DMG STA capa, bits [27] */
44988 {"BA with Flow Control", "wlan.dmg_capa.bs_flow_ctrl",
44989 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(27-24, 27-24)(((1U << ((27-24) - (27-24) + 1)) - 1) << (27-24)
)
,
44990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44991/* DMG STA capa, supported MCS set, bits [28..51] */
44992 {&hf_ieee80211_tag_max_sc_rx_mcs, /* DMG STA capa, bits [28..32] */
44993 {"Maximum SC Rx MCS", "wlan.dmg_capa.max_sc_rx_mcs",
44994 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(32-24, 28-24)(((1U << ((32-24) - (28-24) + 1)) - 1) << (28-24)
)
,
44995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44996
44997 {&hf_ieee80211_tag_max_ofdm_rx_mcs, /* DMG STA capa, bits [33..37] */
44998 {"Maximum OFDM Rx MCS", "wlan.dmg_capa.max_ofdm_rx_mcs",
44999 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(37-24, 33-24)(((1U << ((37-24) - (33-24) + 1)) - 1) << (33-24)
)
,
45000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45001
45002 {&hf_ieee80211_tag_max_sc_tx_mcs, /* DMG STA capa, bits [38..42] */
45003 {"Maximum SC Tx MCS", "wlan.dmg_capa.max_sc_tx_mcs",
45004 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(42-24, 38-24)(((1U << ((42-24) - (38-24) + 1)) - 1) << (38-24)
)
,
45005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45006
45007 {&hf_ieee80211_tag_max_ofdm_tx_mcs, /* DMG STA capa, bits [43..47] */
45008 {"Maximum OFDM Tx MCS", "wlan.dmg_capa.max_ofdm_tx_mcs",
45009 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(47-24, 43-24)(((1U << ((47-24) - (43-24) + 1)) - 1) << (43-24)
)
,
45010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45011
45012 {&hf_ieee80211_tag_low_power_supported, /* DMG STA capa, bits [48] */
45013 {"Low Power SC PHY Supported", "wlan.dmg_capa.low_power_supported",
45014 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(48-48, 48-48)(((1U << ((48-48) - (48-48) + 1)) - 1) << (48-48)
)
,
45015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45016
45017 {&hf_ieee80211_tag_code_rate, /* DMG STA capa, bits [49] */
45018 {"Code Rate 13/16", "wlan.dmg_capa.code_rate",
45019 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(49-48, 49-48)(((1U << ((49-48) - (49-48) + 1)) - 1) << (49-48)
)
,
45020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45021
45022 {&hf_ieee80211_tag_dtp, /* DMG STA capa, bits [52] */
45023 {"DTP Supported", "wlan.dmg_capa.dtp",
45024 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(52-48, 52-48)(((1U << ((52-48) - (52-48) + 1)) - 1) << (52-48)
)
,
45025 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45026
45027 {&hf_ieee80211_tag_appdu_supp, /* DMG STA capa, bits [53] */
45028 {"A-PPDU Supported", "wlan.dmg_capa.appdu_supp",
45029 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(53-48, 53-48)(((1U << ((53-48) - (53-48) + 1)) - 1) << (53-48)
)
,
45030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45031
45032 {&hf_ieee80211_tag_heartbeat, /* DMG STA capa, bits [54] */
45033 {"HeartBeat", "wlan.dmg_capa.heartbeat",
45034 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(54-48, 54-48)(((1U << ((54-48) - (54-48) + 1)) - 1) << (54-48)
)
,
45035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45036
45037 {&hf_ieee80211_tag_other_aid, /* DMG STA capa, bits [55] */
45038 {"Supports Other_AID", "wlan.dmg_capa.other_aid",
45039 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(55-48, 55-48)(((1U << ((55-48) - (55-48) + 1)) - 1) << (55-48)
)
,
45040 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45041
45042 {&hf_ieee80211_tag_pattern_recip, /* DMG STA capa, bits [56] */
45043 {"Antenna Pattern Reciprocity", "wlan.dmg_capa.pattern_recip",
45044 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(56-48, 56-48)(((1U << ((56-48) - (56-48) + 1)) - 1) << (56-48)
)
,
45045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45046
45047 {&hf_ieee80211_tag_heartbeat_elapsed, /* DMG STA capa, bits [57..59] */
45048 {"Heartbeat Elapsed Indication", "wlan.dmg_capa.heartbeat_elapsed",
45049 FT_UINT16, BASE_DEC, NULL((void*)0), GENMASK(59-48, 57-48)(((1U << ((59-48) - (57-48) + 1)) - 1) << (57-48)
)
,
45050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45051
45052 {&hf_ieee80211_tag_grant_ack_supp, /* DMG STA capa, bits [60] */
45053 {"Grant ACK Supported", "wlan.dmg_capa.grant_ack_supp",
45054 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(60-48, 60-48)(((1U << ((60-48) - (60-48) + 1)) - 1) << (60-48)
)
,
45055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45056
45057 {&hf_ieee80211_tag_RXSSTxRate_supp, /* DMG STA capa, bits [61] */
45058 {"RXSSTxRate Supported", "wlan.dmg_capa.RXSSTxRate",
45059 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(61-48, 61-48)(((1U << ((61-48) - (61-48) + 1)) - 1) << (61-48)
)
,
45060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45061/* 8.4.2.127.3 DMG PCP/AP Capability Information field */
45062 {&hf_ieee80211_tag_pcp_tddti, /* DMG PCP/AP capa, bits [0] */
45063 {"TDDTI", "wlan.dmg_capa.pcp_tdtti",
45064 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
45065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45066
45067 {&hf_ieee80211_tag_pcp_PSA, /* DMG PCP/AP capa, bits [1] */
45068 {"Pseudo-static Allocations", "wlan.dmg_capa.pcp_psa",
45069 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(1, 1)(((1U << ((1) - (1) + 1)) - 1) << (1)),
45070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45071
45072 {&hf_ieee80211_tag_pcp_handover, /* DMG PCP/AP capa, bits [2] */
45073 {"PDP Handover", "wlan.dmg_capa.pcp_handover",
45074 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(2, 2)(((1U << ((2) - (2) + 1)) - 1) << (2)),
45075 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45076
45077 {&hf_ieee80211_tag_pcp_max_assoc, /* DMG PCP/AP capa, bits [3..10] */
45078 {"Max Associated STA Number", "wlan.dmg_capa.pcp_max_assoc",
45079 FT_UINT16, BASE_DEC, NULL((void*)0), GENMASK(10, 3)(((1U << ((10) - (3) + 1)) - 1) << (3)),
45080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45081
45082 {&hf_ieee80211_tag_pcp_power_src, /* DMG PCP/AP capa, bits [11] */
45083 {"Power Source", "wlan.dmg_capa.pcp_power_src",
45084 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(11, 11)(((1U << ((11) - (11) + 1)) - 1) << (11)),
45085 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45086
45087 {&hf_ieee80211_tag_pcp_decenter, /* DMG PCP/AP capa, bits [12] */
45088 {"Decentralized PCP/AP Clustering", "wlan.dmg_capa.pcp_decenter",
45089 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(12, 12)(((1U << ((12) - (12) + 1)) - 1) << (12)),
45090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45091
45092 {&hf_ieee80211_tag_pcp_forwarding, /* DMG PCP/AP capa, bits [13] */
45093 {"PCP Forwarding", "wlan.dmg_capa.pcp_forwarding",
45094 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(13, 13)(((1U << ((13) - (13) + 1)) - 1) << (13)),
45095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45096
45097 {&hf_ieee80211_tag_pcp_center, /* DMG PCP/AP capa, bits [14] */
45098 {"Centralized PCP/AP Clustering", "wlan.dmg_capa.pcp_center",
45099 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(14, 14)(((1U << ((14) - (14) + 1)) - 1) << (14)),
45100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45101
45102 {&hf_ieee80211_tag_sta_beam_track, /* DMG STA beam track capa*/
45103 {"STA Beam Tracking Time Limit", "wlan.dmg_capa.beam_track",
45104 FT_UINT16, BASE_DEC | BASE_UNIT_STRING0x00001000, UNS(&units_microseconds)((0 ? (const struct unit_name_string*)0 : ((&units_microseconds
))))
, 0,
45105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45106
45107 {&hf_ieee80211_tag_ext_sc_mcs_max_tx, /* DMG STA Ext SC MCS Capa: Max TX*/
45108 {"Extended SC Max Tx MCS Name", "wlan.dmg_capa.ext_sc_mcs_capa_max_tx",
45109 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)),
45110 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45111
45112 {&hf_ieee80211_tag_ext_sc_mcs_tx_code_7_8, /* DMG STA Ext SC MCS Capa: Tx code rate 7/8*/
45113 {"Extended SC Tx MCS code rate 7/8", "wlan.dmg_capa.ext_sc_mcs_tx_code_7_8",
45114 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)),
45115 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45116
45117 {&hf_ieee80211_tag_ext_sc_mcs_max_rx, /* DMG STA Ext SC MCS Capa: Max RX*/
45118 {"Extended SC Max Rx MCS Name", "wlan.dmg_capa.ext_sc_mcs_capa_max_rx",
45119 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)),
45120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45121
45122 {&hf_ieee80211_tag_ext_sc_mcs_rx_code_7_8, /* DMG STA Ext SC MCS Capa: Rx code rate 7/8*/
45123 {"Extended SC Rx MCS code rate 7/8", "wlan.dmg_capa.ext_sc_mcs_rx_code_7_8",
45124 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)),
45125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45126
45127 {&hf_ieee80211_tag_max_basic_sf_amsdu, /* DMG Max Number of Basic Subframes in an A-MSDU*/
45128 {"Max Number of Basic Subframes in an A-MSDU", "wlan.dmg_capa.max_basic_sf_amsdu",
45129 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(max_basic_sf_amsdu)((0 ? (const struct _range_string*)0 : ((max_basic_sf_amsdu))
))
, 0,
45130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45131
45132 {&hf_ieee80211_tag_max_short_sf_amsdu, /* DMG Max Number of short Subframes in an A-MSDU*/
45133 {"Max Number of short Subframes in an A-MSDU", "wlan.dmg_capa.max_short_sf_amsdu",
45134 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(max_short_sf_amsdu)((0 ? (const struct _range_string*)0 : ((max_short_sf_amsdu))
))
, 0,
45135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45136
45137 {&hf_ieee80211_tag_PSRSI,
45138 {"PS Request Suspension Interval", "wlan.dmg_oper.psrsi",
45139 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45141
45142 {&hf_ieee80211_tag_min_BHI_duration,
45143 {"Min BHI Duration", "wlan.dmg_oper.min_BHI_duration",
45144 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45145 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45146
45147 {&hf_ieee80211_tag_brdct_sta_info_dur,
45148 {"Broadcast STA Info Duration", "wlan.dmg_oper.brdcst_sta_info_dur",
45149 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45151
45152 {&hf_ieee80211_tag_assoc_resp_confirm_time,
45153 {"Associated Response Confirm Time", "wlan.dmg_oper.assoc_resp_confirm_time",
45154 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45156
45157 {&hf_ieee80211_tag_min_pp_duration,
45158 {"Min PP Duration", "wlan.dmg_oper.min_pp_duration",
45159 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45161
45162 {&hf_ieee80211_tag_SP_idle_timeout,
45163 {"SP Idle Timeout", "wlan.dmg_oper.SP_idle_timeout",
45164 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45165 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45166
45167 {&hf_ieee80211_tag_max_lost_beacons,
45168 {"Max Lost Beacons", "wlan.dmg_oper.max_lost_beacons",
45169 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45171
45172 {&hf_ieee80211_tag_type,
45173 {"Type", "wlan.sctor_id.type",
45174 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000f,
45175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45176
45177 {&hf_ieee80211_tag_tap1,
45178 {"Tap 1", "wlan.sctor_id.tap1",
45179 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000003f0,
45180 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45181
45182 {&hf_ieee80211_tag_state1,
45183 {"State 1", "wlan.sctor_id.state1",
45184 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000fc00,
45185 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45186
45187 {&hf_ieee80211_tag_tap2,
45188 {"Tap 2", "wlan.sctor_id.tap2",
45189 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00ff0000,
45190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45191
45192 {&hf_ieee80211_tag_state2,
45193 {"State 2", "wlan.sctor_id.state2",
45194 FT_UINT32, BASE_HEX, NULL((void*)0), 0xff000000,
45195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45196
45197 {&hf_ieee80211_tag_allocation_id,
45198 {"Allocation ID", "wlan.ext_sched.alloc_id",
45199 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000f,
45200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45201
45202 {&hf_ieee80211_tag_allocation_type,
45203 {"Allocation Type", "wlan.ext_sched.alloc_type",
45204 FT_UINT16, BASE_DEC, VALS(allocation_type)((0 ? (const struct _value_string*)0 : ((allocation_type)))), 0x0070,
45205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45206
45207 {&hf_ieee80211_tag_pseudo_static,
45208 {"Pseudo-static", "wlan.ext_sched.p_static",
45209 FT_BOOLEAN, 16, NULL((void*)0), 0x0080,
45210 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45211
45212 {&hf_ieee80211_tag_truncatable,
45213 {"Truncatable", "wlan.ext_sched.truncatable",
45214 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
45215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45216
45217 {&hf_ieee80211_tag_extendable,
45218 {"Extendable", "wlan.ext_sched.extendable",
45219 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
45220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45221
45222 {&hf_ieee80211_tag_pcp_active,
45223 {"PCP Active", "wlan.ext_sched.pcp_active",
45224 FT_BOOLEAN, 16, NULL((void*)0), 0x0400,
45225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45226
45227 {&hf_ieee80211_tag_lp_sc_used,
45228 {"LP SC Used", "wlan.ext_sched.lp_sc_used",
45229 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
45230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45231
45232 {&hf_ieee80211_tag_src_aid,
45233 {"Source AID", "wlan.ext_sched.src_id",
45234 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45236
45237 {&hf_ieee80211_tag_dest_aid,
45238 {"Destination AID", "wlan.ext_sched.dest_id",
45239 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45241
45242 {&hf_ieee80211_tag_alloc_start,
45243 {"Allocation Start", "wlan.ext_sched.alloc_start",
45244 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45246
45247 {&hf_ieee80211_tag_alloc_block_duration,
45248 {"Allocation Block Duration", "wlan.ext_sched.block_duration",
45249 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45250 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45251
45252 {&hf_ieee80211_tag_num_blocks,
45253 {"Number of Blocks", "wlan.ext_sched.num_blocks",
45254 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45255 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45256
45257 {&hf_ieee80211_tag_alloc_block_period,
45258 {"Allocation Block Period", "wlan.ext_sched.alloc_block_period",
45259 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45260 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45261
45262 {&hf_ieee80211_tag_aid,
45263 {"AID", "wlan.sta_avail.aid",
45264 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00ff,
45265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45266
45267 {&hf_ieee80211_tag_cbap,
45268 {"CBAP", "wlan.sta_avail.cbap",
45269 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
45270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45271
45272 {&hf_ieee80211_tag_pp_avail,
45273 {"PP Available", "wlan.sta_avail.pp_avail",
45274 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
45275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45276
45277 {&hf_ieee80211_tag_next_ati_start_time,
45278 {"Start Time", "wlan.next_ati.start_time",
45279 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45281
45282 {&hf_ieee80211_tag_next_ati_duration,
45283 {"ATI Duration", "wlan.next_ati.duration",
45284 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45286
45287 {&hf_ieee80211_tag_old_bssid,
45288 {"Old BSSID", "wlan.pcp_handover.old_bssid",
45289 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45290 "OLD_BSSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45291
45292 {&hf_ieee80211_tag_new_pcp_addr,
45293 {"New PCP Address", "wlan.pcp_handover.new_pcp_addr",
45294 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45295 "New_PCP_Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45296
45297 {&hf_ieee80211_tag_bssid,
45298 {"BSSID", "wlan.quiet_res.bssid",
45299 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45300 "BSS-ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45301
45302 {&hf_ieee80211_tag_duplex_relay,
45303 {"Duplex", "wlan.relay_capabilities.duplex",
45304 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45306
45307 {&hf_ieee80211_tag_cooperation_relay,
45308 {"Cooperation", "wlan.relay_capabilities.cooperation",
45309 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
45310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45311
45312 {&hf_ieee80211_tag_tx_mode,
45313 {"TX-Mode", "wlan.relay_trans_param.tx_mode",
45314 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
45315 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45316
45317 {&hf_ieee80211_tag_link_change_interval,
45318 {"Link Change Interval", "wlan.relay_trans_param.link_change_interval",
45319 FT_UINT8, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (size_t) (allocation_duration_base_custom)), 0x0,
45320 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45321
45322 {&hf_ieee80211_tag_data_sensing_time,
45323 {"Data Sensing Time", "wlan.relay_trans_param.data_sensing_time",
45324 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45325 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45326
45327 {&hf_ieee80211_tag_first_period,
45328 {"First Period", "wlan.relay_trans_param.first_period",
45329 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45331
45332 {&hf_ieee80211_tag_second_period,
45333 {"Second Period", "wlan.relay_trans_param.second_period",
45334 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45336
45337 {&hf_ieee80211_tag_initiator,
45338 {"Initiator", "wlan.beam_refine.initiator",
45339 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000001,
45340 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45341
45342 {&hf_ieee80211_tag_tx_train_res,
45343 {"TX-train-response", "wlan.beam_refine.tx_train_res",
45344 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000002,
45345 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45346
45347 {&hf_ieee80211_tag_rx_train_res,
45348 {"RX-train-response", "wlan.beam_refine.rx_train_res",
45349 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000004,
45350 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45351
45352 {&hf_ieee80211_tag_tx_trn_ok,
45353 {"TX-TRN-OK", "wlan.beam_refine.tx_trn_ok",
45354 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000008,
45355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45356
45357 {&hf_ieee80211_tag_txss_fbck_req,
45358 {"TXSS-FBCK-REQ", "wlan.beam_refine.txss_fbck_req",
45359 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000010,
45360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45361
45362 {&hf_ieee80211_tag_bs_fbck,
45363 {"BS-FBCK", "wlan.beam_refine.bs_fbck",
45364 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000007e0,
45365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45366
45367 {&hf_ieee80211_tag_bs_fbck_antenna_id,
45368 {"BS-FBCK Antenna ID", "wlan.beam_refine.bs_fbck_antenna_id",
45369 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000001800,
45370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45371
45372 {&hf_ieee80211_tag_snr_requested,
45373 {"SNR Requested", "wlan.beam_refine.snr_req",
45374 FT_BOOLEAN, 40, NULL((void*)0), 0x0000002000,
45375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45376
45377 {&hf_ieee80211_tag_channel_measurement_requested,
45378 {"Channel Measurement Requested", "wlan.beam_refine.ch_measure_req",
45379 FT_BOOLEAN, 40, NULL((void*)0), 0x0000004000,
45380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45381
45382 {&hf_ieee80211_tag_number_of_taps_requested,
45383 {"Number of Taps Requested", "wlan.beam_refine.taps_req",
45384 FT_UINT40, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(number_of_taps_values)((0 ? (const struct _val64_string*)0 : ((number_of_taps_values
))))
, 0x0000018000,
45385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45386
45387 {&hf_ieee80211_tag_sector_id_order_req,
45388 {"Sector ID Order Requested", "wlan.beam_refine.sector_id_req",
45389 FT_BOOLEAN, 40, NULL((void*)0), 0x0000020000,
45390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45391
45392 {&hf_ieee80211_tag_snr_present,
45393 {"SNR Present", "wlan.beam_refine.snr_present",
45394 FT_BOOLEAN, 40, NULL((void*)0), 0x0000040000,
45395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45396
45397 {&hf_ieee80211_tag_channel_measurement_present,
45398 {"Channel Measurement Present", "wlan.beam_refine.ch_measure_present",
45399 FT_BOOLEAN, 40, NULL((void*)0), 0x0000080000,
45400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45401
45402 {&hf_ieee80211_tag_tap_delay_present,
45403 {"Tap Delay Present", "wlan.beam_refine.tap_delay_present",
45404 FT_BOOLEAN, 40, NULL((void*)0), 0x0000100000,
45405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45406
45407 {&hf_ieee80211_tag_number_of_taps_present,
45408 {"Number of Taps Present", "wlan.beam_refine.taps_present",
45409 FT_UINT40, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(number_of_taps_values)((0 ? (const struct _val64_string*)0 : ((number_of_taps_values
))))
, 0x0000600000,
45410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45411
45412 {&hf_ieee80211_tag_number_of_measurement,
45413 {"Number of Measurements", "wlan.beam_refine.num_measurement",
45414 FT_UINT40, BASE_DEC, NULL((void*)0), 0x003f800000,
45415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45416
45417 {&hf_ieee80211_tag_sector_id_order_present,
45418 {"Sector ID Order Present", "wlan.beam_refine.sector_id_present",
45419 FT_BOOLEAN, 40, NULL((void*)0), 0x0040000000,
45420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45421
45422 {&hf_ieee80211_tag_number_of_beams,
45423 {"Number of Beams", "wlan.beam_refine.num_beams",
45424 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0f80000000,
45425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45426
45427 {&hf_ieee80211_tag_mid_extension,
45428 {"MID Extension", "wlan.beam_refine.mid_ext",
45429 FT_BOOLEAN, 40, NULL((void*)0), 0x1000000000,
45430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45431
45432 {&hf_ieee80211_tag_capability_request,
45433 {"Capability Request", "wlan.beam_refine.cap_req",
45434 FT_BOOLEAN, 40, NULL((void*)0), 0x2000000000,
45435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45436
45437 {&hf_ieee80211_tag_beam_refine_reserved,
45438 {"Reserved", "wlan.beam_refine.reserved",
45439 FT_UINT40, BASE_HEX, NULL((void*)0), 0xc000000000,
45440 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45441
45442 {&hf_ieee80211_tag_nextpcp_list,
45443 {"AID of NextPCP", "wlan.next_pcp.list",
45444 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45445 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45446
45447 {&hf_ieee80211_tag_nextpcp_token,
45448 {"NextPCP List Token", "wlan.next_pcp.token",
45449 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45450 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45451
45452 {&hf_ieee80211_tag_remaining_BI,
45453 {"Remaining BI's", "wlan.pcp_handover.remaining_BIs",
45454 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45455 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45456
45457 {&hf_ieee80211_tag_request_token,
45458 {"Request Token", "wlan.request_token",
45459 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45461
45462 {&hf_ieee80211_tag_bi_start_time,
45463 {"BI Start Time", "wlan.bi_start_time",
45464 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45465 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45466
45467 {&hf_ieee80211_tag_sleep_cycle,
45468 {"Sleep Cycle", "wlan.sleep_cycle",
45469 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45470 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45471
45472 {&hf_ieee80211_tag_num_awake_bis,
45473 {"Number of Awake/Doze BIs", "wlan.num_awake_bis",
45474 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45475 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45476
45477 {&hf_ieee80211_ff_dmg_action_code,
45478 {"DMG Action", "wlan.fixed.dmg_act",
45479 FT_UINT8, BASE_HEX, VALS(ff_dmg_action_flags)((0 ? (const struct _value_string*)0 : ((ff_dmg_action_flags)
)))
, 0,
45480 "Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45481
45482 {&hf_ieee80211_ff_unprotected_dmg_action_code,
45483 {"Unprotected DMG Action", "wlan.fixed.unprotected_dmg_act",
45484 FT_UINT8, BASE_HEX, VALS(ff_unprotected_dmg_action_flags)((0 ? (const struct _value_string*)0 : ((ff_unprotected_dmg_action_flags
))))
, 0,
45485 "Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45486
45487 {&hf_ieee80211_ff_dmg_pwr_mgmt,
45488 {"DMG Power Management", "wlan.dmg.pwr_mgmt",
45489 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
45490 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45491
45492 {&hf_ieee80211_ff_subject_address,
45493 {"Subject Address", "wlan.dmg.subject_addr",
45494 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45495 "MAC address of requested STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45496
45497 {&hf_ieee80211_ff_handover_reason,
45498 {"Handover Reason", "wlan.dmg.handover_reason",
45499 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45501
45502 {&hf_ieee80211_ff_handover_remaining_bi,
45503 {"Handover Remaining BI", "wlan.dmg.handover_remaining_bi",
45504 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45505 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45506
45507 {&hf_ieee80211_ff_handover_result,
45508 {"Handover Result", "wlan.dmg.handover_result",
45509 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45511
45512 {&hf_ieee80211_ff_handover_reject_reason,
45513 {"Handover Reject Reason", "wlan.dmg.handover_reject_reason",
45514 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45516
45517 {&hf_ieee80211_ff_destination_reds_aid,
45518 {"Destination REDS AID", "wlan.dmg.destination_reds_aid",
45519 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45521
45522 {&hf_ieee80211_ff_destination_aid,
45523 {"Destination AID", "wlan.dmg.destination_aid",
45524 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45526
45527 {&hf_ieee80211_ff_relay_aid,
45528 {"Relay AID", "wlan.dmg.relay_aid",
45529 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45531
45532 {&hf_ieee80211_ff_source_aid,
45533 {"Source AID", "wlan.dmg.source_aid",
45534 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45536
45537 {&hf_ieee80211_ff_timing_offset,
45538 {"Timing Offset", "wlan.dmg.timing_offset",
45539 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45541
45542 {&hf_ieee80211_ff_sampling_frequency_offset,
45543 {"Sampling Frequency Offset", "wlan.dmg.sampling_frequency_offset",
45544 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45546
45547 {&hf_ieee80211_ff_relay_operation_type,
45548 {"Relay Operation Type", "wlan.dmg.relay_operation_type",
45549 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45551
45552 {&hf_ieee80211_ff_peer_sta_aid,
45553 {"Peer STA AID", "wlan.dmg.peer_sta_aid",
45554 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45556
45557 {&hf_ieee80211_ff_snr,
45558 {"SNR", "wlan.dmg.snr",
45559 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45561
45562 {&hf_ieee80211_ff_internal_angle,
45563 {"Internal Angle", "wlan.dmg.internal_angle",
45564 FT_UINT8, BASE_DEC, NULL((void*)0), 0xfe,
45565 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45566
45567 {&hf_ieee80211_ff_recommend,
45568 {"Recommend", "wlan.dmg.recommend",
45569 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45571
45572 {&hf_ieee80211_ff_fst_action_code,
45573 {"FST Action Code", "wlan.fst.action_code",
45574 FT_UINT8, BASE_HEX, VALS(ff_fst_action_flags)((0 ? (const struct _value_string*)0 : ((ff_fst_action_flags)
)))
, 0,
45575 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45576
45577 {&hf_ieee80211_ff_robust_av_streaming_action_code,
45578 {"Robust AV Streaming Action Code", "wlan.robust_av_streaming.action_code",
45579 FT_UINT8, BASE_HEX, VALS(ff_robust_av_streaming_action_flags)((0 ? (const struct _value_string*)0 : ((ff_robust_av_streaming_action_flags
))))
, 0,
45580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45581
45582 {&hf_ieee80211_ff_llt,
45583 {"Link Loss Timeout", "wlan.fst.llt",
45584 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45585 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45586
45587 {&hf_ieee80211_ff_fsts_id,
45588 {"FSTS ID", "wlan.session_trans.fsts_id",
45589 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45590 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45591
45592 {&hf_ieee80211_ff_mmpdu_len,
45593 {"MMPDU Length", "wlan.fst.mmpdu_length",
45594 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45595 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45596
45597 {&hf_ieee80211_ff_mmpdu_ctrl,
45598 {"MMPDU Control", "wlan.fst.mmpdu_ctrl",
45599 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
45600 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45601
45602 {&hf_ieee80211_ff_oct_mmpdu,
45603 {"OCT MMPDU", "wlan.fst.oct_mmpdu",
45604 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45605 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45606
45607 {&hf_ieee80211_ff_scs_scsid,
45608 {"SCSID", "wlan.scs.scs_status_list.scsid",
45609 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45610
45611 {&hf_ieee80211_ff_scs_status,
45612 {"Status", "wlan.scs.scs_status_list.status",
45613 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
45614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45615
45616 {&hf_ieee80211_ff_scs_response_count,
45617 {"Count", "wlan.scs.scs_response.count",
45618 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45619
45620 {&hf_ieee80211_ff_vht_mimo_cntrl,
45621 {"VHT MIMO Control", "wlan.vht.mimo_control.control",
45622 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
45623 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45624
45625 {&hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
45626 {"Nc Index", "wlan.vht.mimo_control.ncindex",
45627 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,
45628 "Number of Columns Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45629
45630 {&hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
45631 {"Nr Index", "wlan.vht.mimo_control.nrindex",
45632 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,
45633 "Number of Rows Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45634
45635 {&hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
45636 {"Channel Width", "wlan.vht.mimo_control.chanwidth",
45637 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,
45638 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45639
45640 {&hf_ieee80211_ff_vht_mimo_cntrl_grouping,
45641 {"Grouping (Ng)", "wlan.vht.mimo_control.grouping",
45642 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_grouping_vals)((0 ? (const struct _value_string*)0 : ((ff_vht_mimo_cntrl_grouping_vals
))))
, 0x000300,
45643 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45644
45645 {&hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
45646 {"Codebook Information", "wlan.vht.mimo_control.codebookinfo",
45647 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000400,
45648 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45649
45650 {&hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
45651 {"Feedback Type", "wlan.vht.mimo_control.feedbacktype",
45652 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_feedback_vals)((0 ? (const struct _value_string*)0 : ((ff_vht_mimo_cntrl_feedback_vals
))))
, 0x000800,
45653 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45654
45655 {&hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
45656 {"Remaining Feedback Segments", "wlan.vht.mimo_control.remainingfeedbackseg",
45657 FT_UINT24, BASE_HEX, NULL((void*)0), 0x007000,
45658 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45659
45660 {&hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
45661 {"First Feedback Segments", "wlan.vht.mimo_control.firstfeedbackseg",
45662 FT_UINT24, BASE_HEX, NULL((void*)0), 0x008000,
45663 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45664
45665 {&hf_ieee80211_ff_vht_mimo_cntrl_reserved,
45666 {"Reserved", "wlan.vht.mimo_control.reserved",
45667 FT_UINT24, BASE_HEX, NULL((void*)0), 0x030000,
45668 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45669
45670 {&hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
45671 {"Sounding Dialog Token Number", "wlan.vht.mimo_control.sounding_dialog_token_nbr",
45672 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFC0000,
45673 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45674
45675 {&hf_ieee80211_ff_vht_action,
45676 {"VHT Action", "wlan.vht.action",
45677 FT_UINT8, BASE_DEC, VALS(vht_action_vals)((0 ? (const struct _value_string*)0 : ((vht_action_vals)))), 0,
45678 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45679
45680 {&hf_ieee80211_vht_compressed_beamforming_report,
45681 {"VHT Compressed Beamforming Report", "wlan.vht.compressed_beamforming_report",
45682 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45684
45685 {&hf_ieee80211_vht_mu_exclusive_beamforming_report,
45686 {"VHT MU Exclusive Beamforming Report","wlan.vht.exclusive_beamforming_report",
45687 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45688 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45689
45690 {&hf_ieee80211_vht_compressed_beamforming_report_snr,
45691 {"Signal to Noise Ratio (SNR)", "wlan.vht.compressed_beamforming_report.snr",
45692 FT_INT8, BASE_DEC, NULL((void*)0), 0,
45693 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45694
45695 {&hf_ieee80211_vht_compressed_beamform_scidx,
45696 {"SCIDX", "wlan.vht.compressed_beamforming_report.scidx",
45697 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45698
45699 {&hf_ieee80211_vht_mu_exclusive_beamforming_delta_snr,
45700 {"Delta SNR for space-time stream Nc for subcarrier k", "wlan.vht.exclusive_beamforming_report.delta_snr",
45701 FT_NONE, BASE_NONE, NULL((void*)0), 0,
45702 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45703
45704 {&hf_ieee80211_vht_group_id_management,
45705 {"Group ID Management", "wlan.vht.group_id_management",
45706 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45708
45709 {&hf_ieee80211_vht_membership_status_array,
45710 {"Membership Status Array", "wlan.vht.membership_status_array",
45711 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45712 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45713
45714 {&hf_ieee80211_vht_user_position_array,
45715 {"User Position Array", "wlan.vht.user_position_array",
45716 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45717 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45718
45719 {&hf_ieee80211_vht_membership_status_field,
45720 {"Membership Status Field", "wlan.vht.membership_status_array.field",
45721 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45722 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45723
45724 {&hf_ieee80211_vht_user_position_field,
45725 {"User Position Field", "wlan.vht.user_position_array.field",
45726 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45727 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45728
45729 {&hf_ieee80211_vht_operation_mode_notification,
45730 {"Operation Mode Notification", "wlan.vht.operation_mode_notification",
45731 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45732 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45733
45734 {&hf_ieee80211_ff_he_action,
45735 {"HE Action", "wlan.he.action",
45736 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(he_action_rvals)((0 ? (const struct _range_string*)0 : ((he_action_rvals)))), 0,
45737 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45738
45739 {&hf_ieee80211_ff_protected_he_action,
45740 {"Protected HE Action", "wlan.he.protected_action",
45741 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(protected_he_action_rvals)((0 ? (const struct _range_string*)0 : ((protected_he_action_rvals
))))
, 0,
45742 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45743
45744 {&hf_ieee80211_ff_protected_eht_action,
45745 {"Protected EHT Action", "wlan.eht.protected_action",
45746 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(protected_eht_action_rvals)((0 ? (const struct _range_string*)0 : ((protected_eht_action_rvals
))))
, 0,
45747 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45748
45749 {&hf_ieee80211_ff_protected_ftm_action,
45750 {"Protected FTM Action", "wlan.ftm.protected_action",
45751 FT_UINT8, BASE_DEC, VALS(protected_ftm_action_vals)((0 ? (const struct _value_string*)0 : ((protected_ftm_action_vals
))))
, 0,
45752 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45753
45754 {&hf_ieee80211_ff_eht_action,
45755 {"EHT Action", "wlan.eht.action",
45756 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(eht_action_rvals)((0 ? (const struct _range_string*)0 : ((eht_action_rvals)))), 0,
45757 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45758
45759 {&hf_ieee80211_he_mimo_control_nc_index,
45760 {"Nc Index", "wlan.he.mimo.nc_index",
45761 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
))))
,
45762 0x0000000007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45763
45764 {&hf_ieee80211_he_mimo_control_nr_index,
45765 {"Nr Index", "wlan.he.mimo.nr_index",
45766 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
))))
,
45767 0x0000000038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45768
45769 {&hf_ieee80211_he_mimo_control_bw,
45770 {"BW", "wlan.he.mimo.bw",
45771 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45772
45773 {&hf_ieee80211_he_mimo_control_grouping,
45774 {"Grouping", "wlan.he.mimo.grouping",
45775 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(he_mimo_cntrl_grouping_flags)((0 ? (const struct _val64_string*)0 : ((he_mimo_cntrl_grouping_flags
))))
,
45776 0x0000000100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45777
45778 {&hf_ieee80211_he_mimo_control_codebook_info,
45779 {"Codebook Information", "wlan.he.mimo.codebook_info",
45780 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45781
45782 {&hf_ieee80211_he_mimo_control_feedback_type,
45783 {"Feedback Type", "wlan.he.mimo.feedback_type",
45784 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(he_mimo_cntrl_feedback_vals)((0 ? (const struct _val64_string*)0 : ((he_mimo_cntrl_feedback_vals
))))
,
45785 0x0000000C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45786
45787 {&hf_ieee80211_he_mimo_control_remaining_feedback_segs,
45788 {"Remaining Feedback Segments", "wlan.he.mimo.remaining_feedback_segs",
45789 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000007000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45790
45791 {&hf_ieee80211_he_mimo_control_first_feedback_seg,
45792 {"First Feedback Segment", "wlan.he.mimo.first_feedback_seg",
45793 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000008000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45794
45795 {&hf_ieee80211_he_mimo_control_ru_start_index,
45796 {"RU Start Index", "wlan.he.mimo.ru_start_index",
45797 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00007F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45798
45799 {&hf_ieee80211_he_mimo_control_ru_end_index,
45800 {"RU End Index", "wlan.he.mimo.ru_end_index",
45801 FT_UINT40, BASE_HEX, NULL((void*)0), 0x003F800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45802
45803 {&hf_ieee80211_he_mimo_control_sounding_dialog_token_num,
45804 {"Sounding Dialog Token Number", "wlan.he.mimo.sounding_dialog_token_num",
45805 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0FC0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45806
45807 {&hf_ieee80211_he_mimo_control_reserved,
45808 {"Reserved", "wlan.he.mimo.reserved",
45809 FT_UINT40, BASE_HEX, NULL((void*)0), 0xF000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45810
45811 {&hf_ieee80211_he_mimo_control_field,
45812 {"HE MIMO Control", "wlan.he.action.he_mimo_control",
45813 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45814
45815 {&hf_ieee80211_he_compressed_beamforming_report_snr,
45816 {"AvgSNR", "wlan.he.mimo.beamforming_report.avgsnr",
45817 FT_INT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45818
45819 {&hf_ieee80211_he_compressed_beamform_scidx,
45820 {"SCIDX", "wlan.he.action.he_mimo_control.scidx",
45821 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45822
45823 {&hf_ieee80211_he_beamforming_report_len,
45824 {"Report Len", "wlan.he.action.he_mimo_control.report_len",
45825 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45826
45827 {&hf_ieee80211_tag_tspec_allocation_id,
45828 {"Allocation ID", "wlan.dmg_tspec.allocation_id",
45829 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000f,
45830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45831
45832 {&hf_ieee80211_tag_tspec_allocation_type,
45833 {"Allocation Type", "wlan.dmg_tspec.allocation_type",
45834 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000070,
45835 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45836
45837 {&hf_ieee80211_tag_tspec_allocation_format,
45838 {"Allocation Format", "wlan.dmg_tspec.allocation_format",
45839 FT_BOOLEAN, 24, NULL((void*)0), 0x000080,
45840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45841
45842 {&hf_ieee80211_tag_tspec_pseudo_static,
45843 {"Pseudo Static", "wlan.dmg_tspec.pseudo_static",
45844 FT_BOOLEAN, 24, NULL((void*)0), 0x000100,
45845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45846
45847 {&hf_ieee80211_tag_tspec_truncatable,
45848 {"Truncatable", "wlan.dmg_tspec.truncatable",
45849 FT_BOOLEAN, 24, NULL((void*)0), 0x000200,
45850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45851
45852 {&hf_ieee80211_tag_tspec_extendable,
45853 {"Extendable", "wlan.dmg_tspec.extendable",
45854 FT_BOOLEAN, 24, NULL((void*)0), 0x000400,
45855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45856
45857 {&hf_ieee80211_tag_tspec_lp_sc_used,
45858 {"LP SC Usec", "wlan.dmg_tspec.lp_sc_used",
45859 FT_BOOLEAN, 24, NULL((void*)0), 0x000800,
45860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45861
45862 {&hf_ieee80211_tag_tspec_up,
45863 {"UP", "wlan.dmg_tspec.up",
45864 FT_UINT24, BASE_HEX, NULL((void*)0), 0x007000,
45865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45866
45867 {&hf_ieee80211_tag_tspec_dest_aid,
45868 {"Destination AID", "wlan.dmg_tspec.dest_aid",
45869 FT_UINT24, BASE_HEX, NULL((void*)0), 0x7f8000,
45870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45871
45872 {&hf_ieee80211_tag_tspec_allocation_period,
45873 {"Allocation Period", "wlan.dmg_tspec.allocation_period",
45874 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45876
45877 {&hf_ieee80211_tag_tspec_min_allocation,
45878 {"Minimal Allocation", "wlan.dmg_tspec.min_allocation",
45879 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45881
45882 {&hf_ieee80211_tag_tspec_max_allocation,
45883 {"Maximal Allocation", "wlan.dmg_tspec.max_allocation",
45884 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45886
45887 {&hf_ieee80211_tag_tspec_min_duration,
45888 {"Minimal Duration", "wlan.dmg_tspec.min_duration",
45889 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45891
45892 {&hf_ieee80211_tag_tspec_num_of_constraints,
45893 {"Number Of Constraints", "wlan.dmg_tspec.num_of_constraints",
45894 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45896
45897 {&hf_ieee80211_tag_tspec_tsconst_start_time,
45898 {"TS Constraint Start Time", "wlan.dmg_tspec.tsconst.start_time",
45899 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45901
45902 {&hf_ieee80211_tag_tspec_tsconst_duration,
45903 {"TS Constraint Duration", "wlan.dmg_tspec.tsconst.duration",
45904 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45906
45907 {&hf_ieee80211_tag_tspec_tsconst_period,
45908 {"TS Constraint Period", "wlan.dmg_tspec.tsconst.period",
45909 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45911
45912 {&hf_ieee80211_tag_tspec_tsconst_interferer_mac,
45913 {"TS Constraint Interferer MAC Address", "wlan.dmg_tspec.tsconst.interferer_mac",
45914 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45915 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45916
45917 {&hf_ieee80211_tag_channel_measurement_feedback_relative_I,
45918 {"Channel Measurement Feedback Relative I", "wlan.ch_meas_fb.relative_I",
45919 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45920 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45921
45922 {&hf_ieee80211_tag_channel_measurement_feedback_relative_Q,
45923 {"Channel Measurement Feedback Relative Q", "wlan.ch_meas_fb.relative_Q",
45924 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45925 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45926
45927 {&hf_ieee80211_tag_channel_measurement_feedback_tap_delay,
45928 {"Channel Measurement Feedback Tap Delay", "wlan.ch_meas_fb.tap_delay",
45929 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45930 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45931
45932 {&hf_ieee80211_tag_channel_measurement_feedback_sector_id,
45933 {"Channel Measurement Feedback Sector ID", "wlan.ch_meas_fb.sector_id",
45934 FT_UINT8, BASE_DEC, NULL((void*)0), 0xfc,
45935 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45936
45937 {&hf_ieee80211_tag_channel_measurement_feedback_antenna_id,
45938 {"Channel Measurement Feedback Antenna ID", "wlan.ch_meas_fb.antenna_id",
45939 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45940 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45941
45942 {&hf_ieee80211_tag_awake_window,
45943 {"Awake Window", "wlan.awake_window",
45944 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45946
45947 {&hf_ieee80211_tag_addba_ext_no_frag,
45948 {"ADDBA No Fragmentation", "wlan.addba.no_frag",
45949 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
45950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45951
45952 {&hf_ieee80211_tag_addba_ext_he_fragmentation_operation,
45953 {"ADDBA HE Fragmentation Operation", "wlan.addba.he_frag_oper",
45954 FT_UINT8, BASE_HEX, NULL((void*)0), 0x06,
45955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45956
45957 {&hf_ieee80211_tag_addba_ext_reserved,
45958 {"Reserved", "wlan.addba.reserved",
45959 FT_UINT8, BASE_HEX, NULL((void*)0), 0x18,
45960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45961
45962 {&hf_ieee80211_tag_addba_ext_buffer_size,
45963 {"Extended Buffer Size", "wlan.addba.extended_buffer_size",
45964 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45965
45966 {&hf_ieee80211_tag_multi_band_ctrl_sta_role,
45967 {"STA Rold", "wlan.multi_band.ctrl_sta_role",
45968 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
45969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45970
45971 {&hf_ieee80211_tag_multi_band_ctrl_addr_present,
45972 {"STA MAC Address Present", "wlan.multi_band.ctrl_addr_present",
45973 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
45974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45975
45976 {&hf_ieee80211_tag_multi_band_ctrl_cipher_present,
45977 {"PCS Present", "wlan.multi_band.ctrl_cipher_present",
45978 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
45979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45980
45981 {&hf_ieee80211_tag_multi_band_oper_class,
45982 {"Operating Class", "wlan.multi_band.oper_class",
45983 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45985
45986 {&hf_ieee80211_tag_multi_band_channel_number,
45987 {"Channel Number", "wlan.multi_band.channel_number",
45988 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45990
45991 {&hf_ieee80211_tag_multi_band_tsf_offset,
45992 {"TSF Offset", "wlan.multi_band.tsf_offset",
45993 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
45994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45995
45996 {&hf_ieee80211_tag_multi_band_conn_ap,
45997 {"Connection Capability AP", "wlan.multi_band.conn_ap",
45998 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
45999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46000
46001 {&hf_ieee80211_tag_multi_band_conn_pcp,
46002 {"Connection Capability PCP", "wlan.multi_band.conn_pcp",
46003 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
46004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46005
46006 {&hf_ieee80211_tag_multi_band_conn_dls,
46007 {"Connection Capability DLS", "wlan.multi_band.conn_dls",
46008 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
46009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46010
46011 {&hf_ieee80211_tag_multi_band_conn_tdls,
46012 {"Connection Capability TDLS", "wlan.multi_band.conn_tdls",
46013 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
46014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46015
46016 {&hf_ieee80211_tag_multi_band_conn_ibss,
46017 {"Connection Capability IBSS", "wlan.multi_band.conn_ibss",
46018 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
46019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46020
46021 {&hf_ieee80211_tag_multi_band_fst_timeout,
46022 {"FST Session Timeout", "wlan.multi_band.fst_timeout",
46023 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46025
46026 {&hf_ieee80211_tag_multi_band_sta_mac,
46027 {"Transmitting STA MAC Address", "wlan.multi_band.sta_mac",
46028 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
46029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46030
46031 {&hf_ieee80211_tag_activity,
46032 {"Activity", "wlan.activity",
46033 FT_UINT8, 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_dmg_link_adapt_mcs,
46037 {"MCS", "wlan.dmg_link_adapt.mcs",
46038 FT_UINT8, 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_dmg_link_adapt_link_margin,
46042 {"Link Margin", "wlan.dmg_link_adapt.link_margin",
46043 FT_UINT8, 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_ref_timestamp,
46047 {"Reference Timestamp", "wlan.ref_timestamp",
46048 FT_UINT32, 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_switching_stream_non_qos,
46052 {"Non-Qos Data Frames", "wlan.switching_stream.non_qos",
46053 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0,
46054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46055
46056 {&hf_ieee80211_tag_switching_stream_param_num,
46057 {"Number Of Switching Stream Elements", "wlan.switching_stream.param_num",
46058 FT_UINT8, 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_switching_stream_old_tid,
46062 {"Old Band TID", "wlan.switching_stream.old_tid",
46063 FT_UINT16, BASE_DEC, NULL((void*)0), 0xf000,
46064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46065
46066 {&hf_ieee80211_tag_switching_stream_old_direction,
46067 {"Old Band Direction", "wlan.switching_stream.old_direction",
46068 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
46069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46070
46071 {&hf_ieee80211_tag_switching_stream_new_tid,
46072 {"New Band TID", "wlan.switching_stream.new_tid",
46073 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0780,
46074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46075
46076 {&hf_ieee80211_tag_switching_stream_new_direction,
46077 {"New Band Direction", "wlan.switching_stream.new_direction",
46078 FT_BOOLEAN, 16, NULL((void*)0), 0x0040,
46079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46080
46081 {&hf_ieee80211_tag_switching_stream_new_valid_id,
46082 {"Stream ID in New Band Valid", "wlan.switching_stream.new_valid_id",
46083 FT_BOOLEAN, 16, NULL((void*)0), 0x0020,
46084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46085
46086 {&hf_ieee80211_tag_switching_stream_llt_type,
46087 {"LLT Type", "wlan.switching_stream.llt_type",
46088 FT_BOOLEAN, 16, NULL((void*)0), 0x0010,
46089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46090
46091 {&hf_ieee80211_ff_timestamp,
46092 {"Timestamp", "wlan.fixed.timestamp",
46093 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
46094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46095
46096 {&hf_ieee80211_ff_auth_alg,
46097 {"Authentication Algorithm", "wlan.fixed.auth.alg",
46098 FT_UINT16, BASE_DEC, VALS(auth_alg)((0 ? (const struct _value_string*)0 : ((auth_alg)))), 0,
46099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46100
46101 {&hf_ieee80211_ff_beacon_interval,
46102 {"Beacon Interval", "wlan.fixed.beacon",
46103 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (size_t) (beacon_interval_base_custom)), 0,
46104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46105
46106 {&hf_ieee80211_fixed_parameters,
46107 {"Fixed parameters", "wlan.fixed.all",
46108 FT_NONE, BASE_NONE, NULL((void*)0), 0,
46109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46110
46111 {&hf_ieee80211_tagged_parameters,
46112 {"Tagged parameters", "wlan.tagged.all",
46113 FT_NONE, BASE_NONE, NULL((void*)0), 0,
46114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46115
46116 {&hf_ieee80211_tag_ssid,
46117 {"SSID", "wlan.ssid",
46118 FT_BYTES, BASE_SHOW_UTF_8_PRINTABLE0x00020000, NULL((void*)0), 0,
46119 "Indicates the identity of an ESS or IBSS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46120
46121 {&hf_ieee80211_tag_supp_rates,
46122 {"Supported Rates", "wlan.supported_rates",
46123 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_supported_rates_vals_ext, 0x0,
46124 "In Mbit/sec, (B) for Basic Rates", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46125
46126 {&hf_ieee80211_tag_fh_dwell_time,
46127 {"Dwell Time", "wlan.fh.dwell_time",
46128 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
46129 "In Time Unit (TU)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46130
46131 {&hf_ieee80211_tag_fh_hop_set,
46132 {"Hop Set", "wlan.fh.hop_set",
46133 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
46134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46135
46136 {&hf_ieee80211_tag_fh_hop_pattern,
46137 {"Hop Pattern", "wlan.fh.hop_pattern",
46138 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
46139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46140
46141 {&hf_ieee80211_tag_fh_hop_index,
46142 {"Hop Index", "wlan.fh.hop_index",
46143 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
46144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46145
46146 {&hf_ieee80211_ff_block_ack_params,
46147 {"Block Ack Parameters", "wlan.fixed.baparams",
46148 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46150
46151 {&hf_ieee80211_ff_block_ack_params_amsdu_permitted,
46152 {"A-MSDUs", "wlan.fixed.baparams.amsdu",
46153 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,
46154 "A-MSDU Permitted in QoS Data MPDUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46155
46156 {&hf_ieee80211_ff_block_ack_params_policy,
46157 {"Block Ack Policy", "wlan.fixed.baparams.policy",
46158 FT_BOOLEAN, 16, TFS(&ff_block_ack_params_policy_flag)((0 ? (const struct true_false_string*)0 : ((&ff_block_ack_params_policy_flag
))))
, 0x0002,
46159 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46160
46161 {&hf_ieee80211_ff_block_ack_params_tid,
46162 {"Traffic Identifier", "wlan.fixed.baparams.tid",
46163 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C,
46164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46165
46166 {&hf_ieee80211_ff_block_ack_params_buffer_size,
46167 {"Number of Buffers (1 Buffer = 2304 Bytes)", "wlan.fixed.baparams.buffersize",
46168 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFC0,
46169 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46170
46171 {&hf_ieee80211_ff_block_ack_timeout,
46172 {"Block Ack Timeout", "wlan.fixed.batimeout",
46173 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46174 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46175
46176 {&hf_ieee80211_ff_block_ack_ssc,
46177 {"Block Ack Starting Sequence Control (SSC)", "wlan.fixed.ssc",
46178 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46179 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46180
46181 {&hf_ieee80211_ff_block_ack_ssc_fragment,
46182 {"Fragment", "wlan.fixed.ssc.fragment",
46183 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000f,
46184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46185
46186 {&hf_ieee80211_ff_block_ack_ssc_sequence,
46187 {"Starting Sequence Number", "wlan.fixed.ssc.sequence",
46188 FT_UINT16, BASE_DEC, NULL((void*)0), 0xfff0,
46189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46190
46191 {&hf_ieee80211_ff_delba_param,
46192 {"Delete Block Ack (DELBA) Parameter Set", "wlan.fixed.delba.param",
46193 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46194 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46195
46196 {&hf_ieee80211_ff_delba_param_reserved,
46197 {"Reserved", "wlan.fixed.delba.param.reserved",
46198 FT_UINT16, BASE_HEX, NULL((void*)0), 0x07ff,
46199 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46200
46201 {&hf_ieee80211_ff_delba_param_init,
46202 {"Initiator", "wlan.fixed.delba.param.initiator",
46203 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
46204 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46205
46206 {&hf_ieee80211_ff_delba_param_tid,
46207 {"TID", "wlan.fixed.delba.param.tid",
46208 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
46209 "Traffic Identifier (TID)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46210
46211 {&hf_ieee80211_ff_max_reg_pwr,
46212 {"Maximum Regulation Power", "wlan.fixed.maxregpwr",
46213 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46214 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46215
46216 {&hf_ieee80211_ff_measurement_pilot_int,
46217 {"Measurement Pilot Interval", "wlan.fixed.msmtpilotint",
46218 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46219 "Measurement Pilot Interval Fixed Field (in TUs)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46220
46221 {&hf_ieee80211_ff_country_str,
46222 {"Country String", "wlan.fixed.country",
46223 FT_STRING, BASE_NONE, NULL((void*)0), 0,
46224 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46225
46226 {&hf_ieee80211_ff_max_tx_pwr,
46227 {"Maximum Transmit Power", "wlan.fixed.maxtxpwr",
46228 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46229 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46230
46231 {&hf_ieee80211_ff_tx_pwr_used,
46232 {"Transmit Power Used", "wlan.fixed.txpwr",
46233 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46234 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46235
46236 {&hf_ieee80211_ff_transceiver_noise_floor,
46237 {"Transceiver Noise Floor", "wlan.fixed.tnoisefloor",
46238 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46239 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46240
46241 {&hf_ieee80211_ff_channel_width,
46242 {"Supported Channel Width", "wlan.fixed.chanwidth",
46243 FT_UINT8, BASE_HEX, VALS(ff_channel_width_vals)((0 ? (const struct _value_string*)0 : ((ff_channel_width_vals
))))
, 0,
46244 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46245
46246 {&hf_ieee80211_ff_qos_info_ap,
46247 {"QoS Information (AP)", "wlan.fixed.qosinfo.ap",
46248 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46249 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46250
46251 {&hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
46252 {"EDCA Parameter Set Update Count", "wlan.fixed.qosinfo.ap.edcaupdate",
46253 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F,
46254 "Enhanced Distributed Channel Access (EDCA) Parameter Set Update Count", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46255
46256 {&hf_ieee80211_ff_qos_info_ap_q_ack,
46257 {"Q-Ack", "wlan.fixed.qosinfo.ap.qack",
46258 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,
46259 "QoS Ack", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46260
46261 {&hf_ieee80211_ff_qos_info_ap_queue_req,
46262 {"Queue Request", "wlan.fixed.qosinfo.ap.queue_req",
46263 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,
46264 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46265
46266 {&hf_ieee80211_ff_qos_info_ap_txop_request,
46267 {"TXOP Request", "wlan.fixed.qosinfo.ap.txopreq",
46268 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,
46269 "Transmit Opportunity (TXOP) Request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46270
46271 {&hf_ieee80211_ff_qos_info_ap_more_data_ack,
46272 {"More Data Ack", "wlan.fixed.qosinfo.ap.more_data_ack",
46273 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
46274 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46275
46276 {&hf_ieee80211_ff_qos_info_sta,
46277 {"QoS Information (STA)", "wlan.fixed.qosinfo.sta",
46278 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46279 "TCLAS Processing", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46280
46281 {&hf_ieee80211_ff_qos_info_sta_ac_vo,
46282 {"AC_VO U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_vo",
46283 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x01,
46284 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46285
46286 {&hf_ieee80211_ff_qos_info_sta_ac_vi,
46287 {"AC_VI U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_vi",
46288 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x02,
46289 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46290
46291 {&hf_ieee80211_ff_qos_info_sta_ac_bk,
46292 {"AC_BK U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_bk",
46293 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x04,
46294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46295
46296 {&hf_ieee80211_ff_qos_info_sta_ac_be,
46297 {"AC_BE U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_be",
46298 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x08,
46299 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46300
46301 {&hf_ieee80211_ff_qos_info_sta_q_ack,
46302 {"Q-Ack", "wlan.fixed.qosinfo.sta.qack",
46303 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,
46304 "QoS Ack", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46305
46306 {&hf_ieee80211_ff_qos_info_sta_max_sp_length,
46307 {"Max SP Length", "wlan.fixed.qosinfo.sta.max_sp_length",
46308 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,
46309 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46310
46311 {&hf_ieee80211_ff_qos_info_sta_more_data_ack,
46312 {"More Data Ack", "wlan.fixed.qosinfo.sta.more_data_ack",
46313 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,
46314 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46315
46316 {&hf_ieee80211_ff_sm_pwr_save,
46317 {"Spatial Multiplexing (SM) Power Control", "wlan.fixed.sm.powercontrol",
46318 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46319 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46320
46321 {&hf_ieee80211_ff_sm_pwr_save_enabled,
46322 {"SM Power Save", "wlan.fixed.sm.powercontrol.enabled",
46323 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
46324 "Spatial Multiplexing (SM) Power Save", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46325
46326 {&hf_ieee80211_ff_sm_pwr_save_sm_mode,
46327 {"SM Mode", "wlan.fixed.sm.powercontrol.mode",
46328 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,
46329 "Spatial Multiplexing (SM) Mode", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46330
46331 {&hf_ieee80211_ff_sm_pwr_save_reserved,
46332 {"Reserved", "wlan.fixed.sm.powercontrol.reserved",
46333 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
46334 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46335
46336 {&hf_ieee80211_ff_pco_phase_cntrl,
46337 {"Phased Coexistence Operation (PCO) Phase Control", "wlan.fixed.pco.phasecntrl",
46338 FT_BOOLEAN, BASE_NONE, TFS(&ff_pco_phase_cntrl_flag)((0 ? (const struct true_false_string*)0 : ((&ff_pco_phase_cntrl_flag
))))
, 0x0,
46339 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46340
46341 {&hf_ieee80211_ff_psmp_param_set,
46342 {"Power Save Multi-Poll (PSMP) Parameter Set", "wlan.fixed.psmp.paramset",
46343 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46344 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46345
46346 {&hf_ieee80211_ff_psmp_param_set_n_sta,
46347 {"Number of STA Info Fields Present", "wlan.fixed.psmp.paramset.nsta",
46348 FT_UINT16, BASE_HEX, NULL((void*)0), 0x000F,
46349 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46350
46351 {&hf_ieee80211_ff_psmp_param_set_more_psmp,
46352 {"More PSMP", "wlan.fixed.psmp.paramset.more",
46353 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,
46354 "More Power Save Multi-Poll (PSMP)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46355
46356 {&hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
46357 {"PSMP Sequence Duration [us]", "wlan.fixed.psmp.paramset.seqduration",
46358 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFE0,
46359 "Power Save Multi-Poll (PSMP) Sequence Duration", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46360
46361 {&hf_ieee80211_ff_mimo_cntrl,
46362 {"MIMO Control", "wlan.fixed.mimo.control",
46363 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
46364 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46365
46366 {&hf_ieee80211_ff_mimo_cntrl_nc_index,
46367 {"Nc Index", "wlan.fixed.mimo.control.ncindex",
46368 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nc_index_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_nc_index_flags
))))
, 0x0003,
46369 "Number of Columns Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46370
46371 {&hf_ieee80211_ff_mimo_cntrl_nr_index,
46372 {"Nr Index", "wlan.fixed.mimo.control.nrindex",
46373 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nr_index_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_nr_index_flags
))))
, 0x000C,
46374 "Number of Rows Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46375
46376 {&hf_ieee80211_ff_mimo_cntrl_channel_width,
46377 {"Channel Width", "wlan.fixed.mimo.control.chanwidth",
46378 FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag)((0 ? (const struct true_false_string*)0 : ((&ff_mimo_cntrl_channel_width_flag
))))
, 0x0010,
46379 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46380
46381 {&hf_ieee80211_ff_mimo_cntrl_grouping,
46382 {"Grouping (Ng)", "wlan.fixed.mimo.control.grouping",
46383 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_grouping_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_grouping_flags
))))
, 0x0060,
46384 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46385
46386 {&hf_ieee80211_ff_mimo_cntrl_coefficient_size,
46387 {"Coefficient Size (Nb)", "wlan.fixed.mimo.control.cosize",
46388 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_coefficient_size_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_coefficient_size_flags
))))
, 0x0180,
46389 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46390
46391 {&hf_ieee80211_ff_mimo_cntrl_codebook_info,
46392 {"Codebook Information", "wlan.fixed.mimo.control.codebookinfo",
46393 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_codebook_info_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_codebook_info_flags
))))
, 0x0600,
46394 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46395
46396 {&hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
46397 {"Remaining Matrix Segment", "wlan.fixed.mimo.control.matrixseg",
46398 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3800,
46399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46400
46401 {&hf_ieee80211_ff_mimo_cntrl_reserved,
46402 {"Reserved", "wlan.fixed.mimo.control.reserved",
46403 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000,
46404 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46405
46406 {&hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
46407 {"Sounding Timestamp", "wlan.fixed.mimo.control.soundingtime",
46408 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
46409 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46410
46411 {&hf_ieee80211_ff_ftm_param_delim1,
46412 {"FTM Params (Subset 1 of 3)", "wlan.fixed.ftm.param.delim1",
46413 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
46414 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46415
46416 {&hf_ieee80211_ff_ftm_param_status_indication,
46417 {"Status Indication", "wlan.fixed.ftm.param.status_indication",
46418 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0003,
46419 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46420
46421 {&hf_ieee80211_ff_ftm_param_value,
46422 {"Value", "wlan.fixed.ftm.param.value",
46423 FT_UINT16, BASE_HEX, NULL((void*)0), 0x007C,
46424 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46425
46426 {&hf_ieee80211_ff_ftm_param_reserved1,
46427 {"Reserved1", "wlan.fixed.ftm.param.reserved1",
46428 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0080,
46429 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46430
46431 {&hf_ieee80211_ff_ftm_param_burst_exponent,
46432 {"Number of Burst Exponent", "wlan.fixed.ftm.param.burst_exponent",
46433 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0F00,
46434 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46435
46436 {&hf_ieee80211_ff_ftm_param_burst_duration,
46437 {"Burst Duration", "wlan.fixed.ftm.param.burst_duration",
46438 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
46439 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46440
46441 {&hf_ieee80211_ff_ftm_param_delim2,
46442 {"FTM Params (Subset 2 of 3)", "wlan.fixed.ftm.param.delim2",
46443 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
46444 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46445
46446 {&hf_ieee80211_ff_ftm_param_min_delta_ftm,
46447 {"Min Delta FTM", "wlan.fixed.ftm.param.min_delta_ftm",
46448 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000FF,
46449 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46450
46451 {&hf_ieee80211_ff_ftm_param_partial_tsf_timer,
46452 {"Partial TSF timer", "wlan.fixed.ftm.param.partial_tsf_timer",
46453 FT_UINT32, BASE_CUSTOM, CF_FUNC(partial_tsf_custom)((const void *) (size_t) (partial_tsf_custom)), 0x00FFFF00,
46454 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46455
46456 {&hf_ieee80211_ff_ftm_param_partial_tsf_no_pref,
46457 {"Partial TSF no pref", "wlan.fixed.ftm.param.partial_tsf_no_pref",
46458 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01000000,
46459 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46460
46461 {&hf_ieee80211_ff_ftm_param_asap_capable,
46462 {"ASAP Capable", "wlan.fixed.ftm.param.asap_capable",
46463 FT_UINT32, BASE_HEX, NULL((void*)0), 0x02000000,
46464 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46465
46466 {&hf_ieee80211_ff_ftm_param_asap,
46467 {"ASAP", "wlan.fixed.ftm.param.asap",
46468 FT_UINT32, BASE_HEX, NULL((void*)0), 0x04000000,
46469 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46470
46471 {&hf_ieee80211_ff_ftm_param_ftm_per_burst,
46472 {"FTM per burst", "wlan.fixed.ftm.param.ftm_per_burst",
46473 FT_UINT32, BASE_HEX, NULL((void*)0), 0xF8000000,
46474 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46475
46476 {&hf_ieee80211_ff_ftm_param_delim3,
46477 {"FTM Params (Subset 3 of 3)", "wlan.fixed.ftm.param.delim3",
46478 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
46479 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46480
46481 {&hf_ieee80211_ff_ftm_param_reserved2,
46482 {"Reserved2", "wlan.fixed.ftm.param.reserved2",
46483 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000003,
46484 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46485
46486 {&hf_ieee80211_ff_ftm_param_format_and_bw,
46487 {"Format and Bandwidth", "wlan.fixed.ftm.param.format_and_bw",
46488 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0000FC,
46489 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46490
46491 {&hf_ieee80211_ff_ftm_param_burst_period,
46492 {"Burst Period", "wlan.fixed.ftm.param.burst_period",
46493 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFFF00,
46494 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46495
46496 {&hf_ieee80211_ff_ftm_tod_err1,
46497 {"FTM TOD Error", "wlan.fixed.ftm.tod_error",
46498 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46499 "Management action FTM LMR TOD Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46500
46501 /* az: Ranging Parameters element */
46502
46503 {&hf_ieee80211_tag_ranging_parameters,
46504 {"Ranging Parameters", "wlan.ranging",
46505 FT_UINT56, BASE_HEX, NULL((void*)0), 0,
46506 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46507
46508 {&hf_ieee80211_tag_ranging_subelt_tag,
46509 {"Subelement Tag", "wlan.tag.ranging.subelt_tag",
46510 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46511
46512 {&hf_ieee80211_tag_ranging_subelt_len,
46513 {"Subelement Len", "wlan.tag.ranging.subelt_len",
46514 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46515
46516 {&hf_ieee80211_tag_ranging_status_indication,
46517 {"Status Indication", "wlan.ranging.status",
46518 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)),
46519 "Status Indication", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46520
46521 {&hf_ieee80211_tag_ranging_value,
46522 {"Value", "wlan.ranging.value",
46523 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(6, 2)(((1U << ((6) - (2) + 1)) - 1) << (2)),
46524 "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) }},
46525
46526 {&hf_ieee80211_tag_ranging_i2r_lmr_feedback,
46527 {"I2R LMR Feedback", "wlan.ranging.i2r_lmr_feedback",
46528 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(7, 7)(((1U << ((7) - (7) + 1)) - 1) << (7)),
46529 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46530
46531 {&hf_ieee80211_tag_ranging_secure_ltf_required,
46532 {"Secure LTF Required", "wlan.ranging.secure_ltf_required",
46533 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(8, 8)(((1U << ((8) - (8) + 1)) - 1) << (8)),
46534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46535
46536 {&hf_ieee80211_tag_ranging_secure_ltf_support,
46537 {"Secure LTF Support", "wlan.ranging.secure_ltf_support",
46538 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(9, 9)(((1U << ((9) - (9) + 1)) - 1) << (9)),
46539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46540
46541 {&hf_ieee80211_tag_ranging_ranging_priority,
46542 {"Ranging Priority", "wlan.ranging.priority",
46543 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(11, 10)(((1U << ((11) - (10) + 1)) - 1) << (10)),
46544 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46545
46546 {&hf_ieee80211_tag_ranging_r2i_toa_type,
46547 {"R2I TOA Type", "wlan.ranging.r2i_toa_type",
46548 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(12, 12)(((1U << ((12) - (12) + 1)) - 1) << (12)),
46549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46550
46551 {&hf_ieee80211_tag_ranging_i2r_toa_type,
46552 {"I2R TOA Type", "wlan.ranging.i2r_toa_type",
46553 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(13, 13)(((1U << ((13) - (13) + 1)) - 1) << (13)),
46554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46555
46556 {&hf_ieee80211_tag_ranging_r2i_aoa_requested,
46557 {"R2I AOA Requested", "wlan.ranging.r2i_aoa_requested",
46558 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(14, 14)(((1U << ((14) - (14) + 1)) - 1) << (14)),
46559 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46560
46561 {&hf_ieee80211_tag_ranging_i2r_aoa_requested,
46562 {"I2R AOA Requested", "wlan.ranging.i2r_aoa_requested",
46563 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(15, 15)(((1U << ((15) - (15) + 1)) - 1) << (15)),
46564 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46565
46566 {&hf_ieee80211_tag_ranging_format_and_bandwidth,
46567 {"Format and Bandwidth", "wlan.ranging.format_and_bandwidth",
46568 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)),
46569 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46570
46571 {&hf_ieee80211_tag_ranging_immediate_r2i_feedback,
46572 {"Immediate R2I Feedback", "wlan.ranging.immediate_r2i_feedback",
46573 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(22, 22)(((1U << ((22) - (22) + 1)) - 1) << (22)),
46574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46575
46576 {&hf_ieee80211_tag_ranging_immediate_i2r_feedback,
46577 {"Immediate I2R Feedback", "wlan.ranging.immediate_i2r_feedback",
46578 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(23, 23)(((1U << ((23) - (23) + 1)) - 1) << (23)),
46579 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46580
46581 {&hf_ieee80211_tag_ranging_max_i2r_repetition,
46582 {"Max I2R Repetition", "wlan.ranging.max_i2r_repetition",
46583 FT_UINT56, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(26, 24)(((1U << ((26) - (24) + 1)) - 1) << (24)),
46584 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46585
46586 {&hf_ieee80211_tag_ranging_max_r2i_repetition,
46587 {"Max R2I Repetition", "wlan.ranging.max_r2i_repetition",
46588 FT_UINT56, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(29, 27)(((1U << ((29) - (27) + 1)) - 1) << (27)),
46589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46590
46591 {&hf_ieee80211_tag_ranging_reserved1,
46592 {"Reserved", "wlan.ranging.reserved1",
46593 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(30, 30)(((1U << ((30) - (30) + 1)) - 1) << (30)),
46594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46595
46596 {&hf_ieee80211_tag_ranging_reserved2,
46597 {"Reserved", "wlan.ranging.reserved2",
46598 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(31, 31)(((1U << ((31) - (31) + 1)) - 1) << (31)),
46599 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46600
46601 {&hf_ieee80211_tag_ranging_max_r2i_sts_le_80_mhz,
46602 {"Max R2I STS <= 80 MHz", "wlan.ranging.max_r2i_sts_le_80_mhz",
46603 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(34, 32)(((1UL << ((34) - (32) + 1)) - 1) << (32)),
46604 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46605
46606 {&hf_ieee80211_tag_ranging_max_r2i_sts_gt_80_mhz,
46607 {"Max R2I STS > 80 MHz", "wlan.ranging.max_r2i_sts_gt_80_mhz",
46608 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(37, 35)(((1UL << ((37) - (35) + 1)) - 1) << (35)),
46609 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46610
46611 {&hf_ieee80211_tag_ranging_max_r2i_ltf_total,
46612 {"Max R2I LTF Total", "wlan.ranging.max_r2i_ltf_total",
46613 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)),
46614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46615
46616 {&hf_ieee80211_tag_ranging_max_i2r_ltf_total,
46617 {"Max I2R LTF Total", "wlan.ranging.max_i2r_ltf_total",
46618 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)),
46619 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46620
46621 {&hf_ieee80211_tag_ranging_max_i2r_sts_le_80_mhz,
46622 {"Max I2R STS <= 80 MHz", "wlan.ranging.max_i2r_sts_le_80_mhz",
46623 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(44, 42)(((1UL << ((44) - (42) + 1)) - 1) << (42)),
46624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46625
46626 {&hf_ieee80211_tag_ranging_max_i2r_sts_gt_80_mhz,
46627 {"Max I2R STS > 80 MHz", "wlan.ranging.max_i2r_sts_gt_80_mhz",
46628 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(47, 45)(((1UL << ((47) - (45) + 1)) - 1) << (45)),
46629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46630
46631 {&hf_ieee80211_tag_ranging_bss_color_info,
46632 {"BSS Color Information",
46633 "wlan.tag.ftm.param.ranging.bss_color_information",
46634 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) }},
46635
46636 /* az: non-TB-specific subelement */
46637
46638 {&hf_ieee80211_tag_ranging_ntb,
46639 {"Non-TB specific subelement", "wlan.ranging.ntb",
46640 FT_UINT48, BASE_HEX, NULL((void*)0), 0,
46641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46642
46643 {&hf_ieee80211_tag_ranging_ntb_reserved1,
46644 {"Reserved", "wlan.ranging.ntb.reserved1",
46645 FT_UINT48, BASE_DEC, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
46646 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46647
46648 {&hf_ieee80211_tag_ranging_ntb_min_time_msmts,
46649 {"Min Time Between Measurements", "wlan.ranging.ntb.min_time",
46650 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)),
46651 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46652
46653 {&hf_ieee80211_tag_ranging_ntb_max_time_msmts,
46654 {"Max Time Between Measurements", "wlan.ranging.ntb.max_time",
46655 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)),
46656 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46657
46658 {&hf_ieee80211_tag_ranging_ntb_r2i_tx_power,
46659 {"R2I Tx Power", "wlan.ranging.ntb.r2i_tx_power",
46660 FT_UINT48, BASE_DEC, NULL((void*)0), GENMASK64(44, 44)(((1UL << ((44) - (44) + 1)) - 1) << (44)),
46661 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46662
46663 {&hf_ieee80211_tag_ranging_ntb_i2r_tx_power,
46664 {"I2R Tx Power", "wlan.ranging.ntb.i2r_tx_power",
46665 FT_UINT48, BASE_DEC, NULL((void*)0), GENMASK64(45, 45)(((1UL << ((45) - (45) + 1)) - 1) << (45)),
46666 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46667
46668 {&hf_ieee80211_tag_ranging_ntb_reserved2,
46669 {"Reserved", "wlan.ranging.ntb.reserved2",
46670 FT_UINT48, BASE_HEX, NULL((void*)0), GENMASK64(47, 46)(((1UL << ((47) - (46) + 1)) - 1) << (46)),
46671 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46672
46673 {&hf_ieee80211_tag_ranging_aid_rsid,
46674 {"AID/RSID", "wlan.ranging.tb.aid_rsid",
46675 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000ffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46676
46677 {&hf_ieee80211_tag_ranging_device_class,
46678 {"Device Class", "wlan.ranging.tb.device_class",
46679 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46680
46681 {&hf_ieee80211_tag_ranging_full_bw_ul_mu_mimo,
46682 {"Full Bandwidth UL MU-MIMO", "wlan.ranging.tb.full_bw_ul_mu_mimo",
46683 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46684
46685 {&hf_ieee80211_tag_ranging_trigger_frame_paddur,
46686 {"Trigger Frame Padding Duration",
46687 "wlan.ranging.tb.trigger_frame_padding_duration",
46688 FT_BOOLEAN, 32, NULL((void*)0), 0x000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46689
46690 {&hf_ieee80211_tag_ranging_max_sess_exp,
46691 {"Max Session Exp", "wlan.ranging.tb.max_session.exp",
46692 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00f00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46693
46694 {&hf_ieee80211_tag_ranging_passive_tb_ranging,
46695 {"Passive TB Ranging", "wlan.ranging.tb.passive_tb_ranging",
46696 FT_BOOLEAN, 32, NULL((void*)0), 0x01000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46697
46698 {&hf_ieee80211_tag_ranging_tb_specific_reserved,
46699 {"Reserved", "wlan.ranging.tb.reserved",
46700 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFE000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46701
46702 {&hf_ieee80211_tag_ranging_secure_he_ltf,
46703 {"Secure HE-LTF subelement", "wlan.ranging.secure_he_ltf",
46704 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
46705 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46706
46707 {&hf_ieee80211_tag_ranging_secure_he_ltf_version,
46708 {"Protocol Version", "wlan.ranging.secure_he_ltf.version",
46709 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
46710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46711
46712 {&hf_ieee80211_tag_ranging_secure_he_ltf_req,
46713 {"Secure HE-LTF Req", "wlan.ranging.secure_he_ltf.req",
46714 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
46715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46716
46717 {&hf_ieee80211_tag_ranging_secure_he_ltf_r2i_tx_window,
46718 {"R2I Tx Window", "wlan.ranging.secure_he_ltf.r2i_tx_window",
46719 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
46720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46721
46722 {&hf_ieee80211_tag_ranging_secure_he_ltf_i2r_tx_window,
46723 {"I2R Tx Window", "wlan.ranging.secure_he_ltf.i2r_tx_window",
46724 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
46725 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46726
46727 {&hf_ieee80211_tag_ranging_secure_he_ltf_reserved,
46728 {"Reserved", "wlan.ranging.secure_he_ltf.reserved",
46729 FT_UINT8, BASE_HEX, NULL((void*)0), 0xc0,
46730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46731
46732 {&hf_ieee80211_tag_dirn_meas_results_aoa_results,
46733 {"AOA Results", "wlan.etag.direction_measurement_results.aoa_results",
46734 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46735
46736 {&hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth,
46737 {"AOA Azimuth", "wlan.etag.direction_measurement_results.aoa_azimuth",
46738 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_azimuth_custom)((const void *) (size_t) (aoa_azimuth_custom)),
46739 0x0000000007ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46740
46741 {&hf_ieee80211_tag_ftm_aoa_results_aoa_elevation,
46742 {"AOA Elevation", "wlan.etag.direction_measurement_results.aoa_elevation",
46743 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_elevation_custom)((const void *) (size_t) (aoa_elevation_custom)),
46744 0x0000001ff800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46745
46746 {&hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth_accuracy,
46747 {"AOA Azimuth Accuracy",
46748 "wlan.etag.direction_measurement_results.aoa_azimuth_accuracy",
46749 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_accuracy_custom)((const void *) (size_t) (aoa_accuracy_custom)),
46750 0x00000fe00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46751
46752 {&hf_ieee80211_tag_ftm_aoa_results_aoa_elevation_accuracy,
46753 {"AOA Elevation Accuracy",
46754 "wlan.etag.direction_measurement_results.aoa_elevation_accuracy",
46755 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_accuracy_custom)((const void *) (size_t) (aoa_accuracy_custom)),
46756 0x0007f0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46757
46758 {&hf_ieee80211_tag_ftm_aoa_results_best_awv_id,
46759 {"Best AWV ID", "wlan.etag.direction_measurement_results.best_awv_id",
46760 FT_UINT48, BASE_DEC, NULL((void*)0), 0x3ff800000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46761
46762 {&hf_ieee80211_tag_ftm_aoa_results_aoa_reference,
46763 {"AOA Reference", "wlan.etag.direction_measurement_results.aoa_reference",
46764 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) }},
46765
46766 {&hf_ieee80211_tag_ftm_aoa_results_reserved,
46767 {"Reserved", "wlan.etag.direction_measurement_results.reserved",
46768 FT_UINT48, BASE_DEC, NULL((void*)0), 0x800000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46769
46770 {&hf_ieee80211_ff_ftm_max_tod_error_exponent,
46771 {"Max TOD Error Exponent", "wlan.fixed.ftm.max_tod_error_exponent",
46772 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) }},
46773
46774 {&hf_ieee80211_ff_ftm_tod_err_reserved,
46775 {"Reserved", "wlan.fixed.ftm.tod_reserved",
46776 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) }},
46777
46778 {&hf_ieee80211_ff_ftm_tod_not_continuous,
46779 {"TOD Not Continuous", "wlan.fixed.ftm.tod_not_continuous",
46780 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) }},
46781
46782 {&hf_ieee80211_ff_ftm_toa_err1,
46783 {"FTM TOA Error", "wlan.fixed.ftm_toa_err",
46784 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46785 "Management action FTM LMR TOA Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46786
46787 {&hf_ieee80211_ff_ftm_max_toa_error_exponent,
46788 {"Max TOA Error Exponent", "wlan.fixed.ftm_max_toa_error_exponent",
46789 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) }},
46790
46791 {&hf_ieee80211_ff_ftm_toa_err_reserved,
46792 {"Reserved", "wlan.fixed.ftm_toa_reserved",
46793 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) }},
46794
46795 {&hf_ieee80211_ff_ftm_invalid_measurement,
46796 {"Invalid Measurement", "wlan.fixed.ftm_invalid_measurement",
46797 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) }},
46798
46799 {&hf_ieee80211_ff_ftm_toa_type,
46800 {"TOA Type", "wlan.fixed.ftm_toa_type",
46801 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) }},
46802
46803 {&hf_ieee80211_ff_ftm_cfo,
46804 {"CFO", "wlan.fixed.ftm.param.cfo",
46805 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46806 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46807
46808 {&hf_ieee80211_ff_ftm_r2i_ndp_tx_power,
46809 {"R2I NDP Tx Power", "wlan.fixed.ftm.param.r2i_ndp_tx_power",
46810 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46811 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46812
46813 {&hf_ieee80211_ff_ftm_i2r_ndp_target_rssi,
46814 {"I2R NDP Target RSSI", "wlan.fixed.ftm.param.i2r_ndp_target_rssi",
46815 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46816 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46817
46818 {&hf_ieee80211_tag_secure_ltf_params_counter,
46819 {"Secure LTF Counter", "wlan.etag.secure_ltf_params.secure_ltf_counter",
46820 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46821
46822 {&hf_ieee80211_tag_secure_ltf_generation_sac,
46823 {"LTF Generation SAC", "wlan.etag.secure_ltf_params.ltf_generation_sac",
46824 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46825
46826 {&hf_ieee80211_tag_secure_ltf_management_sac,
46827 {"Ranging Management SAC",
46828 "wlan.etag.secure_ltf_params.ranging_management_sac",
46829 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46830
46831 {&hf_ieee80211_tag_secure_ltf_result_ltf_ofs,
46832 {"Measurement Result LTF Offset",
46833 "wlan.etag.secure_ltf_params.measurement_result_ltf_offset",
46834 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46835
46836 {&hf_ieee80211_ftm_ista_availability_count,
46837 {"ISTA Availability Count", "wlan.ranging.ista.availability_count",
46838 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46839
46840 {&hf_ieee80211_ftm_ista_availability_reserved,
46841 {"Reserved", "wlan.ranging.ista.availability_reserved",
46842 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46843
46844 {&hf_ieee80211_ftm_ista_avail_bits,
46845 {"ISTA Availability", "wlan.ranging.ista.availability_bits",
46846 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46847
46848 {&hf_ieee80211_ftm_ista_avail_pad,
46849 {"Padding", "wlan.ranging.ista.availability_pad",
46850 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46851
46852 {&hf_ieee80211_ftm_rsta_header,
46853 {"Header", "wlan.ftm.rsta.header",
46854 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46855
46856 {&hf_ieee80211_ftm_rsta_count,
46857 {"RSTA Count", "wlan.ranging.rsta.count",
46858 FT_UINT8, BASE_HEX, NULL((void*)0), 0x7F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46859
46860 {&hf_ieee80211_ftm_rsta_avail_window_bcast_fmt,
46861 {"Availability Window Broadcast Format",
46862 "wlan.ftm.rsta.availability_window_broadcast_format",
46863 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46864
46865 {&hf_ieee80211_ftm_rsta_partial_tsf_timer1,
46866 {"Partial TSF Timer", "wlan.ranging.rsta.partial_tsf_timer",
46867 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) }},
46868
46869 {&hf_ieee80211_ftm_rsta_duration1,
46870 {"Duration", "wlan.ranging.rsta.duration",
46871 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) }},
46872
46873 {&hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved1,
46874 {"Reserved", "wlan.ranging.rsta.reserved1",
46875 FT_BOOLEAN, 32, NULL((void*)0), 0x00800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46876
46877 {&hf_ieee80211_ftm_rsta_periodicity1,
46878 {"Periodicity", "wlan.ranging.rsta.periodicity1",
46879 FT_UINT32, BASE_DEC, NULL((void*)0), 0xff000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46880
46881 {&hf_ieee80211_ftm_rsta_partial_tsf_timer,
46882 {"Partial TSF Timer", "wlan.ranging.rsta.partial_tsf_timer_long",
46883 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) }},
46884
46885 {&hf_ieee80211_ftm_rsta_duration,
46886 {"Duration", "wlan.ranging.rsta.duration_long",
46887 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) }},
46888
46889 {&hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved,
46890 {"Reserved", "wlan.ranging.rsta.reserved",
46891 FT_BOOLEAN, 40, NULL((void*)0), 0x0000800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46892
46893 {&hf_ieee80211_ftm_rsta_periodicity,
46894 {"Periodicity", "wlan.ranging.rsta.periodicity",
46895 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00ff000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46896
46897 {&hf_ieee80211_ftm_rsta_format_and_bandwidth,
46898 {"Format and Bandwidth", "wlan.ftm.rsta.format_and_bandwidth",
46899 FT_UINT40, BASE_HEX, NULL((void*)0), 0x3F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46900
46901 {&hf_ieee80211_ftm_rsta_reserved,
46902 {"Reserved", "wlan.ftm.rsta.reserved",
46903 FT_UINT40, BASE_HEX, NULL((void*)0), 0xC000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46904
46905 {&hf_ieee80211_ftm_rsta_avail_subfield_short,
46906 {"RSTA Availability Information", "wlan.ranging.rsta.availability_window",
46907 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46908
46909 {&hf_ieee80211_ftm_rsta_avail_subfield_long,
46910 {"RSTA Availability Information",
46911 "wlan.ranging.rsta.availability_window_long",
46912 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46913
46914 {&hf_ieee80211_ff_psmp_sta_info,
46915 {"Power Save Multi-Poll (PSMP) Station Information", "wlan.fixed.psmp.stainfo",
46916 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
46917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46918
46919 {&hf_ieee80211_ff_psmp_sta_info_type,
46920 {"Sta Info Type", "wlan.fixed.psmp.stainfo.type",
46921 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,
46922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46923
46924 {&hf_ieee80211_ff_psmp_sta_info_dtt_start_offset,
46925 {"DTT Start Offset", "wlan.fixed.psmp.stainfo.dttstart",
46926 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_DTT_START0x00001FFC,
46927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46928
46929 {&hf_ieee80211_ff_psmp_sta_info_dtt_duration,
46930 {"DTT Duration", "wlan.fixed.psmp.stainfo.dttduration",
46931 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_DTT_DURATION0x001FE000,
46932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46933
46934 {&hf_ieee80211_ff_psmp_sta_info_sta_id,
46935 {"Target Station ID", "wlan.fixed.psmp.stainfo.staid",
46936 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_STA_ID0x001FFFE0,
46937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46938
46939 {&hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
46940 {"UTT Start Offset", "wlan.fixed.psmp.stainfo.uttstart",
46941 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_UTT_START0x0000FFE0,
46942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46943
46944 {&hf_ieee80211_ff_psmp_sta_info_utt_duration,
46945 {"UTT Duration", "wlan.fixed.psmp.stainfo.uttduration",
46946 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_UTT_DURATION0x03FF0000,
46947 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46948
46949 {&hf_ieee80211_ff_psmp_sta_info_reserved_small,
46950 {"Reserved", "wlan.fixed.psmp.stainfo.reserved",
46951 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_IA_RESERVED0xFC000000,
46952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46953
46954 {&hf_ieee80211_ff_psmp_sta_info_reserved_large,
46955 {"Reserved", "wlan.fixed.psmp.stainfo.reserved64",
46956 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
46957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46958
46959 {&hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
46960 {"Power Save Multi-Poll (PSMP) Multicast ID", "wlan.fixed.psmp.stainfo.multicastid",
46961 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
46962 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46963
46964 {&hf_ieee80211_ff_ant_selection,
46965 {"Antenna Selection", "wlan.fixed.antsel",
46966 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46968
46969 {&hf_ieee80211_ff_ant_selection_0,
46970 {"Antenna 0", "wlan.fixed.antsel.ant0",
46971 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
46972 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46973
46974 {&hf_ieee80211_ff_ant_selection_1,
46975 {"Antenna 1", "wlan.fixed.antsel.ant1",
46976 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
46977 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46978
46979 {&hf_ieee80211_ff_ant_selection_2,
46980 {"Antenna 2", "wlan.fixed.antsel.ant2",
46981 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04,
46982 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46983
46984 {&hf_ieee80211_ff_ant_selection_3,
46985 {"Antenna 3", "wlan.fixed.antsel.ant3",
46986 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
46987 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46988
46989 {&hf_ieee80211_ff_ant_selection_4,
46990 {"Antenna 4", "wlan.fixed.antsel.ant4",
46991 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10,
46992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46993
46994 {&hf_ieee80211_ff_ant_selection_5,
46995 {"Antenna 5", "wlan.fixed.antsel.ant5",
46996 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20,
46997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46998
46999 {&hf_ieee80211_ff_ant_selection_6,
47000 {"Antenna 6", "wlan.fixed.antsel.ant6",
47001 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40,
47002 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47003
47004 {&hf_ieee80211_ff_ant_selection_7,
47005 {"Antenna 7", "wlan.fixed.antsel.ant7",
47006 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
47007 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47008
47009 {&hf_ieee80211_ff_ext_channel_switch_announcement,
47010 {"Extended Channel Switch Announcement", "wlan.fixed.extchansw",
47011 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
47012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47013
47014 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
47015 {"Channel Switch Mode", "wlan.fixed.extchansw.switchmode",
47016 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,
47017 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47018
47019 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
47020 {"New Operating Class", "wlan.fixed.extchansw.new.opeclass",
47021 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FF00,
47022 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47023
47024 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
47025 {"New Channel Number", "wlan.fixed.extchansw.new.channumber",
47026 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00FF0000,
47027 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47028
47029 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
47030 {"Channel Switch Count", "wlan.extchansw.switchcount",
47031 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFF000000,
47032 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47033
47034 {&hf_ieee80211_ff_ht_info,
47035 {"HT Information", "wlan.fixed.mimo",
47036 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47037 "HT Information Fixed Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47038
47039 {&hf_ieee80211_ff_ht_info_information_request,
47040 {"Information Request", "wlan.fixed.mimo.control.inforequest",
47041 FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag)((0 ? (const struct true_false_string*)0 : ((&ff_ht_info_information_request_flag
))))
, 0x01,
47042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47043
47044 {&hf_ieee80211_ff_ht_info_40_mhz_intolerant,
47045 {"40 MHz Intolerant", "wlan.fixed.mimo.control.intolerant",
47046 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,
47047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47048
47049 {&hf_ieee80211_ff_ht_info_sta_chan_width,
47050 {"Station Channel Width", "wlan.fixed.mimo.control.chanwidth",
47051 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,
47052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47053
47054 {&hf_ieee80211_ff_ht_info_reserved,
47055 {"Reserved", "wlan.fixed.reserved",
47056 FT_UINT8, BASE_HEX, 0, 0xF8,
47057 "Reserved Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47058
47059 {&hf_ieee80211_ff_ht_action,
47060 {"HT Action", "wlan.fixed.htact",
47061 FT_UINT8, BASE_HEX, VALS(ff_ht_action_flags)((0 ? (const struct _value_string*)0 : ((ff_ht_action_flags))
))
, 0,
47062 "HT Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47063
47064 {&hf_ieee80211_ff_mimo_csi_snr,
47065 {"Signal to Noise Ratio (SNR)", "wlan.mimo.csimatrices.snr",
47066 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47067 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47068
47069 {&hf_ieee80211_ff_mimo_csi_matrices,
47070 {"CSI Matrices", "wlan.mimo.csimatrices",
47071 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47072 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47073
47074 {&hf_ieee80211_ff_mimo_csi_bf_matrices,
47075 {"Beamforming Feedback Matrices", "wlan.mimo.csimatrices.bf",
47076 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47077 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47078
47079 {&hf_ieee80211_ff_mimo_csi_cbf_matrices,
47080 {"Compressed Beamforming Feedback Matrices", "wlan.mimo.csimatrices.cbf",
47081 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47082 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47083
47084 {&hf_ieee80211_ff_public_action,
47085 {"Public Action", "wlan.fixed.publicact",
47086 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ff_pa_action_codes_ext, 0,
47087 "Public Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47088
47089 {&hf_ieee80211_ff_protected_public_action,
47090 {"Protected Public Action", "wlan.fixed.protectedpublicact",
47091 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ff_ppa_action_codes_ext, 0,
47092 "Protected Public Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47093
47094 {&hf_ieee80211_ff_capture,
47095 {"Capabilities Information", "wlan.fixed.capabilities",
47096 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47097 "Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47098
47099 {&hf_ieee80211_ff_cf_ess,
47100 {"ESS capabilities", "wlan.fixed.capabilities.ess",
47101 FT_BOOLEAN, 16, TFS(&cf_ess_flags)((0 ? (const struct true_false_string*)0 : ((&cf_ess_flags
))))
, 0x0001,
47102 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47103
47104 {&hf_ieee80211_ff_cf_ibss,
47105 {"IBSS status", "wlan.fixed.capabilities.ibss",
47106 FT_BOOLEAN, 16, TFS(&cf_ibss_flags)((0 ? (const struct true_false_string*)0 : ((&cf_ibss_flags
))))
, 0x0002,
47107 "IBSS participation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47108
47109 {&hf_ieee80211_ff_cf_reserved1,
47110 {"Reserved", "wlan.fixed.capabilities.reserved1",
47111 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47112
47113 {&hf_ieee80211_ff_cf_reserved2,
47114 {"Reserved", "wlan.fixed.capabilities.reserved2",
47115 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47116
47117 {&hf_ieee80211_ff_cf_privacy,
47118 {"Privacy", "wlan.fixed.capabilities.privacy",
47119 FT_BOOLEAN, 16, TFS(&cf_privacy_flags)((0 ? (const struct true_false_string*)0 : ((&cf_privacy_flags
))))
, 0x0010,
47120 "Data privacy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47121
47122 {&hf_ieee80211_ff_cf_preamble,
47123 {"Short Preamble", "wlan.fixed.capabilities.short_preamble",
47124 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x0020,
47125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47126
47127 {&hf_ieee80211_ff_cf_critical_update_flag,
47128 {"Critical Update Flag", "wlan.fixed.capabilities.critical_update_flag",
47129 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47130
47131 {&hf_ieee80211_ff_cf_nontran_bss_critical_update_flag,
47132 {"Nontransmitted BSSIDs Critical Update Flag", "wlan.fixed.capabilities.nontran_bss_critical_update_flag",
47133 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47134
47135 {&hf_ieee80211_ff_cf_spec_man,
47136 {"Spectrum Management", "wlan.fixed.capabilities.spec_man",
47137 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x0100,
47138 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47139
47140 {&hf_ieee80211_ff_cf_qos,
47141 {"QoS", "wlan.fixed.capabilities.qos",
47142 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x0200,
47143 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47144
47145 {&hf_ieee80211_ff_cf_short_slot_time,
47146 {"Short Slot Time", "wlan.fixed.capabilities.short_slot_time",
47147 FT_BOOLEAN, 16, TFS(&tfs_inuse_not_inuse)((0 ? (const struct true_false_string*)0 : ((&tfs_inuse_not_inuse
))))
, 0x0400,
47148 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47149
47150 {&hf_ieee80211_ff_cf_apsd,
47151 {"Automatic Power Save Delivery", "wlan.fixed.capabilities.apsd",
47152 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x0800,
47153 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47154
47155 {&hf_ieee80211_ff_cf_radio_measurement,
47156 {"Radio Measurement", "wlan.fixed.capabilities.radio_measurement",
47157 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x1000,
47158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47159
47160 {&hf_ieee80211_ff_cf_epd,
47161 {"EPD", "wlan.fixed.capabilities.epd",
47162 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x2000,
47163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47164
47165 {&hf_ieee80211_ff_cf_reserved5,
47166 {"Reserved", "wlan.fixed.capabilities.reserved5",
47167 FT_UINT16, BASE_DEC, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47168
47169 {&hf_ieee80211_ff_cf_reserved6,
47170 {"Reserved", "wlan.fixed.capabilities.reserved6",
47171 FT_UINT16, BASE_DEC, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47172
47173 {&hf_ieee80211_ff_auth_seq,
47174 {"Authentication SEQ", "wlan.fixed.auth_seq",
47175 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47176 "Authentication Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47177
47178 {&hf_ieee80211_ff_assoc_id,
47179 {"Association ID", "wlan.fixed.aid",
47180 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3FFF,
47181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47182
47183 {&hf_ieee80211_ff_listen_ival,
47184 {"Listen Interval", "wlan.fixed.listen_ival",
47185 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47187
47188 {&hf_ieee80211_ff_current_ap,
47189 {"Current AP", "wlan.fixed.current_ap",
47190 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47191 "MAC address of current AP", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47192
47193 {&hf_ieee80211_ff_reason,
47194 {"Reason code", "wlan.fixed.reason_code",
47195 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_reason_code_ext, 0,
47196 "Reason for unsolicited notification", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47197
47198 {&hf_ieee80211_ff_status_code,
47199 {"Status code", "wlan.fixed.status_code",
47200 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
47201 "Status of requested event", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47202
47203 {&hf_ieee80211_ff_category_code,
47204 {"Category code", "wlan.fixed.category_code",
47205 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &category_codes_ext, 0,
47206 "Management action category", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47207
47208 {&hf_ieee80211_ff_action_code,
47209 {"Action code", "wlan.fixed.action_code",
47210 FT_UINT16, BASE_DEC, VALS(action_codes)((0 ? (const struct _value_string*)0 : ((action_codes)))), 0,
47211 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47212
47213 {&hf_ieee80211_ff_dialog_token,
47214 {"Dialog token", "wlan.fixed.dialog_token",
47215 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47216 "Management action dialog token", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47217
47218 {&hf_ieee80211_ff_trigger,
47219 {"Trigger", "wlan.fixed.trigger",
47220 FT_UINT8, BASE_DEC, VALS(ftm_trigger_vals)((0 ? (const struct _value_string*)0 : ((ftm_trigger_vals)))), 0,
47221 "FTM action trigger", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47222
47223 {&hf_ieee80211_ff_ftm_tod,
47224 {"FTM TOD", "wlan.fixed.ftm_tod",
47225 FT_UINT48, BASE_DEC, NULL((void*)0), 0,
47226 "Management action FTM TOD", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47227
47228 {&hf_ieee80211_ff_ftm_toa,
47229 {"FTM TOA", "wlan.fixed.ftm_toa",
47230 FT_UINT48, BASE_DEC, NULL((void*)0), 0,
47231 "Management action FTM TOA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47232
47233 {&hf_ieee80211_ff_ftm_tod_err,
47234 {"FTM TOD Error", "wlan.fixed.ftm_tod_err",
47235 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47236 "Management action FTM TOD Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47237
47238 {&hf_ieee80211_ff_ftm_toa_err,
47239 {"FTM TOA Error", "wlan.fixed.ftm_toa_err",
47240 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47241 "Management action FTM TOA Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47242
47243 {&hf_ieee80211_ff_followup_dialog_token,
47244 {"Followup Dialog token", "wlan.fixed.followup_dialog_token",
47245 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47246 "Management action followup dialog token", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47247
47248 {&hf_ieee80211_ff_marvell_action_type,
47249 {"Marvell Action type", "wlan.fixed.mrvl_action_type",
47250 FT_UINT8, BASE_DEC, VALS(vendor_action_types_mrvl)((0 ? (const struct _value_string*)0 : ((vendor_action_types_mrvl
))))
, 0,
47251 "Vendor Specific Action Type (Marvell)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47252
47253 {&hf_ieee80211_ff_marvell_mesh_mgt_action_code,
47254 {"Mesh action(Marvell)", "wlan.fixed.mrvl_mesh_action",
47255 FT_UINT8, BASE_HEX, VALS(mesh_mgt_action_codes_mrvl)((0 ? (const struct _value_string*)0 : ((mesh_mgt_action_codes_mrvl
))))
, 0,
47256 "Mesh action code(Marvell)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47257
47258 {&hf_ieee80211_ff_marvell_mesh_mgt_length,
47259 {"Message Length", "wlan.fixed.length",
47260 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47262
47263 {&hf_ieee80211_ff_marvell_mesh_mgt_mode,
47264 {"Message Mode", "wlan.fixed.mode",
47265 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47266 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47267
47268 {&hf_ieee80211_ff_marvell_mesh_mgt_ttl,
47269 {"Message TTL", "wlan.fixed.ttl",
47270 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47271 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47272
47273 {&hf_ieee80211_ff_marvell_mesh_mgt_dstcount,
47274 {"Destination Count", "wlan.fixed.dstcount",
47275 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47276 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47277
47278 {&hf_ieee80211_ff_marvell_mesh_mgt_hopcount,
47279 {"Hop Count", "wlan.fixed.hopcount",
47280 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47282
47283 {&hf_ieee80211_ff_marvell_mesh_mgt_rreqid,
47284 {"RREQ ID", "wlan.fixed.rreqid",
47285 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47286 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47287
47288 {&hf_ieee80211_ff_marvell_mesh_mgt_sa,
47289 {"Source Address", "wlan.fixed.sa",
47290 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47291 "Source MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47292
47293 {&hf_ieee80211_ff_marvell_mesh_mgt_ssn,
47294 {"SSN", "wlan.fixed.ssn",
47295 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47296 "Source Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47297
47298 {&hf_ieee80211_ff_marvell_mesh_mgt_metric,
47299 {"Metric", "wlan.fixed.metric",
47300 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47301 "Route Metric", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47302
47303 {&hf_ieee80211_ff_marvell_mesh_mgt_flags,
47304 {"RREQ Flags", "wlan.fixed.flags",
47305 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47306 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47307
47308 {&hf_ieee80211_ff_marvell_mesh_mgt_da,
47309 {"Destination Address", "wlan.fixed.da",
47310 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47311 "Destination MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47312
47313 {&hf_ieee80211_ff_marvell_mesh_mgt_dsn,
47314 {"DSN", "wlan.fixed.dsn",
47315 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47316 "Destination Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47317
47318 {&hf_ieee80211_ff_marvell_mesh_mgt_lifetime,
47319 {"Lifetime", "wlan.fixed.lifetime",
47320 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47321 "Route Lifetime", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47322
47323 {&hf_ieee80211_ff_wme_action_code,
47324 {"Action code", "wlan.fixed.action_code",
47325 FT_UINT16, BASE_HEX, VALS(wme_action_codes)((0 ? (const struct _value_string*)0 : ((wme_action_codes)))), 0,
47326 "Management notification action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47327
47328 {&hf_ieee80211_ff_wme_status_code,
47329 {"Status code", "wlan.fixed.status_code",
47330 FT_UINT16, BASE_HEX, VALS(wme_status_codes)((0 ? (const struct _value_string*)0 : ((wme_status_codes)))), 0,
47331 "Management notification setup response status code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47332
47333 {&hf_ieee80211_ff_mesh_action,
47334 {"Mesh Action code", "wlan.fixed.mesh_action",
47335 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &mesh_action_ext, 0,
47336 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47337
47338 {&hf_ieee80211_ff_multihop_action,
47339 {"Multihop Action code", "wlan.fixed.multihop_action",
47340 FT_UINT8, BASE_HEX, VALS(multihop_action)((0 ? (const struct _value_string*)0 : ((multihop_action)))), 0,
47341 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47342
47343 {&hf_ieee80211_ff_mesh_flags,
47344 {"Mesh Flags", "wlan.fixed.mesh_flags",
47345 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47346 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47347
47348 {&hf_ieee80211_ff_mesh_ttl,
47349 {"Mesh TTL", "wlan.fixed.mesh_ttl",
47350 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47352
47353 {&hf_ieee80211_ff_mesh_sequence,
47354 {"Sequence Number", "wlan.fixed.mesh_sequence",
47355 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
47356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47357
47358 {&hf_ieee80211_ff_mesh_addr4,
47359 {"Mesh Extended Address 4", "wlan.fixed.mesh_addr4",
47360 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47361 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47362
47363 {&hf_ieee80211_ff_mesh_addr5,
47364 {"Mesh Extended Address 5", "wlan.fixed.mesh_addr5",
47365 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47366 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47367
47368 {&hf_ieee80211_ff_mesh_addr6,
47369 {"Mesh Extended Address 6", "wlan.fixed.mesh_addr6",
47370 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47371 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47372
47373 {&hf_ieee80211_ff_selfprot_action,
47374 {"Self-protected Action code", "wlan.fixed.selfprot_action",
47375 FT_UINT8, BASE_HEX, VALS(selfprot_action)((0 ? (const struct _value_string*)0 : ((selfprot_action)))), 0,
47376 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47377
47378 {&hf_ieee80211_mesh_peering_proto,
47379 {"Mesh Peering Protocol ID", "wlan.peering.proto",
47380 FT_UINT16, BASE_HEX, VALS(mesh_peering_proto_ids)((0 ? (const struct _value_string*)0 : ((mesh_peering_proto_ids
))))
, 0,
47381 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47382
47383 {&hf_ieee80211_mesh_peering_local_link_id,
47384 {"Local Link ID", "wlan.peering.local_id",
47385 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47386 "Mesh Peering Management Local Link ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47387
47388 {&hf_ieee80211_mesh_peering_peer_link_id,
47389 {"Peer Link ID", "wlan.peering.peer_id",
47390 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47391 "Mesh Peering Management Peer Link ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47392
47393 {&hf_ieee80211_ff_hwmp_flags,
47394 {"HWMP Flags", "wlan.hwmp.flags",
47395 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47396 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47397
47398 {&hf_ieee80211_ff_hwmp_hopcount,
47399 {"HWMP Hop Count", "wlan.hwmp.hopcount",
47400 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47401 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47402
47403 {&hf_ieee80211_ff_hwmp_ttl,
47404 {"HWMP TTL", "wlan.hwmp.ttl",
47405 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47406 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47407
47408 {&hf_ieee80211_ff_hwmp_pdid,
47409 {"HWMP Path Discovery ID", "wlan.hwmp.pdid",
47410 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47411 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47412
47413 {&hf_ieee80211_ff_hwmp_orig_sta,
47414 {"Originator STA Address", "wlan.hwmp.orig_sta",
47415 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47416 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47417
47418 {&hf_ieee80211_ff_hwmp_orig_sn,
47419 {"HWMP Originator Sequence Number", "wlan.hwmp.orig_sn",
47420 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47421 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
47422
47423 {&hf_ieee80211_ff_hwmp_orig_ext,
47424 {"Originator External Address", "wlan.hwmp.orig_ext",
47425 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47426 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47427
47428 {&hf_ieee80211_ff_hwmp_lifetime,
47429 {"HWMP Lifetime", "wlan.hwmp.lifetime",
47430 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47431 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47432
47433 {&hf_ieee80211_ff_hwmp_metric,
47434 {"HWMP Metric", "wlan.hwmp.metric",
47435 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47436 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47437
47438 {&hf_ieee80211_ff_hwmp_targ_count,
47439 {"HWMP Target Count", "wlan.hwmp.targ_count",
47440 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47441 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47442
47443 {&hf_ieee80211_ff_hwmp_targ_flags,
47444 {"HWMP Per-Target Flags", "wlan.hwmp.targ_flags",
47445 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47446 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47447
47448 {&hf_ieee80211_ff_hwmp_targ_to_flags,
47449 {"TO Flag", "wlan.hwmp.to_flag",
47450 FT_BOOLEAN, 8, TFS(&hwmp_targ_to_flags)((0 ? (const struct true_false_string*)0 : ((&hwmp_targ_to_flags
))))
, 0x01,
47451 "Target Only Flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47452
47453 {&hf_ieee80211_ff_hwmp_targ_usn_flags,
47454 {"USN Flag", "wlan.hwmp.usn_flag",
47455 FT_BOOLEAN, 8, TFS(&hwmp_targ_usn_flags)((0 ? (const struct true_false_string*)0 : ((&hwmp_targ_usn_flags
))))
, 0x04,
47456 "Unknown Target HWMP Sequence Number Flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47457
47458 {&hf_ieee80211_ff_hwmp_targ_sta,
47459 {"Target STA Address", "wlan.hwmp.targ_sta",
47460 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47461 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47462
47463 {&hf_ieee80211_ff_hwmp_targ_ext,
47464 {"Target External Address", "wlan.hwmp.targ_ext",
47465 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47466 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47467
47468 {&hf_ieee80211_ff_hwmp_targ_sn,
47469 {"Target HWMP Sequence Number", "wlan.hwmp.targ_sn",
47470 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47471 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47472
47473 {&hf_ieee80211_mesh_config_path_sel_protocol,
47474 {"Path Selection Protocol", "wlan.mesh.config.ps_protocol",
47475 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47476 "Mesh Configuration Path Selection Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47477
47478 {&hf_ieee80211_mesh_config_path_sel_metric,
47479 {"Path Selection Metric", "wlan.mesh.config.ps_metric",
47480 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47481 "Mesh Configuration Path Selection Metric", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47482
47483 {&hf_ieee80211_mesh_config_congestion_control,
47484 {"Congestion Control", "wlan.mesh.config.cong_ctl",
47485 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47486 "Mesh Configuration Congestion Control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47487
47488 {&hf_ieee80211_mesh_config_sync_method,
47489 {"Synchronization Method", "wlan.mesh.config.sync_method",
47490 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47491 "Mesh Configuration Synchronization Method", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47492
47493 {&hf_ieee80211_mesh_config_auth_protocol,
47494 {"Authentication Protocol", "wlan.mesh.config.auth_protocol",
47495 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47496 "Mesh Configuration Authentication Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47497
47498 {&hf_ieee80211_mesh_config_formation_info,
47499 {"Formation Info", "wlan.mesh.config.formation_info",
47500 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47501 "Mesh Configuration Formation Info", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47502
47503 {&hf_ieee80211_mesh_form_info_conn_to_mesh_gate,
47504 {"Connected to Mesh Gate", "wlan.mesh.formation_info.connect_to_mesh_gate",
47505 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x01,
47506 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47507
47508 {&hf_ieee80211_mesh_form_info_num_of_peerings,
47509 {"Number of Peerings", "wlan.mesh.config.formation_info.num_peers",
47510 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7E,
47511 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47512
47513 {&hf_ieee80211_mesh_form_info_conn_to_as,
47514 {"Connected to AS", "wlan.mesh.formation_info.connect_to_as",
47515 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x80,
47516 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47517
47518 {&hf_ieee80211_mesh_config_capability,
47519 {"Capability", "wlan.mesh.config.cap",
47520 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47521 "Mesh Configuration Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47522
47523 {&hf_ieee80211_mesh_config_cap_accepting,
47524 {"Accepting Additional Mesh Peerings", "wlan.mesh.config.cap.accept",
47525 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x01,
47526 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47527
47528 {&hf_ieee80211_mesh_config_cap_mcca_support,
47529 {"MCCA Support", "wlan.mesh.config.cap.mcca_support",
47530 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x02,
47531 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47532
47533 {&hf_ieee80211_mesh_config_cap_mcca_enabled,
47534 {"MCCA Enabled", "wlan.mesh.config.cap.mcca_enabled",
47535 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x04,
47536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47537
47538 {&hf_ieee80211_mesh_config_cap_forwarding,
47539 {"Mesh Forwarding", "wlan.mesh.config.cap.forwarding",
47540 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x08,
47541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47542
47543 {&hf_ieee80211_mesh_config_cap_mbca_enabled,
47544 {"MBCA Enabled", "wlan.mesh.config.cap.mbca_enabled",
47545 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
47546 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47547
47548 {&hf_ieee80211_mesh_config_cap_tbtt_adjusting,
47549 {"TBTT Adjustment", "wlan.mesh.config.cap.tbtt_adjusting",
47550 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x20,
47551 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47552
47553 {&hf_ieee80211_mesh_config_cap_power_save_level,
47554 {"Power Save", "wlan.mesh.config.cap.power_save_level",
47555 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,
47556 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47557
47558 {&hf_ieee80211_mesh_config_cap_reserved,
47559 {"Reserved", "wlan.mesh.config.cap.reserved",
47560 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
47561 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47562
47563 {&hf_ieee80211_mesh_id,
47564 {"Mesh ID", "wlan.mesh.id",
47565 FT_STRING, BASE_NONE, NULL((void*)0), 0,
47566 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47567
47568 {&hf_ieee80211_bcn_timing_rctrl,
47569 {"Report Control", "wlan.bcntime.rctrl",
47570 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47571 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47572
47573 {&hf_ieee80211_bcn_timing_rctrl_more,
47574 {"More Beacon Timing Elements", "wlan.bcntime.rctrl.more",
47575 FT_BOOLEAN, 8, TFS(&tfs_more_nomore)((0 ? (const struct true_false_string*)0 : ((&tfs_more_nomore
))))
, 0x01,
47576 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47577
47578 {&hf_ieee80211_bcn_timing_rctrl_element_num,
47579 {"Beacon Timing Element Number", "wlan.bcntime.rctrl.elem_num",
47580 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0E,
47581 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47582
47583 {&hf_ieee80211_bcn_timing_rctrl_status_num,
47584 {"Status Number", "wlan.bcntime.rctrl.status_num",
47585 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
47586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47587
47588 {&hf_ieee80211_bcn_timing_info,
47589 {"Beacon Timing Info", "wlan.bcntime.info",
47590 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47592
47593 {&hf_ieee80211_bcn_timing_info_nsta_id,
47594 {"Neighbor STA ID", "wlan.bcntime.info.nstaid",
47595 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47597
47598 {&hf_ieee80211_bcn_timing_info_nsta_tbtt,
47599 {"Neighbor STA TBTT", "wlan.bcntime.info.nstatbtt",
47600 FT_UINT24, BASE_DEC, NULL((void*)0), 0,
47601 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47602
47603 {&hf_ieee80211_bcn_timing_info_nsta_bi,
47604 {"Neighbor STA Beacon Interval", "wlan.bcntime.info.nstabi",
47605 FT_UINT16, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (size_t) (beacon_interval_base_custom)), 0,
47606 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47607
47608 {&hf_ieee80211_gann_flags,
47609 {"GANN Flags", "wlan.gann.flags",
47610 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47611 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47612
47613 {&hf_ieee80211_gann_flags_reserved,
47614 {"Reserved", "wlan.gann.flags.reserved",
47615 FT_UINT8, BASE_HEX, NULL((void*)0), 0xff,
47616 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47617
47618 {&hf_ieee80211_gann_hop_count,
47619 {"GANN Hop count", "wlan.gann.hop_count",
47620 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47621 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47622
47623 {&hf_ieee80211_gann_elem_ttl,
47624 {"GANN Element TTL", "wlan.gann.elem_ttl",
47625 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47626 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47627
47628 {&hf_ieee80211_gann_mesh_gate_addr,
47629 {"GANN Mesh Gate Address", "wlan.gann.gate_addr",
47630 FT_BYTES, SEP_COLON, NULL((void*)0), 0,
47631 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47632
47633 {&hf_ieee80211_gann_seq_num,
47634 {"GANN Sequence Number", "wlan.gann.seq_num",
47635 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47637
47638 {&hf_ieee80211_gann_interval,
47639 {"GANN Interval", "wlan.gann.interval",
47640 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47642
47643 {&hf_ieee80211_mesh_mic,
47644 {"Mesh Peering Management MIC", "wlan.mesh.mic",
47645 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47646
47647 {&hf_ieee80211_mesh_ampe_encrypted_data,
47648 {"Authenticated Mesh Peering Exchange Encrypted Data", "wlan.mesh.ampe.encrypted_data",
47649 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47650
47651 {&hf_ieee80211_rann_flags,
47652 {"RANN Flags", "wlan.rann.flags",
47653 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47654 "Root Announcement Flags", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47655
47656 {&hf_ieee80211_rann_root_sta,
47657 {"Root STA Address", "wlan.rann.root_sta", FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47658 "Root Mesh STA Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47659
47660 {&hf_ieee80211_rann_sn,
47661 {"Root STA Sequence Number", "wlan.rann.rann_sn",
47662 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47663 "Root Mesh STA Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47664
47665 {&hf_ieee80211_rann_interval,
47666 {"RANN Interval", "wlan.rann.interval",
47667 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47668 "Root Announcement Interval", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47669
47670 {&hf_ieee80211_pxu_pxu_id,
47671 {"PXU ID", "wlan.pxu.pxu_id",
47672 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47673 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47674
47675 {&hf_ieee80211_pxu_pxu_origin_mac,
47676 {"PXU Originator MAC Address", "wlan.pxu.origin_mac",
47677 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47678 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47679
47680 {&hf_ieee80211_pxu_no_proxy_info,
47681 {"Number of Proxy Information", "wlan.pxu.no_proxy_info",
47682 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47684
47685 {&hf_ieee80211_pxu_proxy_info,
47686 {"Proxy Information", "wlan.pxu.proxy_info",
47687 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47688 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47689
47690 {&hf_ieee80211_pxu_proxy_info_flags,
47691 {"Flags", "wlan.pxu.pxu_info.flags",
47692 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47693 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47694
47695 {&hf_ieee80211_pxu_proxy_info_flags_delete,
47696 {"Delete", "wlan.pxu.pxu_info.flags.delete",
47697 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
47698 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47699
47700 {&hf_ieee80211_pxu_proxy_info_flags_orig_is_proxy,
47701 {"Originator is Proxy", "wlan.pxu.pxu_info.flags.orig_is_proxy",
47702 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
47703 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47704
47705 {&hf_ieee80211_pxu_proxy_info_flags_lifetime,
47706 {"Lifetime", "wlan.pxu.pxu_info.flags.lifetime",
47707 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
47708 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47709
47710 {&hf_ieee80211_pxu_proxy_info_flags_reserved,
47711 {"Reserved", "wlan.pxu.pxu_info.flags.reserved",
47712 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
47713 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47714
47715 {&hf_ieee80211_pxu_proxy_info_ext_mac,
47716 {"External MAC Address", "wlan.pxu.pxu_info.ext_mac",
47717 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47719
47720 {&hf_ieee80211_pxu_proxy_info_seq_num,
47721 {"Proxy Information Sequence Number", "wlan.pxu.pxu_info.seq_num",
47722 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47724
47725 {&hf_ieee80211_pxu_proxy_info_proxy_mac,
47726 {"Proxy MAC Address", "wlan.pxu.pxu_info.proxy_mac",
47727 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47728 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47729
47730 {&hf_ieee80211_pxu_proxy_info_lifetime,
47731 {"Proxy Information Lifetime", "wlan.pxu.pxu_info.lifetime",
47732 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47734
47735 {&hf_ieee80211_pxuc_pxu_id,
47736 {"PXU ID", "wlan.pxuc.pxu_id",
47737 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47739
47740 {&hf_ieee80211_pxuc_pxu_recip_mac,
47741 {"PXU Recipient MAC Address", "wlan.pxuc.recip_mac",
47742 FT_BYTES, SEP_COLON, NULL((void*)0), 0,
47743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47744
47745 {&hf_ieee80211_ff_qos_action_code,
47746 {"Action code", "wlan.fixed.action_code",
47747 FT_UINT16, BASE_HEX, VALS(qos_action_codes)((0 ? (const struct _value_string*)0 : ((qos_action_codes)))), 0,
47748 "QoS management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47749
47750 {&hf_ieee80211_ff_ba_action,
47751 {"Action code", "wlan.fixed.action_code",
47752 FT_UINT8, BASE_HEX, VALS(ba_action_codes)((0 ? (const struct _value_string*)0 : ((ba_action_codes)))), 0,
47753 "Block Ack action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47754
47755 {&hf_ieee80211_ff_check_beacon,
47756 {"Check Beacon", "wlan.fixed.check_beacon",
47757 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47758 "Unprotected WNM Check Beacon", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47759
47760 {&hf_ieee80211_ff_tod,
47761 {"TOD", "wlan.fixed.tod",
47762 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47763 "Previous TS of transmit antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47764
47765 {&hf_ieee80211_ff_toa,
47766 {"TOA", "wlan.fixed.toa",
47767 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47768 "Previous TS of receive antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47769
47770 {&hf_ieee80211_ff_max_tod_err,
47771 {"MAX TOD ERROR", "wlan.fixed.max_tod_err",
47772 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47773 "Maximal Error at Previous TS of transmit antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47774
47775 {&hf_ieee80211_ff_max_toa_err,
47776 {"MAX TOA ERROR", "wlan.fixed.max_toa_err",
47777 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47778 "Maximal Error at Previous TS of receive antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47779
47780 {&hf_ieee80211_ff_dls_action_code,
47781 {"Action code", "wlan.fixed.action_code",
47782 FT_UINT16, BASE_HEX, VALS(dls_action_codes)((0 ? (const struct _value_string*)0 : ((dls_action_codes)))), 0,
47783 "DLS management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47784
47785 {&hf_ieee80211_ff_dst_mac_addr,
47786 {"Destination address", "wlan.fixed.dst_mac_addr",
47787 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47788 "Destination MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47789
47790 {&hf_ieee80211_ff_src_mac_addr,
47791 {"Source address", "wlan.fixed.src_mac_addr",
47792 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47793 "Source MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47794
47795 {&hf_ieee80211_ff_req_ap_addr,
47796 {"RequesterAP address", "wlan.fixed.req_ap_addr",
47797 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47798 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47799
47800 {&hf_ieee80211_ff_res_ap_addr,
47801 {"ResponderAP address", "wlan.fixed.res_ap_addr",
47802 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47803 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47804
47805 {&hf_ieee80211_ff_ft_action_code,
47806 {"Action code", "wlan.fixed.action_code",
47807 FT_UINT8, BASE_DEC, VALS(ft_action_codes)((0 ? (const struct _value_string*)0 : ((ft_action_codes)))), 0,
47808 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47809
47810 {&hf_ieee80211_ff_sta_address,
47811 {"STA Address", "wlan.fixed.sta_address",
47812 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47813 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47814
47815 {&hf_ieee80211_ff_target_ap_address,
47816 {"Target AP Address", "wlan.fixed.target_ap_address",
47817 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47818 "Target AP MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47819
47820 {&hf_ieee80211_ff_gas_comeback_delay,
47821 {"GAS Comeback Delay", "wlan.fixed.gas_comeback_delay",
47822 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47823 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47824
47825 {&hf_ieee80211_ff_gas_fragment_id,
47826 {"GAS Query Response Fragment ID", "wlan.fixed.gas_fragment_id",
47827 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7f,
47828 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47829
47830 {&hf_ieee80211_ff_more_gas_fragments,
47831 {"More GAS Fragments", "wlan.fixed.more_gas_fragments",
47832 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
47833 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47834
47835 {&hf_ieee80211_ff_query_request_length,
47836 {"Query Request Length", "wlan.fixed.query_request_length",
47837 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47838 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47839
47840 {&hf_ieee80211_ff_query_request,
47841 {"Query Request", "wlan.fixed.query_request",
47842 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
47843 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47844
47845 {&hf_ieee80211_ff_query_response_length,
47846 {"Query Response Length", "wlan.fixed.query_response_length",
47847 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47848 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47849
47850 {&hf_ieee80211_ff_query_response,
47851 {"Query Response", "wlan.fixed.query_response",
47852 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
47853 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47854
47855 {&hf_ieee80211_gas_resp_fragments,
47856 {"GAS Query Response fragments", "wlan.fixed.fragments",
47857 FT_NONE, BASE_NONE, NULL((void*)0), 0x00,
47858 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47859
47860 {&hf_ieee80211_gas_resp_fragment,
47861 {"GAS Query Response fragment", "wlan.fixed.fragment",
47862 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
47863 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47864
47865 {&hf_ieee80211_gas_resp_fragment_overlap,
47866 {"GAS Query Response fragment overlap", "wlan.fixed.fragment.overlap",
47867 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
47868 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47869
47870 {&hf_ieee80211_gas_resp_fragment_overlap_conflict,
47871 {"GAS Query Response fragment overlapping with conflicting data", "wlan.fixed.fragment.overlap.conflicts",
47872 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
47873 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47874
47875 {&hf_ieee80211_gas_resp_fragment_multiple_tails,
47876 {"GAS Query Response has multiple tail fragments", "wlan.fixed.fragment.multiple_tails",
47877 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
47878 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47879
47880 {&hf_ieee80211_gas_resp_fragment_too_long_fragment,
47881 {"GAS Query Response fragment too long", "wlan.fixed.fragment.too_long_fragment",
47882 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
47883 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47884
47885 {&hf_ieee80211_gas_resp_fragment_error,
47886 {"GAS Query Response reassembly error", "wlan.fixed.fragment.error",
47887 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
47888 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47889
47890 {&hf_ieee80211_gas_resp_fragment_count,
47891 {"GAS Query Response fragment count", "wlan.fixed.fragment.count",
47892 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00,
47893 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47894
47895 {&hf_ieee80211_gas_resp_reassembled_in,
47896 {"Reassembled in", "wlan.fixed.reassembled.in",
47897 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
47898 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47899
47900 {&hf_ieee80211_gas_resp_reassembled_length,
47901 {"Reassembled length", "wlan.fixed.reassembled.length",
47902 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00,
47903 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47904
47905 {&hf_ieee80211_ff_anqp_info_id,
47906 {"Info ID", "wlan.fixed.anqp.info_id",
47907 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &anqp_info_id_vals_ext, 0,
47908 "Access Network Query Protocol Info ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47909
47910 {&hf_ieee80211_ff_anqp_info_length,
47911 {"Length", "wlan.fixed.anqp.info_length",
47912 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47913 "Access Network Query Protocol Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47914
47915 {&hf_ieee80211_ff_anqp_info,
47916 {"Information", "wlan.fixed.anqp.info",
47917 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
47918 "Access Network Query Protocol Information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47919
47920 {&hf_ieee80211_ff_anqp_query_id,
47921 {"ANQP Query ID", "wlan.fixed.anqp.query_id",
47922 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &anqp_info_id_vals_ext, 0,
47923 "Access Network Query Protocol Query ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47924
47925 {&hf_ieee80211_ff_anqp_capability,
47926 {"ANQP Capability", "wlan.fixed.anqp.capability",
47927 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &anqp_info_id_vals_ext, 0,
47928 "Access Network Query Protocol Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47929
47930 {&hf_ieee80211_ff_anqp_capability_vlen,
47931 {"Vendor-specific Capability Length", "wlan.fixed.anqp.capability_vlen",
47932 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47933 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47934
47935 {&hf_ieee80211_ff_anqp_capability_vendor,
47936 {"Vendor-specific Capability", "wlan.fixed.anqp.capability_vendor",
47937 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
47938 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47939
47940 {&hf_ieee80211_ff_venue_info_group,
47941 {"Venue Group", "wlan.fixed.venue_info.group",
47942 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &venue_group_vals_ext, 0,
47943 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47944
47945 {&hf_ieee80211_ff_venue_info_type,
47946 {"Venue Type", "wlan.fixed.venue_info.type",
47947 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47948 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47949
47950 {&hf_ieee80211_ff_anqp_venue_length,
47951 {"Venue Name Duple Length", "wlan.fixed.anqp.venue.length",
47952 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47953 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47954
47955 {&hf_ieee80211_ff_anqp_venue_language,
47956 {"Language Code", "wlan.fixed.anqp.venue.language",
47957 FT_STRING, BASE_NONE, NULL((void*)0), 0,
47958 "Venue Name Language Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47959
47960 {&hf_ieee80211_ff_anqp_venue_name,
47961 {"Venue Name", "wlan.fixed.anqp.venue.name",
47962 FT_STRING, BASE_NONE, NULL((void*)0), 0,
47963 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47964
47965 {&hf_ieee80211_ff_anqp_nw_auth_type_indicator,
47966 {"Network Authentication Type Indicator", "wlan.fixed.anqp.nw_auth_type.indicator",
47967 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals)((0 ? (const struct _value_string*)0 : ((nw_auth_type_vals)))
)
, 0,
47968 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47969
47970 {&hf_ieee80211_ff_anqp_nw_auth_type_url_len,
47971 {"Re-direct URL Length", "wlan.fixed.anqp.nw_auth_type.url_len",
47972 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47973 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47974
47975 {&hf_ieee80211_ff_anqp_nw_auth_type_url,
47976 {"Re-direct URL", "wlan.fixed.anqp.nw_auth_type.url",
47977 FT_STRING, BASE_NONE, NULL((void*)0), 0,
47978 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47979
47980 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_indicator,
47981 {"Network Authentication Type w/ Timestamp Indicator",
47982 "wlan.fixed.anqp.nw_auth_type_ts.indicator",
47983 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals)((0 ? (const struct _value_string*)0 : ((nw_auth_type_vals)))
)
, 0,
47984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47985
47986 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_url_len,
47987 {"Re-direct URL Length", "wlan.fixed.anqp.nw_auth_type_ts.url_len",
47988 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47990
47991 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_url,
47992 {"Re-direct URL", "wlan.fixed.anqp.nw_auth_type_ts.url",
47993 FT_STRING, BASE_NONE, NULL((void*)0), 0,
47994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47995
47996 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_year,
47997 {"Timestamp (Year)", "wlan.fixed.anqp.nw_auth_type_ts.year",
47998 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
47999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48000
48001 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_mon,
48002 {"Timestamp (Month)", "wlan.fixed.anqp.nw_auth_type_ts.mon",
48003 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48005
48006 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_day,
48007 {"Timestamp (Day)", "wlan.fixed.anqp.nw_auth_type_ts.day",
48008 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48010
48011 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_hr,
48012 {"Timestamp (Hours)", "wlan.fixed.anqp.nw_auth_type_ts.hr",
48013 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48015
48016 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_min,
48017 {"Timestamp (Minutes)", "wlan.fixed.anqp.nw_auth_type_ts.min",
48018 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48020
48021 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_sec,
48022 {"Timestamp (Seconds)", "wlan.fixed.anqp.nw_auth_type_ts.sec",
48023 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48025
48026 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_msec,
48027 {"Timestamp (Milliseconds)", "wlan.fixed.anqp.nw_auth_type_ts.msec",
48028 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
48029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48030
48031 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_rsvd,
48032 {"Timestamp (Reserved)", "wlan.fixed.anqp.nw_auth_type_ts.rsvd",
48033 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48035
48036 {&hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
48037 {"OI Length", "wlan.fixed.anqp.roaming_consortium.oi_len",
48038 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48039 "Roaming Consortium OI Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48040
48041 {&hf_ieee80211_ff_anqp_roaming_consortium_oi,
48042 {"OI", "wlan.fixed.anqp.roaming_consortium.oi",
48043 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48044 "Roaming Consortium OI", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48045
48046 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
48047 {"IPv6 Address", "wlan.fixed.anqp.ip_addr_availability.ipv6",
48048 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv6_vals)((0 ? (const struct _value_string*)0 : ((ip_addr_avail_ipv6_vals
))))
, 0x03,
48049 "IP Address Type Availability information for IPv6", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48050
48051 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
48052 {"IPv4 Address", "wlan.fixed.anqp.ip_addr_availability.ipv4",
48053 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv4_vals)((0 ? (const struct _value_string*)0 : ((ip_addr_avail_ipv4_vals
))))
, 0xfc,
48054 "IP Address Type Availability information for IPv4", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48055
48056 {&hf_ieee80211_ff_anqp_nai_realm_count,
48057 {"NAI Realm Count", "wlan.fixed.anqp.nai_realm_list.count",
48058 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48060
48061 {&hf_ieee80211_ff_anqp_nai_field_len,
48062 {"NAI Realm Data Field Length", "wlan.fixed.anqp.nai_realm_list.field_len",
48063 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48065
48066 {&hf_ieee80211_ff_anqp_nai_realm_encoding,
48067 {"NAI Realm Encoding", "wlan.fixed.anqp_nai_realm_list.encoding",
48068 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals)((0 ? (const struct _value_string*)0 : ((nai_realm_encoding_vals
))))
, 0x01,
48069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48070
48071 {&hf_ieee80211_ff_anqp_nai_realm_length,
48072 {"NAI Realm Length", "wlan.fixed.anqp_nai_realm_list.realm_length",
48073 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48075
48076 {&hf_ieee80211_ff_anqp_nai_realm,
48077 {"NAI Realm", "wlan.fixed.anqp_nai_realm_list.realm",
48078 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48080
48081 {&hf_ieee80211_ff_anqp_nai_realm_eap_count,
48082 {"EAP Method Count", "wlan.fixed.anqp_nai_realm_list.eap_method_count",
48083 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48085
48086 {&hf_ieee80211_ff_anqp_nai_realm_eap_len,
48087 {"EAP Method subfield Length", "wlan.fixed.anqp_nai_realm_list.eap_method_len",
48088 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48090
48091 {&hf_ieee80211_ff_anqp_nai_realm_eap_method,
48092 {"EAP Method", "wlan.fixed.anqp_nai_realm_list.eap_method",
48093 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &eap_type_vals_ext, 0,
48094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48095
48096 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
48097 {"Authentication Parameter Count", "wlan.fixed.anqp_nai_realm_list.auth_param_count",
48098 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48100
48101 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
48102 {"Authentication Parameter ID", "wlan.fixed.anqp_nai_realm_list.auth_param_id",
48103 FT_UINT8, BASE_DEC, VALS(nai_realm_auth_param_id_vals)((0 ? (const struct _value_string*)0 : ((nai_realm_auth_param_id_vals
))))
, 0,
48104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48105
48106 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
48107 {"Authentication Parameter Length", "wlan.fixed.anqp_nai_realm_list.auth_param_len",
48108 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48110
48111 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
48112 {"Authentication Parameter Value", "wlan.fixed.anqp_nai_realm_list.auth_param_value",
48113 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48115
48116 {&hf_ieee80211_3gpp_gc_gud,
48117 {"GUD", "wlan.fixed.anqp.3gpp_cellular_info.gud",
48118 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48119 "Generic container User Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48120
48121 {&hf_ieee80211_3gpp_gc_udhl,
48122 {"UDHL", "wlan.fixed.anqp.3gpp_cellular_info.udhl",
48123 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48124 "User Data Header Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48125
48126 {&hf_ieee80211_3gpp_gc_iei,
48127 {"IEI", "wlan.fixed.anqp.3gpp_cellular_info.iei",
48128 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48129 "Information Element Identity", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48130
48131 {&hf_ieee80211_3gpp_gc_plmn_len,
48132 {"PLMN Length", "wlan.fixed.anqp.3gpp_cellular_info.plmn_len",
48133 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48134 "Length of PLMN List value contents", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48135
48136 {&hf_ieee80211_3gpp_gc_num_plmns,
48137 {"Number of PLMNs", "wlan.fixed.anqp.3gpp_cellular_info.num_plmns",
48138 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48140
48141 {&hf_ieee80211_3gpp_gc_plmn,
48142 {"PLMN", "wlan.fixed.anqp.3gpp_cellular_info.plmn_info",
48143 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48144
48145 {&hf_ieee80211_ff_anqp_domain_name_len,
48146 {"Domain Name Length", "wlan.fixed.anqp.domain_name_list.len",
48147 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48148 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48149
48150 {&hf_ieee80211_ff_anqp_domain_name,
48151 {"Domain Name", "wlan.fixed.anqp.domain_name_list.name",
48152 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48153 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48154
48155 {&hf_ieee80211_ff_dls_timeout,
48156 {"DLS timeout", "wlan.fixed.dls_timeout",
48157 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
48158 "DLS timeout value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48159
48160 {&hf_ieee80211_ff_sa_query_action_code,
48161 {"Action code", "wlan.fixed.action_code",
48162 FT_UINT8, BASE_DEC, VALS(sa_query_action_codes)((0 ? (const struct _value_string*)0 : ((sa_query_action_codes
))))
, 0,
48163 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48164
48165 {&hf_ieee80211_ff_transaction_id,
48166 {"Transaction Id", "wlan.fixed.transaction_id",
48167 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
48168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48169
48170 {&hf_ieee80211_ff_send_confirm,
48171 {"Send-Confirm", "wlan.fixed.send_confirm",
48172 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48174
48175 {&hf_ieee80211_ff_scalar,
48176 {"Scalar", "wlan.fixed.scalar",
48177 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48178 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48179
48180 {&hf_ieee80211_ff_finite_field_element,
48181 {"Finite Field Element", "wlan.fixed.finite_field_element",
48182 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48184
48185 {&hf_ieee80211_ff_confirm,
48186 {"Confirm", "wlan.fixed.confirm",
48187 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48188 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48189
48190 {&hf_ieee80211_ff_finite_cyclic_group,
48191 {"Group Id", "wlan.fixed.finite_cyclic_group",
48192 FT_UINT16, BASE_DEC, VALS(ff_finite_cyclic_group_vals)((0 ? (const struct _value_string*)0 : ((ff_finite_cyclic_group_vals
))))
, 0,
48193 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48194
48195 {&hf_ieee80211_ff_sae_message_type,
48196 {"SAE Message Type", "wlan.fixed.sae_message_type",
48197 FT_UINT16, BASE_DEC, VALS(ff_sae_message_type_vals)((0 ? (const struct _value_string*)0 : ((ff_sae_message_type_vals
))))
, 0,
48198 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48199
48200 {&hf_ieee80211_ff_sae_anti_clogging_token,
48201 {"Anti-Clogging Token", "wlan.fixed.anti_clogging_token",
48202 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48203
48204 {&hf_ieee80211_anqp_wfa_subtype,
48205 {"WFA Subtype", "wlan.anqp.wfa.subtype",
48206 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) }},
48207
48208 {&hf_ieee80211_dpp_subtype,
48209 {"DPP Subtype", "wlan.wfa.dpp.subtype",
48210 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) }},
48211
48212 {&hf_ieee80211_hs20_indication_dgaf_disabled,
48213 {"DGAF Disabled", "wlan.hs20.indication.dgaf_disabled",
48214 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48215
48216 {&hf_ieee80211_hs20_indication_pps_mo_id_present,
48217 {"PPS MO ID Present", "wlan.hs20.indication.pps_mo_id_present",
48218 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) }},
48219
48220 {&hf_ieee80211_hs20_indication_anqp_domain_id_present,
48221 {"ANQP Domain ID Present", "wlan.hs20.indication.anqp_domain_id_present",
48222 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) }},
48223
48224 {&hf_ieee80211_hs20_reserved,
48225 { "Reserved", "wlan.hs20.indication.reserved",
48226 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) }},
48227
48228 {&hf_ieee80211_hs20_indication_version_number,
48229 {"Version Number", "wlan.hs20.indication.version_number",
48230 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) }},
48231
48232 {&hf_ieee80211_hs20_indication_pps_mo_id,
48233 {"PPS MO ID", "wlan.hs20.indication.pps_mo_id",
48234 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48235
48236 {&hf_ieee80211_hs20_indication_anqp_domain_id,
48237 {"ANQP Domain ID", "wlan.hs20.indication.domain_id",
48238 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48239
48240 {&hf_ieee80211_hs20_anqp_subtype,
48241 {"Subtype", "wlan.hs20.anqp.subtype",
48242 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((hs20_anqp_subtype_vals
))))
, 0,
48243 "Hotspot 2.0 ANQP Subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48244
48245 {&hf_ieee80211_hs20_anqp_reserved,
48246 {"Reserved", "wlan.hs20.anqp.reserved",
48247 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48248
48249 {&hf_ieee80211_hs20_anqp_payload,
48250 {"Payload", "wlan.hs20.anqp.payload",
48251 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48252 "Hotspot 2.0 ANQP Payload", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48253
48254 {&hf_ieee80211_hs20_anqp_hs_query_list,
48255 {"Queried Subtype", "wlan.hs20.anqp.hs_query_list",
48256 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((hs20_anqp_subtype_vals
))))
, 0,
48257 "Queried HS 2.0 Element Subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48258
48259 {&hf_ieee80211_hs20_anqp_hs_capability_list,
48260 {"Capability", "wlan.hs20.anqp.hs_capability_list",
48261 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((hs20_anqp_subtype_vals
))))
, 0,
48262 "Hotspot 2.0 ANQP Subtype Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48263
48264 {&hf_ieee80211_hs20_anqp_ofn_length,
48265 {"Length", "wlan.hs20.anqp.ofn.length",
48266 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48267 "Operator Friendly Name Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48268
48269 {&hf_ieee80211_hs20_anqp_ofn_language,
48270 {"Language Code", "wlan.hs20.anqp.ofn.language",
48271 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48272 "Operator Friendly Name Language Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48273
48274 {&hf_ieee80211_hs20_anqp_ofn_name,
48275 {"Operator Friendly Name", "wlan.hs20.anqp.ofn.name",
48276 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48278
48279 {&hf_ieee80211_hs20_anqp_wan_metrics_link_status,
48280 {"Link Status", "wlan.hs20.anqp.wan_metrics.link_status",
48281 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) }},
48282
48283 {&hf_ieee80211_hs20_anqp_wan_metrics_symmetric_link,
48284 {"Symmetric Link", "wlan.hs20.anqp.wan_metrics.symmetric_link",
48285 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48286
48287 {&hf_ieee80211_hs20_anqp_wan_metrics_at_capacity,
48288 {"At Capacity", "wlan.hs20.anqp.wan_metrics.at_capacity",
48289 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48290
48291 {&hf_ieee80211_hs20_anqp_wan_metrics_reserved,
48292 {"Reserved", "wlan.hs20.anqp.wan_metrics.reserved",
48293 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48294
48295 {&hf_ieee80211_hs20_anqp_wan_metrics_downlink_speed,
48296 {"Downlink Speed", "wlan.hs20.anqp.wan_metrics.downlink_speed",
48297 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48298
48299 {&hf_ieee80211_hs20_anqp_wan_metrics_uplink_speed,
48300 {"Uplink Speed", "wlan.hs20.anqp.wan_metrics.uplink_speed",
48301 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48302
48303 {&hf_ieee80211_hs20_anqp_wan_metrics_downlink_load,
48304 {"Downlink Load", "wlan.hs20.anqp.wan_metrics.downlink_load",
48305 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48306
48307 {&hf_ieee80211_hs20_anqp_wan_metrics_uplink_load,
48308 {"Uplink Load", "wlan.hs20.anqp.wan_metrics.uplink_load",
48309 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48310
48311 {&hf_ieee80211_hs20_anqp_wan_metrics_lmd,
48312 {"LMD", "wlan.hs20.anqp.wan_metrics.lmd",
48313 FT_UINT16, BASE_DEC, NULL((void*)0), 0, "Load Measurement Duration", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48314
48315 {&hf_ieee80211_hs20_anqp_cc_proto_ip_proto,
48316 {"IP Protocol", "wlan.hs20.anqp.cc.ip_proto",
48317 FT_UINT8, BASE_DEC, VALS(hs20_cc_proto_vals)((0 ? (const struct _value_string*)0 : ((hs20_cc_proto_vals))
))
, 0,
48318 "ProtoPort Tuple - IP Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48319
48320 {&hf_ieee80211_hs20_anqp_cc_proto_port_num,
48321 {"Port Number", "wlan.hs20.anqp.cc.port_num",
48322 FT_UINT16, BASE_DEC, VALS(hs20_cc_port_vals)((0 ? (const struct _value_string*)0 : ((hs20_cc_port_vals)))
)
, 0,
48323 "ProtoPort Tuple - Port Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48324
48325 {&hf_ieee80211_hs20_anqp_cc_proto_status,
48326 {"Status", "wlan.hs20.anqp.cc.status",
48327 FT_UINT8, BASE_DEC, VALS(hs20_cc_status_vals)((0 ? (const struct _value_string*)0 : ((hs20_cc_status_vals)
)))
, 0,
48328 "ProtoPort Tuple - Status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48329
48330 {&hf_ieee80211_hs20_anqp_nai_hrq_count,
48331 {"NAI Home Realm Count", "wlan.hs20.anqp.nai_hrq.count",
48332 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48333
48334 {&hf_ieee80211_hs20_anqp_nai_hrq_encoding_type,
48335 {"NAI Home Realm Encoding Type",
48336 "wlan.hs20.anqp.nai_hrq.encoding_type",
48337 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals)((0 ? (const struct _value_string*)0 : ((nai_realm_encoding_vals
))))
,
48338 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48339
48340 {&hf_ieee80211_hs20_anqp_nai_hrq_length,
48341 {"NAI Home Realm Name Length", "wlan.hs20.anqp.nai_hrq.length",
48342 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48343
48344 {&hf_ieee80211_hs20_anqp_nai_hrq_realm_name,
48345 {"NAI Home Realm Name", "wlan.hs20.anqp.nai_hrq.name",
48346 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48347
48348 {&hf_ieee80211_hs20_anqp_oper_class_indic,
48349 {"Operating Class", "wlan.hs20.anqp.oper_class_indic.oper_class",
48350 FT_UINT8, BASE_DEC | BASE_RANGE_STRING0x00000100, RVALS(oper_class_rvals)((0 ? (const struct _range_string*)0 : ((oper_class_rvals)))),
48351 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48352
48353 {&hf_ieee80211_hs20_osu_friendly_names_len,
48354 {"OSU Friendly Name Length", "wlan.hs20.osu_friendly_names_len",
48355 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48356
48357 {&hf_ieee80211_hs20_osu_friendly_name_length,
48358 {"Length", "wlan.hs20.osu_friendly_name.len",
48359 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48360
48361 {&hf_ieee80211_hs20_osu_friendly_name_language,
48362 {"Language Code", "wlan.hs20.osu_friendly_name.language",
48363 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48364
48365 {&hf_ieee80211_hs20_osu_friendly_name_name,
48366 {"OSU Friendly Name", "wlan.hs20.osu_friendly_name.name",
48367 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48368
48369 {&hf_ieee80211_hs20_osu_server_uri_len,
48370 {"OSU Server URI Length", "wlan.hs20.osu_server_uri_len",
48371 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48372
48373 {&hf_ieee80211_hs20_osu_server_uri,
48374 {"OSU Server URI", "wlan.hs20.osu_server_uri",
48375 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48376
48377 {&hf_ieee80211_hs20_osu_method_list_len,
48378 {"OSU Method List Length", "wlan.hs20.osu_method_list_len",
48379 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48380
48381 {&hf_ieee80211_hs20_osu_method_val,
48382 {"OSU Method", "wlan.hs20.osu_method_list.method",
48383 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48384
48385 {&hf_ieee80211_hs20_icons_avail_len,
48386 {"Icons Available Length", "wlan.hs20.osu_icons_avail_len",
48387 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48388
48389 {&hf_ieee80211_hs20_osu_providers_list_ssid_len,
48390 {"SSID Length", "wlan.hs20.anqp_osu_prov_list.ssid_len",
48391 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48392
48393 {&hf_ieee80211_hs20_osu_providers_ssid,
48394 {"SSID", "wlan.hs20.anqp_osu_prov_list.ssid",
48395 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48396
48397 {&hf_ieee80211_hs20_osu_providers_count,
48398 {"Number of OSU Providers", "wlan.hs20.anqp_osu_prov_list.number",
48399 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48400
48401 {&hf_ieee80211_hs20_osu_prov_length,
48402 {"OSU Provider Length", "wlan.hs20.anqp_osu_prov.len",
48403 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48404
48405 {&hf_ieee80211_hs20_icon_request_filename,
48406 {"Icon Filename", "wlan.hs20.anqp_icon_request.icon_filename",
48407 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48408
48409 {&hf_ieee80211_osu_icon_avail_width,
48410 {"Icon Width", "wlan.hs20.osu_icons_avail.icon_width",
48411 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48412
48413 {&hf_ieee80211_osu_icon_avail_height,
48414 {"Icon Height", "wlan.hs20.osu_icons_avail.icon_height",
48415 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48416
48417 {&hf_ieee80211_osu_icon_avail_lang_code,
48418 {"Language Code", "wlan.hs20.osu_icons_avail.lang_code",
48419 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48420
48421 {&hf_ieee80211_osu_icon_avail_icon_type_len,
48422 {"Icon Type Length", "wlan.hs20.osu_icons_avail.icon_type_len",
48423 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48424
48425 {&hf_ieee80211_osu_icon_avail_icon_type,
48426 {"Icon Type", "wlan.hs20.osu_icons_avail.icon_type",
48427 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48428
48429 {&hf_ieee80211_osu_icon_avail_filename_len,
48430 {"Icon Filename Length", "wlan.hs20.osu_icons_avail.icon_filename_len",
48431 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48432
48433 {&hf_ieee80211_osu_icon_avail_filename,
48434 {"Icon Filename", "wlan.hs20.osu_icons_avail.icon_filename",
48435 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48436
48437 {&hf_ieee80211_hs20_osu_nai_len,
48438 {"OSU_NAI Length", "wlan.hs20.osu_nai.len",
48439 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48440
48441 {&hf_ieee80211_hs20_osu_nai,
48442 {"OSU_NAI", "wlan.hs20.osu_nai",
48443 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48444
48445 {&hf_ieee80211_hs20_osu_service_desc_len,
48446 {"OSU Service Description Length", "wlan.hs20.osu_service_desc_len",
48447 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48448
48449 {&hf_ieee80211_hs20_osu_service_desc_duple_len,
48450 {"Length", "wlan.hs20.osu_service_desc.duple.len",
48451 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48452
48453 {&hf_ieee80211_hs20_osu_service_desc_lang,
48454 {"Language Code", "wlan.hs20.osu_service_desc.duple.lang",
48455 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48456
48457 {&hf_ieee80211_hs20_osu_service_desc,
48458 {"OSU Service Description", "wlan.hs20.osu_service_desc.duple.desc",
48459 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48460
48461 {&hf_ieee80211_hs20_icon_binary_file_status,
48462 {"Download Status Code", "wlan.hs20.anqp_icon_request.download_status",
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_icon_type_length,
48466 {"Icon Type Length", "wlan.hs20.anqp_icon_request.icon_type_len",
48467 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48468
48469 {&hf_ieee80211_hs20_icon_type,
48470 {"Icon Type", "wlan.hs20.anqp_icon_request.icon_type",
48471 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48472
48473 {&hf_ieee80211_hs20_icon_binary_data_len,
48474 {"Icon Binary Data Length", "wlan.anqp_icon_request.icon_binary_data_len",
48475 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48476
48477 {&hf_ieee80211_hs20_icon_binary_data,
48478 {"Icon Binary Data", "wlan.h220.anqp_icon_request.icon_binary_data",
48479 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48480
48481 {&hf_ieee80211_hs20_subscription_remediation_url_len,
48482 {"Server URL Length", "wlan.hs20.subs_remediation.server_url_len",
48483 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48484
48485 {&hf_ieee80211_hs20_subscription_remediation_server_url,
48486 {"Server URL", "wlan.hs20.subs_remediation.server_url",
48487 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48488
48489 {&hf_ieee80211_hs20_subscription_remediation_server_method,
48490 {"Server Method", "wlan.hs20.subs_remediation.server_method",
48491 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48492
48493 {&hf_ieee80211_hs20_deauth_reason_code,
48494 {"De-Auth Reason Code", "wlan.hs20.deauth.reason_code",
48495 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48496
48497 {&hf_ieee80211_hs20_reauth_delay,
48498 {"Re-Auth Delay", "wlan.hs20.deauth.reauth_delay",
48499 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) }},
48500
48501 {&hf_ieee80211_hs20_deauth_reason_url_len,
48502 {"Reason URL Length", "wlan.hs20.deauth.reason_url_len",
48503 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48504
48505 {&hf_ieee80211_hs20_deauth_imminent_reason_url,
48506 {"Reason URL", "wlan.hs20.deauth.reason_url",
48507 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48508
48509 {&hf_ieee80211_hs20_anqp_venue_url_length,
48510 {"Length", "wlan.hs20.venue_url.len",
48511 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48512
48513 {&hf_ieee80211_hs20_anqp_venue_number,
48514 {"Venue number", "wlan.hs20.venue_url.venue_num",
48515 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48516
48517 {&hf_ieee80211_hs20_anqp_venue_url,
48518 {"Venue URL", "wlan.hs20.venue_url.url",
48519 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48520
48521 {&hf_ieee80211_hs20_anqp_advice_of_charge_length,
48522 {"Length", "wlan.hs20.advice_of_charge.len",
48523 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48524
48525 {&hf_ieee80211_hs20_anqp_advice_of_charge_type,
48526 {"Advice of Charge Type", "wlan.hs20.advice_of_charge.type",
48527 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48528
48529 {&hf_ieee80211_hs20_anqp_aoc_nai_realm_encoding,
48530 {"NAI Realm Encoding", "wlan.hs20.advice_of_charge.nai_realm_enc",
48531 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48532
48533 {&hf_ieee80211_hs20_anqp_aoc_nai_realm_len,
48534 {"NAI Realm Length", "wlan.hs20.advice_of_charge.nai_realm_len",
48535 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48536
48537 {&hf_ieee80211_hs20_anqp_aoc_nai_realm,
48538 {"NAI Realm", "wlan.hs20.advice_of_charge.nai_realm",
48539 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48540
48541 {&hf_ieee80211_hs20_anqp_aoc_plan_len,
48542 {"Plan length", "wlan.hs20.advice_of_charge.plan_info_tuples.plan_len",
48543 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48544
48545 {&hf_ieee80211_hs20_anqp_aoc_plan_lang,
48546 {"Plan language", "wlan.hs20.advice_of_charge.plan_info_tuples.plan_lang",
48547 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48548
48549 {&hf_ieee80211_hs20_anqp_aoc_plan_curcy,
48550 {"Plan currency", "wlan.hs20.advice_of_charge.plan_info_tuples.plan_curcy",
48551 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48552
48553 {&hf_ieee80211_hs20_anqp_aoc_plan_information,
48554 {"Plan information", "wlan.hs20.advice_of_charge.plan_info_tuples.info",
48555 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48556
48557 {&hf_ieee80211_tag,
48558 {"Tag", "wlan.tag",
48559 FT_NONE, BASE_NONE, NULL((void*)0), 0,
48560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48561
48562 {&hf_ieee80211_tag_number,
48563 {"Tag Number", "wlan.tag.number",
48564 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_ext, 0,
48565 "Element ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48566
48567 {&hf_ieee80211_tag_length,
48568 {"Tag length", "wlan.tag.length",
48569 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
48570 "Length of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48571
48572 {&hf_ieee80211_tag_data,
48573 {"Tag Data", "wlan.tag.data",
48574 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48575 "Data Interpretation of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48576
48577 {&hf_ieee80211_tag_oui,
48578 {"OUI", "wlan.tag.oui",
48579 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
48580 "OUI of vendor specific IE", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48581
48582 {&hf_ieee80211_tag_oui_wfa_subtype,
48583 {"WFA Subtype", "wlan.tag.oui.wfa_subtype",
48584 FT_UINT8, BASE_DEC, VALS(wfa_subtype_vals)((0 ? (const struct _value_string*)0 : ((wfa_subtype_vals)))), 0,
48585 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48586
48587 {&hf_ieee80211_tag_ds_param_channel,
48588 {"Current Channel", "wlan.ds.current_channel",
48589 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48590 "DS Parameter Set - Current Channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48591
48592 {&hf_ieee80211_tag_cfp_count,
48593 {"CFP Count", "wlan.cfp.count",
48594 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48595 "Indicates how many delivery traffic indication messages (DTIMs)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48596
48597 {&hf_ieee80211_tag_cfp_period,
48598 {"CFP Period", "wlan.cfp.period",
48599 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48600 "Indicates the number of DTIM intervals between the start of CFPs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48601
48602 {&hf_ieee80211_tag_cfp_max_duration,
48603 {"CFP Max Duration", "wlan.cfp.max_duration",
48604 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48605 "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) }},
48606
48607 {&hf_ieee80211_tag_cfp_dur_remaining,
48608 {"CFP Dur Remaining", "wlan.cfp.dur_remaining",
48609 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48610 "Indicates the maximum time (in TU) remaining in the present CFP", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48611
48612 {&hf_ieee80211_tag_vendor_oui_type,
48613 {"Vendor Specific OUI Type", "wlan.tag.vendor.oui.type",
48614 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48616
48617 {&hf_ieee80211_tag_vendor_data,
48618 {"Vendor Specific Data", "wlan.tag.vendor.data",
48619 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48620 "Unknown/undecoded Vendor Specific Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48621
48622 {&hf_ieee80211_symbp_extreme_assoc_clients,
48623 {"Associated clients", "wlan.tag.symbol_proprietary.extreme.assoc_clients",
48624 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48626
48627 {&hf_ieee80211_symbp_extreme_load_kbps,
48628 {"Load", "wlan.tag.symbol_proprietary.extreme.load_kbps",
48629 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0,
48630 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48631
48632 {&hf_ieee80211_symbp_extreme_load_pps,
48633 {"Load", "wlan.tag.symbol_proprietary.extreme.load_pps",
48634 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_pkts_per_sec)((0 ? (const struct unit_name_string*)0 : ((&units_pkts_per_sec
))))
, 0,
48635 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48636
48637 {&hf_ieee80211_symbp_extreme_client_tx_power,
48638 {"Desired client Tx power", "wlan.tag.symbol_proprietary.extreme.client_txpower",
48639 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48640 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48641
48642 {&hf_ieee80211_symbp_extreme_timestamp,
48643 {"Timestamp", "wlan.tag.symbol_proprietary.extreme.timestamp",
48644 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL((void*)0), 0,
48645 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48646
48647 {&hf_ieee80211_tag_symbol_proprietary_oui,
48648 {"Symbol Proprietary OUI", "wlan.tag.symbol_proprietary.oui",
48649 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
48650 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48651
48652 {&hf_ieee80211_tag_symbol_proprietary_data,
48653 {"Symbol Proprietary Data", "wlan.tag.symbol_proprietary.data",
48654 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48655 "Unknown/undecoded Symbol Proprietary Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48656
48657 {&hf_ieee80211_tim_dtim_count,
48658 {"DTIM count", "wlan.tim.dtim_count",
48659 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48660 "Indicates how many Beacon frames (including the current frame) appear before the next DTIM", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48661
48662 {&hf_ieee80211_tim_dtim_period,
48663 {"DTIM period", "wlan.tim.dtim_period",
48664 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48665 "Indicates the number of beacon intervals between successive DTIMs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48666
48667 {&hf_ieee80211_tim_bmapctl,
48668 {"Bitmap control", "wlan.tim.bmapctl",
48669 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
48670 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48671
48672 {&hf_ieee80211_tim_bmapctl_mcast,
48673 {"Multicast", "wlan.tim.bmapctl.multicast",
48674 FT_BOOLEAN, 8, NULL((void*)0), 0x1,
48675 "Contains the Traffic Indicator bit associated with Association ID 0", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48676
48677 {&hf_ieee80211_tim_bmapctl_offset,
48678 {"Bitmap Offset", "wlan.tim.bmapctl.offset",
48679 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE,
48680 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48681
48682 {&hf_ieee80211_tim_partial_virtual_bitmap,
48683 {"Partial Virtual Bitmap", "wlan.tim.partial_virtual_bitmap",
48684 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
48685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48686
48687 {&hf_ieee80211_tim_aid,
48688 {"Association ID", "wlan.tim.aid",
48689 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
48690 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48691
48692 {&hf_ieee80211_tag_ibss_atim_window,
48693 {"Atim Windows", "wlan.ibss.atim_windows",
48694 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
48695 "Contains the ATIM Window length in TU", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48696
48697 {&hf_ieee80211_tag_country_info_code,
48698 {"Code", "wlan.country_info.code",
48699 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
48700 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48701
48702 {&hf_ieee80211_tag_country_info_env,
48703 {"Environment", "wlan.country_info.environment",
48704 FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS0x00008000, VALS(environment_vals)((0 ? (const struct _value_string*)0 : ((environment_vals)))), 0x0,
48705 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48706
48707 {&hf_ieee80211_tag_country_info_pad,
48708 {"Padding", "wlan.country_info.padding",
48709 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
48710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48711
48712 {&hf_ieee80211_tag_country_info_fnm,
48713 {"Country Info", "wlan.country_info.fnm",
48714 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
48715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48716
48717 {&hf_ieee80211_tag_country_info_fnm_fcn,
48718 {"First Channel Number", "wlan.country_info.fnm.fcn",
48719 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48721
48722 {&hf_ieee80211_tag_country_info_fnm_nc,
48723 {"Number of Channels", "wlan.country_info.fnm.nc",
48724 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48725 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48726
48727 {&hf_ieee80211_tag_country_info_fnm_mtpl,
48728 {"Maximum Transmit Power Level", "wlan.country_info.fnm.mtpl",
48729 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
48730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48731
48732 {&hf_ieee80211_tag_country_info_rrc,
48733 {"Country Info", "wlan.country_info.rrc",
48734 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
48735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48736
48737 {&hf_ieee80211_tag_country_info_rrc_oei,
48738 {"Operating Extension Identifier", "wlan.country_info.rrc.oei",
48739 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48741
48742 {&hf_ieee80211_tag_country_info_rrc_oc,
48743 {"Operating Class", "wlan.country_info.rrc.oc",
48744 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48746
48747 {&hf_ieee80211_tag_country_info_rrc_cc,
48748 {"Coverage Class", "wlan.country_info.rrc.cc",
48749 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48751
48752 {&hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
48753 {"Prime Radix", "wlan.fh_hopping.parameter.prime_radix",
48754 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48756
48757 {&hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
48758 {"Number of Channels", "wlan.fh_hopping.parameter.nb_channels",
48759 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48761
48762 {&hf_ieee80211_tag_fh_hopping_table_flag,
48763 {"Flag", "wlan.fh_hopping.table.flag",
48764 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
48765 "Indicates that a Random Table is present when the value is 1", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48766
48767 {&hf_ieee80211_tag_fh_hopping_table_number_of_sets,
48768 {"Number of Sets", "wlan.fh_hopping.table.number_of_sets",
48769 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48770 "Indicates the total number of sets within the hopping patterns", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48771
48772 {&hf_ieee80211_tag_fh_hopping_table_modulus,
48773 {"Modulus", "wlan.fh_hopping.table.modulus",
48774 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
48775 "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) }},
48776
48777 {&hf_ieee80211_tag_fh_hopping_table_offset,
48778 {"Offset", "wlan.fh_hopping.table.offset",
48779 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
48780 "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) }},
48781
48782 {&hf_ieee80211_tag_fh_hopping_random_table,
48783 {"Random Table", "wlan.fh_hopping.table.random_table",
48784 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
48785 "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) }},
48786
48787 {&hf_ieee80211_tag_request,
48788 {"Requested Element ID", "wlan.tag.request",
48789 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_ext, 0,
48790 "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) }},
48791
48792 {&hf_ieee80211_tag_extended_request_id,
48793 {"Requested Element ID", "wlan.tag.extended_request.id",
48794 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_ext, 0,
48795 "The Element ID used to indicate an extended element", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48796
48797 {&hf_ieee80211_tag_extended_request_extension,
48798 {"Requested Element ID Extensions", "wlan.tag.extended_request.ext",
48799 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_eid_ext_ext, 0,
48800 "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) }},
48801
48802 {&hf_ieee80211_tclas_up,
48803 {"User Priority", "wlan.tclas.user_priority",
48804 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(user_prio_rvals)((0 ? (const struct _range_string*)0 : ((user_prio_rvals)))), 0,
48805 "Contains the value of the UP of the associated MSDUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48806
48807 {&hf_ieee80211_tclas_class_type,
48808 {"Classifier Type", "wlan.tclas.class_type",
48809 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(classifier_type)((0 ? (const struct _range_string*)0 : ((classifier_type)))), 0,
48810 "Specifies the type of classifier parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48811
48812 {&hf_ieee80211_tclas_class_mask,
48813 {"Classifier Mask", "wlan.tclas.class_mask",
48814 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
48815 "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) }},
48816
48817 {&hf_ieee80211_tclas_mask_reserved,
48818 {"Reserved", "wlan.tclas.class_mask.reserved",
48819 FT_UINT8, BASE_HEX, NULL((void*)0), 0, "Class mask is reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48820
48821 {&hf_ieee80211_tclas_class_mask0_src_addr,
48822 {"Source Address", "wlan.tclas.class_mask.src_addr",
48823 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48824
48825 {&hf_ieee80211_tclas_class_mask0_dst_addr,
48826 {"Destination Address", "wlan.tclas.class_mask.dst_addr",
48827 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48828
48829 {&hf_ieee80211_tclas_class_mask0_type,
48830 {"Type", "wlan.tclas.class_mask.type",
48831 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48832
48833 {&hf_ieee80211_tclas_class_mask1_ver,
48834 {"Version", "wlan.tclas.class_mask.version",
48835 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48836
48837 {&hf_ieee80211_tclas_class_mask1_src_ip,
48838 {"Source IP Address", "wlan.tclas.class_mask.src_ip",
48839 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48840
48841 {&hf_ieee80211_tclas_class_mask1_dst_ip,
48842 {"Destination IP Address", "wlan.tclas.class_mask.dst_ip",
48843 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48844
48845 {&hf_ieee80211_tclas_class_mask1_src_port,
48846 {"Source Port", "wlan.tclas.class_mask.src_port",
48847 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48848
48849 {&hf_ieee80211_tclas_class_mask1_dst_port,
48850 {"Destination Port", "wlan.tclas.class_mask.dst_port",
48851 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48852
48853 {&hf_ieee80211_tclas_class_mask1_ipv4_dscp,
48854 {"DSCP", "wlan.tclas.class_mask.dscp",
48855 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48856
48857 {&hf_ieee80211_tclas_class_mask1_ipv4_proto,
48858 {"Protocol", "wlan.tclas.class_mask.proto",
48859 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48860
48861 {&hf_ieee80211_tclas_class_mask1_ipv6_flow,
48862 {"Flow Label", "wlan.tclas.class_mask.flow_label",
48863 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48864
48865 {&hf_ieee80211_tclas_class_mask1_reserved,
48866 {"Reserved", "wlan.tclas.class_mask.reserved",
48867 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48868
48869 {&hf_ieee80211_tclas_class_mask2_tci,
48870 {"802.1Q CLAN TCI", "wlan.tclas.class_mask.tci",
48871 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48872
48873 {&hf_ieee80211_tclas_src_mac_addr,
48874 {"Source address", "wlan.tclas.src_mac_addr",
48875 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48876 "Classifier Parameters Ethernet Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48877
48878 {&hf_ieee80211_tclas_dst_mac_addr,
48879 {"Destination address", "wlan.tclas.dat_mac_addr",
48880 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48881 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48882
48883 {&hf_ieee80211_tclas_ether_type,
48884 {"Ethernet Type", "wlan.tclas.ether_type",
48885 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48886 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48887
48888 {&hf_ieee80211_tclas_version,
48889 {"IP Version", "wlan.tclas.version",
48890 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48891 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48892
48893 {&hf_ieee80211_tclas_ipv4_src,
48894 {"IPv4 Src Addr", "wlan.tclas.ipv4_src",
48895 FT_IPv4, BASE_NONE, NULL((void*)0), 0,
48896 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48897
48898 {&hf_ieee80211_tclas_ipv4_dst,
48899 {"IPv4 Dst Addr", "wlan.tclas.ipv4_dst",
48900 FT_IPv4, BASE_NONE, NULL((void*)0), 0,
48901 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48902
48903 {&hf_ieee80211_tclas_src_port,
48904 {"Source Port", "wlan.tclas.src_port",
48905 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48906 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48907
48908 {&hf_ieee80211_tclas_dst_port,
48909 {"Destination Port", "wlan.tclas.dst_port",
48910 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48911 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48912
48913 {&hf_ieee80211_tclas_dscp,
48914 {"IPv4 DSCP", "wlan.tclas.dscp",
48915 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
48916 "IPv4 Differentiated Services Code Point (DSCP) Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48917
48918 {&hf_ieee80211_tclas_protocol,
48919 {"Protocol", "wlan.tclas.protocol",
48920 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
48921 "IPv4 Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48922
48923 {&hf_ieee80211_tclas_ipv6_src,
48924 {"IPv6 Src Addr", "wlan.tclas.ipv6_src",
48925 FT_IPv6, BASE_NONE, NULL((void*)0), 0,
48926 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48927
48928 {&hf_ieee80211_tclas_ipv6_dst,
48929 {"IPv6 Dst Addr", "wlan.tclas.ipv6_dst",
48930 FT_IPv6, BASE_NONE, NULL((void*)0), 0,
48931 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48932
48933 {&hf_ieee80211_tclas_flow,
48934 {"Flow Label", "wlan.tclas.flow",
48935 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
48936 "IPv6 Flow Label", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48937
48938 {&hf_ieee80211_tclas_tag_type,
48939 {"802.1Q Tag Type", "wlan.tclas.tag_type",
48940 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
48941 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48942
48943 {&hf_ieee80211_tclas_filter_offset,
48944 {"Filter Offset", "wlan.tclas.filter_offset",
48945 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48946
48947 {&hf_ieee80211_tclas_filter_value,
48948 {"Filter Value", "wlan.tclas.filter_value",
48949 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48950
48951 {&hf_ieee80211_tclas_filter_mask,
48952 {"Filter Mask", "wlan.tclas.filter_mask",
48953 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48954
48955 {&hf_ieee80211_tclas4_version,
48956 {"Version", "wlan.tclas.class4.version",
48957 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48958
48959 {&hf_ieee80211_tclas_class_mask4_ver,
48960 {"Version", "wlan.tclas.class4.mask.version",
48961 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) }},
48962
48963 {&hf_ieee80211_tclas_class_mask4_4_src_ip,
48964 {"Source IP (IPv4)", "wlan.tclas.class4.mask.ipv4_src",
48965 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) }},
48966
48967 {&hf_ieee80211_tclas_class_mask4_4_dst_ip,
48968 {"Destination IP (IPv4)", "wlan.tclas.class4.mask.ipv4_dst",
48969 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) }},
48970
48971 {&hf_ieee80211_tclas_class_mask4_src_port,
48972 {"Source Port", "wlan.tclas.class4.mask.src_port",
48973 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) }},
48974
48975 {&hf_ieee80211_tclas_class_mask4_dst_port,
48976 {"Destination Port", "wlan.tclas.class4.mask.dst_port",
48977 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) }},
48978
48979 {&hf_ieee80211_tclas_class_mask4_dscp,
48980 {"DSCP", "wlan.tclas.class4.mask.dscp",
48981 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) }},
48982
48983 {&hf_ieee80211_tclas_class_mask4_ipv4_proto,
48984 {"Protocol", "wlan.tclas.class4.mask.protocol",
48985 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) }},
48986
48987 {&hf_ieee80211_tclas_class_mask4_reserved,
48988 {"Reserved", "wlan.tclas.class4.mask.reserved",
48989 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48990
48991 {&hf_ieee80211_tclas_class_mask4_6_src_ip,
48992 {"Source IP (IPv6)", "wlan.tclas.class4.mask.ipv6_src",
48993 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) }},
48994
48995 {&hf_ieee80211_tclas_class_mask4_6_dst_ip,
48996 {"Destination IP (IPv6)", "wlan.tclas.class4.mask.ipv6_dst",
48997 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) }},
48998
48999 {&hf_ieee80211_tclas_reserved_bytes,
49000 {"Reserved", "wlan.tclas.reserved",
49001 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49002
49003 {&hf_ieee80211_tclas_class_mask4_next_hdr,
49004 {"Next Header", "wlan.tclas.class4.mask.next_header",
49005 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) }},
49006
49007 {&hf_ieee80211_tclas_class_mask4_flow_label,
49008 {"Flow Label", "wlan.tclas.class4.mask.flow_label",
49009 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) }},
49010
49011 {&hf_ieee80211_tclas4_ipv4_src,
49012 {"Source IP (IPv4)", "wlan.tclas.class4.ipv4_src_ip",
49013 FT_IPv4, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49014
49015 {&hf_ieee80211_tclas4_ipv4_dst,
49016 {"Destination IP (IPv4)", "wlan.tclas.class4.ipv4_dst_ip",
49017 FT_IPv4, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49018
49019 {&hf_ieee80211_tclas4_src_port,
49020 {"Source Port", "wlan.tclas.class4.src_port",
49021 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49022
49023 {&hf_ieee80211_tclas4_dst_port,
49024 {"Destination Port", "wlan.tclas.class4.dst_port",
49025 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49026
49027 {&hf_ieee80211_tclas4_dscp,
49028 {"DSCP", "wlan.tclas.class4.dscp",
49029 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49030
49031 {&hf_ieee80211_tclas4_protocol,
49032 {"Protocol", "wlan.tclas.class4.protocol",
49033 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49034
49035 {&hf_ieee80211_tclas4_reserved,
49036 {"Reserved", "wlan.tclas.class4.reserved",
49037 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49038
49039 {&hf_ieee80211_tclas4_ipv6_src,
49040 {"Source IP (IPv6)", "wlan.tclas.class4.ipv6_src_ip",
49041 FT_IPv6, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49042
49043 {&hf_ieee80211_tclas4_ipv6_dst,
49044 {"Destination IP (IPv6)", "wlan.tclas.class4.ipv6_dst_ip",
49045 FT_IPv6, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49046
49047 {&hf_ieee80211_tclas4_next_hdr,
49048 {"Next Header", "wlan.tclas.class4.next_header",
49049 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49050
49051 {&hf_ieee80211_tclas4_flow,
49052 {"Flow Label", "wlan.tclas.class4.flow_label",
49053 FT_UINT24, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49054
49055 {&hf_ieee80211_tclas_tclas_8021d_up_pcp,
49056 {"802.1D UP/802.1Q Priority Code Point", "wlan.tclas.class4.8021dq_up_pcp",
49057 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49058
49059 {&hf_ieee80211_tclas_8021q_dei,
49060 {"802.1Q DEI", "wlan.tclas.class4.8021q_dei",
49061 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49062
49063 {&hf_ieee80211_tclas_8021q_vid,
49064 {"802.1Q VID", "wlan.tclas.class4.8021q_vid",
49065 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49066
49067 {&hf_ieee80211_tclas_class_mask5_up_prio,
49068 {"802.1D UP/802.1Q PCP", "wlan.tclas.class5.mask.8021dq_up_prio",
49069 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) }},
49070
49071 {&hf_ieee80211_tclas_class_mask5_dei,
49072 {"802.1Q DEI", "wlan.tclas.class4.mask.8021q_dei",
49073 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) }},
49074
49075 {&hf_ieee80211_tclas_class_mask5_vid,
49076 {"802.1Q VID", "wlan.tclas.class4.mask.8021q_vid",
49077 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49078
49079 {&hf_ieee80211_tclas_class_mask5_reserved,
49080 {"Reserved", "wlan.tclas.class5.mask.reserved",
49081 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49082
49083 {&hf_ieee80211_tclas_class_mask6_a_above,
49084 {"Classifier Mask", "wlan.tclas.class6-9.mask",
49085 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49086
49087 {&hf_ieee80211_tclas_class_mask6_frame_control_match_spec,
49088 {"Frame Control", "wlan.tclas.class6.mask.frame_control",
49089 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
,
49090 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49091
49092 {&hf_ieee80211_tclas_class_mask6_duration_id_match_spec,
49093 {"Duration ID", "wlan.tclas.class6.mask.duration_id",
49094 FT_UINT24, BASE_HEX, VALS(duration_id_mask_vals)((0 ? (const struct _value_string*)0 : ((duration_id_mask_vals
))))
,
49095 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49096
49097 {&hf_ieee80211_tclas_class_mask6_address_1_match_spec,
49098 {"Address 1", "wlan.tclas.class6.mask.address_1",
49099 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) }},
49100
49101 {&hf_ieee80211_tclas_class_mask6_address_2_match_spec,
49102 {"Address 2", "wlan.tclas.class6.mask.address_2",
49103 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) }},
49104
49105 {&hf_ieee80211_tclas_class_mask6_address_3_match_spec,
49106 {"Address 3", "wlan.tclas.class6.mask.address_3",
49107 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) }},
49108
49109 {&hf_ieee80211_tclas_class_mask6_sequence_control_spec,
49110 {"Sequence Control", "wlan.tclas.class6.mask.sequence_control",
49111 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49112 0x00C000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49113
49114 {&hf_ieee80211_tclas_class_mask6_address_4_match_spec,
49115 {"Address 4", "wlan.tclas.class6.mask.address_4",
49116 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) }},
49117
49118 {&hf_ieee80211_tclas_class_mask6_qos_control_spec,
49119 {"QoS Control", "wlan.tclas.class6.mask.qos_control",
49120 FT_UINT24, BASE_HEX, VALS(qos_control_mask_vals)((0 ? (const struct _value_string*)0 : ((qos_control_mask_vals
))))
,
49121 0x0C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49122
49123 {&hf_ieee80211_tclas_class_mask6_ht_control_spec,
49124 {"HT Control", "wlan.tclas.class6.mask.ht_control",
49125 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) }},
49126
49127 {&hf_ieee80211_tclas_class_mask6_reserved,
49128 {"Reserved", "wlan.tclas.class6.mask.reserved",
49129 FT_UINT24, BASE_HEX, NULL((void*)0), 0xC00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49130
49131 {&hf_ieee80211_tclas6_frame_control_spec,
49132 {"Frame Control Spec", "wlan.tclas.class6.frame_control_spec",
49133 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49134
49135 {&hf_ieee80211_tclas6_frame_control_mask,
49136 {"Frame Control Mask", "wlan.tclas.class6.frame_control_mask",
49137 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49138
49139 {&hf_ieee80211_tclas6_duration_spec,
49140 {"Duration Spec", "wlan.tclas.class6.duration_spec",
49141 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49142
49143 {&hf_ieee80211_tclas6_duration_mask,
49144 {"Duration Mask", "wlan.tclas.class6.duration_mask",
49145 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49146
49147 {&hf_ieee80211_tclas6_address_1_spec,
49148 {"Address 1 Spec", "wlan.tclas.class6.address_1_spec",
49149 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49150
49151 {&hf_ieee80211_tclas6_address_1_mask,
49152 {"Address 1 Mask", "wlan.tclas.class6.address_1_mask",
49153 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49154
49155 {&hf_ieee80211_tclas6_address_2_spec,
49156 {"Address 2 Spec", "wlan.tclas.class6.address_2_spec",
49157 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49158
49159 {&hf_ieee80211_tclas6_address_2_mask,
49160 {"Address 2 Mask", "wlan.tclas.class6.address_2_mask",
49161 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49162
49163 {&hf_ieee80211_tclas6_address_3_spec,
49164 {"Address 3 Spec", "wlan.tclas.class6.address_3_spec",
49165 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49166
49167 {&hf_ieee80211_tclas6_address_3_mask,
49168 {"Address 3 Mask", "wlan.tclas.class6.address_3_mask",
49169 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49170
49171 {&hf_ieee80211_tclas6_sequence_control_spec,
49172 {"Sequence Control Spec", "wlan.tclas.class6.sequence_control_spec",
49173 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49174
49175 {&hf_ieee80211_tclas6_sequence_control_mask,
49176 {"Sequence Control Mask", "wlan.tclas.class6.sequence_control_mask",
49177 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49178
49179 {&hf_ieee80211_tclas6_address_4_spec,
49180 {"Address 4 Spec", "wlan.tclas.class6.address_4_spec",
49181 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49182
49183 {&hf_ieee80211_tclas6_address_4_mask,
49184 {"Address 4 Mask", "wlan.tclas.class6.address_4_mask",
49185 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49186
49187 {&hf_ieee80211_tclas6_qos_control_spec,
49188 {"QoS Control Spec", "wlan.tclas.class6.qos_control_spes",
49189 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49190
49191 {&hf_ieee80211_tclas6_qos_control_mask,
49192 {"QoS Control Mask", "wlan.tclas.class6.qos_control_mask",
49193 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49194
49195 {&hf_ieee80211_tclas6_ht_control_spec,
49196 {"HT Control Spec", "wlan.tclas.class6.ht_control_spec",
49197 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49198
49199 {&hf_ieee80211_tclas6_ht_control_mask,
49200 {"HT Control Mask", "wlan.tclas.class6.ht_control_mask",
49201 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49202
49203 {&hf_ieee80211_tclas_class_mask7_frame_control_match_spec,
49204 {"Frame Control Match", "wlan.tclas.class7.frame_control_spec",
49205 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
,
49206 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49207
49208 {&hf_ieee80211_tclas_class_mask7_address_1_sid_match_spec,
49209 {"Address 1 (SID) Spec", "wlan.tclas.class4.address_1_sid_spec",
49210 FT_UINT24, BASE_HEX, VALS(address_1_sid_mask_vals)((0 ? (const struct _value_string*)0 : ((address_1_sid_mask_vals
))))
,
49211 0x00000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49212
49213 {&hf_ieee80211_tclas_class_mask7_address_2_match_spec,
49214 {"Address 2 Spec", "wlan.tclas.class7.address_2i_match_spec",
49215 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) }},
49216
49217 {&hf_ieee80211_tclas_class_mask7_sequence_control_spec,
49218 {"Sequence Control Spec", "wlan.tclas.class7.sequence_control_spec",
49219 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49220 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49221
49222 {&hf_ieee80211_tclas_class_mask7_address_3_match_spec,
49223 {"Address 3 Spec", "wlan.tclas.class7.address_3_match_spec",
49224 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) }},
49225
49226 {&hf_ieee80211_tclas_class_mask7_address_4_match_spec,
49227 {"Address 4 Spec", "wlan.tclas.class7.address_4_match_spec",
49228 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) }},
49229
49230 {&hf_ieee80211_tclas_class_mask7_reserved,
49231 {"Reserved", "wlan.tclas.class7.reserved",
49232 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49233
49234 {&hf_ieee80211_tclas7_frame_control_spec,
49235 {"Frame Control Spec", "wlan.tclas.class7.frame_control_spec",
49236 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49237
49238 {&hf_ieee80211_tclas7_frame_control_mask,
49239 {"Frame Control Mask", "wlan.tclas.class7.frame_control_mask",
49240 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49241
49242 {&hf_ieee80211_tclas7_address_1_sid_spec,
49243 {"Address 1 (SID) Spec", "wlan.tclas.class7.address_1_sid_spec",
49244 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49245
49246 {&hf_ieee80211_tclas7_address_1_sid_mask,
49247 {"Address 1 (SID) Mask", "wlan.tclas.class7.address_1_sid_mask",
49248 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49249
49250 {&hf_ieee80211_tclas7_address_2_spec,
49251 {"Address 2 Spec", "wlan.tclas.class7.address_2_spec",
49252 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49253
49254 {&hf_ieee80211_tclas7_address_2_mask,
49255 {"Address 2 Mask", "wlan.tclas.class7.address_2_mask",
49256 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49257
49258 {&hf_ieee80211_tclas7_sequence_control_spec,
49259 {"Sequence Control Spec", "wlan.tclas.class7.sequence_control_spec",
49260 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49261
49262 {&hf_ieee80211_tclas7_sequence_control_mask,
49263 {"Sequence Control Mask", "wlan.tclas.class7.sequence_control_mask",
49264 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49265
49266 {&hf_ieee80211_tclas7_address_3_spec,
49267 {"Address 3 Spec", "wlan.tclas.class7.address_3_spec",
49268 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49269
49270 {&hf_ieee80211_tclas7_address_3_mask,
49271 {"Address 3 Mask", "wlan.tclas.class7.address_3_mask",
49272 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49273
49274 {&hf_ieee80211_tclas7_address_4_spec,
49275 {"Address 4 Spec", "wlan.tclas.class4.address_4_spec",
49276 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49277
49278 {&hf_ieee80211_tclas7_address_4_mask,
49279 {"Address 4 Mask", "wlan.tclas.class4.address_4_mask",
49280 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49281
49282 {&hf_ieee80211_tclas_class_mask8_frame_control_match_spec,
49283 {"Frame Control Spec", "wlan.tclas.class8.mask.frame_control_spec",
49284 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
,
49285 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49286
49287 {&hf_ieee80211_tclas_class_mask8_address_1_bssid_match_spec,
49288 {"Address 1 (BSSID) Spec", "wlan.tclas.class8.mask.address_1_bssid_spec",
49289 FT_UINT24, BASE_HEX, VALS(address_1_bssid_mask_vals)((0 ? (const struct _value_string*)0 : ((address_1_bssid_mask_vals
))))
,
49290 0x00000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49291
49292 {&hf_ieee80211_tclas_class_mask8_address_2_sid_match_spec,
49293 {"Address 2 (SID) Spec", "wlan.tclas.class8.mask.address_2_sid_spec",
49294 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) }},
49295
49296 {&hf_ieee80211_tclas_class_mask8_sequence_control_spec,
49297 {"Sequence Control Spec", "wlan.tclas.class8.mask.sequence_control_spec",
49298 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49299 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49300
49301 {&hf_ieee80211_tclas_class_mask8_address_3_match_spec,
49302 {"Address 3 Spec", "wlan.tclas.class8.mask.address_3_spec",
49303 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) }},
49304
49305 {&hf_ieee80211_tclas_class_mask8_address_4_match_spec,
49306 {"Address 4 Spec", "wlan.tclas.class8.mask.address_4_spec",
49307 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) }},
49308
49309 {&hf_ieee80211_tclas_class_mask8_reserved,
49310 {"Reserved", "wlan.tclas.class8.reserved",
49311 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49312
49313 {&hf_ieee80211_tclas8_frame_control_spec,
49314 {"Frame Control Spec", "wlan.tclas.class8.frame_control_spec",
49315 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49316
49317 {&hf_ieee80211_tclas8_frame_control_mask,
49318 {"Frame Control Mask", "wlan.tclas.class8.frame_control_mask",
49319 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49320
49321 {&hf_ieee80211_tclas8_address_1_bssid_spec,
49322 {"Address 1 (BSSID) Spec", "wlan.tclas.class8.address_1_bssid_spec",
49323 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49324
49325 {&hf_ieee80211_tclas8_address_1_bssid_mask,
49326 {"Address 1 (BSSID) Mask", "wlan.tclas.class8.address_1_bssid_mask",
49327 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49328
49329 {&hf_ieee80211_tclas8_address_2_sid_spec,
49330 {"Address 2 (SID) Spec", "wlan.tclas.class8.address_2_sid_spec",
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_tclas8_address_2_sid_mask,
49334 {"Address 2 (SID) Spec", "wlan.tclas.class8.address_2_sid_spec",
49335 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49336
49337 {&hf_ieee80211_tclas8_sequence_control_spec,
49338 {"Sequence Control Spec", "wlan.tclas.class8.sequence_control_spec",
49339 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49340
49341 {&hf_ieee80211_tclas8_sequence_control_mask,
49342 {"Sequence Control Mask", "wlan.tclas.class8.sequence_control_mask",
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_tclas8_address_3_spec,
49346 {"Address 3 Spec", "wlan.tclas.class8.address_3_spec",
49347 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49348
49349 {&hf_ieee80211_tclas8_address_3_mask,
49350 {"Address 3 Mask", "wlan.tclas.class8.address_3_mask",
49351 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49352
49353 {&hf_ieee80211_tclas8_address_4_spec,
49354 {"Address 4 Spec", "wlan.tclas.class8.address_4_spec",
49355 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49356
49357 {&hf_ieee80211_tclas8_address_4_mask,
49358 {"Address 4 Mask", "wlan.tclas.class8.address_4_mask",
49359 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49360
49361 {&hf_ieee80211_tclas_class_mask9_frame_control_match_spec,
49362 {"Frame Control Spec", "wlan.tclas.class9.frame_control_spec",
49363 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) }},
49364
49365 {&hf_ieee80211_tclas_class_mask9_address_1_match_spec,
49366 {"Address 1 Spec", "wlan.tclas.class9.mask.address_1_spec",
49367 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) }},
49368
49369 {&hf_ieee80211_tclas_class_mask9_address_2_match_spec,
49370 {"Address 2 Spec", "wlan.tclas.class9.mask.address_2_spec",
49371 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) }},
49372
49373 {&hf_ieee80211_tclas_class_mask9_sequence_control_spec,
49374 {"Sequence Control Spec", "wlan.tclas.class9.mask.sequence_control_spec",
49375 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49376 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49377
49378 {&hf_ieee80211_tclas_class_mask9_reserved,
49379 {"Reserved", "wlan.tclas.class9.mask.reserved",
49380 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49381
49382 {&hf_ieee80211_tclas9_frame_control_spec,
49383 {"Frame Control Spec", "wlan.tclas.class9.frame_control_spec",
49384 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49385
49386 {&hf_ieee80211_tclas9_frame_control_mask,
49387 {"Frame Control Mask", "wlan.tclas.class9.frame_control_mask",
49388 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49389
49390 {&hf_ieee80211_tclas9_address_1_spec,
49391 {"Address 1 Spec", "wlan.tclas.class9.address_1_spec",
49392 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49393
49394 {&hf_ieee80211_tclas9_address_1_mask,
49395 {"Address 1 Mask", "wlan.tclas.class9.address_1_mask",
49396 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49397
49398 {&hf_ieee80211_tclas9_address_2_spec,
49399 {"Address 2 Spec", "wlan.tclas.class9.address_2_spec",
49400 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49401
49402 {&hf_ieee80211_tclas9_address_2_mask,
49403 {"Address 2 Mask", "wlan.tclas.class9.address_2_mask",
49404 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49405
49406 {&hf_ieee80211_tclas9_sequence_control_spec,
49407 {"Sequence Control Spec", "wlan.tclas.class9.sequence_control_spec",
49408 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49409
49410 {&hf_ieee80211_tclas9_sequence_control_mask,
49411 {"Sequence Control Mask", "wlan.tclas.class9.sequence_control_mask",
49412 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49413
49414 {&hf_ieee80211_tclas10_protocol_instance,
49415 {"Protocol Instance", "wlan.tclas.class10.protocol_instance",
49416 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49417
49418 {&hf_ieee80211_tclas10_protocol_num_next_hdr,
49419 {"Protocol Number or Next Header",
49420 "wlan.tclas.class10.proto_num_or_next_hdr",
49421 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49422
49423 {&hf_ieee80211_tag_challenge_text,
49424 {"Challenge Text", "wlan.tag.challenge_text",
49425 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49426 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49427
49428 {&hf_ieee80211_tag_oui_wfa_action_type,
49429 {"OUI Type", "wlan.action.oui_type",
49430 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) }},
49431
49432 {&hf_ieee80211_oui_qos_subtype,
49433 {"OUI Subtype", "wlan.action.dscp_policy.oui_subtype",
49434 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) }},
49435
49436 {&hf_ieee80211_oui_qos_mgmt_dialog_token,
49437 {"Dialog Token", "wlan.action.dscp_policy.dialog_token",
49438 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49439
49440 {&hf_ieee80211_oui_qos_mgmt_rqst_control,
49441 {"Request Control", "wlan.action.dscp_policy.request.control",
49442 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49443
49444 {&hf_ieee80211_oui_qos_mgmt_rq_ctrl_more,
49445 {"More", "wlan.action.dscp_policy.request.control.more",
49446 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49447
49448 {&hf_ieee80211_oui_qos_mgmt_rq_ctrl_reset,
49449 {"Reset", "wlan.action.dscp_policy.request.control.reset",
49450 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49451
49452 {&hf_ieee80211_oui_qos_mgmt_rq_reserved,
49453 {"Reserved", "wlan.action.dscp_policy.request.control.reserved",
49454 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49455
49456 {&hf_ieee80211_dscp_policy_id,
49457 {"Policy ID", "wlan.action.dscp_policy_response.policy_id",
49458 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49459
49460 {&hf_ieee80211_dscp_policy_status,
49461 {"Status", "wlan.action.dscp_policy_response.policy_status",
49462 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49463
49464 {&hf_ieee80211_oui_qos_mgmt_resp_control,
49465 {"Response Control", "wlan.action.dscp_policy.request.control",
49466 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49467
49468 {&hf_ieee80211_oui_qos_mgmt_rsp_ctrl_more,
49469 {"More", "wlan.action.dscp_policy.response.control.more",
49470 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49471
49472 {&hf_ieee80211_oui_qos_mgmt_rsp_ctrl_reset,
49473 {"Reset", "wlan.action.dscp_policy.response.control.reset",
49474 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49475
49476 {&hf_ieee80211_oui_qos_mgmt_rsp_reserved,
49477 {"Reserved", "wlan.action.dscp_policy.response.control.reserved",
49478 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49479
49480 {&hf_ieee80211_dscp_policy_scs_sts_list,
49481 {"Status List", "wlan.action.dscp_policy_response.policy_status_list",
49482 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49483
49484 {&hf_ieee80211_oui_qos_mgmt_count,
49485 {"Count", "wlan.action.dscp_policy.response.count",
49486 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49487
49488 {&hf_ieee80211_tag_he_6ghz_cap_inf,
49489 {"Capabilities Information", "wlan.tag.he_6ghz.cap_inf",
49490 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49491 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49492
49493 {&hf_ieee80211_tag_he_6ghz_cap_inf_b0_b2,
49494 {"Minimum MPDU Start Spacing", "wlan.tag.he_6ghz.cap_inf.b0_b2",
49495 FT_UINT16, BASE_HEX, VALS(s1g_min_mpdu_start_spacing_vals)((0 ? (const struct _value_string*)0 : ((s1g_min_mpdu_start_spacing_vals
))))
, 0x0007,
49496 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49497
49498 {&hf_ieee80211_tag_he_6ghz_cap_inf_b3_b5,
49499 {"Maximum A-MPDU Length Exponent", "wlan.tag.he_6ghz.cap_inf.b3_b5",
49500 FT_UINT16, BASE_HEX, VALS(vht_max_ampdu_flag)((0 ? (const struct _value_string*)0 : ((vht_max_ampdu_flag))
))
, 0x0038,
49501 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49502
49503 {&hf_ieee80211_tag_he_6ghz_cap_inf_b6_b7,
49504 {"Maximum MPDU Length", "wlan.tag.he_6ghz.cap_inf.b6_b7",
49505 FT_UINT16, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x00C0,
49506 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49507
49508 {&hf_ieee80211_tag_he_6ghz_cap_inf_b8,
49509 {"Reserved", "wlan.tag.he_6ghz.cap_inf.b8",
49510 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0100,
49511 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49512
49513 {&hf_ieee80211_tag_he_6ghz_cap_inf_b9_b10,
49514 {"SM Power Save", "wlan.tag.he_6ghz.cap_inf.b9b_b10",
49515 FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag)((0 ? (const struct _value_string*)0 : ((ht_sm_pwsave_flag)))
)
, 0x0600,
49516 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49517
49518 {&hf_ieee80211_tag_he_6ghz_cap_inf_b11,
49519 {"RD Responder", "wlan.tag.he_6ghz.cap_inf.b11",
49520 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800,
49521 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49522
49523 {&hf_ieee80211_tag_he_6ghz_cap_inf_b12,
49524 {"Rx Antenna Pattern Consistency", "wlan.tag.he_6ghz.cap_inf.b12",
49525 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x1000,
49526 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49527
49528 {&hf_ieee80211_tag_he_6ghz_cap_inf_b13,
49529 {"Tx Antenna Pattern Consistency", "wlan.tag.he_6ghz.cap_inf.b13",
49530 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x2000,
49531 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49532
49533 {&hf_ieee80211_tag_he_6ghz_cap_inf_b14_b15,
49534 {"Reserved", "wlan.tag.he_6ghz.cap_inf.b14_b15",
49535 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000,
49536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49537
49538 {&hf_ieee80211_tag_ftm_tsf_sync_info,
49539 {"TSF Sync Info", "wlan.tag.ftm_tsf_sync_info",
49540 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49542
49543 {&hf_ieee80211_rsn_version,
49544 {"RSN Version", "wlan.rsn.version",
49545 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49546 "Indicates the version number of the RSNA protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49547
49548 {&hf_ieee80211_rsn_gcs,
49549 {"Group Cipher Suite", "wlan.rsn.gcs",
49550 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gcs_base_custom)((const void *) (size_t) (rsn_gcs_base_custom)), 0,
49551 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49552
49553 {&hf_ieee80211_rsn_gcs_oui,
49554 {"Group Cipher Suite OUI", "wlan.rsn.gcs.oui",
49555 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49556 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49557
49558 {&hf_ieee80211_rsn_gcs_type,
49559 {"Group Cipher Suite type", "wlan.rsn.gcs.type",
49560 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49561 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49562
49563 {&hf_ieee80211_rsn_gcs_80211_type,
49564 {"Group Cipher Suite type", "wlan.rsn.gcs.type",
49565 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_cipher_vals
))))
, 0,
49566 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49567
49568 {&hf_ieee80211_rsn_pcs_count,
49569 {"Pairwise Cipher Suite Count", "wlan.rsn.pcs.count",
49570 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49571 "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) }},
49572
49573 {&hf_ieee80211_rsn_pcs_list,
49574 {"Pairwise Cipher Suite List", "wlan.rsn.pcs.list",
49575 FT_NONE, BASE_NONE, NULL((void*)0), 0,
49576 "Contains a series of cipher suite selectors that indicate the pairwisecipher suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49577
49578 {&hf_ieee80211_rsn_pcs,
49579 {"Pairwise Cipher Suite", "wlan.rsn.pcs",
49580 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_pcs_base_custom)((const void *) (size_t) (rsn_pcs_base_custom)), 0,
49581 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49582
49583 {&hf_ieee80211_rsn_pcs_oui,
49584 {"Pairwise Cipher Suite OUI", "wlan.rsn.pcs.oui",
49585 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49587
49588 {&hf_ieee80211_rsn_pcs_type,
49589 {"Pairwise Cipher Suite type", "wlan.rsn.pcs.type",
49590 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49592
49593 {&hf_ieee80211_rsn_pcs_80211_type,
49594 {"Pairwise Cipher Suite type", "wlan.rsn.pcs.type",
49595 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_cipher_vals
))))
, 0,
49596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49597
49598 {&hf_ieee80211_rsn_akms_count,
49599 {"Auth Key Management (AKM) Suite Count", "wlan.rsn.akms.count",
49600 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49601 "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) }},
49602
49603 {&hf_ieee80211_rsn_akms_list,
49604 {"Auth Key Management (AKM) List", "wlan.rsn.akms.list",
49605 FT_NONE, BASE_NONE, NULL((void*)0), 0,
49606 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49607
49608 {&hf_ieee80211_rsn_akms,
49609 {"Auth Key Management (AKM) Suite", "wlan.rsn.akms",
49610 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_akms_base_custom)((const void *) (size_t) (rsn_akms_base_custom)), 0,
49611 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49612
49613 {&hf_ieee80211_rsn_akms_oui,
49614 {"Auth Key Management (AKM) OUI", "wlan.rsn.akms.oui",
49615 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49616 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49617
49618 {&hf_ieee80211_rsn_akms_type,
49619 {"Auth Key Management (AKM) type", "wlan.rsn.akms.type",
49620 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49621 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49622
49623 {&hf_ieee80211_rsn_akms_80211_type,
49624 {"Auth Key Management (AKM) type", "wlan.rsn.akms.type",
49625 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_keymgmt_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_keymgmt_vals
))))
, 0,
49626 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49627
49628 {&hf_ieee80211_rsn_cap,
49629 {"RSN Capabilities", "wlan.rsn.capabilities",
49630 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49631 "RSN Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49632
49633 {&hf_ieee80211_rsn_cap_preauth,
49634 {"RSN Pre-Auth capabilities", "wlan.rsn.capabilities.preauth",
49635 FT_BOOLEAN, 16, TFS(&rsn_preauth_flags)((0 ? (const struct true_false_string*)0 : ((&rsn_preauth_flags
))))
, 0x0001,
49636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49637
49638 {&hf_ieee80211_rsn_cap_no_pairwise,
49639 {"RSN No Pairwise capabilities", "wlan.rsn.capabilities.no_pairwise",
49640 FT_BOOLEAN, 16, TFS(&rsn_no_pairwise_flags)((0 ? (const struct true_false_string*)0 : ((&rsn_no_pairwise_flags
))))
, 0x0002,
49641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49642
49643 {&hf_ieee80211_rsn_cap_ptksa_replay_counter,
49644 {"RSN PTKSA Replay Counter capabilities", "wlan.rsn.capabilities.ptksa_replay_counter",
49645 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter)((0 ? (const struct _value_string*)0 : ((rsn_cap_replay_counter
))))
, 0x000C,
49646 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49647
49648 {&hf_ieee80211_rsn_cap_gtksa_replay_counter,
49649 {"RSN GTKSA Replay Counter capabilities", "wlan.rsn.capabilities.gtksa_replay_counter",
49650 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter)((0 ? (const struct _value_string*)0 : ((rsn_cap_replay_counter
))))
, 0x0030,
49651 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49652
49653 {&hf_ieee80211_rsn_cap_mfpr,
49654 {"Management Frame Protection Required", "wlan.rsn.capabilities.mfpr",
49655 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0040,
49656 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49657
49658 {&hf_ieee80211_rsn_cap_mfpc,
49659 {"Management Frame Protection Capable", "wlan.rsn.capabilities.mfpc",
49660 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x0080,
49661 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49662
49663 {&hf_ieee80211_rsn_cap_jmr,
49664 {"Joint Multi-band RSNA", "wlan.rsn.capabilities.jmr",
49665 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0100,
49666 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49667
49668 {&hf_ieee80211_rsn_cap_peerkey,
49669 {"PeerKey Enabled", "wlan.rsn.capabilities.peerkey",
49670 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0200,
49671 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49672
49673 {&hf_ieee80211_rsn_cap_spp_amsdu_cap,
49674 {"SPP A-MSDU Capable", "wlan.rsn.capabilities.spp_amsdu_cap",
49675 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x0400,
49676 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49677
49678 {&hf_ieee80211_rsn_cap_spp_amsdu_req,
49679 {"SPP A-MSDU Required", "wlan.rsn.capabilities.spp_amsdu_req",
49680 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0800,
49681 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49682
49683 {&hf_ieee80211_rsn_cap_pbac,
49684 {"PBAC (protected block ack agreement capable)", "wlan.rsn.capabilities.pbac",
49685 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x1000,
49686 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49687
49688 {&hf_ieee80211_rsn_cap_extended_key_id_iaf,
49689 {"Extended Key ID for Individually Addressed Frames",
49690 "wlan.rsn.capabilities.extended_key_id_iaf",
49691 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) }},
49692
49693 {&hf_ieee80211_rsn_cap_ocvc,
49694 {"OCVC", "wlan.rsn.capabilities.ocvc",
49695 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x4000,
49696 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49697
49698 {&hf_ieee80211_rsn_pmkid_count,
49699 {"PMKID Count", "wlan.rsn.pmkid.count",
49700 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49701 "Indicates the number of PMKID selectors that are contained in the PMKID Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49702
49703 {&hf_ieee80211_rsn_pmkid_list,
49704 {"PMKID List", "wlan.rsn.pmkid.list",
49705 FT_NONE, BASE_NONE, NULL((void*)0), 0,
49706 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49707
49708 {&hf_ieee80211_rsn_pmkid,
49709 {"PMKID", "wlan.pmkid.akms",
49710 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49711 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49712
49713 {&hf_ieee80211_rsn_gmcs,
49714 {"Group Management Cipher Suite", "wlan.rsn.gmcs",
49715 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gmcs_base_custom)((const void *) (size_t) (rsn_gmcs_base_custom)), 0,
49716 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49717
49718 {&hf_ieee80211_rsn_gmcs_oui,
49719 {"Group Management Cipher Suite OUI", "wlan.rsn.gmcs.oui",
49720 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49721 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49722
49723 {&hf_ieee80211_rsn_gmcs_type,
49724 {"Group Management Cipher Suite type", "wlan.rsn.gmcs.type",
49725 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49726 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49727
49728 {&hf_ieee80211_rsn_gmcs_80211_type,
49729 {"Group Management Cipher Suite type", "wlan.rsn.gmcs.type",
49730 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_cipher_vals
))))
, 0,
49731 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49732
49733 {&hf_ieee80211_ht_pren_type,
49734 {"802.11n (Pre) Type", "wlan.vs.pren.type",
49735 FT_UINT8, BASE_DEC, VALS(ieee80211_ht_pren_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_ht_pren_type_vals
))))
, 0,
49736 "Vendor Specific HT Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49737 {&hf_ieee80211_ht_pren_unknown,
49738 {"802.11n (Pre) Unknown Data", "wlan.vs.pren.unknown_data",
49739 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49741
49742 {&hf_ieee80211_ht_cap,
49743 {"HT Capabilities Info", "wlan.ht.capabilities",
49744 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49745 "HT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49746
49747 {&hf_ieee80211_ht_vs_cap,
49748 {"HT Capabilities Info (VS)", "wlan.vs.ht.capabilities",
49749 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49750 "Vendor Specific HT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49751
49752 {&hf_ieee80211_ht_ldpc_coding,
49753 {"HT LDPC coding capability", "wlan.ht.capabilities.ldpccoding",
49754 FT_BOOLEAN, 16, TFS(&ht_ldpc_coding_flag)((0 ? (const struct true_false_string*)0 : ((&ht_ldpc_coding_flag
))))
, 0x0001,
49755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49756
49757 {&hf_ieee80211_ht_chan_width,
49758 {"HT Support channel width", "wlan.ht.capabilities.width",
49759 FT_BOOLEAN, 16, TFS(&ht_chan_width_flag)((0 ? (const struct true_false_string*)0 : ((&ht_chan_width_flag
))))
, 0x0002,
49760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49761
49762 {&hf_ieee80211_ht_sm_pwsave,
49763 {"HT SM Power Save", "wlan.ht.capabilities.sm",
49764 FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag)((0 ? (const struct _value_string*)0 : ((ht_sm_pwsave_flag)))
)
, 0x000c,
49765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49766
49767 {&hf_ieee80211_ht_green,
49768 {"HT Green Field", "wlan.ht.capabilities.green",
49769 FT_BOOLEAN, 16, TFS(&ht_green_flag)((0 ? (const struct true_false_string*)0 : ((&ht_green_flag
))))
, 0x0010,
49770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49771
49772 {&hf_ieee80211_ht_short20,
49773 {"HT Short GI for 20MHz", "wlan.ht.capabilities.short20",
49774 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0020,
49775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49776
49777 {&hf_ieee80211_ht_short40,
49778 {"HT Short GI for 40MHz", "wlan.ht.capabilities.short40",
49779 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040,
49780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49781
49782 {&hf_ieee80211_ht_tx_stbc,
49783 {"HT Tx STBC", "wlan.ht.capabilities.txstbc",
49784 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0080,
49785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49786
49787 {&hf_ieee80211_ht_rx_stbc,
49788 {"HT Rx STBC", "wlan.ht.capabilities.rxstbc",
49789 FT_UINT16, BASE_HEX, VALS(ht_rx_stbc_flag)((0 ? (const struct _value_string*)0 : ((ht_rx_stbc_flag)))), 0x0300,
49790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49791
49792 {&hf_ieee80211_ht_reserved_b10,
49793 {"Reserved", "wlan.ht.capabilities.info_reserved_b10",
49794 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0400,
49795 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49796
49797 {&hf_ieee80211_ht_max_amsdu,
49798 {"HT Max A-MSDU length", "wlan.ht.capabilities.amsdu",
49799 FT_BOOLEAN, 16, TFS(&ht_max_amsdu_flag)((0 ? (const struct true_false_string*)0 : ((&ht_max_amsdu_flag
))))
, 0x0800,
49800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49801
49802 {&hf_ieee80211_ht_dss_cck_40,
49803 {"HT DSSS/CCK mode in 40MHz", "wlan.ht.capabilities.dsscck",
49804 FT_BOOLEAN, 16, TFS(&ht_dss_cck_40_flag)((0 ? (const struct true_false_string*)0 : ((&ht_dss_cck_40_flag
))))
, 0x1000,
49805 "HT DSS/CCK mode in 40MHz", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49806
49807 {&hf_ieee80211_ht_reserved_b13,
49808 {"Reserved", "wlan.ht.capabilities.info_reserved_b13",
49809 FT_UINT16, BASE_HEX, NULL((void*)0), 0x2000,
49810 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49811
49812 {&hf_ieee80211_ht_40_mhz_intolerant,
49813 {"HT Forty MHz Intolerant", "wlan.ht.capabilities.40mhzintolerant",
49814 FT_BOOLEAN, 16, TFS(&ht_40_mhz_intolerant_flag)((0 ? (const struct true_false_string*)0 : ((&ht_40_mhz_intolerant_flag
))))
, 0x4000,
49815 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49816
49817 {&hf_ieee80211_ht_reserved_b15,
49818 {"Reserved", "wlan.ht.capabilities.info_reserved_b15",
49819 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000,
49820 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49821
49822 {&hf_ieee80211_ext_bss_mu_mimo_capable_sta_count,
49823 {"MU-MIMO Capable STA Count", "wlan.ext_bss.mu_mimo_capable_sta_count",
49824 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49826
49827 {&hf_ieee80211_ext_bss_ss_underutilization,
49828 {"Spatial Stream Underutilization", "wlan.ext_bss.ss_underutilization",
49829 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49831
49832 {&hf_ieee80211_ext_bss_observable_sec_20mhz_utilization,
49833 {"Observable Secondary 20MHz Utilization", "wlan.ext_bss.observable_sec_20mhz_utilization",
49834 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49835 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49836
49837 {&hf_ieee80211_ext_bss_observable_sec_40mhz_utilization,
49838 {"Observable Secondary 40MHz Utilization", "wlan.ext_bss.observable_sec_40mhz_utilization",
49839 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49841
49842 {&hf_ieee80211_ext_bss_observable_sec_80mhz_utilization,
49843 {"Observable Secondary 80MHz Utilization", "wlan.ext_bss.observable_sec_80mhz_utilization",
49844 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49846
49847 {&hf_ieee80211_wide_bw_new_channel_width,
49848 {"New Channel Width", "wlan.wide_bw.new_channel_width",
49849 FT_UINT8, BASE_HEX, VALS(vht_operation_info_channel_width)((0 ? (const struct _value_string*)0 : ((vht_operation_info_channel_width
))))
, 0x0,
49850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49851
49852 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment0,
49853 {"New Channel Center Frequency Segment 0", "wlan.wide_bw.new_channel_center_freq_segment0",
49854 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0x0,
49855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49856
49857 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment1,
49858 {"New Channel Center Frequency Segment 1", "wlan.wide_bw.new_channel_center_freq_segment1",
49859 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0x0,
49860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49861
49862 {&hf_ieee80211_operat_notification_mode,
49863 {"Operating Mode Notification", "wlan.operat_notification_mode",
49864 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
49865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49866
49867 {&hf_ieee80211_operat_mode_field_channel_width,
49868 {"Channel Width", "wlan.operat_mode_field.channelwidth",
49869 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03,
49870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49871
49872 {&hf_ieee80211_operat_mode_field_160_80plus80_bw,
49873 {"160/80+80 BW", "wlan.operat_mode_field.160_80plus80_bw",
49874 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04,
49875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49876
49877 {&hf_ieee80211_operat_mode_field_no_ldpc,
49878 {"No LDPC", "wlan.operat_mode_field.no_ldpc",
49879 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
49880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49881
49882 {&hf_ieee80211_operat_mode_field_rxnss,
49883 {"Rx NSS", "wlan.operat_mode_field.rxnss",
49884 FT_UINT8, BASE_HEX, VALS(operat_mode_field_rxnss)((0 ? (const struct _value_string*)0 : ((operat_mode_field_rxnss
))))
, 0x70,
49885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49886
49887 {&hf_ieee80211_operat_mode_field_rxnsstype,
49888 {"Rx NSS Type", "wlan.operat_mode_field.rxnsstype",
49889 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
49890 "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) }},
49891
49892 {&hf_ieee80211_tbtt_info,
49893 {"TBTT Information Field", "wlan.rnr.tbtt_info",
49894 FT_UINT16, BASE_DEC, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49895
49896 {&hf_ieee80211_tbtt_filtered_nap,
49897 {"TBTT Filtered Neighbor AP", "wlan.rnr.tbtt_info.fna",
49898 FT_UINT16, BASE_DEC, NULL((void*)0), 1<<2, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49899
49900 {&hf_ieee80211_tbtt_info_count,
49901 {"TBTT Information Count", "wlan.rnr.tbtt_info.info_count",
49902 FT_UINT16, BASE_DEC, NULL((void*)0), 0xf<<4, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49903
49904 {&hf_ieee80211_tbtt_info_length,
49905 {"TBTT Information Length", "wlan.rnr.tbtt_info.info_len",
49906 FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(tbtt_info_length)((0 ? (const struct _range_string*)0 : ((tbtt_info_length)))),
49907 0xff<<8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49908
49909 {&hf_ieee80211_tbtt_operating_class,
49910 {"Operating Class", "wlan.rnr.tbtt_info.operating_class",
49911 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49912
49913 {&hf_ieee80211_tbtt_channel_number,
49914 {"Channel Number", "wlan.rnr.tbtt_info.channel_num",
49915 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49916
49917 {&hf_ieee80211_tbtt_offset,
49918 {"Neighbor AP TBTT Offset", "wlan.rnr.tbtt_info.tbtt_offset",
49919 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49920
49921 {&hf_ieee80211_tbtt_bssid,
49922 {"BSSID", "wlan.rnr.tbtt_info.bssid",
49923 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49924
49925 {&hf_ieee80211_tbtt_short_ssid,
49926 {"Short SSID", "wlan.rnr.tbtt_info.sh_ssid",
49927 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49928
49929 {&hf_ieee80211_rnr_bss_params,
49930 {"BSS Parameters", "wlan.rnr.tbtt_info.bss_parameters",
49931 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49932
49933 {&hf_ieee80211_rnr_oct_recommended,
49934 {"OCT Recommended", "wlan.rnr.tbtt_info.bss_parameters.oct_recommended",
49935 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49936
49937 {&hf_ieee80211_rnr_same_ssid,
49938 {"Same SSID", "wlan.rnr.tbtt_info.bss_parameters.same_ssid",
49939 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49940
49941 {&hf_ieee80211_rnr_multiple_bssid,
49942 {"Multiple BSSID", "wlan.rnr.tbtt_info.bss_parameters.multiple_bssid",
49943 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49944
49945 {&hf_ieee80211_rnr_transmitted_bssid,
49946 {"Transmitted BSSID", "wlan.rnr.tbtt_info.bss_parameters.transmitted_bssid",
49947 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49948
49949 {&hf_ieee80211_rnr_ess_with_colocated_ap,
49950 {"Member of ESS with 2.4/5 GHz Co-Located AP",
49951 "wlan.rnr.tbtt_info.bss_parameters.member_of_ess_with_2p4_5_ghz_colocated_ap",
49952 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49953
49954 {&hf_ieee80211_rnr_unsolicited_probe_responses,
49955 {"Unsolicited Probe Responses",
49956 "wlan.rnr.tbtt_info.bss_parameters.unsolicited_probe_responses",
49957 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49958
49959 {&hf_ieee80211_rnr_same_colocated_ap,
49960 {"Co-Located AP", "wlan.rnr.tbtt_info.bss_parameters.colocated_ap",
49961 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49962
49963 {&hf_ieee80211_rnr_same_reserved,
49964 {"Reserved", "wlan.rnr.tbtt_info.bss_parameters.reserved",
49965 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49966
49967 {&hf_ieee80211_rnr_20mhz_psd_subfield,
49968 {"PSD Subfield", "wlan.rnr.tbtt_info.psd_subfield",
49969 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) }},
49970
49971 {&hf_ieee80211_rnr_reserved_data,
49972 {"Reserved", "wlan.rnr.tbtt_info.reserved",
49973 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49974
49975 {&hf_ieee80211_rnr_mld_params,
49976 {"MLD Parameters", "wlan.rnr.tbtt_info.mld_parameters",
49977 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49978
49979 {&hf_ieee80211_rnr_mld_id,
49980 {"MLD ID", "wlan.rnr.tbtt_info.mld_parameters.mld_id",
49981 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0000FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49982
49983 {&hf_ieee80211_rnr_mld_link_id,
49984 {"Link ID", "wlan.rnr.tbtt_info.mld_parameters.link_id",
49985 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49986
49987 {&hf_ieee80211_rnr_mld_bss_params_change_count,
49988 {"BSS Parameters Change Count",
49989 "wlan.rnr.tbtt_info.mld_parameters.bss_params_change_count",
49990 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0FF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49991
49992 {&hf_ieee80211_rnr_mld_all_updates_included,
49993 {"All Updates Included",
49994 "wlan.rnr.tbtt_info.mld_parameters.all_updates_included",
49995 FT_BOOLEAN, 24, NULL((void*)0), 0x100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49996
49997 {&hf_ieee80211_rnr_mld_disabled_link_indication,
49998 {"Disabled Link Indication",
49999 "wlan.rnr.tbtt_info.mld_parameters.disabled_link_indication",
50000 FT_BOOLEAN, 24, NULL((void*)0), 0x200000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50001
50002 {&hf_ieee80211_rnr_mld_reserved,
50003 {"Reserved", "wlan.rnr.tbtt_info.mld_parameters.reserved",
50004 FT_UINT24, BASE_HEX, NULL((void*)0), 0xC00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50005
50006 {&hf_ieee80211_s1g_cap_byte1,
50007 {"S1G Capabilities Byte 1", "wlan.s1g.capabilities.byte1",
50008 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50009
50010 {&hf_ieee80211_s1g_cap_byte2,
50011 {"S1G Capabilities Byte 2", "wlan.s1g.capabilities.byte2",
50012 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50013
50014 {&hf_ieee80211_s1g_cap_byte3,
50015 {"S1G Capabilities Byte 3", "wlan.s1g.capabilities.byte3",
50016 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50017
50018 {&hf_ieee80211_s1g_cap_byte4,
50019 {"S1G Capabilities Byte 4", "wlan.s1g.capabilities.byte4",
50020 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50021
50022 {&hf_ieee80211_s1g_cap_byte5,
50023 {"S1G Capabilities Byte 5", "wlan.s1g.capabilities.byte5",
50024 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50025
50026 {&hf_ieee80211_s1g_cap_byte6,
50027 {"S1G Capabilities Byte 6", "wlan.s1g.capabilities.byte6",
50028 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50029
50030 {&hf_ieee80211_s1g_cap_byte7,
50031 {"S1G Capabilities Byte 7", "wlan.s1g.capabilities.byte7",
50032 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50033
50034 {&hf_ieee80211_s1g_cap_byte8,
50035 {"S1G Capabilities Byte 8", "wlan.s1g.capabilities.byte8",
50036 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50037
50038 {&hf_ieee80211_s1g_cap_byte9,
50039 {"S1G Capabilities Byte 9", "wlan.s1g.capabilities.byte9",
50040 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50041
50042 {&hf_ieee80211_beacon_sequence,
50043 {"Beacon Sequence", "wlan.s1g.beacon_sequence",
50044 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50045
50046 {&hf_ieee80211_pentapartial_timestamp,
50047 {"Pentapartial Timestamp", "wlan.s1g.pentapartial_timestamp",
50048 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50049
50050 {&hf_ieee80211_tack_next_twt_info,
50051 {"Next TWT Info/Suspend Duration", "wlan.s1g.next_twt_info",
50052 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50053
50054 {&hf_ieee80211_tack_next_twt,
50055 {"Next TWT", "wlan.s1g.next_twt",
50056 FT_UINT40, BASE_HEX, NULL((void*)0), 0x1FFFFFFFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50057
50058 {&hf_ieee80211_tack_flow_identifier,
50059 {"TWT Flow Identifier", "wlan.s1g.twt_flow_identifier",
50060 FT_UINT40, BASE_HEX, NULL((void*)0), 0xE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50061
50062 {&hf_ieee80211_s1g_cap_byte10,
50063 {"S1G Capabilities Byte 10", "wlan.s1g.capabilities.byte10",
50064 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50065
50066 {&hf_ieee80211_s1g_cap_s1g_long_support,
50067 {"S1G_LONG Support", "wlan.s1g.capabilities.s1g_long_support",
50068 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) }},
50069
50070 {&hf_ieee80211_s1g_cap_short_gi_for_1_mhz,
50071 {"Short GI for 1MHz", "wlan.s1g.capabilities.short_gi_for_1_mhz",
50072 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) }},
50073
50074 {&hf_ieee80211_s1g_cap_short_gi_for_2_mhz,
50075 {"Short GI for 2MHz", "wlan.s1g.capabilities.short_gi_for_2_mhz",
50076 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) }},
50077
50078 {&hf_ieee80211_s1g_cap_short_gi_for_4_mhz,
50079 {"Short GI for 4MHz", "wlan.s1g.capabilities.short_gi_for_4_mhz",
50080 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) }},
50081
50082 {&hf_ieee80211_s1g_cap_short_gi_for_8_mhz,
50083 {"Short GI for 8MHz", "wlan.s1g.capabilities.short_gi_for_8_mhz",
50084 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) }},
50085
50086 {&hf_ieee80211_s1g_cap_short_gi_for_16_mhz,
50087 {"Short GI for 16MHz", "wlan.s1g.capabilities.short_gi_for_16_mhz",
50088 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) }},
50089
50090 {&hf_ieee80211_s1g_cap_supported_channel_width,
50091 {"Supported Channel Width", "wlan.s1g.capabilities.supported_channel_width",
50092 FT_UINT8, BASE_HEX, VALS(s1g_supported_channel_width_vals)((0 ? (const struct _value_string*)0 : ((s1g_supported_channel_width_vals
))))
, 0xC0,
50093 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50094
50095 {&hf_ieee80211_s1g_cap_rx_ldpc,
50096 {"Rx LDPC", "wlan.s1g.capabilities.rx_ldpc",
50097 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) }},
50098
50099 {&hf_ieee80211_s1g_cap_tx_stbc,
50100 {"Tx STBC", "wlan.s1g.capabilities.tx_stbc",
50101 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) }},
50102
50103 {&hf_ieee80211_s1g_cap_rx_stbc,
50104 {"Rx STBC", "wlan.s1g.capabilities.rx_stbc",
50105 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) }},
50106
50107 {&hf_ieee80211_s1g_cap_su_beamformer_capable,
50108 {"SU Beamformer Capable", "wlan.s1g.capabilities.su_beamformer_capable",
50109 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) }},
50110
50111 {&hf_ieee80211_s1g_cap_su_beamformee_capable,
50112 {"SU Beamformee Capable", "wlan.s1g.capabilities.su_beamformee_capable",
50113 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) }},
50114
50115 {&hf_ieee80211_s1g_cap_beamformee_sts_capability,
50116 {"Beamformee STS Capability", "wlan.s1g.capabilities.sts_beamformee_capability",
50117 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50118
50119 {&hf_ieee80211_s1g_cap_number_sounding_dimensions,
50120 {"Number of Sounding Dimensions", "wlan.s1g.capabilities.number_sounding_dimensions",
50121 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50122
50123 {&hf_ieee80211_s1g_cap_mu_beamformer_capable,
50124 {"MU Beamformer Capable", "wlan.s1g.capabilities.beamformer_capable",
50125 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) }},
50126
50127 {&hf_ieee80211_s1g_cap_mu_beamformee_capable,
50128 {"MU Beamformee Capable", "wlan.s1g.capabilities.beamformee_capable",
50129 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) }},
50130
50131 {&hf_ieee80211_s1g_cap_htc_vht_capable,
50132 {"+HTC-VHT Capable", "wlan.s1g.capabilities.htc_vht_capable",
50133 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) }},
50134
50135 {&hf_ieee80211_s1g_cap_travelling_pilot_support,
50136 {"Traveling Pilot Support", "wlan.s1g.capabilities.traveling_pilot_support",
50137 FT_UINT8, BASE_HEX, VALS(s1g_traveling_pilot_support_vals)((0 ? (const struct _value_string*)0 : ((s1g_traveling_pilot_support_vals
))))
, 0xC0,
50138 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50139
50140 {&hf_ieee80211_s1g_cap_rd_responder,
50141 {"RD Responder", "wlan.s1g.capabilities.rd_responder",
50142 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) }},
50143
50144 {&hf_ieee80211_s1g_cap_ht_delayed_block_ack,
50145 {"HT Delayed Block Ack", "wlan.s1g.capabilities.ht_delayed_block_ack",
50146 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) }},
50147
50148 {&hf_ieee80211_s1g_cap_maximum_mpdu_length,
50149 {"Maximum MPDU Length", "wlan.s1g.capabilities.max_mpdu_length",
50150 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) }},
50151
50152 {&hf_ieee80211_s1g_cap_maximum_a_mpdu_length_exp,
50153 {"Maximum A-MPDU Length Exponent", "wlan.s1g.capabilities.max_a_mpdu_length_exp",
50154 FT_UINT8, BASE_DEC, NULL((void*)0), 0x18, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50155
50156 {&hf_ieee80211_s1g_cap_minimum_mpdu_start_spacing,
50157 {"Minimum MPDU Start Spacing", "wlan.s1g.capabilities.min_mpdu_start_spacing",
50158 FT_UINT8, BASE_DEC, VALS(s1g_min_mpdu_start_spacing_vals)((0 ? (const struct _value_string*)0 : ((s1g_min_mpdu_start_spacing_vals
))))
, 0xE0,
50159 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50160
50161 {&hf_ieee80211_s1g_cap_uplink_sync_capable,
50162 {"Uplink Sync Capable", "wlan.s1g.capabilities.uplink_sync_capable",
50163 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) }},
50164
50165 {&hf_ieee80211_s1g_cap_dynamic_aid,
50166 {"Dynamic AID", "wlan.s1g.capabilities.dynamic_aid",
50167 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) }},
50168
50169 {&hf_ieee80211_s1g_cap_bat_support,
50170 {"BAT Support", "wlan.s1g.capabilities.bat_support",
50171 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) }},
50172
50173 {&hf_ieee80211_s1g_cap_tim_ade_support,
50174 {"TIM AID Support", "wlan.s1g.capabilities.tim_aid_support",
50175 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) }},
50176
50177 {&hf_ieee80211_s1g_cap_non_tim_support,
50178 {"Non TIM Support", "wlan.s1g.capabilities.non_tim_support",
50179 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) }},
50180
50181 {&hf_ieee80211_s1g_cap_group_aid_support,
50182 {"Group AID Support", "wlan.s1g.capabilities.group_aid_support",
50183 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) }},
50184
50185 {&hf_ieee80211_s1g_cap_sta_type_support,
50186 {"STA Type Support", "wlan.s1g.capabilities.sta_type_support",
50187 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) }},
50188
50189 {&hf_ieee80211_s1g_cap_centralized_authentication_control,
50190 {"Centralized Authentication Control", "wlan.s1g.capabilities.centralized_authentication_control",
50191 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) }},
50192
50193 {&hf_ieee80211_s1g_cap_distributed_authentication_control,
50194 {"Distributed Authentication Control", "wlan.s1g.capabilities.distributed_authentication_control",
50195 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) }},
50196
50197 {&hf_ieee80211_s1g_cap_a_msdu_support,
50198 {"A-MSDU Supported", "wlan.s1g.capabilities.a_msdu_supported",
50199 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) }},
50200
50201 {&hf_ieee80211_s1g_cap_a_mpdu_support,
50202 {"A-MPDU Support", "wlan.s1g.capabilities.a_mpdu_support",
50203 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) }},
50204
50205 {&hf_ieee80211_s1g_cap_asymmetic_block_ack_support,
50206 {"Asymmetric Block Ack Supported", "wlan.s1g.capabilities.asymmetric_block_ack_supported",
50207 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) }},
50208
50209 {&hf_ieee80211_s1g_cap_flow_control_support,
50210 {"Flow Control Supported", "wlan.s1g.capabilities.flow_control_supported",
50211 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) }},
50212
50213 {&hf_ieee80211_s1g_cap_sectorized_beam_capable,
50214 {"Sectorized Beam Capable", "wlan.s1g.capabilities.sectorized_beam_capable",
50215 FT_UINT8, BASE_HEX, VALS(s1g_sectorized_beam_capable_vals)((0 ? (const struct _value_string*)0 : ((s1g_sectorized_beam_capable_vals
))))
, 0xC0,
50216 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50217
50218 {&hf_ieee80211_s1g_cap_obss_mitigation_support,
50219 {"OBSS Mitigation Support", "wlan.s1g.capabilities.obss_mitigation_support",
50220 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) }},
50221
50222 {&hf_ieee80211_s1g_cap_fragment_ba_support,
50223 {"Fragment BA Support", "wlan.s1g.capabilities.fragment_ba_support",
50224 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) }},
50225
50226 {&hf_ieee80211_s1g_cap_ndp_ps_poll_supported,
50227 {"NDS PS-Poll Supported", "wlan.s1g.capabilities.nds_ps_poll_supported",
50228 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) }},
50229
50230 {&hf_ieee80211_s1g_cap_raw_operation_support,
50231 {"Raw Operation Support", "wlan.s1g.capabilities.raw_operation_support",
50232 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) }},
50233
50234 {&hf_ieee80211_s1g_cap_page_slicing_support,
50235 {"Page Slicing Support", "wlan.s1g.capabilities.page_slicing_support",
50236 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) }},
50237
50238 {&hf_ieee80211_s1g_cap_txop_sharing_implicit_ack_support,
50239 {"TXOP Sharing Implicit Ack Support", "wlan.s1g.capabilities.txop_sharing_implicit_ack_support",
50240 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) }},
50241
50242 {&hf_ieee80211_s1g_cap_vht_link_adaptation_capable,
50243 {"VHT Link Adaptation Capable", "wlan.s1g.capabilities.vht_link_adaptation_capable",
50244 FT_UINT8, BASE_HEX, VALS(s1g_vht_link_adaptation_vals)((0 ? (const struct _value_string*)0 : ((s1g_vht_link_adaptation_vals
))))
, 0xC0,
50245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
50246
50247 {&hf_ieee80211_s1g_cap_tack_support_as_ps_poll_response,
50248 {"TACK Support as PS-Poll Response", "wlan.s1g.capabilities.tack_support_as_ps_poll_response",
50249 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) }},
50250
50251 {&hf_ieee80211_s1g_cap_duplicate_1_mhz_support,
50252 {"Duplicate 1 MHz Support", "wlan.s1g.capabilities.duplicate_1_mhz_support",
50253 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) }},
50254
50255 {&hf_ieee80211_s1g_cap_mcs_negotiation_support,
50256 {"MCS Negotiation Support", "wlan.s1g.capabilities.ms_negotiation_support",
50257 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) }},
50258
50259 {&hf_ieee80211_s1g_cap_1_mhz_control_response_preamble_support,
50260 {"1 MHz Control Response Preamble Supported",
50261 "wlan.s1g.capabilities.1_mhz_control_response_preamble_supported",
50262 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) }},
50263
50264 {&hf_ieee80211_s1g_cap_ndp_beamforming_report_poll_support,
50265 {"NDP Beamforming Report Poll Supported",
50266 "wlan.s1g.capabilities.ndp_beamforming_report_poll_supported",
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_unsolicited_dynamic_aid,
50270 {"Unsolicited Dynamic AID", "wlan.s1g.capabilities.unsolicited_dynamic_aid",
50271 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) }},
50272
50273 {&hf_ieee80211_s1g_cap_sector_training_operation_supported,
50274 {"Sector Training Operation Supported",
50275 "wlan.s1g.capabilities.sector_training_operation_supported",
50276 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) }},
50277
50278 {&hf_ieee80211_s1g_cap_temporary_ps_mode_switch,
50279 {"Temporary PS Mode Switch",
50280 "wlan.s1g.capabilities.temporary_ps_mode_switch",
50281 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) }},
50282
50283 {&hf_ieee80211_s1g_cap_twt_grouping_support,
50284 {"TWT Grouping Support", "wlan.s1g.capabilities.twt_grouping_support",
50285 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) }},
50286
50287 {&hf_ieee80211_s1g_cap_bdt_capable,
50288 {"BDT Capable", "wlan.s1g.capabilities.bdt_capable",
50289 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) }},
50290
50291 {&hf_ieee80211_s1g_cap_color,
50292 {"COLOR", "wlan.s1g.capabilities.color",
50293 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50294
50295 {&hf_ieee80211_s1g_cap_twt_requester_support,
50296 {"TWT Requester Support", "wlan.s1g.capabilities.twt_requester_support",
50297 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) }},
50298
50299 {&hf_ieee80211_s1g_cap_twt_responder_support,
50300 {"TWT Responder Support", "wlan.s1g.capabilities.twt_responder_support",
50301 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) }},
50302
50303 {&hf_ieee80211_s1g_cap_pv1_frame_support,
50304 {"PV1 Frame Support", "wlan.s1g.capabilities.pv1_frame_support",
50305 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) }},
50306
50307 {&hf_ieee80211_s1g_cap_link_adaptation_per_normal_control_response_capable,
50308 {"Link Adaptation per Normal Control Response Capable",
50309 "wlan.s1g.capabilities.link_adaptation_per_normal_control_response_capable",
50310 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) }},
50311
50312 {&hf_ieee80211_s1g_cap_reserved,
50313 {"Reserved", "wlan.s1g.capabilities.reserved",
50314 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50315
50316 {&hf_ieee80211_s1g_mcs_and_nss_set,
50317 {"Supported S1G-MCS and NSS Set", "wlan.s1g.supported_mcs_nss_set",
50318 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50319
50320 {&hf_ieee80211_s1g_rx_s1g_mcs_map,
50321 {"Rx S1G-MCS Map", "wlan.s1g.supported_mcs_nss_set.rx_s1g_mcs_map",
50322 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00000000FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50323
50324 {&hf_ieee80211_s1g_rx_highest_supported_long_gi_data_rate,
50325 {"Rx Highest Supported Long GI Data Rate",
50326 "wlan.s1g.supported_mcs_nss_set.rx_highest_supported_long_gi_data_rate",
50327 FT_UINT40, BASE_HEX, NULL((void*)0), 0x000001FF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50328
50329 {&hf_ieee80211_s1g_tx_s1g_mcs_map,
50330 {"Tx S1G-MCS Map", "wlan.s1g.supported_mcs_nss_set.tx_s1g_mcs_map",
50331 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001FE0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50332
50333 {&hf_ieee80211_s1g_tx_highest_supported_long_gi_data_rate,
50334 {"Tx Highest Supported Long GI Data Rate",
50335 "wlan.s1g.supported_mcs_nss_set.tx_highest_supported_long_gi_data_rate",
50336 FT_UINT40, BASE_HEX, NULL((void*)0), 0x03FE000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50337
50338 {&hf_ieee80211_s1g_rx_single_spatial_stream_map_for_1_mhz,
50339 {"Rx Single Spatial Stream and S1G-MCS Map for 1MHz",
50340 "wlan.s1g.supported_mcs_nss_set.rx_single_spatial_stream_1_mhz",
50341 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0C00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50342
50343 {&hf_ieee80211_s1g_tx_single_spatial_stream_map_for_1_mhz,
50344 {"Tx Single Spatial Stream and S1G-MCS Map for 1MHz",
50345 "wlan.s1g.supported_mcs_nss_set.tx_single_spatial_stream_1_mhz",
50346 FT_UINT40, BASE_HEX, NULL((void*)0), 0x3000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50347
50348 {&hf_ieee80211_s1g_mcs_and_nss_reserved,
50349 {"Reserved", "wlan.s1g.supported_mcs_nss_set.reserved",
50350 FT_UINT40, BASE_HEX, NULL((void*)0), 0xC000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50351
50352 {&hf_ieee80211_s1g_subchannel_selective_transmission,
50353 {"Channel Activity Schedule", "wlan.sst.channel_activity_schedule",
50354 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50355
50356 {&hf_ieee80211_s1g_sst_sounding_option,
50357 {"Sounding Option", "wlan.sst.channel_activity_schedule.sounding_option",
50358 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50359
50360 {&hf_ieee80211_s1g_channel_activity_bitmap,
50361 {"Channel Activity Bitmap", "wlan.sst.channel_activity_schedule.channel_activity_bitmap",
50362 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001FE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50363
50364 {&hf_ieee80211_s1g_ul_activity,
50365 {"UL Activity", "wlan.sst.channel_activity_schedule.ul_activity",
50366 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50367
50368 {&hf_ieee80211_s1g_dl_activity,
50369 {"DL Activity", "wlan.sst.channel_activity_schedule.dl_activity",
50370 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50371
50372 {&hf_ieee80211_s1g_max_trans_width,
50373 {"Maximum Transmission Width", "wlan.sst.channel_activity_schedule.max_trans_width",
50374 FT_UINT32, BASE_DEC, VALS(max_trans_width_vals)((0 ? (const struct _value_string*)0 : ((max_trans_width_vals
))))
,
50375 0x00001800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50376
50377 {&hf_ieee80211_s1g_activity_start_time,
50378 {"Activity Start Time", "wlan.sst.channel_activity_schedule.activity_start_time",
50379 FT_UINT32, BASE_DEC, NULL((void*)0), 0xFFFFE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50380
50381 {&hf_ieee80211_s1g_sst_sounding_option1,
50382 {"Sounding Option", "wlan.sst.channel_activity_schedule.sounding_option",
50383 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50384
50385 {&hf_ieee80211_s1g_channel_activity_bitmap1,
50386 {"Channel Activity Bitmap", "wlan.sst.channel_activity_schedule.channel_activity_bitmap",
50387 FT_UINT16, BASE_HEX, NULL((void*)0), 0x01FE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50388
50389 {&hf_ieee80211_s1g_sounding_start_time_present,
50390 {"Sounding Start Time Present", "wlan.sst.channel_activity_schedule.sounding_start_time_present",
50391 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50392
50393 {&hf_ieee80211_s1g_channel_activity_reserved,
50394 { "Reserved", "wlan.sst.channel_activity_schedule.reserved",
50395 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50396
50397 {&hf_ieee80211_s1g_max_trans_width1,
50398 {"Maximum Transmission Width", "wlan.sst.channel_activity_schedule.max_trans_width",
50399 FT_UINT16, BASE_DEC, VALS(max_trans_width_vals)((0 ? (const struct _value_string*)0 : ((max_trans_width_vals
))))
,
50400 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50401
50402 {&hf_ieee80211_s1g_sounding_start_time,
50403 {"Sounding Start Time",
50404 "wlan.sst.channel_activity_schedule.sounding_start_time",
50405 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50406
50407 {&hf_ieee80211_s1g_open_loop_link_margin,
50408 {"Open-Loop Link Margin Index", "wlan.s1g.open_loop_link_margin_index",
50409 FT_UINT8, BASE_CUSTOM, CF_FUNC(s1g_open_loop_link_margin_custom)((const void *) (size_t) (s1g_open_loop_link_margin_custom)),
50410 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50411
50412 {&hf_ieee80211_s1g_raw_control,
50413 {"RAW Control", "wlan.s1g.rps.raw_control",
50414 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50415
50416 {&hf_ieee80211_s1g_raw_type,
50417 {"RAW Type", "wlan.s1g.rps.raw_control.raw_type",
50418 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) }},
50419
50420 {&hf_ieee80211_s1g_raw_type_options,
50421 {"RAW Type Options", "wlan.s1g.rps.raw_control.raw_type_options",
50422 FT_UINT8, BASE_CUSTOM, CF_FUNC(s1g_raw_type_options_custom)((const void *) (size_t) (s1g_raw_type_options_custom)),
50423 0x0C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50424
50425 {&hf_ieee80211_s1g_raw_start_time_indication,
50426 {"Start Time Indication", "wlan.s1g.rps.raw_control.start_time_indication",
50427 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) }},
50428
50429 {&hf_ieee80211_s1g_raw_raw_group_indication,
50430 {"RAW Group Indication", "wlan.s1g.rps.raw_control.raw_group_indication",
50431 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) }},
50432
50433 {&hf_ieee80211_s1g_raw_channel_indication_preference,
50434 {"Channel Indication Preference",
50435 "wlan.s1g.rps.raw_control.channel_indication_preference",
50436 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) }},
50437
50438 {&hf_ieee80211_s1g_raw_periodic_raw_indication,
50439 {"Periodic RAW Indication",
50440 "wlan.s1g.rps.raw_control.periodic_raw_indication",
50441 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) }},
50442
50443 {&hf_ieee80211_s1g_raw_slot_def,
50444 {"RAW Slot Definition", "wlan.s1g.rps.raw_slot_definition",
50445 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50446
50447 {&hf_ieee80211_s1g_slot_def_format_indication,
50448 {"Slot Definition Format Indication",
50449 "wlan.s1g.rps.raw_slot_definition.slot_definition_format_indication",
50450 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50451
50452 {&hf_ieee80211_s1g_slot_def_cross_slot_boundary,
50453 {"Cross Slot Boundary",
50454 "wlan.s1g.rps.raw_slot_definition.cross_slot_boundary",
50455 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) }},
50456
50457 {&hf_ieee80211_s1g_slot_def_slot_duration_count8,
50458 {"Slot Duration Count",
50459 "wlan.s1g.rps.raw_slot_definition.slot_duration_count",
50460 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) }},
50461
50462 {&hf_ieee80211_s1g_slot_def_num_slots6,
50463 {"Number of Slots",
50464 "wlan.s1g.rps.raw_slot_definition.number_of_slots",
50465 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFC00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50466
50467 {&hf_ieee80211_s1g_slot_def_slot_duration_count11,
50468 {"Slot Duration Count",
50469 "wlan.s1g.rps.raw_slot_definition.slot_duration_count",
50470 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) }},
50471
50472 {&hf_ieee80211_s1g_slot_def_num_slots3,
50473 {"Number of Slots",
50474 "wlan.s1g.rps.raw_slot_definition.number_of_slots",
50475 FT_UINT16, BASE_DEC, NULL((void*)0), 0xE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50476
50477 {&hf_ieee80211_s1g_raw_start_time,
50478 {"RAW Start Time", "wlan.s1g.raw_slot_definition.raw_start_time",
50479 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50480
50481 {&hf_ieee80211_s1g_raw_group_subfield,
50482 {"RAW Group", "wlan.s1g.rps.raw_group",
50483 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50484
50485 {&hf_ieee80211_s1g_raw_group_page_index,
50486 {"Page Index", "wlan.s1g.rps.raw_group.page_index",
50487 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50488
50489 {&hf_ieee80211_s1g_raw_group_start_aid,
50490 {"RAW Start AID", "wlan.s1g.rps.raw_group.raw_start_aid",
50491 FT_UINT24, BASE_DEC, NULL((void*)0), 0x001FFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50492
50493 {&hf_ieee80211_s1g_raw_group_end_aid,
50494 {"RAW End AID", "wlan.s1g.rps.raw_group.raw_end_aid",
50495 FT_UINT24, BASE_DEC, NULL((void*)0), 0xFFE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50496
50497 {&hf_ieee80211_s1g_raw_channel_indication,
50498 {"Channel Indication", "wlan.s1g.rps.channel_indication",
50499 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50500
50501 {&hf_ieee80211_s1g_raw_ci_channel_activity_bitmap,
50502 {"Channel Activity Bitmap",
50503 "wlan.s1g.rps.channel_indication.channel_activity_bitmap",
50504 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50505
50506 {&hf_ieee80211_s1g_raw_ci_max_trans_width,
50507 {"Maximum Transmission Width",
50508 "wlan.s1g.rps.channel_indication.maximum_transmission_width",
50509 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) }},
50510
50511 {&hf_ieee80211_s1g_raw_ci_ul_activity,
50512 {"UL Activity", "wlan.s1g.rps.channel_indication.ul_activity",
50513 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50514
50515 {&hf_ieee80211_s1g_raw_ci_dl_activity,
50516 {"DL Activity", "wlan.s1g.rps.channel_indication.dl_activity",
50517 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50518
50519 {&hf_ieee80211_s1g_raw_ci_reserved,
50520 {"Reserved", "wlan.s1g.rps.channel_indication.reserved",
50521 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50522
50523 {&hf_ieee80211_s1g_raw_praw_periodicity,
50524 {"PRAW Periodicity",
50525 "wlan.s1g.rps.periodic_operation_parameters.praw_periodicity",
50526 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50527
50528 {&hf_ieee80211_s1g_raw_praw_validity,
50529 {"PRAW Validity",
50530 "wlan.s1g.rps.periodic_operation_parameters.praw_validity",
50531 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50532
50533 {&hf_ieee80211_s1g_raw_praw_start_offset,
50534 {"PRAW Start Offset",
50535 "wlan.s1g.rps.periodic_operation_parameters.praw_start_offset",
50536 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50537
50538
50539 {&hf_ieee80211_s1g_page_slice_page_period,
50540 {"Page Period", "wlan.page_slice.page_period",
50541 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50542
50543 {&hf_ieee80211_s1g_page_slice_control,
50544 {"Page Slice Control", "wlan.page_slice.page_slice_control",
50545 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50546
50547 {&hf_ieee80211_s1g_page_slice_page_index,
50548 {"Page Index", "wlan.page_slice.page_slice_control.page_index",
50549 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50550
50551 {&hf_ieee80211_s1g_page_slice_page_slice_length,
50552 {"Page Slice Length", "wlan.page_slice.page_slice_control.page_slice_len",
50553 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00007C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50554
50555 {&hf_ieee80211_s1g_page_slice_page_slice_count,
50556 {"Page Slice Count", "wlan.page_slice.page_slice_control.page_slice_count",
50557 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50558
50559 {&hf_ieee80211_s1g_page_slice_block_offset,
50560 {"Block Offset", "wlan.page_slice.page_slice_control.block_offset",
50561 FT_UINT24, BASE_DEC, NULL((void*)0), 0x01F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50562
50563 {&hf_ieee80211_s1g_page_slice_tim_offset,
50564 {"TIM Offset", "wlan.page_slice.page_slice_control.tim_offset",
50565 FT_UINT24, BASE_DEC, NULL((void*)0), 0x1E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50566
50567 {&hf_ieee80211_s1g_page_slice_reserved,
50568 {"Reserved", "wlan.page_slice.page_slice_control.reserved",
50569 FT_UINT24, BASE_HEX, NULL((void*)0), 0xE00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50570
50571 {&hf_ieee80211_s1g_page_slice_page_bitmap,
50572 {"Page Bitmap", "wlan.page_slice.page_bitmap",
50573 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50574
50575 {&hf_ieee80211_s1g_aid_request_mode,
50576 {"AID Request Mode", "wlan.s1g.aid_request.aid_request_mode",
50577 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50578
50579 {&hf_ieee80211_s1g_aid_request_interval_present,
50580 {"AID Request Interval Present",
50581 "wlan.s1g.aid_request.aid_request_mode.aid_request_interval_present",
50582 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) }},
50583
50584 {&hf_ieee80211_s1g_aid_request_per_sta_address_present,
50585 {"Per STA Address Present",
50586 "wlan.s1g.aid_request.aid_request_mode.per_sta_address_present",
50587 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) }},
50588
50589 {&hf_ieee80211_s1g_aid_request_service_characteristic_present,
50590 {"Service Characteristic Present",
50591 "wlan.s1g.aid_request.aid_request_mode.service_characteristic_present",
50592 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) }},
50593
50594 {&hf_ieee80211_s1g_aid_request_non_tim_mode_switch,
50595 {"Non-TIM Mode Switch",
50596 "wlan.s1g.aid_request.aid_request_mode.non_tim_mode_switch",
50597 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) }},
50598
50599 {&hf_ieee80211_s1g_aid_request_tim_mode_switch,
50600 {"TIM Mode Switch",
50601 "wlan.s1g.aid_request.aid_request_mode.tim_mode_switch",
50602 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) }},
50603
50604 {&hf_ieee80211_s1g_aid_request_group_address_present,
50605 {"Group Address Present",
50606 "wlan.s1g.aid_request.aid_request_mode.group_address_present",
50607 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) }},
50608
50609 {&hf_ieee80211_s1g_aid_request_reserved,
50610 {"Reserved", "wlan.s1g.aid_request.aid_request_mode.reserved",
50611 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50612
50613 {&hf_ieee80211_s1g_aid_request_interval,
50614 {"AID Request Interval", "wlan.s1g.aid_request.aid_request_interval",
50615 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50616
50617 {&hf_ieee80211_s1g_aid_request_characteristic_sensor,
50618 {"Sensor", "wlan.s1g.aid_request.service_characteristic.sensor",
50619 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50620
50621 {&hf_ieee80211_s1g_aid_request_characteristic_offload,
50622 {"Offload", "wlan.s1g.aid_request.service_characteristic.offload",
50623 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50624
50625 {&hf_ieee80211_s1g_aid_request_characteristic_official_service,
50626 {"Critical Service",
50627 "wlan.s1g.aid_request.service_characteristic.critical_service",
50628 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50629
50630 {&hf_ieee80211_s1g_aid_request_characteristic_reserved,
50631 {"Reserved", "wlan.s1g.aid_request.service_characteristic.reserved",
50632 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50633
50634 {&hf_ieee80211_s1g_aid_req_peer_sta_addr,
50635 {"Peer STA Address", "wlan.s1g.aid_request.peer_sta_address",
50636 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50637
50638 {&hf_ieee80211_s1g_aid_request_characteristic,
50639 {"Service Characteristic", "wlan.s1g.aid_request.service_characteristic",
50640 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50641
50642 {&hf_ieee80211_s1g_aid_req_group_addr,
50643 {"Group Mac Address", "wlan.s1g.aid_request.group_mac_address",
50644 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50645
50646 {&hf_ieee80211_s1g_aid_rsp_aid_group_aid,
50647 {"AID/Group AID", "wlan.s1g.aid_response.aid_group_aid",
50648 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50649
50650 {&hf_ieee80211_s1g_aid_rsp_aid_switch_count,
50651 {"AID Switch Count", "wlan.s1g.aid_response.aid_switch_count",
50652 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50653
50654 {&hf_ieee80211_s1g_aid_rsp_aid_response_interval,
50655 {"AID Response Interval", "wlan.s1g.aid_response.aid_response_interval",
50656 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50657
50658 {&hf_ieee80211_s1g_sector_op_control_16b,
50659 {"Sector Operation Control", "wlan.s1g.sector_operation.control",
50660 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50661
50662 {&hf_ieee80211_s1g_sector_op_sectorization_type_b16,
50663 {"Sectorization Type",
50664 "wlan.s1g.sector_operation.control.sectorization_type",
50665 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) }},
50666
50667 {&hf_ieee80211_s1g_sector_op_periodic_training_indicator,
50668 {"Periodic Training Indicator",
50669 "wlan.s1g.sector_operation.control.periodic_training_indicator",
50670 FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50671
50672 {&hf_ieee80211_s1g_sector_op_training_period,
50673 {"Training Period",
50674 "wlan.s1g.sector_operation.control.training_interval",
50675 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00FC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50676
50677 {&hf_ieee80211_s1g_sector_op_remaining_beacon_interval,
50678 {"Remaining Beacon Interval",
50679 "wlan.s1g.sector_operation.control.remaining_beacon_interval",
50680 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50681
50682 {&hf_ieee80211_s1g_sector_op_reserved_b16,
50683 {"Reserved", "wlan.s1g.sector_operation.reserved",
50684 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50685
50686 {&hf_ieee80211_s1g_sector_op_control,
50687 {"Sector Operation Control", "wlan.s1g.sector_operation.control",
50688 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50689
50690 {&hf_ieee80211_s1g_sector_op_sectorization_type,
50691 {"Sectorization Type",
50692 "wlan.s1g.sector_operation.control.sectorization_type",
50693 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) }},
50694
50695 {&hf_ieee80211_s1g_sector_op_period,
50696 {"Period", "wlan.s1g.sector_operation.control.period",
50697 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50698
50699 {&hf_ieee80211_s1g_sector_op_omni,
50700 {"Omni", "wlan.s1g.sector_operation.control.omni",
50701 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) }},
50702
50703 {&hf_ieee80211_s1g_sector_op_group_info,
50704 {"Group Info", "wlan.s1g.sector_operation.group_info",
50705 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50706
50707 {&hf_ieee80211_s1g_short_beacon_interval,
50708 {"Short Beacon Interval", "wlan.sig.short_beacon_interval",
50709 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50710
50711 {&hf_ieee80211_s1g_change_sequence,
50712 {"Change Sequence", "wlan.s1g.change_sequence",
50713 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50714
50715 /* Need to add a TFS for this and perhaps two versions */
50716 {&hf_ieee80211_s1g_auth_control_control,
50717 {"Control", "wlan.s1g.auth_control.control",
50718 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50719
50720 {&hf_ieee80211_s1g_auth_control_deferral,
50721 {"Deferral", "wlan.s1g.auth_control.deferral",
50722 FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50723
50724 {&hf_ieee80211_s1g_auth_control_reserved,
50725 {"Reserved", "wlan.s1g.auth_control.reserved",
50726 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50727
50728 {&hf_ieee80211_s1g_auth_control_thresh,
50729 {"Authentication Control Threshold", "wlan.s1g.auth_control.threshold",
50730 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50731
50732 {&hf_ieee80211_s1g_auth_control_thresh_tus,
50733 {"Authentication Control Threshold", "wlan.s1g.auth_control.threshold",
50734 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
,
50735 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50736
50737 {&hf_ieee80211_s1g_auth_slot_duration,
50738 {"Authentication Slot Duration", "wlan.s1g.auth_control.slot_duration",
50739 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_di_dis)((0 ? (const struct unit_name_string*)0 : ((&units_di_dis
))))
, 0x0000FE,
50740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50741
50742 {&hf_ieee80211_s1g_auth_max_trans_int,
50743 {"Maximum Transmission Interval",
50744 "wlan.s1g.distributed_auth_control.max_xmit_int",
50745 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
, 0x00FF00,
50746 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50747
50748 {&hf_ieee80211_s1g_auth_min_trans_int,
50749 {"Minimum Transmission Interval",
50750 "wlan.s1g.distributed_auth_control.min_xmit_int",
50751 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
, 0xFF0000,
50752 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50753
50754 {&hf_ieee80211_s1g_tsf_timer_accuracy,
50755 {"TSF Timer Accuracy", "wlan.s1g.tsf_timer_accuracy",
50756 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) }},
50757
50758 {&hf_ieee80211_s1g_relay_control,
50759 {"Relay Control", "wlan.s1g.relay_control",
50760 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50761
50762 {&hf_ieee80211_s1g_relay_control_rootap_bssid,
50763 {"RootAP BSSID", "wlan.s1g.relay_control.rootap_bssid",
50764 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50765
50766 {&hf_ieee80211_s1g_relay_function_activation_mode,
50767 {"Relay Activation Mode",
50768 "wlan.s1g.relay_activation.relay_activation_mode",
50769 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) }},
50770
50771 {&hf_ieee80211_s1g_relay_function_direction,
50772 {"Direction", "wlan.s1g.relay_activation.direction",
50773 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) }},
50774
50775 {&hf_ieee80211_s1g_relay_function_enable_relay_function,
50776 {"Enable Relay Function",
50777 "wlan.s1g.relay_activation.enable_relay_function",
50778 FT_UINT8, BASE_CUSTOM, CF_FUNC(enable_relay_function_custom)((const void *) (size_t) (enable_relay_function_custom)), 0x04,
50779 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50780
50781 {&hf_ieee80211_s1g_relay_function_stas_present_indic,
50782 {"Number of STAs Presence Indicator",
50783 "wlan.s1g.relay_activation.number_of_stas_presence_indicator",
50784 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50785
50786 {&hf_ieee80211_s1g_relay_function_reserved,
50787 {"Reserved", "wlan.s1g.relay_activation.reserved",
50788 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50789
50790 {&hf_ieee80211_s1g_number_of_stas,
50791 {"Number of STAs", "wlan.s1g.relay_activation.number_of_stas",
50792 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50793
50794 {&hf_ieee80211_s1g_initiator_mac_address,
50795 {"Initiator MAC Address",
50796 "wlan.s1g.reachable_address.initiator_mac_address",
50797 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50798
50799 {&hf_ieee80211_s1g_address_count,
50800 {"Address Count", "wlan.s1g.reachable_address.address_count",
50801 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50802
50803 {&hf_ieee80211_s1g_reachable_add_remove,
50804 {"Add/Remove", "wlan.s1g.reachable_address.add_remove",
50805 FT_BOOLEAN, 8, TFS(&reachable_address_add_remove_tfs)((0 ? (const struct true_false_string*)0 : ((&reachable_address_add_remove_tfs
))))
,
50806 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50807
50808 {&hf_ieee80211_s1g_reachable_relay_capable,
50809 {"Relay Capable", "wlan.s1g.reachable_address.relay_capable",
50810 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50811
50812 {&hf_ieee80211_s1g_reachable_reserved,
50813 {"Reserved", "wlan.s1g.reachable_address.reserved",
50814 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50815
50816 {&hf_ieee80211_s1g_reachable_mac_address,
50817 {"MAC Address", "wlan.s1g.reachable_address.mac_address",
50818 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50819
50820 {&hf_ieee80211_s1g_relay_discovery_control,
50821 {"Relay Discovery Control", "wlan.s1g.relay_discovery_control",
50822 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50823
50824 {&hf_ieee80211_s1g_min_data_rate_included,
50825 {"Min Data Rate Included",
50826 "wlan.s1g.relay_discovery_control.min_data_rate_included",
50827 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) }},
50828
50829 {&hf_ieee80211_s1g_mean_data_rate_included,
50830 {"Mean Data Rate Included",
50831 "wlan.s1g.relay_discovery_control.mean_data_rate_included",
50832 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) }},
50833
50834 {&hf_ieee80211_s1g_max_data_rate_included,
50835 {"Max Data Rate Included",
50836 "wlan.s1g.relay_discovery_control.max_data_rate_included",
50837 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) }},
50838
50839 {&hf_ieee80211_s1g_delay_and_min_phy_rate,
50840 {"Delay and Min Phy Rate Included",
50841 "wlan.s1g.relay_discovery_control.delay_and_min_phy_rate_included",
50842 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) }},
50843
50844 {&hf_ieee80211_s1g_information_not_available,
50845 {"Information Not Available",
50846 "wlan.s1g.relay_discovery_control.information_not_available",
50847 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50848
50849 {&hf_ieee80211_s1g_relay_control_ul_min,
50850 {"UL Min Data Rate (100kbps)", "wlan.s1g.relay_discovery.ul_min_data_rate",
50851 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50852
50853 {&hf_ieee80211_s1g_relay_control_ul_mean,
50854 {"UL Mean Data Rate (100kbps)",
50855 "wlan.s1g.relay_discovery.ul_mean_data_rate",
50856 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50857
50858 {&hf_ieee80211_s1g_relay_control_ul_max,
50859 {"UL Max Data Rate (100kbps)", "wlan.s1g.relay_discovery.ul_max_data_rate",
50860 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50861
50862 {&hf_ieee80211_s1g_relay_control_dl_min,
50863 {"DL Min Data Rate (100kbps)", "wlan.s1g.relay_discovery.dl_min_data_rate",
50864 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50865
50866 {&hf_ieee80211_s1g_relay_control_dl_mean,
50867 {"DL Mean Data Rate (100kbps)",
50868 "wlan.s1g.relay_discovery.dl_mean_data_rate",
50869 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50870
50871 {&hf_ieee80211_s1g_relay_control_dl_max,
50872 {"DL Max Data Rate (100kbps)", "wlan.s1g.relay_discovery.dl_max_data_rate",
50873 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50874
50875 {&hf_ieee80211_s1g_relay_discovery_reserved,
50876 {"Reserved", "wlan.s1g.relay_discovery_control.reserved",
50877 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50878
50879 {&hf_ieee80211_s1g_relay_hierarchy_identifier,
50880 {"Relay Hierarchy Identifier",
50881 "wlan.s1g.relay_control.relay_hierarchy_identifier",
50882 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(relay_hierarchy_rstrs)((0 ? (const struct _range_string*)0 : ((relay_hierarchy_rstrs
))))
,
50883 0x7F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50884
50885 {&hf_ieee80211_s1g_relay_no_more_relay_flag,
50886 {"No More Relay Flag", "wlan.s1g.relay_control.no_more_relay_flag",
50887 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) }},
50888
50889 {&hf_ieee80211_s1g_aid_entry_mac_addr,
50890 {"STA MAC Address", "wlan.s1g.aid_entry.sta_mac_address",
50891 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50892
50893 {&hf_ieee80211_s1g_aid_entry_assoc_id,
50894 {"Association ID", "wlan.s1g.aid_entry.association_id",
50895 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50896
50897 {&hf_ieee80211_s1g_beacon_compatibility_info,
50898 {"Compatibility Information", "wlan.s1g.beacon_compatibility_info",
50899 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50900
50901 {&hf_ieee80211_s1g_beacon_interval,
50902 {"Beacon Interval", "wlan.s1g.beacon_interval",
50903 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50904
50905 {&hf_ieee80211_s1g_tsf_completion,
50906 {"TSF Completion", "wlan.s1g.tsf_completion",
50907 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50908
50909 {&hf_ieee80211_s1g_channel_width,
50910 {"Channel Width", "wlan.s1g.channel_width",
50911 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50912
50913 {&hf_ieee80211_s1g_primary_channel_width,
50914 {"Primary Channel Width", "wlan.s1g.channel_width.primary_channel_width",
50915 FT_UINT8, BASE_DEC, VALS(primary_channel_width_vals)((0 ? (const struct _value_string*)0 : ((primary_channel_width_vals
))))
,
50916 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50917
50918 {&hf_ieee80211_s1g_bss_operating_channel_width,
50919 {"BSS Operating Channel Width",
50920 "wlan.s1g.channel_width.bss_operating_channel_width",
50921 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1e, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50922
50923 {&hf_ieee80211_s1g_primary_channel_location,
50924 {"1MHz Primary Channel Location",
50925 "wlan.s1g.channel_width.1mhz_primary_channel_location",
50926 FT_UINT8, BASE_DEC,
50927 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) }},
50928
50929 {&hf_ieee80211_s1g_reserved_b6,
50930 {"Reserved", "wlan.s1g.channel_width.reserved_b6",
50931 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50932
50933 {&hf_ieee80211_s1g_mcs10_use,
50934 {"MCS10 Use", "wlan.s1g.channel_width.mcs10_use",
50935 FT_UINT8, BASE_DEC, VALS(mcs10_use_vals)((0 ? (const struct _value_string*)0 : ((mcs10_use_vals)))), 0x80,
50936 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50937
50938 {&hf_ieee80211_s1g_operating_class,
50939 {"Operating Class", "wlan.s1g.operating_class",
50940 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50941
50942 {&hf_ieee80211_s1g_primary_channel_number,
50943 {"Primary Channel Number", "wlan.s1g.primary_channel_number",
50944 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50945
50946 {&hf_ieee80211_s1g_channel_center_frequency,
50947 {"Channel Center Frequency", "wlan.s1g.channel_center_frequency",
50948 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50949
50950 {&hf_ieee80211_s1g_basic_mcs_and_nss_set,
50951 {"Basic S1G-MCS and NSS Set", "wlan.s1g.basic_s1g_mcs_and_nss",
50952 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50953
50954 {&hf_ieee80211_s1g_sst_enabled_channel_bitmap,
50955 {"SST Enabled Channel Bitmap", "wlan.s1g.sst_enabled_channel_bitmap",
50956 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50957
50958 {&hf_ieee80211_s1g_sst_primary_channel_offset,
50959 {"Primary Channel Offset", "wlan.s1g.primary_channel_offset",
50960 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50961
50962 {&hf_ieee80211_s1g_sst_channel_unit,
50963 {"SST Channel Unit", "wlan.s1g.sst_channel_unit",
50964 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) }},
50965
50966 {&hf_ieee80211_s1g_sst_reserved,
50967 {"Reserved", "wlan.s1g.sst_reserved",
50968 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50969
50970 {&hf_ieee80211_s1g_max_away_duration,
50971 {"Max Away Duration", "wlan.s1g.max_away_duration",
50972 FT_UINT16, BASE_DEC | BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
,
50973 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50974
50975 {&hf_ieee80211_s1g_tim_bmapctrl,
50976 {"Bitmap Control", "wlan.s1g.tim.bitmap_control",
50977 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50978
50979 {&hf_ieee80211_s1g_tim_bmapctl_traffic_indicator,
50980 {"Traffic Indication", "wlan.s1g.tim.traffic_indication",
50981 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50982
50983 {&hf_ieee80211_s1g_tim_page_slice_number,
50984 {"Page Slice Number", "wlan.s1g.tim.page_slice_number",
50985 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50986
50987 {&hf_ieee80211_s1g_tim_page_index,
50988 {"Page Index", "wlan.s1g.tim.page_index",
50989 FT_UINT8, BASE_DEC, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50990
50991 {&hf_ieee80211_s1g_pvb_block_control_byte,
50992 {"Block Control Byte", "wlan.s1g.tim.pvb.block_control",
50993 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50994
50995 {&hf_ieee80211_s1g_pvb_encoding_mode,
50996 {"Encoding Mode", "wlan.s1g.tim.pvb.block_control.encoding_mode",
50997 FT_UINT8, BASE_HEX, VALS(s1g_block_control_encoding_mode_vals)((0 ? (const struct _value_string*)0 : ((s1g_block_control_encoding_mode_vals
))))
,
50998 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50999
51000 {&hf_ieee80211_s1g_pvb_inverse_bitmap,
51001 {"Inverse Bitmap", "wlan.s1g.tim.pvb.block_control.inverse_bitmap",
51002 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51003
51004 {&hf_ieee80211_s1g_pvb_block_offset,
51005 {"Block Offset", "wlan.s1g.tim.pvb.block_offset",
51006 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51007
51008 {&hf_ieee80211_s1g_block_bitmap,
51009 {"Block Bitmap", "wlan.s1g.tim.pvb.block_bitmap.bitmap",
51010 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51011
51012 {&hf_ieee80211_s1g_block_bitmap_sta_aid13,
51013 {"STA AID13", "wlan.s1g.tim.pvb.block_bitmap.subblock.aid13",
51014 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51015
51016 {&hf_ieee80211_s1g_block_bitmap_ade,
51017 {"ADE Control", "wlan.s1g.tim.pvb.block_bitmap.ade.control",
51018 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51019
51020 {&hf_ieee80211_s1g_block_bitmap_ewl,
51021 {"EWL", "wlan.s1g.tim.pvb.block_bitmap.ade.ewl",
51022 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51023
51024 {&hf_ieee80211_s1g_block_bitmap_len,
51025 {"Length", "wlan.s1g.tim.pvb.block_bitmap.ade.length",
51026 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51027
51028 {&hf_ieee80211_s1g_block_bitmap_ade_bytes,
51029 {"Bitmap", "wlan.s1g.tim.pvb.block_bitmap.ade.bitmap",
51030 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51031
51032 {&hf_ieee80211_s1g_block_bitmap_single_aid,
51033 {"Single AID13", "wlan.s1g.tim.pvb.single_aid",
51034 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51035
51036 {&hf_ieee80211_s1g_block_bitmap_olb_length,
51037 {"Length", "wlan.s1g.tim.pvb.olb.length",
51038 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51039
51040 {&hf_ieee80211_s1g_probe_response_group_bitmap,
51041 {"Probe Response Group Bitmap", "wlan.s1g.probe_response_group_bitmap",
51042 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51043
51044 {&hf_ieee80211_s1g_probe_resp_subfield_0,
51045 {"Probe Response Option Default Bitmap",
51046 "wlan.s1g.probe_response_option_default_bitmap",
51047 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51048
51049 {&hf_ieee80211_pv1_probe_response_req_full_ssid,
51050 {"Request Full SSID", "wlan.s1g.probe_response_option_request_full_ssid",
51051 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) }},
51052
51053 {&hf_ieee80211_pv1_probe_response_req_next_tbtt,
51054 {"Request Next TBTT", "wlan.s1g.probe_response_option_request_next_tbtt",
51055 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) }},
51056
51057 {&hf_ieee80211_pv1_probe_response_req_access_network_option,
51058 {"Request Access Network Options",
51059 "wlan.s1g.probe_response_option_request_access_network_options",
51060 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) }},
51061
51062 {&hf_ieee80211_pv1_probe_response_req_s1g_beacon_compatibility,
51063 {"Request S1G Beacon Compatibility",
51064 "wlan.s1g.probe_response_option_request_s1g_beacon_compatibility",
51065 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) }},
51066
51067 {&hf_ieee80211_pv1_probe_response_req_supported_rates,
51068 {"Request Supported Rates",
51069 "wlan.s1g.probe_response_option_request_supported_rates",
51070 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) }},
51071
51072 {&hf_ieee80211_pv1_probe_response_req_s1g_capability,
51073 {"Request S1G Capability",
51074 "wlan.s1g.probe_response_option_request_s1g_capability",
51075 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) }},
51076
51077 {&hf_ieee80211_pv1_probe_response_req_s1g_operation,
51078 {"Request S1G Operation",
51079 "wlan.s1g.probe_response_option_request_s1g_operation",
51080 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) }},
51081
51082 {&hf_ieee80211_pv1_probe_response_req_rsn,
51083 {"Request RSN", "wlan.s1g.probe_response_option_request_rsn",
51084 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) }},
51085
51086 {&hf_ieee80211_s1g_el_op_max_awake_duration,
51087 {"Max Awake Duration", "wlan.s1g.el_operation.max_awake_duration",
51088 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_max_awake_duration_custom)((const void *) (size_t) (s1g_max_awake_duration_custom)),
51089 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51090
51091 {&hf_ieee80211_s1g_el_op_recovery_time_duration,
51092 {"Recovery Time Duration", "wlan.s1g.el_operation.recovery_time_duration",
51093 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_recovery_time_duration_custom)((const void *) (size_t) (s1g_recovery_time_duration_custom)),
51094 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51095
51096 {&hf_ieee80211_s1g_sectorized_group_id_list,
51097 {"Sectorized Group List", "wlan.s1g.sectorized_group_list",
51098 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51099
51100 {&hf_ieee80211_s1g_header_comp_control,
51101 {"Header Compression Control",
51102 "wlan.s1g.header_compression.header_compression_control",
51103 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51104
51105 {&hf_ieee80211_s1g_header_comp_req_resp,
51106 {"Request/Response",
51107 "wlan.s1g.header_compression.header_compression_control.request_response",
51108 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) }},
51109
51110 {&hf_ieee80211_s1g_header_comp_store_a3,
51111 {"Store A3",
51112 "wlan.s1g.header_compression.header_compression_control.store_a3",
51113 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51114
51115 {&hf_ieee80211_s1g_header_comp_store_a4,
51116 {"Store A4",
51117 "wlan.s1g.header_compression.header_compression_control.store_a4",
51118 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51119
51120 {&hf_ieee80211_s1g_header_comp_ccmp_update_present,
51121 {"CCMP Update Present",
51122 "wlan.s1g.header_compression.header_compression_control.ccmp_update_present",
51123 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51124
51125 {&hf_ieee80211_s1g_header_comp_pv1_data_type_3_supported,
51126 {"PV1 Data Type 3 Supported",
51127 "wlan.s1g.header_compression.header_compression_control.pv1_data_type_3_supported",
51128 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51129
51130 {&hf_ieee80211_s1g_header_comp_reserved,
51131 {"Reserved",
51132 "wlan.s1g.header_compression.header_compression_control.reserved",
51133 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51134
51135 {&hf_ieee80211_s1g_header_comp_a3,
51136 {"A3", "wlan.s1g.header_compression.a3",
51137 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51138
51139 {&hf_ieee80211_s1g_header_comp_a4,
51140 {"A4", "wlan.s1g.header_compression.a4",
51141 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51142
51143 {&hf_ieee80211_s1g_header_comp_ccmp_update,
51144 {"CCMP Update", "wlan.s1g.header_compression.ccmp_update",
51145 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51146
51147 {&hf_ieee80211_ampduparam,
51148 {"A-MPDU Parameters", "wlan.ht.ampduparam",
51149 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51151
51152 {&hf_ieee80211_ampduparam_vs,
51153 {"A-MPDU Parameters (VS)", "wlan.vs.ht.ampduparam",
51154 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51155 "Vendor Specific A-MPDU Parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51156
51157 {&hf_ieee80211_ampduparam_mpdu,
51158 {"Maximum Rx A-MPDU Length Exponent", "wlan.ht.ampduparam.maxlength",
51159 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03,
51160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51161
51162 {&hf_ieee80211_ampduparam_mpdu_start_spacing,
51163 {"Minimum MPDU Start Spacing", "wlan.ht.ampduparam.mpdu_start_spacing",
51164 FT_UINT8, BASE_HEX, VALS(ampduparam_mpdu_start_spacing_flags)((0 ? (const struct _value_string*)0 : ((ampduparam_mpdu_start_spacing_flags
))))
, 0x1c,
51165 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51166
51167 {&hf_ieee80211_ampduparam_reserved,
51168 {"Reserved", "wlan.ht.ampduparam.reserved",
51169 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
51170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51171
51172 {&hf_ieee80211_mcsset,
51173 {"Rx Supported Modulation and Coding Scheme Set", "wlan.ht.mcsset",
51174 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51176
51177 {&hf_ieee80211_mcsset_vs,
51178 {"Rx Supported Modulation and Coding Scheme Set (VS)", "wlan.vs.ht.mcsset",
51179 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51180 "Vendor Specific Rx Supported Modulation and Coding Scheme Set", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51181
51182 {&hf_ieee80211_mcsset_rx_bitmask,
51183 {"Rx Modulation and Coding Scheme (One bit per modulation)", "wlan.ht.mcsset.rxbitmask",
51184 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51185 "One bit per modulation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51186
51187 {&hf_ieee80211_mcsset_rx_bitmask_0to7,
51188 {"Rx Bitmask Bits 0-7", "wlan.ht.mcsset.rxbitmask.0to7",
51189 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000ff,
51190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51191
51192 {&hf_ieee80211_mcsset_rx_bitmask_8to15,
51193 {"Rx Bitmask Bits 8-15", "wlan.ht.mcsset.rxbitmask.8to15",
51194 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000ff00,
51195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51196
51197 {&hf_ieee80211_mcsset_rx_bitmask_16to23,
51198 {"Rx Bitmask Bits 16-23", "wlan.ht.mcsset.rxbitmask.16to23",
51199 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00ff0000,
51200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51201
51202 {&hf_ieee80211_mcsset_rx_bitmask_24to31,
51203 {"Rx Bitmask Bits 24-31", "wlan.ht.mcsset.rxbitmask.24to31",
51204 FT_UINT32, BASE_HEX, NULL((void*)0), 0xff000000,
51205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51206
51207 {&hf_ieee80211_mcsset_rx_bitmask_32,
51208 {"Rx Bitmask Bit 32", "wlan.ht.mcsset.rxbitmask.32",
51209 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001,
51210 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51211
51212 {&hf_ieee80211_mcsset_rx_bitmask_33to38,
51213 {"Rx Bitmask Bits 33-38", "wlan.ht.mcsset.rxbitmask.33to38",
51214 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00007e,
51215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51216
51217 {&hf_ieee80211_mcsset_rx_bitmask_39to52,
51218 {"Rx Bitmask Bits 39-52", "wlan.ht.mcsset.rxbitmask.39to52",
51219 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1fff80,
51220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51221
51222 {&hf_ieee80211_mcsset_rx_bitmask_53to76,
51223 {"Rx Bitmask Bits 53-76", "wlan.ht.mcsset.rxbitmask.53to76",
51224 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1fffffe0,
51225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51226
51227 {&hf_ieee80211_mcsset_highest_data_rate,
51228 {"Highest Supported Data Rate", "wlan.ht.mcsset.highestdatarate",
51229 FT_UINT16, BASE_HEX, NULL((void*)0), 0x03ff,
51230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51231
51232 {&hf_ieee80211_mcsset_tx_mcs_set_defined,
51233 {"Tx Supported MCS Set", "wlan.ht.mcsset.txsetdefined",
51234 FT_BOOLEAN, 16, TFS(&tfs_defined_not_defined)((0 ? (const struct true_false_string*)0 : ((&tfs_defined_not_defined
))))
, 0x0001,
51235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51236
51237 {&hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal,
51238 {"Tx and Rx MCS Set", "wlan.ht.mcsset.txrxmcsnotequal",
51239 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,
51240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51241
51242 {&hf_ieee80211_mcsset_tx_max_spatial_streams,
51243 {"Maximum Number of Tx Spatial Streams Supported", "wlan.ht.mcsset.txmaxss",
51244 FT_UINT16, BASE_HEX, NULL((void*)0), 0x000c,
51245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51246
51247 {&hf_ieee80211_mcsset_tx_unequal_modulation,
51248 {"Unequal Modulation", "wlan.ht.mcsset.txunequalmod",
51249 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0010,
51250 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51251
51252 {&hf_ieee80211_htex_cap,
51253 {"HT Extended Capabilities", "wlan.htex.capabilities",
51254 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51255 "HT Extended Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51256
51257 {&hf_ieee80211_htex_vs_cap,
51258 {"HT Extended Capabilities (VS)", "wlan.vs.htex.capabilities",
51259 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51260 "Vendor Specific HT Extended Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51261
51262 {&hf_ieee80211_htex_reserved_b0_b7,
51263 {"Reserved", "wlan.htex.capabilities.reserved_b0_b7",
51264 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00ff,
51265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51266
51267 {&hf_ieee80211_htex_mcs,
51268 {"MCS Feedback capability", "wlan.htex.capabilities.mcs",
51269 FT_UINT16, BASE_HEX, VALS(htex_mcs_flags)((0 ? (const struct _value_string*)0 : ((htex_mcs_flags)))), 0x0300,
51270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51271
51272 {&hf_ieee80211_htex_htc_support,
51273 {"HT variant HT Control field", "wlan.htex.capabilities.htc",
51274 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0400,
51275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51276
51277 {&hf_ieee80211_htex_rd_responder,
51278 {"Reverse Direction Responder", "wlan.htex.capabilities.rdresponder",
51279 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800,
51280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51281
51282 {&hf_ieee80211_htex_reserved_b12_b15,
51283 {"Reserved", "wlan.htex.capabilities.reserved_b12_b15",
51284 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
51285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51286
51287 {&hf_ieee80211_txbf,
51288 {"Transmit Beam Forming (TxBF) Capabilities", "wlan.txbf",
51289 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
51290 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51291
51292 {&hf_ieee80211_txbf_vs,
51293 {"Transmit Beam Forming (TxBF) Capabilities (VS)", "wlan.vs.txbf",
51294 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
51295 "Vendor Specific Transmit Beam Forming (TxBF) Capabilities", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51296
51297 {&hf_ieee80211_txbf_cap,
51298 {"Implicit Transmit Beamforming Receiving", "wlan.txbf.txbf",
51299 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000001,
51300 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51301
51302 {&hf_ieee80211_txbf_rcv_ssc,
51303 {"Receive Staggered Sounding", "wlan.txbf.rxss",
51304 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000002,
51305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51306
51307 {&hf_ieee80211_txbf_tx_ssc,
51308 {"Transmit Staggered Sounding", "wlan.txbf.txss",
51309 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000004,
51310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51311
51312 {&hf_ieee80211_txbf_rcv_ndp,
51313 {"Receive Null Data packet (NDP)", "wlan.txbf.rxndp",
51314 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000008,
51315 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51316
51317 {&hf_ieee80211_txbf_tx_ndp,
51318 {"Transmit Null Data packet (NDP)", "wlan.txbf.txndp",
51319 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000010,
51320 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51321
51322 {&hf_ieee80211_txbf_impl_txbf,
51323 {"Implicit Transmit Beamforming", "wlan.txbf.impltxbf",
51324 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000020,
51325 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51326
51327 {&hf_ieee80211_txbf_calib,
51328 {"Calibration", "wlan.txbf.calibration",
51329 FT_UINT32, BASE_HEX, VALS(txbf_calib_flag)((0 ? (const struct _value_string*)0 : ((txbf_calib_flag)))), 0x000000c0,
51330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51331
51332 {&hf_ieee80211_txbf_expl_csi,
51333 {"Explicit CSI Transmit Beamforming", "wlan.txbf.csi",
51334 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000100,
51335 "Station can apply TxBF using CSI explicit feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51336
51337 {&hf_ieee80211_txbf_expl_uncomp_fm,
51338 {"Explicit Noncompressed Steering", "wlan.txbf.fm.uncompressed.tbf",
51339 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000200,
51340 "Station can apply TxBF using uncompressed beamforming feedback matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51341
51342 {&hf_ieee80211_txbf_expl_comp_fm,
51343 {"Explicit Compressed Steering", "wlan.txbf.fm.compressed.tbf",
51344 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000400,
51345 "Station can apply TxBF using compressed beamforming feedback matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51346
51347 {&hf_ieee80211_txbf_expl_bf_csi,
51348 {"Explicit Transmit Beamforming CSI Feedback", "wlan.txbf.rcsi",
51349 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)((0 ? (const struct _value_string*)0 : ((txbf_feedback_flags)
)))
, 0x00001800,
51350 "Receiver can return explicit CSI feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51351
51352 {&hf_ieee80211_txbf_expl_uncomp_fm_feed,
51353 {"Explicit Noncompressed Beamforming Feedback", "wlan.txbf.fm.uncompressed.rbf",
51354 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)((0 ? (const struct _value_string*)0 : ((txbf_feedback_flags)
)))
, 0x00006000,
51355 "Receiver can return explicit uncompressed Beamforming Feedback Matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51356
51357 {&hf_ieee80211_txbf_expl_comp_fm_feed,
51358 {"Explicit Noncompressed Beamforming Feedback", "wlan.txbf.fm.compressed.bf",
51359 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)((0 ? (const struct _value_string*)0 : ((txbf_feedback_flags)
)))
, 0x00018000,
51360 "Station can compress and use compressed Beamforming Feedback Matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51361
51362 {&hf_ieee80211_txbf_min_group,
51363 {"Minimal Grouping", "wlan.txbf.mingroup",
51364 FT_UINT32, BASE_HEX, VALS(txbf_min_group_flags)((0 ? (const struct _value_string*)0 : ((txbf_min_group_flags
))))
, 0x00060000,
51365 "Minimal grouping used for explicit feedback reports", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51366
51367 {&hf_ieee80211_vht_cap,
51368 {"VHT Capabilities Info", "wlan.vht.capabilities",
51369 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
51370 "VHT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51371
51372 {&hf_ieee80211_vht_max_mpdu_length,
51373 {"Maximum MPDU Length", "wlan.vht.capabilities.maxmpdulength",
51374 FT_UINT32, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x00000003,
51375 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51376
51377 {&hf_ieee80211_vht_supported_chan_width_set,
51378 {"Supported Channel Width Set", "wlan.vht.capabilities.supportedchanwidthset",
51379 FT_UINT32, BASE_HEX, VALS(vht_supported_chan_width_set_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_chan_width_set_flag
))))
, 0x0000000c,
51380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51381
51382 {&hf_ieee80211_vht_rx_ldpc,
51383 {"Rx LDPC", "wlan.vht.capabilities.rxldpc",
51384 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000010,
51385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51386
51387 {&hf_ieee80211_vht_short_gi_for_80,
51388 {"Short GI for 80MHz/TVHT_MODE_4C", "wlan.vht.capabilities.short80",
51389 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000020,
51390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51391
51392 {&hf_ieee80211_vht_short_gi_for_160,
51393 {"Short GI for 160MHz and 80+80MHz", "wlan.vht.capabilities.short160",
51394 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000040,
51395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51396
51397 {&hf_ieee80211_vht_tx_stbc,
51398 {"Tx STBC", "wlan.vht.capabilities.txstbc",
51399 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000080,
51400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51401
51402 {&hf_ieee80211_vht_rx_stbc,
51403 {"Rx STBC", "wlan.vht.capabilities.rxstbc",
51404 FT_UINT32, BASE_HEX, VALS(vht_rx_stbc_flag)((0 ? (const struct _value_string*)0 : ((vht_rx_stbc_flag)))), 0x00000700,
51405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51406
51407 {&hf_ieee80211_vht_su_beamformer_cap,
51408 {"SU Beamformer Capable", "wlan.vht.capabilities.subeamformer",
51409 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000800,
51410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51411
51412 {&hf_ieee80211_vht_su_beamformee_cap,
51413 {"SU Beamformee Capable", "wlan.vht.capabilities.subeamformee",
51414 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00001000,
51415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51416
51417 {&hf_ieee80211_vht_beamformer_antennas,
51418 {"Beamformee STS Capability", "wlan.vht.capabilities.beamformee_sts_cap",
51419 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag)((0 ? (const struct _value_string*)0 : ((num_plus_one_3bit_flag
))))
, 0x0000e000,
51420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51421
51422 {&hf_ieee80211_vht_sounding_dimensions,
51423 {"Number of Sounding Dimensions", "wlan.vht.capabilities.soundingdimensions",
51424 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag)((0 ? (const struct _value_string*)0 : ((num_plus_one_3bit_flag
))))
, 0x00070000,
51425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51426
51427 {&hf_ieee80211_vht_mu_beamformer_cap,
51428 {"MU Beamformer Capable", "wlan.vht.capabilities.mubeamformer",
51429 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00080000,
51430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51431
51432 {&hf_ieee80211_vht_mu_beamformee_cap,
51433 {"MU Beamformee Capable", "wlan.vht.capabilities.mubeamformee",
51434 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00100000,
51435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51436
51437 {&hf_ieee80211_vht_txop_ps,
51438 {"TXOP PS", "wlan.vht.capabilities.vhttxopps",
51439 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00200000,
51440 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51441
51442 {&hf_ieee80211_vht_var_htc_field,
51443 {"+HTC-VHT Capable", "wlan.vht.capabilities.vhthtc",
51444 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00400000,
51445 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51446
51447 {&hf_ieee80211_vht_max_ampdu,
51448 {"Max A-MPDU Length Exponent", "wlan.vht.capabilities.maxampdu",
51449 FT_UINT32, BASE_HEX, VALS(vht_max_ampdu_flag)((0 ? (const struct _value_string*)0 : ((vht_max_ampdu_flag))
))
, 0x03800000,
51450 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51451
51452 {&hf_ieee80211_vht_link_adaptation_cap,
51453 {"VHT Link Adaptation", "wlan.vht.capabilities.linkadapt",
51454 FT_UINT32, BASE_HEX, VALS(vht_link_adapt_flag)((0 ? (const struct _value_string*)0 : ((vht_link_adapt_flag)
)))
, 0x0c000000,
51455 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51456
51457 {&hf_ieee80211_vht_rx_pattern,
51458 {"Rx Antenna Pattern Consistency", "wlan.vht.capabilities.rxpatconsist",
51459 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10000000,
51460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51461
51462 {&hf_ieee80211_vht_tx_pattern,
51463 {"Tx Antenna Pattern Consistency", "wlan.vht.capabilities.txpatconsist",
51464 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20000000,
51465 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51466
51467 {&hf_ieee80211_vht_ext_nss_bw_support,
51468 {"Extended NSS BW Support", "wlan.vht.capabilities.ext_nss_bw_support",
51469 FT_UINT32, BASE_HEX, NULL((void*)0), 0xc0000000,
51470 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51471
51472 {&hf_ieee80211_vht_mcsset,
51473 {"VHT Supported MCS Set", "wlan.vht.mcsset",
51474 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51475 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51476
51477 {&hf_ieee80211_vht_mcsset_rx_mcs_map,
51478 {"Rx MCS Map", "wlan.vht.mcsset.rxmcsmap",
51479 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51480 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51481
51482 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
51483 {"Rx 1 SS", "wlan.vht.mcsset.rxmcsmap.ss1",
51484 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0003,
51485 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51486
51487 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
51488 {"Rx 2 SS", "wlan.vht.mcsset.rxmcsmap.ss2",
51489 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x000c,
51490 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51491
51492 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
51493 {"Rx 3 SS", "wlan.vht.mcsset.rxmcsmap.ss3",
51494 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0030,
51495 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51496
51497 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
51498 {"Rx 4 SS", "wlan.vht.mcsset.rxmcsmap.ss4",
51499 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x00c0,
51500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51501
51502 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
51503 {"Rx 5 SS", "wlan.vht.mcsset.rxmcsmap.ss5",
51504 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0300,
51505 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51506
51507 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
51508 {"Rx 6 SS", "wlan.vht.mcsset.rxmcsmap.ss6",
51509 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0c00,
51510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51511
51512 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
51513 {"Rx 7 SS", "wlan.vht.mcsset.rxmcsmap.ss7",
51514 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x3000,
51515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51516
51517 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
51518 {"Rx 8 SS", "wlan.vht.mcsset.rxmcsmap.ss8",
51519 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0xc000,
51520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51521
51522 {&hf_ieee80211_vht_mcsset_max_nsts_total,
51523 {"MaX NSTS Total", "wlan.vht.mcsset.max_nsts_total",
51524 FT_UINT16, BASE_DEC, NULL((void*)0), 0xe000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51525
51526 {&hf_ieee80211_vht_mcsset_rx_highest_long_gi,
51527 {"Rx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.rxhighestlonggirate",
51528 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1fff,
51529 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51530
51531 {&hf_ieee80211_vht_mcsset_tx_mcs_map,
51532 {"Tx MCS Map", "wlan.vht.mcsset.txmcsmap",
51533 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51535
51536 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
51537 {"Tx 1 SS", "wlan.vht.mcsset.txmcsmap.ss1",
51538 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0003,
51539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51540
51541 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
51542 {"Tx 2 SS", "wlan.vht.mcsset.txmcsmap.ss2",
51543 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x000c,
51544 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51545
51546 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
51547 {"Tx 3 SS", "wlan.vht.mcsset.txmcsmap.ss3",
51548 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0030,
51549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51550
51551 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
51552 {"Tx 4 SS", "wlan.vht.mcsset.txmcsmap.ss4",
51553 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x00c0,
51554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51555
51556 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
51557 {"Tx 5 SS", "wlan.vht.mcsset.txmcsmap.ss5",
51558 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0300,
51559 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51560
51561 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
51562 {"Tx 6 SS", "wlan.vht.mcsset.txmcsmap.ss6",
51563 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0c00,
51564 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51565
51566 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
51567 {"Tx 7 SS", "wlan.vht.mcsset.txmcsmap.ss7",
51568 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x3000,
51569 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51570
51571 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
51572 {"Tx 8 SS", "wlan.vht.mcsset.txmcsmap.ss8",
51573 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0xc000,
51574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51575
51576 {&hf_ieee80211_vht_mcsset_tx_highest_long_gi,
51577 {"Tx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.txhighestlonggirate",
51578 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1fff,
51579 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51580
51581 {&hf_ieee80211_vht_mcsset_extended_nss_bw_capable,
51582 {"VHT Extended NSS BW Capable", "wlan.vht.mcsset.vht_ext_nss_bw_capable",
51583 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) }},
51584
51585 {&hf_ieee80211_vht_mcsset_reserved,
51586 {"Reserved", "wlan.vht.mcsset.reserved",
51587 FT_UINT16, BASE_HEX, NULL((void*)0), 0xc000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51588
51589 {&hf_ieee80211_vht_op,
51590 {"VHT Operation Info", "wlan.vht.op",
51591 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51593
51594 {&hf_ieee80211_vht_op_channel_width,
51595 {"Channel Width", "wlan.vht.op.channelwidth",
51596 FT_UINT8, BASE_DEC, VALS(channel_width_vals)((0 ? (const struct _value_string*)0 : ((channel_width_vals))
))
, 0,
51597 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51598
51599 {&hf_ieee80211_vht_op_channel_center0,
51600 {"Channel Center Segment 0", "wlan.vht.op.channelcenter0",
51601 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51602 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51603
51604 {&hf_ieee80211_vht_op_channel_center1,
51605 {"Channel Center Segment 1", "wlan.vht.op.channelcenter1",
51606 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51607 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51608
51609 {&hf_ieee80211_vht_op_basic_mcs_map,
51610 {"Basic MCS Map", "wlan.vht.op.basicmcsmap",
51611 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51612 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51613
51614 {&hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
51615 {"Basic 1 SS", "wlan.vht.op.basicmcsmap.ss1",
51616 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0003,
51617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51618
51619 {&hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
51620 {"Basic 2 SS", "wlan.vht.op.basicmcsmap.ss2",
51621 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x000c,
51622 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51623
51624 {&hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
51625 {"Basic 3 SS", "wlan.vht.op.basicmcsmap.ss3",
51626 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0030,
51627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51628
51629 {&hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
51630 {"Basic 4 SS", "wlan.vht.op.basicmcsmap.ss4",
51631 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x00c0,
51632 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51633
51634 {&hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
51635 {"Basic 5 SS", "wlan.vht.op.basicmcsmap.ss5",
51636 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0300,
51637 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51638
51639 {&hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
51640 {"Basic 6 SS", "wlan.vht.op.basicmcsmap.ss6",
51641 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0c00,
51642 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51643
51644 {&hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
51645 {"Basic 7 SS", "wlan.vht.op.basicmcsmap.ss7",
51646 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x3000,
51647 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51648
51649 {&hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
51650 {"Basic 8 SS", "wlan.vht.op.basicmcsmap.ss8",
51651 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0xc000,
51652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51653
51654 {&hf_ieee80211_vht_tpe_pwr_info,
51655 {"Tx Pwr Info", "wlan.vht.tpe.pwr_info",
51656 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51657 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51658
51659 {&hf_ieee80211_vht_tpe_pwr_info_count,
51660 {"Max Tx Pwr Count", "wlan.vht.tpe.pwr_info.count",
51661 FT_UINT8, BASE_DEC, NULL((void*)0) , 0x07,
51662 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51663
51664 {&hf_ieee80211_vht_tpe_pwr_info_unit,
51665 {"Max Tx Pwr Unit Interpretation", "wlan.vht.tpe.pwr_info.unit",
51666 FT_UINT8, BASE_DEC, VALS(vht_tpe_pwr_units)((0 ? (const struct _value_string*)0 : ((vht_tpe_pwr_units)))
)
, 0x38,
51667 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51668
51669 {&hf_ieee80211_vht_tpe_pwr_info_category,
51670 {"Max Tx Pwr Category", "wlan.vht.tpe.pwr_info.category",
51671 FT_UINT8, BASE_DEC, NULL((void*)0) , 0xC0,
51672 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51673
51674 {&hf_ieee80211_vht_tpe_pwr_constr_20,
51675 {"Local Max Tx Pwr Constraint 20MHz", "wlan.vht.tpe.pwr_constr_20",
51676 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51677 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51678
51679 {&hf_ieee80211_vht_tpe_pwr_constr_40,
51680 {"Local Max Tx Pwr Constraint 40MHz", "wlan.vht.tpe.pwr_constr_40",
51681 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51682 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51683
51684 {&hf_ieee80211_vht_tpe_pwr_constr_80,
51685 {"Local Max Tx Pwr Constraint 80MHz", "wlan.vht.tpe.pwr_constr_80",
51686 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51687 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51688
51689 {&hf_ieee80211_vht_tpe_pwr_constr_160,
51690 {"Local Max Tx Pwr Constraint 160MHz/80+80 MHz", "wlan.vht.tpe.pwr_constr_160",
51691 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51692 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51693
51694 {&hf_ieee80211_vht_tpe_pwr_constr_320,
51695 {"Local Max Tx Pwr Constraint 320 MHz", "wlan.vht.tpe.pwr_constr_320",
51696 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51697 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51698
51699 {&hf_ieee80211_vht_tpe_any_bw_psd,
51700 {"Max Tx Power Spectral Density", "wlan.vht.tpe.max_tx_psd",
51701 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) }},
51702
51703 {&hf_ieee80211_vht_tpe_psd,
51704 {"Power Spectral Density", "wlan.vht.tpe.psd",
51705 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) }},
51706
51707 {&hf_ieee80211_vht_tpe_ext_count,
51708 {"Extension Count", "wlan.vht.tpe.extension_count",
51709 FT_UINT8, BASE_DEC, NULL((void*)0) , 0x0f,
51710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51711
51712 {&hf_ieee80211_vht_tpe_ext_reserved,
51713 {"Reserved", "wlan.vht.tpe.extension_reserved",
51714 FT_UINT8, BASE_HEX, NULL((void*)0) , 0xf0,
51715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51716
51717 {&hf_ieee80211_txbf_csi_num_bf_ant,
51718 {"CSI Number of Beamformer Antennas", "wlan.txbf.csinumant",
51719 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)((0 ? (const struct _value_string*)0 : ((txbf_antenna_flags))
))
, 0x00180000,
51720 "Max antennae station can support when CSI feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51721
51722 {&hf_ieee80211_txbf_uncomp_sm_bf_ant,
51723 {"Noncompressed Steering Number of Beamformer Antennas", "wlan.txbf.fm.uncompressed.maxant",
51724 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)((0 ? (const struct _value_string*)0 : ((txbf_antenna_flags))
))
, 0x00600000,
51725 "Max antennae station can support when uncompressed Beamforming feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51726
51727 {&hf_ieee80211_txbf_comp_sm_bf_ant,
51728 {"Compressed Steering Number of Beamformer Antennas", "wlan.txbf.fm.compressed.maxant",
51729 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)((0 ? (const struct _value_string*)0 : ((txbf_antenna_flags))
))
, 0x01800000,
51730 "Max antennae station can support when compressed Beamforming feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51731
51732 {&hf_ieee80211_txbf_csi_max_rows_bf,
51733 {"CSI Max Number of Rows Beamformer", "wlan.txbf.csi.maxrows",
51734 FT_UINT32, BASE_HEX, VALS(txbf_csi_max_rows_bf_flags)((0 ? (const struct _value_string*)0 : ((txbf_csi_max_rows_bf_flags
))))
, 0x06000000,
51735 "Maximum number of rows of CSI explicit feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51736
51737 {&hf_ieee80211_txbf_chan_est,
51738 {"Channel Estimation", "wlan.txbf.channelest",
51739 FT_UINT32, BASE_HEX, VALS(txbf_chan_est_flags)((0 ? (const struct _value_string*)0 : ((txbf_chan_est_flags)
)))
, 0x18000000,
51740 "Maximum number of space time streams for which channel dimensions can be simultaneously estimated", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51741
51742 {&hf_ieee80211_txbf_resrv,
51743 {"Reserved", "wlan.txbf.reserved",
51744 FT_UINT32, BASE_HEX, NULL((void*)0), 0xe0000000,
51745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51746
51747 {&hf_ieee80211_hta_cc,
51748 {"HT Control Channel", "wlan.hta.control_channel",
51749 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51751
51752 {&hf_ieee80211_hta_cap1,
51753 {"HT Additional Capabilities", "wlan.hta.capabilities",
51754 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51755 "HT Additional Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51756
51757 {&hf_ieee80211_hta_cap2,
51758 {"HT Additional Capabilities", "wlan.hta.capabilities",
51759 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51760 "HT Additional Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51761
51762 {&hf_ieee80211_hta_ext_chan_offset,
51763 {"Extension Channel Offset", "wlan.hta.capabilities.ext_chan_offset",
51764 FT_UINT16, BASE_HEX, VALS(hta_ext_chan_offset_flag)((0 ? (const struct _value_string*)0 : ((hta_ext_chan_offset_flag
))))
, 0x0003,
51765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51766
51767 {&hf_ieee80211_hta_rec_tx_width,
51768 {"Recommended Tx Channel Width", "wlan.hta.capabilities.rec_tx_width",
51769 FT_BOOLEAN, 16, TFS(&hta_rec_tx_width_flag)((0 ? (const struct true_false_string*)0 : ((&hta_rec_tx_width_flag
))))
, 0x0004,
51770 "Recommended Transmit Channel Width", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51771
51772 {&hf_ieee80211_hta_rifs_mode,
51773 {"Reduced Interframe Spacing (RIFS) Mode", "wlan.hta.capabilities.rifs_mode",
51774 FT_BOOLEAN, 16, TFS(&hta_rifs_mode_flag)((0 ? (const struct true_false_string*)0 : ((&hta_rifs_mode_flag
))))
, 0x0008,
51775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51776
51777 {&hf_ieee80211_hta_controlled_access,
51778 {"Controlled Access Only", "wlan.hta.capabilities.controlled_access",
51779 FT_BOOLEAN, 16, TFS(&hta_controlled_access_flag)((0 ? (const struct true_false_string*)0 : ((&hta_controlled_access_flag
))))
, 0x0010,
51780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51781
51782 {&hf_ieee80211_hta_service_interval,
51783 {"Service Interval Granularity", "wlan.hta.capabilities.service_interval",
51784 FT_UINT16, BASE_HEX, VALS(hta_service_interval_flag)((0 ? (const struct _value_string*)0 : ((hta_service_interval_flag
))))
, 0x00E0,
51785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51786
51787 {&hf_ieee80211_hta_operating_mode,
51788 {"Operating Mode", "wlan.hta.capabilities.operating_mode",
51789 FT_UINT16, BASE_HEX, VALS(hta_operating_mode_flag)((0 ? (const struct _value_string*)0 : ((hta_operating_mode_flag
))))
, 0x0003,
51790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51791
51792 {&hf_ieee80211_hta_non_gf_devices,
51793 {"Non Greenfield (GF) devices Present", "wlan.hta.capabilities.non_gf_devices",
51794 FT_BOOLEAN, 16, TFS(&hta_non_gf_devices_flag)((0 ? (const struct true_false_string*)0 : ((&hta_non_gf_devices_flag
))))
, 0x0004,
51795 "on Greenfield (GF) devices Present", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51796
51797 {&hf_ieee80211_hta_basic_stbc_mcs,
51798 {"Basic STB Modulation and Coding Scheme (MCS)", "wlan.hta.capabilities.basic_stbc_mcs",
51799 FT_UINT16, BASE_HEX, NULL((void*)0) , 0x007f,
51800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51801
51802 {&hf_ieee80211_hta_dual_stbc_protection,
51803 {"Dual Clear To Send (CTS) Protection", "wlan.hta.capabilities.dual_stbc_protection",
51804 FT_BOOLEAN, 16, TFS(&hta_dual_stbc_protection_flag)((0 ? (const struct true_false_string*)0 : ((&hta_dual_stbc_protection_flag
))))
, 0x0080,
51805 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51806
51807 {&hf_ieee80211_hta_secondary_beacon,
51808 {"Secondary Beacon", "wlan.hta.capabilities.secondary_beacon",
51809 FT_BOOLEAN, 16, TFS(&hta_secondary_beacon_flag)((0 ? (const struct true_false_string*)0 : ((&hta_secondary_beacon_flag
))))
, 0x0100,
51810 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51811
51812 {&hf_ieee80211_hta_lsig_txop_protection,
51813 {"L-SIG TXOP Protection Support", "wlan.hta.capabilities.lsig_txop_protection",
51814 FT_BOOLEAN, 16, TFS(&hta_lsig_txop_protection_flag)((0 ? (const struct true_false_string*)0 : ((&hta_lsig_txop_protection_flag
))))
, 0x0200,
51815 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51816
51817 {&hf_ieee80211_hta_pco_active,
51818 {"Phased Coexistence Operation (PCO) Active", "wlan.hta.capabilities.pco_active",
51819 FT_BOOLEAN, 16, TFS(&hta_pco_active_flag)((0 ? (const struct true_false_string*)0 : ((&hta_pco_active_flag
))))
, 0x0400,
51820 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51821
51822 {&hf_ieee80211_hta_pco_phase,
51823 {"Phased Coexistence Operation (PCO) Phase", "wlan.hta.capabilities.pco_phase",
51824 FT_BOOLEAN, 16, TFS(&hta_pco_phase_flag)((0 ? (const struct true_false_string*)0 : ((&hta_pco_phase_flag
))))
, 0x0800,
51825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51826
51827 {&hf_ieee80211_antsel,
51828 {"Antenna Selection (ASEL) Capabilities", "wlan.asel",
51829 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51831
51832 {&hf_ieee80211_antsel_vs,
51833 {"Antenna Selection (ASEL) Capabilities (VS)", "wlan.vs.asel",
51834 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51835 "Vendor Specific Antenna Selection (ASEL) Capabilities", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51836
51837 {&hf_ieee80211_antsel_b0,
51838 {"Antenna Selection Capable", "wlan.asel.capable",
51839 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
51840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51841
51842 {&hf_ieee80211_antsel_b1,
51843 {"Explicit CSI Feedback Based Tx ASEL", "wlan.asel.txcsi",
51844 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
51845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51846
51847 {&hf_ieee80211_antsel_b2,
51848 {"Antenna Indices Feedback Based Tx ASEL", "wlan.asel.txif",
51849 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
51850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51851
51852 {&hf_ieee80211_antsel_b3,
51853 {"Explicit CSI Feedback", "wlan.asel.csi",
51854 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
51855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51856
51857 {&hf_ieee80211_antsel_b4,
51858 {"Antenna Indices Feedback", "wlan.asel.if",
51859 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
51860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51861
51862 {&hf_ieee80211_antsel_b5,
51863 {"Rx ASEL", "wlan.asel.rx",
51864 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
51865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51866
51867 {&hf_ieee80211_antsel_b6,
51868 {"Tx Sounding PPDUs", "wlan.asel.sppdu",
51869 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
51870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51871
51872 {&hf_ieee80211_antsel_b7,
51873 {"Reserved", "wlan.asel.reserved",
51874 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
51875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51876
51877 {&hf_ieee80211_ht_operation_info_delimiter1,
51878 {"HT Operation Information Subset (1 of 3)", "wlan.ht.info.delim1",
51879 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51881
51882 {&hf_ieee80211_ht_operation_primary_channel,
51883 {"Primary Channel", "wlan.ht.info.primarychannel",
51884 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51886
51887 {&hf_ieee80211_ht_operation_info_secondary_channel_offset,
51888 {"Secondary channel offset", "wlan.ht.info.secchanoffset",
51889 FT_UINT8, BASE_HEX, VALS(ht_info_secondary_channel_offset_flags)((0 ? (const struct _value_string*)0 : ((ht_info_secondary_channel_offset_flags
))))
, 0x03,
51890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51891
51892 {&hf_ieee80211_ht_operation_info_sta_channel_width,
51893 {"Supported channel width", "wlan.ht.info.chanwidth",
51894 FT_BOOLEAN, 8, TFS(&ht_info_channel_sta_width_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_channel_sta_width_flag
))))
, 0x04,
51895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51896
51897 {&hf_ieee80211_ht_operation_info_rifs_mode,
51898 {"Reduced Interframe Spacing (RIFS)", "wlan.ht.info.rifs",
51899 FT_BOOLEAN, 8, TFS(&ht_info_rifs_mode_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_rifs_mode_flag
))))
, 0x08,
51900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51901
51902 {&hf_ieee80211_ht_operation_info_reserved_b4_b7,
51903 {"Reserved", "wlan.ht.info.reserved_b4_b7",
51904 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51905
51906 {&hf_ieee80211_ht_operation_info_delimiter2,
51907 {"HT Operation Information Subset (2 of 3)", "wlan.ht.info.delim2",
51908 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51910
51911 {&hf_ieee80211_ht_operation_info_protection,
51912 {"HT Protection", "wlan.ht.info.ht_protection",
51913 FT_UINT16, BASE_HEX, VALS(ht_info_operating_protection_mode_flags)((0 ? (const struct _value_string*)0 : ((ht_info_operating_protection_mode_flags
))))
, 0x0003,
51914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51915
51916 {&hf_ieee80211_ht_operation_info_non_greenfield_sta_present,
51917 {"Non-greenfield STAs present", "wlan.ht.info.greenfield",
51918 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,
51919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51920
51921 {&hf_ieee80211_ht_operation_info_reserved_b11,
51922 {"Reserved", "wlan.ht.info.reserved_b11",
51923 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51924
51925 {&hf_ieee80211_ht_operation_info_obss_non_ht_stas_present,
51926 {"OBSS non-HT STAs present", "wlan.ht.info.obssnonht",
51927 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,
51928 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51929
51930 {&hf_ieee80211_ht_operation_info_channel_center_freq_seg_2,
51931 {"Channel Center Frequency Segment 2", "wlan.ht.info.chan_center_freq_seg_2",
51932 FT_UINT16, BASE_DEC, NULL((void*)0), 0x1fe0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51933
51934 {&hf_ieee80211_ht_operation_info_reserved_b21_b23,
51935 {"Reserved", "wlan.ht.info.reserved_b21_b23",
51936 FT_UINT16, BASE_HEX, NULL((void*)0), 0xe000,
51937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51938
51939 {&hf_ieee80211_ht_operation_info_delimiter3,
51940 {"HT Operation Information Subset (3 of 3)", "wlan.ht.info.delim3",
51941 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51943
51944 {&hf_ieee80211_ht_operation_info_reserved_b24_b29,
51945 {"Reserved", "wlan.ht.info.reserved_b24_b29",
51946 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51947
51948 {&hf_ieee80211_ht_operation_info_dual_beacon,
51949 {"Dual beacon", "wlan.ht.info.dualbeacon",
51950 FT_BOOLEAN, 16, TFS(&ht_info_dual_beacon_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_dual_beacon_flag
))))
, 0x0040,
51951 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51952
51953 {&hf_ieee80211_ht_operation_info_dual_cts_protection,
51954 {"Dual Clear To Send (CTS) protection", "wlan.ht.info.dualcts",
51955 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0080,
51956 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51957
51958 {&hf_ieee80211_ht_operation_info_stbc_beacon,
51959 {"STBC Beacon", "wlan.ht.info.stbcbeacon",
51960 FT_BOOLEAN, 16, TFS(&ht_info_stbc_beacon_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_stbc_beacon_flag
))))
, 0x0100,
51961 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51962
51963 {&hf_ieee80211_ht_operation_info_reserved_b33_b39,
51964 {"Reserved", "wlan.ht.info.reserved_b33_b39",
51965 FT_UINT16, BASE_HEX, NULL((void*)0), 0xfe00,
51966 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51967
51968 {&hf_ieee80211_ht_operation_mcsset_reserved,
51969 {"Basic HT-MCS Set: Reserved", "wlan.ht.info.mcsset_reserved",
51970 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
51971 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51972
51973 {&hf_ieee80211_tag_ap_channel_report_operating_class,
51974 {"Operating Class", "wlan.ap_channel_report.operating_class",
51975 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51976 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51977
51978 {&hf_ieee80211_tag_ap_channel_report_channel_list,
51979 {"Channel List", "wlan.ap_channel_report.channel_list",
51980 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51981 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51982
51983 {&hf_ieee80211_tag_secondary_channel_offset,
51984 {"Secondary Channel Offset", "wlan.secchanoffset",
51985 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_secondary_channel_offset_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_secondary_channel_offset_flags
))))
, 0,
51986 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51987
51988 {&hf_ieee80211_tag_bss_ap_avg_access_delay,
51989 {"AP Average Access Delay", "wlan.bss_ap_avg_access_delay",
51990 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
51991 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51992
51993 {&hf_ieee80211_tag_antenna_id,
51994 {"Antenna ID", "wlan.antenna.id",
51995 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
51996 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51997
51998 {&hf_ieee80211_tag_rsni,
51999 {"RSNI", "wlan.rsni",
52000 FT_UINT8, BASE_CUSTOM, CF_FUNC(rsni_base_custom)((const void *) (size_t) (rsni_base_custom)), 0x0,
52001 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52002
52003 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
52004 {"Available Admission Capacity Bitmask", "wlan.bss_avb_adm_cap.bitmask",
52005 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52006 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52007
52008 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
52009 {"UP0 (bit0)", "wlan.bss_avb_adm_cap.bitmask.up0",
52010 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP00x0001,
52011 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52012
52013 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
52014 {"UP1 (bit1)", "wlan.bss_avb_adm_cap.bitmask.up1",
52015 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP10x0002,
52016 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52017
52018 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
52019 {"UP2 (bit2)", "wlan.bss_avb_adm_cap.bitmask.up2",
52020 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP20x0004,
52021 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52022
52023 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
52024 {"UP3 (bit3)", "wlan.bss_avb_adm_cap.bitmask.up3",
52025 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP30x0008,
52026 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52027
52028 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
52029 {"UP4 (bit4)", "wlan.bss_avb_adm_cap.bitmask.up4",
52030 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP40x0010,
52031 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52032
52033 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
52034 {"UP5 (bit5)", "wlan.bss_avb_adm_cap.bitmask.up5",
52035 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP50x0020,
52036 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52037
52038 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
52039 {"UP6 (bit6)", "wlan.bss_avb_adm_cap.bitmask.up6",
52040 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP60x0040,
52041 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52042
52043 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
52044 {"UP7 (bit7)", "wlan.bss_avb_adm_cap.bitmask.up7",
52045 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP70x0080,
52046 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52047
52048 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
52049 {"AC0 (bit8)", "wlan.bss_avb_adm_cap.bitmask.ac0",
52050 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC00x0100,
52051 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52052
52053 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
52054 {"AC1 (bit9)", "wlan.bss_avb_adm_cap.bitmask.AC1",
52055 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC10x0200,
52056 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52057
52058 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
52059 {"AC2 (bit10)", "wlan.bss_avb_adm_cap.bitmask.ac2",
52060 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC20x0400,
52061 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52062
52063 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
52064 {"AC3 (bit11)", "wlan.bss_avb_adm_cap.bitmask.ac3",
52065 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC30x0800,
52066 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52067
52068 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
52069 {"Reserved", "wlan.bss_avb_adm_cap.bitmask.rsv",
52070 FT_UINT16, BASE_HEX, NULL((void*)0), BSS_BITMASK_RSV0xF000,
52071 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52072
52073 {&hf_ieee80211_tag_bss_avb_adm_cap_up0,
52074 {"UP0", "wlan.bss_avb_adm_cap.up0",
52075 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52076 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52077
52078 {&hf_ieee80211_tag_bss_avb_adm_cap_up1,
52079 {"UP1", "wlan.bss_avb_adm_cap.up1",
52080 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52081 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52082
52083 {&hf_ieee80211_tag_bss_avb_adm_cap_up2,
52084 {"UP2", "wlan.bss_avb_adm_cap.up2",
52085 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52086 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52087
52088 {&hf_ieee80211_tag_bss_avb_adm_cap_up3,
52089 {"UP3", "wlan.bss_avb_adm_cap.up3",
52090 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52091 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52092
52093 {&hf_ieee80211_tag_bss_avb_adm_cap_up4,
52094 {"UP4", "wlan.bss_avb_adm_cap.up4",
52095 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52096 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52097
52098 {&hf_ieee80211_tag_bss_avb_adm_cap_up5,
52099 {"UP5", "wlan.bss_avb_adm_cap.up5",
52100 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52101 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52102
52103 {&hf_ieee80211_tag_bss_avb_adm_cap_up6,
52104 {"UP6", "wlan.bss_avb_adm_cap.up6",
52105 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52106 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52107
52108 {&hf_ieee80211_tag_bss_avb_adm_cap_up7,
52109 {"UP7", "wlan.bss_avb_adm_cap.up7",
52110 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52111 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52112
52113 {&hf_ieee80211_tag_bss_avb_adm_cap_ac0,
52114 {"AC0", "wlan.bss_avb_adm_cap.ac0",
52115 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52116 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52117
52118 {&hf_ieee80211_tag_bss_avb_adm_cap_ac1,
52119 {"AC1", "wlan.bss_avb_adm_cap.ac1",
52120 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52121 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52122
52123 {&hf_ieee80211_tag_bss_avb_adm_cap_ac2,
52124 {"AC2", "wlan.bss_avb_adm_cap.ac2",
52125 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52126 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52127
52128 {&hf_ieee80211_tag_bss_avb_adm_cap_ac3,
52129 {"AC3", "wlan.bss_avb_adm_cap.ac3",
52130 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52131 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52132
52133 {&hf_ieee80211_tag_bss_avg_ac_access_delay_be,
52134 {"AC Average Access Delay for Best Effort", "wlan.bss_avg_ac_access_delay.be",
52135 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52136 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52137
52138 {&hf_ieee80211_tag_bss_avg_ac_access_delay_bk,
52139 {"AC Average Access Delay for Best Background", "wlan.bss_avg_ac_access_delay.bk",
52140 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52141 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52142
52143 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vi,
52144 {"AC Average Access Delay for Video", "wlan.bss_avg_ac_access_delay_vi",
52145 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52146 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52147
52148 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vo,
52149 {"AC Average Access Delay for Voice", "wlan.bss_avg_ac_access_delay_vo",
52150 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52151 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52152
52153
52154 /* 802.11-2012 Table 8-119-RM Enabled Capabilities definition */
52155 {&hf_ieee80211_tag_rm_enabled_capabilities,
52156 {"RM Capabilities", "wlan.rmcap",
52157 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52158 "Signals support for radio measurements in a device", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52159
52160 /* RM Enabled Capability octet 1 */
52161 {&hf_ieee80211_tag_rm_enabled_capabilities_b0,
52162 {"Link Measurement", "wlan.rmcap.b0",
52163 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52165
52166 {&hf_ieee80211_tag_rm_enabled_capabilities_b1,
52167 {"Neighbor Report", "wlan.rmcap.b1",
52168 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52169 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52170
52171 {&hf_ieee80211_tag_rm_enabled_capabilities_b2,
52172 {"Parallel Measurements", "wlan.rmcap.b2",
52173 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
52174 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52175
52176 {&hf_ieee80211_tag_rm_enabled_capabilities_b3,
52177 {"Repeated Measurements", "wlan.rmcap.b3",
52178 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52179 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52180
52181 {&hf_ieee80211_tag_rm_enabled_capabilities_b4,
52182 {"Beacon Passive Measurement", "wlan.rmcap.b4",
52183 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
52184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52185
52186 {&hf_ieee80211_tag_rm_enabled_capabilities_b5,
52187 {"Beacon Active Measurement", "wlan.rmcap.b5",
52188 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
52189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52190
52191 {&hf_ieee80211_tag_rm_enabled_capabilities_b6,
52192 {"Beacon Table Measurement", "wlan.rmcap.b6",
52193 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52194 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52195
52196 {&hf_ieee80211_tag_rm_enabled_capabilities_b7,
52197 {"Beacon Measurement Reporting Conditions", "wlan.rmcap.b7",
52198 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
52199 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52200
52201 /* RM Enabled Capability octet 2 */
52202 {&hf_ieee80211_tag_rm_enabled_capabilities_b8,
52203 {"Frame Measurement", "wlan.rmcap.b8",
52204 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52206
52207 {&hf_ieee80211_tag_rm_enabled_capabilities_b9,
52208 {"Channel Load Measurement", "wlan.rmcap.b9",
52209 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52210 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52211
52212 {&hf_ieee80211_tag_rm_enabled_capabilities_b10,
52213 {"Noise Histogram Measurement", "wlan.rmcap.b10",
52214 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
52215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52216
52217 {&hf_ieee80211_tag_rm_enabled_capabilities_b11,
52218 {"Statistics Measurement", "wlan.rmcap.b11",
52219 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52221
52222 {&hf_ieee80211_tag_rm_enabled_capabilities_b12,
52223 {"LCI Measurement", "wlan.rmcap.b12",
52224 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
52225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52226
52227 {&hf_ieee80211_tag_rm_enabled_capabilities_b13,
52228 {"LCI Azimuth capability", "wlan.rmcap.b13",
52229 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
52230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52231
52232 {&hf_ieee80211_tag_rm_enabled_capabilities_b14,
52233 {"Transmit Stream/Category Measurement", "wlan.rmcap.b14",
52234 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52236
52237 {&hf_ieee80211_tag_rm_enabled_capabilities_b15,
52238 {"Triggered Transmit Stream/Category Measurement", "wlan.rmcap.b15",
52239 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
52240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52241
52242 /* RM Enabled Capability octet 3 */
52243 {&hf_ieee80211_tag_rm_enabled_capabilities_b16,
52244 {"AP Channel Report capability", "wlan.rmcap.b16",
52245 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52246 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52247
52248 {&hf_ieee80211_tag_rm_enabled_capabilities_b17,
52249 {"RM MIB capability", "wlan.rmcap.b17",
52250 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52251 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52252
52253 {&hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
52254 {"Operating Channel Max Measurement Duration", "wlan.rmcap.b18to20",
52255 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C,
52256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52257
52258 {&hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
52259 {"Nonoperating Channel Max Measurement Duration", "wlan.rmcap.b21to23",
52260 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0,
52261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52262
52263 /* RM Enabled Capability octet 4 */
52264 {&hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
52265 {"Measurement Pilotcapability", "wlan.rmcap.b24to26",
52266 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
52267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52268
52269 {&hf_ieee80211_tag_rm_enabled_capabilities_b27,
52270 {"Measurement Pilot Transmission Information", "wlan.rmcap.b27",
52271 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52272 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52273
52274 {&hf_ieee80211_tag_rm_enabled_capabilities_b28,
52275 {"Neighbor Report TSF Offset", "wlan.rmcap.b28",
52276 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
52277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52278
52279 {&hf_ieee80211_tag_rm_enabled_capabilities_b29,
52280 {"RCPI Measurement capability", "wlan.rmcap.b29",
52281 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
52282 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52283
52284 {&hf_ieee80211_tag_rm_enabled_capabilities_b30,
52285 {"RSNI Measurement capability", "wlan.rmcap.b30",
52286 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52287 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52288
52289 {&hf_ieee80211_tag_rm_enabled_capabilities_b31,
52290 {"BSS Average Access Delay capability", "wlan.rmcap.b31",
52291 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
52292 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52293
52294 /* RM Enabled Capability octet 5 */
52295 {&hf_ieee80211_tag_rm_enabled_capabilities_b32,
52296 {"BSS Available Admission Capacity capability", "wlan.rmcap.b32",
52297 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52298 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52299
52300 {&hf_ieee80211_tag_rm_enabled_capabilities_b33,
52301 {"Antenna capability", "wlan.rmcap.b33",
52302 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52303 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52304
52305 {&hf_ieee80211_tag_rm_enabled_capabilities_b34,
52306 {"FTM Range Report Capability", "wlan.rmcap.b34",
52307 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
52308 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52309
52310 {&hf_ieee80211_tag_rm_enabled_capabilities_b35,
52311 {"Civic Location Measurement Capability", "wlan.rmcap.b35",
52312 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52313 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52314
52315 {&hf_ieee80211_tag_rm_enabled_capabilities_o5,
52316 {"Reserved", "wlan.rmcap.o5",
52317 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
52318 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52319
52320 {&hf_ieee80211_tag_rcpi,
52321 {"RCPI", "wlan.rcpi",
52322 FT_UINT8, BASE_CUSTOM, CF_FUNC(rcpi_and_power_level_custom)((const void *) (size_t) (rcpi_and_power_level_custom)), 0,
52323 "Received channel power indicator", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52324
52325 /* Multiple BSSID */
52326 {&hf_ieee80211_tag_multiple_bssid,
52327 {"Max BSSID Indicator", "wlan.multiple_bssid",
52328 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52329 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52330
52331 {&hf_ieee80211_tag_multiple_bssid_subelem_id,
52332 {"Subelement ID", "wlan.multiple_bssid.subelem.id",
52333 FT_UINT8, BASE_DEC, VALS(multiple_bssid_subelem_ids)((0 ? (const struct _value_string*)0 : ((multiple_bssid_subelem_ids
))))
, 0x0,
52334 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52335
52336 {&hf_ieee80211_tag_multiple_bssid_subelem_len,
52337 {"Length", "wlan.multiple_bssid.subelem.len",
52338 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52339 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52340
52341 {&hf_ieee80211_tag_multiple_bssid_subelem_reserved,
52342 {"Reserved", "wlan.multiple_bssid.subelem.reserved",
52343 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52344 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52345
52346 {&hf_ieee80211_tag_multiple_bssid_subelem_nontrans_profile,
52347 {"Nontransmitted Profile", "wlan.multiple_bssid.subelem.nontrans_profile",
52348 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52349 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52350
52351 /* 20/40 BSS Coexistence */
52352 {&hf_ieee80211_tag_20_40_bc,
52353 {"20/40 BSS Coexistence Flags", "wlan.20_40_bc",
52354 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
52355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52356
52357 {&hf_ieee80211_tag_20_40_bc_information_request,
52358 {"Information Request", "wlan.20_40_bc.information_request",
52359 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
52360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52361
52362 {&hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant,
52363 {"Forty MHz Intolerant", "wlan.20_40_bc.forty_mhz_intolerant",
52364 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
52365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52366
52367 {&hf_ieee80211_tag_20_40_bc_20_mhz_bss_width_request,
52368 {"20 MHz BSS Width Request", "wlan.20_40_bc.20_mhz_bss_width_request",
52369 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
52370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52371
52372 {&hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request,
52373 {"OBSS Scanning Exemption Request", "wlan.20_40_bc.obss_scanning_exemption_request",
52374 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
52375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52376
52377 {&hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant,
52378 {"OBSS Scanning Exemption Grant", "wlan.20_40_bc.obss_scanning_exemption_grant",
52379 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
52380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52381
52382 {&hf_ieee80211_tag_20_40_bc_reserved,
52383 {"Reserved", "wlan.20_40_bc.reserved",
52384 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
52385 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52386
52387 {&hf_ieee80211_tag_intolerant_operating_class,
52388 {"Intolerant Operating Class", "wlan.tag.intolerant.operating_class",
52389 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52390
52391 {&hf_ieee80211_tag_intolerant_channel_list,
52392 {"Intolerant Channel List", "wlan.tag.intolerant.channel_list",
52393 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52394
52395 {&hf_ieee80211_tag_intolerant_channel,
52396 {"Intolerant Channel", "wlan.tag.intolerant.channel",
52397 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52398
52399 {&hf_ieee80211_tag_power_constraint_local,
52400 {"Local Power Constraint", "wlan.powercon.local",
52401 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52402 "Value that allows the mitigation requirements to be satisfied in the current channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52403
52404 {&hf_ieee80211_tag_power_capability_min,
52405 {"Minimum Transmit Power", "wlan.powercap.min",
52406 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
52407 "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) }},
52408
52409 {&hf_ieee80211_tag_power_capability_max,
52410 {"Maximum Transmit Power", "wlan.powercap.max",
52411 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
52412 "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) }},
52413
52414 {&hf_ieee80211_tag_tpc_report_trsmt_pow,
52415 {"Transmit Power", "wlan.tpcrep.trsmt_pow",
52416 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
52417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52418
52419 {&hf_ieee80211_tag_tpc_report_link_mrg,
52420 {"Link Margin", "wlan.tpcrep.link_mrg",
52421 FT_INT8, BASE_DEC, NULL((void*)0), 0,
52422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52423
52424 {&hf_ieee80211_tag_tpc_report_reserved,
52425 {"Reserved", "wlan.tpcrep.reserved",
52426 FT_INT8, BASE_DEC, NULL((void*)0), 0,
52427 "TPC Link Margin field is reserved in a Beacon or Probe Response frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52428
52429 {&hf_ieee80211_tag_supported_channels,
52430 {"Supported Channels Set", "wlan.supchan",
52431 FT_NONE, BASE_NONE, NULL((void*)0), 0,
52432 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52433
52434 {&hf_ieee80211_tag_supported_channels_first,
52435 {"First Supported Channel", "wlan.supchan.first",
52436 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52437 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52438
52439 {&hf_ieee80211_tag_supported_channels_range,
52440 {"Supported Channel Range", "wlan.supchan.range",
52441 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52443
52444 {&hf_ieee80211_csa_channel_switch_mode,
52445 {"Channel Switch Mode", "wlan.csa.channel_switch_mode",
52446 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52447 "Indicates any restrictions on transmission until a channel switch", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52448
52449 {&hf_ieee80211_csa_new_channel_number,
52450 {"New Channel Number", "wlan.csa.new_channel_number",
52451 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52452 "Set to the number of the channel to which the STA is moving", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52453
52454 {&hf_ieee80211_csa_channel_switch_count,
52455 {"Channel Switch Count", "wlan.csa.channel_switch.count",
52456 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52457 "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) }},
52458
52459 {&hf_ieee80211_mesh_channel_switch_ttl,
52460 {"Mesh Channel Switch TTL", "wlan.csa.mesh_channel_switch.ttl",
52461 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52463
52464 {&hf_ieee80211_mesh_channel_switch_flag,
52465 {"Mesh Channel Switch Flag", "wlan.csa.mesh_channel_switch.flag",
52466 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52468
52469 {&hf_ieee80211_mesh_chswitch_flag_txrestrict,
52470 {"CSA Tx Restrict", "wlan.csa.mesh_channel_switch.flag.txrestrict",
52471 FT_BOOLEAN, 16, TFS(&csa_txrestrict_flags)((0 ? (const struct true_false_string*)0 : ((&csa_txrestrict_flags
))))
, 0x0001,
52472 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52473
52474 {&hf_ieee80211_mesh_chswitch_flag_initiator,
52475 {"CSA Initiator", "wlan.csa.mesh_channel_switch.flag.initiator",
52476 FT_BOOLEAN, 16, TFS(&csa_initiator_flags)((0 ? (const struct true_false_string*)0 : ((&csa_initiator_flags
))))
, 0x0002,
52477 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52478
52479 {&hf_ieee80211_mesh_channel_switch_reason_code,
52480 {"Mesh Channel Switch Reason Code", "wlan.csa.mesh_channel_switch.reason_code",
52481 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_reason_code_ext, 0,
52482 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52483
52484 {&hf_ieee80211_mesh_channel_switch_precedence_value,
52485 {"Mesh Channel Switch Precedence Value", "wlan.csa.mesh_channel_switch.pre_value",
52486 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
52487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52488
52489 {&hf_ieee80211_mesh_awake_window,
52490 {"Mesh Awake Window", "wlan.mesh.mesh_awake_window",
52491 FT_UINT16, BASE_CUSTOM, CF_FUNC(mesh_active_window_base_custom)((const void *) (size_t) (mesh_active_window_base_custom)), 0,
52492 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52493
52494 {&hf_ieee80211_tag_measure_request_token,
52495 {"Measurement Token", "wlan.measure.req.token",
52496 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52497 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52498
52499 {&hf_ieee80211_tag_measure_request_mode,
52500 {"Measurement Request Mode", "wlan.measure.req.mode",
52501 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52503
52504 {&hf_ieee80211_tag_measure_request_mode_parallel,
52505 {"Parallel", "wlan.measure.req.reqmode.parallel",
52506 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
52507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52508
52509 {&hf_ieee80211_tag_measure_request_mode_enable,
52510 {"Measurement Request Mode Field", "wlan.measure.req.reqmode.enable",
52511 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52513
52514 {&hf_ieee80211_tag_measure_request_mode_request,
52515 {"Measurement Reports", "wlan.measure.req.reqmode.request",
52516 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)((0 ? (const struct true_false_string*)0 : ((&tfs_accepted_not_accepted
))))
, 0x04,
52517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52518
52519 {&hf_ieee80211_tag_measure_request_mode_report,
52520 {"Autonomous Measurement Reports", "wlan.measure.req.reqmode.report",
52521 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)((0 ? (const struct true_false_string*)0 : ((&tfs_accepted_not_accepted
))))
, 0x08,
52522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52523
52524 {&hf_ieee80211_tag_measure_request_mode_duration_mandatory,
52525 {"Duration Mandatory", "wlan.measure.req.reqmode.duration_mandatory",
52526 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)((0 ? (const struct true_false_string*)0 : ((&tfs_accepted_not_accepted
))))
, 0x10,
52527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52528
52529 {&hf_ieee80211_tag_measure_request_mode_reserved,
52530 {"Reserved", "wlan.measure.req.reqmode.reserved",
52531 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
52532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52533
52534 {&hf_ieee80211_tag_measure_request_type,
52535 {"Measurement Request Type", "wlan.measure.req.reqtype",
52536 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_tag_measure_request_type_flags_ext, 0x00,
52537 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52538
52539 {&hf_ieee80211_tag_measure_request_channel_number,
52540 {"Measurement Channel Number", "wlan.measure.req.channelnumber",
52541 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom)((const void *) (size_t) (channel_number_custom)), 0,
52542 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52543
52544 {&hf_ieee80211_tag_measure_request_start_time,
52545 {"Measurement Start Time", "wlan.measure.req.starttime",
52546 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
52547 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52548
52549 {&hf_ieee80211_tag_measure_request_duration,
52550 {"Measurement Duration", "wlan.measure.req.duration",
52551 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52552 "in TU (1 TU = 1024 us)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52553
52554 {&hf_ieee80211_tag_measure_request_operating_class,
52555 {"Operating Class", "wlan.measure.req.operatingclass",
52556 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52557 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52558
52559 {&hf_ieee80211_tag_measure_request_randomization_interval,
52560 {"Randomization Interval", "wlan.measure.req.randint",
52561 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52562 "in TU (1 TU = 1024 us)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52563
52564 {&hf_ieee80211_tag_measure_request_measurement_mode,
52565 {"Measurement Mode", "wlan.measure.req.measurementmode",
52566 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,
52567 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52568
52569 {&hf_ieee80211_tag_measure_request_bssid,
52570 {"BSSID", "wlan.measure.req.bssid",
52571 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
52572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52573
52574 {&hf_ieee80211_tag_measure_request_subelement_length,
52575 {"Length", "wlan.measure.req.sub.length",
52576 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52578
52579 {&hf_ieee80211_tag_measure_request_beacon_sub_id,
52580 {"SubElement ID", "wlan.measure.req.beacon.sub.id",
52581 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,
52582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52583
52584 {&hf_ieee80211_tag_measure_request_beacon_sub_ssid,
52585 {"SSID", "wlan.measure.req.beacon.sub.ssid",
52586 FT_STRING, BASE_NONE, NULL((void*)0), 0,
52587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52588
52589 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition,
52590 {"Reporting Condition", "wlan.measure.req.beacon.sub.bri.repcond",
52591 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,
52592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52593
52594 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset,
52595 {"Threshold/Offset", "wlan.measure.req.beacon.sub.bri.threshold_offset",
52596 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52597 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52598
52599 {&hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail,
52600 {"Reporting Detail", "wlan.measure.req.beacon.sub.bri.reporting_detail",
52601 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,
52602 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52603
52604 {&hf_ieee80211_tag_measure_request_beacon_sub_last_report_indication_request,
52605 {"Request Indication", "wlan.measure.req.beacon.sub.last_report_ind_req",
52606 FT_BOOLEAN, BASE_NONE, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0,
52607 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52608
52609 {&hf_ieee80211_tag_measure_request_beacon_unknown,
52610 {"Unknown Data", "wlan.measure.req.beacon.unknown",
52611 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52612 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52613
52614 {&hf_ieee80211_tag_measure_request_channel_load_sub_id,
52615 {"SubElement ID", "wlan.measure.req.channel_load.sub.id",
52616 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,
52617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52618
52619 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition,
52620 {"Reporting Condition", "wlan.measure.req.channel_load.sub.repcond",
52621 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,
52622 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52623
52624 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref,
52625 {"Reference Value", "wlan.measure.req.channel_load.sub.ref",
52626 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52628
52629
52630 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_id,
52631 {"SubElement ID", "wlan.measure.req.noise_histogram.sub.id",
52632 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,
52633 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52634
52635 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition,
52636 {"Reporting Condition", "wlan.measure.reqnoise_histogram.sub.repcond",
52637 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,
52638 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52639
52640 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref,
52641 {"ANPI Reference Value", "wlan.measure.req.noise_histogram.sub.anpiref",
52642 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52643 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52644
52645
52646 {&hf_ieee80211_tag_measure_request_frame_request_type,
52647 {"Frame Request Type", "wlan.measure.req.frame_request_type",
52648 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52649 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52650
52651 {&hf_ieee80211_tag_measure_request_mac_address,
52652 {"MAC Address", "wlan.measure.req.mac_address",
52653 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52654 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52655
52656 {&hf_ieee80211_tag_measure_request_peer_mac_address,
52657 {"Peer MAC Address", "wlan.measure.req.peer_mac_address",
52658 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52659 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52660
52661 {&hf_ieee80211_tag_measure_request_group_id,
52662 {"Group ID", "wlan.measure.req.groupid",
52663 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_tag_measure_request_group_id_flags_ext, 0,
52664 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52665
52666 {&hf_ieee80211_tag_measure_request_location_subject,
52667 {"Location Subject", "wlan.measure.req.location_subject",
52668 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_location_subject)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_location_subject
))))
, 0,
52669 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52670
52671 {&hf_ieee80211_tag_measure_request_civic_location_type,
52672 {"Civic Location Type", "wlan.measure.req.location_type",
52673 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,
52674 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52675
52676 {&hf_ieee80211_tag_measure_request_location_service_interval_units,
52677 {"Location Service Interval Units", "wlan.measure.req.location_service_interval_units",
52678 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52679 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52680
52681 {&hf_ieee80211_tag_measure_request_location_service_interval,
52682 {"Location Service Interval", "wlan.measure.req.location_service_interval",
52683 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
52684 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52685
52686 {&hf_ieee80211_tag_measure_request_unknown,
52687 {"Unknown Data", "wlan.measure.req.unknown",
52688 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52689 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52690
52691 {&hf_ieee80211_tag_measure_report_measurement_token,
52692 {"Measurement Token", "wlan.measure.rep.token",
52693 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52694 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52695
52696 {&hf_ieee80211_tag_measure_report_mode,
52697 {"Measurement Report Mode", "wlan.measure.rep.mode",
52698 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52699 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52700
52701 {&hf_ieee80211_tag_measure_report_mode_late,
52702 {"Late", "wlan.measure.rep.repmode.late",
52703 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x01,
52704 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52705
52706 {&hf_ieee80211_tag_measure_report_mode_incapable,
52707 {"Incapable", "wlan.measure.rep.repmode.incapable",
52708 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x02,
52709 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52710
52711 {&hf_ieee80211_tag_measure_report_mode_refused,
52712 {"Refused", "wlan.measure.rep.repmode.refused",
52713 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x04,
52714 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52715
52716 {&hf_ieee80211_tag_measure_report_mode_reserved,
52717 {"Reserved", "wlan.measure.rep.repmode.reserved",
52718 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf8,
52719 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52720
52721 {&hf_ieee80211_tag_measure_report_type,
52722 {"Measurement Report Type", "wlan.measure.rep.reptype",
52723 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_tag_measure_report_type_flags_ext, 0x00,
52724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52725
52726 {&hf_ieee80211_tag_measure_report_channel_number,
52727 {"Measurement Channel Number", "wlan.measure.rep.channelnumber",
52728 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom)((const void *) (size_t) (channel_number_custom)), 0,
52729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52730
52731 {&hf_ieee80211_tag_measure_report_start_time,
52732 {"Measurement Start Time", "wlan.measure.rep.starttime",
52733 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
52734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52735
52736 {&hf_ieee80211_tag_measure_report_duration,
52737 {"Measurement Duration", "wlan.measure.rep.duration",
52738 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52740
52741 {&hf_ieee80211_tag_measure_report_beacon_unknown,
52742 {"Unknown Data", "wlan.measure.rep.beacon.unknown",
52743 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52744 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52745
52746 {&hf_ieee80211_tag_measure_reported_frame_frag_id,
52747 {"Fragment ID", "wlan.measure.rep.beacon.frag_id",
52748 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52749 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
52750
52751 {&hf_ieee80211_tag_measure_reported_frame_frag_rep_id,
52752 {"Beacon Report ID", "wlan.measure.rep.beacon.frag_id.report_id",
52753 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00ff,
52754 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
52755
52756 {&hf_ieee80211_tag_measure_reported_frame_frag_number,
52757 {"Fragment ID Number", "wlan.measure.rep.beacon.frag_id.number",
52758 FT_UINT16, BASE_HEX, NULL((void*)0), 0x7f00,
52759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
52760
52761 {&hf_ieee80211_tag_measure_reported_frame_frag_more,
52762 {"More Frame Body Fragments", "wlan.measure.rep.beacon.frag_id.more",
52763 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000,
52764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
52765
52766 {&hf_ieee80211_tag_measure_cca_busy_fraction,
52767 {"CCA Busy Fraction", "wlan.measure.rep.ccabusy",
52768 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52770
52771 {&hf_ieee80211_tag_measure_basic_map_field,
52772 {"Map Field", "wlan.measure.rep.mapfield",
52773 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52774 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52775
52776 {&hf_ieee80211_tag_measure_map_field_bss,
52777 {"BSS", "wlan.measure.rep.repmode.mapfield.bss",
52778 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,
52779 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52780
52781 {&hf_ieee80211_tag_measure_map_field_ofdm,
52782 {"Orthogonal Frequency Division Multiplexing (OFDM) Preamble", "wlan.measure.rep.repmode.mapfield.ofdm_preamble",
52783 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)((0 ? (const struct true_false_string*)0 : ((&tfs_detected_not_detected
))))
, 0x02,
52784 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52785
52786 {&hf_ieee80211_tag_measure_map_field_unident_signal,
52787 {"Unidentified Signal", "wlan.measure.rep.repmode.mapfield.unidentsig",
52788 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)((0 ? (const struct true_false_string*)0 : ((&tfs_detected_not_detected
))))
, 0x04,
52789 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52790
52791 {&hf_ieee80211_tag_measure_map_field_radar,
52792 {"Radar", "wlan.measure.rep.repmode.mapfield.radar",
52793 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)((0 ? (const struct true_false_string*)0 : ((&tfs_detected_not_detected
))))
, 0x08,
52794 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52795
52796 {&hf_ieee80211_tag_measure_map_field_unmeasured,
52797 {"Unmeasured", "wlan.measure.rep.repmode.mapfield.unmeasured",
52798 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
52799 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52800
52801 {&hf_ieee80211_tag_measure_map_field_reserved,
52802 {"Reserved", "wlan.measure.rep.repmode.mapfield.reserved",
52803 FT_UINT8, BASE_HEX, NULL((void*)0), 0xe0,
52804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52805
52806 {&hf_ieee80211_tag_measure_rpi_histogram_report,
52807 {"Receive Power Indicator (RPI) Histogram Report", "wlan.measure.rep.rpi.histogram_report",
52808 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52810
52811 {&hf_ieee80211_tag_measure_rpi_histogram_report_0,
52812 {"RPI 0 Density", "wlan.measure.rep.rpi.rpi0density",
52813 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52814 "Receive Power Indicator (RPI) 0 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52815
52816 {&hf_ieee80211_tag_measure_rpi_histogram_report_1,
52817 {"RPI 1 Density", "wlan.measure.rep.rpi.rpi1density",
52818 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52819 "Receive Power Indicator (RPI) 1 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52820
52821 {&hf_ieee80211_tag_measure_rpi_histogram_report_2,
52822 {"RPI 2 Density", "wlan.measure.rep.rpi.rpi2density",
52823 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52824 "Receive Power Indicator (RPI) 2 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52825
52826 {&hf_ieee80211_tag_measure_rpi_histogram_report_3,
52827 {"RPI 3 Density", "wlan.measure.rep.rpi.rpi3density",
52828 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52829 "Receive Power Indicator (RPI) 3 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52830
52831 {&hf_ieee80211_tag_measure_rpi_histogram_report_4,
52832 {"RPI 4 Density", "wlan.measure.rep.rpi.rpi4density",
52833 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52834 "Receive Power Indicator (RPI) 4 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52835
52836 {&hf_ieee80211_tag_measure_rpi_histogram_report_5,
52837 {"RPI 5 Density", "wlan.measure.rep.rpi.rpi5density",
52838 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52839 "Receive Power Indicator (RPI) 5 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52840
52841 {&hf_ieee80211_tag_measure_rpi_histogram_report_6,
52842 {"RPI 6 Density", "wlan.measure.rep.rpi.rpi6density",
52843 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52844 "Receive Power Indicator (RPI) 6 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52845
52846 {&hf_ieee80211_tag_measure_rpi_histogram_report_7,
52847 {"RPI 7 Density", "wlan.measure.rep.rpi.rpi7density",
52848 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52849 "Receive Power Indicator (RPI) 7 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52850
52851 {&hf_ieee80211_tag_measure_report_operating_class,
52852 {"Operating Class", "wlan.measure.rep.operatingclass",
52853 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52855
52856 {&hf_ieee80211_tag_measure_report_channel_load,
52857 {"Channel Load", "wlan.measure.rep.chanload",
52858 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52860
52861 {&hf_ieee80211_tag_measure_report_frame_info,
52862 {"Reported Frame Information", "wlan.measure.rep.frameinfo",
52863 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52865
52866 {&hf_ieee80211_tag_measure_report_frame_info_phy_type,
52867 {"Condensed PHY", "wlan.measure.rep.frameinfo.phytype",
52868 FT_UINT8, BASE_HEX, NULL((void*)0), 0x7F,
52869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52870
52871 {&hf_ieee80211_tag_measure_report_frame_info_frame_type,
52872 {"Reported Frame Type", "wlan.measure.rep.frameinfo.frametype",
52873 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,
52874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52875
52876 {&hf_ieee80211_tag_measure_report_rcpi,
52877 {"Received Channel Power Indicator (RCPI)", "wlan.measure.rep.rcpi",
52878 FT_UINT8, BASE_CUSTOM, CF_FUNC(rcpi_and_power_level_custom)((const void *) (size_t) (rcpi_and_power_level_custom)), 0,
52879 "in dBm", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52880
52881 {&hf_ieee80211_tag_measure_report_rsni,
52882 {"Received Signal to Noise Indicator (RSNI)", "wlan.measure.rep.rsni",
52883 FT_UINT8, BASE_CUSTOM, CF_FUNC(rsni_base_custom)((const void *) (size_t) (rsni_base_custom)), 0,
52884 "in dB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52885
52886 {&hf_ieee80211_tag_measure_report_bssid,
52887 {"BSSID Being Reported", "wlan.measure.rep.bssid",
52888 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
52889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52890
52891 {&hf_ieee80211_tag_measure_report_ant_id,
52892 {"Antenna ID", "wlan.measure.rep.antid",
52893 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52895
52896 {&hf_ieee80211_tag_measure_report_anpi,
52897 {"ANPI", "wlan.measure.rep.anpi",
52898 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52900
52901 {&hf_ieee80211_tag_measure_report_ipi_density_0,
52902 {"IPI Density 0", "wlan.measure.rep.ipi_density0",
52903 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52905
52906 {&hf_ieee80211_tag_measure_report_ipi_density_1,
52907 {"IPI Density 1", "wlan.measure.rep.ipi_density1",
52908 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52910
52911 {&hf_ieee80211_tag_measure_report_ipi_density_2,
52912 {"IPI Density 2", "wlan.measure.rep.ipi_density2",
52913 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52915
52916 {&hf_ieee80211_tag_measure_report_ipi_density_3,
52917 {"IPI Density 3", "wlan.measure.rep.ipi_density3",
52918 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52920
52921 {&hf_ieee80211_tag_measure_report_ipi_density_4,
52922 {"IPI Density 4", "wlan.measure.rep.ipi_density4",
52923 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52925
52926 {&hf_ieee80211_tag_measure_report_ipi_density_5,
52927 {"IPI Density 5", "wlan.measure.rep.ipi_density5",
52928 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52930
52931 {&hf_ieee80211_tag_measure_report_ipi_density_6,
52932 {"IPI Density 6", "wlan.measure.rep.ipi_density6",
52933 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52935
52936 {&hf_ieee80211_tag_measure_report_ipi_density_7,
52937 {"IPI Density 7", "wlan.measure.rep.ipi_density7",
52938 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52940
52941 {&hf_ieee80211_tag_measure_report_ipi_density_8,
52942 {"IPI Density 8", "wlan.measure.rep.ipi_density8",
52943 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52945
52946 {&hf_ieee80211_tag_measure_report_ipi_density_9,
52947 {"IPI Density 9", "wlan.measure.rep.ipi_density9",
52948 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52950
52951 {&hf_ieee80211_tag_measure_report_ipi_density_10,
52952 {"IPI Density 10", "wlan.measure.rep.ipi_density10",
52953 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52955
52956 {&hf_ieee80211_tag_measure_report_parent_tsf,
52957 {"Parent Timing Synchronization Function (TSF)", "wlan.measure.rep.parenttsf",
52958 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
52959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52960
52961 {&hf_ieee80211_tag_measure_report_subelement_length,
52962 {"Length", "wlan.measure.rep.sub.length",
52963 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52965
52966 {&hf_ieee80211_tag_measure_report_beacon_sub_id,
52967 {"SubElement ID", "wlan.measure.rep.beacon.sub.id",
52968 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,
52969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52970
52971 {&hf_ieee80211_tag_measure_report_unknown,
52972 {"Unknown Data", "wlan.measure.rep.unknown",
52973 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52974 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52975
52976 {&hf_ieee80211_tag_measure_report_beacon_sub_last_report_indication,
52977 {"Last Report", "wlan.measure.rep.beacon.sub.last_report",
52978 FT_BOOLEAN, BASE_NONE, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0,
52979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52980
52981 {&hf_ieee80211_tag_measure_report_lci_sub_id,
52982 {"SubElement ID", "wlan.measure.rep.lci.sub.id",
52983 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,
52984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52985
52986 {&hf_ieee80211_tag_measure_report_lci_lci,
52987 {"LCI", "wlan.measure.rep.lci.lci",
52988 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52989 "Location Configuration Information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52990
52991 {&hf_ieee80211_tag_measure_report_lci_z_sta_floor_info,
52992 {"STA Floor Info", "wlan.measure.rep.lci.z.sta_floor_info",
52993 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
52994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52995
52996 {&hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_expected_to_move,
52997 {"Expected To Move", "wlan.measure.rep.lci.z.sta_floor_info.expected_to_move",
52998 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
52999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53000
53001 {&hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_sta_floor_number,
53002 {"STA Floor Number", "wlan.measure.rep.lci.z.sta_floor_info.sta_floor_number",
53003 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFFC,
53004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53005
53006 {&hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor,
53007 {"STA Height Above Floor", "wlan.measure.rep.lci.z.sta_height_above_floor",
53008 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
53009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53010
53011 {&hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor_uncertainty,
53012 {"STA Height Above Floor Uncertainty", "wlan.measure.rep.lci.z.sta_height_above_floor_uncertainty",
53013 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
53014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53015
53016 {&hf_ieee80211_tag_measure_report_lci_urp,
53017 {"Usage Rules/Policy Parameters", "wlan.measure.rep.lci.urp",
53018 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
53019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53020
53021 {&hf_ieee80211_tag_measure_report_lci_urp_retransmission_allowed,
53022 {"Retransmission Allowed", "wlan.measure.rep.lci.urp.retransmission_allowed",
53023 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53025
53026 {&hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative_present,
53027 {"Retention Expires Relative Present", "wlan.measure.rep.lci.urp.retention_expires_relative_present",
53028 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53030
53031 {&hf_ieee80211_tag_measure_report_lci_urp_sta_location_policy,
53032 {"STA Location Policy", "wlan.measure.rep.lci.urp.sta_location_policy",
53033 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53035
53036 {&hf_ieee80211_tag_measure_report_lci_urp_reserved,
53037 {"Reserved", "wlan.measure.rep.lci.urp.reserved",
53038 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
53039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53040
53041 {&hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative,
53042 {"Retention Expires Relative", "wlan.measure.rep.lci.urp.retention_expires_relative",
53043 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
53044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53045
53046 {&hf_ieee80211_tag_measure_report_lci_unknown,
53047 {"Unknown Data", "wlan.measure.rep.lci.unknown",
53048 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53049 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53050
53051 {&hf_ieee80211_tag_measure_report_civic_location_type,
53052 {"Civic Location Type", "wlan.measure.rep.location_subject",
53053 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,
53054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53055
53056 {&hf_ieee80211_tag_measure_report_civic_sub_id,
53057 {"SubElement ID", "wlan.measure.rep.civic.sub.id",
53058 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,
53059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53060
53061 {&hf_ieee80211_tag_measure_report_location_civic_country,
53062 {"Country", "wlan.measure.rep.civic.sub.country",
53063 FT_STRING, BASE_NONE, NULL((void*)0), 0,
53064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53065
53066 {&hf_ieee80211_tag_measure_report_location_civic_type,
53067 {"Type", "wlan.measure.rep.civic.sub.type",
53068 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53070
53071 {&hf_ieee80211_tag_measure_report_location_civic_length,
53072 {"Length", "wlan.measure.rep.civic.sub.length",
53073 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53075
53076 {&hf_ieee80211_tag_measure_report_location_civic,
53077 {"Location Civic", "wlan.measure.rep.civic.sub.location_civic",
53078 FT_STRING, BASE_NONE, NULL((void*)0), 0,
53079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53080
53081 {&hf_ieee80211_tag_quiet_count,
53082 {"Count", "wlan.quiet.count",
53083 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53084 "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) }},
53085
53086 {&hf_ieee80211_tag_quiet_period,
53087 {"Period", "wlan.quiet.period",
53088 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53089 "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) }},
53090
53091 {&hf_ieee80211_tag_quiet_duration,
53092 {"Duration", "wlan.quiet.duration",
53093 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53094 "Set to the duration of the quiet interval", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53095
53096 {&hf_ieee80211_tag_quiet_offset,
53097 {"Offset", "wlan.quiet.offset",
53098 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53099 "Set to the offset of the start of the quiet interval from the TBTT", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53100
53101 {&hf_ieee80211_tag_dfs_owner,
53102 {"Owner", "wlan.dfs.owner",
53103 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
53104 "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) }},
53105
53106 {&hf_ieee80211_tag_dfs_recovery_interval,
53107 {"Recovery Interval", "wlan.dfs.recovery_interval",
53108 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53109 "Indicates the time interval that shall be used for DFS owner recovery", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53110
53111 {&hf_ieee80211_tag_dfs_channel_map,
53112 {"Channel Map", "wlan.dfs.channel_map",
53113 FT_NONE, BASE_NONE, NULL((void*)0), 0,
53114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53115
53116 {&hf_ieee80211_tag_dfs_channel_number,
53117 {"Channel Number", "wlan.dfs.channel_number",
53118 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53119 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53120
53121 {&hf_ieee80211_tag_dfs_map,
53122 {"Map", "wlan.dfs.map",
53123 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53125
53126 {&hf_ieee80211_tag_erp_info,
53127 {"ERP Information", "wlan.erp_info",
53128 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53130
53131 {&hf_ieee80211_tag_erp_info_erp_present,
53132 {"Non ERP Present", "wlan.erp_info.erp_present",
53133 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
53134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53135
53136 {&hf_ieee80211_tag_erp_info_use_protection,
53137 {"Use Protection", "wlan.erp_info.use_protection",
53138 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
53139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53140
53141 {&hf_ieee80211_tag_erp_info_barker_preamble_mode,
53142 {"Barker Preamble Mode", "wlan.erp_info.barker_preamble_mode",
53143 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
53144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53145
53146 {&hf_ieee80211_tag_erp_info_reserved,
53147 {"Reserved", "wlan.erp_info.reserved",
53148 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
53149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53150
53151 /* IEEE Std 802.11 2016 */
53152 /* Table 9-135-Extended Capabilities field */
53153 {&hf_ieee80211_tag_extended_capabilities,
53154 {"Extended Capabilities", "wlan.extcap",
53155 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53156 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53157
53158 /* Extended Capability octet 1 */
53159 {&hf_ieee80211_tag_extended_capabilities_b0,
53160 {"20/40 BSS Coexistence Management Support", "wlan.extcap.b0",
53161 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53162 "HT Information Exchange Support", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53163
53164 {&hf_ieee80211_tag_extended_capabilities_b1,
53165 {"General Link (GLK)", "wlan.extcap.b1",
53166 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
53167 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53168
53169 {&hf_ieee80211_tag_extended_capabilities_b2,
53170 {"Extended Channel Switching", "wlan.extcap.b2",
53171 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53172 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53173
53174 {&hf_ieee80211_tag_extended_capabilities_b3,
53175 {"GLK-GCR", "wlan.extcap.b3",
53176 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53177 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53178
53179 {&hf_ieee80211_tag_extended_capabilities_b4,
53180 {"PSMP Capability", "wlan.extcap.b4",
53181 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53182 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53183
53184 {&hf_ieee80211_tag_extended_capabilities_b5,
53185 {"Reserved", "wlan.extcap.b5",
53186 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20,
53187 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53188
53189 {&hf_ieee80211_tag_extended_capabilities_b6,
53190 {"S-PSMP Support", "wlan.extcap.b6",
53191 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53192 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53193
53194 {&hf_ieee80211_tag_extended_capabilities_b7,
53195 {"Event", "wlan.extcap.b7",
53196 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53197 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53198
53199
53200 /* Extended Capability octet 2 */
53201 {&hf_ieee80211_tag_extended_capabilities_b8,
53202 {"Diagnostics", "wlan.extcap.b8",
53203 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53204 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53205
53206 {&hf_ieee80211_tag_extended_capabilities_b9,
53207 {"Multicast Diagnostics", "wlan.extcap.b9",
53208 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53209 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53210
53211 {&hf_ieee80211_tag_extended_capabilities_b10,
53212 {"Location Tracking", "wlan.extcap.b10",
53213 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53214 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53215
53216 {&hf_ieee80211_tag_extended_capabilities_b11,
53217 {"FMS", "wlan.extcap.b11",
53218 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
53219 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53220
53221 {&hf_ieee80211_tag_extended_capabilities_b12,
53222 {"Proxy ARP Service", "wlan.extcap.b12",
53223 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53224 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53225
53226 {&hf_ieee80211_tag_extended_capabilities_b13,
53227 {"Colocated Interference Reporting", "wlan.extcap.b13",
53228 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53229 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53230
53231 {&hf_ieee80211_tag_extended_capabilities_b14,
53232 {"Civic Location", "wlan.extcap.b14",
53233 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53234 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53235
53236 {&hf_ieee80211_tag_extended_capabilities_b15,
53237 {"Geospatial Location", "wlan.extcap.b15",
53238 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53239 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53240
53241
53242 /* Extended Capability octet 3 */
53243 {&hf_ieee80211_tag_extended_capabilities_b16,
53244 {"TFS", "wlan.extcap.b16",
53245 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53246 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53247
53248 {&hf_ieee80211_tag_extended_capabilities_b17,
53249 {"WNM Sleep Mode", "wlan.extcap.b17",
53250 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53251 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53252
53253 {&hf_ieee80211_tag_extended_capabilities_b18,
53254 {"TIM Broadcast", "wlan.extcap.b18",
53255 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53257
53258 {&hf_ieee80211_tag_extended_capabilities_b19,
53259 {"BSS Transition", "wlan.extcap.b19",
53260 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
53261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53262
53263 {&hf_ieee80211_tag_extended_capabilities_b20,
53264 {"QoS Traffic Capability", "wlan.extcap.b20",
53265 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53266 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53267
53268 {&hf_ieee80211_tag_extended_capabilities_b21,
53269 {"AC Station Count", "wlan.extcap.b21",
53270 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53271 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53272
53273 {&hf_ieee80211_tag_extended_capabilities_b22,
53274 {"Multiple BSSID", "wlan.extcap.b22",
53275 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53276 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53277
53278 {&hf_ieee80211_tag_extended_capabilities_b23,
53279 {"Timing Measurement", "wlan.extcap.b23",
53280 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53282
53283
53284 /* Extended Capability octet 4 */
53285 {&hf_ieee80211_tag_extended_capabilities_b24,
53286 {"Channel Usage", "wlan.extcap.b24",
53287 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53288 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53289
53290 {&hf_ieee80211_tag_extended_capabilities_b25,
53291 {"SSID List", "wlan.extcap.b25",
53292 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53293 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53294
53295 {&hf_ieee80211_tag_extended_capabilities_b26,
53296 {"DMS", "wlan.extcap.b26",
53297 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53298 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53299
53300 {&hf_ieee80211_tag_extended_capabilities_b27,
53301 {"UTC TSF Offset", "wlan.extcap.b27",
53302 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
53303 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53304
53305 {&hf_ieee80211_tag_extended_capabilities_b28,
53306 {"TPU Buffer STA Support", "wlan.extcap.b28",
53307 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53308 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53309
53310 {&hf_ieee80211_tag_extended_capabilities_b29,
53311 {"TDLS Peer PSM Support", "wlan.extcap.b29",
53312 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53313 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53314
53315 {&hf_ieee80211_tag_extended_capabilities_b30,
53316 {"TDLS Channel Switching", "wlan.extcap.b30",
53317 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53318 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53319
53320 {&hf_ieee80211_tag_extended_capabilities_b31,
53321 {"Interworking", "wlan.extcap.b31",
53322 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53323 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53324
53325
53326 /* Extended Capability octet 5 */
53327 {&hf_ieee80211_tag_extended_capabilities_b32,
53328 {"QoS Map", "wlan.extcap.b32",
53329 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53331
53332 {&hf_ieee80211_tag_extended_capabilities_b33,
53333 {"EBR", "wlan.extcap.b33",
53334 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53336
53337 {&hf_ieee80211_tag_extended_capabilities_b34,
53338 {"SSPN Interface", "wlan.extcap.b34",
53339 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53340 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53341
53342 {&hf_ieee80211_tag_extended_capabilities_b35,
53343 {"Reserved", "wlan.extcap.b35",
53344 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53345 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53346
53347 {&hf_ieee80211_tag_extended_capabilities_b36,
53348 {"MSGCF Capability", "wlan.extcap.b36",
53349 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53350 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53351
53352 {&hf_ieee80211_tag_extended_capabilities_b37,
53353 {"TDLS Support", "wlan.extcap.b37",
53354 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53356
53357 {&hf_ieee80211_tag_extended_capabilities_b38,
53358 {"TDLS Prohibited", "wlan.extcap.b38",
53359 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53361
53362 {&hf_ieee80211_tag_extended_capabilities_b39,
53363 {"TDLS Channel Switching Prohibited", "wlan.extcap.b39",
53364 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53366
53367 /* Extended Capability octet 6 */
53368 {&hf_ieee80211_tag_extended_capabilities_b40,
53369 {"Reject Unadmitted Frame", "wlan.extcap.b40",
53370 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53371 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53372
53373 {&hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
53374 {"Service Interval Granularity",
53375 "wlan.extcap.serv_int_granularity",
53376 FT_UINT8, BASE_DEC, VALS(service_interval_granularity_vals)((0 ? (const struct _value_string*)0 : ((service_interval_granularity_vals
))))
, 0x0e,
53377 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53378
53379 {&hf_ieee80211_tag_extended_capabilities_b44,
53380 {"Identifier Location", "wlan.extcap.b44",
53381 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53382 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53383
53384 {&hf_ieee80211_tag_extended_capabilities_b45,
53385 {"U-APSD Coexistence", "wlan.extcap.b45",
53386 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53387 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53388
53389 {&hf_ieee80211_tag_extended_capabilities_b46,
53390 {"WNM Notification", "wlan.extcap.b46",
53391 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53392 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53393
53394 {&hf_ieee80211_tag_extended_capabilities_b47,
53395 {"QAB Capability", "wlan.extcap.b47",
53396 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
53397 "AP supports QAB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53398
53399 /* Extended Capability octet 7 */
53400 {&hf_ieee80211_tag_extended_capabilities_b48,
53401 {"UTF-8 SSID", "wlan.extcap.b48",
53402 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53403 "The SSID in this BSS is interpreted using UTF-8 encoding", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53404
53405 {&hf_ieee80211_tag_extended_capabilities_b49,
53406 {"QMF Activated", "wlan.extcap.b49",
53407 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53408 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53409
53410 {&hf_ieee80211_tag_extended_capabilities_b50,
53411 {"QMF Reconfiguration Activated", "wlan.extcap.b50",
53412 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53413 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53414
53415 {&hf_ieee80211_tag_extended_capabilities_b51,
53416 {"Robust AV Streaming", "wlan.extcap.b51",
53417 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
53418 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53419
53420 {&hf_ieee80211_tag_extended_capabilities_b52,
53421 {"Advanced GCR", "wlan.extcap.b52",
53422 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53423 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53424
53425 {&hf_ieee80211_tag_extended_capabilities_b53,
53426 {"Mesh GCR", "wlan.extcap.b53",
53427 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
53428 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53429
53430 {&hf_ieee80211_tag_extended_capabilities_b54,
53431 {"SCS", "wlan.extcap.b54",
53432 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
53433 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53434
53435 {&hf_ieee80211_tag_extended_capabilities_b55,
53436 {"QLoad Report", "wlan.extcap.b55",
53437 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
53438 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53439
53440 /* Extended Capability octet 8 */
53441 {&hf_ieee80211_tag_extended_capabilities_b56,
53442 {"Alternate EDCA", "wlan.extcap.b56",
53443 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53444 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53445
53446 {&hf_ieee80211_tag_extended_capabilities_b57,
53447 {"Unprotected TXOP Negotiation", "wlan.extcap.b57",
53448 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53449 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53450
53451 {&hf_ieee80211_tag_extended_capabilities_b58,
53452 {"Protected TXOP Negotiation", "wlan.extcap.b58",
53453 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53454 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53455
53456 {&hf_ieee80211_tag_extended_capabilities_b59,
53457 {"Reserved", "wlan.extcap.b59",
53458 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53459 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53460
53461 {&hf_ieee80211_tag_extended_capabilities_b60,
53462 {"Protected QLoad Report", "wlan.extcap.b60",
53463 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53464 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53465
53466 {&hf_ieee80211_tag_extended_capabilities_b61,
53467 {"TDLS Wider Bandwidth", "wlan.extcap.b61",
53468 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53469 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53470
53471 {&hf_ieee80211_tag_extended_capabilities_b62,
53472 {"Operating Mode Notification", "wlan.extcap.b62",
53473 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53474 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53475
53476 {&hf_ieee80211_tag_extended_capabilities_b63,
53477 {"Max Number Of MSDUs In A-MSDU", "wlan.extcap.b63",
53478 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
53479 "Part 1 (bit63)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53480
53481 /* Extended Capability octets 8 & 9 */
53482 {&hf_ieee80211_tag_extended_capabilities_2,
53483 {"Extended Capabilities", "wlan.extcap",
53484 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
53485 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53486
53487 {&hf_ieee80211_tag_extended_capabilities_b56_2,
53488 {"Alternate EDCA", "wlan.extcap.b56",
53489 FT_BOOLEAN, 16, NULL((void*)0), 0x0001,
53490 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53491
53492 {&hf_ieee80211_tag_extended_capabilities_b57_2,
53493 {"Unprotected TXOP Negotiation", "wlan.extcap.b57",
53494 FT_BOOLEAN, 16, NULL((void*)0), 0x0002,
53495 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53496
53497 {&hf_ieee80211_tag_extended_capabilities_b58_2,
53498 {"Protected TXOP Negotiation", "wlan.extcap.b58",
53499 FT_BOOLEAN, 16, NULL((void*)0), 0x0004,
53500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53501
53502 {&hf_ieee80211_tag_extended_capabilities_b59_2,
53503 {"Reserved", "wlan.extcap.b59",
53504 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0008,
53505 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53506
53507 {&hf_ieee80211_tag_extended_capabilities_b60_2,
53508 {"Protected QLoad Report", "wlan.extcap.b60",
53509 FT_BOOLEAN, 16, NULL((void*)0), 0x0010,
53510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53511
53512 {&hf_ieee80211_tag_extended_capabilities_b61_2,
53513 {"TDLS Wider Bandwidth", "wlan.extcap.b61",
53514 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0020,
53515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53516
53517 {&hf_ieee80211_tag_extended_capabilities_b62_2,
53518 {"Operating Mode Notification", "wlan.extcap.b62",
53519 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040,
53520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53521
53522 {&hf_ieee80211_tag_extended_capabilities_max_num_msdus,
53523 {"Max Number Of MSDUs In A-MSDU", "wlan.extcap.b63",
53524 FT_UINT16, BASE_DEC, VALS(vht_max_mpdu_in_amsdu)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_in_amsdu
))))
, 0x0180,
53525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53526
53527 {&hf_ieee80211_tag_extended_capabilities_b65_2,
53528 {"Channel Schedule Management", "wlan.extcap.b65",
53529 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
53530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53531
53532 {&hf_ieee80211_tag_extended_capabilities_b66_2,
53533 {"Geodatabase Inband Enabling Signal", "wlan.extcap.b66",
53534 FT_BOOLEAN, 16, NULL((void*)0), 0x0400,
53535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53536
53537 {&hf_ieee80211_tag_extended_capabilities_b67_2,
53538 {"Network Channel Control", "wlan.extcap.b67",
53539 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
53540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53541
53542 {&hf_ieee80211_tag_extended_capabilities_b68_2,
53543 {"White Space Map", "wlan.extcap.b68",
53544 FT_BOOLEAN, 16, NULL((void*)0), 0x1000,
53545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53546
53547 {&hf_ieee80211_tag_extended_capabilities_b69_2,
53548 {"Channel Availability Query", "wlan.extcap.b69",
53549 FT_BOOLEAN, 16, NULL((void*)0), 0x2000,
53550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53551
53552 {&hf_ieee80211_tag_extended_capabilities_b70_2,
53553 {"Fine Timing Measurement Responder", "wlan.extcap.b70",
53554 FT_BOOLEAN, 16, NULL((void*)0), 0x4000,
53555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53556
53557 {&hf_ieee80211_tag_extended_capabilities_b71_2,
53558 {"Fine Timing Measurement Initiator", "wlan.extcap.b71",
53559 FT_BOOLEAN, 16, NULL((void*)0), 0x8000,
53560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53561
53562 /* Extended Capability Octet 10 */
53563 {&hf_ieee80211_tag_extended_capabilities_b72,
53564 {"FILS Capability", "wlan.extcap.b72",
53565 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53566 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53567
53568 {&hf_ieee80211_tag_extended_capabilities_b73,
53569 {"Extended Spectrum Management Capable", "wlan.extcap.b73",
53570 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53571 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53572
53573 {&hf_ieee80211_tag_extended_capabilities_b74,
53574 {"Future Channel Guidance", "wlan.extcap.b74",
53575 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53576 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53577
53578 {&hf_ieee80211_tag_extended_capabilities_b75,
53579 {"Preassociation discovery (PAD)", "wlan.extcap.b75",
53580 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53581 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53582
53583 {&hf_ieee80211_tag_extended_capabilities_b76,
53584 {"Reserved", "wlan.extcap.b76",
53585 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10,
53586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53587
53588 {&hf_ieee80211_tag_extended_capabilities_b77,
53589 {"TWT Requester Support", "wlan.extcap.b77",
53590 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
53591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53592
53593 {&hf_ieee80211_tag_extended_capabilities_b78,
53594 {"TWT Responder Support", "wlan.extcap.b78",
53595 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
53596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53597
53598 {&hf_ieee80211_tag_extended_capabilities_b79,
53599 {"OBSS Narrow Bandwidth RU in OFDMA Tolerance Support", "wlan.extcap.b79",
53600 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
53601 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53602
53603 {&hf_ieee80211_tag_extended_capabilities_b80,
53604 {"Complete List of NonTxBSSID Profiles", "wlan.extcap.b80",
53605 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53606 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53607
53608 {&hf_ieee80211_tag_extended_capabilities_b81,
53609 {"SAE Password Identifiers In Use", "wlan.extcap.b81",
53610 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53611 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53612
53613 {&hf_ieee80211_tag_extended_capabilities_b82,
53614 {"SAE Passwords Used Exclusively", "wlan.extcap.b82",
53615 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53616 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53617
53618 {&hf_ieee80211_tag_extended_capabilities_b83,
53619 {"Enhanced Multi-BSSID Advertisement Support", "wlan.extcap.b83",
53620 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
53621 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53622
53623 {&hf_ieee80211_tag_extended_capabilities_b84,
53624 {"Beacon Protection Enabled", "wlan.extcap.b84",
53625 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53626 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53627
53628 {&hf_ieee80211_tag_extended_capabilities_b85,
53629 {"Mirrored SCS", "wlan.extcap.b85",
53630 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
53631 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53632
53633 {&hf_ieee80211_tag_extended_capabilities_b86,
53634 {"OCT", "wlan.extcap.b86",
53635 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
53636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53637
53638 {&hf_ieee80211_tag_extended_capabilities_b87,
53639 {"Local MAC Address Policy", "wlan.extcap.b87",
53640 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
53641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53642
53643 {&hf_ieee80211_tag_extended_capabilities_b88,
53644 {"SAE-PK Passwords Used Exclusively", "wlan.extcap.b88",
53645 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53646 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53647
53648 {&hf_ieee80211_tag_extended_capabilities_b89,
53649 {"TWT Parameters Range Support", "wlan.extcap.b89",
53650 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53651
53652 {&hf_ieee80211_tag_extended_capabilities_b90,
53653 {"non-TB Ranging Responder", "wlan.extcap.b90",
53654 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53655
53656 {&hf_ieee80211_tag_extended_capabilities_b91,
53657 {"TB Ranging Responder", "wlan.extcap.b91",
53658 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53659
53660 {&hf_ieee80211_tag_extended_capabilities_b92,
53661 {"TB Ranging Responder Measurement Support", "wlan.extcap.b92",
53662 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53663
53664 {&hf_ieee80211_tag_extended_capabilities_b93,
53665 {"TB Ranging Initiator Measurement Support", "wlan.extcap.b93",
53666 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53667
53668 {&hf_ieee80211_tag_extended_capabilities_b94,
53669 {"AOA Measurement Available", "wlan.extcap.b94",
53670 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53671
53672 {&hf_ieee80211_tag_extended_capabilities_b95,
53673 {"Phase Shift Feedback Support", "wlan.extcap.b95",
53674 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53675
53676 {&hf_ieee80211_tag_extended_capabilities_b96,
53677 {"DMG/location supporting APs in the area", "wlan.extcap.dmg_location",
53678 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53679
53680 {&hf_ieee80211_tag_extended_capabilities_b97,
53681 {"I2R LMR Feedback Policy", "wlan.extcap.i2r_lmr_feedback_policy",
53682 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53683
53684 {&hf_ieee80211_tag_extended_capabilities_b98,
53685 {"EBCS Support", "wlan.extcap.b98",
53686 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53687
53688 {&hf_ieee80211_tag_extended_capabilities_b99,
53689 {"EBCS Relaying Support", "wlan.extcap.b99",
53690 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53691
53692 {&hf_ieee80211_tag_extended_capabilities_b100,
53693 {"Peer-to-peer TWT Support", "wlan.extcap.b100",
53694 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53695
53696 {&hf_ieee80211_tag_extended_capabilities_b101,
53697 {"Multiple BSSID Role Switch Support", "wlan.extcap.b101",
53698 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53699
53700 {&hf_ieee80211_tag_extended_capabilities_b102,
53701 {"Known STA Identification Enabled", "wlan.extcap.b102",
53702 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53703
53704 {&hf_ieee80211_tag_extended_capabilities_b103,
53705 {"Reserved", "wlan.extcap.b103",
53706 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53707
53708 {&hf_ieee80211_tag_extended_capabilities_b104,
53709 {"Capability Notification Support", "wlan.extcap.b104",
53710 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53711
53712 {&hf_ieee80211_tag_extended_capabilities_b105,
53713 {"GAS Query Request Fragmentation", "wlan.extcap.b105",
53714 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53715
53716 {&hf_ieee80211_tag_extended_capabilities_reserved2,
53717 {"Reserved", "wlan.extcap.reserved2",
53718 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53719
53720 {&hf_ieee80211_tag_cisco_ccx1_unknown,
53721 {"Unknown", "wlan.cisco.ccx1.unknown",
53722 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53724
53725 {&hf_ieee80211_tag_cisco_ccx1_name,
53726 {"Name", "wlan.cisco.ccx1.name",
53727 FT_STRING, BASE_NONE, NULL((void*)0), 0,
53728 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53729
53730 {&hf_ieee80211_tag_cisco_ccx1_clients,
53731 {"Clients", "wlan.cisco.ccx1.clients",
53732 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53734
53735 {&hf_ieee80211_tag_cisco_ccx1_unknown2,
53736 {"Unknown2", "wlan.cisco.ccx1.unknown2",
53737 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53739
53740 {&hf_ieee80211_tag_neighbor_report_bssid,
53741 {"BSSID", "wlan.nreport.bssid",
53742 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
53743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53744
53745 {&hf_ieee80211_tag_neighbor_report_bssid_info,
53746 {"BSSID Information", "wlan.nreport.bssid.info",
53747 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
53748 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53749
53750 {&hf_ieee80211_tag_neighbor_report_bssid_info_reachability,
53751 {"AP Reachability", "wlan.nreport.bssid.info.reachability",
53752 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,
53753 "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) }},
53754
53755 {&hf_ieee80211_tag_neighbor_report_bssid_info_security,
53756 {"Security", "wlan.nreport.bssid.info.security",
53757 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004,
53758 "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) }},
53759
53760 {&hf_ieee80211_tag_neighbor_report_bssid_info_key_scope,
53761 {"Key Scope", "wlan.nreport.bssid.info.keyscope",
53762 FT_BOOLEAN, 32, NULL((void*)0), 0x00000008,
53763 "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) }},
53764
53765 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability,
53766 {"Capability", "wlan.nreport.bssid.info.capability",
53767 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000003F0,
53768 "Contains selected capability information for the AP indicated by this BSSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53769
53770 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng,
53771 {"Spectrum Management", "wlan.nreport.bssid.info.capability.specmngt",
53772 FT_BOOLEAN, 32, NULL((void*)0), 0x00000010,
53773 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53774
53775 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos,
53776 {"QoS", "wlan.nreport.bssid.info.capability.qos",
53777 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
53778 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53779
53780 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd,
53781 {"APSD", "wlan.nreport.bssid.info.capability.apsd",
53782 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
53783 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53784
53785 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt,
53786 {"Radio Measurement", "wlan.nreport.bssid.info.capability.radiomsnt",
53787 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
53788 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53789
53790 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b4,
53791 {"Reserved", "wlan.nreport.bssid.info.capability.reserved_b4",
53792 FT_BOOLEAN, 32, NULL((void*)0), 0x00000100,
53793 "Was Delayed Block Ack until 802.11-2016", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53794
53795 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b5,
53796 {"Reserved", "wlan.nreport.bssid.info.capability.reserved_b5",
53797 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
53798 "Was Immediate Block Ack until 802.11-2016", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53799
53800 {&hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain,
53801 {"Mobility Domain", "wlan.nreport.bssid.info.mobilitydomain",
53802 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
53803 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53804
53805 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput,
53806 {"High Throughput (HT AP)", "wlan.nreport.bssid.info.hthroughput",
53807 FT_BOOLEAN, 32, NULL((void*)0), 0x00000800,
53808 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53809
53810 {&hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput,
53811 {"Very High Throughput (VHT AP)", "wlan.nreport.bssid.info.vht",
53812 FT_BOOLEAN, 32, NULL((void*)0), 0x00001000,
53813 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53814
53815 {&hf_ieee80211_tag_neighbor_report_bssid_info_ftm,
53816 {"Fine Timing Measurement (FTM)", "wlan.nreport.bssid.info.ftm",
53817 FT_BOOLEAN, 32, NULL((void*)0), 0x00002000,
53818 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53819
53820 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_efficiency,
53821 {"High Efficiency (HE AP)", "wlan.nreport.bssid.info.he",
53822 FT_BOOLEAN, 32, NULL((void*)0), 0x00004000,
53823 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53824
53825 {&hf_ieee80211_tag_neighbor_report_bssid_info_er_bss,
53826 {"Extended Range BSS", "wlan.nreport.bssid.info.er_bss",
53827 FT_BOOLEAN, 32, NULL((void*)0), 0x00008000,
53828 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53829
53830 {&hf_ieee80211_tag_neighbor_report_bssid_info_colocated_ap,
53831 {"Co-Located AP", "wlan.nreport.bssid.info.colocated_ap",
53832 FT_BOOLEAN, 32, NULL((void*)0), 0x00010000,
53833 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53834
53835 {&hf_ieee80211_tag_neighbor_report_bssid_info_unsolicited_probe_responses_active,
53836 {"Unsolicited Probe Responses Active", "wlan.nreport.bssid.info.unsolicited_probe_responses",
53837 FT_BOOLEAN, 32, NULL((void*)0), 0x00020000,
53838 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53839
53840 {&hf_ieee80211_tag_neighbor_report_bssid_info_ess_with_colocated_ap,
53841 {"Members Of ESS With 2.4/5 GHz Co-Located AP", "wlan.nreport.bssid.info.member_of_ess_with_2p4_5_ghz_colocated_ap",
53842 FT_BOOLEAN, 32, NULL((void*)0), 0x00040000,
53843 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53844
53845 {&hf_ieee80211_tag_neighbor_report_bssid_info_oct_supported_with_reporting_ap,
53846 {"OCT Supported With Reporting AP", "wlan.nreport.bssid.info.oct_supported_with_reporting_ap",
53847 FT_BOOLEAN, 32, NULL((void*)0), 0x00080000,
53848 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53849
53850 {&hf_ieee80211_tag_neighbor_report_bssid_info_colocated_6ghz_ap,
53851 {"Co-Located With 6 GHz AP", "wlan.nreport.bssid.info.colocated_6ghz_ap",
53852 FT_BOOLEAN, 32, NULL((void*)0), 0x00100000,
53853 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53854
53855 {&hf_ieee80211_tag_neighbor_report_bssid_info_eht,
53856 {"Extremely High Throughput (EHT AP)", "wlan.nreport.bssid.info.eht",
53857 FT_BOOLEAN, 32, NULL((void*)0), 0x00200000,
53858 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53859
53860 {&hf_ieee80211_tag_neighbor_report_bssid_info_dmg_positioning,
53861 {"DMG Positioning", "wlan.nreport.bssid.info.dmg_positioning",
53862 FT_BOOLEAN, 32, NULL((void*)0), 0x00400000,
53863 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53864
53865 {&hf_ieee80211_tag_neighbor_report_bssid_info_reserved,
53866 {"Reserved", "wlan.nreport.bssid.info.reserved",
53867 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFF800000,
53868 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53869
53870 {&hf_ieee80211_tag_neighbor_report_ope_class,
53871 {"Operating Class", "wlan.nreport.opeclass",
53872 FT_UINT8, BASE_DEC | BASE_RANGE_STRING0x00000100, RVALS(oper_class_rvals)((0 ? (const struct _range_string*)0 : ((oper_class_rvals)))), 0,
53873 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53874
53875 {&hf_ieee80211_tag_neighbor_report_channel_number,
53876 {"Channel Number", "wlan.nreport.channumber",
53877 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53878 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53879
53880 {&hf_ieee80211_tag_neighbor_report_phy_type,
53881 {"PHY Type", "wlan.nreport.phytype",
53882 FT_UINT8, BASE_DEC, VALS(phy_type_vals)((0 ? (const struct _value_string*)0 : ((phy_type_vals)))), 0,
53883 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53884
53885 {&hf_ieee80211_tag_neighbor_report_subelement_id,
53886 {"ID", "wlan.nreport.subelem.id",
53887 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53888 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53889
53890 {&hf_ieee80211_tag_neighbor_report_subelement_length,
53891 {"Length", "wlan.nreport.subelem.len",
53892 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53893 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53894
53895 {&hf_ieee80211_tag_neighbor_report_subelement_data,
53896 {"Data", "wlan.nreport.subelem.data",
53897 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53898 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53899
53900 {&hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref,
53901 {"Preference", "wlan.nreport.subelem.bss_trn_can_pref",
53902 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53903 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53904
53905 {&hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf,
53906 {"BSS Termination TSF", "wlan.nreport.subelem.bss_ter_tsf",
53907 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
53908 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53909
53910 {&hf_ieee80211_tag_neighbor_report_subelement_bss_dur,
53911 {"Duration", "wlan.nreport.subelem.bss_dur",
53912 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_minutes)((0 ? (const struct unit_name_string*)0 : ((&units_minutes
))))
, 0,
53913 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53914
53915 {&hf_ieee80211_tag_neighbor_report_subelement_tsf_offset,
53916 {"TSF Offset", "wlan.nreport.subelem.tsf_offset",
53917 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53918 "TSF Offset in TU units", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
53919
53920 {&hf_ieee80211_tag_neighbor_report_subelement_beacon_interval,
53921 {"Beacon Interval", "wlan.nreport.subelem.beacon_interval",
53922 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53923 "Beacon Interval in TUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
53924
53925 {&hf_ieee80211_tag_neighbor_report_subelement_country_code,
53926 {"Country Code", "wlan.nreport.subelem.country_code",
53927 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
53928 "ISO 3166-1 Alpha-2 Country Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53929
53930 {&hf_ieee80211_tag_supported_ope_classes_current,
53931 {"Current Operating Class", "wlan.supopeclass.current",
53932 FT_UINT8, BASE_DEC | BASE_RANGE_STRING0x00000100, RVALS(oper_class_rvals)((0 ? (const struct _range_string*)0 : ((oper_class_rvals)))), 0,
53933 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53934
53935 {&hf_ieee80211_tag_supported_ope_classes_alternate,
53936 {"Alternate Operating Classes", "wlan.supopeclass.alt",
53937 FT_NONE, BASE_NONE, NULL((void*)0), 0,
53938 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53939
53940 {&hf_ieee80211_wfa_ie_type,
53941 {"Type", "wlan.wfa.ie.type",
53942 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_type_vals)((0 ? (const struct _value_string*)0 : ((ieee802111_wfa_ie_type_vals
))))
, 0,
53943 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53944
53945 {&hf_ieee80211_wfa_ie_wpa_version,
53946 {"WPA Version", "wlan.wfa.ie.wpa.version",
53947 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53948 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53949
53950 {&hf_ieee80211_wfa_ie_wpa_mcs,
53951 {"Multicast Cipher Suite", "wlan.wfa.ie.wpa.mcs",
53952 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_mcs_base_custom)((const void *) (size_t) (wpa_mcs_base_custom)), 0,
53953 "Contains the cipher suite selector used by the BSS to protect broadcast/multicasttraffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53954
53955 {&hf_ieee80211_wfa_ie_wpa_mcs_oui,
53956 {"Multicast Cipher Suite OUI", "wlan.wfa.ie.wpa.mcs.oui",
53957 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
53958 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53959
53960 {&hf_ieee80211_wfa_ie_wpa_mcs_type,
53961 {"Multicast Cipher Suite type", "wlan.wfa.ie.wpa.mcs.type",
53962 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53963 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53964
53965 {&hf_ieee80211_wfa_ie_wpa_mcs_wfa_type,
53966 {"Multicast Cipher Suite type", "wlan.wfa.ie.wpa.mcs.type",
53967 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wpa_cipher_vals
))))
, 0,
53968 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53969
53970 {&hf_ieee80211_wfa_ie_wpa_ucs_count,
53971 {"Unicast Cipher Suite Count", "wlan.wfa.ie.wpa.ucs.count",
53972 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53973 "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) }},
53974
53975 {&hf_ieee80211_wfa_ie_wpa_ucs_list,
53976 {"Unicast Cipher Suite List", "wlan.wfa.ie.wpa.ucs.list",
53977 FT_NONE, BASE_NONE, NULL((void*)0), 0,
53978 "Contains a series of cipher suite selectors that indicate the Unicast cipher suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53979
53980 {&hf_ieee80211_wfa_ie_wpa_ucs,
53981 {"Unicast Cipher Suite", "wlan.wfa.ie.wpa.ucs",
53982 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_ucs_base_custom)((const void *) (size_t) (wpa_ucs_base_custom)), 0,
53983 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53984
53985 {&hf_ieee80211_wfa_ie_wpa_ucs_oui,
53986 {"Unicast Cipher Suite OUI", "wlan.wfa.ie.wpa.ucs.oui",
53987 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
53988 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53989
53990 {&hf_ieee80211_wfa_ie_wpa_ucs_type,
53991 {"Unicast Cipher Suite type", "wlan.wfa.ie.wpa.ucs.type",
53992 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53993 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53994
53995 {&hf_ieee80211_wfa_ie_wpa_ucs_wfa_type,
53996 {"Unicast Cipher Suite type", "wlan.wfa.ie.wpa.ucs.type",
53997 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wpa_cipher_vals
))))
, 0,
53998 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53999
54000 {&hf_ieee80211_wfa_ie_wpa_akms_count,
54001 {"Auth Key Management (AKM) Suite Count", "wlan.wfa.ie.wpa.akms.count",
54002 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54003 "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) }},
54004
54005 {&hf_ieee80211_wfa_ie_wpa_akms_list,
54006 {"Auth Key Management (AKM) List", "wlan.wfa.ie.wpa.akms.list",
54007 FT_NONE, BASE_NONE, NULL((void*)0), 0,
54008 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54009
54010 {&hf_ieee80211_wfa_ie_wpa_akms,
54011 {"Auth Key Management (AKM) Suite", "wlan.wfa.ie.wpa.akms",
54012 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_akms_base_custom)((const void *) (size_t) (wpa_akms_base_custom)), 0,
54013 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54014
54015 {&hf_ieee80211_wfa_ie_wpa_akms_oui,
54016 {"Auth Key Management (AKM) OUI", "wlan.wfa.ie.wpa.akms.oui",
54017 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
54018 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54019
54020 {&hf_ieee80211_wfa_ie_wpa_akms_type,
54021 {"Auth Key Management (AKM) type", "wlan.wfa.ie.wpa.akms.type",
54022 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54023 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54024
54025 {&hf_ieee80211_wfa_ie_wpa_akms_wfa_type,
54026 {"Auth Key Management (AKM) type", "wlan.wfa.ie.wpa.akms.type",
54027 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_keymgmt_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wpa_keymgmt_vals
))))
, 0,
54028 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54029
54030 {&hf_ieee80211_wfa_ie_wme_subtype,
54031 {"WME Subtype", "wlan.wfa.ie.wme.subtype",
54032 FT_UINT8, BASE_DEC, VALS(ieee802111_wfa_ie_wme_type)((0 ? (const struct _value_string*)0 : ((ieee802111_wfa_ie_wme_type
))))
, 0,
54033 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54034
54035 {&hf_ieee80211_wfa_ie_wme_version,
54036 {"WME Version", "wlan.wfa.ie.wme.version",
54037 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54038 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54039
54040 {&hf_ieee80211_wfa_ie_wme_qos_info,
54041 {"WME QoS Info", "wlan.wfa.ie.wme.qos_info",
54042 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54043 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54044
54045 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
54046 {"Max SP Length", "wlan.wfa.ie.wme.qos_info.sta.max_sp_length",
54047 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,
54048 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54049
54050 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
54051 {"AC_BE", "wlan.wfa.ie.wme.qos_info.sta.ac_be",
54052 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,
54053 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54054
54055 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
54056 {"AC_BK", "wlan.wfa.ie.wme.qos_info.sta.ac_bk",
54057 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,
54058 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54059
54060 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
54061 {"AC_VI", "wlan.wfa.ie.wme.qos_info.sta.ac_vi",
54062 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,
54063 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54064
54065 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
54066 {"AC_VO", "wlan.wfa.ie.wme.qos_info.sta.ac_vo",
54067 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,
54068 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54069
54070 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
54071 {"Reserved", "wlan.wfa.ie.wme.qos_info.sta.reserved",
54072 FT_UINT8, BASE_HEX, NULL((void*)0), 0x90,
54073 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54074
54075 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
54076 {"U-APSD", "wlan.wfa.ie.wme.qos_info.ap.u_apsd",
54077 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
54078 "Indicates the WMM AP is currently supporting unscheduled automatic power save delivery", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54079
54080 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
54081 {"Parameter Set Count", "wlan.wfa.ie.wme.qos_info.ap.parameter_set_count",
54082 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F,
54083 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54084
54085 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
54086 {"Reserved", "wlan.wfa.ie.wme.qos_info.ap.reserved",
54087 FT_UINT8, BASE_HEX, NULL((void*)0), 0x70,
54088 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54089
54090 {&hf_ieee80211_wfa_ie_wme_reserved,
54091 {"Reserved", "wlan.wfa.ie.wme.reserved",
54092 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54093 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54094
54095 {&hf_ieee80211_wfa_ie_wme_ac_parameters,
54096 {"Ac Parameters", "wlan.wfa.ie.wme.acp",
54097 FT_NONE, BASE_NONE, NULL((void*)0), 0,
54098 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54099
54100 {&hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
54101 {"ACI / AIFSN Field", "wlan.wfa.ie.wme.acp.aci_aifsn",
54102 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54103 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54104
54105 {&hf_ieee80211_wfa_ie_wme_acp_aci_be,
54106 {"ACI", "wlan.wfa.ie.wme.acp.aci_be",
54107 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54108 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54109
54110 {&hf_ieee80211_wfa_ie_wme_acp_aci_bk,
54111 {"ACI", "wlan.wfa.ie.wme.acp.aci_bk",
54112 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54113 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54114
54115 {&hf_ieee80211_wfa_ie_wme_acp_aci_vi,
54116 {"ACI", "wlan.wfa.ie.wme.acp.aci_vi",
54117 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54118 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54119
54120 {&hf_ieee80211_wfa_ie_wme_acp_aci_vo,
54121 {"ACI", "wlan.wfa.ie.wme.acp.aci_vo",
54122 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54123 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54124
54125 {&hf_ieee80211_wfa_ie_wme_acp_acm_be,
54126 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_be",
54127 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54128 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54129
54130 {&hf_ieee80211_wfa_ie_wme_acp_acm_bk,
54131 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_bk",
54132 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54133 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54134
54135 {&hf_ieee80211_wfa_ie_wme_acp_acm_vi,
54136 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_vi",
54137 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54138 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54139
54140 {&hf_ieee80211_wfa_ie_wme_acp_acm_vo,
54141 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_vo",
54142 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54143 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54144
54145 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_be,
54146 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_be",
54147 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54148 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54149
54150 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_bk,
54151 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_bk",
54152 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54153 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54154
54155 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_vi,
54156 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_vi",
54157 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54159
54160 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_vo,
54161 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_vo",
54162 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54164
54165 {&hf_ieee80211_wfa_ie_wme_acp_reserved_be,
54166 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_be",
54167 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54168 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54169
54170 {&hf_ieee80211_wfa_ie_wme_acp_reserved_bk,
54171 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_bk",
54172 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54173 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54174
54175 {&hf_ieee80211_wfa_ie_wme_acp_reserved_vi,
54176 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_vi",
54177 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54178 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54179
54180 {&hf_ieee80211_wfa_ie_wme_acp_reserved_vo,
54181 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_vo",
54182 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54183 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54184
54185 {&hf_ieee80211_wfa_ie_wme_acp_ecw,
54186 {"ECW", "wlan.wfa.ie.wme.acp.ecw",
54187 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00,
54188 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54189
54190 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_be,
54191 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_be",
54192 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54193 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54194
54195 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_bk,
54196 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_bk",
54197 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54198 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54199
54200 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_vo,
54201 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_vo",
54202 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54203 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54204
54205 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_vi,
54206 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_vi",
54207 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54208 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54209
54210 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_be,
54211 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_be",
54212 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54214
54215 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_bk,
54216 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_bk",
54217 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54218 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54219
54220 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_vo,
54221 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_vo",
54222 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54223 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54224
54225 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_vi,
54226 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_vi",
54227 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54228 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54229
54230 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_be,
54231 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_be",
54232 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54233 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54234
54235 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_bk,
54236 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_bk",
54237 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54238 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54239
54240 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_vo,
54241 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_vo",
54242 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54243 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54244
54245 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_vi,
54246 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_vi",
54247 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54248 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54249
54250 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
54251 {"TS Info", "wlan.wfa.ie.wme.tspec.ts_info",
54252 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
54253 "Traffic Stream (TS) Info", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54254
54255 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
54256 {"TID", "wlan.wfa.ie.wme.tspec.ts_info.tid",
54257 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00001E,
54258 "Traffic Stream Info ID (TID)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54259
54260 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
54261 {"Direction", "wlan.wfa.ie.wme.tspec.ts_info.dir",
54262 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,
54263 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54264
54265 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
54266 {"PSB", "wlan.wfa.ie.wme.tspec.ts_info.psb",
54267 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,
54268 "Traffic Stream (TS) Info Power Save Behavior (PSB)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54269
54270 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
54271 {"UP", "wlan.wfa.ie.wme.tspec.ts_info.up",
54272 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,
54273 "Traffic Stream (TS) Info User Priority (UP)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54274
54275 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
54276 {"Reserved", "wlan.wfa.ie.wme.tspec.ts_info.reserved",
54277 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFC381,
54278 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54279
54280 {&hf_ieee80211_wfa_ie_wme_tspec_nor_msdu,
54281 {"Normal MSDU Size", "wlan.wfa.ie.wme.tspec.nor_msdu",
54282 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54283 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54284
54285 {&hf_ieee80211_wfa_ie_wme_tspec_max_msdu,
54286 {"Maximum MSDU Size", "wlan.wfa.ie.wme.tspec.max_msdu",
54287 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54288 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54289
54290 {&hf_ieee80211_wfa_ie_wme_tspec_min_srv,
54291 {"Minimum Service Interval", "wlan.wfa.ie.wme.tspec.min_srv",
54292 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54293 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54294
54295 {&hf_ieee80211_wfa_ie_wme_tspec_max_srv,
54296 {"Maximum Service Interval", "wlan.wfa.ie.wme.tspec.max_srv",
54297 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54298 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54299
54300 {&hf_ieee80211_wfa_ie_wme_tspec_inact_int,
54301 {"Inactivity Interval", "wlan.wfa.ie.wme.tspec.inact_int",
54302 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54303 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54304
54305 {&hf_ieee80211_wfa_ie_wme_tspec_susp_int,
54306 {"Suspension Interval", "wlan.wfa.ie.wme.tspec.susp_int",
54307 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54308 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54309
54310 {&hf_ieee80211_wfa_ie_wme_tspec_srv_start,
54311 {"Service Start Time", "wlan.wfa.ie.wme.tspec.srv_start",
54312 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54313 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54314
54315 {&hf_ieee80211_wfa_ie_wme_tspec_min_data,
54316 {"Minimum Data Rate", "wlan.wfa.ie.wme.tspec.min_data",
54317 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54318 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54319
54320 {&hf_ieee80211_wfa_ie_wme_tspec_mean_data,
54321 {"Mean Data Rate", "wlan.wfa.ie.wme.tspec.mean_data",
54322 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54323 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54324
54325 {&hf_ieee80211_wfa_ie_wme_tspec_peak_data,
54326 {"Peak Data Rate", "wlan.wfa.ie.wme.tspec.peak_data",
54327 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54328 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54329
54330 {&hf_ieee80211_wfa_ie_wme_tspec_burst_size,
54331 {"Burst Size", "wlan.wfa.ie.wme.tspec.burst_size",
54332 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54333 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54334
54335 {&hf_ieee80211_wfa_ie_wme_tspec_delay_bound,
54336 {"Delay Bound", "wlan.wfa.ie.wme.tspec.delay_bound",
54337 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54338 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54339
54340 {&hf_ieee80211_wfa_ie_wme_tspec_min_phy,
54341 {"Minimum PHY Rate", "wlan.wfa.ie.wme.tspec.min_phy",
54342 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54343 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54344
54345 {&hf_ieee80211_wfa_ie_wme_tspec_surplus,
54346 {"Surplus Bandwidth Allowance", "wlan.wfa.ie.wme.tspec.surplus",
54347 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54348 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54349
54350 {&hf_ieee80211_wfa_ie_wme_tspec_medium,
54351 {"Medium Time", "wlan.wfa.ie.wme.tspec.medium",
54352 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54353 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54354
54355 {&hf_ieee80211_wfa_ie_nc_cost_level,
54356 {"Cost Level", "wlan.wfa.ie.nc.cost_level",
54357 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,
54358 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54359
54360 {&hf_ieee80211_wfa_ie_nc_reserved,
54361 {"Reserved", "wlan.wfa.ie.nc.reserved",
54362 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54363 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54364
54365 {&hf_ieee80211_wfa_ie_nc_cost_flags,
54366 {"Cost Flags", "wlan.wfa.ie.nc.cost_flags",
54367 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,
54368 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54369
54370 {&hf_ieee80211_wfa_ie_tethering_type,
54371 {"Type", "wlan.wfa.ie.tethering.type",
54372 FT_UINT16, BASE_DEC, VALS(ieee80211_wfa_ie_tethering_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_tethering_type_vals
))))
, 0,
54373 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54374
54375 {&hf_ieee80211_wfa_ie_tethering_mac_length,
54376 {"MAC Length", "wlan.wfa.ie.tethering.mac_length",
54377 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54378 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54379
54380 {&hf_ieee80211_wfa_ie_tethering_mac,
54381 {"MAC Address", "wlan.wfa.ie.tethering.mac",
54382 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54383 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54384
54385 {&hf_ieee80211_wfa_ie_owe_bssid,
54386 {"BSSID", "wlan.wfa.ie.owe.bssid",
54387 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54388 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54389
54390 {&hf_ieee80211_wfa_ie_owe_ssid_length,
54391 {"SSID length", "wlan.wfa.ie.owe.ssid_length",
54392 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54393 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54394
54395 {&hf_ieee80211_wfa_ie_owe_ssid,
54396 {"SSID", "wlan.wfa.ie.owe.ssid",
54397 FT_STRING, BASE_NONE, NULL((void*)0), 0,
54398 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54399
54400 {&hf_ieee80211_wfa_ie_owe_band_info,
54401 {"Band info", "wlan.wfa.ie.owe.band_info",
54402 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54403 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54404
54405 {&hf_ieee80211_wfa_ie_owe_channel_info,
54406 {"Channel info", "wlan.wfa.ie.owe.channel_info",
54407 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54408 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54409
54410 {&hf_ieee80211_wfa_ie_mbo_oce_attr,
54411 {"MBO/OCE attribute", "wlan.wfa.ie.mbo_oce.attr",
54412 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54413
54414 {&hf_ieee80211_wfa_ie_mbo_oce_attr_id,
54415 {"ID", "wlan.wfa.ie.mbo_oce.attr_id",
54416 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) }},
54417
54418 {&hf_ieee80211_wfa_ie_mbo_oce_attr_len,
54419 {"Length", "wlan.wfa.ie.mbo_oce.attr_len",
54420 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54421
54422 {&hf_ieee80211_wfa_ie_mbo_ap_cap,
54423 {"MBO Capability Indication", "wlan.wfa.ie.mbo_oce.ap_cap",
54424 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54425
54426 {&hf_ieee80211_wfa_ie_mbo_ap_cap_cell,
54427 {"AP is cellular data aware", "wlan.wfa.ie.mbo.ap_cap.cell",
54428 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) }},
54429
54430 {&hf_ieee80211_wfa_ie_mbo_ap_cap_reserved,
54431 {"Reserved", "wlan.wfa.ie.mbo.ap_cap.reserved",
54432 FT_UINT8, BASE_HEX, NULL((void*)0), 0xBF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54433
54434 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class,
54435 {"Operating Class", "wlan.wfa.ie.mbo.non_pref_chan.op_class",
54436 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54437
54438 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan,
54439 {"Channel", "wlan.wfa.ie.mbo.non_pref_chan.chan",
54440 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54441
54442 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref,
54443 {"Preference", "wlan.wfa.ie.mbo.non_pref_chan.pref",
54444 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) }},
54445
54446 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason,
54447 {"Reason Code", "wlan.wfa.ie.mbo.non_pref_chan.reason",
54448 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) }},
54449
54450 {&hf_ieee80211_wfa_ie_mbo_cellular_cap,
54451 {"Cellular Data Connectivity", "wlan.wfa.ie.mbo.cellular_cap",
54452 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) }},
54453
54454 {&hf_ieee80211_wfa_ie_mbo_assoc_disallow_reason,
54455 {"Reason Code", "wlan.wfa.ie.mbo.assoc_disallow.reason",
54456 FT_UINT8, BASE_DEC, VALS(wfa_mbo_assoc_disallow_reason_vals)((0 ? (const struct _value_string*)0 : ((wfa_mbo_assoc_disallow_reason_vals
))))
,
54457 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54458
54459 {&hf_ieee80211_wfa_ie_mbo_cellular_pref,
54460 {"Cellular Data Preference", "wlan.wfa.ie.mbo.cellular_pref",
54461 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) }},
54462
54463 {&hf_ieee80211_wfa_ie_mbo_transition_reason,
54464 {"Transition Reason Code", "wlan.wfa.ie.mbo.transition.reason",
54465 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) }},
54466
54467 {&hf_ieee80211_wfa_ie_mbo_transition_rej_reason,
54468 {"Transition Rejection Reason Code", "wlan.wfa.ie.mbo.transition_rej.reason",
54469 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) }},
54470
54471 {&hf_ieee80211_wfa_ie_mbo_assoc_retry_delay,
54472 {"Re-association Delay", "wlan.wfa.ie.mbo.assoc_retry.delay",
54473 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) }},
54474
54475 {&hf_ieee80211_wfa_ie_oce_cap_ctrl,
54476 {"OCE Control", "wlan.wfa.ie.oce.cap.ctrl",
54477 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54478
54479 {&hf_ieee80211_wfa_ie_oce_cap_release,
54480 {"OCE Release", "wlan.wfa.ie.oce.cap.release",
54481 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54482
54483 {&hf_ieee80211_wfa_ie_oce_cap_sta_cfon,
54484 {"is STA CFON", "wlan.wfa.ie.oce.cap.sta_cfon",
54485 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) }},
54486
54487 {&hf_ieee80211_wfa_ie_oce_cap_11b_only_ap,
54488 {"11b only AP present on operating channel", "wlan.wfa.ie.oce.cap.11b_only_ap",
54489 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) }},
54490
54491 {&hf_ieee80211_wfa_ie_oce_cap_hlp,
54492 {"FILS Higher Layer Setup with Higher Layer Protocol Encapsulation enabled",
54493 "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) }},
54494
54495 {&hf_ieee80211_wfa_ie_oce_cap_non_oce_ap,
54496 {"non OCE AP present on operating channel", "wlan.wfa.ie.oce.cap.non_oce_ap",
54497 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) }},
54498
54499 {&hf_ieee80211_wfa_ie_oce_cap_reserved,
54500 {"Reserved", "wlan.wfa.ie.oce.cap.reserved",
54501 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54502
54503 {&hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delta,
54504 {"Delta RSSI", "wlan.wfa.ie.oce.rssi_assoc_rej.delta",
54505 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) }},
54506
54507 {&hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delay,
54508 {"Retry Delay", "wlan.wfa.ie.oce.rssi_assoc_rej.delay",
54509 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) }},
54510
54511 {&hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap,
54512 {"Available Capacity", "wlan.wfa.ie.oce.wan_metrics.avail_cap",
54513 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54514
54515 {&hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_downlink,
54516 {"Downlink", "wlan.wfa.ie.oce.wan_metrics.avail_cap_downlink",
54517 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54518
54519 {&hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_uplink,
54520 {"Uplink", "wlan.wfa.ie.oce.wan_metrics.avail_cap_uplink",
54521 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54522
54523 {&hf_ieee80211_wfa_ie_oce_rnr_completeness_short_ssid,
54524 {"Short SSID", "wlan.wfa.ie.oce.rnr_completeness.short_ssid",
54525 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54526
54527 {&hf_ieee80211_wfa_ie_oce_probe_suppr_bssid,
54528 {"BSSID", "wlan.wfa.ie.oce.probe_suppr.bssid",
54529 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54530
54531 {&hf_ieee80211_wfa_ie_oce_probe_suppr_ssid,
54532 {"SSID", "wlan.wfa.ie.oce.probe_suppr.ssid",
54533 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54534
54535 {&hf_ieee80211_wfa_anqp_mbo_subtype,
54536 {"Subtype", "wlan.wfa.anqp.mbo.subtype",
54537 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) }},
54538
54539 {&hf_ieee80211_wfa_anqp_mbo_query,
54540 {"Query Subtype", "wlan.wfa.anqp.mbo.query",
54541 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) }},
54542
54543 {&hf_ieee80211_wfa_anqp_mbo_cellular_pref,
54544 {"Cellular Data Preference", "wlan.wfa.anqp.mbo.cellular_pref",
54545 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) }},
54546
54547 {&hf_ieee80211_rsn_ie_ptk_keyid,
54548 {"KeyID", "wlan.rsn.ie.ptk.keyid",
54549 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
54550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54551
54552 {&hf_ieee80211_rsn_ie_pmkid,
54553 {"PMKID", "wlan.rsn.ie.pmkid",
54554 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54556
54557 {&hf_ieee80211_rsn_ie_gtk_kde_data_type,
54558 {"Data Type", "wlan.rsn.ie.data_type",
54559 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(kde_selectors_rvals)((0 ? (const struct _range_string*)0 : ((kde_selectors_rvals)
)))
,
54560 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54561
54562 {&hf_ieee80211_rsn_ie_gtk_kde_key_id,
54563 {"Key ID", "wlan.rsn.ie.gtk_kde.key_id",
54564 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54565
54566 {&hf_ieee80211_rsn_ie_gtk_kde_tx,
54567 {"Tx", "wlan.rsn.ie.gtk_kde.tx",
54568 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) }},
54569
54570 {&hf_ieee80211_rsn_ie_gtk_kde_reserved1,
54571 {"Reserved", "wlan.rsn.ie.gtk_kde.res1",
54572 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54573
54574 {&hf_ieee80211_rsn_ie_gtk_kde_reserved2,
54575 {"Reserved", "wlan.rsn.ie.gtk_kde.res2",
54576 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54577
54578 {&hf_ieee80211_rsn_ie_gtk_kde_gtk,
54579 {"GTK", "wlan.rsn.ie.gtk_kde.gtk",
54580 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54581
54582 {&hf_ieee80211_rsn_ie_mac_address_kde_mac,
54583 {"MAC Address", "wlan.rsn.ie.mac_address_kde.mac_address",
54584 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54585
54586 {&hf_ieee80211_rsn_ie_gtk_kde_nonce,
54587 {"Key Nonce", "wlan.rsn.ie.key_nonce_kde.nonce",
54588 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54589
54590 {&hf_ieee80211_rsn_ie_gtk_kde_lifetime,
54591 {"Key Lifetime", "wlan.rsn.ie.key_lifetime_kde.lifetime",
54592 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) }},
54593
54594 {&hf_ieee80211_rsn_ie_error_kde_res,
54595 {"Reserved", "wlan.rsn.ie.error_kde.reserved",
54596 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54597
54598 {&hf_ieee80211_rsn_ie_error_kde_error_type,
54599 {"Error Type", "wlan.rsn.ie.error_kde.error_type",
54600 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54601
54602 {&hf_ieee80211_rsn_ie_igtk_kde_keyid,
54603 {"KeyId", "wlan.rsn.ie.igtk.kde.keyid",
54604 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54605 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54606
54607 {&hf_ieee80211_rsn_ie_igtk_kde_ipn,
54608 {"IPN", "wlan.rsn.ie.igtk.kde.ipn",
54609 FT_UINT48, BASE_DEC, NULL((void*)0), 0,
54610 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54611
54612 {&hf_ieee80211_rsn_ie_igtk_kde_igtk,
54613 {"IGTK", "wlan.rsn.ie.igtk.kde.igtk",
54614 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54616
54617 {&hf_ieee80211_rsn_ie_oci_operating_class,
54618 {"Operating Class", "wlan.rsn.ie.oci_kde.operating_class",
54619 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54620
54621 {&hf_ieee80211_rsn_ie_oci_primary_channel_number,
54622 {"Primary Channel Number", "wlan.rsn.ie.oci_kde.primary_channel_number",
54623 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54624
54625 {&hf_ieee80211_rsn_ie_oci_frequency_segment_1,
54626 {"Frequency Segment 1 Channel Number",
54627 "wlan.rsn.ie.oci_kde.frequency_segment_1_channel_number",
54628 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54629
54630 {&hf_ieee80211_rsn_ie_bigtk_key_id,
54631 {"Key ID", "wlan.rsn.ie.bigtk_kde.key_id",
54632 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54633
54634 {&hf_ieee80211_rsn_ie_bigtk_bipn,
54635 {"BIPN", "wlan.rsn.ie.bigtk_kde.bipn",
54636 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54637
54638 {&hf_ieee80211_rsn_ie_bigtk_bigtk,
54639 {"BIGTK", "wlan.rsn.ie.bigtk_kde.bigtk",
54640 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54641
54642 {&hf_ieee80211_rsn_ie_mlo_link_info,
54643 {"Link Information", "wlan.rsn.ie.mlo_link.link_info",
54644 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54645
54646 {&hf_ieee80211_rsn_ie_mlo_linkid,
54647 {"LinkID", "wlan.rsn.ie.mlo_link.link_info.linkid",
54648 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54649
54650 {&hf_ieee80211_rsn_ie_mlo_rnse_present,
54651 {"RSNEInfo", "wlan.rsn.ie.mlo_link.link_info.rsneinfo",
54652 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54653
54654 {&hf_ieee80211_rsn_ie_mlo_rnsxe_present,
54655 {"RSNXEInfo", "wlan.rsn.ie.mlo_link.link_info.rsnxeinfo",
54656 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54657
54658 {&hf_ieee80211_rsn_ie_mlo_reserved,
54659 {"Reserved", "wlan.rsn.ie.mlo_link.link_info.reserved",
54660 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54661
54662 {&hf_ieee80211_rsn_ie_mlo_mac_addr,
54663 {"MAC Address", "wlan.rsn.ie.mlo_link.mac_addr",
54664 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54665
54666 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_key_id,
54667 {"Key ID", "wlan.rsn.ie.mlo_gtk.key_id",
54668 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54669
54670 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_tx,
54671 {"Tx", "wlan.rsn.ie.mlo_gtk.tx",
54672 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54673
54674 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_reserved,
54675 {"Reserved", "wlan.rsn.ie.mlo_gtk.reserved",
54676 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54677
54678 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_linkid,
54679 {"LinkID", "wlan.rsn.ie.mlo_gtk.linkid",
54680 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54681
54682 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_pn,
54683 {"PN", "wlan.rsn.ie.mlo_gtk.pn",
54684 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54685
54686 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_gtk,
54687 {"GTK", "wlan.rsn.ie.mlo_gtk.gtk",
54688 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54689
54690 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_key_id,
54691 {"Key ID", "wlan.rsn.ie.mlo_igtk.key_id",
54692 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54693
54694 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_ipn,
54695 {"IPN", "wlan.rsn.ie.mlo_igtk.ipn",
54696 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54697
54698 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_reserved,
54699 {"Reserved", "wlan.rsn.ie.mlo_igtk.reserved",
54700 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54701
54702 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_linkid,
54703 {"LinkID", "wlan.rsn.ie.mlo_igtk.linkid",
54704 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54705
54706 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_igtk,
54707 {"IGTK", "wlan.rsn.ie.mlo_igtk.igtk",
54708 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54709
54710 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_key_id,
54711 {"Key ID", "wlan.rsn.ie.mlo_bigtk.key_id",
54712 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54713
54714 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_ipn,
54715 {"IPN", "wlan.rsn.ie.mlo_bigtk.ipn",
54716 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54717
54718 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_reserved,
54719 {"Reserved", "wlan.rsn.ie.mlo_bigtk.reserved",
54720 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54721
54722 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_linkid,
54723 {"LinkID", "wlan.rsn.ie.mlo_bigtk.linkid",
54724 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54725
54726 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_bigtk,
54727 {"BIGTK", "wlan.rsn.ie.mlo_bigtk.bigtk",
54728 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54729
54730 {&hf_ieee80211_rsn_ie_unknown,
54731 {"RSN Unknown", "wlan.rsn.ie.unknown",
54732 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54734
54735 {&hf_ieee80211_marvell_ie_type,
54736 {"Type", "wlan.marvell.ie.type",
54737 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54739
54740 {&hf_ieee80211_marvell_ie_mesh_subtype,
54741 {"Subtype", "wlan.marvell.ie.subtype",
54742 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54744
54745 {&hf_ieee80211_marvell_ie_mesh_version,
54746 {"Version", "wlan.marvell.ie.version",
54747 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54748 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54749
54750 {&hf_ieee80211_marvell_ie_mesh_active_proto_id,
54751 {"Path Selection Protocol", "wlan.marvell.ie.proto_id",
54752 FT_UINT8, BASE_HEX, VALS(mesh_path_selection_codes)((0 ? (const struct _value_string*)0 : ((mesh_path_selection_codes
))))
, 0,
54753 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54754
54755 {&hf_ieee80211_marvell_ie_mesh_active_metric_id,
54756 {"Path Selection Metric", "wlan.marvell.ie.metric_id",
54757 FT_UINT8, BASE_HEX, VALS(mesh_metric_codes)((0 ? (const struct _value_string*)0 : ((mesh_metric_codes)))
)
, 0,
54758 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54759
54760 {&hf_ieee80211_marvell_ie_mesh_cap,
54761 {"Mesh Capabilities", "wlan.marvell.ie.cap",
54762 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54763 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54764
54765 {&hf_ieee80211_marvell_ie_data,
54766 { "Marvell IE data", "wlan.marvell.data",
54767 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
54768 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54769
54770 {&hf_ieee80211_extreme_mesh_ie_type,
54771 { "Type", "wlan.extreme_mesh.ie.type",
54772 FT_UINT8, BASE_HEX, VALS(extreme_mesh_ie_type_vals)((0 ? (const struct _value_string*)0 : ((extreme_mesh_ie_type_vals
))))
, 0,
54773 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54774 {&hf_ieee80211_extreme_mesh_ie_services,
54775 { "Services", "wlan.extreme_mesh.ie.services",
54776 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54777 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54778 {&hf_ieee80211_extreme_mesh_ie_hello_f_root,
54779 { "Root", "wlan.extreme_mesh.ie.services.root",
54780 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_ROOT,
54781 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54782 {&hf_ieee80211_extreme_mesh_ie_hello_f_proxy,
54783 { "Proxy", "wlan.extreme_mesh.ie.services.proxy",
54784 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_PROXY,
54785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54786 {&hf_ieee80211_extreme_mesh_ie_hello_f_geo,
54787 { "Geo", "wlan.extreme_mesh.ie.services.geo",
54788 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_GEO,
54789 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54790 {&hf_ieee80211_extreme_mesh_ie_hello_f_path_pref,
54791 { "Path Preference", "wlan.extreme_mesh.ie.services.path_pref",
54792 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_PATH_PREF,
54793 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54794 {&hf_ieee80211_extreme_mesh_ie_hello_f_mobile,
54795 { "Mobile", "wlan.extreme_mesh.ie.services.mobile",
54796 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_MOBILE,
54797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54798 {&hf_ieee80211_extreme_mesh_ie_htr,
54799 { "Hops to Root", "wlan.extreme_mesh.ie.htr",
54800 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54801 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54802 {&hf_ieee80211_extreme_mesh_ie_mtr,
54803 { "Metric to Root", "wlan.extreme_mesh.ie.mtr",
54804 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
54805 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54806 {&hf_ieee80211_extreme_mesh_ie_root,
54807 { "Root Id", "wlan.extreme_mesh.ie.root",
54808 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54810 {&hf_ieee80211_extreme_mesh_ie_nh,
54811 { "Next Hop", "wlan.extreme_mesh.ie.nh",
54812 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54813 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54814 {&hf_ieee80211_extreme_mesh_ie_mesh_id,
54815 { "Mesh Id", "wlan.extreme_mesh.ie.mesh_id",
54816 FT_STRING, BASE_NONE, NULL((void*)0), 0,
54817 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54818 {&hf_ieee80211_extreme_mesh_ie_mp_id,
54819 { "Mesh Point Id", "wlan.extreme_mesh.ie.mp_id",
54820 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54821 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54822
54823 {&hf_ieee80211_atheros_ie_type,
54824 {"Type", "wlan.atheros.ie.type",
54825 FT_UINT8, BASE_HEX, VALS(atheros_ie_type_vals)((0 ? (const struct _value_string*)0 : ((atheros_ie_type_vals
))))
, 0,
54826 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54827
54828 {&hf_ieee80211_atheros_ie_subtype,
54829 {"Subtype", "wlan.atheros.ie.subtype",
54830 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54831 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54832
54833 {&hf_ieee80211_atheros_ie_version,
54834 {"Version", "wlan.atheros.ie.version",
54835 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54836 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54837
54838 {&hf_ieee80211_atheros_ie_cap_f_turbop,
54839 {"Turbo Prime", "wlan.ie.atheros.capabilities.turbop",
54840 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_TURBOP,
54841 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54842
54843 {&hf_ieee80211_atheros_ie_cap_f_comp,
54844 {"Compression", "wlan.ie.atheros.capabilities.comp",
54845 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_COMP,
54846 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54847
54848 {&hf_ieee80211_atheros_ie_cap_f_ff,
54849 {"Fast Frames", "wlan.ie.atheros.capabilities.ff",
54850 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_FF,
54851 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54852
54853 {&hf_ieee80211_atheros_ie_cap_f_xr,
54854 {"eXtended Range", "wlan.ie.atheros.capabilities.xr",
54855 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_XR,
54856 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54857
54858 {&hf_ieee80211_atheros_ie_cap_f_ar,
54859 {"Advanced Radar", "wlan.ie.atheros.capabilities.ar",
54860 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_AR,
54861 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54862
54863 {&hf_ieee80211_atheros_ie_cap_f_burst,
54864 {"Burst", "wlan.ie.atheros.capabilities.burst",
54865 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_BURST,
54866 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54867
54868 {&hf_ieee80211_atheros_ie_cap_f_wme,
54869 {"CWMin tuning", "wlan.ie.atheros.capabilities.wme",
54870 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_WME,
54871 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54872
54873 {&hf_ieee80211_atheros_ie_cap_f_boost,
54874 {"Boost", "wlan.ie.atheros.capabilities.boost",
54875 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_BOOST,
54876 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54877
54878 {&hf_ieee80211_atheros_ie_advcap_cap,
54879 {"Capabilities", "wlan.atheros.ie.advcap.cap",
54880 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54881 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54882
54883 {&hf_ieee80211_atheros_ie_advcap_defkey,
54884 {"Default key index", "wlan.atheros.ie.advcap.defkey",
54885 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
54886 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54887
54888 {&hf_ieee80211_atheros_ie_xr_info,
54889 {"Info", "wlan.atheros.ie.xr.info",
54890 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54891 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54892
54893 {&hf_ieee80211_atheros_ie_xr_base_bssid,
54894 {"Base BSS Id", "wlan.atheros.ie.xr.base_bssid",
54895 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54896 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54897
54898 {&hf_ieee80211_atheros_ie_xr_xr_bssid,
54899 {"XR BSS Id", "wlan.atheros.ie.xr.xr_bssid",
54900 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54901 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54902
54903 {&hf_ieee80211_atheros_ie_xr_xr_beacon,
54904 {"XR Beacon Interval", "wlan.atheros.ie.xr.xr_beacon",
54905 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (size_t) (beacon_interval_base_custom)), 0,
54906 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54907
54908 {&hf_ieee80211_atheros_ie_xr_base_cap,
54909 {"Base capabilities", "wlan.atheros.ie.xr.base_cap",
54910 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54911 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54912
54913 {&hf_ieee80211_atheros_ie_xr_xr_cap,
54914 {"XR capabilities", "wlan.atheros.ie.xr.xr_cap",
54915 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54916 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54917
54918 {&hf_ieee80211_atheros_ie_data,
54919 {"Atheros IE data", "wlan.atheros.data",
54920 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54921 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54922
54923 {&hf_ieee80211_aironet_ie_type,
54924 {"Aironet IE type", "wlan.aironet.type",
54925 FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals)((0 ? (const struct _value_string*)0 : ((aironet_ie_type_vals
))))
, 0,
54926 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54927
54928 {&hf_ieee80211_aironet_ie_dtpc,
54929 {"Aironet IE CCX DTCP", "wlan.aironet.dtpc",
54930 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
54931 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54932
54933 {&hf_ieee80211_aironet_ie_dtpc_unknown,
54934 {"Aironet IE CCX DTCP Unknown", "wlan.aironet.dtpc_unknown",
54935 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54936 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54937
54938 {&hf_ieee80211_aironet_ie_version,
54939 {"Aironet IE CCX version", "wlan.aironet.version",
54940 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54941 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54942
54943 {&hf_ieee80211_aironet_ie_data,
54944 { "Aironet IE data", "wlan.aironet.data",
54945 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
54946 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54947
54948 {&hf_ieee80211_qbss_version,
54949 {"QBSS Version", "wlan.qbss.version",
54950 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54951 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54952
54953 {&hf_ieee80211_qbss_scount,
54954 {"Station Count", "wlan.qbss.scount",
54955 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54956 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54957
54958 {&hf_ieee80211_qbss_cu,
54959 {"Channel Utilization", "wlan.qbss.cu",
54960 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54961 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54962
54963 {&hf_ieee80211_qbss_adc,
54964 {"Available Admission Capacity", "wlan.qbss.adc",
54965 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54966 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54967
54968 {&hf_ieee80211_qbss2_cu,
54969 {"Channel Utilization", "wlan.qbss2.cu",
54970 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54971 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54972
54973 {&hf_ieee80211_qbss2_gl,
54974 {"G.711 CU Quantum", "wlan.qbss2.glimit",
54975 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54976 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54977
54978 {&hf_ieee80211_qbss2_cal,
54979 {"Call Admission Limit", "wlan.qbss2.cal",
54980 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54981 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54982
54983 {&hf_ieee80211_qbss2_scount,
54984 {"Station Count", "wlan.qbss2.scount",
54985 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54986 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54987
54988 {&hf_ieee80211_aironet_ie_qos_reserved,
54989 {"Aironet IE QoS reserved", "wlan.aironet.qos.reserved",
54990 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54991 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54992
54993 {&hf_ieee80211_aironet_ie_qos_paramset,
54994 {"Aironet IE QoS paramset", "wlan.aironet.qos.paramset",
54995 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54996 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54997
54998 {&hf_ieee80211_aironet_ie_qos_val,
54999 {"Aironet IE QoS valueset", "wlan.aironet.qos.val",
55000 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55001 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55002
55003 {&hf_ieee80211_aironet_ie_clientmfp,
55004 {"Aironet IE Client MFP", "wlan.aironet.clientmfp",
55005 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
55006 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55007
55008 /* Vendor Specific : SGDSN */
55009 {&hf_ieee80211_vs_sgdsn_tag,
55010 {"Tag", "wlan.vs.sgdsn.tag",
55011 FT_NONE, BASE_NONE, NULL((void*)0), 0,
55012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55013
55014 {&hf_ieee80211_vs_sgdsn_type,
55015 {"Type", "wlan.vs.sgdsn.type",
55016 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_sgdsn_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_sgdsn_type_vals
))))
, 0,
55017 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55018
55019 {&hf_ieee80211_vs_sgdsn_length,
55020 {"Length", "wlan.vs.sgdsn.length",
55021 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55022 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55023
55024 {&hf_ieee80211_vs_sgdsn_version,
55025 {"Version", "wlan.vs.sgdsn.tag.version",
55026 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55027 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55028
55029 {&hf_ieee80211_vs_sgdsn_icaomfrcode,
55030 {"ICAO Manufacturer Code", "wlan.vs.sgdsn.tag.icaomfrcode",
55031 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55032 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55033
55034 {&hf_ieee80211_vs_sgdsn_manufacturer,
55035 {"Manufacturer", "wlan.vs.sgdsn.tag.manufacturer",
55036 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55037 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55038
55039 {&hf_ieee80211_vs_sgdsn_model,
55040 {"Model", "wlan.vs.sgdsn.tag.model",
55041 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55043
55044 {&hf_ieee80211_vs_sgdsn_serialnumber,
55045 {"Serial number", "wlan.vs.sgdsn.tag.serialnumber",
55046 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55048
55049 {&hf_ieee80211_vs_sgdsn_serialnumber_len,
55050 {"Serial number length", "wlan.vs.sgdsn.tag.serialnumber.len",
55051 FT_UINT8, BASE_CUSTOM, CF_FUNC(vs_sgdsn_serialnumber_len_custom)((const void *) (size_t) (vs_sgdsn_serialnumber_len_custom)), 0,
55052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55053
55054 {&hf_ieee80211_vs_sgdsn_gpscoord,
55055 {"GPS Coord", "wlan.vs.sgdsn.tag.gpscoord",
55056 FT_INT32, BASE_DEC, NULL((void*)0), 0,
55057 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55058
55059 {&hf_ieee80211_vs_sgdsn_altitude,
55060 {"Altitude", "wlan.vs.sgdsn.tag.altitude",
55061 FT_INT16, BASE_DEC, NULL((void*)0), 0,
55062 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55063
55064 {&hf_ieee80211_vs_sgdsn_speed,
55065 {"Speed", "wlan.vs.sgdsn.tag.speed",
55066 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55067 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55068
55069 {&hf_ieee80211_vs_sgdsn_heading,
55070 {"Heading", "wlan.vs.sgdsn.tag.heading",
55071 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55072 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55073
55074 /* Vendor Specific : Nintendo */
55075 {&hf_ieee80211_vs_nintendo_type,
55076 {"Type", "wlan.vs.nintendo.type",
55077 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_nintendo_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_nintendo_type_vals
))))
, 0,
55078 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55079
55080 {&hf_ieee80211_vs_nintendo_length,
55081 {"Length", "wlan.vs.nintendo.length",
55082 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55083 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55084
55085 {&hf_ieee80211_vs_nintendo_servicelist,
55086 {"Servicelist", "wlan.vs.nintendo.servicelist",
55087 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55088 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55089
55090 {&hf_ieee80211_vs_nintendo_service,
55091 {"Service", "wlan.vs.nintendo.service",
55092 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55093 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55094
55095 {&hf_ieee80211_vs_nintendo_consoleid,
55096 {"Console ID", "wlan.vs.nintendo.consoleid",
55097 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55098 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55099
55100 {&hf_ieee80211_vs_nintendo_unknown,
55101 {"Unknown", "wlan.vs.nintendo.unknown",
55102 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55103 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55104
55105 /* Vendor Specific : Aruba Networks */
55106 {&hf_ieee80211_vs_aruba_subtype,
55107 {"Subtype", "wlan.vs.aruba.subtype",
55108 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_aruba_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_aruba_subtype_vals
))))
, 0,
55109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55110
55111 {&hf_ieee80211_vs_aruba_apname,
55112 {"AP Name", "wlan.vs.aruba.ap_name",
55113 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55115
55116 {&hf_ieee80211_vs_aruba_data,
55117 {"Data", "wlan.vs.aruba.data",
55118 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55119 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55120
55121 {&hf_ieee80211_vs_aruba_gps_length,
55122 { "GPS Length", "wlan.ie.aruba.gps.length",
55123 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55125
55126 { &hf_ieee80211_vs_aruba_gps_subversion,
55127 { "GPS Subversion", "wlan.ie.aruba.gps.subversion",
55128 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55130
55131 { &hf_ieee80211_vs_aruba_gps_hop,
55132 { "GPS Hop", "wlan.ie.aruba.gps.hop",
55133 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55135
55136 { &hf_ieee80211_vs_aruba_gps_latitude,
55137 { "GPS Latitude", "wlan.ie.aruba.gps.latitude",
55138 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55140
55141 { &hf_ieee80211_vs_aruba_gps_longitude,
55142 { "GPS Longitude", "wlan.ie.aruba.gps.longitude",
55143 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55145
55146 { &hf_ieee80211_vs_aruba_gps_major_axis,
55147 { "GPS Major Axis", "wlan.ie.aruba.gps.major_axis",
55148 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55150
55151 { &hf_ieee80211_vs_aruba_gps_minor_axis,
55152 { "GPS Minor Axis", "wlan.ie.aruba.gps.minor_axis",
55153 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55154 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55155
55156 { &hf_ieee80211_vs_aruba_gps_orientation,
55157 { "GPS Orientation", "wlan.ie.aruba.gps.orientation",
55158 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55159 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55160
55161 { &hf_ieee80211_vs_aruba_gps_distance,
55162 { "GPS Distance", "wlan.ie.aruba.gps.distance",
55163 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55165
55166 /* Vendor Specific : Routerboard */
55167 {&hf_ieee80211_vs_routerboard_unknown,
55168 {"Unknown", "wlan.vs.routerboard.unknown",
55169 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55171
55172 {&hf_ieee80211_vs_routerboard_subitem,
55173 {"Sub IE", "wlan.vs.routerboard.subitem",
55174 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55176
55177 {&hf_ieee80211_vs_routerboard_subtype,
55178 {"Subtype", "wlan.vs.routerboard.subtype",
55179 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55180 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55181
55182 {&hf_ieee80211_vs_routerboard_sublength,
55183 {"Sublength", "wlan.vs.routerboard.sublength",
55184 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55185 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55186
55187 {&hf_ieee80211_vs_routerboard_subdata,
55188 {"Subdata", "wlan.vs.routerboard.subdata",
55189 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55191
55192 {&hf_ieee80211_vs_routerboard_subtype1_prefix,
55193 {"Subtype 1 Prefix", "wlan.vs.routerboard.subtype1_prefix",
55194 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55196
55197 {&hf_ieee80211_vs_routerboard_subtype1_data,
55198 {"Subtype 1 Data", "wlan.vs.routerboard.subtype1_data",
55199 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55201
55202 /* Vendor Specific : Meru (Fortinet) */
55203 {&hf_ieee80211_vs_meru_subitem,
55204 {"Sub IE", "wlan.vs.meru.unknown",
55205 FT_NONE, BASE_NONE, NULL((void*)0), 0,
55206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55207
55208 {&hf_ieee80211_vs_meru_subtype,
55209 {"Subtype", "wlan.vs.meru.subtype",
55210 FT_UINT8, 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_meru_sublength,
55214 {"Sublength", "wlan.vs.meru.sublength",
55215 FT_UINT8, 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_meru_subdata,
55219 {"Subdata", "wlan.vs.meru.subdata",
55220 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55221 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55222
55223 /* Vendor Specific : Extreme (Zebra) */
55224 {&hf_ieee80211_vs_extreme_subtype,
55225 {"Subtype", "wlan.vs.extreme.subtype",
55226 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_extreme_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_extreme_subtype_vals
))))
, 0,
55227 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55228
55229 {&hf_ieee80211_vs_extreme_subdata,
55230 {"Subdata", "wlan.vs.extreme.subdata",
55231 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55232 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55233
55234 {&hf_ieee80211_vs_extreme_unknown,
55235 {"Unknown", "wlan.vs.extreme.unknown",
55236 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55237 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55238
55239 {&hf_ieee80211_vs_extreme_ap_length,
55240 {"AP Length", "wlan.vs.extreme.ap_length",
55241 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55242 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55243
55244 {&hf_ieee80211_vs_extreme_ap_name,
55245 {"AP Name", "wlan.vs.extreme.ap_name",
55246 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55247 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55248
55249 /* Vendor Specific : Aerohive */
55250 {&hf_ieee80211_vs_aerohive_version,
55251 {"Version", "wlan.vs.aerohive.version",
55252 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55253 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55254
55255 {&hf_ieee80211_vs_aerohive_subtype,
55256 {"Subtype", "wlan.vs.aerohive.subtype",
55257 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55258 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55259
55260 {&hf_ieee80211_vs_aerohive_hostname_length,
55261 {"Host Name Length", "wlan.vs.aerohive.hostname_length",
55262 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55263 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55264
55265 {&hf_ieee80211_vs_aerohive_hostname,
55266 {"Host Name", "wlan.vs.aerohive.hostname",
55267 FT_STRING, 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_aerohive_data,
55271 {"Data", "wlan.vs.aerohive.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 /* Vendor Specific : Mist */
55276 {&hf_ieee80211_vs_mist_ap_name,
55277 {"AP Name", "wlan.vs.mist.apname",
55278 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55279 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55280
55281 {&hf_ieee80211_vs_mist_data,
55282 {"Data", "wlan.vs.mist.data",
55283 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55284 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55285
55286 {&hf_ieee80211_vs_ubiquiti_type,
55287 {"Subtype", "wlan.vs.ubiquiti.type",
55288 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_ubiquiti_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_ubiquiti_type_vals
))))
, 0,
55289 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55290
55291 {&hf_ieee80211_vs_ubiquiti_ap_name,
55292 {"AP Name", "wlan.vs.ubiquiti.ap_name",
55293 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55295
55296 {&hf_ieee80211_vs_ubiquiti_data,
55297 {"Data", "wlan.vs.ubiquiti.data",
55298 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55299 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55300
55301 /* Vendor Specific: Cisco */
55302 {&hf_ieee80211_vs_cisco_ap_name_v2,
55303 {"AP Name", "wlan.vs.cisco.apname_v2",
55304 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55306
55307 /* Vendor Specific : Ruckus */
55308 {&hf_ieee80211_vs_ruckus_ap_name,
55309 {"AP Name", "wlan.vs.ruckus.apname",
55310 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55311 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55312
55313 {&hf_ieee80211_vs_ruckus_data,
55314 {"Data", "wlan.vs.ruckus.data",
55315 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55316 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55317
55318 /* Vendor Specific : Alcatel-Lucent */
55319 {&hf_ieee80211_vs_alcatel_ap_name,
55320 {"AP Name", "wlan.vs.alcatel.apname",
55321 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55323
55324 {&hf_ieee80211_vs_alcatel_data,
55325 {"Data", "wlan.vs.alcatel.data",
55326 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55328
55329 /* Vendor Specific : Fortinet */
55330 {&hf_ieee80211_vs_fortinet_subtype,
55331 {"Subtype", "wlan.vs.fortinet.subtype",
55332 FT_UINT16, BASE_DEC, VALS(ieee80211_vs_fortinet_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_fortinet_subtype_vals
))))
, 0,
55333 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55334
55335 {&hf_ieee80211_vs_fortinet_system_type,
55336 {"Type", "wlan.vs.fortinet.system.type",
55337 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_fortinet_system_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_fortinet_system_type_vals
))))
, 0,
55338 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55339
55340 {&hf_ieee80211_vs_fortinet_system_length,
55341 {"Length", "wlan.vs.fortinet.system.length",
55342 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55343 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55344
55345 {&hf_ieee80211_vs_fortinet_system_apname,
55346 {"AP Name", "wlan.vs.fortinet.system.ap_name",
55347 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55348 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55349
55350 {&hf_ieee80211_vs_fortinet_system_apmodel,
55351 {"AP Model", "wlan.vs.fortinet.system.ap_model",
55352 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55353 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55354
55355 {&hf_ieee80211_vs_fortinet_system_apserial,
55356 {"AP Serial", "wlan.vs.fortinet.system.ap_serial",
55357 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55358 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55359
55360 {&hf_ieee80211_vs_fortinet_data,
55361 {"Data", "wlan.vs.fortinet.data",
55362 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55363 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55364
55365 /* Vendor Specific : Arista Networks */
55366 {&hf_ieee80211_vs_arista_subtype,
55367 {"Subtype", "wlan.vs.arista.subtype",
55368 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_arista_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_arista_subtype_vals
))))
, 0,
55369 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55370
55371 {&hf_ieee80211_vs_arista_apname,
55372 {"AP Name", "wlan.vs.arista.ap_name",
55373 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55374 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55375
55376 {&hf_ieee80211_vs_arista_data,
55377 {"Data", "wlan.vs.arista.data",
55378 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55379 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55380
55381 /* Vendor Specific : Wi-SUN */
55382 {&hf_ieee80211_vs_wisun_type,
55383 {"Data Type", "wlan.vs.wisun.type",
55384 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_wisun_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_wisun_type_vals
))))
, 0,
55385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55386 {&hf_ieee80211_vs_wisun_ptkid,
55387 {"PTK ID", "wlan.vs.wisun.ptkid",
55388 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55389 {&hf_ieee80211_vs_wisun_gtkl,
55390 {"GTK Liveness", "wlan.vs.wisun.gtkl",
55391 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55392 {&hf_ieee80211_vs_wisun_gtkl_gtk0,
55393 {"GTK[0]", "wlan.vs.wisun.gtkl.gtk0",
55394 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK00x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55395 {&hf_ieee80211_vs_wisun_gtkl_gtk1,
55396 {"GTK[1]", "wlan.vs.wisun.gtkl.gtk1",
55397 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK10x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55398 {&hf_ieee80211_vs_wisun_gtkl_gtk2,
55399 {"GTK[2]", "wlan.vs.wisun.gtkl.gtk2",
55400 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK20x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55401 {&hf_ieee80211_vs_wisun_gtkl_gtk3,
55402 {"GTK[3]", "wlan.vs.wisun.gtkl.gtk3",
55403 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK30x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55404 {&hf_ieee80211_vs_wisun_nr,
55405 {"Node Role", "wlan.vs.wisun.nr",
55406 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_wisun_nr_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_wisun_nr_vals
))))
, 0,
55407 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55408 {&hf_ieee80211_vs_wisun_lgtkl,
55409 {"LGTK Liveness", "wlan.vs.wisun.lgtkl",
55410 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55411 {&hf_ieee80211_vs_wisun_lgtkl_lgtk0,
55412 {"LGTK[0]", "wlan.vs.wisun.lgtkl.lgtk0",
55413 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_LGTKL_LGTK00x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55414 {&hf_ieee80211_vs_wisun_lgtkl_lgtk1,
55415 {"LGTK[1]", "wlan.vs.wisun.lgtkl.lgtk1",
55416 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_LGTKL_LGTK10x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55417 {&hf_ieee80211_vs_wisun_lgtkl_lgtk2,
55418 {"LGTK[2]", "wlan.vs.wisun.lgtkl.lgtk2",
55419 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_LGTKL_LGTK20x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55420 {&hf_ieee80211_vs_wisun_lgtk_key_id,
55421 {"Key ID", "wlan.vs.wisun.lgtk.key_id",
55422 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55423 {&hf_ieee80211_vs_wisun_lgtk_lgtk,
55424 {"LGTK", "wlan.vs.wisun.lgtk.lgtk",
55425 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55426 {&hf_ieee80211_vs_wisun_data,
55427 {"Data", "wlan.vs.wisun.data",
55428 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55429
55430 /* Vendor Specific : apple */
55431 {&hf_ieee80211_vs_apple_type,
55432 {"Type", "wlan.vs.apple.type",
55433 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55434 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55435
55436 {&hf_ieee80211_vs_apple_subtype,
55437 {"Subtype", "wlan.vs.apple.subtype",
55438 FT_UINT16, BASE_DEC, VALS(ieee80211_vs_apple_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_apple_subtype_vals
))))
, 0,
55439 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55440
55441 {&hf_ieee80211_vs_apple_length,
55442 {"Length", "wlan.vs.apple.length",
55443 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55444 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55445
55446 {&hf_ieee80211_vs_apple_data,
55447 {"Data", "wlan.vs.apple.data",
55448 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55449 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55450
55451 {&hf_ieee80211_tsinfo,
55452 {"Traffic Stream (TS) Info", "wlan.ts_info",
55453 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
55454 "Traffic Stream (TS) Info field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55455
55456 {&hf_ieee80211_tsinfo_type,
55457 {"Traffic Type", "wlan.ts_info.type",
55458 FT_UINT24, BASE_DEC, VALS(tsinfo_type)((0 ? (const struct _value_string*)0 : ((tsinfo_type)))), 0x000001,
55459 "Traffic Stream (TS) Info Traffic Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55460
55461 {&hf_ieee80211_tsinfo_tsid,
55462 {"Traffic Stream ID (TSID)", "wlan.ts_info.tsid",
55463 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00001E,
55464 "Traffic Stream ID (TSID) Info TSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55465
55466 {&hf_ieee80211_tsinfo_dir,
55467 {"Direction", "wlan.ts_info.dir",
55468 FT_UINT24, BASE_DEC, VALS(tsinfo_direction)((0 ? (const struct _value_string*)0 : ((tsinfo_direction)))), 0x000060,
55469 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55470
55471 {&hf_ieee80211_tsinfo_access,
55472 {"Access Policy", "wlan.ts_info.access",
55473 FT_UINT24, BASE_DEC, VALS(tsinfo_access)((0 ? (const struct _value_string*)0 : ((tsinfo_access)))), 0x000180,
55474 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55475
55476 {&hf_ieee80211_tsinfo_agg,
55477 {"Aggregation", "wlan.ts_info.agg",
55478 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000200,
55479 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55480
55481 {&hf_ieee80211_tsinfo_apsd,
55482 {"Automatic Power-Save Delivery (APSD)", "wlan.ts_info.apsd",
55483 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000400,
55484 "Traffic Stream (TS) Info Automatic Power-Save Delivery (APSD)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55485
55486 {&hf_ieee80211_tsinfo_up,
55487 {"User Priority", "wlan.ts_info.up",
55488 FT_UINT24, BASE_DEC, VALS(qos_up)((0 ? (const struct _value_string*)0 : ((qos_up)))), 0x003800,
55489 "Traffic Stream (TS) Info User Priority", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55490
55491 {&hf_ieee80211_tsinfo_ack,
55492 {"Ack Policy", "wlan.ts_info.ack",
55493 FT_UINT24, BASE_DEC, VALS(ack_policy)((0 ? (const struct _value_string*)0 : ((ack_policy)))), 0x00C000,
55494 "Traffic Stream (TS) Info Ack Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55495
55496 {&hf_ieee80211_tsinfo_sched,
55497 {"Schedule", "wlan.ts_info.sched",
55498 FT_UINT24, BASE_DEC, NULL((void*)0), 0x010000,
55499 "Traffic Stream (TS) Info Schedule", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55500
55501 {&hf_ieee80211_tsinfo_rsv,
55502 {"Reserved", "wlan.ts_info.rsv",
55503 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFE0000,
55504 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55505
55506 {&hf_ieee80211_tspec_nor_msdu,
55507 {"Normal MSDU Size", "wlan.tspec.nor_msdu",
55508 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55509 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55510
55511 {&hf_ieee80211_tspec_max_msdu,
55512 {"Maximum MSDU Size", "wlan.tspec.max_msdu",
55513 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55514 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55515
55516 {&hf_ieee80211_tspec_min_srv,
55517 {"Minimum Service Interval", "wlan.tspec.min_srv",
55518 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55519 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55520
55521 {&hf_ieee80211_tspec_max_srv,
55522 {"Maximum Service Interval", "wlan.tspec.max_srv",
55523 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55525
55526 {&hf_ieee80211_tspec_inact_int,
55527 {"Inactivity Interval", "wlan.tspec.inact_int",
55528 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55529 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55530
55531 {&hf_ieee80211_tspec_susp_int,
55532 {"Suspension Interval", "wlan.tspec.susp_int",
55533 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55535
55536 {&hf_ieee80211_tspec_srv_start,
55537 {"Service Start Time", "wlan.tspec.srv_start",
55538 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55540
55541 {&hf_ieee80211_tspec_min_data,
55542 {"Minimum Data Rate", "wlan.tspec.min_data",
55543 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55544 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55545
55546 {&hf_ieee80211_tspec_mean_data,
55547 {"Mean Data Rate", "wlan.tspec.mean_data",
55548 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55550
55551 {&hf_ieee80211_tspec_peak_data,
55552 {"Peak Data Rate", "wlan.tspec.peak_data",
55553 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55555
55556 {&hf_ieee80211_tspec_burst_size,
55557 {"Burst Size", "wlan.tspec.burst_size",
55558 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55559 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55560
55561 {&hf_ieee80211_tspec_delay_bound,
55562 {"Delay Bound", "wlan.tspec.delay_bound",
55563 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55564 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55565
55566 {&hf_ieee80211_tspec_min_phy,
55567 {"Minimum PHY Rate", "wlan.tspec.min_phy",
55568 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55569 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55570
55571 {&hf_ieee80211_tspec_surplus,
55572 {"Surplus Bandwidth Allowance", "wlan.tspec.surplus",
55573 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55575
55576 {&hf_ieee80211_tspec_medium,
55577 {"Medium Time", "wlan.tspec.medium",
55578 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55579 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55580
55581 {&hf_ieee80211_tspec_dmg,
55582 {"DMG attributes", "wlan.tspec.dmg",
55583 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55584 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55585
55586 {&hf_ieee80211_ts_delay,
55587 {"Traffic Stream (TS) Delay", "wlan.ts_delay",
55588 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55590
55591 {&hf_ieee80211_tclas_process,
55592 {"Processing", "wlan.tclas_proc.processing",
55593 FT_UINT8, BASE_DEC, VALS(ieee80211_tclas_process_flag)((0 ? (const struct _value_string*)0 : ((ieee80211_tclas_process_flag
))))
, 0,
55594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55595
55596 {&hf_ieee80211_tag_ext_supp_rates,
55597 {"Extended Supported Rates", "wlan.extended_supported_rates",
55598 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_supported_rates_vals_ext, 0x0,
55599 "In Mbit/sec, (B) for Basic Rates", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55600
55601 {&hf_ieee80211_sched_info,
55602 {"Schedule Info", "wlan.sched.sched_info",
55603 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
55604 "Schedule Info field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55605
55606 {&hf_ieee80211_sched_info_agg,
55607 {"Schedule Aggregation", "wlan.sched_info.agg",
55608 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0001,
55609 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55610
55611 {&hf_ieee80211_sched_info_tsid,
55612 {"Schedule Traffic Stream ID (TSID)", "wlan.sched_info.tsid",
55613 FT_UINT16, BASE_DEC, NULL((void*)0), 0x001E,
55614 "Traffic Stream ID (TSID) Info TSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55615
55616 {&hf_ieee80211_sched_info_dir,
55617 {"Schedule Direction", "wlan.sched_info.dir",
55618 FT_UINT16, BASE_DEC, VALS(tsinfo_direction)((0 ? (const struct _value_string*)0 : ((tsinfo_direction)))), 0x0060,
55619 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55620
55621 {&hf_ieee80211_sched_srv_start,
55622 {"Service Start Time", "wlan.sched.srv_start",
55623 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
55624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55625
55626 {&hf_ieee80211_sched_srv_int,
55627 {"Service Interval", "wlan.sched.srv_int",
55628 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
55629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55630
55631 {&hf_ieee80211_sched_spec_int,
55632 {"Specification Interval", "wlan.sched.spec_int",
55633 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
55634 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55635
55636 {&hf_ieee80211_aruba,
55637 {"Aruba Type", "wlan.aruba.type",
55638 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &aruba_mgt_typevals_ext, 0,
55639 "Aruba Management", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55640
55641 {&hf_ieee80211_aruba_hb_seq,
55642 {"Aruba Heartbeat Sequence", "wlan.aruba.heartbeat_sequence",
55643 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
55644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55645
55646 {&hf_ieee80211_aruba_mtu,
55647 {"Aruba MTU Size", "wlan.aruba.mtu_size",
55648 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55649 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55650
55651 /* Start: HT Control (+HTC) */
55652 {&hf_ieee80211_htc,
55653 {"HT Control (+HTC)", "wlan.htc",
55654 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
55655 "High Throughput Control (+HTC)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55656
55657 {&hf_ieee80211_htc_vht,
55658 {"VHT", "wlan.htc.vht",
55659 FT_BOOLEAN, 32, NULL((void*)0), HTC_VHT0x00000001,
55660 "High Throughput Control HT/VHT flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55661
55662 {&hf_ieee80211_htc_he,
55663 {"HE", "wlan.htc.he",
55664 FT_BOOLEAN, 32, NULL((void*)0), HTC_HE0x00000002,
55665 "High Efficiency Control HE flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55666
55667 {&hf_ieee80211_htc_he_ctrl_id,
55668 {"Control ID", "wlan.htc.he.a_control.ctrl_id",
55669 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55670
55671 {&hf_ieee80211_he_a_control_padding,
55672 {"Padding", "wlan.htc.he.a_control.padding",
55673 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55674
55675 {&hf_ieee80211_he_trs_he_tb_ppdu_len,
55676 {"HE TB PPDU Length", "wlan.htc.he.a_control.umrs.he_tb_ppdu_len",
55677 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55678
55679 {&hf_ieee80211_he_trs_ru_allocation,
55680 {"RU Allocation", "wlan.htc.he.a_control.umrs.ru_allocation",
55681 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00001fe0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55682
55683 {&hf_ieee80211_he_dl_tx_power,
55684 {"DL Tx Power", "wlan.htc.he.a_control.umrs.dl_tx_power",
55685 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0003e000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55686
55687 {&hf_ieee80211_he_ul_target_rssi,
55688 {"UL Target RSSI", "wlan.htc.he.a_control.umrs.ul_target_rssi",
55689 FT_UINT32, BASE_CUSTOM, CF_FUNC(ul_target_rssi_base_custom)((const void *) (size_t) (ul_target_rssi_base_custom)),
55690 0x007c0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55691
55692 {&hf_ieee80211_he_ul_mcs,
55693 {"UL MCS", "wlan.htc.he.a_control.umrs.ul_mcs",
55694 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55695
55696 {&hf_ieee80211_he_ul_reserved,
55697 {"reserved", "wlan.htc.he.a_control.umrs.reserved",
55698 FT_UINT32, BASE_HEX, NULL((void*)0), 0x02000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55699
55700 {&hf_ieee80211_he_om_rx_nss,
55701 {"Rx NSS", "wlan.htc.he.a_control.om.rx_nss",
55702 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55703
55704 {&hf_ieee80211_he_om_channel_width,
55705 {"Channel Width", "wlan.htc.he.a_control.om.channel_width",
55706 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000018, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55707
55708 {&hf_ieee80211_he_om_ul_mu_disable,
55709 {"UL MU Disable", "wlan.htc.he.a_control.om.ul_mu_disable",
55710 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55711
55712 {&hf_ieee80211_he_om_tx_nsts,
55713 {"Tx NSTS", "wlan.htc.he.a_control.om.tx_nsts",
55714 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000001c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55715
55716 {&hf_ieee80211_he_om_er_su_disable,
55717 {"ER SU Disable", "wlan.htc.he.a_control.om.er_su_disable",
55718 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55719
55720 {&hf_ieee80211_he_om_dl_mu_mimo_resound,
55721 {"DL MU-MIMO Resound Recommendation",
55722 "wlan.htc.he.a_control.om.dl_mu_mimo_resound_recommendation",
55723 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55724
55725 {&hf_ieee80211_he_om_ul_mu_data_disable,
55726 {"UL MU Data Disable", "wlan.htc.he.a_control.om.ul_mu_data_disable",
55727 FT_BOOLEAN, 32, NULL((void*)0), 0x00000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55728
55729 {&hf_ieee80211_he_hla_unsolicited_mfb,
55730 {"Unsolicited MFB", "wlan.htc.he.a_control.hla.unsolicited_mfb",
55731 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55732
55733 {&hf_ieee80211_he_hla_mrq,
55734 {"MRQ", "wlan.htc.he.a_control.hla.mrq",
55735 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55736
55737 {&hf_ieee80211_he_hla_nss,
55738 {"NSS", "wlan.htc.he.a_control.hla.NSS",
55739 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001c, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55740
55741 {&hf_ieee80211_he_hla_he_mcs,
55742 {"HE-MCS", "wlan.htc.he.a_control.hla.he_mcs",
55743 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000001e0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55744
55745 {&hf_ieee80211_he_hla_dcm,
55746 {"DCM", "wlan.htc.he.a_control.hla.dcm",
55747 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55748
55749 {&hf_ieee80211_he_hla_ru,
55750 {"RU", "wlan.htc.he.a_control.hla.ru",
55751 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0003fc00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55752
55753 {&hf_ieee80211_he_hla_bw,
55754 {"BW", "wlan.htc.he.a_control.hla.bw",
55755 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000c0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55756
55757 {&hf_ieee80211_he_hla_msi_ppdu_type,
55758 {"MSI/PPDU Type", "wlan.htc.he.a_control.hla.msi_ppdu_type",
55759 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00700000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55760
55761 {&hf_ieee80211_he_hla_tx_bf,
55762 {"Tx BF", "wlan.htc.he.a_control.hla.tx_bf",
55763 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) }},
55764
55765 {&hf_ieee80211_he_hla_reserved,
55766 {"Reserved", "wlan.htc.he.a_control.hla.reserved",
55767 FT_UINT32, BASE_HEX, NULL((void*)0), 0x03000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55768
55769 {&hf_ieee80211_he_bsr_aci_bitmap,
55770 {"ACI Bitmap", "wlan.htc.he.a_control.bsr.aci_bitmap",
55771 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55772
55773 {&hf_ieee80211_he_bsr_delta_tid,
55774 {"Delta TID", "wlan.htc.he.a_control.bsr.delta_tid",
55775 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55776
55777 {&hf_ieee80211_he_bsr_aci_high,
55778 {"ACI High", "wlan.htc.he.a_control.bsr.aci_high",
55779 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55780
55781 {&hf_ieee80211_he_bsr_scaling_factor,
55782 {"Scaling Factor", "wlan.htc.he.a_control.bsr.scaling_factor",
55783 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55784
55785 {&hf_ieee80211_he_bsr_queue_size_high,
55786 {"Queue Size High", "wlan.htc.he.a_control.bsr.queue_size_high",
55787 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0003fc00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55788
55789 {&hf_ieee80211_he_bsr_queue_size_all,
55790 {"Queue Size All", "wlan.htc.he.a_control.bsr.queue_size_all",
55791 FT_UINT32, BASE_HEX, NULL((void*)0), 0x03fc0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55792
55793 {&hf_ieee80211_he_uph_ul_power_headroom,
55794 {"UL Power Headroom", "wlan.htc.he.a_control.uph.ul_power_headroom",
55795 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55796
55797 {&hf_ieee80211_he_uph_ul_min_transmit_power_flag,
55798 {"Minimum Transmit Power Flag", "wlan.htc.he.a_control.uph.min_transmit_power_flag",
55799 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55800
55801 {&hf_ieee80211_he_uph_reserved,
55802 {"Reserved", "wlan.htc.he.a_control.uph.reserved",
55803 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55804
55805 {&hf_ieee80211_he_btc_avail_chan,
55806 {"Available Channel Bitmap", "wlan.htc.he.a_control.bqr.avail_chan_bitmap",
55807 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55808
55809 {&hf_ieee80211_he_btc_reserved,
55810 {"Reserved", "wlan.htc.he.a_control.bqr.reserved",
55811 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55812
55813 {&hf_ieee80211_he_cci_ac_constraint,
55814 {"AC Constraint", "wlan.htc.he.a_control.cci.ac_constraint",
55815 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55816
55817 {&hf_ieee80211_he_cci_rdg_more_ppdu,
55818 {"RDG/More PPDU", "wlan.htc.he.a_control.cci.rdg_more_ppdu",
55819 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55820
55821 {&hf_ieee80211_he_cci_sr_ppdu_indic,
55822 {"PSRT PPDU", "wlan.htc.he.a_control.cci.sr_ppdu_indic",
55823 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55824
55825 {&hf_ieee80211_he_cci_reserved,
55826 {"Reserved", "wlan.htc.he.a_control.cci.reserved",
55827 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000F8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55828
55829 {&hf_ieee80211_he_eht_om_rx_nss_ext,
55830 {"Rx NSS Extension", "wlan.htc.he.a_control.eht_om.rx_nss_ext",
55831 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55832
55833 {&hf_ieee80211_he_eht_om_chan_w_ext,
55834 {"Channel Width Extension", "wlan.htc.he.a_control.eht_om.chan_w_ext",
55835 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55836
55837 {&hf_ieee80211_he_eht_om_tx_nsts_ext,
55838 {"Tx NSTS Extension", "wlan.htc.he.a_control.eht_om.tx_nsts_ext",
55839 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55840
55841 {&hf_ieee80211_he_eht_om_reserved,
55842 {"Reserved", "wlan.htc.he.a_control.eht_om.reserved",
55843 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55844
55845 {&hf_ieee80211_he_srs_ppdu_resp_dur,
55846 {"PPDU Response Duration", "wlan.htc.he.a_control.srs.ppdu_resp_dur",
55847 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000000FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55848
55849 {&hf_ieee80211_he_srs_reserved,
55850 {"Reserved", "wlan.htc.he.a_control.srs.reserved",
55851 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55852
55853 {&hf_ieee80211_he_aar_assisted_ap_bitmap,
55854 {"Assisted AP Link ID Bitmap",
55855 "wlan.htc.he.a_control.aar.assisted_ap_link_id_bitmap",
55856 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55857
55858 {&hf_ieee80211_he_aar_reserved,
55859 {"Reserved", "wlan.htc.he.a_control.aar.reserved",
55860 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55861
55862 {&hf_ieee80211_he_a_control_ones,
55863 {"Padding", "wlan.htc.he.a_control.ones",
55864 FT_UINT32, BASE_HEX, NULL((void*)0), 0x03ffffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55865
55866 {&hf_ieee80211_he_trigger_common_info,
55867 {"HE Trigger Common Info", "wlan.trigger.he.common_info",
55868 FT_UINT64, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55869
55870 {&hf_ieee80211_he_trigger_type,
55871 {"Trigger Type", "wlan.trigger.he.trigger_type",
55872 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(trigger_type_vals)((0 ? (const struct _val64_string*)0 : ((trigger_type_vals)))
)
,
55873 0x000000000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55874
55875 {&hf_ieee80211_he_trigger_ul_length,
55876 {"UL Length", "wlan.trigger.he.ul_length",
55877 FT_UINT64, BASE_DEC, NULL((void*)0), 0x000000000000FFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55878
55879 {&hf_ieee80211_he_trigger_more_tf,
55880 {"More TF", "wlan.trigger.he.more_tf",
55881 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55882
55883 {&hf_ieee80211_he_trigger_cs_required,
55884 {"CS Required", "wlan.trigger.he.cs_required",
55885 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55886
55887 {&hf_ieee80211_he_trigger_ul_bw,
55888 {"UL BW", "wlan.trigger.he.ul_bw",
55889 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) }},
55890
55891 {&hf_ieee80211_he_trigger_gi_and_ltf_type,
55892 {"GI And LTF Type", "wlan.trigger.he.gi_and_ltf_type",
55893 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,
55894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55895
55896 {&hf_ieee80211_he_trigger_mu_mimo_ltf_mode,
55897 {"MU-MIMO LTF Mode", "wlan.trigger.he.mu_mimo_ltf_mode",
55898 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) }},
55899
55900 {&hf_ieee80211_he_trigger_num_he_ltf_syms_etc,
55901 {"Number of HE-LTF Symbols and Midamble Periodicity",
55902 "wlan.trigger.he.num_he_ltf_syms_and_midamble_per",
55903 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000003800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55904
55905 {&hf_ieee80211_he_trigger_ul_stbc,
55906 {"UL STBC", "wlan.trigger.he.ul_stbc",
55907 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000004000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55908
55909 {&hf_ieee80211_he_trigger_ldpc_extra_sym_seg,
55910 {"LDPC Extra Symbol Segment", "wlan.trigger.he.ldpc_extra_symbol_segment",
55911 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000008000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55912
55913 {&hf_ieee80211_he_trigger_ap_tx_power,
55914 {"AP Tx Power", "wlan.trigger.he.ap_tx_power",
55915 FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom)((const void *) (size_t) (ap_tx_power_custom)),
55916 0x00000003F0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55917
55918 {&hf_ieee80211_he_trigger_pre_fec_padding_factor,
55919 {"Pre-FEC Padding Factor",
55920 "wlan.trigger.he.ul_packet_extension.pre_fec_padding_factor",
55921 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400,
55922 VALS64(pre_fec_padding_factor_vals)((0 ? (const struct _val64_string*)0 : ((pre_fec_padding_factor_vals
))))
,
55923 0x0000000C00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55924
55925 {&hf_ieee80211_he_trigger_pe_disambiguity,
55926 {"PE Disambiguity",
55927 "wlan.trigger.he.ul_packet_extension.pe_disambiguity",
55928 FT_BOOLEAN, 64, TFS(&pe_disambiguity_tfs)((0 ? (const struct true_false_string*)0 : ((&pe_disambiguity_tfs
))))
,
55929 0x0000001000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55930
55931 {&hf_ieee80211_he_trigger_ul_spatial_reuse,
55932 {"UL Spatial Reuse", "wlan.trigger.he.ul_spatial_reuse",
55933 FT_UINT64, BASE_HEX, NULL((void*)0), 0x001FFFE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55934
55935 {&hf_ieee80211_he_trigger_ul_he_sig_a_reserved,
55936 {"UL HE-SIG-A2 Reserved", "wlan.trigger.he.ul_he_sig_a2_reserved",
55937 FT_UINT64, BASE_HEX, NULL((void*)0), 0x7FC0000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55938
55939 {&hf_ieee80211_he_trigger_doppler,
55940 {"Doppler", "wlan.trigger.he.doppler",
55941 FT_BOOLEAN, 64, NULL((void*)0), 0x0020000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55942
55943 {&hf_ieee80211_he_trigger_reserved,
55944 {"Reserved", "wlan.trigger.he.reserved",
55945 FT_UINT64, BASE_HEX, NULL((void*)0), 0x8000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55946
55947 {&hf_ieee80211_he_trigger_bar_ctrl,
55948 {"BAR Control", "wlan.trigger.he.common_info.bar_ctrl",
55949 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55950
55951 {&hf_ieee80211_he_trigger_bar_ctrl_ba_ack_policy,
55952 {"BA Ack Policy", "wlan.trigger.he.common_info.bar_ctrl.ba_ack_policy",
55953 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,
55954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55955
55956 {&hf_ieee80211_he_trigger_bar_ctrl_ba_type,
55957 {"BA Type", "wlan.trigger.he.common_info.bar_ctrl.ba_type",
55958 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) }},
55959
55960 {&hf_ieee80211_he_trigger_bar_ctrl_reserved,
55961 {"Reserved", "wlan.trigger.he.common_info.bar_ctrl.reserved",
55962 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0FE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55963
55964 {&hf_ieee80211_he_trigger_bar_ctrl_tid_info,
55965 {"TID_INFO", "wlan.trigger.he.common_info.bar_ctrl.tid_info",
55966 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55967
55968 {&hf_ieee80211_he_trigger_bar_info,
55969 {"BAR Information", "wlan.trigger.he.common_info.bar_info",
55970 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55971
55972 {&hf_ieee80211_he_trigger_bar_info_blk_ack_seq_ctrl,
55973 {"Block Ack Starting Sequence Control",
55974 "wlan.trigger.he.common_info.bar_info.blk_ack_starting_seq_ctrl",
55975 FT_UINT16, BASE_HEX, NULL((void*)0), 0xffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55976
55977 {&hf_ieee80211_he_trigger_user_info,
55978 {"User Info", "wlan.trigger.he.user_info",
55979 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55980
55981 {&hf_ieee80211_he_trigger_user_info_padding_start,
55982 {"Start of Padding", "wlan.trigger.he.user_info.start_of_padding",
55983 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55984
55985 {&hf_ieee80211_he_trigger_padding,
55986 {"Padding", "wlan.trigger.he.padding",
55987 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55988
55989 {&hf_ieee80211_he_trigger_mpdu_mu_spacing,
55990 {"MPDU MU Spacing Factor", "wlan.trigger.he.mpdu_mu_spacing_factor",
55991 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55992
55993 {&hf_ieee80211_he_trigger_tid_aggregation_limit,
55994 {"TID Aggregation Limit", "wlan.trigger.he.tid_aggregation_limit",
55995 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55996
55997 {&hf_ieee80211_he_trigger_dependent_reserved1,
55998 {"Reserved", "wlan.trigger.he.reserved1",
55999 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56000
56001 {&hf_ieee80211_he_trigger_preferred_ac,
56002 {"Preferred AC", "wlan.trigger.he.preferred_ac",
56003 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) }},
56004
56005 {&hf_ieee80211_he_trigger_dep_basic_user_info,
56006 {"Basic Trigger Dependent User Info", "wlan.trigger.he.basic_user_info",
56007 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56008
56009 {&hf_ieee80211_he_trigger_starting_aid,
56010 {"Starting AID", "wlan.trigger.he.starting_aid",
56011 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56012
56013 {&hf_ieee80211_he_trigger_dependent_reserved2,
56014 {"Reserved", "wlan.trigger.he.reserved2",
56015 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001FF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56016
56017 {&hf_ieee80211_he_trigger_feedback_type,
56018 {"Feedback Type", "wlan.trigger.he.feedback_type",
56019 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56020
56021 {&hf_ieee80211_he_trigger_dependent_reserved3,
56022 {"Reserved", "wlan.trigger.he.reserved3",
56023 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00FE000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56024
56025 {&hf_ieee80211_he_trigger_nfrp_target_rssi,
56026 {"Target RSSI", "wlan.trigger.he.target_rssi",
56027 FT_UINT40, BASE_CUSTOM, CF_FUNC(target_rssi_base_custom)((const void *) (size_t) (target_rssi_base_custom)), 0x7F00000000,
56028 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56029
56030 {&hf_ieee80211_he_trigger_multiplexing_flag,
56031 {"Multiplexing Flag", "wlan.trigger.he.multiplexing_flag",
56032 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56033
56034 {&hf_ieee80211_he_trigger_dep_nfrp_user_info,
56035 {"NFRP Trigger Dependent User Unfo", "wlan.trigger.he.nfrp_user_info",
56036 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56037
56038 {&hf_ieee80211_he_trigger_feedback_seg_retrans_bm,
56039 {"Feedback Segment Retransmission Bitmap", "wlan.trigger.he.feedback_bm",
56040 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56041
56042 {&hf_ieee80211_he_trigger_aid12,
56043 {"AID12", "wlan.trigger.he.user_info.aid12",
56044 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56045
56046 {&hf_ieee80211_he_trigger_ru_allocation_region,
56047 {"RU Allocation Region", "wlan.trigger.he.ru_allocation_region",
56048 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_ru_allocation_region_custom)((const void *) (size_t) (he_trigger_ru_allocation_region_custom
))
,
56049 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56050
56051 {&hf_ieee80211_he_trigger_ru_allocation,
56052 {"RU Allocation", "wlan.trigger.he.ru_allocation",
56053 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_ru_allocation_base_custom)((const void *) (size_t) (he_ru_allocation_base_custom)),
56054 0x00000FE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56055
56056 {&hf_ieee80211_he_trigger_ul_fec_coding_type,
56057 {"UL FEC Coding Type", "wlan.trigger.he.ul_fec_coding_type",
56058 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,
56059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56060
56061 {&hf_ieee80211_he_trigger_ul_mcs,
56062 {"UL MCS", "wlan.trigger.he.ul_mcs",
56063 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56064
56065 {&hf_ieee80211_he_trigger_ul_dcm,
56066 {"UL DCM", "wlan.trigger.he.ul_dcm",
56067 FT_BOOLEAN, 40, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56068
56069 {&hf_ieee80211_he_trigger_ru_starting_spatial_stream,
56070 {"Starting Spatial Stream", "wlan.trigger.he.ru_starting_spatial_stream",
56071 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56072 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56073
56074 {&hf_ieee80211_he_trigger_ru_number_spatial_streams,
56075 {"Number Of Spatial Streams", "wlan.trigger.he.ru_number_of_spatial_stream",
56076 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56077 0x00E0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56078
56079 {&hf_ieee80211_he_trigger_ru_number_ra_ru,
56080 {"Number of RA-RU", "wlan.trigger.he.ru_number_of_ra_ru",
56081 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56082 0x007C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56083
56084 {&hf_ieee80211_he_trigger_ru_no_more_ra_ru,
56085 {"No More RA-RU", "wlan.trigger.he.ru_no_more_ra_ru",
56086 FT_BOOLEAN, 40, NULL((void*)0), 0x0080000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56087
56088 {&hf_ieee80211_he_trigger_ul_target_rssi,
56089 {"UL Target RSSI", "wlan.trigger.he.ul_target_rssi",
56090 FT_UINT40, BASE_CUSTOM, CF_FUNC(target_rssi_base_custom)((const void *) (size_t) (target_rssi_base_custom)), 0x7F00000000,
56091 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56092
56093 {&hf_ieee80211_he_trigger_user_reserved,
56094 {"Reserved", "wlan.trigger.he.user_reserved",
56095 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56096
56097 {&hf_ieee80211_he_trigger_ranging_common_info_1,
56098 {"Ranging Common Info", "wlan.trigger.he.ranging.common_info",
56099 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56100
56101 {&hf_ieee80211_he_trigger_ranging_common_info_2,
56102 {"Ranging Common Info", "wlan.trigger.he.ranging.common_info",
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_eht_trigger_common_info,
56106 {"EHT Trigger Common Info", "wlan.trigger.eht.common_info",
56107 FT_UINT64, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56108
56109 {&hf_ieee80211_eht_trigger_type,
56110 {"Trigger Type", "wlan.trigger.eht.trigger_type",
56111 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(trigger_type_vals)((0 ? (const struct _val64_string*)0 : ((trigger_type_vals)))
)
,
56112 0x000000000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56113
56114 {&hf_ieee80211_eht_trigger_ul_length,
56115 {"UL Length", "wlan.trigger.eht.ul_length",
56116 FT_UINT64, BASE_DEC, NULL((void*)0), 0x000000000000FFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56117
56118 {&hf_ieee80211_eht_trigger_more_tf,
56119 {"More TF", "wlan.trigger.eht.more_tf",
56120 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56121
56122 {&hf_ieee80211_eht_trigger_cs_required,
56123 {"CS Required", "wlan.trigger.eht.cs_required",
56124 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56125
56126 {&hf_ieee80211_eht_trigger_ul_bw,
56127 {"UL BW", "wlan.trigger.eht.ul_bw",
56128 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(bw_subfield_vals)((0 ? (const struct _val64_string*)0 : ((bw_subfield_vals)))),
56129 0x00000000000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56130
56131 {&hf_ieee80211_eht_trigger_gi_and_eht_ltf_type,
56132 {"GI And HE/EHT-LTF Type/Triggered TXOP Sharing Mode",
56133 "wlan.trigger.eht.gi_and_he_eht_ltf_type_triggered_txop_sharing_mode",
56134 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000300000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56135
56136 {&hf_ieee80211_eht_trigger_reserved2,
56137 {"Reserved", "wlan.trigger.eht.reserved2",
56138 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56139
56140 {&hf_ieee80211_eht_trigger_num_he_eht_ltf_syms_etc,
56141 {"Number of HE/EHT-LTF Symbols",
56142 "wlan.trigger.eht.num_ltf_eht_ltf_symbols",
56143 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000003800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56144
56145 {&hf_ieee80211_eht_trigger_reserved3,
56146 {"Reserved", "wlan.trigger.eht.reserved3",
56147 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000004000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56148
56149 {&hf_ieee80211_eht_trigger_ldpc_extra_sym_seg,
56150 {"LDPC Extra Symbol Segment", "wlan.trigger.eht.ldpc_extra_symbol_segment",
56151 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000008000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56152
56153 {&hf_ieee80211_eht_trigger_ap_tx_power,
56154 {"AP Tx Power", "wlan.trigger.eht.ap_tx_power",
56155 FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom)((const void *) (size_t) (ap_tx_power_custom)),
56156 0x00000003F0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56157
56158 {&hf_ieee80211_eht_trigger_pre_fec_padding_factor,
56159 {"Pre-FEC Padding Factor",
56160 "wlan.trigger.eht.ul_packet_extension.pre_fec_padding_factor",
56161 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400,
56162 VALS64(pre_fec_padding_factor_vals)((0 ? (const struct _val64_string*)0 : ((pre_fec_padding_factor_vals
))))
,
56163 0x0000000c00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56164
56165 {&hf_ieee80211_eht_trigger_pe_disambiguity,
56166 {"PE Disambiguity",
56167 "wlan.trigger.eht.ul_packet_extension.pe_disambiguity",
56168 FT_BOOLEAN, 64, TFS(&pe_disambiguity_tfs)((0 ? (const struct true_false_string*)0 : ((&pe_disambiguity_tfs
))))
,
56169 0x0000001000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56170
56171 {&hf_ieee80211_eht_trigger_ul_spatial_reuse,
56172 {"Spatial Reuse", "wlan.trigger.eht.spatial_reuse",
56173 FT_UINT64, BASE_HEX, NULL((void*)0), 0x001FFFE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56174
56175 {&hf_ieee80211_eht_trigger_reserved4,
56176 {"Reserved", "wlan.trigger.eht.reserved4",
56177 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0020000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56178
56179 {&hf_ieee80211_eht_trigger_he_eht_p160,
56180 {"HE/EHT P160", "wlan.trigger.eht.he_eht_p160",
56181 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0040000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56182
56183 {&hf_ieee80211_eht_trigger_special_user_info_flag,
56184 {"Special User Info Field Flag",
56185 "wlan.trigger.eht.special_user_info_flag",
56186 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0080000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56187
56188 {&hf_ieee80211_eht_trigger_eht_reserved,
56189 {"EHT Reserved", "wlan.trigger.eht.eht_reserved",
56190 FT_UINT64, BASE_HEX, NULL((void*)0), 0x7f00000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56191
56192 {&hf_ieee80211_eht_trigger_reserved,
56193 {"Reserved", "wlan.trigger.eht.reserved",
56194 FT_UINT64, BASE_HEX, NULL((void*)0), 0x8000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56195
56196 {&hf_ieee80211_eht_trigger_user_info,
56197 {"EHT User Info", "wlan.trigger.eht.user_info",
56198 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56199
56200 {&hf_ieee80211_eht_trigger_aid12,
56201 {"AID12", "wlan.trigger.eht.user_info.aid12",
56202 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56203
56204 {&hf_ieee80211_eht_trigger_ru_allocation_region,
56205 {"RU Allocation Region", "wlan.trigger.eht.user_info.ru_allocation_region",
56206 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56207
56208 {&hf_ieee80211_eht_trigger_ru_allocation,
56209 {"RU Allocation", "wlan.trigger.eht.user_info.ru_allocation",
56210 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) }},
56211
56212 {&hf_ieee80211_eht_trigger_ul_fec_coding_type,
56213 {"UL FEC Coding Type", "wlan.trigger.eht.user_info.ul_fec_coding_type",
56214 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56215
56216 {&hf_ieee80211_eht_trigger_ul_eht_mcs,
56217 {"UL EHT MCS", "wlan.trigger.eht.user_info.ul_eht_mcs",
56218 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56219
56220 {&hf_ieee80211_eht_trigger_user_info_reserved,
56221 {"Reserved", "wlan.trigger.eht.user_info.reserved",
56222 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56223
56224 {&hf_ieee80211_eht_trigger_ru_starting_spatial_stream,
56225 {"Starting Spatial Stream",
56226 "wlan.trigger.eht.user_info.ru_starting_spatial_stream",
56227 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56228 0x003C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56229
56230 {&hf_ieee80211_eht_trigger_ru_number_spatial_streams,
56231 {"Number Of Spatial Streams",
56232 "wlan.trigger.eht.user_info.ru_number_spatial_streams",
56233 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56234 0x00C0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56235
56236 {&hf_ieee80211_eht_trigger_ul_target_recv_power,
56237 {"UL Target Receive Power",
56238 "wlan.trigger.eht.user_info.ul_target_receive_power",
56239 FT_UINT40, BASE_HEX, NULL((void*)0), 0x7F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56240
56241 {&hf_ieee80211_eht_trigger_ps160,
56242 {"PS160", "wlan.trigger.eht.user_info.ps160",
56243 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56244
56245 {&hf_ieee80211_eht_trigger_special_user_info,
56246 {"Special User Info",
56247 "wlan.trigger.eht.special_user_info",
56248 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56249
56250 {&hf_ieee80211_eht_trigger_phy_version_identifier,
56251 {"Phy Version Identifier",
56252 "wlan.trigger.eht.user_info.phy_version_identifier",
56253 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000007000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56254
56255 {&hf_ieee80211_eht_trigger_ul_bw_extenstion,
56256 {"UL BW Extension", "wlan.trigger.eht.user_info.ul_bw_extension",
56257 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000018000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56258
56259 {&hf_ieee80211_eht_trigger_eht_spatial_reuse_1,
56260 {"EHT/UHR Spatial Reuse 1", "wlan.trigger.eht.user_info.eht_spatial_reuse_1",
56261 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56262
56263 {&hf_ieee80211_eht_trigger_eht_spatial_reuse_2,
56264 {"EHT/UHR Spatial Reuse 2", "wlan.trigger.eht.user_info.eht_spatial_reuse_2",
56265 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56266
56267 {&hf_ieee80211_eht_trigger_disregard_u_sig_1,
56268 {"Disregard In U-SIG-1",
56269 "wlan.trigger.eht.user_info.disregard_u_sig_1",
56270 FT_UINT40, BASE_HEX, NULL((void*)0), 0x007E000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56271
56272 {&hf_ieee80211_eht_trigger_validate_u_sig_2,
56273 {"Validate In U-SIG-2",
56274 "wlan.trigger.eht.user_info.validate_u_sig_2",
56275 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0080000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56276
56277 {&hf_ieee80211_eht_trigger_disregard_u_sig_2_4lsb,
56278 {"four LSBs of Disregard In U-SIG-2",
56279 "wlan.trigger.eht.user_info.disregard_u_sig_2_4lsb",
56280 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56281
56282 {&hf_ieee80211_eht_trigger_disregard_u_sig_2_msb,
56283 {"MSB of Disregard In U-SIG-2",
56284 "wlan.trigger.eht.user_info.disregard_u_sig_2_msb",
56285 FT_UINT40, BASE_HEX, NULL((void*)0), 0x1000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56286
56287 {&hf_ieee80211_eht_trigger_special_reserved,
56288 {"Reserved", "wlan.trigger.eht.user_info.special_reserved",
56289 FT_UINT40, BASE_HEX, NULL((void*)0), 0xE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56290
56291 { &hf_ieee80211_uhr_trigger_common_info,
56292 {"UHR Trigger Common Info", "wlan.trigger.uhr.common_info",
56293 FT_UINT64, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56294
56295 { &hf_ieee80211_uhr_trigger_type,
56296 {"Trigger Type", "wlan.trigger.uhr.trigger_type",
56297 FT_UINT64, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(trigger_type_vals)((0 ? (const struct _val64_string*)0 : ((trigger_type_vals)))
)
,
56298 0x000000000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56299
56300 { &hf_ieee80211_uhr_trigger_ul_length,
56301 {"UL Length", "wlan.trigger.uhr.ul_length",
56302 FT_UINT64, BASE_DEC, NULL((void*)0), 0x000000000000FFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56303
56304 { &hf_ieee80211_uhr_trigger_more_tf,
56305 {"More TF", "wlan.trigger.uhr.more_tf",
56306 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56307
56308 { &hf_ieee80211_uhr_trigger_cs_required,
56309 {"CS Required", "wlan.trigger.uhr.cs_required",
56310 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56311
56312 { &hf_ieee80211_uhr_trigger_ul_bw,
56313 {"UL BW", "wlan.trigger.uhr.ul_bw",
56314 FT_UINT64, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(bw_subfield_vals)((0 ? (const struct _val64_string*)0 : ((bw_subfield_vals)))),
56315 0x00000000000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56316
56317 { &hf_ieee80211_uhr_trigger_gi_and_he_uhr_ltf_type,
56318 {"GI And HE/UHR-LTF Type/Triggered TXOP Sharing Mode",
56319 "wlan.trigger.uhr.gi_and_he_uhr_ltf_type_triggered_txop_sharing_mode",
56320 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000300000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56321
56322 { &hf_ieee80211_uhr_trigger_reserved2,
56323 {"Reserved", "wlan.trigger.uhr.reserved2",
56324 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56325
56326 { &hf_ieee80211_uhr_trigger_num_he_uhr_ltf_syms_etc,
56327 {"Number of HE/UHR-LTF Symbols",
56328 "wlan.trigger.uhr.num_he_uhr_ltf_symbols",
56329 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000003800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56330
56331 { &hf_ieee80211_uhr_trigger_reserved3,
56332 {"Reserved", "wlan.trigger.uhr.reserved3",
56333 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000004000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56334
56335 { &hf_ieee80211_uhr_trigger_ldpc_extra_sym_seg,
56336 {"LDPC Extra Symbol Segment", "wlan.trigger.uhr.ldpc_extra_symbol_segment",
56337 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000008000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56338
56339 { &hf_ieee80211_uhr_trigger_ap_tx_power,
56340 {"AP Tx Power", "wlan.trigger.uhr.ap_tx_power",
56341 FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom)((const void *) (size_t) (ap_tx_power_custom)),
56342 0x00000003F0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56343
56344 { &hf_ieee80211_uhr_trigger_pre_fec_padding_factor,
56345 {"Pre-FEC Padding Factor",
56346 "wlan.trigger.uhr.ul_packet_extension.pre_fec_padding_factor",
56347 FT_UINT64, BASE_DEC | BASE_VAL64_STRING0x00000400,
56348 VALS64(pre_fec_padding_factor_vals)((0 ? (const struct _val64_string*)0 : ((pre_fec_padding_factor_vals
))))
,
56349 0x0000000c00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56350
56351 { &hf_ieee80211_uhr_trigger_pe_disambiguity,
56352 {"PE Disambiguity",
56353 "wlan.trigger.uhr.ul_packet_extension.pe_disambiguity",
56354 FT_BOOLEAN, 64, TFS(&pe_disambiguity_tfs)((0 ? (const struct true_false_string*)0 : ((&pe_disambiguity_tfs
))))
,
56355 0x0000001000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56356
56357 { &hf_ieee80211_uhr_trigger_ul_spatial_reuse,
56358 {"Spatial Reuse", "wlan.trigger.uhr.spatial_reuse",
56359 FT_UINT64, BASE_HEX, NULL((void*)0), 0x001FFFE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56360
56361 { &hf_ieee80211_uhr_trigger_reserved4,
56362 {"Reserved", "wlan.trigger.uhr.reserved4",
56363 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0020000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56364
56365 { &hf_ieee80211_uhr_trigger_he_uhr_p160,
56366 {"HE/UHR P160", "wlan.trigger.uhr.he_uhr_p160",
56367 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0040000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56368
56369 { &hf_ieee80211_uhr_trigger_special_user_info_flag,
56370 {"Special User Info Field Flag",
56371 "wlan.trigger.uhr.special_user_info_flag",
56372 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0080000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56373
56374 { &hf_ieee80211_uhr_trigger_dru_rru,
56375 {"DRU/RRU Indication", "wlan.trigger.uhr.dru_rru",
56376 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0f00000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56377
56378 { &hf_ieee80211_uhr_trigger_ifcs,
56379 {"IFCS Present Flag", "wlan.trigger.uhr.ifcs",
56380 FT_UINT64, BASE_HEX, NULL((void*)0), 0x1000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56381
56382 { &hf_ieee80211_uhr_trigger_uhr_reserved,
56383 {"UHR Reserved", "wlan.trigger.uhr.uhr_reserved",
56384 FT_UINT64, BASE_HEX, NULL((void*)0), 0x2000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56385
56386 { &hf_ieee80211_uhr_trigger_reserved,
56387 {"Reserved", "wlan.trigger.uhr.reserved",
56388 FT_UINT64, BASE_HEX, NULL((void*)0), 0x4000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56389
56390 { &hf_ieee80211_uhr_trigger_user_info,
56391 {"UHR User Info", "wlan.trigger.uhr.user_info",
56392 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56393
56394 { &hf_ieee80211_uhr_trigger_aid12,
56395 {"AID12", "wlan.trigger.uhr.user_info.aid12",
56396 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56397
56398 { &hf_ieee80211_uhr_trigger_ru_allocation_region,
56399 {"RU Allocation Region", "wlan.trigger.uhr.user_info.ru_allocation_region",
56400 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56401
56402 { &hf_ieee80211_uhr_trigger_ru_allocation,
56403 {"RU Allocation", "wlan.trigger.uhr.user_info.ru_allocation",
56404 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000FE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56405
56406 { &hf_ieee80211_uhr_trigger_ul_fec_coding_type,
56407 {"UL FEC Coding Type", "wlan.trigger.uhr.user_info.ul_fec_coding_type",
56408 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56409
56410 { &hf_ieee80211_uhr_trigger_ul_uhr_mcs,
56411 {"UL UHR MCS", "wlan.trigger.uhr.user_info.ul_uhr_mcs",
56412 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56413
56414 { &hf_ieee80211_uhr_trigger_2xldpc,
56415 {"2xLDPC", "wlan.trigger.uhr.user_info.2xldpc",
56416 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56417
56418 { &hf_ieee80211_uhr_trigger_ru_starting_spatial_stream,
56419 {"Starting Spatial Stream",
56420 "wlan.trigger.uhr.user_info.ru_starting_spatial_stream",
56421 FT_UINT40, BASE_DEC, NULL((void*)0),
56422 0x003C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56423
56424 { &hf_ieee80211_uhr_trigger_dru_distribution_bw,
56425 {"DRU Distribution BW",
56426 "wlan.trigger.uhr.user_info.dru_distribution_bw",
56427 FT_UINT40, BASE_DEC, NULL((void*)0),
56428 0x000C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56429
56430 { &hf_ieee80211_uhr_trigger_dru_reserved,
56431 {"DRU reserved",
56432 "wlan.trigger.uhr.user_info.dru_reserved",
56433 FT_UINT40, BASE_DEC, NULL((void*)0),
56434 0x0030000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56435
56436 { &hf_ieee80211_uhr_trigger_ru_number_spatial_streams,
56437 {"Number Of Spatial Streams",
56438 "wlan.trigger.uhr.user_info.ru_number_spatial_streams",
56439 FT_UINT40, BASE_DEC, NULL((void*)0),
56440 0x00C0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56441
56442 { &hf_ieee80211_uhr_trigger_ul_target_recv_power,
56443 {"UL Target Receive Power",
56444 "wlan.trigger.uhr.user_info.ul_target_receive_power",
56445 FT_UINT40, BASE_HEX, NULL((void*)0), 0x7F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56446
56447 { &hf_ieee80211_uhr_trigger_ps160,
56448 {"PS160", "wlan.trigger.uhr.user_info.ps160",
56449 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56450
56451 {&hf_ieee80211_ranging_trigger_subtype1,
56452 {"Ranging Trigger Subtype",
56453 "wlan.trigger.he.ranging.ranging_trigger_subtype",
56454 FT_UINT8, BASE_RANGE_STRING0x00000100|BASE_HEX, RVALS(ranging_trigger_subtype_vals)((0 ? (const struct _range_string*)0 : ((ranging_trigger_subtype_vals
))))
,
56455 0x0f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56456
56457 {&hf_ieee80211_ranging_trigger_reserved1,
56458 {"Reserved", "wlan.trigger.he.ranging.reserved",
56459 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56460
56461 {&hf_ieee80211_ranging_trigger_token,
56462 {"Token", "wlan.trigger.he.ranging.token",
56463 FT_UINT8, BASE_HEX, NULL((void*)0), 0xe0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56464
56465 {&hf_ieee80211_ranging_trigger_subtype2,
56466 {"Ranging Trigger Subtype",
56467 "wlan.trigger.he.ranging.ranging_trigger_subtype",
56468 FT_UINT16, BASE_RANGE_STRING0x00000100|BASE_HEX,
56469 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) }},
56470
56471 {&hf_ieee80211_ranging_trigger_reserved2,
56472 {"Reserved", "wlan.trigger.he.ranging.reserved2",
56473 FT_UINT16, BASE_HEX, NULL((void*)0), 0x03f0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56474
56475 {&hf_ieee80211_ranging_trigger_sounding_dialog_token,
56476 {"Sounding Dialog Token Number",
56477 "wlan.trigger.he.ranging.sounding_dialog_token",
56478 FT_UINT16, BASE_HEX, NULL((void*)0), 0xfc00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56479
56480 {&hf_ieee80211_he_trigger_ranging_trigger_poll_rpt,
56481 {"Ranging Trigger Poll/Rpt", "wlan.trigger.he.ranging.poll_rpt",
56482 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56483
56484 {&hf_ieee80211_ranging_pol_rpt_aid12_rsid12,
56485 {"AID12/RSID12", "wlan.trigger.he.ranging.poll_rpt.aid12_rsid12",
56486 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56487
56488 {&hf_ieee80211_ranging_pol_rpt_ru_alloc_region,
56489 {"RU Allocation Region", "wlan.trigger.he.ranging.poll_rpt.ru_allocation_region",
56490 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_ru_allocation_region_custom)((const void *) (size_t) (he_trigger_ru_allocation_region_custom
))
,
56491 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56492
56493 {&hf_ieee80211_ranging_pol_rpt_ru_alloc,
56494 {"RU Allocation", "wlan.trigger.he.ranging.poll_rpt.ru_allocation",
56495 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) }},
56496
56497 {&hf_ieee80211_ranging_pol_rpt_ul_fec_coding_type,
56498 {"UL FEC Coding Type",
56499 "wlan.trigger.he.ranging.poll_rpt.ul_fec_coding_type",
56500 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) }},
56501
56502 {&hf_ieee80211_ranging_pol_rpt_ulmcs,
56503 {"UL MCS", "wlan.trigger.he.ranging.poll_rpt.ul_mcs",
56504 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56505
56506 {&hf_ieee80211_ranging_pol_rpt_uldcm,
56507 {"UL DCM", "wlan.trigger.he.ranging.poll_rpt.ul_dcm",
56508 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56509
56510 {&hf_ieee80211_ranging_pol_rpt_starting_spatial_stream,
56511 {"Starting Spatial Stream",
56512 "wlan.trigger.he.ranging.poll_rpt.starting_spatial_stream",
56513 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56514 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56515
56516 {&hf_ieee80211_ranging_pol_rpt_number_spatial_streams,
56517 {"Number Of Spatial Streams",
56518 "wlan.trigger.he.ranging.poll_rpt.number_spatial_streams",
56519 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56520 0x00e0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56521
56522 {&hf_ieee80211_ranging_pol_rpt_ul_target_rssi,
56523 {"UL Target RSSI", "wlan.trigger.he.ranging.poll_rpt.ul_target_rssi",
56524 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) }},
56525
56526 {&hf_ieee80211_ranging_pol_rpt_reserved,
56527 {"Reserved", "wlan.trigger.he.ranging.poll_rpt.reserved",
56528 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56529
56530 {&hf_ieee80211_he_trigger_ranging_trigger_sounding,
56531 {"Ranging Trigger Sounding", "wlan.trigger.he.ranging.sounding",
56532 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56533
56534 {&hf_ieee80211_ranging_sounding_aid12_rsid12,
56535 {"AID12/RSID12", "wlan.trigger.he.ranging.sounding.aid12_rsid12",
56536 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56537
56538 {&hf_ieee80211_ranging_sounding_reserved1,
56539 {"Reserved", "wlan.trigger.he.ranging.sounding.reserved1",
56540 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001ff000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56541
56542 {&hf_ieee80211_ranging_sounding_i2r_rep,
56543 {"I2R Rep", "wlan.trigger.he.ranging.sounding.i2r_rep",
56544 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56545
56546 {&hf_ieee80211_ranging_sounding_reserved2,
56547 {"Reserved", "wlan.trigger.he.ranging.sounding.reserved2",
56548 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0003000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56549
56550 {&hf_ieee80211_ranging_sounding_starting_spatial_stream,
56551 {"Starting Spatial Stream",
56552 "wlan.trigger.he.ranging.sounding.starting_spatial_stream",
56553 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56554 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56555
56556 {&hf_ieee80211_ranging_sounding_number_spatial_streams,
56557 {"Number of Spatial Streams",
56558 "wlan.trigger.he.ranging.sounding.number_spatial_streams",
56559 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56560 0x00e0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56561
56562 {&hf_ieee80211_ranging_sounding_ul_target_rssi,
56563 {"UL Target RSSI", "wlan.trigger.he.ranging.sounding.ul_target_rssi",
56564 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) }},
56565
56566 {&hf_ieee80211_ranging_sounding_reserved3,
56567 {"Reserved", "wlan.trigger.he.ranging.sounding.reserved3",
56568 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56569
56570 {&hf_ieee80211_he_trigger_ranging_trigger_sec_sound,
56571 {"Secured Sounding", "wlan.trigger.he.ranging.secured_sounding",
56572 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56573
56574 {&hf_ieee80211_ranging_sec_sound_aid12_rsid12,
56575 {"AID12/RSID12", "wlan.trigger.he.ranging.secured_sounding.aid12_rsid12",
56576 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56577
56578 {&hf_ieee80211_ranging_sec_sound_reserved1,
56579 {"Reserved", "wlan.trigger.he.ranging.secured_sounding.reserved1",
56580 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001ff000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56581
56582 {&hf_ieee80211_ranging_sec_sound_i2r_rep,
56583 {"I2R Rep", "wlan.trigger.he.ranging.secured_sounding.i2r_rep",
56584 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56585
56586 {&hf_ieee80211_ranging_sec_sound_reserved2,
56587 {"Reserved", "wlan.trigger.he.ranging.secured_sounding.reserved2",
56588 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0003000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56589
56590 {&hf_ieee80211_ranging_sec_sound_starting_spatial_stream,
56591 {"Starting Spatial Stream",
56592 "wlan.trigger.he.ranging.secured_sounding.starting_spatial_stream",
56593 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56594 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56595
56596 {&hf_ieee80211_ranging_sec_sound_number_spatial_streams,
56597 {"Number of Spatial Streams",
56598 "wlan.trigger.he.ranging.secured_sounding.number_spatial_streams",
56599 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56600 0x00e0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56601
56602 {&hf_ieee80211_ranging_sec_sound_ul_target_rssi,
56603 {"UL Target RSSI",
56604 "wlan.trigger.he.ranging.secured_sounding.ul_target_rssi",
56605 FT_UINT40, BASE_HEX, NULL((void*)0), 0x7f00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56606
56607 {&hf_ieee80211_ranging_sec_sound_reserved3,
56608 {"Reserved", "wlan.trigger.he.ranging.secured_sounding.reserved3",
56609 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56610
56611 {&hf_ieee80211_he_trigger_ranging_user_info_sac,
56612 {"SAC", "wlan.trigger.he.ranging.user_info.sac",
56613 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56614
56615 {&hf_ieee80211_he_qtp_control,
56616 {"Control", "wlan.ext_tag.quiet_time_period.control",
56617 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,
56618 "Type of Quiet Time Period Element", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56619
56620 {&hf_ieee80211_he_qtp_setup_quiet_period_duration,
56621 {"Quiet Period Duration", "wlan.ext_tag.quiet_time_period.setup.duration",
56622 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56623 "Quiet Period Duration in units of 32us", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56624
56625 {&hf_ieee80211_he_qtp_setup_srv_specific_identif,
56626 {"Service Specific Identifier", "wlan.ext_tag.quiet_time_period.setup.srv_specific_identif",
56627 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56628 "Service Specific peer-to-peer operation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56629
56630 {&hf_ieee80211_he_qtp_request_dialog_token,
56631 {"Dialog Token", "wlan.ext_tag.quiet_time_period.request.dialog_token",
56632 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56633 "Quiet Time Periods Response suptype to which request subtype corresponds",
56634 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56635
56636 {&hf_ieee80211_he_qtp_request_quiet_period_offset,
56637 {"Quiet Period Offset", "wlan.ext_tag.quiet_time_period.request.offset",
56638 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56639 "Offset of the first quiet period from the TBTT in TUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56640
56641 {&hf_ieee80211_he_qtp_request_quiet_period_duration,
56642 {"Quiet Period Duration", "wlan.ext_tag.quiet_time_period.request.duration",
56643 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56644 "Quiet Period Duration in units of 32us", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56645
56646 {&hf_ieee80211_he_qtp_request_quiet_period_interval,
56647 {"Quiet Period Interval", "wlan.ext_tag.quiet_time_period.request.interval",
56648 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56649 "Interval between the start of two consecutive quite time periods, in TUs",
56650 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56651
56652 {&hf_ieee80211_he_qtp_request_repetition_count,
56653 {"Repetition Count", "wlan.ext_tag.quiet_time_period.request.repetition_count",
56654 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56655 "Number of requested quiet time periods", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56656
56657 {&hf_ieee80211_he_qtp_request_srv_specific_identif,
56658 {"Service Specific Identifier", "wlan.ext_tag.quiet_time_period.request.srv_specific_identif",
56659 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56660 "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) } },
56661
56662 {&hf_ieee80211_he_qtp_response_dialog_token,
56663 {"Dialog Token", "wlan.ext_tag.quiet_time_period.response.dialog_token",
56664 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56665 "The quiet time period request subtype to which this response corresponds",
56666 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56667
56668 {&hf_ieee80211_he_qtp_response_status_code,
56669 {"Status Code", "wlan.ext_tag.quiet_time_period.response.status_code",
56670 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56671 "Status of the requested operation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56672
56673 {&hf_ieee80211_he_qtp_response_quiet_period_offset,
56674 {"Quiet Period Offset", "wlan.ext_tag.quiet_time_period.response.offset",
56675 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56676 "Offset of the start of the first quiet time period", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56677
56678 {&hf_ieee80211_he_qtp_response_quiet_period_duration,
56679 {"Quiet Period Duration", "wlan.ext_tag.quiet_time_period.response.duration",
56680 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56681 "Quiet Period Duration in units of 32us", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56682
56683 {&hf_ieee80211_he_qtp_response_quiet_period_interval,
56684 {"Quiet Period Interval", "wlan.ext_tag.quiet_time_period.response.interval",
56685 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56686 "Interval between the start of two consecutive quiet time periods", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56687
56688 {&hf_ieee80211_he_qtp_response_repetition_count,
56689 {"Repetition Count", "wlan.ext_tag.quiet_time_period.response.repetition_count",
56690 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56691 "Number of requested quiet time periods", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56692
56693 {&hf_ieee80211_he_qtp_response_srv_specific_identif,
56694 {"Service Specific Identifier", "wlan.ext_tag.quiet_time_period.response.srv_specific_identif",
56695 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56696 "Identifier of a peer-to-peer operation for which participating HE STAs might transmit frames",
56697 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56698
56699 {&hf_ieee80211_he_ndp_annc_sta,
56700 {"STA Info", "wlan.he_ndp.sta_info",
56701 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56702
56703 {&hf_ieee80211_he_ndp_annc_aid11,
56704 {"AID11", "wlan.he_ndp.sta_info.aid11",
56705 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000007FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56706
56707 {&hf_ieee80211_he_ndp_annc_ru_start,
56708 {"RU Start Index", "wlan.he_ndp.sta_info.ru_start",
56709 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0003F800,
56710 "26-tone RU start index of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56711
56712 {&hf_ieee80211_he_ndp_annc_ru_end,
56713 {"RU End Index", "wlan.he_ndp.sta_info.ru_end",
56714 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01FC0000,
56715 "26-tone RU end index of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56716
56717 {&hf_ieee80211_he_ndp_annc_feedback_type_and_ng,
56718 {"Feedback Type and Ng", "wlan.he_ndp.sta_info.feedback_type_and_ng",
56719 FT_UINT32, BASE_HEX, NULL((void*)0), 0x06000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56720
56721 {&hf_ieee80211_he_ndp_annc_disambiguation,
56722 {"Disambiguation", "wlan.he_ndp.sta_info.disambiguation",
56723 FT_UINT32, BASE_HEX, NULL((void*)0), 0x08000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56724
56725 {&hf_ieee80211_he_ndp_annc_codebook_size,
56726 {"Codebook Size", "wlan.he_ndp.sta_info.codebook_size",
56727 FT_UINT32, BASE_HEX, NULL((void*)0), 0x10000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56728
56729 {&hf_ieee80211_he_ndp_annc_nc,
56730 {"Nc", "wlan.he_ndp.sta_info.nc",
56731 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56732
56733 {&hf_ieee80211_he_ndp_annc_disallowed_bitmap,
56734 {"Disallowed Subchannel Bitmap",
56735 "wlan.he_ndp.sta_info.disallowed_subchannel_bitmap",
56736 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0007f800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56737
56738 {&hf_ieee80211_he_ndp_annc_reserved1,
56739 {"Reserved", "wlan.he_ndp.sta_info.reserved1",
56740 FT_UINT32, BASE_HEX, NULL((void*)0), 0x07f80000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56741
56742 {&hf_ieee80211_he_ndp_annc_reserved2,
56743 {"Reserved", "wlan.he_ndp.sta_info.reserved2",
56744 FT_UINT32, BASE_HEX, NULL((void*)0), 0xf0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56745
56746 {&hf_ieee80211_htc_ht_lac,
56747 {"Link Adaptation Control (LAC)", "wlan.htc.lac",
56748 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FFFE,
56749 "High Throughput Control Link Adaptation Control (LAC)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56750
56751 {&hf_ieee80211_htc_lac_trq,
56752 {"Training Request (TRQ)", "wlan.htc.lac.trq",
56753 FT_BOOLEAN, 16, TFS(&htc_lac_trq_flag)((0 ? (const struct true_false_string*)0 : ((&htc_lac_trq_flag
))))
, 0x0002,
56754 "High Throughput Control Link Adaptation Control Training Request (TRQ)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56755
56756 {&hf_ieee80211_htc_lac_mai_aseli,
56757 {"Antenna Selection Indication (ASELI)", "wlan.htc.lac.mai.aseli",
56758 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C,
56759 "High Throughput Control Link Adaptation Control MAI Antenna Selection Indication", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56760
56761 {&hf_ieee80211_htc_lac_mai_mrq,
56762 {"MCS Request (MRQ)", "wlan.htc.lac.mai.mrq",
56763 FT_BOOLEAN, 16, TFS(&htc_lac_mai_mrq_flag)((0 ? (const struct true_false_string*)0 : ((&htc_lac_mai_mrq_flag
))))
, 0x0004,
56764 "High Throughput Control Link Adaptation Control MAI MCS Request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56765
56766 {&hf_ieee80211_htc_lac_mai_msi,
56767 {"MCS Request Sequence Identifier (MSI)", "wlan.htc.lac.mai.msi",
56768 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038,
56769 "High Throughput Control Link Adaptation Control MAI MCS Request Sequence Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56770
56771 {&hf_ieee80211_htc_lac_mai_reserved,
56772 {"Reserved", "wlan.htc.lac.mai.reserved",
56773 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038,
56774 "High Throughput Control Link Adaptation Control MAI Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56775
56776 {&hf_ieee80211_htc_lac_mfsi,
56777 {"MCS Feedback Sequence Identifier (MFSI)", "wlan.htc.lac.mfsi",
56778 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01C0,
56779 "High Throughput Control Link Adaptation Control MCS Feedback Sequence Identifier (MSI)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56780
56781 {&hf_ieee80211_htc_lac_asel_command,
56782 {"Antenna Selection (ASEL) Command", "wlan.htc.lac.asel.command",
56783 FT_UINT16, BASE_HEX, VALS(ieee80211_htc_lac_asel_command_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_lac_asel_command_flags
))))
, 0x0E00,
56784 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Command", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56785
56786 {&hf_ieee80211_htc_lac_asel_data,
56787 {"Antenna Selection (ASEL) Data", "wlan.htc.lac.asel.data",
56788 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
56789 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56790
56791 {&hf_ieee80211_htc_lac_mfb,
56792 {"MCS Feedback (MFB)", "wlan.htc.lac.mfb",
56793 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00,
56794 "High Throughput Control Link Adaptation Control MCS Feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56795
56796 {&hf_ieee80211_htc_cal_pos,
56797 {"Calibration Position", "wlan.htc.cal.pos",
56798 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_cal_pos_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_cal_pos_flags
))))
, 0x00030000,
56799 "High Throughput Control Calibration Position", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56800
56801 {&hf_ieee80211_htc_cal_seq,
56802 {"Calibration Sequence Identifier", "wlan.htc.cal.seq",
56803 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000C0000,
56804 "High Throughput Control Calibration Sequence Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56805
56806 {&hf_ieee80211_htc_reserved1,
56807 {"Reserved", "wlan.htc.reserved1",
56808 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00300000,
56809 "High Throughput Control Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56810
56811 {&hf_ieee80211_htc_csi_steering,
56812 {"CSI/Steering", "wlan.htc.csi_steering",
56813 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_csi_steering_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_csi_steering_flags
))))
, 0x00C00000,
56814 "High Throughput Control CSI/Steering", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56815
56816 {&hf_ieee80211_htc_ndp_announcement,
56817 {"NDP Announcement", "wlan.htc.ndp_announcement",
56818 FT_BOOLEAN, 32, TFS(&ieee80211_htc_ndp_announcement_flag)((0 ? (const struct true_false_string*)0 : ((&ieee80211_htc_ndp_announcement_flag
))))
, 0x01000000,
56819 "High Throughput Control NDP Announcement", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56820
56821 {&hf_ieee80211_htc_reserved2,
56822 {"Reserved", "wlan.htc.reserved2",
56823 FT_UINT32, BASE_HEX, NULL((void*)0), 0x3E000000,
56824 "High Throughput Control Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56825
56826 {&hf_ieee80211_htc_mrq,
56827 {"MRQ", "wlan.htc.mrq",
56828 FT_BOOLEAN, 32, NULL((void*)0), HTC_MRQ0x00000004,
56829 "VHT-MCS feedback request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56830
56831 {&hf_ieee80211_htc_msi,
56832 {"MSI", "wlan.htc.msi",
56833 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000038,
56834 "MRQ sequence number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56835
56836 {&hf_ieee80211_htc_msi_stbc_reserved,
56837 {"Reserved", "wlan.htc.msi_stbc_reserved",
56838 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000038,
56839 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56840
56841 {&hf_ieee80211_htc_compressed_msi,
56842 {"Compressed MSI", "wlan.htc.compressed_msi",
56843 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000018,
56844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56845
56846 {&hf_ieee80211_htc_ppdu_stbc_encoded,
56847 {"PPDU was STBC encoded", "wlan.htc.ppdu_stbc_encoded",
56848 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
56849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56850
56851 {&hf_ieee80211_htc_mfsi,
56852 {"MFSI", "wlan.htc.mfsi",
56853 FT_BOOLEAN, 32, NULL((void*)0), 0x000001C0,
56854 "MFB sequence identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56855
56856 {&hf_ieee80211_htc_gid_l,
56857 {"GID-L", "wlan.htc.gid_l",
56858 FT_BOOLEAN, 32, NULL((void*)0), 0x000001C0,
56859 "LSBs of group ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56860
56861 {&hf_ieee80211_htc_mfb,
56862 {"MFB", "wlan.htc.mfb",
56863 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00FFFE00,
56864 "Recommended MFB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56865
56866 {&hf_ieee80211_htc_num_sts,
56867 {"NUM_STS", "wlan.htc.num_sts",
56868 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000E00,
56869 "Recommended NUM_STS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56870
56871 {&hf_ieee80211_htc_vht_mcs,
56872 {"VHT-MCS", "wlan.htc.vht_mcs",
56873 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000F000,
56874 "Recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56875
56876 {&hf_ieee80211_htc_bw,
56877 {"BW", "wlan.htc.bw",
56878 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,
56879 "Bandwidth for recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56880
56881 {&hf_ieee80211_htc_s1g_num_sts,
56882 {"NUM_STS", "wlan.htc.num_sts",
56883 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000600,
56884 "Recommended NUM_STS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56885
56886 {&hf_ieee80211_htc_s1g_vht_mcs,
56887 {"VHT-MCS", "wlan.htc.vht_mcs",
56888 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00007800,
56889 "Recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56890
56891 {&hf_ieee80211_htc_s1g_bw,
56892 {"BW", "wlan.htc.bw",
56893 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,
56894 "Bandwidth for recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56895
56896 {&hf_ieee80211_htc_snr,
56897 {"SNR", "wlan.htc.snr",
56898 FT_INT32, BASE_DEC, NULL((void*)0), 0x00FC0000,
56899 "Average SNR + 22", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56900
56901 {&hf_ieee80211_htc_reserved3,
56902 {"Reserved", "wlan.htc.reserved3",
56903 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1F000000,
56904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56905
56906 {&hf_ieee80211_htc_gid_h,
56907 {"GID-H", "wlan.htc.gid_h",
56908 FT_UINT32, BASE_DEC, NULL((void*)0), 0x07000000,
56909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56910
56911 {&hf_ieee80211_htc_coding_type,
56912 {"Coding type", "wlan.htc.coding_type",
56913 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_coding_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_coding_type_vals
))))
, 0x08000000,
56914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56915
56916 {&hf_ieee80211_htc_fb_tx_type,
56917 {"FB Tx type", "wlan.htc.fb_tx_type",
56918 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_fb_tx_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_fb_tx_type_vals
))))
, 0x10000000,
56919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56920
56921 {&hf_ieee80211_htc_unsolicited_mfb,
56922 {"Unsolicited MFB", "wlan.htc.unsolicited_mfb",
56923 FT_BOOLEAN, 32, NULL((void*)0), HTC_UNSOLICITED_MFB0x20000000,
56924 "High Throughput Control Unsolicited MFB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56925
56926 {&hf_ieee80211_htc_ac_constraint,
56927 {"AC Constraint", "wlan.htc.ac_constraint",
56928 FT_BOOLEAN, 32, NULL((void*)0), 0x40000000,
56929 "High Throughput Control AC Constraint", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56930
56931 {&hf_ieee80211_htc_rdg_more_ppdu,
56932 {"RDG/More PPDU", "wlan.htc.rdg_more_ppdu",
56933 FT_BOOLEAN, 32, NULL((void*)0), 0x80000000,
56934 "High Throughput Control RDG/More PPDU", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56935 /* End: HT Control (+HTC) */
56936
56937 /* MDIE */
56938 {&hf_ieee80211_tag_mobility_domain_mdid,
56939 {"Mobility Domain Identifier", "wlan.mobility_domain.mdid",
56940 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56941 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56942
56943 {&hf_ieee80211_tag_mobility_domain_ft_capab,
56944 {"FT Capability and Policy", "wlan.mobility_domain.ft_capab",
56945 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
56946 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56947
56948 {&hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
56949 {"Fast BSS Transition over DS",
56950 "wlan.mobility_domain.ft_capab.ft_over_ds",
56951 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
56952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56953
56954 {&hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
56955 {"Resource Request Protocol Capability",
56956 "wlan.mobility_domain.ft_capab.resource_req",
56957 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
56958 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56959
56960 {&hf_ieee80211_tag_mobility_domain_ft_capab_reserved,
56961 {"Reserved",
56962 "wlan.mobility_domain.ft_capab.reserved",
56963 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc,
56964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56965
56966 /* FTIE */
56967 {&hf_ieee80211_tag_ft_mic_control,
56968 {"MIC Control", "wlan.ft.mic_control",
56969 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56971
56972 {&hf_ieee80211_tag_ft_mic_control_rsnxe_used,
56973 {"RSNXE Used", "wlan.ft.mic_control.rsnxe_used",
56974 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) }},
56975
56976 {&hf_ieee80211_tag_ft_mic_control_mic_length,
56977 {"MIC Length", "wlan.ft.mic_control.mic_length",
56978 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000e, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56979
56980 {&hf_ieee80211_tag_ft_mic_control_reserved,
56981 {"Reserved", "wlan.ft.mic_control.reserved",
56982 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00f0,
56983 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56984
56985 {&hf_ieee80211_tag_ft_mic_control_element_count,
56986 {"Element Count", "wlan.ft.mic_control.element_count",
56987 FT_UINT16, BASE_DEC, NULL((void*)0), 0xff00,
56988 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56989
56990 {&hf_ieee80211_tag_ft_mic,
56991 {"MIC", "wlan.ft.mic",
56992 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
56993 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56994
56995 {&hf_ieee80211_tag_ft_anonce,
56996 {"ANonce", "wlan.ft.anonce",
56997 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
56998 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56999
57000 {&hf_ieee80211_tag_ft_snonce,
57001 {"SNonce", "wlan.ft.snonce",
57002 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57003 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57004
57005 {&hf_ieee80211_tag_ft_subelem_id,
57006 {"Subelement ID", "wlan.ft.subelem.id",
57007 FT_UINT8, BASE_DEC, VALS(ft_subelem_id_vals)((0 ? (const struct _value_string*)0 : ((ft_subelem_id_vals))
))
, 0,
57008 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57009
57010 {&hf_ieee80211_tag_ft_subelem_len,
57011 {"Length", "wlan.ft.subelem.len",
57012 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57013 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57014
57015 {&hf_ieee80211_tag_ft_subelem_data,
57016 {"Data", "wlan.ft.subelem.data",
57017 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57018 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57019
57020 {&hf_ieee80211_tag_ft_subelem_r1kh_id,
57021 {"PMK-R1 key holder identifier (R1KH-ID)", "wlan.ft.subelem.r1kh_id",
57022 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57023 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57024
57025 {&hf_ieee80211_tag_ft_subelem_gtk_key_info,
57026 {"Key Info", "wlan.ft.subelem.gtk.key_info",
57027 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57028 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57029
57030 {&hf_ieee80211_tag_ft_subelem_gtk_key_id,
57031 {"Key ID", "wlan.ft.subelem.gtk.key_id",
57032 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
57033 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57034
57035 {&hf_ieee80211_tag_ft_subelem_gtk_key_length,
57036 {"Key Length", "wlan.ft.subelem.gtk.key_length",
57037 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57038 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57039
57040 {&hf_ieee80211_tag_ft_subelem_gtk_rsc,
57041 {"RSC", "wlan.ft.subelem.gtk.rsc",
57042 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57043 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57044
57045 {&hf_ieee80211_tag_ft_subelem_gtk_key,
57046 {"GTK", "wlan.ft.subelem.gtk.key",
57047 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57048 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57049
57050 {&hf_ieee80211_tag_ft_subelem_gtk_key_encrypted,
57051 {"GTK (encrypted)", "wlan.ft.subelem.gtk.key_encrypted",
57052 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57053 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57054
57055 {&hf_ieee80211_tag_ft_subelem_r0kh_id,
57056 {"PMK-R0 key holder identifier (R0KH-ID)", "wlan.ft.subelem.r0kh_id",
57057 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57058 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57059
57060 {&hf_ieee80211_tag_ft_subelem_igtk_key_id,
57061 {"Key ID", "wlan.ft.subelem.igtk.key_id",
57062 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57063 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57064
57065 {&hf_ieee80211_tag_ft_subelem_igtk_ipn,
57066 {"IPN", "wlan.ft.subelem.igtk.ipn",
57067 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57068 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57069
57070 {&hf_ieee80211_tag_ft_subelem_igtk_key_length,
57071 {"Key Length", "wlan.ft.subelem.igtk.key_length",
57072 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57073 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57074
57075 {&hf_ieee80211_tag_ft_subelem_igtk_key,
57076 {"Wrapped Key (IGTK)", "wlan.ft.subelem.igtk.key",
57077 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57078
57079 {&hf_ieee80211_tag_ft_subelem_oci_op_class,
57080 {"Operating Class", "wlan.ft.subelem.oci.operating_class",
57081 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57082
57083 {&hf_ieee80211_tag_ft_subelem_oci_prim_chan_num,
57084 {"Primary Channel Number", "wlan.ft.subelem.oci.primary_channel_number",
57085 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57086
57087 {&hf_ieee80211_tag_ft_subelem_oci_freq_seg_1,
57088 {"Frequency Segment 1 Channel Number",
57089 "wlan.ft.subelem.oci.frequency_segment_1_channel_number",
57090 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57091
57092 {&hf_ieee80211_tag_ft_subelem_oci_oct_op_class,
57093 {"OCT Operating Class", "wlan.ft.subelem.oci.oct_operating_class",
57094 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57095
57096 {&hf_ieee80211_tag_ft_subelem_oci_oct_prim_chan_num,
57097 {"OCT Primary Channel Number",
57098 "wlan.ft.subelem.oci.oct_primary_channel_number",
57099 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57100
57101 {&hf_ieee80211_tag_ft_subelem_oci_oct_freq_seg_1,
57102 {"OCT Frequency Segment 1 Channel Number",
57103 "wlan.ft.subelem.oci.oct_frequency_segment_1_channel_number",
57104 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57105
57106 {&hf_ieee80211_tag_ft_subelem_bigtk_key_id,
57107 {"Key ID", "wlan.ft.subelem.bigtk.key_id",
57108 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57110
57111 {&hf_ieee80211_tag_ft_subelem_bigtk_bipn,
57112 {"BIPN", "wlan.ft.subelem.bigtk.bipn",
57113 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57115
57116 {&hf_ieee80211_tag_ft_subelem_bigtk_key_length,
57117 {"Key Length", "wlan.ft.subelem.bigtk.key_length",
57118 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57119 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57120
57121 {&hf_ieee80211_tag_ft_subelem_bigtk_key,
57122 {"Wrapped Key (BIGTK)", "wlan.ft.subelem.bigtk.key",
57123 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57124
57125 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key_info,
57126 {"Key Info", "wlan.ft.subelem.mlo_gtk.key_info",
57127 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57128 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57129
57130 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key_id,
57131 {"Key ID", "wlan.ft.subelem.mlo_gtk.key_id",
57132 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
57133 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57134
57135 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id_info,
57136 {"Link ID Info", "wlan.ft.subelem.mlo_gtk.link_id_info",
57137 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57138 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57139
57140 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id,
57141 {"Link ID", "wlan.ft.subelem.mlo_gtk.link_id",
57142 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57143 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57144
57145 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key_length,
57146 {"Key Length", "wlan.ft.subelem.mlo_gtk.key_length",
57147 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57148 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57149
57150 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_rsc,
57151 {"RSC", "wlan.ft.subelem.mlo_gtk.rsc",
57152 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57153 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57154
57155 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key,
57156 {"Wrapped Key (MLO GTK)", "wlan.ft.subelem.mlo_gtk.key",
57157 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57159
57160 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_key_id,
57161 {"Key ID", "wlan.ft.subelem.mlo_igtk.key_id",
57162 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57164
57165 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_ipn,
57166 {"IPN", "wlan.ft.subelem.mlo_igtk.ipn",
57167 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57169
57170 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id_info,
57171 {"Link ID Info", "wlan.ft.subelem.mlo_igtk.link_id_info",
57172 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57174
57175 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id,
57176 {"Link ID", "wlan.ft.subelem.mlo_igtk.link_id",
57177 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57178 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57179
57180 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_key_length,
57181 {"Key Length", "wlan.ft.subelem.mlo_igtk.key_length",
57182 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57184
57185 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_key,
57186 {"Wrapped Key (MLO IGTK)", "wlan.ft.subelem.mlo_igtk.key",
57187 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57188
57189 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_id,
57190 {"Key ID", "wlan.ft.subelem.mlo_bigtk.key_id",
57191 FT_UINT16, 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_mlo_bigtk_bipn,
57195 {"BIPN", "wlan.ft.subelem.mlo_bigtk.bipn",
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_mlo_bigtk_link_id,
57200 {"Link ID", "wlan.ft.subelem.mlo_bigtk.link_id",
57201 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57202 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57203
57204 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id_info,
57205 {"Link ID Info", "wlan.ft.subelem.mlo_bigtk.link_id_info",
57206 FT_UINT8, BASE_HEX, 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_mlo_bigtk_key_length,
57210 {"Key Length", "wlan.ft.subelem.mlo_bigtk.key_length",
57211 FT_UINT8, BASE_HEX, 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_mlo_bigtk_key,
57215 {"Wrapped Key (MLO BIGTK)", "wlan.ft.subelem.mlo_bigtk.key",
57216 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57217
57218 /* RIC Data IE: 802.11-2012: 8.4.2.52 */
57219 {&hf_ieee80211_tag_ric_data_id,
57220 {"Resource Handshake Identifier", "wlan.ric_data.id",
57221 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57222
57223 {&hf_ieee80211_tag_ric_data_desc_cnt,
57224 {"Resource Descriptor Count", "wlan.ric_data.desc_cnt",
57225 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57226
57227 {&hf_ieee80211_tag_ric_data_status_code,
57228 {"Status Code", "wlan.ric_data.status_code",
57229 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
57230 "Status of requested Resource", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57231
57232 /* OBSS IE: 802.11-2012: 8.4.2.61 */
57233 {&hf_ieee80211_tag_obss_spd,
57234 {"Scan Passive Dwell", "wlan.obss.spd",
57235 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57236
57237 {&hf_ieee80211_tag_obss_sad,
57238 {"Scan Active Dwell", "wlan.obss.sad",
57239 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57240
57241 {&hf_ieee80211_tag_obss_cwtsi,
57242 {"Channel Width Trigger Scan Interval", "wlan.obss.cwtsi",
57243 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57244
57245 {&hf_ieee80211_tag_obss_sptpc,
57246 {"Scan Passive Total Per Channel", "wlan.obss.sptpc",
57247 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57248
57249 {&hf_ieee80211_tag_obss_satpc,
57250 {"Scan Active Total Per Channel", "wlan.obss.satpc",
57251 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57252
57253 {&hf_ieee80211_tag_obss_wctdf,
57254 {"Width Channel Transition Delay Factor", "wlan.obss.wctdf",
57255 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57256
57257 {&hf_ieee80211_tag_obss_sat,
57258 {"Scan Activity Threshold", "wlan.obss.sat",
57259 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57260
57261 /* Group Data Cypher Suite: 802.11-2012: 8.4.2.25.1 */
57262 {&hf_ieee80211_group_data_cipher_suite_oui,
57263 {"Group Data Cypher Suite OUI", "wlan.osen.gdcs.oui",
57264 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57265
57266 /* TODO: List the suite names ... */
57267 {&hf_ieee80211_group_data_cipher_suite_type,
57268 {"Group Data Cypher Suite type", "wlan.osen.gdcs.type",
57269 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57270
57271 {&hf_ieee80211_osen_pcs_count,
57272 {"OSEN Pairwise Cipher Suite Count", "wlan.osen.pwcs.count",
57273 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57274
57275 {&hf_ieee80211_osen_pairwise_cipher_suite_oui,
57276 {"OSEN Pairwise Cypher Suite OUI", "wlan.osen.pwcs.oui",
57277 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57278
57279 {&hf_ieee80211_osen_pairwise_cipher_suite_type,
57280 {"OSEN Pairwise Cypher Suite type", "wlan.osen.pwcs.type",
57281 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57282
57283 {&hf_ieee80211_osen_akm_count,
57284 {"OSEN AKM Cipher Suite Count", "wlan.osen.akms.count",
57285 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57286
57287 {&hf_ieee80211_osen_akm_cipher_suite_oui,
57288 {"OSEN AKM Cipher Suite OUI", "wlan.osen.akms.oui",
57289 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57290
57291 {&hf_ieee80211_osen_akm_cipher_suite_type,
57292 {"OSEN AKM Cipher Suite Type", "wlan.osen.akms.type",
57293 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57294
57295 {&hf_ieee80211_osen_rsn_cap_preauth,
57296 {"RSN Pre-Auth capabilities", "wlan.osen.rsn.capabilities.preauth",
57297 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) }},
57298
57299 {&hf_ieee80211_osen_rsn_cap_no_pairwise,
57300 {"RSN No Pairwise capabilities", "wlan.osen.rsn.capabilities.no_pairwise",
57301 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) }},
57302
57303 {&hf_ieee80211_osen_rsn_cap_ptksa_replay_counter,
57304 {"RSN PTKSA Replay Counter capabilities",
57305 "wlan.osen.rsn.capabilities.ptksa_replay_counter",
57306 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) }},
57307
57308 {&hf_ieee80211_osen_rsn_cap_gtksa_replay_counter,
57309 {"RSN GTKSA Replay Counter capabilities",
57310 "wlan.osen.rsn.capabilities.gtksa_replay_counter",
57311 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) }},
57312
57313 {&hf_ieee80211_osen_group_management_cipher_suite_oui,
57314 {"OSEN Group Management Cipher Suite OUI", "wlan.osen.gmcs.oui",
57315 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57316
57317 {&hf_ieee80211_osen_group_management_cipher_suite_type,
57318 {"OSEN Group Management Cipher Suite Type", "wlan.osen.gmcs.type",
57319 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57320
57321 {&hf_ieee80211_osen_rsn_cap_mfpr,
57322 {"Management Frame Protection Required", "wlan.osen.rsn.capabilities.mfpr",
57323 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) }},
57324
57325 {&hf_ieee80211_osen_rsn_cap_mfpc,
57326 {"Management Frame Protection Capable", "wlan.osen.rsn.capabilities.mfpc",
57327 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) }},
57328
57329 {&hf_ieee80211_osen_rsn_cap_jmr,
57330 {"Joint Multi-band RSNA", "wlan.osen.rsn.capabilities.jmr",
57331 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) }},
57332
57333 {&hf_ieee80211_osen_rsn_cap_peerkey,
57334 {"PeerKey Enabled", "wlan.osen.rsn.capabilities.peerkey",
57335 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) }},
57336
57337 {&hf_ieee80211_osen_rsn_cap_flags,
57338 {"RSN Capability Flags", "wlan.osen.rsn.capabilities.flags",
57339 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57340
57341 {&hf_ieee80211_osen_rsn_spp_a_msdu_capable,
57342 {"SPP A-MSDU Capable", "wlan.osen.rsn.capabilities.spp_a_msdu_cap",
57343 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) }},
57344
57345 {&hf_ieee80211_osen_rsn_spp_a_msdu_required,
57346 {"SPP A-MSDU Required", "wlan.osen.rsn.capabilities.spp_a_msdu_req",
57347 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) }},
57348
57349 {&hf_ieee80211_osen_rsn_pbac,
57350 {"Protected Block Ack Agreement Capable", "wlan.osen.rsn.capabilities.pbac",
57351 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) }},
57352
57353 {&hf_ieee80211_osen_extended_key_id_iaf,
57354 {"Extended Key ID for Individually Addressed Frames",
57355 "wlan.osn.rsn.extended_key_id_iaf",
57356 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) }},
57357
57358 {&hf_ieee80211_osen_reserved,
57359 {"Reserved", "wlan.osen.rsn.capabilities.reserved",
57360 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57361
57362 {&hf_ieee80211_osen_pmkid_count,
57363 {"OSEN PMKID Count", "wlan.osen.pmkid.count",
57364 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57365
57366 {&hf_ieee80211_osen_pmkid,
57367 {"OSEN PKMID", "wlan.osen.pmkid.bytes",
57368 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57369
57370 /* RIC Descriptor IE: 802.11-2012: 8.4.2.53 */
57371 {&hf_ieee80211_tag_ric_desc_rsrc_type,
57372 {"Resource Type", "wlan.ric_desc.rsrc_type",
57373 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57374
57375 {&hf_ieee80211_tag_ric_desc_var_params,
57376 {"Variable Params", "wlan.ric_desc.var_params",
57377 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57378
57379 /* MMIE */
57380 {&hf_ieee80211_tag_mmie_keyid,
57381 {"KeyID", "wlan.mmie.keyid",
57382 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57383
57384 {&hf_ieee80211_tag_mmie_ipn,
57385 {"IPN", "wlan.mmie.ipn",
57386 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57387
57388 {&hf_ieee80211_tag_mmie_mic,
57389 {"MIC", "wlan.mmie.mic",
57390 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57391
57392 /* Non Transmitted BSSID Capability */
57393 {&hf_ieee80211_tag_no_bssid_capability_dmg_bss_control,
57394 {"DMG BSS Control", "wlan.no_bssid_capability.dmg_bss_control",
57395 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57396
57397 {&hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_type,
57398 {"Type", "wlan.no_bssid_capability.dmg_bss_control.type",
57399 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57400
57401 {&hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_reserved,
57402 {"Reserved", "wlan.no_bssid_capability.dmg_bss_control.reserved",
57403 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57404
57405 /* Multiple BSSID Index */
57406 {&hf_ieee80211_tag_multiple_bssid_index_bssid_index,
57407 {"BSSID Index", "wlan.multiple_bssid_index.bssid_index",
57408 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57409
57410 {&hf_ieee80211_tag_multiple_bssid_index_dtim_period,
57411 {"DTIM Period", "wlan.multiple_bssid_index.dtim_period",
57412 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57413
57414 {&hf_ieee80211_tag_multiple_bssid_index_dtim_count,
57415 {"DTIM Count", "wlan.multiple_bssid_index.dtim_count",
57416 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57417
57418 /* WAPI Parameter Set*/
57419 {&hf_ieee80211_tag_wapi_param_set_version,
57420 {"Version", "wlan.wapi.version",
57421 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57423
57424 {&hf_ieee80211_tag_wapi_param_set_akm_suite_count,
57425 {"AKM Suite Count", "wlan.wapi.akm_suite.count",
57426 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57427 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57428
57429 {&hf_ieee80211_tag_wapi_param_set_akm_suite_oui,
57430 {"AKM Suite OUI", "wlan.wapi.akm_suite.oui",
57431 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
57432 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57433
57434 {&hf_ieee80211_tag_wapi_param_set_akm_suite_type,
57435 {"AKM Suite Type", "wlan.wapi.akm_suite.type",
57436 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_suite_type)((0 ? (const struct _value_string*)0 : ((ieee80211_wapi_suite_type
))))
, 0,
57437 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57438
57439 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
57440 {"Unicast Cipher Suite Count", "wlan.wapi.unicast_cipher.suite.count",
57441 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57443
57444 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui,
57445 {"Unicast Cipher Suite OUI", "wlan.wapi.unicast_cipher.suite.oui",
57446 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
57447 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57448
57449 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type,
57450 {"Unicast Cipher Suite Type", "wlan.wapi.unicast_cipher.suite.type",
57451 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type)((0 ? (const struct _value_string*)0 : ((ieee80211_wapi_cipher_type
))))
, 0,
57452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57453
57454 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui,
57455 {"Multicast Cipher Suite OUI", "wlan.wapi.multicast_cipher.suite.oui",
57456 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
57457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57458
57459 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type,
57460 {"Multicast Cipher Suite Type", "wlan.wapi.multicast_cipher.suite.type",
57461 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type)((0 ? (const struct _value_string*)0 : ((ieee80211_wapi_cipher_type
))))
, 0,
57462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57463
57464 {&hf_ieee80211_tag_wapi_param_set_capab,
57465 {"WAPI Capability Info", "wlan.wapi.capab",
57466 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57468
57469 {&hf_ieee80211_tag_wapi_param_set_capab_preauth,
57470 {"Supports Preauthentication?", "wlan.wapi.capab.preauth",
57471 FT_BOOLEAN, 16 , NULL((void*)0), 0x0001,
57472 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57473
57474 {&hf_ieee80211_tag_wapi_param_set_capab_rsvd,
57475 {"Reserved", "wlan.wapi.capab.rsvd",
57476 FT_UINT16, BASE_DEC , NULL((void*)0), 0xFFFE,
57477 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57478
57479 {&hf_ieee80211_tag_wapi_param_set_bkid_count,
57480 {"No of BKID's", "wlan.wapi.bkid.count",
57481 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57482 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57483
57484 {&hf_ieee80211_tag_wapi_param_set_bkid_list,
57485 {"BKID", "wlan.wapi.bkid",
57486 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57488
57489 /* BSS Max Idle Period */
57490 {&hf_ieee80211_tag_bss_max_idle_period,
57491 {"Max Idle Period (1000 TUs)", "wlan.bss_max_idle.period",
57492 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57493
57494 {&hf_ieee80211_tag_bss_max_idle_options,
57495 {"Idle Options", "wlan.bss_max_idle.options",
57496 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57497
57498 {&hf_ieee80211_tag_bss_max_idle_options_protected,
57499 {"Protected Keep-Alive Required",
57500 "wlan.bss_max_idle.options.protected",
57501 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57502
57503 {&hf_ieee80211_tag_bss_idle_options_reserved,
57504 {"Reserved", "wlan.bss_max_idle.options.reserved",
57505 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57506
57507 /* TFS Request */
57508 {&hf_ieee80211_tag_tfs_request_id,
57509 {"TFS ID", "wlan.tfs_request.id",
57510 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57511
57512 {&hf_ieee80211_tag_tfs_request_ac_delete_after_match,
57513 {"TFS Action Code - Delete after match",
57514 "wlan.tfs_request.action_code.delete_after_match",
57515 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57516
57517 {&hf_ieee80211_tag_tfs_request_ac_notify,
57518 {"TFS Action Code - Notify",
57519 "wlan.tfs_request.action_code.notify",
57520 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57521
57522 {&hf_ieee80211_tag_tfs_request_subelem_id,
57523 {"Subelement ID", "wlan.tfs_request.subelem.id",
57524 FT_UINT8, BASE_DEC, VALS(tfs_request_subelem_ids)((0 ? (const struct _value_string*)0 : ((tfs_request_subelem_ids
))))
, 0,
57525 "TFS Request Subelement ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57526
57527 {&hf_ieee80211_tag_tfs_request_subelem_len,
57528 {"Length", "wlan.tfs_request.subelem.len",
57529 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57530 "TFS Request Subelement Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57531
57532 {&hf_ieee80211_tag_tfs_request_subelem,
57533 {"Subelement Data", "wlan.tfs_request.subelem",
57534 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57535 "TFS Request Subelement Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57536
57537 /* TFS Response */
57538 {&hf_ieee80211_tag_tfs_response_subelem_id,
57539 {"Subelement ID", "wlan.tfs_response.subelem.id",
57540 FT_UINT8, BASE_DEC, VALS(tfs_response_subelem_ids)((0 ? (const struct _value_string*)0 : ((tfs_response_subelem_ids
))))
, 0,
57541 "TFS Response Subelement ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57542
57543 {&hf_ieee80211_tag_tfs_response_subelem_len,
57544 {"Length", "wlan.tfs_response.subelem.len",
57545 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57546 "TFS Response Subelement Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57547
57548 {&hf_ieee80211_tag_tfs_response_subelem,
57549 {"Subelement Data", "wlan.tfs_response.subelem",
57550 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57551 "TFS Response Subelement Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57552
57553 {&hf_ieee80211_tag_tfs_response_status,
57554 {"TFS Response Status", "wlan.tfs_response.status",
57555 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57556
57557 {&hf_ieee80211_tag_tfs_response_id,
57558 {"TFS ID", "wlan.tfs_response.tfs_id",
57559 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57560
57561 /* WNM-Sleep Mode */
57562 {&hf_ieee80211_tag_wnm_sleep_mode_action_type,
57563 {"Action Type", "wlan.wnm_sleep_mode.action_type",
57564 FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_action_types)((0 ? (const struct _value_string*)0 : ((wnm_sleep_mode_action_types
))))
, 0,
57565 "WNM-Sleep Mode Action Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57566
57567 {&hf_ieee80211_tag_wnm_sleep_mode_response_status,
57568 {"WNM-Sleep Mode Response Status",
57569 "wlan.wnm_sleep_mode.response_status",
57570 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),
57571 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57572
57573 {&hf_ieee80211_tag_wnm_sleep_mode_interval,
57574 {"WNM-Sleep Interval", "wlan.wnm_sleep_mode.interval",
57575 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57576
57577 {&hf_ieee80211_wnm_sub_elt_id,
57578 {"Subelement ID", "wlan.wnm_subelt.id",
57579 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57580
57581 {&hf_ieee80211_wnm_sub_elt_len,
57582 {"Subelement len", "wlan.wnm_subelt.len",
57583 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57584
57585 /* Time Advertisement */
57586 {&hf_ieee80211_tag_time_adv_timing_capab,
57587 {"Timing capabilities", "wlan.time_adv.timing_capab",
57588 FT_UINT8, BASE_DEC, VALS(time_adv_timing_capab_vals)((0 ? (const struct _value_string*)0 : ((time_adv_timing_capab_vals
))))
, 0,
57589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57590
57591 {&hf_ieee80211_tag_time_adv_time_value,
57592 {"Time Value", "wlan.time_adv.time_value",
57593 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57595
57596 {&hf_ieee80211_tag_time_adv_time_value_year,
57597 {"Time Value: Year", "wlan.time_adv.time_value.year",
57598 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57599 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57600
57601 {&hf_ieee80211_tag_time_adv_time_value_month,
57602 {"Time Value: Month", "wlan.time_adv.time_value.month",
57603 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57604 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57605
57606 {&hf_ieee80211_tag_time_adv_time_value_day,
57607 {"Time Value: Day", "wlan.time_adv.time_value.day",
57608 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57609 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57610
57611 {&hf_ieee80211_tag_time_adv_time_value_hours,
57612 {"Time Value: Hours", "wlan.time_adv.time_value.hours",
57613 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57615
57616 {&hf_ieee80211_tag_time_adv_time_value_minutes,
57617 {"Time Value: Minutes", "wlan.time_adv.time_value.minutes",
57618 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57619 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57620
57621 {&hf_ieee80211_tag_time_adv_time_value_seconds,
57622 {"Time Value: Seconds", "wlan.time_adv.time_value.seconds",
57623 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57625
57626 {&hf_ieee80211_tag_time_adv_time_value_milliseconds,
57627 {"Time Value: Milliseconds", "wlan.time_adv.time_value.milliseconds",
57628 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57630
57631 {&hf_ieee80211_tag_time_adv_time_value_reserved,
57632 {"Time Value: Reserved", "wlan.time_adv.time_value.reserved",
57633 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57634 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57635
57636 {&hf_ieee80211_tag_time_adv_time_error,
57637 {"Time Error", "wlan.time_adv.time_error",
57638 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57639 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57640
57641 {&hf_ieee80211_tag_time_adv_time_update_counter,
57642 {"Time Update Counter", "wlan.time_adv.time_update_counter",
57643 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57645
57646 /* Time Zone */
57647 {&hf_ieee80211_tag_time_zone,
57648 {"Time Zone", "wlan.time_zone",
57649 FT_STRING, BASE_NONE, NULL((void*)0), 0,
57650 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57651
57652 /* Interworking */
57653 {&hf_ieee80211_tag_interworking_access_network_type,
57654 {"Access Network Type", "wlan.interworking.access_network_type",
57655 FT_UINT8, BASE_DEC, VALS(access_network_type_vals)((0 ? (const struct _value_string*)0 : ((access_network_type_vals
))))
, 0x0f,
57656 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57657
57658 {&hf_ieee80211_tag_interworking_internet,
57659 {"Internet", "wlan.interworking.internet",
57660 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
57661 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57662
57663 {&hf_ieee80211_tag_interworking_asra,
57664 {"ASRA", "wlan.interworking.asra",
57665 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
57666 "Additional Step Required for Access", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57667
57668 {&hf_ieee80211_tag_interworking_esr,
57669 {"ESR", "wlan.interworking.esr",
57670 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
57671 "Emergency services reachable", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57672
57673 {&hf_ieee80211_tag_interworking_uesa,
57674 {"UESA", "wlan.interworking.uesa",
57675 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
57676 "Unauthenticated emergency service accessible", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57677
57678 {&hf_ieee80211_tag_interworking_hessid,
57679 {"HESSID", "wlan.interworking.hessid",
57680 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
57681 "Homogeneous ESS identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57682
57683 /* QoS Map Set element */
57684 {&hf_ieee80211_tag_qos_map_set_dscp_exc,
57685 {"DSCP Exception", "wlan.qos_map_set.dscp_exception",
57686 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57687
57688 {&hf_ieee80211_tag_qos_map_set_dscp_exc_val,
57689 {"DSCP Value", "wlan.qos_map_set.dscp_value",
57690 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57691 "DSCP Exception - DSCP Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57692
57693 {&hf_ieee80211_tag_qos_map_set_dscp_exc_up,
57694 {"User Priority", "wlan.qos_map_set.up",
57695 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57696 "DSCP Exception - User Priority", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57697
57698 {&hf_ieee80211_tag_qos_map_set_range,
57699 {"DSCP Range description", "wlan.qos_map_set.range",
57700 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57701
57702 {&hf_ieee80211_tag_qos_map_set_low,
57703 {"DSCP Low Value", "wlan.qos_map_set.dscp_low_value",
57704 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57705 "DSCP Range description - DSCP Low Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57706
57707 {&hf_ieee80211_tag_qos_map_set_high,
57708 {"DSCP High Value", "wlan.qos_map_set.dscp_high_value",
57709 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57710 "DSCP Range description - DSCP High Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57711
57712 /* Advertisement Protocol */
57713 {&hf_ieee80211_tag_adv_proto_resp_len_limit,
57714 {"Query Response Length Limit", "wlan.adv_proto.resp_len_limit",
57715 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7f,
57716 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57717
57718 {&hf_ieee80211_tag_adv_proto_pame_bi,
57719 {"PAME-BI", "wlan.adv_proto.pame_bi",
57720 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
57721 "Pre-Association Message Xchange BSSID Independent (PAME-BI)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57722
57723 {&hf_ieee80211_tag_adv_proto_id,
57724 {"Advertisement Protocol ID", "wlan.adv_proto.id",
57725 FT_UINT8, BASE_DEC, VALS(adv_proto_id_vals)((0 ? (const struct _value_string*)0 : ((adv_proto_id_vals)))
)
, 0,
57726 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57727
57728 {&hf_ieee80211_tag_adv_vs_len,
57729 {"Advertisement Protocol Vendor Specific length", "wlan.adv_proto.vs_len",
57730 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57731 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
57732#if 0
57733 {&hf_ieee80211_tag_adv_proto_vs_info,
57734 {"Advertisement Protocol Vendor Specific info", "wlan.adv_proto.vs_info",
57735 FT_NONE, BASE_NONE, NULL((void*)0), 0,
57736 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57737#endif
57738
57739 /* Roaming Consortium */
57740 {&hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
57741 {"Number of ANQP OIs", "wlan.roaming_consortium.num_anqp_oi",
57742 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57744
57745 {&hf_ieee80211_tag_roaming_consortium_oi1_len,
57746 {"OI #1 Length", "wlan.roaming_consortium.oi1_len",
57747 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57748 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57749
57750 {&hf_ieee80211_tag_roaming_consortium_oi2_len,
57751 {"OI #2 Length", "wlan.roaming_consortium.oi2_len",
57752 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
57753 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57754
57755 {&hf_ieee80211_tag_roaming_consortium_oi1,
57756 {"OI #1", "wlan.roaming_consortium.oi1",
57757 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57758 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57759
57760 {&hf_ieee80211_tag_roaming_consortium_oi2,
57761 {"OI #2", "wlan.roaming_consortium.oi2",
57762 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57763 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57764
57765 {&hf_ieee80211_tag_roaming_consortium_oi3,
57766 {"OI #3", "wlan.roaming_consortium.oi3",
57767 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57768 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57769
57770 /* Timeout Interval */
57771 {&hf_ieee80211_tag_timeout_int_type,
57772 {"Timeout Interval Type", "wlan.timeout_int.type",
57773 FT_UINT8, BASE_DEC, VALS(timeout_int_types)((0 ? (const struct _value_string*)0 : ((timeout_int_types)))
)
, 0,
57774 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57775
57776 {&hf_ieee80211_tag_timeout_int_value,
57777 {"Timeout Interval Value", "wlan.timeout_int.value",
57778 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57779 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57780
57781 /* Link Identifier */
57782 {&hf_ieee80211_tag_link_id_bssid,
57783 {"BSSID", "wlan.link_id.bssid",
57784 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
57785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57786
57787 {&hf_ieee80211_tag_link_id_init_sta,
57788 {"TDLS initiator STA Address", "wlan.link_id.init_sta",
57789 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
57790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57791
57792 {&hf_ieee80211_tag_link_id_resp_sta,
57793 {"TDLS responder STA Address", "wlan.link_id.resp_sta",
57794 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
57795 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57796
57797 /* Wakeup Schedule */
57798 {&hf_ieee80211_tag_wakeup_schedule_offset,
57799 {"Offset", "wlan.wakeup_schedule.offset",
57800 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57801 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57802
57803 {&hf_ieee80211_tag_wakeup_schedule_interval,
57804 {"Interval", "wlan.wakeup_schedule.interval",
57805 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57806 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57807
57808 {&hf_ieee80211_tag_wakeup_schedule_awake_window_slots,
57809 {"Awake Window Slots", "wlan.wakeup_schedule.awake_window_slots",
57810 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57811 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57812
57813 {&hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
57814 {"Maximum Awake Window Duration", "wlan.wakeup_schedule.max_awake_dur",
57815 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57816 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57817
57818 {&hf_ieee80211_tag_wakeup_schedule_idle_count,
57819 {"Idle Count", "wlan.wakeup_schedule.idle_count",
57820 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57821 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57822
57823 /* Channel Switch Timing */
57824 {&hf_ieee80211_tag_channel_switch_timing_switch_time,
57825 {"Switch Time", "wlan.channel_switch_timing.switch_time",
57826 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57827 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57828
57829 {&hf_ieee80211_tag_channel_switch_timing_switch_timeout,
57830 {"Switch Timeout", "wlan.channel_switch_timing.switch_timeout",
57831 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57832 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57833
57834 /* PTI Control */
57835 {&hf_ieee80211_tag_pti_control_tid,
57836 {"TID", "wlan.pti_control.tid",
57837 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57838 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57839
57840 {&hf_ieee80211_tag_pti_control_sequence_control,
57841 {"Sequence Control", "wlan.pti_control.sequence_control",
57842 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57843 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57844
57845 /* PU Buffer Status */
57846 {&hf_ieee80211_tag_pu_buffer_status_ac_bk,
57847 {"AC_BK traffic available", "wlan.pu_buffer_status.ac_bk",
57848 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
57849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57850
57851 {&hf_ieee80211_tag_pu_buffer_status_ac_be,
57852 {"AC_BE traffic available", "wlan.pu_buffer_status.ac_be",
57853 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
57854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57855
57856 {&hf_ieee80211_tag_pu_buffer_status_ac_vi,
57857 {"AC_VI traffic available", "wlan.pu_buffer_status.ac_vi",
57858 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
57859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57860
57861 {&hf_ieee80211_tag_pu_buffer_status_ac_vo,
57862 {"AC_VO traffic available", "wlan.pu_buffer_status.ac_vo",
57863 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
57864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57865
57866 /* 60g ie */
57867 {&hf_ieee80211_wfa_60g_attr,
57868 {"Attribute", "wlan.60g.attr",
57869 FT_NONE, BASE_NONE, NULL((void*)0), 0,
57870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57871
57872 {&hf_ieee80211_wfa_60g_attr_id,
57873 {"Attribute ID", "wlan.60g.attr.id",
57874 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_60g_attr_ids)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_60g_attr_ids
))))
, 0x0,
57875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57876
57877 {&hf_ieee80211_wfa_60g_attr_len,
57878 {"Attribute Length", "wlan.60g.attr.length",
57879 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
57880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57881
57882 {&hf_ieee80211_wfa_60g_attr_cap_sta_mac_addr,
57883 {"STA Address", "wlan.60g.attr.60g_cap.sta_mac_addr",
57884 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0,
57885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57886
57887 {&hf_ieee80211_wfa_60g_attr_cap_recv_amsdu_frames,
57888 {"Receive Capability AMSDU", "wlan.60g.attr.60g_cap.recv_amsdu",
57889 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
57890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57891
57892 {&hf_ieee80211_wfa_60g_attr_cap_reserved,
57893 {"Reserved", "wlan.60g.attr.60g_cap.reserved",
57894 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfe,
57895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57896
57897 {&hf_ieee80211_mysterious_extra_stuff,
57898 {"Mysterious extra OLPC/Ruckus/Atheros/Vector/??? stuff", "wlan.mysterious_extra_stuff",
57899 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
57900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57901
57902 {&hf_ieee80211_mscs_descriptor_type,
57903 {"Request Type", "wlan.ext_tag.mscs_descriptor.request_type",
57904 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(scs_request_type_rvals)((0 ? (const struct _range_string*)0 : ((scs_request_type_rvals
))))
,
57905 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57906
57907 {&hf_ieee80211_mscs_user_prio_control_reserved,
57908 {"Reserved", "wlan.ext_tag.mscs_descriptor.reserved1",
57909 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57910
57911 {&hf_ieee80211_user_prio_bitmap,
57912 {"User Priority Bitmap",
57913 "wlan.ext_tag.mscs_descriptor.user_prio_control.upbm",
57914 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57915
57916 {&hf_ieee80211_user_prio_bitmap_bit0,
57917 {"User Priority 0",
57918 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_0",
57919 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) }},
57920
57921 {&hf_ieee80211_user_prio_bitmap_bit1,
57922 {"User Priority 1",
57923 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_1",
57924 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) }},
57925
57926 {&hf_ieee80211_user_prio_bitmap_bit2,
57927 {"User Priority 2",
57928 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_2",
57929 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) }},
57930
57931 {&hf_ieee80211_user_prio_bitmap_bit3,
57932 {"User Priority 3",
57933 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_3",
57934 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) }},
57935
57936 {&hf_ieee80211_user_prio_bitmap_bit4,
57937 {"User Priority 4",
57938 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_4",
57939 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) }},
57940
57941 {&hf_ieee80211_user_prio_bitmap_bit5,
57942 {"User Priority 5",
57943 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_5",
57944 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) }},
57945
57946 {&hf_ieee80211_user_prio_bitmap_bit6,
57947 {"User Priority 6",
57948 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_6",
57949 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) }},
57950
57951 {&hf_ieee80211_user_prio_bitmap_bit7,
57952 {"User Priority 7",
57953 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_7",
57954 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) }},
57955
57956 {&hf_ieee80211_user_prio_limit,
57957 {"User Priority Limit",
57958 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_limit",
57959 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57960
57961 {&hf_ieee80211_user_prio_reserved,
57962 {"Reserved", "wlan.ext_tag.mscs_descriptor.user_prio_control.reserved",
57963 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57964
57965 {&hf_ieee80211_stream_timeout_reserved,
57966 {"Reserved", "wlan.ext_tag.mscs_descriptor.reserved2",
57967 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57968
57969 {&hf_ieee80211_stream_timeout,
57970 {"Stream Timeout", "wlan.ext_tag.mscs_descriptor.stream_timeout",
57971 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) }},
57972
57973 {&hf_ieee80211_mscs_subelement_id,
57974 {"MSCS Subelement ID", "wlan.ext_tag.mscs_descriptor.subelement_id",
57975 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57976
57977 {&hf_ieee80211_mscs_subelement_len,
57978 {"MSCS Subelement Length", "wlan.ext_tag.mscs_descriptor.subelement_len",
57979 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57980
57981 {&hf_ieee80211_mscs_subelement_data,
57982 {"MSCS Subelement Data", "wlan.ext_tag.mscs_descriptor.subelement_data",
57983 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57984
57985 {&hf_ieee80211_intra_access_prio,
57986 {"Intra-Access Priority", "wlan.tag.scs_intra_access_prio",
57987 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57988
57989 {&hf_ieee80211_intra_access_prio_user_prio,
57990 {"User Priority", "wlan.tag.scs_intra_access_prio.user_prio",
57991 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57992
57993 {&hf_ieee80211_intra_access_prio_alt_queue,
57994 {"Alternate Queue", "wlan.tag.scs_intra_access_prio.alt_queue",
57995 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57996
57997 {&hf_ieee80211_intra_access_prio_drop_elig,
57998 {"Drop Eligibility", "wlan.tag.scs_intra_access_prio.drop_elig",
57999 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58000
58001 {&hf_ieee80211_intra_access_prio_reserved,
58002 {"Reserved", "wlan.tag.scs_intra_access_prio.reserved",
58003 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58004
58005 {&hf_ieee80211_scs_descriptor_scsid,
58006 {"SCSID", "wlan.tag.scs_descriptor.scsid",
58007 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58008
58009 {&hf_ieee80211_scs_descriptor_type,
58010 {"Request Type", "wlan.tag.scs_descriptor.request_type",
58011 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(scs_request_type_rvals)((0 ? (const struct _range_string*)0 : ((scs_request_type_rvals
))))
,
58012 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58013
58014 {&hf_ieee80211_estimated_service_params,
58015 {"Estimated Service Parameters", "wlan.ext_tag.estimated_service_params",
58016 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58017
58018 {&hf_ieee80211_esp_access_category,
58019 {"Access Category", "wlan.ext_tag.estimated_service_params.access_category",
58020 FT_UINT24, BASE_DEC, VALS(esp_access_category_vals)((0 ? (const struct _value_string*)0 : ((esp_access_category_vals
))))
, 0x000003,
58021 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58022
58023 {&hf_ieee80211_esp_reserved,
58024 {"Reserved", "wlan.ext_tag.estimated_service_params.reserved",
58025 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58026
58027 {&hf_ieee80211_esp_data_format,
58028 {"Data Format", "wlan.ext_tag.estimated_service_params.data_format",
58029 FT_UINT24, BASE_DEC, VALS(esp_data_format_vals)((0 ? (const struct _value_string*)0 : ((esp_data_format_vals
))))
, 0x000018,
58030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58031
58032 {&hf_ieee80211_esp_ba_windows_size,
58033 {"BA Window Size", "wlan.ext_tag.estimated_service_params.ba_window_size",
58034 FT_UINT24, BASE_DEC, VALS(esp_ba_window_size_vals)((0 ? (const struct _value_string*)0 : ((esp_ba_window_size_vals
))))
, 0x0000E0,
58035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58036
58037 {&hf_ieee80211_esp_est_air_time_frac,
58038 {"Estimated Air Time Fraction", "wlan.ext_tag.estimated_service_params.air_time_frac",
58039 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00FF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58040
58041 {&hf_ieee80211_esp_data_ppdu_duration_target,
58042 {"Data PPDU Duration Target", "wlan.ext_tag.estimated_service_params.data_ppdu_dur_target",
58043 FT_UINT24, BASE_DEC, NULL((void*)0), 0xFF0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58044
58045 {&hf_ieee80211_fcg_new_channel_number,
58046 {"New Channel Number", "wlan.ext_tag.future_channel_guidance.new_chan_num",
58047 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58048
58049 {&hf_ieee80211_fcg_extra_info,
58050 {"Extra bytes", "wlan.ext_tag.future_channel_guidance.extra_bytes",
58051 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58052
58053 {&hf_ieee80211_sae_password_identifier,
58054 {"Password Identifier", "wlan.ext_tag.sae.password_identifier",
58055 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58056
58057 {&hf_ieee80211_sae_anti_clogging_token,
58058 {"Anti-Clogging Token", "wlan.ext_tag.sae.anti_clogging_token",
58059 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
58060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58061
58062 {&hf_ieee80211_tag_fils_indication_info_nr_pk,
58063 {"Number of Public Key Identifiers", "wlan.fils_indication.info.nr_pk",
58064 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) }},
58065
58066 {&hf_ieee80211_tag_fils_indication_info_nr_realm,
58067 {"Number of Realm Identifiers", "wlan.fils_indication.info.nr_realm",
58068 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) }},
58069
58070 {&hf_ieee80211_tag_fils_indication_info_ip_config,
58071 {"FILS IP Address Configuration", "wlan.fils_indication.info.ip_config",
58072 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) }},
58073
58074 {&hf_ieee80211_tag_fils_indication_info_cache_id_included,
58075 {"Cache Identifier", "wlan.fils_indication.info.cache_id_included",
58076 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) }},
58077
58078 {&hf_ieee80211_tag_fils_indication_info_hessid_included,
58079 {"HESSID", "wlan.fils_indication.info.hessid_included",
58080 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) }},
58081
58082 {&hf_ieee80211_tag_fils_indication_info_ska_without_pfs,
58083 {"FILS Shared Key Authentication without PFS", "wlan.fils_indication.info.ska_without_pfs",
58084 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) }},
58085
58086 {&hf_ieee80211_tag_fils_indication_info_ska_with_pfs,
58087 {"FILS Shared Key Authentication with PFS", "wlan.fils_indication.info.ska_with_pfs",
58088 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) }},
58089
58090 {&hf_ieee80211_tag_fils_indication_info_pka,
58091 {"FILS Public Key Authentication", "wlan.fils_indication.info.pka",
58092 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) }},
58093
58094 {&hf_ieee80211_tag_fils_indication_info_reserved,
58095 {"Reserved", "wlan.fils_indication.info.reserved",
58096 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) }},
58097
58098 {&hf_ieee80211_tag_fils_indication_cache_identifier,
58099 {"Cache Identifier", "wlan.fils_indication.cache_identifier",
58100 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58101
58102 {&hf_ieee80211_tag_fils_indication_hessid,
58103 {"HESSID", "wlan.fils_indication.hessid",
58104 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58105
58106 {&hf_ieee80211_tag_fils_indication_realm_list,
58107 {"Realm Identifiers", "wlan.fils_indication.realms",
58108 FT_NONE, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58109
58110 {&hf_ieee80211_tag_fils_indication_realm_identifier,
58111 {"Realm Identifier", "wlan.fils_indication.realms.identifier",
58112 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58113
58114 {&hf_ieee80211_tag_fils_indication_public_key_list,
58115 {"Public Keys", "wlan.fils_indication.public_keys",
58116 FT_NONE, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58117
58118 {&hf_ieee80211_tag_fils_indication_public_key_type,
58119 {"Key Type", "wlan.fils_indication.public_keys.key_type",
58120 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58121
58122 {&hf_ieee80211_tag_fils_indication_public_key_length,
58123 {"Length", "wlan.fils_indication.public_keys.length",
58124 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58125
58126 {&hf_ieee80211_tag_fils_indication_public_key_indicator,
58127 {"Public Key Indicator", "wlan.fils_indication.public_keys.indicator",
58128 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58129
58130 {&hf_ieee80211_qos_mgmt_attribute_id,
58131 {"Attribute ID", "wlan.qos_mgmt.ie.attribute_id",
58132 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(qos_mgmt_attributes)((0 ? (const struct _range_string*)0 : ((qos_mgmt_attributes)
)))
, 0,
58133 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58134
58135 {&hf_ieee80211_qos_mgmt_attribute_len,
58136 {"Length", "wlan.qos_mgmt.ie.length",
58137 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58138
58139 {&hf_ieee80211_qos_mgmt_start_port_range,
58140 {"Start Port", "wlan.qos_mgmt.ie.start_port",
58141 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58142
58143 {&hf_ieee80211_qos_mgmt_end_port_range,
58144 {"End Port", "wlan.qos_mgmt.ie.end_port",
58145 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58146
58147 {&hf_ieee80211_qos_mgmt_dscp_pol_id,
58148 {"Policy ID", "wlan.qos_mgmt.ie.dscp_policy.policy_id",
58149 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58150
58151 {&hf_ieee80211_qos_mgmt_dscp_pol_req_type,
58152 {"Request Type", "wlan.qos_mgmt.ie.dscp_policy.request_type",
58153 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58154
58155 {&hf_ieee80211_qos_mgmt_dscp_pol_dscp,
58156 {"DSCP", "wlan.qos_mgmt.ie.dscp_policy.dscp",
58157 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58158
58159 {&hf_ieee80211_qos_mgmt_domain_name,
58160 {"Domain Name", "wlan.qos_mgmt.ie.domain_name",
58161 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58162
58163 {&hf_ieee80211_qos_mgmt_unknown_attr,
58164 {"Unknown attribute", "wlan.qos_mgmt.ie.unknown_attribute",
58165 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58166
58167 {&hf_ieee80211_ext_tag,
58168 {"Ext Tag", "wlan.ext_tag",
58169 FT_NONE, BASE_NONE, NULL((void*)0), 0,
58170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58171
58172 {&hf_ieee80211_ext_tag_number,
58173 {"Ext Tag Number", "wlan.ext_tag.number",
58174 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_eid_ext_ext, 0,
58175 "Element ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58176
58177 {&hf_ieee80211_ext_tag_length,
58178 {"Ext Tag length", "wlan.ext_tag.length",
58179 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
58180 "Length of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58181
58182 {&hf_ieee80211_ext_tag_data,
58183 {"Ext Tag Data", "wlan.ext_tag.data",
58184 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
58185 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58186
58187 {&hf_ieee80211_fils_req_params_parameter_control_bitmap,
58188 {"Parameter Control Bitmap", "wlan.ext_tag.fils.req_params.parameter_control_bitmap",
58189 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58191
58192 {&hf_ieee80211_fils_req_params_fils_criteria_present,
58193 {"FILS Criteria Present", "wlan.ext_tag.fils.req_params.fils_criteria_present",
58194 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA0x01,
58195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58196
58197 {&hf_ieee80211_fils_req_params_max_delay_limit_present,
58198 {"Max Delay Limit Present", "wlan.ext_tag.fils.req_params.max_delay_limit_present",
58199 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_MAX_DELAY_LIMIT0x02,
58200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58201
58202 {&hf_ieee80211_fils_req_params_minimum_data_rate_present,
58203 {"Minimum Data Rate Present", "wlan.ext_tag.fils.req_params.minimum_data_rate_present",
58204 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_MINIMUM_DATA_RATE0x04,
58205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58206
58207 {&hf_ieee80211_fils_req_params_rcpi_limit_present,
58208 {"RCPI Limit Present", "wlan.ext_tag.fils.req_params.rcpi_limit_present",
58209 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_RCPI_LIMIT0x08,
58210 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58211
58212 {&hf_ieee80211_fils_req_params_oui_response_criteria_present,
58213 {"OUI Response Criteria Present", "wlan.ext_tag.fils.req_params.oui_response_criteria_present",
58214 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_OUI_RESPONSE_CRITERIA0x10,
58215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58216
58217 {&hf_ieee80211_fils_req_params_reserved,
58218 {"Reserved", "wlan.ext_tag.fils.req_params.reserved",
58219 FT_UINT8, BASE_HEX, NULL((void*)0), FILS_REQ_PARAMS_RESERVED0xE0,
58220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58221
58222 {&hf_ieee80211_fils_req_params_max_channel_time,
58223 {"Max Channel Time", "wlan.ext_tag.fils.req_params.max_channel_time",
58224 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58226
58227 {&hf_ieee80211_fils_req_params_fils_criteria,
58228 {"FILS Criteria", "wlan.ext_tag.fils.req_params.fils_criteria",
58229 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58231
58232 {&hf_ieee80211_fils_req_params_fils_criteria_bss_delay,
58233 {"BSS Delay", "wlan.ext_tag.fils.req_params.fils_criteria.bss_delay",
58234 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA_BSS_DELAY0x07,
58235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58236
58237 {&hf_ieee80211_fils_req_params_fils_criteria_phy_support,
58238 {"PHY Support", "wlan.ext_tag.fils.req_params.fils_criteria.phy_support",
58239 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA_PHY_SUPPORT0x38,
58240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58241
58242 {&hf_ieee80211_fils_req_params_fils_criteria_reserved,
58243 {"Reserved", "wlan.ext_tag.fils.req_params.fils_criteria.reserved",
58244 FT_UINT8, BASE_HEX, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA_RESERVED0xC0,
58245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58246
58247 {&hf_ieee80211_fils_req_params_max_delay_limit,
58248 {"Max Delay Limit", "wlan.ext_tag.fils.req_params.max_delay_limit",
58249 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58250 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58251
58252 {&hf_ieee80211_fils_req_params_minimum_data_rate,
58253 {"Minimum Data Rate", "wlan.ext_tag.fils.req_params.minimum_data_rate",
58254 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
58255 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58256
58257 {&hf_ieee80211_fils_req_params_rcpi_limit,
58258 {"RCPI Limit", "wlan.ext_tag.fils.req_params.rcpi_limit",
58259 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58260 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58261
58262 {&hf_ieee80211_fils_req_params_oui_response_criteria,
58263 {"OUI Response Criteria", "wlan.ext_tag.fils.req_params.oui_response_criteria",
58264 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
58265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58266
58267 {&hf_ieee80211_fils_session,
58268 {"FILS Session", "wlan.ext_tag.fils.session",
58269 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
58270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58271
58272 {&hf_ieee80211_fils_encrypted_data,
58273 {"FILS Encrypted Data", "wlan.ext_tag.fils.encrypted_data",
58274 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
58275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58276
58277 {&hf_ieee80211_fils_nonce,
58278 {"FILS Nonce", "wlan.ext_tag.fils.nonce",
58279 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
58280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58281
58282 {&hf_ieee80211_he_mac_capabilities,
58283 {"HE MAC Capabilities Information", "wlan.ext_tag.he_mac_caps",
58284 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58285
58286 {&hf_ieee80211_he_htc_he_support,
58287 {"+HTC HE Support", "wlan.ext_tag.he_mac_cap.htc_he_support",
58288 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000000001,
58289 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58290
58291 {&hf_ieee80211_he_twt_requester_support,
58292 {"TWT Requester Support", "wlan.ext_tag.he_mac_cap.twt_req_support",
58293 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000000002,
58294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58295
58296 {&hf_ieee80211_he_twt_responder_support,
58297 {"TWT Responder Support", "wlan.ext_tag.he_mac_cap.twt_rsp_support",
58298 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000000004,
58299 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58300
58301 {&hf_ieee80211_he_dynamic_fragmentation_support,
58302 {"Dynamic Fragmentation Support", "wlan.ext_tag.he_mac_cap.dynamic_fragmentation_support",
58303 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400,
58304 VALS64(he_dynamic_fragmentation_support_vals)((0 ? (const struct _val64_string*)0 : ((he_dynamic_fragmentation_support_vals
))))
, 0x000000000018,
58305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58306
58307 {&hf_ieee80211_he_max_number_fragmented_msdus,
58308 {"Maximum Number of Fragmented MSDUs", "wlan.ext_tag.he_mac_cap.max_frag_msdus",
58309 FT_UINT48, BASE_CUSTOM, CF_FUNC(max_frag_msdus_base_custom)((const void *) (size_t) (max_frag_msdus_base_custom)), 0x0000000000E0,
58310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58311
58312 {&hf_ieee80211_he_min_fragment_size,
58313 {"Minimum Fragment Size", "wlan.ext_tag.he_mac_cap.min_frag_size",
58314 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400,
58315 VALS64(he_minimum_fragmentation_size_vals)((0 ? (const struct _val64_string*)0 : ((he_minimum_fragmentation_size_vals
))))
, 0x000000000300,
58316 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58317
58318 {&hf_ieee80211_he_trigger_frame_mac_padding_dur,
58319 {"Trigger Frame MAC Padding Duration", "wlan.ext_tag.he_mac_cap.trig_frm_mac_padding_dur",
58320 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) }},
58321
58322 {&hf_ieee80211_he_multi_tid_aggregation_rx_support,
58323 {"Multi-TID Aggregation Rx Support", "wlan.ext_tag.he_mac_cap.multi_tid_agg_rx_support",
58324 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000007000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58325
58326 {&hf_ieee80211_he_he_link_adaptation_support,
58327 {"HE Link Adaptation Support", "wlan.ext_tag.he_mac_cap.he_link_adaptation_support",
58328 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400,
58329 VALS64(he_link_adaptation_support_vals)((0 ? (const struct _val64_string*)0 : ((he_link_adaptation_support_vals
))))
, 0x000000018000,
58330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58331
58332 {&hf_ieee80211_he_all_ack_support,
58333 {"All Ack Support", "wlan.ext_tag.he_mac_cap.all_ack_support",
58334 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000020000,
58335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58336
58337 {&hf_ieee80211_he_trs_support,
58338 {"TRS Support", "wlan.ext_tag.he_mac_cap.trs_support",
58339 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000040000,
58340 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58341
58342 {&hf_ieee80211_he_bsr_support,
58343 {"BSR Support", "wlan.ext_tag.he_mac_cap.bsr_support",
58344 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000080000,
58345 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58346
58347 {&hf_ieee80211_he_broadcast_twt_support,
58348 {"Broadcast TWT Support", "wlan.ext_tag.he_mac_cap.broadcast_twt_support",
58349 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000100000,
58350 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58351
58352 {&hf_ieee80211_he_32_bit_ba_bitmap_support,
58353 {"32-bit BA Bitmap Support", "wlan.ext_tag.he_mac_cap.32_bit_ba_bitmap_support",
58354 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000200000,
58355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58356
58357 {&hf_ieee80211_he_mu_cascading_support,
58358 {"MU Cascading Support", "wlan.ext_tag.he_mac_cap.mu_cascading_support",
58359 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000400000,
58360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58361
58362 {&hf_ieee80211_he_ack_enabled_aggregation_support,
58363 {"Ack-Enabled Aggregation Support", "wlan.ext_tag.he_mac_cap.ack_enabled_agg_support",
58364 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000800000,
58365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58366
58367 {&hf_ieee80211_he_reserved_b24,
58368 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_b24",
58369 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000001000000,
58370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58371
58372 {&hf_ieee80211_he_om_control_support,
58373 {"OM Control Support", "wlan.ext_tag.he_mac_cap.om_control_support",
58374 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000002000000,
58375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58376
58377 {&hf_ieee80211_he_ofdma_ra_support,
58378 {"OFDMA RA Support", "wlan.ext_tag.he_mac_cap.ofdma_ra_support",
58379 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000004000000,
58380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58381
58382 {&hf_ieee80211_he_max_a_mpdu_length_exponent_ext,
58383 {"Maximum A-MPDU Length Exponent Extension",
58384 "wlan.ext_tag.he_mac_cap.max_a_mpdu_len_exp_ext",
58385 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000018000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58386
58387 {&hf_ieee80211_he_a_msdu_fragmentation_support,
58388 {"A-MSDU Fragmentation Support", "wlan.ext_tag.he_mac_cap.a_msdu_frag_support",
58389 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000020000000,
58390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58391
58392 {&hf_ieee80211_he_flexible_twt_schedule_support,
58393 {"Flexible TWT Schedule Support", "wlan.ext_tag.he_mac_cap.flexible_twt_sched_support",
58394 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000040000000,
58395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58396
58397 {&hf_ieee80211_he_rx_control_frame_to_multibss,
58398 {"Rx Control Frame to MultiBSS", "wlan.ext_tag.he_mac_cap.rx_ctl_frm_multibss",
58399 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000080000000,
58400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58401
58402 {&hf_ieee80211_he_bsrp_bqrp_a_mpdu_aggregation,
58403 {"BSRP BQRP A-MPDU Aggregation", "wlan.ext_tag.he_mac_cap.bsrp_bqrp_a_mpdu_agg",
58404 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000100000000,
58405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58406
58407 {&hf_ieee80211_he_qtp_support,
58408 {"QTP Support", "wlan.ext_tag.he_mac_cap.qtp_support",
58409 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000200000000,
58410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58411
58412 {&hf_ieee80211_he_bqr_support,
58413 {"BQR Support", "wlan.ext_tag.he_mac_cap.bqr_support",
58414 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000400000000,
58415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58416
58417 {&hf_ieee80211_he_psr_responder,
58418 {"PSR Responder", "wlan.ext_tag.he_mac_cap.psr_responder",
58419 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000800000000,
58420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58421
58422 {&hf_ieee80211_he_ndp_feedback_report_support,
58423 {"NDP Feedback Report Support", "wlan.ext_tag.he_mac_cap.ndp_feedback_report_support",
58424 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x001000000000,
58425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58426
58427 {&hf_ieee80211_he_ops_support,
58428 {"OPS Support", "wlan.ext_tag.he_mac_cap.ops_support",
58429 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x002000000000,
58430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58431
58432 {&hf_ieee80211_he_a_msdu_in_a_mpdu_support,
58433 {"A-MSDU Not Under BA in Ack-Enabled A-MPDU Support", "wlan.ext_tag.he_mac_cap.a_msdu_in_a_mpdu_support",
58434 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x004000000000,
58435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58436
58437 {&hf_ieee80211_he_multi_tid_aggregation_tx_support,
58438 {"Multi-TID Aggregation Tx Support", "wlan.ext_tag.he_mac_cap.multi_tid_agg_tx_support",
58439 FT_UINT48, BASE_DEC, NULL((void*)0), 0x038000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58440
58441 {&hf_ieee80211_he_subchannel_selective_trans_support,
58442 {"HE Subchannel Selective Transmission Support", "wlan.ext_tag.he_mac_cap.subchannel_selective_xmit_support",
58443 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58444 0x040000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58445
58446 {&hf_ieee80211_he_2_996_tone_ru_support,
58447 {"UL 2x996-tone RU Support", "wlan.ext_tag.he_mac_cap.ul_2_996_tone_ru_support",
58448 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58449 0x080000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58450
58451 {&hf_ieee80211_he_om_control_ul_mu_data_disable_rx_support,
58452 {"OM Control UL MU Data Disable RX Support", "wlan.ext_tag.he_mac_cap.om_cntl_ul_mu_data_disable_rx_support",
58453 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58454 0x100000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58455
58456 {&hf_ieee80211_he_dynamic_sm_power_save,
58457 {"HE Dynamic SM Power Save", "wlan.ext_tag.he_mac_cap.dynamic_sm_power_save",
58458 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58459 0x200000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58460
58461 {&hf_ieee80211_he_punctured_sounding_support,
58462 {"Punctured Sounding Support", "wlan.ext_tag.he_mac_cap.punctured_sounding_support",
58463 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58464 0x400000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58465
58466 {&hf_ieee80211_he_ht_and_vht_trigger_frame_rx_support,
58467 {"HT And VHT Trigger Frame RX Support", "wlan.ext_tag.he_mac_cap.ht_and_vht_trigger_frame_rx_support",
58468 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58469 0x800000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58470
58471 {&hf_ieee80211_he_reserved_bits_5_7,
58472 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bits_5_7",
58473 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0000000000E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58474
58475 {&hf_ieee80211_he_reserved_bits_8_9,
58476 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bits_8_9",
58477 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58478
58479 {&hf_ieee80211_he_reserved_bits_15_16,
58480 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bits_15_16",
58481 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000018000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58482
58483 {&hf_ieee80211_he_reserved_bit_18,
58484 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_18",
58485 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000040000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58486
58487 {&hf_ieee80211_he_reserved_bit_19,
58488 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_19",
58489 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000080000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58490
58491 {&hf_ieee80211_he_reserved_bit_25,
58492 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_25",
58493 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58494
58495 {&hf_ieee80211_he_reserved_bit_29,
58496 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_29",
58497 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000020000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58498
58499 {&hf_ieee80211_he_reserved_bit_34,
58500 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_34",
58501 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000400000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58502
58503 {&hf_ieee80211_he_phy_reserved_b0,
58504 {"Reserved", "wlan.ext_tag.he_phy_cap.reserved_b0",
58505 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58506
58507 {&hf_ieee80211_he_phy_cap_reserved_b0,
58508 {"Reserved", "wlan.ext_tag.he_phy_cap.fbyte.reserved_b0",
58509 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
58510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58511
58512 {&hf_ieee80211_he_phy_chan_width_set,
58513 {"Channel Width Set", "wlan.ext_tag.he_phy_cap.fbytes",
58514 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58515
58516 {&hf_ieee80211_he_40mhz_channel_2_4ghz,
58517 {"40 MHz in 2.4 GHz band", "wlan.ext_tag.he_phy_cap.chan_width_set.40mhz_in_2_4ghz",
58518 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) }},
58519
58520 {&hf_ieee80211_he_40_and_80_mhz_5ghz,
58521 {"40 & 80 MHz in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.40_80_in_5ghz",
58522 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) }},
58523
58524 {&hf_ieee80211_he_160_mhz_5ghz,
58525 {"160 MHz in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.160_in_5ghz",
58526 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) }},
58527
58528 {&hf_ieee80211_he_160_80_plus_80_mhz_5ghz,
58529 {"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",
58530 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) }},
58531
58532 {&hf_ieee80211_he_242_tone_rus_in_2_4ghz,
58533 {"242 tone RUs in the 2.4 GHz band", "wlan.ext_tag.he_phy_cap.chan_width_set.242_tone_in_2_4ghz",
58534 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) }},
58535
58536 {&hf_ieee80211_he_242_tone_rus_in_5ghz,
58537 {"242 tone RUs in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.242_tone_in_5ghz",
58538 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) }},
58539
58540 {&hf_ieee80211_he_chan_width_reserved,
58541 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width_set.reserved",
58542 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58543
58544 {&hf_ieee80211_he_phy_b8_to_b23,
58545 {"Bits 8 to 23", "wlan.ext_tag.he_phy_cap.bits_8_to_23",
58546 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58547
58548 {&hf_ieee80211_he_5ghz_b0_reserved,
58549 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.5GHz_b0_reserved",
58550 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58551
58552 {&hf_ieee80211_he_5ghz_b4_reserved,
58553 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.5GHz_b4_reserved",
58554 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58555
58556 {&hf_ieee80211_he_24ghz_b1_reserved,
58557 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b1_reserved",
58558 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58559
58560 {&hf_ieee80211_he_24ghz_b2_reserved,
58561 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b2_reserved",
58562 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58563
58564 {&hf_ieee80211_he_24ghz_b3_reserved,
58565 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b3_reserved",
58566 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58567
58568 {&hf_ieee80211_he_24ghz_b5_reserved,
58569 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b5_reserved",
58570 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58571
58572 {&hf_ieee80211_he_phy_cap_punctured_preamble_rx,
58573 {"Punctured Preamble Rx", "wlan.ext_tag.he_phy_cap.punc_preamble_rx",
58574 FT_UINT16, BASE_HEX, NULL((void*)0), 0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58575
58576 {&hf_ieee80211_he_phy_cap_device_class,
58577 {"Device Class", "wlan.ext_tag.he_phy_cap.device_class",
58578 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) }},
58579
58580 {&hf_ieee80211_he_phy_cap_ldpc_coding_in_payload,
58581 {"LDPC Coding In Payload", "wlan.ext_tag.he_phy_cap.ldpc_coding_in_payload",
58582 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) }},
58583
58584 {&hf_ieee80211_he_phy_cap_he_su_ppdu_1x_he_ltf_08us,
58585 {"HE SU PPDU With 1x HE-LTF And 0.8us GI",
58586 "wlan.ext_tag.he_phy_cap.he_su_ppdu_with_1x_he_ltf_08us",
58587 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) }},
58588
58589 {&hf_ieee80211_he_phy_cap_midamble_tx_rx_max_nsts,
58590 {"Midamble Tx/Rx Max NSTS", "wlan.ext_tag.he_phy_cap.midamble_tx_rx_max_nsts",
58591 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) }},
58592
58593 {&hf_ieee80211_he_phy_cap_ndp_with_4x_he_ltf_32us,
58594 {"NDP With 4x HE-LTF and 3.2us GI",
58595 "wlan.ext_tag.he_phy_cap.ndp_with_4x_he_ltf_4x_3.2us",
58596 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) }},
58597
58598 {&hf_ieee80211_he_phy_cap_stbc_tx_lt_80mhz,
58599 {"STBC Tx <= 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_tx_lt_80mhz",
58600 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) }},
58601
58602 {&hf_ieee80211_he_phy_cap_stbc_rx_lt_80mhz,
58603 {"STBC Rx <= 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_rx_lt_80mhz",
58604 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) }},
58605
58606 {&hf_ieee80211_he_phy_cap_doppler_tx,
58607 {"Doppler Tx", "wlan.ext_tag.he_phy_cap.doppler_tx",
58608 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) }},
58609
58610 {&hf_ieee80211_he_phy_cap_doppler_rx,
58611 {"Doppler Rx", "wlan.ext_tag.he_phy_cap.doppler_rx",
58612 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) }},
58613
58614 {&hf_ieee80211_he_phy_cap_full_bw_ul_mu_mimo,
58615 {"Full Bandwidth UL MU-MIMO", "wlan.ext_tag.he_phy_cap.full_bw_ul_mu_mimo",
58616 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) }},
58617
58618 {&hf_ieee80211_he_phy_cap_partial_bw_ul_mu_mimo,
58619 {"Partial Bandwidth UL MU-MIMO", "wlan.ext_tag.he_phy_cap.partial_bw_ul_mu_mimo",
58620 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) }},
58621
58622 {&hf_ieee80211_he_phy_b24_to_b39,
58623 {"Bits 24 to 39", "wlan.ext_tag.he_phy_cap.bits_24_to_39",
58624 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58625
58626 {&hf_ieee80211_he_phy_cap_dcm_max_constellation_tx,
58627 {"DCM Max Constellation Tx", "wlan.ext_tag.he_phy_cap.dcm_max_const_tx",
58628 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) }},
58629
58630 {&hf_ieee80211_he_phy_cap_dcm_max_nss_tx,
58631 {"DCM Max NSS Tx", "wlan.ext_tag.he_phy_cap.dcm_max_nss_tx",
58632 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) }},
58633
58634 {&hf_ieee80211_he_phy_cap_dcm_max_constellation_rx,
58635 {"DCM Max Constellation Rx", "wlan.ext_tag.he_phy_cap.dcm_max_const_rx",
58636 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) }},
58637
58638 {&hf_ieee80211_he_phy_cap_dcm_max_nss_rx,
58639 {"DCM Max NSS Rx", "wlan.ext_tag.he_phy_cap.dcm_max_nss_rx",
58640 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) }},
58641
58642 {&hf_ieee80211_he_phy_cap_rx_partial_bw_su_20mhz_he_mu_ppdu,
58643 {"Rx Partial BW SU In 20 MHz HE MU PPDU", "wlan.ext_tag.he_phy_cap.rx_partial_bw_su_20mhz_he_mu_ppdu",
58644 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) }},
58645
58646 {&hf_ieee80211_he_phy_cap_su_beamformer,
58647 {"SU Beamformer", "wlan.ext_tag.he_phy_cap.su_beamformer",
58648 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) }},
58649
58650 {&hf_ieee80211_he_phy_cap_su_beamformee,
58651 {"SU Beamformee", "wlan.ext_tag.he_phy_cap.su_beamformee",
58652 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) }},
58653
58654 {&hf_ieee80211_he_phy_cap_mu_beamformer,
58655 {"MU Beamformer", "wlan.ext_tag.he_phy_cap.mu_beamformer",
58656 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) }},
58657
58658 {&hf_ieee80211_he_phy_cap_beamformee_sts_lte_80mhz,
58659 {"Beamformee STS <= 80 MHz", "wlan.ext_tag.he_phy_cap.beamformee_sts_lte_80mhz",
58660 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58661
58662 {&hf_ieee80211_he_phy_cap_beamformee_sts_gt_80mhz,
58663 {"Beamformee STS > 80 MHz", "wlan.ext_tag.he_phy_cap.beamformee_sts_gt_80mhz",
58664 FT_UINT16, BASE_HEX, NULL((void*)0), 0xE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58665
58666 {&hf_ieee80211_he_phy_b40_to_b55,
58667 {"Bits 40 to 55", "wlan.ext_tag.he_phy_cap.bits_40_to_55",
58668 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58669
58670 {&hf_ieee80211_he_phy_cap_number_of_sounding_dims_lte_80,
58671 {"Number Of Sounding Dimensions <= 80 MHz", "wlan.ext_tag.he_phy_cap.no_sounding_dims_lte_80",
58672 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58673
58674 {&hf_ieee80211_he_phy_cap_number_of_sounding_dims_gt_80,
58675 {"Number Of Sounding Dimensions > 80 MHz", "wlan.ext_tag.he_phy_cap.no_sounding_dims_gt_80",
58676 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58677
58678 {&hf_ieee80211_he_phy_cap_ng_eq_16_su_fb,
58679 {"Ng = 16 SU Feedback", "wlan.ext_tag.he_phy_cap.ng_eq_16_su_fb",
58680 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) }},
58681
58682 {&hf_ieee80211_he_phy_cap_ng_eq_16_mu_fb,
58683 {"Ng = 16 MU Feedback", "wlan.ext_tag.he_phy_cap.ng_eq_16_mu_fb",
58684 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) }},
58685
58686 {&hf_ieee80211_he_phy_cap_codebook_size_eq_4_2_fb,
58687 {"Codebook Size SU Feedback", "wlan.ext_tag.he_phy_cap.codebook_size_su_fb",
58688 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) }},
58689
58690 {&hf_ieee80211_he_phy_cap_codebook_size_eq_7_5_fb,
58691 {"Codebook Size MU Feedback", "wlan.ext_tag.he_phy_cap.codebook_size_mu_fb",
58692 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) }},
58693
58694 {&hf_ieee80211_he_phy_cap_triggered_su_beamforming_fb,
58695 {"Triggered SU Beamforming Feedback", "wlan.ext_tag.he_phy_cap.trig_su_bf_fb",
58696 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) }},
58697
58698 {&hf_ieee80211_he_phy_cap_triggered_mu_beamforming_fb,
58699 {"Triggered MU Beamforming Feedback", "wlan.ext_tag.he_phy_cap.trig_mu_bf_fb",
58700 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) }},
58701
58702 {&hf_ieee80211_he_phy_cap_triggered_cqi_fb,
58703 {"Triggered CQI Feedback", "wlan.ext_tag.he_phy_cap.trig_cqi_fb",
58704 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) }},
58705
58706 {&hf_ieee80211_he_phy_cap_partial_bw_extended_range,
58707 {"Partial Bandwidth Extended Range", "wlan.ext_tag.he_phy_cap.partial_bw_er",
58708 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) }},
58709
58710 {&hf_ieee80211_he_phy_cap_partial_bw_dl_mu_mimo,
58711 {"Partial Bandwidth DL MU-MIMO", "wlan.ext_tag.he_phy_cap.partial_bw_dl_mu_mimo",
58712 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) }},
58713
58714 {&hf_ieee80211_he_phy_cap_ppe_threshold_present,
58715 {"PPE Thresholds Present", "wlan.ext_tag.he_phy_cap.ppe_thres_present",
58716 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58717
58718 {&hf_ieee80211_he_phy_b56_to_b71,
58719 {"Bits 56 to 71", "wlan.ext_tag.he_phy_cap.bits_56_to_71",
58720 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58721
58722 {&hf_ieee80211_he_phy_cap_psr_based_sr_support,
58723 {"PSR-based SR Support", "wlan.ext_tag.he_phy_cap.psr_based_sr_sup",
58724 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) }},
58725
58726 {&hf_ieee80211_he_phy_cap_power_boost_factor_ar_support,
58727 {"Power Boost Factor ar Support", "wlan.ext_tag.he_phy_cap.pwr_bst_factor_ar_sup",
58728 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) }},
58729
58730 {&hf_ieee80211_he_phy_cap_he_su_ppdu_etc_gi,
58731 {"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",
58732 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) }},
58733
58734 {&hf_ieee80211_he_phy_cap_max_nc,
58735 {"Max Nc", "wlan.ext_tag.he_phy_cap.max_nc",
58736 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) }},
58737
58738 {&hf_ieee80211_he_phy_cap_stbc_tx_gt_80_mhz,
58739 {"STBC Tx > 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_tx_gt_80_mhz",
58740 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) }},
58741
58742 {&hf_ieee80211_he_phy_cap_stbc_rx_gt_80_mhz,
58743 {"STBC Rx > 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_rx_gt_80_mhz",
58744 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) }},
58745
58746 {&hf_ieee80211_he_phy_cap_he_er_su_ppdu_4xxx_gi,
58747 {"HE ER SU PPDU With 4x HE-LTF And 0.8us GI", "wlan.ext_tag.he_phy_cap.he_er_su_ppdu_4xxx_gi",
58748 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) }},
58749
58750 {&hf_ieee80211_he_phy_cap_20mhz_in_40mhz_24ghz_band,
58751 {"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",
58752 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) }},
58753
58754 {&hf_ieee80211_he_phy_cap_20mhz_in_160_80p80_ppdu,
58755 {"20 MHz In 160/80+80 MHz HE PPDU", "wlan.ext_tag.he_phy_cap.20_mhz_in_160_80p80_ppdu",
58756 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) }},
58757
58758 {&hf_ieee80211_he_phy_cap_80mgz_in_160_80p80_ppdu,
58759 {"80 MHz In 160/80+80 MHz HE PPDU", "wlan.ext_tag.he_phy_cap.80_mhz_in_160_80p80_ppdu",
58760 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) }},
58761
58762 {&hf_ieee80211_he_phy_cap_he_er_su_ppdu_1xxx_gi,
58763 {"HE ER SU PPDU With 1x HE-LTF And 0.8us GI", "wlan.ext_tag.he_phy_cap.he_er_su_ppdu_1xxx_gi",
58764 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) }},
58765
58766 {&hf_ieee80211_he_phy_cap_midamble_tx_rx_2x_xxx_ltf,
58767 {"Midamble Tx/Rx 2x And 1x HE-LTF", "wlan.ext_tag.he_phy_cap.midamble_tx_rx_2x_1x_he_ltf",
58768 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) }},
58769
58770 {&hf_ieee80211_he_phy_b72_to_b87,
58771 {"Bits 72 to 87", "wlan.ext_tag.he_phy_cap.bits_72_to_87",
58772 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58773
58774 {&hf_ieee80211_he_phy_cap_dcm_max_ru,
58775 {"DCM Max RU", "wlan.ext_tag.he_phy_cap.dcm_max_ru",
58776 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) }},
58777
58778 {&hf_ieee80211_he_phy_cap_longer_than_16_he_sigb_ofdm_symbol_support,
58779 {"Longer Than 16 HE SIG-B OFDM Symbols Support", "wlan.ext_tag.he_phy_cap.longer_than_16_he_sigb_ofdm_sym_support",
58780 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) }},
58781
58782 {&hf_ieee80211_he_phy_cap_non_triggered_cqi_feedback,
58783 {"Non-Triggered CQI Feedback", "wlan.ext_tag.he_phy_cap.non_triggered_feedback",
58784 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) }},
58785
58786 {&hf_ieee80211_he_phy_cap_tx_1024_qam_242_tone_ru_support,
58787 {"Tx 1024-QAM Support < 242-tone RU Support", "wlan.ext_tag.he_phy_cap.tx_1024_qam_support_lt_242_tone_ru",
58788 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) }},
58789
58790 {&hf_ieee80211_he_phy_cap_rx_1024_qam_242_tone_ru_support,
58791 {"Rx 1024-QAM Support < 242-tone RU Support", "wlan.ext_tag.he_phy_cap.rx_1024_qam_support_lt_242_tone_ru",
58792 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) }},
58793
58794 {&hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_compressed_sigb,
58795 {"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",
58796 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) }},
58797
58798 {&hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_non_compressed_sigb,
58799 {"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",
58800 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) }},
58801
58802 {&hf_ieee80211_he_phy_cap_nominal_packet_padding,
58803 {"Nominal Packet Padding", "wlan.ext_tag.he_phy_cap.nominal_packet_padding",
58804 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) }},
58805
58806 {&hf_ieee80211_he_phy_cap_he_mu_ppdu_ru_rx_max,
58807 {"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",
58808 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58809
58810 {&hf_ieee80211_he_phy_cap_b81_b87_reserved,
58811 {"Reserved", "wlan.ext_tag.he_phy_cap.reserved_b81_b87",
58812 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58813
58814 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_1_ss,
58815 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_1_ss",
58816 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) }},
58817
58818 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_2_ss,
58819 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_2_ss",
58820 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) }},
58821
58822 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_3_ss,
58823 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_3_ss",
58824 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) }},
58825
58826 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_4_ss,
58827 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_4_ss",
58828 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) }},
58829
58830 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_5_ss,
58831 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_5_ss",
58832 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) }},
58833
58834 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_6_ss,
58835 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_6_ss",
58836 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) }},
58837
58838 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_7_ss,
58839 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_7_ss",
58840 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) }},
58841
58842 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_8_ss,
58843 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_8_ss",
58844 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) }},
58845
58846 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_1_ss,
58847 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_1_ss",
58848 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) }},
58849
58850 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_2_ss,
58851 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_2_ss",
58852 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) }},
58853
58854 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_3_ss,
58855 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_3_ss",
58856 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) }},
58857
58858 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_4_ss,
58859 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_4_ss",
58860 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) }},
58861
58862 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_5_ss,
58863 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_5_ss",
58864 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) }},
58865
58866 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_6_ss,
58867 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_6_ss",
58868 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) }},
58869
58870 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_7_ss,
58871 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_7_ss",
58872 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) }},
58873
58874 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_8_ss,
58875 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_8_ss",
58876 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) }},
58877
58878 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_1_ss,
58879 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_1_ss",
58880 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) }},
58881
58882 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_2_ss,
58883 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_2_ss",
58884 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) }},
58885
58886 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_3_ss,
58887 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_3_ss",
58888 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) }},
58889
58890 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_4_ss,
58891 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_4_ss",
58892 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) }},
58893
58894 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_5_ss,
58895 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_5_ss",
58896 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) }},
58897
58898 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_6_ss,
58899 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_6_ss",
58900 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) }},
58901
58902 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_7_ss,
58903 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_7_ss",
58904 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) }},
58905
58906 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_8_ss,
58907 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_8_ss",
58908 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) }},
58909
58910 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_1_ss,
58911 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_1_ss",
58912 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) }},
58913
58914 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_2_ss,
58915 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_2_ss",
58916 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) }},
58917
58918 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_3_ss,
58919 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_3_ss",
58920 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) }},
58921
58922 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_4_ss,
58923 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_4_ss",
58924 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) }},
58925
58926 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_5_ss,
58927 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_5_ss",
58928 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) }},
58929
58930 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_6_ss,
58931 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_6_ss",
58932 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) }},
58933
58934 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_7_ss,
58935 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_7_ss",
58936 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) }},
58937
58938 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_8_ss,
58939 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_8_ss",
58940 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) }},
58941
58942 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_1_ss,
58943 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_1_ss",
58944 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) }},
58945
58946 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_2_ss,
58947 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_2_ss",
58948 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) }},
58949
58950 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_3_ss,
58951 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_3_ss",
58952 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) }},
58953
58954 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_4_ss,
58955 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_4_ss",
58956 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) }},
58957
58958 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_5_ss,
58959 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_5_ss",
58960 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) }},
58961
58962 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_6_ss,
58963 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_6_ss",
58964 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) }},
58965
58966 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_7_ss,
58967 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_7_ss",
58968 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) }},
58969
58970 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_8_ss,
58971 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_8_ss",
58972 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) }},
58973
58974 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_1_ss,
58975 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_1_ss",
58976 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) }},
58977
58978 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_2_ss,
58979 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_2_ss",
58980 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) }},
58981
58982 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_3_ss,
58983 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_3_ss",
58984 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) }},
58985
58986 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_4_ss,
58987 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_4_ss",
58988 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) }},
58989
58990 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_5_ss,
58991 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_5_ss",
58992 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) }},
58993
58994 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_6_ss,
58995 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_6_ss",
58996 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) }},
58997
58998 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_7_ss,
58999 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_7_ss",
59000 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) }},
59001
59002 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_8_ss,
59003 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_8_ss",
59004 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) }},
59005
59006 {&hf_ieee80211_he_rx_he_mcs_map_lte_80,
59007 {"Rx HE-MCS Map <= 80 MHz", "wlan.ext_tag.he_mcs_map.rx_he_mcs_map_lte_80",
59008 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59009
59010 {&hf_ieee80211_he_tx_he_mcs_map_lte_80,
59011 {"Tx HE-MCS Map <= 80 MHz", "wlan.ext_tag.he_mcs_map.tx_he_mcs_map_lte_80",
59012 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59013
59014 {&hf_ieee80211_he_rx_he_mcs_map_160,
59015 {"Rx HE-MCS Map 160 MHz", "wlan.ext_tag.he_mcs_map.rx_he_mcs_map_160",
59016 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59017
59018 {&hf_ieee80211_he_tx_he_mcs_map_160,
59019 {"Tx HE-MCS Map 160 MHz", "wlan.ext_tag.he_mcs_map.tx_he_mcs_map_160",
59020 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59021
59022 {&hf_ieee80211_he_rx_he_mcs_map_80_80,
59023 {"Rx HE-MCS Map 80+80 MHz", "wlan.ext_tag.he_mcs_map.rx_he_mcs_map_80_80",
59024 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59025
59026 {&hf_ieee80211_he_tx_he_mcs_map_80_80,
59027 {"Tx HE-MCS Map 80+80 MHz", "wlan.ext_tag.he_mcs_map.tx_he_mcs_map_80_80",
59028 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59029
59030 {&hf_ieee80211_he_ppe_thresholds_nss,
59031 {"NSS", "wlan.ext_tag.he_ppe_thresholds.nss",
59032 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59033
59034 {&hf_ieee80211_he_ppe_thresholds_ru_index_bitmask,
59035 {"RU Index Bitmask", "wlan.ext_tag.he_ppe_thresholds.ru_index_bitmask",
59036 FT_UINT8, BASE_HEX, NULL((void*)0), 0x78, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59037
59038 {&hf_ieee80211_he_ppe_ppet16,
59039 {"PPET16","wlan.ext_tag.he_ppe_thresholds.ppet16",
59040 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) }},
59041
59042 {&hf_ieee80211_he_ppe_ppet8,
59043 {"PPET8","wlan.ext_tag.he_ppe_thresholds.ppet8",
59044 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) }},
59045
59046 {&hf_ieee80211_he_operation_parameter,
59047 {"HE Operation Parameters", "wlan.ext_tag.he_operation.params",
59048 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59049
59050 {&hf_ieee80211_he_operation_default_pe_duration,
59051 {"Default PE Duration", "wlan.ext_tag.he_operation.default_pe_duration",
59052 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59053
59054 {&hf_ieee80211_he_operation_twt_required,
59055 {"TWT Required", "wlan.ext_tag.he_operation.twt_required",
59056 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) }},
59057
59058 {&hf_ieee80211_he_operation_txop_duration_rts_threshold,
59059 {"TXOP Duration RTS Threshold", "wlan.ext_tag.he_operation.txop_duration_rts_thresh",
59060 FT_UINT24, BASE_DEC, NULL((void*)0), 0x003FF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59061
59062 {&hf_ieee80211_he_operation_vht_operation_information_present,
59063 {"VHT Operation Information Present", "wlan.ext_tag.he_operation.vht_op_info_present",
59064 FT_BOOLEAN, 24, NULL((void*)0), 0x004000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59065
59066 {&hf_ieee80211_he_operation_co_hosted_bss,
59067 {"Co-Hosted BSS", "wlan.ext_tag.he_operation.co_hosted_bss",
59068 FT_BOOLEAN, 24, NULL((void*)0), 0x008000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59069
59070 {&hf_ieee80211_he_operation_er_su_disable,
59071 {"ER SU Disable", "wlan.ext_tag.he_operation.er_su_disable",
59072 FT_BOOLEAN, 24, NULL((void*)0), 0x010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59073
59074 {&hf_ieee80211_he_operation_6ghz_operation_information_present,
59075 {"6 GHz Operation Information Present", "wlan.ext_tag.he_operation.6ghz_operation_information_present",
59076 FT_BOOLEAN, 24, NULL((void*)0), 0x020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59077
59078 {&hf_ieee80211_he_operation_reserved_b16_b23,
59079 {"Reserved", "wlan.ext_tag.he_operation.reserved_b16_b32",
59080 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFC0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59081
59082 {&hf_ieee80211_he_bss_color_information,
59083 {"BSS Color Information", "wlan.ext_tag.bss_color_information",
59084 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59085
59086 {&hf_ieee80211_he_bss_color_info_bss_color,
59087 {"BSS Color", "wlan.ext_tag.bss_color_information.bss_color",
59088 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59089
59090 {&hf_ieee80211_he_bss_color_partial_bss_color,
59091 {"Partial BSS Color", "wlan.ext_tag.bss_color_information.partial_bss_color",
59092 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59093
59094 {&hf_ieee80211_he_bss_color_bss_color_disabled,
59095 {"BSS Color Disabled", "wlan.ext_tag.bss_color_information.bss_color_disabled",
59096 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59097
59098 {&hf_ieee80211_he_operation_basic_mcs,
59099 {"Basic HE-MCS and NSS Set", "wlan.ext_tag.he_operation.basic_he_mcs_and_nss",
59100 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59101
59102 {&hf_ieee80211_he_oper_max_he_mcs_for_1_ss,
59103 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_1_ss",
59104 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) }},
59105
59106 {&hf_ieee80211_he_oper_max_he_mcs_for_2_ss,
59107 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_2_ss",
59108 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) }},
59109
59110 {&hf_ieee80211_he_oper_max_he_mcs_for_3_ss,
59111 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_3_ss",
59112 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) }},
59113
59114 {&hf_ieee80211_he_oper_max_he_mcs_for_4_ss,
59115 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_4_ss",
59116 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) }},
59117
59118 {&hf_ieee80211_he_oper_max_he_mcs_for_5_ss,
59119 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_5_ss",
59120 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) }},
59121
59122 {&hf_ieee80211_he_oper_max_he_mcs_for_6_ss,
59123 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_6_ss",
59124 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) }},
59125
59126 {&hf_ieee80211_he_oper_max_he_mcs_for_7_ss,
59127 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_7_ss",
59128 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) }},
59129
59130 {&hf_ieee80211_he_oper_max_he_mcs_for_8_ss,
59131 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_8_ss",
59132 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) }},
59133
59134 {&hf_ieee80211_he_operation_channel_width,
59135 {"Channel Width", "wlan.ext_tag.he_operation.vht_op_info.channel_width",
59136 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) }},
59137
59138 {&hf_ieee80211_he_operation_channel_center_freq_0,
59139 {"Channel Center Frequency Segment 0", "wlan.ext_tag.he_operation.vht_op_info.chan_center_freq_seg_0",
59140 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59141
59142 {&hf_ieee80211_he_operation_channel_center_freq_1,
59143 {"Channel Center Frequency Segment 1", "wlan.ext_tag.he_operation.vht_op_info.chan_center_freq_seg_1",
59144 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59145
59146 {&hf_ieee80211_he_operation_max_co_hosted_bssid_indicator,
59147 {"Max Co-Hosted BSSID Indicator", "wlan.ext_tag.he_operation.max_co_hosted_bssid_indicator",
59148 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59149
59150 {&hf_ieee80211_he_operation_6ghz_primary_channel,
59151 {"Primary Channel", "wlan.ext_tag.he_operation.6ghz.primary_channel",
59152 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59153
59154 {&hf_ieee80211_he_operation_6ghz_control,
59155 {"Control", "wlan.ext_tag.he_operation.6ghz.control",
59156 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59157
59158 {&hf_ieee80211_he_operation_6ghz_control_channel_width,
59159 {"Channel Width", "wlan.ext_tag.he_operation.6ghz.control.channel_width",
59160 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) }},
59161
59162 {&hf_ieee80211_he_operation_6ghz_control_duplicate_beacon,
59163 {"Duplicate Beacon", "wlan.ext_tag.he_operation.6ghz.control.duplicate_beacon",
59164 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59165
59166 {&hf_ieee80211_he_operation_6ghz_control_regulatory_info,
59167 {"Regulatory Info", "wlan.ext_tag.he_operation.6ghz.control.regulatory_info",
59168 FT_UINT8, BASE_DEC, NULL((void*)0), 0x78, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59169
59170 {&hf_ieee80211_he_operation_6ghz_control_reserved,
59171 {"Reserved", "wlan.ext_tag.he_operation.6ghz.control.reserved",
59172 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59173
59174 {&hf_ieee80211_he_operation_6ghz_channel_center_freq_0,
59175 {"Channel Center Frequency Segment 0", "wlan.ext_tag.he_operation.6ghz.chan_center_freq_seg_0",
59176 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59177
59178 {&hf_ieee80211_he_operation_6ghz_channel_center_freq_1,
59179 {"Channel Center Frequency Segment 1", "wlan.ext_tag.he_operation.6ghz.chan_center_freq_seg_1",
59180 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59181
59182 {&hf_ieee80211_he_operation_6ghz_minimum_rate,
59183 {"Minimum Rate", "wlan.ext_tag.he_operation.6ghz.minimum_rate",
59184 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59185
59186 {&hf_ieee80211_he_muac_aci_aifsn,
59187 {"AIC/AIFSN","wlan.ext_tag.mu_edca_parameter_set.aic_aifsn",
59188 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59189
59190 {&hf_ieee80211_he_muac_aifsn,
59191 {"AIFSN", "wlan.ext_tag.mu_edca_parameter_set.aifsn",
59192 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
59193 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59194
59195 {&hf_ieee80211_he_muac_acm,
59196 {"Admission Control Mandatory", "wlan.ext_tag.mu_edca_parameter_set.acm",
59197 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
59198 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59199
59200 {&hf_ieee80211_he_muac_aci,
59201 {"ACI", "wlan.ext_tag.mu_edca_parameter_set.aci",
59202 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
59203 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59204
59205 {&hf_ieee80211_he_muac_reserved,
59206 {"Reserved", "wlan.ext_tag.mu_edca_parameter_set.reserved",
59207 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
59208 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59209
59210 {&hf_ieee80211_he_mu_edca_timer,
59211 {"MU EDCA Timer","wlan.ext_tag.mu_edca_parameter_set.mu_edca_timer",
59212 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59213
59214 {&hf_ieee80211_he_muac_ecwmin_ecwmax,
59215 {"ECWmin/ECWmax","wlan.ext_tag.mu_edca_parameter_set.ecwmin_ecwmax",
59216 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59217
59218 {&hf_ieee80211_he_spatial_reuse_sr_control,
59219 {"SR Control", "wlan.ext_tag.spatial_reuse.sr_control",
59220 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59221
59222 {&hf_ieee80211_he_srp_disallowed,
59223 {"SRP Disallowed", "wlan.ext_tag.spatial_reuse.sr_control.srp_dis",
59224 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59225
59226 {&hf_ieee80211_he_non_srg_obss_pd_sr_disallowed,
59227 {"NON-SRG OBSS PD SR Disallowed", "wlan.ext_tag.spatial_reuse.sr_control.non_srg_obss_pd_sr_dis",
59228 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59229
59230 {&hf_ieee80211_he_non_srg_offset_present,
59231 {"Non-SRG Offset Present", "wlan.ext_tag.spatial_reuse.sr_control.non_srg_ofs_present",
59232 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59233
59234 {&hf_ieee80211_he_srg_information_present,
59235 {"SRG Information Present", "wlan.ext_tag.spatial_reuse.sr_control.srg_info_present",
59236 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59237
59238 {&hf_ieee80211_he_hesiga_spatial_reuse_value15_allowed,
59239 {"HESIGA Spatial Reuse value 15 allowed", "wlan.ext_tag.spatial_reuse.sr_control.hesiga_val_15_allowed",
59240 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59241
59242 {&hf_ieee80211_he_sr_control_reserved,
59243 {"Reserved", "wlan.ext_tag.spatial_reuse.sr_control.reserved",
59244 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59245
59246 {&hf_ieee80211_he_spatial_non_srg_obss_pd_max_offset,
59247 {"Non-SRG OBSS PD Max Offset", "wlan.ext_tag.spatial_reuse.non_srg_obss_pd_max_offset",
59248 FT_INT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59249
59250 {&hf_ieee80211_he_spatial_srg_obss_pd_min_offset,
59251 {"SRG OBSS PD Min Offset", "wlan.ext_tag.spatial_reuse.srg_obss_pd_min_offset",
59252 FT_INT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59253
59254 {&hf_ieee80211_he_spatial_srg_obss_pd_max_offset,
59255 {"SRG OBSS PD Max Offset", "wlan.ext_tag.spatial_reuse.srg_obss_pd_max_offset",
59256 FT_INT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59257
59258 {&hf_ieee80211_he_spatial_srg_bss_color_bitmap,
59259 {"SRG BSS Color Bitmap", "wlan.ext_tag.spatial_reuse.srg_bss_color_bitmap",
59260 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59261
59262 {&hf_ieee80211_he_spatial_srg_partial_bssid_bitmap,
59263 {"SRG Partial BSSID Bitmap", "wlan.ext_tag.spatial_reuse.srg_partial_bssid_bitmap",
59264 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59265
59266 {&hf_ieee80211_he_resource_request_buffer_thresh,
59267 {"Resource Request Buffer Threshold Exponent", "wlan.ext_tag.ndp_feedback.res_req_buf_thresh_exp",
59268 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59269
59270 {&hf_ieee80211_he_bss_color_change_new_color_info,
59271 {"New BSS Color Info", "wlan.ext_tag.bss_color_change.new_color_info",
59272 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59273
59274 {&hf_ieee80211_he_new_bss_color_info_color,
59275 {"New BSS Color", "wlan.ext_tag.bss_color_change.new_bss_color",
59276 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59277
59278 {&hf_ieee80211_he_new_bss_color_info_reserved,
59279 {"Reserved", "wlan.ext_tag.bss_color_change.new_color_reserved",
59280 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59281
59282 {&hf_ieee80211_he_bss_color_change_switch_countdown,
59283 {"BSS Color Switch Countdown", "wlan.ext_tag.bss_color_change.color_switch_countdown",
59284 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59285
59286 {&hf_ieee80211_he_ess_report_planned_ess,
59287 {"Planned ESS", "wlan.ext_tag.ess_report.ess_info.planned_ess",
59288 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59289
59290 {&hf_ieee80211_he_ess_report_edge_of_ess,
59291 {"Edge of ESS", "wlan.ext_tag.ess_report.ess_info.edge_of_ess",
59292 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59293
59294 {&hf_ieee80211_he_ess_report_info_field,
59295 {"ESS Information field", "wlan.ext_tag.ess_report.ess_info.field",
59296 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59297
59298 {&hf_ieee80211_he_ess_report_recommend_transition_thresh,
59299 {"Recommended BSS Transition Threshold", "wlan.ext_tag.ess_report.ess_info.thresh",
59300 FT_INT8, BASE_DEC, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59301
59302 {&hf_ieee80211_he_ops_duration,
59303 {"OPS Duration", "wlan.ext_tag.ops.ops_duration",
59304 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) }},
59305
59306 {&hf_ieee80211_he_uora_field,
59307 {"UL OFDMA-based Random Access Parameter SET", "wlan.ext_tag.uora_parameter_set.field",
59308 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59309
59310 {&hf_ieee80211_he_uora_eocwmin,
59311 {"EOCWmin", "wlan.ext_tag.uora_parameter_set.eocwmin",
59312 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59313
59314 {&hf_ieee80211_he_uora_owcwmax,
59315 {"EOCWmax", "wlan.ext_tag.uora_parameter_set.eocwmax",
59316 FT_UINT8, BASE_DEC, NULL((void*)0), 0x38, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59317
59318 {&hf_ieee80211_he_uora_reserved,
59319 {"Reserved", "wlan.ext_tag.uora_parameter_set.reserved",
59320 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59321
59322 {&hf_ieee80211_max_channel_switch_time,
59323 {"Max Channel Switch Time",
59324 "wlan.ext_tag.max_channel_switch_time.switch_time",
59325 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) }},
59326
59327 {&hf_ieee80211_oci_operating_class,
59328 {"Operating Class", "wlan.ext_tag.oci.operating_class",
59329 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59330
59331 {&hf_ieee80211_oci_primary_channel_number,
59332 {"Primary Channel Number", "wlan.ext_tag.oci.primary_channel_number",
59333 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59334
59335 {&hf_ieee80211_oci_frequency_segment_1,
59336 {"Frequency Segment 1 Channel Number",
59337 "wlan.ext_tag.oci.frequency_segment_1_channel_number",
59338 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59339
59340 {&hf_ieee80211_oci_oct_operating_class,
59341 {"OCT Operating Class", "wlan.ext_tag.oci.oct_operating_class",
59342 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59343
59344 {&hf_ieee80211_oci_oct_primary_channel_number,
59345 {"OCT Primary Channel Number",
59346 "wlan.ext_tag.oci.oct_primary_channel_number",
59347 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59348
59349 {&hf_ieee80211_oci_oct_frequency_segment_1,
59350 {"OCT Frequency Segment 1 Channel Number",
59351 "wlan.ext_tag.oci.oct_frequency_segment_1_channel_number",
59352 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59353
59354 {&hf_ieee80211_multiple_bssid_configuration_bssid_count,
59355 {"BSSID Count", "wlan.ext_tag.multiple_bssid_configuration.bssid_count",
59356 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59357
59358 {&hf_ieee80211_non_inheritance_element_id_list_length,
59359 {"Length", "wlan.ext_tag.non_inheritance.element_id_list.length",
59360 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59361
59362 {&hf_ieee80211_non_inheritance_element_id_list_element_id,
59363 {"Element ID", "wlan.ext_tag.non_inheritance.element_id_list.element_id",
59364 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59365
59366 {&hf_ieee80211_non_inheritance_element_id_ext_list_length,
59367 {"Length", "wlan.ext_tag.non_inheritance.element_id_ext_list.length",
59368 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59369
59370 {&hf_ieee80211_non_inheritance_element_id_ext_list_element_id_ext,
59371 {"Element ID Extension", "wlan.ext_tag.non_inheritance.element_id_ext_list.element_id_ext",
59372 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59373
59374 {&hf_ieee80211_multiple_bssid_configuration_full_set_rx_periodicity,
59375 {"Full Set Rx Periodicity", "wlan.ext_tag.multiple_bssid_configuration.full_set_rx_periodicity",
59376 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59377
59378 {&hf_ieee80211_known_bssid_bitmap,
59379 {"Bitmap", "wlan.ext_tag.known_bssid.bitmap",
59380 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59381
59382 {&hf_ieee80211_short_ssid,
59383 {"Short SSID", "wlan.ext_tag.short_ssid",
59384 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59385
59386 {&hf_ieee80211_rejected_groups_group,
59387 {"Rejected Finite Cyclic Group", "wlan.ext_tag.rejected_groups.group",
59388 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59389
59390 {&hf_ieee80211_ff_s1g_action,
59391 {"S1G Action", "wlan.s1g.action",
59392 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) }},
59393
59394 {&hf_ieee80211_ff_prot_s1g_action,
59395 {"Protected S1G Action", "wlan.s1g.prot_action",
59396 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) }},
59397
59398 {&hf_ieee80211_ff_s1g_timestamp,
59399 {"Timestamp", "wlan.s1g.timestamp",
59400 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59401
59402 {&hf_ieee80211_ff_s1g_change_sequence,
59403 {"Change Sequence", "wlan.s1g.change_sequence",
59404 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59405
59406 {&hf_ieee80211_ff_s1g_next_tbtt,
59407 {"Next TBTT", "wlan.s1g.next_tbtt",
59408 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59409
59410 {&hf_ieee80211_ff_s1g_compressed_ssid,
59411 {"Compressed SSID", "wlan.s1g.compressed_ssid",
59412 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59413
59414 {&hf_ieee80211_ff_s1g_access_network_options,
59415 {"Access Network Options", "wlan.s1g.access_network_options",
59416 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59417
59418 {&hf_ieee80211_s1g_sync_control,
59419 {"Sync Control", "wlan.s1g.sync_control",
59420 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59421
59422 {&hf_ieee80211_s1g_sync_control_uplink_sync_request,
59423 {"Uplink Sync Request", "wlan.s1g.sync_control.uplink_sync_request",
59424 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59425
59426 {&hf_ieee80211_s1g_sync_control_time_slot_protection_request,
59427 {"Time Slot Protection request",
59428 "wlan.s1g.sync_control.time_slot_protection_request",
59429 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59430
59431 {&hf_ieee80211_s1g_sync_control_reserved,
59432 {"Reserved", "wlan.s1g.sync_control.reserved",
59433 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59434
59435 {&hf_ieee80211_s1g_sector_id_index,
59436 {"Sector ID Index", "wlan.s1g.sector_id_index",
59437 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59438
59439 {&hf_ieee80211_s1g_sector_id_preferred_sector_id,
59440 {"Preferred Sector ID", "wlan.s1g.sector_id_index.preferred_sector_id",
59441 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59442
59443 {&hf_ieee80211_s1g_sector_id_snr,
59444 {"SNR", "wlan.s1g.sector_id_index.snr",
59445 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_sector_id_index_snr_custom)((const void *) (size_t) (s1g_sector_id_index_snr_custom)),
59446 0x00F8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59447
59448 {&hf_ieee80211_s1g_sector_id_receive_sector_bitmap,
59449 {"Receive Sector Bitmap", "wlan.s1g.sector_id_index.receive_sector_bitmap",
59450 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59451
59452 {&hf_ieee80211_s1g_twt_information_control,
59453 {"TWT Information Control", "wlan.s1g.twt_information.control",
59454 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59455
59456 {&hf_ieee80211_s1g_twt_next_twt_32,
59457 {"Next TWT", "wlan.s1g.twt_information.next_twt32",
59458 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59459
59460 {&hf_ieee80211_s1g_twt_next_twt_48,
59461 {"Next TWT", "wlan.s1g.twt_information.next_twt48",
59462 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59463
59464 {&hf_ieee80211_s1g_twt_next_twt_64,
59465 {"Next TWT", "wlan.s1g.twt_information.next_twt64",
59466 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59467
59468 {&hf_ieee80211_s1g_twt_flow_identifier,
59469 {"TWT Flow Identifier",
59470 "wlan.s1g.twt_information.control.twt_flow_identifier",
59471 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59472
59473 {&hf_ieee80211_s1g_twt_response_required,
59474 {"Response Requested",
59475 "wlan.s1g.twt_information.control.response_requested",
59476 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59477
59478 {&hf_ieee80211_s1g_twt_next_twt_request,
59479 {"Next TWT Request", "wlan.s1g.twt_information.control.next_twt_request",
59480 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59481
59482 {&hf_ieee80211_s1g_twt_next_twt_subfield_size,
59483 {"Next TWT Subfield Size",
59484 "wlan.s1g.twt_information.control.next_twt_subfield_size",
59485 FT_UINT8, BASE_HEX, NULL((void*)0), 0x60, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59486
59487 {&hf_ieee80211_s1g_twt_reserved,
59488 {"Reserved", "wlan.s1g.twt_information.control.reserved",
59489 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59490
59491 {&hf_ieee80211_s1g_update_edca_info,
59492 {"Update EDCA Info", "wlan.s1g.edca_param_set.update_edca_info",
59493 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59494
59495 {&hf_ieee80211_s1g_update_edca_override,
59496 {"Override", "wlan.s1g.edca_param_set.update_edca_info.override",
59497 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
59498 "Overrides the previously stored EDCAL parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59499
59500 {&hf_ieee80211_s1g_update_edca_ps_poll_aci,
59501 {"PS-Poll ACI", "wlan.s1g.edca_param_set.update_edca_info.pd_poll_aci",
59502 FT_UINT8, BASE_HEX, NULL((void*)0), 0x06, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59503
59504 {&hf_ieee80211_s1g_update_edca_raw_aci,
59505 {"RAW ACI", "wlan.s1g.edca_param_set.update_edca_info.raw_aci",
59506 FT_UINT8, BASE_HEX, NULL((void*)0), 0x18, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59507
59508 {&hf_ieee80211_s1g_update_edca_sta_type,
59509 {"STA Type", "wlan.s1g.edca_param_set.update_edca_info.sta_type",
59510 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) }},
59511
59512 {&hf_ieee80211_s1g_update_edca_reserved,
59513 {"Reserved", "wlan.s1g.edca_param_set.update_edca_info.reserved",
59514 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59515
59516 {&hf_ieee80211_twt_bcast_flow,
59517 {"TWT Flow", "wlan.twt.bcast_flow",
59518 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59519
59520 {&hf_ieee80211_twt_individual_flow,
59521 {"TWT Flow", "wlan.twt.individual_flow",
59522 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59523
59524 {&hf_ieee80211_twt_individual_flow_id,
59525 {"Individual TWT Flow Id", "wlan.twt.individual_flow_id",
59526 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59527
59528 {&hf_ieee80211_twt_individual_reserved,
59529 {"Reserved", "wlan.twt.individual_reserved",
59530 FT_UINT8, BASE_HEX, NULL((void*)0), 0x18, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59531
59532 {&hf_ieee80211_twt_bcast_id,
59533 {"Broadcast TWT Id", "wlan.twt.bcast_flow_id",
59534 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59535
59536 {&hf_ieee80211_twt_neg_type,
59537 {"TWT Negotiation type", "wlan.twt.neg_type",
59538 FT_UINT8, BASE_DEC, VALS(twt_neg_type_vals)((0 ? (const struct _value_string*)0 : ((twt_neg_type_vals)))
)
, 0x60,
59539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59540
59541 {&hf_ieee80211_twt_neg_type2_reserved1,
59542 {"Reserved", "wlan.twt.flow_id_reserved1",
59543 FT_UINT8, BASE_HEX, NULL((void*)0), 0x1f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59544
59545 {&hf_ieee80211_twt_neg_type2_reserved2,
59546 {"Reserved", "wlan.twt.flow_id_reserved2",
59547 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59548
59549 {&hf_ieee80211_twt_bcast_teardown_all,
59550 {"TWT Flow", "wlan.twt.bcast_flow",
59551 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59552
59553 {&hf_ieee80211_twt_bcast_twt_id_reserved,
59554 {"Reserved", "wlan.twt.bcast_flow.twt_id_reserved",
59555 FT_UINT8, BASE_HEX, NULL((void*)0), 0x1F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59556
59557 {&hf_ieee80211_twt_bcast_neg_type_reserved,
59558 {"Reserved", "wlan.twt.bcast_flow.negotiation_type_reserved",
59559 FT_UINT8, BASE_HEX, NULL((void*)0), 0x60, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59560
59561 {&hf_ieee80211_twt_bcast_teardown_all_twt,
59562 {"Teardown All TWT", "wlan.twt.bcast_flow.teardown_all_twt",
59563 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59564
59565 {&hf_ieee80211_tag_twt_control_field,
59566 {"Control Field", "wlan.twt.control_field",
59567 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59568
59569 {&hf_ieee80211_tag_twt_ndp_paging_indicator,
59570 {"NDP Paging Indicator", "wlan.twt.ndp_paging_indicator",
59571 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) }},
59572
59573 {&hf_ieee80211_tag_twt_responder_pm_mode,
59574 {"Responder PM Mode", "wlan.twt.resp_pm",
59575 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) }},
59576
59577 {&hf_ieee80211_tag_twt_neg_type,
59578 {"Negotiation type", "wlan.twt.neg_type",
59579 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) }},
59580
59581 {&hf_ieee80211_tag_twt_info_frame_disabled,
59582 {"TWT Information Frame Disabled", "wlan.twt.info_frame_disabled",
59583 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) }},
59584
59585 {&hf_ieee80211_tag_twt_wake_duration_unit,
59586 {"Wake Duration Unit", "wlan.twt.wake_duration_unit",
59587 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) }},
59588
59589 {&hf_ieee80211_tag_twt_link_id_bitmap_present,
59590 {"Link ID Bitmap Present", "wlan.twt.link_id_bitmap_present",
59591 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59592
59593 {&hf_ieee80211_tag_twt_aligned_twt,
59594 {"Aligned TWT", "wlan.twt.aligned_twt",
59595 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59596
59597 {&hf_ieee80211_tag_twt_req_type_field,
59598 {"Request Type", "wlan.twt.request_type",
59599 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59600
59601 {&hf_ieee80211_tag_twt_req_type_req,
59602 {"Requester", "wlan.twt.requester",
59603 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) }},
59604
59605 {&hf_ieee80211_tag_twt_req_type_setup_cmd,
59606 {"Setup Command", "wlan.twt.setup_cmd",
59607 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) }},
59608
59609 {&hf_ieee80211_tag_twt_req_type_trigger,
59610 {"Trigger", "wlan.twt.trigger",
59611 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) }},
59612
59613 {&hf_ieee80211_tag_twt_req_type_implicit,
59614 {"Implicit", "wlan.twt.implicit",
59615 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) }},
59616
59617 {&hf_ieee80211_tag_twt_req_type_flow_type,
59618 {"Flow type", "wlan.twt.flow_type",
59619 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) }},
59620
59621 {&hf_ieee80211_tag_twt_req_type_flow_id,
59622 {"Flow ID", "wlan.twt.flow_id",
59623 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0380, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59624
59625 {&hf_ieee80211_tag_twt_req_type_wake_int_exp,
59626 {"Wake Interval Exponent", "wlan.twt.wake_interval_exp",
59627 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7c00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59628
59629 {&hf_ieee80211_tag_twt_req_type_prot,
59630 {"Protection", "wlan.twt.prot",
59631 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59632
59633 {&hf_ieee80211_tag_twt_req_type_last_bcst_parm_set,
59634 {"Last Broadcast Parameter Set",
59635 "wlan.twt.last_broadcast_parameter_set",
59636 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59637
59638 {&hf_ieee80211_tag_twt_req_type_bcst_twt_recom,
59639 {"Broadcast TWT Recommendation", "wlan.twt.broadcast_twt_recommendation",
59640 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0380, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59641
59642 {&hf_ieee80211_tag_twt_req_type_aligned,
59643 {"Aligned", "wlan.twt.aligned",
59644 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59645
59646 {&hf_ieee80211_tag_twt_ndp_paging_field,
59647 {"NDP Paging", "wlan.twt.ndp_paging",
59648 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59649
59650 {&hf_ieee80211_tag_twt_ndp_paging_p_id,
59651 {"P-ID", "wlan.twt.ndp_paging.p_id",
59652 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59653
59654 {&hf_ieee80211_tag_twt_ndp_max_ndp_paging_period,
59655 {"Max NDP Paging Period", "wlan.twt.ndp_paging.max_ndp_paging_period",
59656 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0001FE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59657
59658 {&hf_ieee80211_tag_twt_ndp_partial_tsf_offset,
59659 {"Partial TSF Offset", "wlan.twt.ndp_paging.partial_tsf_offset",
59660 FT_UINT32, BASE_DEC, NULL((void*)0), 0x001E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59661
59662 {&hf_ieee80211_tag_twt_ndp_action,
59663 {"Action", "wlan.twt.ndp_paging.action",
59664 FT_UINT32, BASE_DEC, VALS(twt_ndp_action_vals)((0 ? (const struct _value_string*)0 : ((twt_ndp_action_vals)
)))
,
59665 0x00E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59666
59667 {&hf_ieee80211_tag_twt_ndp_min_sleep_duration,
59668 {"Min Sleep Duration", "wlan.twt.ndp_paging.min_sleep_duration",
59669 FT_UINT32, BASE_DEC, NULL((void*)0), 0x3C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59670
59671 {&hf_ieee80211_tag_twt_ndp_reserved,
59672 {"Reserved", "wlan.twt.ndp_paging.reserved",
59673 FT_UINT32, BASE_HEX, NULL((void*)0), 0xC0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59674
59675 {&hf_ieee80211_tag_twt_link_id_bitmap,
59676 {"Link ID Bitmap", "wlan.twt.link_id_bitmap",
59677 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59678
59679 {&hf_ieee80211_tag_twt_aligned_twt_link_bitmap,
59680 {"Aligned TWT Link Bitmap", "wlan.twt.aligned_twt_link_bitmap",
59681 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59682
59683 {&hf_ieee80211_tag_twt_broadcast_info,
59684 {"Broadcast TWT Info", "wlan.twt.broadcast_twt_info",
59685 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59686
59687 {&hf_ieee80211_tag_twt_bcast_info_persistence,
59688 {"Broadcast TWT Persistence",
59689 "wlan.twt.bcast_twt_info.broadcast_twt_persistence",
59690 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59691
59692 {&hf_ieee80211_tag_twt_bcast_info_id,
59693 {"Broadcast TWT ID", "wlan.twt.bcast_twt_info.broadcast_twt_id",
59694 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00F8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59695
59696 {&hf_ieee80211_tag_twt_bcast_info_rtwt_sche_info,
59697 {"Restricted TWT Schedule Info", "wlan.twt.bcast_twt_info.rtwt_schedule_info",
59698 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0006, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59699
59700 {&hf_ieee80211_tag_twt_bcast_info_rtwt_traffic_present,
59701 {"Restricted TWT Traffic Info Present", "wlan.twt.bcast_twt_info.rtwt_traffic_info_present",
59702 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59703
59704 {&hf_ieee80211_tag_twt_traffic_info_control,
59705 {"Traffic Info Control", "wlan.twt.traffic_info.control",
59706 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59707
59708 {&hf_ieee80211_tag_twt_traffic_info_dl_bitmap_valid,
59709 {"DL TID Bitmap Valid", "wlan.twt.traffic_info.dl_tid_bitmap_valid",
59710 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59711
59712 {&hf_ieee80211_tag_twt_traffic_info_ul_bitmap_valid,
59713 {"UL TID Bitmap Valid", "wlan.twt.traffic_info.ul_tid_bitmap_valid",
59714 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59715
59716 {&hf_ieee80211_tag_twt_traffic_info_reserved,
59717 {"Reserved", "wlan.twt.traffic_info.reserved",
59718 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59719
59720 {&hf_ieee80211_tag_twt_traffic_info_rtwt_dl_bitmap,
59721 {"Restricted TWT DL TID Bitmap", "wlan.twt.traffic_info.dl_tid_bitmap",
59722 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59723
59724 {&hf_ieee80211_tag_twt_traffic_info_rtwt_ul_bitmap,
59725 {"Restricted TWT UL TID Bitmap", "wlan.twt.traffic_info.ul_tid_bitmap",
59726 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59727
59728 {&hf_ieee80211_tag_twt_target_wake_time,
59729 {"Target Wake Time", "wlan.twt.target_wake_time",
59730 FT_UINT64, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59731
59732 {&hf_ieee80211_tag_twt_target_wake_time_short,
59733 {"Target Wake Time", "wlan.twt.target_wake_time_short",
59734 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59735
59736 {&hf_ieee80211_tag_twt_nom_min_twt_wake_dur,
59737 {"Nominal Minimum TWT Wake duration", "wlan.twt.nom_min_twt_wake_duration",
59738 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59739
59740 {&hf_ieee80211_tag_twt_wake_interval_mantissa,
59741 {"TWT Wake Interval Mantissa", "wlan.twt.wake_interval_mantissa",
59742 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59743
59744 {&hf_ieee80211_tag_twt_channel,
59745 {"TWT Channel", "wlan.twt.channel",
59746 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59747
59748 {&hf_ieee80211_tag_rsnx,
59749 {"RSNX", "wlan.rsnx",
59750 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59751
59752 {&hf_ieee80211_wfa_ie_transition_disable_bitmap,
59753 {"Transition Disable Bitmap", "wlan.transition_disable_bitmap",
59754 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59755
59756 {&hf_ieee80211_wfa_ie_transition_disable_wpa3_personal,
59757 {"WPA3-Personal", "wlan.transition_disable.wpa3_personal",
59758 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) }},
59759
59760 {&hf_ieee80211_wfa_ie_transition_disable_sae_pk,
59761 {"SAE-PK", "wlan.transition_disable.sae_pk",
59762 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) }},
59763
59764 {&hf_ieee80211_wfa_ie_transition_disable_wpa3_enterprise,
59765 {"WPA3-Enterprise", "wlan.transition_disable.wpa3_enterprise",
59766 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) }},
59767
59768 {&hf_ieee80211_wfa_ie_transition_disable_enhanced_open,
59769 {"Wi-Fi Enhanced Open", "wlan.transition_disable.enhanced_open",
59770 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) }},
59771
59772 {&hf_ieee80211_wfa_ie_transition_disable_reserved_b4thru7,
59773 {"Reserved", "wlan.transition_disable.reserved.b4thru7",
59774 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) }},
59775
59776 {&hf_ieee80211_wfa_ie_transition_disable_reserved,
59777 {"Reserved", "wlan.transition_disable.reserved",
59778 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59779
59780 {&hf_ieee80211_tag_rsnx_length,
59781 {"RSNX Length", "wlan.rsnx.length",
59782 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59783
59784 {&hf_ieee80211_tag_rsnx_protected_twt_operations_support,
59785 {"Protected TWT Operations Support", "wlan.rsnx.protected_twt_operations_support",
59786 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59787
59788 {&hf_ieee80211_tag_rsnx_sae_hash_to_element,
59789 {"SAE Hash to element", "wlan.rsnx.sae_hash_to_element",
59790 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59791
59792 {&hf_ieee80211_tag_rsnx_sae_pk,
59793 {"SAE-PK", "wlan.rsnx.sae_pk",
59794 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59795
59796 {&hf_ieee80211_tag_rsnx_protected_wur_frame_support,
59797 {"Protected WUR Frame Support", "wlan.rsnx.protected_wur_frame_support",
59798 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59799
59800 {&hf_ieee80211_tag_rsnx_secure_ltf_support,
59801 {"Secure LTF Support", "wlan.rsnx.secure_ltf_support",
59802 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) }},
59803
59804 {&hf_ieee80211_tag_rsnx_secure_rtt_supported,
59805 {"Secure RTT Supported", "wlan.rsnx.secure_rtt_supported",
59806 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) }},
59807
59808 {&hf_ieee80211_tag_rsnx_urnm_mfpr_x20,
59809 {"URNM-MFPR-X20", "wlan.rsnx.urnm_mfpr_x20",
59810 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59811
59812 {&hf_ieee80211_tag_rsnx_protected_announce_support,
59813 {"Protected Announce Support", "wlan.rsnx.protected_announce_support",
59814 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59815
59816 {&hf_ieee80211_tag_rsnx_pbac,
59817 {"PBAC", "wlan.rsnx.pbac",
59818 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59819
59820 {&hf_ieee80211_tag_rsnx_extended_s1g_action_protection,
59821 {"Extended S1G Action Protection", "wlan.rsnx.extended_s1g_action_protection",
59822 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59823
59824 {&hf_ieee80211_tag_rsnx_spp_amsdu_capable,
59825 {"SPP AMSDU Capable", "wlan.rsnx.spp_amsdu_capable",
59826 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59827
59828 {&hf_ieee80211_tag_rsnx_urnm_mfpr,
59829 {"URNM-MFPR", "wlan.rsnx.urnm_mfpr",
59830 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59831
59832 {&hf_ieee80211_tag_rsnx_reserved,
59833 {"Reserved", "wlan.rsnx.reserved",
59834 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59835
59836 {&hf_ieee80211_owe_dh_parameter_group,
59837 {"Group", "wlan.ext_tag.owe_dh_parameter.group",
59838 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) }},
59839
59840 {&hf_ieee80211_owe_dh_parameter_public_key,
59841 {"Public Key", "wlan.ext_tag.owe_dh_parameter.public_key",
59842 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59843
59844 {&hf_ieee80211_tag_pasn_parameters_control,
59845 {"Control", "wlan.etag.pasn_params.control",
59846 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59847
59848 {&hf_ieee80211_tag_pasn_params_comeback_info_present,
59849 {"Comeback Info Present", "wlan.etag.pasn_params.comeback_info_present",
59850 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59851
59852 {&hf_ieee80211_tag_pasn_params_group_and_key_present,
59853 {"Group and Key Present", "wlan.etag.pasn_params.group_and_key_present",
59854 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59855
59856 {&hf_ieee80211_tag_pasn_parameters_reserved,
59857 {"Reserved", "wlan.etag.pasn_parameters.reserved",
59858 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59859
59860 {&hf_ieee80211_tag_pasn_parameters_wrapped_fmt,
59861 {"Wrapped Data Format", "wlan.etag.pasn_parameters.wrapped_data_format",
59862 FT_UINT8, BASE_HEX|BASE_RANGE_STRING0x00000100, RVALS(wrapped_data_fmt_rvals)((0 ? (const struct _range_string*)0 : ((wrapped_data_fmt_rvals
))))
,
59863 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59864
59865 {&hf_ieee80211_tag_pasn_comeback_after,
59866 {"Comeback After", "wlan.etag.pasn_parameters.comeback_after",
59867 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) }},
59868
59869 {&hf_ieee80211_tag_pasn_cookie_length,
59870 {"Cookie length", "wlan.etag.pasn_parameters.cookie_length",
59871 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59872
59873 {&hf_ieee80211_tag_pasn_cookie,
59874 {"Cookie", "wlan.etag.pasn_parameters.cookie",
59875 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59876
59877 {&hf_ieee80211_tag_pasn_finite_cyclic_group_id,
59878 {"Finite Cyclic Group ID",
59879 "wlan.etag.pasn_parameters.finite_cyclic_group_id",
59880 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59881
59882 {&hf_ieee80211_tag_pasn_ephemeral_public_key_len,
59883 {"Ephemeral Public Key Length",
59884 "wlan.etag.pasn_parameters.ephemeral_public_key_len",
59885 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59886
59887 {&hf_ieee80211_tag_pasn_ephemeral_public_key,
59888 {"Ephemeral Public Key",
59889 "wlan.etag.pasn_parameters.ephemeral_public_key",
59890 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59891
59892 {&hf_ieee80211_pasn_auth1_frame_len,
59893 {"Auth Frame 1 Length", "wlan.pasn_wrapped_data.auth_frame_1_len",
59894 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59895
59896 {&hf_ieee80211_pasn_auth2_frame_len,
59897 {"Auth Frame 2 Length", "wlan.pasn_wrapped_data.auth_frame_2_len",
59898 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59899
59900 {&hf_ieee80211_eht_eml_control_field,
59901 {"EML Control Field", "wlan.eht.eml_control",
59902 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59903
59904 {&hf_ieee80211_eht_eml_control_emlsr_mode,
59905 {"EMLSR Mode", "wlan.eht.eml_control.emlsr_mode",
59906 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59907
59908 {&hf_ieee80211_eht_eml_control_emlmr_mode,
59909 {"EMLMR Mode", "wlan.eht.eml_control.emlmr_mode",
59910 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59911
59912 {&hf_ieee80211_eht_eml_control_emlsr_para_update_control,
59913 {"EMLSR Parameter Update Control", "wlan.eht.eml_control.emlsr_para_update_control",
59914 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59915
59916 {&hf_ieee80211_eht_eml_control_device_coexist_activities,
59917 {"In-Device Coexistence Activities",
59918 "wlan.eht.eml_control.in_device_coexist_activities",
59919 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59920
59921 {&hf_ieee80211_eht_eml_control_reserved,
59922 {"Reserved", "wlan.eht.eml_control.reserved",
59923 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59924
59925 {&hf_ieee80211_eht_eml_control_link_bitmap,
59926 {"Link Bitmap", "wlan.eht.eml_control.link_bitmap",
59927 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59928
59929 {&hf_ieee80211_eht_eml_control_link_enable_id,
59930 {"Enable Link ID",
59931 "wlan.eht.eml_control.link_map.enable_id",
59932 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59933
59934 {&hf_ieee80211_eht_eml_control_mcs_map_count,
59935 {"MCS Map Count Control", "wlan.eht.eml_control.mcs_map_count",
59936 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59937
59938 {&hf_ieee80211_eht_eml_control_mcs_map_count_bw,
59939 {"MCS Map Count Control BW", "wlan.eht.eml_control.mcs_map_count.bw",
59940 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) }},
59941
59942 {&hf_ieee80211_eht_eml_control_mcs_map_count_reserved,
59943 {"Reserved", "wlan.eht.eml_control.mcs_map_count.reserved",
59944 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59945
59946 {&hf_ieee80211_eht_emlsr_para_update,
59947 {"EMLSR Parameter Update", "wlan.eht.emlsr_parameter_update",
59948 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59949
59950 {&hf_ieee80211_eht_emlsr_para_update_padding_delay,
59951 {"EMLSR Padding Delay", "wlan.eht.emlsr_parameter_update.padding_delay",
59952 FT_UINT8, BASE_HEX, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59953
59954 {&hf_ieee80211_eht_emlsr_para_update_tran_delay,
59955 {"EMLSR Transition Delay", "wlan.eht.emlsr_parameter_update.transition_delay",
59956 FT_UINT8, BASE_HEX, NULL((void*)0), 0x38, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59957
59958 {&hf_ieee80211_eht_emlsr_para_update_reserved,
59959 {"Reserved", "wlan.eht.emlsr_parameter_update.reserved",
59960 FT_UINT8, BASE_HEX, NULL((void*)0), 0xc0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59961
59962 {&hf_ieee80211_eht_multi_link_control,
59963 {"Multi-Link Control", "wlan.eht.multi_link.control",
59964 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59965
59966 {&hf_ieee80211_eht_multi_link_control_type,
59967 {"Type", "wlan.eht.multi_link.control.type",
59968 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) }},
59969
59970 {&hf_ieee80211_eht_multi_link_control_reserved,
59971 {"Reserved", "wlan.eht.multi_link.control.reserved",
59972 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59973
59974 {&hf_ieee80211_eht_multi_link_control_link_id_present,
59975 {"Link ID Info Present",
59976 "wlan.eht.multi_link.control.basic.link_id_info_present",
59977 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59978
59979 {&hf_ieee80211_eht_multi_link_control_bss_parms_ch_count,
59980 {"BSS Parameters Change Count Present",
59981 "wlan.eht.multi_link.control.basic.bss_parameters_change_count_present",
59982 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59983
59984 {&hf_ieee80211_eht_multi_link_control_medium_sync_delay,
59985 {"Medium Synchronization Delay Info Present",
59986 "wlan.eht.multi_link.control.basic.medium_sync_delayinfo_present",
59987 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59988
59989 {&hf_ieee80211_eht_multi_link_control_eml_capa,
59990 {"EML Capabilities Present",
59991 "wlan.eht.multi_link.control.basic.eml_capabilities_present",
59992 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59993
59994 {&hf_ieee80211_eht_multi_link_control_mld_capa,
59995 {"MLD Capabilities Present",
59996 "wlan.eht.multi_link.control.basic.mld_capabilities_present",
59997 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59998
59999 {&hf_ieee80211_eht_multi_link_control_basic_mld_id_present,
60000 {"AP MLD ID Present",
60001 "wlan.eht.multi_link.control.basic.mld_id_present",
60002 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60003
60004 {&hf_ieee80211_eht_multi_link_control_ext_mld_capa,
60005 {"Extended MLD Capabilities and Operations Present",
60006 "wlan.eht.multi_link.control.basic.ext_mld_capabilities_present",
60007 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60008
60009 {&hf_ieee80211_eht_multi_link_control_bitmap_reserved,
60010 {"Reserved", "wlan.eht.multi_link.control.basic.reserved",
60011 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60012
60013 {&hf_ieee80211_eht_multi_link_control_probe_mld_id_present,
60014 {"AP MLD ID Present",
60015 "wlan.eht.multi_link.control.probe.mld_id_present",
60016 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60017
60018 {&hf_ieee80211_eht_multi_link_control_probe_mld_mac_addr_present,
60019 {"MLD MAC Address Present",
60020 "wlan.eht.multi_link.control.probe.mld_mac_addr_present",
60021 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60022
60023 {&hf_ieee80211_eht_multi_link_control_probe_reserved,
60024 {"Reserved", "wlan.eht.multi_link.control.probe.reserved",
60025 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60026
60027 {&hf_ieee80211_eht_multi_link_control_tdls_reserved,
60028 {"Reserved", "wlan.eht.multi_link.control.tdls.reserved",
60029 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60030
60031 {&hf_ieee80211_eht_multi_link_control_prio_access_reserved,
60032 {"Reserved", "wlan.eht.multi_link.control.prio_access.reserved",
60033 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60034
60035 {&hf_ieee80211_eht_multi_link_control_reconfig_mld_mac,
60036 {"MLD MAC Address Present",
60037 "wlan.eht.multi_link.control.reconfig.mld_mac_addr_present",
60038 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60039
60040 {&hf_ieee80211_eht_multi_link_control_reconfig_eml_capa,
60041 {"EML Capabilities Present",
60042 "wlan.eht.multi_link.control.reconfig.eml_capabilities_present",
60043 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60044
60045 {&hf_ieee80211_eht_multi_link_control_reconfig_mld_capa_oper,
60046 {"MLD Capabilities And Operations Present",
60047 "wlan.eht.multi_link.control.reconfig.mld_capabilities_present",
60048 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60049
60050 {&hf_ieee80211_eht_multi_link_control_reconfig_ext_mld_capa_oper,
60051 {"Extended MLD Capabilities And Operations Present",
60052 "wlan.eht.multi_link.control.reconfig.ext_mld_capa_oper_present",
60053 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60054
60055 {&hf_ieee80211_eht_multi_link_control_reconfig_reserved,
60056 {"Reserved",
60057 "wlan.eht.multi_link.control.reconfig.reserved",
60058 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60059
60060 {&hf_ieee80211_eht_common_field_length,
60061 {"Common Info Length", "wlan.eht.multi_link.common_info.length",
60062 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60063
60064 {&hf_ieee80211_eht_common_field_mld_mac,
60065 {"MLD MAC Address", "wlan.eht.multi_link.common_info.mld_mac_address",
60066 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60067
60068 {&hf_ieee80211_eht_common_field_link_id_field,
60069 {"Link ID subfield", "wlan.eht.multi_link.common_info.link_id_subfield",
60070 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60071
60072 {&hf_ieee80211_eht_common_info_link_id,
60073 {"Link ID", "wlan.eht.multi_link.common_info.link_id_subfield.link_id",
60074 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60075
60076 {&hf_ieee80211_eht_common_info_link_id_reserved,
60077 {"Reserved", "wlan.eht.multi_link.common_info.link_id_subfield.reserved",
60078 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60079
60080 {&hf_ieee80211_eht_common_field_bss_param_change_count,
60081 {"BSS Parameters Change Count",
60082 "wlan.eht.multi_link.common_info.bss_parameters_change_count",
60083 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60084
60085 {&hf_ieee80211_eht_common_field_medium_sync_field,
60086 {"Medium Sync Field", "wlan.eht.multi_link.common_info.medium_sync_field",
60087 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60088
60089 {&hf_ieee80211_eht_common_info_medium_sync_duration,
60090 {"Medium Synchronization Duration",
60091 "wlan.eht.multi_link.common_info.medium_sync.sync_duration",
60092 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60093
60094 {&hf_ieee80211_eht_common_info_medium_sync_threshold,
60095 {"Medium Synchronization OFDM ED Threshold",
60096 "wlan.eht.multi_link.common_info.medium_sync.ofdm_ed_threshold",
60097 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60098
60099 {&hf_ieee80211_eht_common_info_medium_sync_max_txops,
60100 {"Medium Synchronization Maximum Number of TXOPs",
60101 "wlan.eht.multi_link.common_info.medium_sync.max_number_of_txops",
60102 FT_UINT16, BASE_DEC, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60103
60104 {&hf_ieee80211_eht_common_field_eml_capabilities,
60105 {"EML Capabilities", "wlan.eht.multi_link.common_info.eml_capabilities",
60106 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60107
60108 {&hf_ieee80211_eht_common_info_eml_capa_emlsr_support,
60109 {"EMLSR Support",
60110 "wlan.eht.multi_link.common_info.eml_capabilities.emlsr_support",
60111 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60112
60113 {&hf_ieee80211_eht_common_info_eml_capa_emlsr_padding_delay,
60114 {"EMLSR Padding Delay",
60115 "wlan.eht.multi_link.common_info.eml_capabilities.emlsr_padding_delay",
60116 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60117
60118 {&hf_ieee80211_eht_common_info_eml_capa_emlsr_transition_delay,
60119 {"EMLSR Transition Delay",
60120 "wlan.eht.multi_link.common_info.eml_capabilities.emlsr_transition_delay",
60121 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0070, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60122
60123 {&hf_ieee80211_eht_common_info_eml_capa_emlmr_support,
60124 {"EMLMR Support",
60125 "wlan.eht.multi_link.common_info.eml_capabilities.emlmr_support",
60126 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60127
60128 {&hf_ieee80211_eht_common_info_eml_capa_emlmr_delay,
60129 {"EMLMR Delay",
60130 "wlan.eht.multi_link.common_info.eml_capabilities.emlmr_delay",
60131 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0700, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60132
60133 {&hf_ieee80211_eht_common_info_eml_capa_transition_timeout,
60134 {"Transition Timeout",
60135 "wlan.eht.multi_link.common_info.eml_capabilities.transition_timeout",
60136 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60137
60138 {&hf_ieee80211_eht_common_info_eml_capa_reserved,
60139 {"Reserved",
60140 "wlan.eht.multi_link.common_info.eml_capabilities.capa_reserved",
60141 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60142
60143 {&hf_ieee80211_eht_common_field_mld_capabilities,
60144 {"MLD Capabilities", "wlan.eht.multi_link.common_info.mld_capabilities",
60145 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60146
60147 {&hf_ieee80211_eht_common_info_mld_max_simul_links,
60148 {"Maximum Number of Simultaneous Links",
60149 "wlan.eht.multi_link.common_info.mld_capabilities.max_simultaneous_links",
60150 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60151
60152 {&hf_ieee80211_eht_common_info_mld_srs_support,
60153 {"SRS Support",
60154 "wlan.eht.multi_link.common_info.mld_capabilities.srs_support",
60155 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60156
60157 {&hf_ieee80211_eht_common_info_mld_tid_to_link_map_neg,
60158 {"TID-To-Link Mapping Negotiation Support",
60159 "wlan.eht.multi_link.common_info.mld_capabilities.tid_to_link_neg_sup",
60160 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0060, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60161
60162 {&hf_ieee80211_eht_common_info_mld_freq_sep_for_str,
60163 {"Frequency Separation For STR/AP MLD Type Indication",
60164 "wlan.eht.multi_link.common_info.mld_capabilities.freq_sep_for_str",
60165 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0F80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60166
60167 {&hf_ieee80211_eht_common_info_mld_aar_support,
60168 {"AAR Support",
60169 "wlan.eht.multi_link.common_info.mld_capabilities.aar_support",
60170 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60171
60172 {&hf_ieee80211_eht_common_info_mld_link_reconf_op_support,
60173 {"Link Reconfiguration Operation Support",
60174 "wlan.eht.multi_link.common_info.mld_capabilities.link_reconfig_op_support",
60175 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60176
60177 {&hf_ieee80211_eht_common_info_mld_aligned_twt_support,
60178 {"Aligned TWT Support",
60179 "wlan.eht.multi_link.common_info.mld_capabilities.aligned_twt_support",
60180 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60181
60182 {&hf_ieee80211_eht_common_info_mld_reserved,
60183 {"Reserved", "wlan.eht.multi_link.common_info.mld_capabilities.reserved",
60184 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60185
60186 {&hf_ieee80211_eht_common_field_ap_mld_mac,
60187 {"AP MLD MAC Address",
60188 "wlan.eht.multi_link.common_info.ap_mld_mac_address",
60189 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60190
60191 {&hf_ieee80211_eht_common_field_mld_id,
60192 {"AP MLD ID", "wlan.eht.multi_link.common_info.mld_id",
60193 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60194
60195 {&hf_ieee80211_eht_common_field_ext_mld_capabilities,
60196 {"Extended MLD Capabilities and Operations",
60197 "wlan.eht.multi_link.common_info.ext_mld_capabilities",
60198 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60199
60200 {&hf_ieee80211_eht_common_info_ext_mld_op_update_support,
60201 {"Operation Parameter Update Support",
60202 "wlan.eht.multi_link.common_info.ext_mld_capabilities.op_param_update_support",
60203 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60204
60205 {&hf_ieee80211_eht_common_info_ext_mld_max_simul_links,
60206 {"Recommended Max Simultaneous Links",
60207 "wlan.eht.multi_link.common_info.ext_mld_capabilities.max_simultaneous_links",
60208 FT_UINT16, BASE_DEC, NULL((void*)0), 0x001E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60209
60210 {&hf_ieee80211_eht_common_info_ext_mld_nstr_status_support,
60211 {"NSTR Status Update Support",
60212 "wlan.eht.multi_link.common_info.ext_mld_capabilities.nstr_status_update_support",
60213 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60214
60215 {&hf_ieee80211_eht_common_info_ext_mld_emlsr_enable_one_link_support,
60216 {"EMLSR Enablement On One Link Support",
60217 "wlan.eht.multi_link.common_info.ext_mld_capabilities.emlsr_enable_one_link_support",
60218 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60219
60220 {&hf_ieee80211_eht_common_info_ext_mld_btm_mld_recom_aps_support,
60221 {"BTM MLD Recommendation For Multiple APs Support",
60222 "wlan.eht.multi_link.common_info.ext_mld_capabilities.btm_mld_recom_multiple_aps_support",
60223 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60224
60225 {&hf_ieee80211_eht_common_info_ext_mld_reserved,
60226 {"Reserved", "wlan.eht.multi_link.common_info.ext_mld_capabilities.reserved",
60227 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60228
60229 {&hf_ieee80211_eht_profile_sta_control,
60230 {"STA Control", "wlan.eht.multi_link.sta_profile.sta_control",
60231 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60232
60233 {&hf_ieee80211_eht_multi_link_subelt_tag,
60234 {"Subelement ID", "wlan.eht.multi_link.sta_profile.subelt_id",
60235 FT_UINT8, BASE_HEX | BASE_RANGE_STRING0x00000100, RVALS(multi_link_sub_elt_string)((0 ? (const struct _range_string*)0 : ((multi_link_sub_elt_string
))))
,
60236 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60237
60238 {&hf_ieee80211_eht_multi_link_subelt_len,
60239 {"Subelement Length", "wlan.eht.multi_link.sta_profile.subelt_len",
60240 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60241
60242 {&hf_ieee80211_eht_multi_link_type_0_link_count,
60243 {"Basic STA Profile Count", "wlan.eht.multi_link.type_0.sta_profile_count",
60244 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60245
60246 {&hf_ieee80211_eht_multi_link_type_1_link_count,
60247 {"Probe Request STA Profile Count", "wlan.eht.multi_link.type_1.sta_profile_count",
60248 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60249
60250 {&hf_ieee80211_eht_multi_link_type_2_link_count,
60251 {"Reconfiguration STA Profile Count", "wlan.eht.multi_link.type_2.sta_profile_count",
60252 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60253
60254 {&hf_ieee80211_eht_multi_link_type_3_link_count,
60255 {"TDLS STA Profile Count", "wlan.eht.multi_link.type_3.sta_profile_count",
60256 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60257
60258 {&hf_ieee80211_eht_multi_link_type_4_link_count,
60259 {"Priority Access STA Profile Count", "wlan.eht.multi_link.type_4.sta_profile_count",
60260 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60261
60262 {&hf_ieee80211_eht_multi_link_link_id_list,
60263 {"STA Profiles LinkIds", "wlan.eht.multi_link.sta_profile_id_list",
60264 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60265
60266 {&hf_ieee80211_eht_profile_link_id,
60267 {"Link ID", "wlan.eht.multi_link.sta_profile.sta_control.link_id",
60268 FT_UINT16, BASE_HEX, NULL((void*)0), STA_CTRL_LINK_ID0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60269
60270 {&hf_ieee80211_eht_profile_complete_profile,
60271 {"Complete Profile",
60272 "wlan.eht.multi_link.sta_profile.sta_control.complete_profile",
60273 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_COMPLETE_PROFILE0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60274
60275 {&hf_ieee80211_eht_profile_mac_address_present,
60276 {"MAC Address Present",
60277 "wlan.eht.multi_link.sta_profile.sta_control.mac_address_present",
60278 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_MAC_ADDR_PRESENT0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60279
60280 {&hf_ieee80211_eht_profile_beacon_interval_present,
60281 {"Beacon Interval Present",
60282 "wlan.eht.multi_link.sta_profile.sta_control.beacon_interval_present",
60283 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_BEACON_INT_PRESENT0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60284
60285 {&hf_ieee80211_eht_profile_tsf_offset_present,
60286 {"TSF Offset Present",
60287 "wlan.eht.multi_link.sta_profile.sta_control.tsf_offset_present",
60288 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_TSF_OFFSET_PRESENT0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60289
60290 {&hf_ieee80211_eht_profile_dtim_info_present,
60291 {"DTIM Info Present",
60292 "wlan.eht.multi_link.sta_profile.sta_control.dtim_info_present",
60293 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_DTIM_INFO_PRESENT0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60294
60295 {&hf_ieee80211_eht_profile_nstr_link_pair_present,
60296 {"NSTR Link Pair Present",
60297 "wlan.eht.multi_link.sta_profile.sta_control.nstr_link_pair_present",
60298 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) }},
60299
60300 {&hf_ieee80211_eht_profile_nstr_bitmap_size,
60301 {"NSTR Bitmap Size",
60302 "wlan.eht.multi_link.sta_profile.sta_control.nstr_bitmap_size",
60303 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) }},
60304
60305 {&hf_ieee80211_eht_profile_bss_params_change_count_present,
60306 {"BSS Parameters Change Count Present",
60307 "wlan.eht.multi_link.sta_profile.sta_control.bss_params_change_count_present",
60308 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) }},
60309
60310 {&hf_ieee80211_eht_profile_reserved,
60311 {"Reserved", "wlan.eht.multi_link.sta_profile.sta_control.reserved",
60312 FT_UINT16, BASE_HEX, NULL((void*)0), STA_CTRL_RESERVED0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60313
60314 {&hf_ieee80211_eht_profile_probe_reserved,
60315 {"Reserved", "wlan.eht.multi_link.sta_profile.sta_control.probe_reserved",
60316 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60317
60318 {&hf_ieee80211_eht_profile_removal_timer_present,
60319 {"AP Removal Timer Present",
60320 "wlan.eht.multi_link.sta_profile.sta_control.ap_removal_timer_present",
60321 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60322
60323 {&hf_ieee80211_eht_profile_reconfig_operation_type,
60324 {"Reconfiguration Operation Type",
60325 "wlan.eht.multi_link.sta_profile.sta_control.reconfig_operation_type",
60326 FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(eht_reconfig_op_type_rvals)((0 ? (const struct _range_string*)0 : ((eht_reconfig_op_type_rvals
))))
,
60327 0x0780, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60328
60329 {&hf_ieee80211_eht_profile_operation_para_present,
60330 {"Operation Parameters Present",
60331 "wlan.eht.multi_link.sta_profile.sta_control.operation_parameters_present",
60332 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60333
60334 {&hf_ieee80211_eht_profile_reconfig_nstr_bitmap_size,
60335 {"NSTR Bitmap Size",
60336 "wlan.eht.multi_link.sta_profile.sta_control.reconfig_nstr_bitmap_size",
60337 FT_UINT16, BASE_DEC, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60338
60339 {&hf_ieee80211_eht_profile_reconfig_nstr_bitmap_present,
60340 {"NSTR Indication Bitmap Present",
60341 "wlan.eht.multi_link.sta_control.reconfig_nstr_bitmap_present",
60342 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60343
60344 {&hf_ieee80211_eht_profile_reconfig_reserved,
60345 {"Reserved", "wlan.eht.multi_link.sta_profile.sta_control.reconfig_reserved",
60346 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60347
60348 {&hf_ieee80211_eht_profile_prio_acc_reserved,
60349 {"Reserved",
60350 "wlan.eht.multi_link.sta_profile.sta_control.priority_access_reserved",
60351 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60352
60353 {&hf_ieee80211_eht_sta_profile_info_len,
60354 {"STA Info Length",
60355 "wlan.eht.multi_link.sta_profile.sta_info.len",
60356 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60357
60358 {&hf_ieee80211_eht_sta_profile_info_mac,
60359 {"STA MAC Address",
60360 "wlan.eht.multi_link.sta_profile.sta_info.sta_mac_addr",
60361 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60362
60363 {&hf_ieee80211_eht_sta_profile_info_beacon,
60364 {"Beacon Interval",
60365 "wlan.eht.multi_link.sta_profile.sta_info.beacon_interval",
60366 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60367
60368 {&hf_ieee80211_eht_sta_profile_info_tsf_offset,
60369 {"TSF Offset",
60370 "wlan.eht.multi_link.sta_profile.sta_info.tsf_offset",
60371 FT_INT64, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60372
60373 {&hf_ieee80211_eht_sta_profile_info_dtim_count,
60374 {"DTIM Count",
60375 "wlan.eht.multi_link.sta_profile.sta_info.dtim_count",
60376 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60377
60378 {&hf_ieee80211_eht_sta_profile_info_dtim_period,
60379 {"DTIM Period",
60380 "wlan.eht.multi_link.sta_profile.sta_info.dtim_period",
60381 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60382
60383 {&hf_ieee80211_eht_sta_profile_info_bitmap,
60384 {"NSTR Indication Bitmap",
60385 "wlan.eht.multi_link.sta_profile.sta_info.nstr_bitmap",
60386 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60387
60388 {&hf_ieee80211_eht_sta_profile_bss_params_change_count,
60389 {"BSS Parameters Change Count",
60390 "wlan.eht.multi_link.sta_profile.sta_info.bss_params_change_count",
60391 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60392
60393 {&hf_ieee80211_eht_sta_profile_removal_timer,
60394 {"AP Removal Timer",
60395 "wlan.eht.multi_link.sta_profile.sta_info.ap_removal_timer",
60396 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60397
60398 {&hf_ieee80211_eht_sta_profile_presence_indi,
60399 {"Presence Indication",
60400 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication",
60401 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60402
60403 {&hf_ieee80211_eht_sta_profile_presence_indi_max_mpdu_length_present,
60404 {"Maximum MPDU Length Present",
60405 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication.max_mpdu_length_present",
60406 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60407
60408 {&hf_ieee80211_eht_sta_profile_presence_indi_max_amsdu_length_present,
60409 {"Maximum A-MSDU Length Present",
60410 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication.max_amsdu_length_present",
60411 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60412
60413 {&hf_ieee80211_eht_sta_profile_presence_indi_reserved,
60414 {"Reserved",
60415 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication.reserved",
60416 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60417
60418 {&hf_ieee80211_eht_sta_profile_operation_para_info,
60419 {"Operation Parameter Info",
60420 "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info",
60421 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60422
60423 {&hf_ieee80211_eht_sta_profile_operation_para_info_max_mpdu_length,
60424 {"Maximum MPDU Length",
60425 "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info.max_mpdu_length",
60426 FT_UINT16, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x0003,
60427 "In Octets unit", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60428
60429 {&hf_ieee80211_eht_sta_profile_operation_para_info_amsdu_length,
60430 {"A-MSDU length",
60431 "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info.amsdu_length",
60432 FT_BOOLEAN, 16, TFS(&ht_max_amsdu_flag)((0 ? (const struct true_false_string*)0 : ((&ht_max_amsdu_flag
))))
, 0x0004,
60433 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60434
60435 {&hf_ieee80211_eht_sta_profile_operation_para_info_pad,
60436 {"Pad", "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info.pad",
60437 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF8,
60438 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60439
60440 {&hf_ieee80211_eht_operation_parameters,
60441 {"EHT Operation Parameters",
60442 "wlan.eht.eht_operation_parameters",
60443 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60444
60445 {&hf_ieee80211_eht_basic_eht_mcs_nss_set,
60446 {"Basic EHT-MCS And Nss Set",
60447 "wlan.eht.basic_eht_mcs_and_nss_set",
60448 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60449
60450 {&hf_ieee80211_eht_operation_control_chan_width,
60451 {"Channel Width",
60452 "wlan.eht.eht_operation_information.control.channel_width",
60453 FT_UINT8, BASE_DEC, VALS(eht_operation_control_chan_wid_vals)((0 ? (const struct _value_string*)0 : ((eht_operation_control_chan_wid_vals
))))
,
60454 0x7, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60455
60456 {&hf_ieee80211_eht_operation_control_reserved,
60457 {"Reserved", "wlan.eht.eht_operation_information.control.reserved",
60458 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60459
60460 {&hf_ieee80211_eht_operation_info_present,
60461 {"EHT Operation Information Present",
60462 "wlan.eht.eht_operation_parameters.eht_operation_information_present",
60463 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60464
60465 {&hf_ieee80211_eht_operation_subchannel_bitmap_present,
60466 {"Disabled Subchannel Bitmap Present",
60467 "wlan.eht.eht_operation_parameters.disabled_subchannel_bitmap_present",
60468 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60469
60470 {&hf_ieee80211_eht_operation_default_pe_duration,
60471 {"EHT Default PE Duration",
60472 "wlan.eht.eht_operation_parameters.eht_default_pe_duration",
60473 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60474
60475 {&hf_ieee80211_eht_operation_group_addressed_bu_indication_limit,
60476 {"Group Addressed BU Indication Limit",
60477 "wlan.eht.eht_operation_parameters.group_addressed_bu_indication_limit",
60478 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60479
60480 {&hf_ieee80211_eht_operation_group_addressed_bu_indication_exp,
60481 {"Group Addressed BU Indication Exponent",
60482 "wlan.eht.eht_operation_parameters.group_addressed_bu_indication_exponent",
60483 FT_UINT8, BASE_DEC, NULL((void*)0), 0x30, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60484
60485 {&hf_ieee80211_eht_operation_mcs15_disable,
60486 {"MCS15 Disable",
60487 "wlan.eht.eht_operation_parameters.mcs_15_disable",
60488 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60489
60490 {&hf_ieee80211_eht_operation_reserved,
60491 {"Reserved", "wlan.eht.eht_operation_parameters.reserved",
60492 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60493
60494 {&hf_ieee80211_eht_operation_control,
60495 {"Control", "wlan.eht.eht_operation_information.control",
60496 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60497
60498 {&hf_ieee80211_eht_operation_ccfs0,
60499 {"CCFS0", "wlan.eht.eht_operation_information.ccfs0",
60500 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60501
60502 {&hf_ieee80211_eht_operation_ccfs1,
60503 {"CCFS1", "wlan.eht.eht_operation_information.ccfs1",
60504 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60505
60506 {&hf_ieee80211_eht_operation_disabled_bitmap,
60507 {"Disabled Subchannel Bitmap",
60508 "wlan.eht.eht_operation_information.disabled_subchannel_bitmap",
60509 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60510
60511 {&hf_ieee80211_eht_mac_capabilities,
60512 {"EHT MAC Capabilities Information", "wlan.eht.mac_capabilities_info",
60513 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60514
60515 {&hf_ieee80211_eht_mac_capa_epcs_prio_access_support,
60516 {"EPCS Priority Access Support",
60517 "wlan.eht.mac_capabilities.epcs_priority_access_support",
60518 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) }},
60519
60520 {&hf_ieee80211_eht_mac_capa_eht_om_control_support,
60521 {"EHT OM Control Support",
60522 "wlan.eht.mac_capabilities.eht_om_control_support",
60523 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) }},
60524
60525 {&hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_1_support,
60526 {"Triggered TXOP Sharing Mode 1 Support",
60527 "wlan.eht.mac_capabilities.triggered_txop_sharing_mode_1_support",
60528 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) }},
60529
60530 {&hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_2_support,
60531 {"Triggered TXOP Sharing Mode 2 Support",
60532 "wlan.eht.mac_capabilities.triggered_txop_sharing_mode_2_support",
60533 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) }},
60534
60535 {&hf_ieee80211_eht_mac_capa_restricted_twt_support,
60536 {"Restricted TWT Support",
60537 "wlan.eht.mac_capabilities.restricted_twt_support",
60538 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) }},
60539
60540 {&hf_ieee80211_eht_mac_capa_scs_traffic_description_support,
60541 {"SCS Traffic Description Support",
60542 "wlan.eht.mac_capabilities.scs_traffic_description_support",
60543 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) }},
60544
60545 {&hf_ieee80211_eht_mac_capa_maximum_mpdu_length,
60546 {"Maximum MPDU Length",
60547 "wlan.eht.mac_capabilities.maximum_mpdu_length",
60548 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) }},
60549
60550 {&hf_ieee80211_eht_mac_capa_maximum_ampdu_length_exp_ext,
60551 {"Maximum A-MPDU Length Exponent Extension",
60552 "wlan.eht.mac_capabilities.maximum_a_mpdu_length_exponent_extension",
60553 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60554
60555 {&hf_ieee80211_eht_mac_capa_eht_trs_support,
60556 {"EHT TRS Support",
60557 "wlan.eht.mac_capabilities.eht_trs_support",
60558 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) }},
60559
60560 {&hf_ieee80211_eht_mac_capa_txop_return_support_txop_sha_mode,
60561 {"TXOP Return Support In TXOP Sharing Mode 2",
60562 "wlan.eht.mac_capabilities.txop_return_support_in_txop_sharing_mode_2",
60563 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) }},
60564
60565 {&hf_ieee80211_eht_mac_capa_two_bqrs_support,
60566 {"Two BQRs Support",
60567 "wlan.eht.mac_capabilities.two_bqrs_support",
60568 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) }},
60569
60570 {&hf_ieee80211_eht_mac_capa_eht_link_adaptation_support,
60571 {"EHT Link Adaptation Support",
60572 "wlan.eht.mac_capabilities.eht_link_adaptation_support",
60573 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) }},
60574
60575 {&hf_ieee80211_eht_mac_capa_unsolicited_epcs_update,
60576 {"Unsolicited EPCS Priority Access Parameter Update",
60577 "wlan.eht.mac_capabilities.unsolicited_epcs_prio_access_para_update",
60578 FT_UINT16, BASE_DEC, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60579
60580 {&hf_ieee80211_eht_mac_capa_reserved,
60581 {"Reserved",
60582 "wlan.eht.mac_capabilities.reserved",
60583 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60584
60585 {&hf_ieee80211_eht_phy_bits_0_15,
60586 {"EHT PHY Bits 0-15", "wlan.eht.phy_capabilities.bits_0_15",
60587 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60588
60589 {&hf_ieee80211_eht_phy_bits_0_15_reserved,
60590 {"Reserved", "wlan.eht.phy_capabilities.bits_0_15.reserved",
60591 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60592
60593 {&hf_ieee80211_eht_phy_bits_0_15_320_mhz_in_6ghz,
60594 {"Support For 320 MHz in 6 GHz",
60595 "wlan.eht.phy_capabilities.bits_0_15.support_for_320mhz_in_6ghz",
60596 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) }},
60597
60598 {&hf_ieee80211_eht_phy_bits_0_15_242_tone_ru_bw_wider_20mhz,
60599 {"Support for 242-tone RU in BW Wider than 20 MHz",
60600 "wlan.eht.phy_capabilities.bits_0_15.support_for_242_tone_ru_in_bw_wider_20mhz",
60601 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) }},
60602
60603 {&hf_ieee80211_eht_phy_bits_0_15_ndp_and_3_2_us_gi,
60604 {"NDP With 4x EHT-LTF And 3.2 us GI",
60605 "wlan.eht.phy_capabilities.bits_0_15.ndp_with_4x_eht_ltf_and_3_2_us_gi",
60606 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) }},
60607
60608 {&hf_ieee80211_eht_phy_bits_0_15_partial_bw_ul_mu_mimo,
60609 {"Partial Bandwidth UL MU-MIMO",
60610 "wlan.eht.phy_capabilities.bits_0_15.partial_bandwidth_ul_mu_mimo",
60611 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) }},
60612
60613 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformer,
60614 {"SU Beamformer", "wlan.eht.phy_capabilities.bits_0_15.su_beamformer",
60615 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) }},
60616
60617 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee,
60618 {"SU Beamformee", "wlan.eht.phy_capabilities.bits_0_15.su_beamformee",
60619 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) }},
60620
60621 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee_le_80mhz,
60622 {"Beamformee SS (<= 80 MHz)",
60623 "wlan.eht.phy_capabilities.bits_0_15.beamformee_ss_le_80mhz",
60624 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0380, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60625
60626 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_160mhz,
60627 {"Beamformee SS (= 160 MHz)",
60628 "wlan.eht.phy_capabilities.bits_0_15.beamformee_ss_eq_160mhz",
60629 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1c00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60630
60631 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_320mhz,
60632 {"Beamformee SS (= 320 MHz)",
60633 "wlan.eht.phy_capabilities.bits_0_15.beamformee_ss_eq_320_mhz",
60634 FT_UINT16, BASE_HEX, NULL((void*)0), 0xe000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60635
60636 {&hf_ieee80211_eht_phy_bits_16_31,
60637 {"EHT PHY Bits 16-31", "wlan.eht.phy_capabilities.bits_16_31",
60638 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60639
60640 {&hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_lt_80mhz,
60641 {"Number Of Sounding Dimensions (<= 80 MHz)",
60642 "wlan.eht.phy_capabilities.bits_16_31.number_of_sounding_dims_le_80_mhz",
60643 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60644
60645 {&hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_160mhz,
60646 {"Number Of Sounding Dimensions (= 160 MHz)",
60647 "wlan.eht.phy_capabilities.bits_16_31.number_of_sounding_dims_eq_160_mhz",
60648 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60649
60650 {&hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_320mhz,
60651 {"Number Of Sounding Dimensions (= 320 MHz)",
60652 "wlan.eht.phy_capabilities.bits_16_31.number_of_sounding_dims_eq_320_mhz",
60653 FT_UINT16, BASE_HEX, NULL((void*)0), 0x01c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60654
60655 {&hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_su_feedback,
60656 {"Ng = 16 SU Feedback",
60657 "wlan.eht.phy_capabilities.bits_16_31.ng_eq_16_su_fbck",
60658 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) }},
60659
60660 {&hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_mu_feedback,
60661 {"Ng = 16 MU Feedback",
60662 "wlan.eht.phy_capabilities.bits_16_31.ng_eq_16_mu_fbck",
60663 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) }},
60664
60665 {&hf_ieee80211_eht_phy_bits_16_31_codebook_size_4_2_su_fbck,
60666 {"Codebook Size = (4,2) SU Feedback",
60667 "wlan.eht.phy_capabilities.bits_16_31.codebook_size_eq_4_2_su_fbck",
60668 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) }},
60669
60670 {&hf_ieee80211_eht_phy_bits_16_31_codebook_size_7_5_mu_fbck,
60671 {"Codebook Size = (7,5) MU Feedback",
60672 "wlan.eht.phy_capabilities.bits_16_31.codebook_size_eq_7_5_mu_fbck",
60673 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) }},
60674
60675 {&hf_ieee80211_eht_phy_bits_16_31_triggered_su_beemform_fbck,
60676 {"Triggered SU Beamforming Feedback",
60677 "wlan.eht.phy_capabilities.bits_16_31.triggered_su_beamforming_fbck",
60678 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) }},
60679
60680 {&hf_ieee80211_eht_phy_bits_16_31_triggered_mu_beemform_p_bw_fbck,
60681 {"Triggered MU Beamforming Partial BW Feedback",
60682 "wlan.eht.phy_capabilities.bits_16_31.triggered_mu_beamforming_partial_fbck",
60683 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) }},
60684
60685 {&hf_ieee80211_eht_phy_bits_16_31_triggered_cqi_feedback,
60686 {"Triggered CQI Feedback",
60687 "wlan.eht.phy_capabilities.bits_16_31.triggered_cqi_fbck",
60688 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) }},
60689
60690 {&hf_ieee80211_eht_phy_bits_32_39,
60691 {"EHT PHY Bits 32-39", "wlan.eht.phy_capabilities.bits_32_39",
60692 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60693
60694 {&hf_ieee80211_eht_phy_bits_32_39_partial_bw_dl_mu_mimo,
60695 {"Partial Bandwidth DL MU-MIMO",
60696 "wlan.eht.phy_capabilities.bits_32_39.partial_bw_dl_mu_mimo",
60697 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) }},
60698
60699 {&hf_ieee80211_eht_phy_bits_32_39_eht_psr_based_sr_support,
60700 {"EHT PSR-Based SR support",
60701 "wlan.eht.phy_capabilities.bits_32_39.eht_psr_based_sr_support",
60702 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) }},
60703
60704 {&hf_ieee80211_eht_phy_bits_32_39_power_boost_factor_support,
60705 {"Power Boost Factor Support",
60706 "wlan.eht.phy_capabilities.bits_32_39.power_boost_factor_support",
60707 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) }},
60708
60709 {&hf_ieee80211_eht_phy_bits_32_39_eht_mu_ppdu_w_4x_eht_ltf_08_gi,
60710 {"EHT MU PPDU With 4x EHT-LTF and 0.8 us GI",
60711 "wlan.eht.phy_capabilities.bits_32_39.eht_mu_ppdu_w_4x_eht_ltf_08_us_gi",
60712 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) }},
60713
60714 {&hf_ieee80211_eht_phy_bits_32_39_max_nc,
60715 {"Max Nc", "wlan.eht.phy_capabilities.bits_32_39.max_nc",
60716 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60717
60718 {&hf_ieee80211_eht_phy_bits_40_63,
60719 {"EHT PHY Bits 40-63", "wlan.eht.phy_capabilities.bits_40_63",
60720 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60721
60722 {&hf_ieee80211_eht_phy_bits_40_63_non_triggered_cqi_fbck,
60723 {"Non-Triggered CQI Feedback",
60724 "wlan.eht.phy_capabilities.bits_40_63.non_triggered_cqi_fbck",
60725 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60726 0x000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60727
60728 {&hf_ieee80211_eht_phy_bits_40_63_tx_1024_4096_qam_lt_242_ru_support,
60729 {"Tx 1024-QAM & 4096-QAM < 242-tone RU Support",
60730 "wlan.eht.phy_capabilities.bits_40_63.tx_1024_4096_qam_lt_242_ru_support",
60731 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60732 0x000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60733
60734 {&hf_ieee80211_eht_phy_bits_40_63_rx_1024_4096_qam_lt_242_ru_support,
60735 {"Rx 1024-QAM & 4096-QAM < 242-tone-RU Support",
60736 "wlan.eht.phy_capabilities.bits_40_63.rx_1024_4096_qam_lt_242_ru_support",
60737 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60738 0x000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60739
60740 {&hf_ieee80211_eht_phy_bits_40_63_ppe_thresholds_present,
60741 {"PPE Thresholds Present",
60742 "wlan.eht.phy_capabilities.bits_40_63.ppe_thresholds_present",
60743 FT_BOOLEAN, 24, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
,
60744 0x000008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60745
60746 {&hf_ieee80211_eht_phy_bits_40_63_common_nominal_packet_padding,
60747 {"Common Nominal Packet Padding",
60748 "wlan.eht.phy_capabilities.bits_40_63.common_nominal_packet_padding",
60749 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60750
60751 {&hf_ieee80211_eht_phy_bits_40_63_max_num_supported_eht_ltfs,
60752 {"Maximum Number Of Supported EHT-LTFs",
60753 "wlan.eht.phy_capabilities.bits_40_63.max_num_supported_eht_ltfs",
60754 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0007c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60755
60756 {&hf_ieee80211_eht_phy_bits_40_63_support_of_mcx_15,
60757 {"Support Of MCS 15",
60758 "wlan.eht.phy_capabilities.bits_40_63.support_of_mcs_15",
60759 FT_UINT24, BASE_DEC, NULL((void*)0), 0x007800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60760
60761 {&hf_ieee80211_eht_phy_bits_40_63_support_of_eht_dup_in_6_ghz,
60762 {"Support Of EHT DUP (MCS 14) in 6 GHz",
60763 "wlan.eht.phy_capabilities.bits_40_63.support_eht_dup_6_ghz",
60764 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60765 0x008000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60766 {&hf_ieee80211_eht_phy_bits_40_63_support_20_mhz_sta_ndp_wide_bw,
60767 {"Support For 20 MHz Operating STA Receiving NDP With Wider BW",
60768 "wlan.eht.phy_capabilities.bits_40_63.support_20_mhz_sta_recv_ndp_wider_bw",
60769 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60770 0x010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60771
60772 {&hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_le_80_mhz,
60773 {"Non-OFDMA UL MU-MIMO (BW <= 80 MHz)",
60774 "wlan.eht.phy_capabilities.bits_40_63.non_ofdma_ul_mu_mimo_bw_lt_80_mhz",
60775 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60776 0x020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60777
60778 {&hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_160_mhz,
60779 {"Non-OFDMA UL MU-MIMO (BW = 160 MHz)",
60780 "wlan.eht.phy_capabilities.bits_40_63.non_ofdma_ul_mu_mimo_bw_eq_160_mhz",
60781 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60782 0x040000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60783
60784 {&hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_320_mhz,
60785 {"Non-OFDMA UL MU-MIMO (BW = 320 MHz)",
60786 "wlan.eht.phy_capabilities.bits_40_63.non_ofdma_ul_mu_mimo_bw_eq_320_mhz",
60787 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60788 0x080000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60789
60790 {&hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_le_80_mhz,
60791 {"MU Beamformer (BW <= 80 MHz)",
60792 "wlan.eht.phy_capabilities.bits_40_63.mu_beamformer_bw_le_80_mhz",
60793 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60794 0x100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60795
60796 {&hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_160_mhz,
60797 {"MU Beamformer (BW = 160 MHz)",
60798 "wlan.eht.phy_capabilities.bits_40_63.mu_beamformer_bw_eq_160_mhz",
60799 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60800 0x200000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60801
60802 {&hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_320_mhz,
60803 {"MU Beamformer (BW = 320 MHz)",
60804 "wlan.eht.phy_capabilities.bits_40_63.mu_beamformer_bw_eq_320_mhz",
60805 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60806 0x400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60807
60808 {&hf_ieee80211_eht_phy_bits_40_63_tb_sounding_feedback_rate_limit,
60809 {"TB Sounding Feedback Rate Limit",
60810 "wlan.eht.phy_capabilities.bits_40_63.tb_sounding_fbck_rate_limit",
60811 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60812 0x800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60813
60814 {&hf_ieee80211_eht_phy_bits_64_71,
60815 {"EHT PHY Bits 64-71", "wlan.eht.phy_capabilities.bits_64_71",
60816 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60817
60818 {&hf_ieee80211_eht_phy_bits_64_71_rx_1024_qam_wid_bw_dl_ofdma_sup,
60819 {"Rx 1024-QAM In Wider Bandwidth DL OFDMA Support",
60820 "wlan.eht.phy_capabilities.bits_64_71.rx_1024_qam_in_wider_bw_dl_ofdma",
60821 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60822 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60823
60824 {&hf_ieee80211_eht_phy_bits_64_71_rx_4096_qam_wid_bw_dl_ofdma_sup,
60825 {"Rx 4096-QAM In Wider Bandwidth DL OFDMA SUpport",
60826 "wlan.eht.phy_capabilities.bits_64_71.rx_4096_qam_in_wider_bw_dl_ofdma",
60827 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60828 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60829
60830 {&hf_ieee80211_eht_phy_bits_64_71_20m_limit_capa_support,
60831 {"20 MHz-Only Limited Capabilities Support",
60832 "wlan.eht.phy_capabilities.bits_64_71.20m_only_limited_capabilities",
60833 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60834 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60835
60836 {&hf_ieee80211_eht_phy_bits_64_71_20m_mu_beam_feedback_dl_mu_mimo,
60837 {"20 MHz-Only Triggered MU Beamforming Full BW Feedback And DL MU-MIMO",
60838 "wlan.eht.phy_capabilities.bits_64_71.20m_only_trig_mu_beamforming_dl_mu_mimo",
60839 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60840 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60841
60842 {&hf_ieee80211_eht_phy_bits_64_71_20m_mru_support,
60843 {"20 MHz-Only MRU Support",
60844 "wlan.eht.phy_capabilities.bits_64_71.20m_only_mru_support",
60845 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60846 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60847
60848 {&hf_ieee80211_eht_phy_bits_64_71_reserved,
60849 {"Reserved", "wlan.eht.phy_capabilities.bits_64_71.reserved",
60850 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60851
60852 {&hf_ieee80211_eht_mcs_and_nss_non_ap,
60853 {"EHT-MCS Map (20 MHz-Only Non-AP STA)",
60854 "wlan.eht.supported_eht_mcs_bss_set.20_mhz_only_non_sta",
60855 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60856
60857 {&hf_ieee80211_eht_rx_max_nss_20mhz_0_7,
60858 {"RX Max NSS That Supports EHt-MCS 0-7",
60859 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_0_7",
60860 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60861
60862 {&hf_ieee80211_eht_tx_max_nss_20mhz_0_7,
60863 {"TX Max NSS That Supports EHt-MCS 0-7",
60864 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_0_7",
60865 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60866
60867 {&hf_ieee80211_eht_rx_max_nss_20mhz_8_9,
60868 {"RX Max NSS That Supports EHt-MCS 8-9",
60869 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_8_9",
60870 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60871
60872 {&hf_ieee80211_eht_tx_max_nss_20mhz_8_9,
60873 {"TX Max NSS That Supports EHt-MCS 8-9",
60874 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_8_9",
60875 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60876
60877 {&hf_ieee80211_eht_rx_max_nss_20mhz_10_11,
60878 {"RX Max NSS That Supports EHt-MCS 10-11",
60879 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_10_11",
60880 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60881
60882 {&hf_ieee80211_eht_tx_max_nss_20mhz_10_11,
60883 {"TX Max NSS That Supports EHt-MCS 10-11",
60884 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_10_11",
60885 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00F00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60886
60887 {&hf_ieee80211_eht_rx_max_nss_20mhz_12_13,
60888 {"RX Max NSS That Supports EHt-MCS 12-13",
60889 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_12_13",
60890 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0F000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60891
60892 {&hf_ieee80211_eht_tx_max_nss_20mhz_12_13,
60893 {"TX Max NSS That Supports EHt-MCS 12-13",
60894 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_12_13",
60895 FT_UINT32, BASE_HEX, NULL((void*)0), 0xF0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60896
60897 {&hf_ieee80211_eht_mcs_and_nss_le_80mhz,
60898 {"EHT-MCS Map (BW <= 80MHz)",
60899 "wlan.eht.supported_eht_mcs_bss_set.eht_mcs_map_bw_le_80_mhz",
60900 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60901
60902 {&hf_ieee80211_eht_le_80_rx_max_nss_0_9,
60903 {"Rx Max Nss That Supports EHT-MCS 0-9",
60904 "wlan.eht.supported_eht_mcs_bss_set.le_80.rx_max_nss_supports_eht_mcs_0_9",
60905 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60906
60907 {&hf_ieee80211_eht_le_80_tx_max_nss_0_9,
60908 {"Tx Max Nss That Supports EHT-MCS 0-9",
60909 "wlan.eht.supported_eht_mcs_bss_set.le_80.tx_max_nss_supports_eht_mcs_0_9",
60910 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60911
60912 {&hf_ieee80211_eht_le_80_rx_max_nss_10_11,
60913 {"Rx Max Nss That Supports EHT-MCS 10-11",
60914 "wlan.eht.supported_eht_mcs_bss_set.le_80.rx_max_nss_supports_eht_mcs_10_11",
60915 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60916
60917 {&hf_ieee80211_eht_le_80_tx_max_nss_10_11,
60918 {"Tx Max Nss That Supports EHT-MCS 10-11",
60919 "wlan.eht.supported_eht_mcs_bss_set.le_80.tx_max_nss_supports_eht_mcs_10_11",
60920 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60921
60922 {&hf_ieee80211_eht_le_80_rx_max_nss_12_13,
60923 {"Rx Max Nss That Supports EHT-MCS 12-13",
60924 "wlan.eht.supported_eht_mcs_bss_set.le_80.rx_max_nss_supports_eht_mcs_12_13",
60925 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60926
60927 {&hf_ieee80211_eht_le_80_tx_max_nss_12_13,
60928 {"Tx Max Nss That Supports EHT-MCS 12-13",
60929 "wlan.eht.supported_eht_mcs_bss_set.le_80.tx_max_nss_supports_eht_mcs_12_13",
60930 FT_UINT24, BASE_DEC, NULL((void*)0), 0xF00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60931
60932 {&hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
60933 {"EHT-MCS Map (BW = 160MHz)",
60934 "wlan.eht.supported_eht_mcs_bss_set.eht_mcs_map_bw_eq_160_mhz",
60935 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60936
60937 {&hf_ieee80211_eht_160_rx_max_nss_0_9,
60938 {"Rx Max Nss That Supports EHT-MCS 0-9",
60939 "wlan.eht.supported_eht_mcs_bss_set.160.rx_max_nss_supports_eht_mcs_0_9",
60940 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60941
60942 {&hf_ieee80211_eht_160_tx_max_nss_0_9,
60943 {"Tx Max Nss That Supports EHT-MCS 0-9",
60944 "wlan.eht.supported_eht_mcs_bss_set.160.tx_max_nss_supports_eht_mcs_0_9",
60945 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60946
60947 {&hf_ieee80211_eht_160_rx_max_nss_10_11,
60948 {"Rx Max Nss That Supports EHT-MCS 10-11",
60949 "wlan.eht.supported_eht_mcs_bss_set.160.rx_max_nss_supports_eht_mcs_10_11",
60950 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60951
60952 {&hf_ieee80211_eht_160_tx_max_nss_10_11,
60953 {"Tx Max Nss That Supports EHT-MCS 10-11",
60954 "wlan.eht.supported_eht_mcs_bss_set.160.tx_max_nss_supports_eht_mcs_10_11",
60955 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60956
60957 {&hf_ieee80211_eht_160_rx_max_nss_12_13,
60958 {"Rx Max Nss That Supports EHT-MCS 12-13",
60959 "wlan.eht.supported_eht_mcs_bss_set.160.rx_max_nss_supports_eht_mcs_12_13",
60960 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60961
60962 {&hf_ieee80211_eht_160_tx_max_nss_12_13,
60963 {"Tx Max Nss That Supports EHT-MCS 12-13",
60964 "wlan.eht.supported_eht_mcs_bss_set.160.tx_max_nss_supports_eht_mcs_12_13",
60965 FT_UINT24, BASE_DEC, NULL((void*)0), 0xF00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60966
60967 {&hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
60968 {"EHT-MCS Map (BW = 320MHz)",
60969 "wlan.eht.supported_eht_mcs_bss_set.eht_mcs_map_bw_eq_320_mhz",
60970 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60971
60972 {&hf_ieee80211_eht_320_rx_max_nss_0_9,
60973 {"Rx Max Nss That Supports EHT-MCS 0-9",
60974 "wlan.eht.supported_eht_mcs_bss_set.320.rx_max_nss_supports_eht_mcs_0_9",
60975 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60976
60977 {&hf_ieee80211_eht_320_tx_max_nss_0_9,
60978 {"Tx Max Nss That Supports EHT-MCS 0-9",
60979 "wlan.eht.supported_eht_mcs_bss_set.320.tx_max_nss_supports_eht_mcs_0_9",
60980 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60981
60982 {&hf_ieee80211_eht_320_rx_max_nss_10_11,
60983 {"Rx Max Nss That Supports EHT-MCS 10-11",
60984 "wlan.eht.supported_eht_mcs_bss_set.320.rx_max_nss_supports_eht_mcs_10_11",
60985 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60986
60987 {&hf_ieee80211_eht_320_tx_max_nss_10_11,
60988 {"Tx Max Nss That Supports EHT-MCS 10-11",
60989 "wlan.eht.supported_eht_mcs_bss_set.320.tx_max_nss_supports_eht_mcs_10_11",
60990 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60991
60992 {&hf_ieee80211_eht_320_rx_max_nss_12_13,
60993 {"Rx Max Nss That Supports EHT-MCS 12-13",
60994 "wlan.eht.supported_eht_mcs_bss_set.320.rx_max_nss_supports_eht_mcs_12_13",
60995 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60996
60997 {&hf_ieee80211_eht_320_tx_max_nss_12_13,
60998 {"Tx Max Nss That Supports EHT-MCS 12-13",
60999 "wlan.eht.supported_eht_mcs_bss_set.320.tx_max_nss_supports_eht_mcs_12_13",
61000 FT_UINT24, BASE_DEC, NULL((void*)0), 0xF00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61001
61002 {&hf_ieee80211_eht_supported_mcs_nss_bytes,
61003 {"Supported EHT-MCS and NSS Set bytes",
61004 "wlan.eht.supported_eht_mcs_nss_set.bytes",
61005 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61006
61007 {&hf_ieee80211_eht_ppe_thresholds,
61008 {"EHT PPE Thresholds", "wlan.eht.ppe_thresholds",
61009 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61010
61011 {&hf_ieee80211_eht_ttl_mapping_control,
61012 {"TID-To-Link Mapping Control",
61013 "wlan.eht.tid_to_link_mapping.control",
61014 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61015
61016 {&hf_ieee80211_eht_ttl_mapping_direction,
61017 {"Direction", "wlan.eht.tid_to_link_mapping.control.direction",
61018 FT_UINT8, BASE_HEX, VALS(tid_to_link_mapping_dirn_vals)((0 ? (const struct _value_string*)0 : ((tid_to_link_mapping_dirn_vals
))))
, 0x03,
61019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61020
61021 {&hf_ieee80211_eht_ttl_default_link_mapping,
61022 {"Default Link Mapping",
61023 "wlan.eht.tid_to_link_mapping.control.default_link_mapping",
61024 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61025
61026 {&hf_ieee80211_eht_ttl_mapping_switch_time_pres,
61027 {"Mapping Switch Time Present",
61028 "wlan.eht.tid_to_link_mapping.control.mapping_switch_time",
61029 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61030
61031 {&hf_ieee80211_eht_ttl_expected_dura_pres,
61032 {"Expected Duration Present",
61033 "wlan.eht.tid_to_link_mapping.control.expected_duration",
61034 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61035
61036 {&hf_ieee80211_eht_ttl_link_mapping_size,
61037 {"Link Mapping Size",
61038 "wlan.eht.tid_to_link_mapping.control.link_mapping_size",
61039 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) }},
61040
61041 {&hf_ieee80211_eht_ttl_mapping_reserved,
61042 {"Reserved", "wlan.eht.tid_to_link_mapping.control.reserved",
61043 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61044
61045 {&hf_ieee80211_eht_ttl_mapping_presence,
61046 {"Link Mapping Presence Indicator",
61047 "wlan.eht.tid_to_link_mapping.control.link_mapping_presence_indicator",
61048 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61049
61050 {&hf_ieee80211_eht_ttl_mapping_switch_time,
61051 {"Mapping Switch Time", "wlan.eht.tid_to_link_mapping.switch_time",
61052 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61053
61054 {&hf_ieee80211_eht_ttl_mapping_expected_duration,
61055 {"Expected Duration", "wlan.eht.tid_to_link_mapping.expected_duration",
61056 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61057
61058 {&hf_ieee80211_eht_ttl_mapping_tid_0_link_mapping,
61059 {"Link Mapping Of TID 0", "wlan.eht.tid_to_link_mapping.tid_0.link_mapping",
61060 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61061
61062 {&hf_ieee80211_eht_ttl_mapping_tid_1_link_mapping,
61063 {"Link Mapping Of TID 1", "wlan.eht.tid_to_link_mapping.tid_1.link_mapping",
61064 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61065
61066 {&hf_ieee80211_eht_ttl_mapping_tid_2_link_mapping,
61067 {"Link Mapping Of TID 2", "wlan.eht.tid_to_link_mapping.tid_2.link_mapping",
61068 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61069
61070 {&hf_ieee80211_eht_ttl_mapping_tid_3_link_mapping,
61071 {"Link Mapping Of TID 3", "wlan.eht.tid_to_link_mapping.tid_3.link_mapping",
61072 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61073
61074 {&hf_ieee80211_eht_ttl_mapping_tid_4_link_mapping,
61075 {"Link Mapping Of TID 4", "wlan.eht.tid_to_link_mapping.tid_4.link_mapping",
61076 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61077
61078 {&hf_ieee80211_eht_ttl_mapping_tid_5_link_mapping,
61079 {"Link Mapping Of TID 5", "wlan.eht.tid_to_link_mapping.tid_5.link_mapping",
61080 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61081
61082 {&hf_ieee80211_eht_ttl_mapping_tid_6_link_mapping,
61083 {"Link Mapping Of TID 6", "wlan.eht.tid_to_link_mapping.tid_6.link_mapping",
61084 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61085
61086 {&hf_ieee80211_eht_ttl_mapping_tid_7_link_mapping,
61087 {"Link Mapping Of TID 7", "wlan.eht.tid_to_link_mapping.tid_7.link_mapping",
61088 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61089
61090 {&hf_ieee80211_eht_multi_link_traffic_control,
61091 {"Multi-Link Traffic Control",
61092 "wlan.eht.multi_link_traffic.traffic_control",
61093 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61094
61095 {&hf_ieee80211_eht_multi_link_tc_bitmap_size,
61096 {"Bitmap Size", "wlan.eht.multi_link_traffic.traffic_control.bitmap_size",
61097 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) }},
61098
61099 {&hf_ieee80211_eht_multi_link_tc_aid_offset,
61100 {"AID Offset", "wlan.eht.multi_link_traffic.traffic_control.aid_offset",
61101 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7FF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61102
61103 {&hf_ieee80211_eht_multi_link_tc_reserved,
61104 {"Reserved", "wlan.eht.multi_link_traffic.traffic_control.reserved",
61105 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61106
61107 {&hf_ieee80211_eht_multi_link_traffic_indication,
61108 {"Traffic Indication List",
61109 "wlan.eht.multi_link_traffic.traffic_indication_list",
61110 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61111
61112 {&hf_ieee80211_eht_qos_chars_dirn,
61113 {"Direction", "wlan.eht.qos_characteristics.control.direction",
61114 FT_UINT32, BASE_HEX, VALS(qos_chars_dirn_vals)((0 ? (const struct _value_string*)0 : ((qos_chars_dirn_vals)
)))
,
61115 0x00000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61116
61117 {&hf_ieee80211_eht_qos_chars_tid,
61118 {"TID", "wlan.eht.qos_characteristics.control.tid",
61119 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000003C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61120
61121 {&hf_ieee80211_eht_qos_chars_user_prio,
61122 {"User Priority", "wlan.eht.qos_characteristics.control.user_priority",
61123 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61124
61125 {&hf_ieee80211_eht_qos_chars_bitmap,
61126 {"Presence Bitmap of Additional Parameters",
61127 "wlan.eht.qos_characteristics.control.presence_bitmap",
61128 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01FFFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61129
61130 {&hf_ieee80211_eht_qos_chars_linkid,
61131 {"LinkID", "wlan.eht.qos_characteristics.control.linkid",
61132 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1E000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61133
61134 {&hf_ieee80211_eht_qos_chars_resrvd,
61135 {"Reserved", "wlan.eht.qos_characteristics.control.reserved",
61136 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61137
61138 {&hf_ieee80211_eht_qos_chars_min_svc_interval,
61139 {"Minimum Service Interval",
61140 "wlan.eht.qos_characteristics.minimum_service_interval",
61141 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61142
61143 {&hf_ieee80211_eht_qos_chars_max_svc_interval,
61144 {"Maximum Service Interval",
61145 "wlan.eht.qos_characteristics.maximum_service_interval",
61146 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61147
61148 {&hf_ieee80211_eht_qos_chars_min_data_rate,
61149 {"Minimum Data Rate",
61150 "wlan.eht.qos_characteristics.minimal_data_rate",
61151 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61152
61153 {&hf_ieee80211_eht_qos_chars_delay_bound,
61154 {"Delay Bound",
61155 "wlan.eht.qos_characteristics.delay_bound",
61156 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61157
61158 {&hf_ieee80211_eht_qos_chars_max_msdu_size,
61159 {"Maximum MSDU Size", "wlan.eht.qos_characteristics.max_msdu_size",
61160 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61161
61162 {&hf_ieee80211_eht_qos_chars_service_start_time,
61163 {"Service Start Time", "wlan.eht.qos_characteristics.service_start_time",
61164 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61165
61166 {&hf_ieee80211_eht_qos_chars_service_start_time_linkid,
61167 {"Service Start Time LinkID", "wlan.eht.qos_characteristics.service_start_time_linkid",
61168 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61169
61170 {&hf_ieee80211_eht_qos_chars_mean_data_rate,
61171 {"Mean Data Rate", "wlan.eht.qos_characteristics.mean_data_rate",
61172 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61173
61174 {&hf_ieee80211_eht_qos_chars_burst_size,
61175 {"Burst Size", "wlan.eht.qos_characteristics.burst_size",
61176 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61177
61178 {&hf_ieee80211_eht_qos_chars_msdu_lifetime,
61179 {"MSDU Lifetime", "wlan.eht.qos_characteristics.msdu_lifetime",
61180 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61181
61182 {&hf_ieee80211_eht_qos_chars_msdu_delivery_ratio,
61183 {"MSDU Delivery Ratio", "wlan.eht.qos_characteristics.msdu_delivery_ratio",
61184 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61185
61186 {&hf_ieee80211_eht_qos_chars_msdu_count_exponent,
61187 {"MSDU Count Exponent", "wlan.eht.qos_characteristics.msdu_count_exponent",
61188 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61189
61190 {&hf_ieee80211_eht_qos_chars_medium_time,
61191 {"Medium Time", "wlan.eht.qos_characteristics.medium_time",
61192 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61193
61194 {&hf_ieee80211_eht_link_id_bitmap,
61195 {"Link ID Bitmap", "wlan.eht.link_id_bitmap",
61196 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61197
61198 {&hf_ieee80211_eht_aid_bitmap_length,
61199 {"Partial AID Bitmap Length", "wlan.eht.aid_bitmap.length",
61200 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61201
61202 {&hf_ieee80211_eht_aid_bitmap_control,
61203 {"Bitmap Control", "wlan.eht.aid_bitmap.control",
61204 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61205
61206 {&hf_ieee80211_eht_aid_bitmap_control_offset,
61207 {"Bitmap Offset", "wlan.eht.aid_bitmap.control.offset",
61208 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfe, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61209
61210 {&hf_ieee80211_eht_aid_bitmap_control_reserved,
61211 {"Reserved", "wlan.eht.aid_bitmap.control.reserved",
61212 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61213
61214 {&hf_ieee80211_eht_aid_bitmap_partial_aid_bitmap,
61215 {"Partial AID Bitmap", "wlan.eht.aid_bitmap.partial_aid_bitmap",
61216 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61217
61218 {&hf_ieee80211_eht_aid_bitmap_aid,
61219 {"Association ID", "wlan.eht.aid_bitmap.aid",
61220 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61221
61222 {&hf_ieee80211_eht_bw_indi_param,
61223 {"Bandwidth Indication Parameters", "wlan.eht.bw_indication_params",
61224 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61225
61226 {&hf_ieee80211_eht_bw_indi_param_reserved,
61227 {"Reserved", "wlan.eht.bw_indication_params.reserved",
61228 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61229
61230 {&hf_ieee80211_eht_bw_indi_param_disabled_subchan_bitmap,
61231 {"Disabled Subchannel Bitmap Present", "wlan.eht.bw_indication_params.disabled_subchan_bitmap",
61232 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61233
61234 {&hf_ieee80211_eht_bw_indi_param_reserved1,
61235 {"Reserved", "wlan.eht.bw_indication_params.reserved1",
61236 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61237
61238 {&hf_ieee80211_eht_bw_indi_diabled_bitmap,
61239 {"Disabled Subchannel Bitmap",
61240 "wlan.eht.bw_indication.disabled_subchannel_bitmap",
61241 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61242
61243 {&hf_ieee80211_eht_mimo_ctrl_field,
61244 {"EHT MIMO Control", "wlan.eht.mimo.control",
61245 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61246
61247 {&hf_ieee80211_eht_mimo_ctrl_nc_index,
61248 {"Nc Index", "wlan.eht.mimo.control.nc_index",
61249 FT_UINT40, BASE_DEC, NULL((void*)0), 0x000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61250
61251 {&hf_ieee80211_eht_mimo_ctrl_nr_index,
61252 {"Nr Index", "wlan.eht.mimo.control.nr_index",
61253 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61254
61255 {&hf_ieee80211_eht_mimo_ctrl_bw,
61256 {"BW", "wlan.eht.mimo.control.bw",
61257 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(eht_mimo_bw_vals)((0 ? (const struct _val64_string*)0 : ((eht_mimo_bw_vals)))),
61258 0x0000000700, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61259
61260 {&hf_ieee80211_eht_mimo_ctrl_grouping,
61261 {"Grouping", "wlan.eht.mimo.control.grouping",
61262 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(eht_mimo_grouping_vals)((0 ? (const struct _val64_string*)0 : ((eht_mimo_grouping_vals
))))
,
61263 0x0000000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61264
61265 {&hf_ieee80211_eht_mimo_ctrl_feedback_type,
61266 {"Feedback Type", "wlan.eht.mimo.control.feedback_type",
61267 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(eht_feedback_type_vals)((0 ? (const struct _val64_string*)0 : ((eht_feedback_type_vals
))))
,
61268 0x0000003000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61269
61270 {&hf_ieee80211_eht_mimo_ctrl_reserved1,
61271 {"Reserved", "wlan.eht.mimo.control.reserved1",
61272 FT_UINT40, BASE_HEX, NULL((void*)0), 0x000001C000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61273
61274 {&hf_ieee80211_eht_mimo_ctrl_remaining_feedback_segments,
61275 {"Remaining Feedback Segments",
61276 "wlan.eht.mimo.control.remaining_feedback_segments",
61277 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61278
61279 {&hf_ieee80211_eht_mimo_ctrl_first_feedback_segment,
61280 {"First Feedback Segment", "wlan.eht.mimo.control.first_feedback_segment",
61281 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61282
61283 {&hf_ieee80211_eht_mimo_ctrl_partial_bw_info,
61284 {"Partial BW Info", "wlan.eht.mimo.control.partial_bw_info",
61285 FT_UINT40, BASE_HEX, NULL((void*)0), 0x003FE00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61286
61287 {&hf_ieee80211_eht_mimo_ctrl_sounding_dialog_token_number,
61288 {"Sounding Dialog Token Number",
61289 "wlan.eht.mimo.control.sounding_dialog_token_number",
61290 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0FC0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61291
61292 {&hf_ieee80211_eht_mimo_ctrl_codebook_info,
61293 {"Codebook Information", "wlan.eht.mimo.control.codebook_info",
61294 FT_UINT40, BASE_DEC, NULL((void*)0), 0x1000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61295
61296 {&hf_ieee80211_eht_mimo_ctrl_reserved2,
61297 {"Reserved", "wlan.eht.mimo.control.reserved2",
61298 FT_UINT40, BASE_HEX, NULL((void*)0), 0xE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61299
61300 {&hf_ieee80211_eht_compressed_beamforming_report_snr,
61301 {"AgvSNR", "wlan.eht.mimo.beamforming_report.avgsnr",
61302 FT_INT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61303
61304 {&hf_ieee80211_eht_compressed_beamform_scidx,
61305 {"SCIDX", "wlan.eht.mimo.beamforming_report.scidx",
61306 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61307
61308 {&hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
61309 {"Delta SNR", "wlan.eht.mu.exclusive_beamforming_report.delta_snr",
61310 FT_INT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61311
61312 {&hf_ieee80211_eht_group_key_data_length,
61313 {"Key Data Length", "wlan.eht.group_key_data.length",
61314 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61315
61316 {&hf_ieee80211_eht_reconfig_link_id_info,
61317 {"Link ID Info", "wlan.eht.reconfig.link_id_info",
61318 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61319
61320 {&hf_ieee80211_eht_reconfig_link_id,
61321 {"Link ID", "wlan.eht.reconfig.link_id_info.link_id",
61322 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61323
61324 {&hf_ieee80211_eht_reconfig_link_id_reserved,
61325 {"Reserved", "wlan.eht.reconfig.link_id_info.reserved",
61326 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61327
61328 {&hf_ieee80211_eht_reconfig_status_code,
61329 {"Status code", "wlan.eht.reconfig.status_code",
61330 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
61331 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61332
61333 {&hf_ieee80211_wfa_rsn_selection,
61334 {"RSNE Variant", "wlan.wfa_rsn_selection.variant",
61335 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) }},
61336
61337 {&hf_ieee80211_wfa_rsn_or_link_kde_link_id,
61338 {"Link ID", "wlan.wfa_rsn_or_link_kde.link_id",
61339 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61340
61341 {&hf_ieee80211_nonap_sta_regulatory_conn,
61342 {"Regulatory Connectivity", "wlan.nonap_sta_regulatory_connect",
61343 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61344
61345 {&hf_ieee80211_nonap_sta_regu_conn_indoor_ap_valid,
61346 {"Connectivity With Indoor AP Valid", "wlan.nonap_sta_regulatory_connect.indoor_ap_valid",
61347 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61348
61349 {&hf_ieee80211_nonap_sta_regu_conn_indoor_ap,
61350 {"Connectivity With Indoor AP", "wlan.nonap_sta_regulatory_connect.indoor_ap",
61351 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61352
61353 {&hf_ieee80211_nonap_sta_regu_conn_sp_ap_valid,
61354 {"Connectivity With SP AP Valid", "wlan.nonap_sta_regulatory_connect.sp_ap_valid",
61355 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61356
61357 {&hf_ieee80211_nonap_sta_regu_conn_sp_ap,
61358 {"Connectivity With SP AP", "wlan.nonap_sta_regulatory_connect.sp_ap",
61359 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61360
61361 {&hf_ieee80211_nonap_sta_regu_conn_reserved,
61362 {"Reserved", "wlan.nonap_sta_regulatory_connect.reserved",
61363 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61364
61365 {&hf_ieee80211_tag_channel_usage_mode,
61366 {"Usage Mode", "wlan.channel_usage.mode",
61367 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100,
61368 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) }},
61369
61370 {&hf_ieee80211_ff_count,
61371 {"Count", "wlan.fixed.count",
61372 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61373
61374 {&hf_ieee80211_tag_dms_id,
61375 {"DMS ID", "wlan.dms.id",
61376 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61377
61378 {&hf_ieee80211_tag_dms_length,
61379 {"DMS Length", "wlan.dms.length",
61380 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61381
61382 {&hf_ieee80211_tag_dms_req_type,
61383 {"Request Type", "wlan.dms.request_type",
61384 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100,
61385 RVALS(dms_req_type)((0 ? (const struct _range_string*)0 : ((dms_req_type)))), 0,
61386 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61387
61388 {&hf_ieee80211_tag_dms_resp_type,
61389 {"Response Type", "wlan.dms.response_type",
61390 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100,
61391 RVALS(dms_resp_type)((0 ? (const struct _range_string*)0 : ((dms_resp_type)))), 0,
61392 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61393
61394 {&hf_ieee80211_tag_dms_last_seq_control,
61395 {"Last Sequence Control", "wlan.dms.last_sequence_control",
61396 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61397 };
61398
61399 static hf_register_info aggregate_fields[] = {
61400 {&hf_ieee80211_amsdu_subframe,
61401 {"A-MSDU Subframe", "wlan_aggregate.a_msdu.subframe",
61402 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
61403 "Aggregate MAC Service Data Unit (MSDU) Subframe", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61404
61405 {&hf_ieee80211_amsdu_length,
61406 {"A-MSDU Length", "wlan_aggregate.a_msdu.length",
61407 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
61408 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61409
61410 {&hf_ieee80211_amsdu_padding,
61411 {"A-MSDU Padding", "wlan_aggregate.a_msdu.padding",
61412 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
61413 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61414 };
61415
61416 static uat_field_t wep_uat_flds[] = {
61417
61418 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)}
61419 "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)}
,
61420 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)}
61421 "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)}
61422 "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)}
61423 "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)}
61424 "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)}
61425 "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)}
,
61426 UAT_END_FIELDS{((void*)0),((void*)0),PT_TXTMOD_NONE,{0,0,0},{0,0,0},0,0,((void
*)0)}
61427 };
61428
61429 static int *ett[] = {
61430 &ett_80211,
61431 &ett_proto_flags,
61432 &ett_cap_tree,
61433 &ett_fc_tree,
61434 &ett_cntrl_wrapper_fc,
61435 &ett_cntrl_wrapper_payload,
61436 &ett_fragments,
61437 &ett_fragment,
61438 &ett_block_ack,
61439 &ett_block_ack_tid,
61440 &ett_block_ack_request_control,
61441 &ett_block_ack_bitmap,
61442 &ett_block_ack_request_multi_sta_aid_tid,
61443 &ett_multi_sta_block_ack,
61444 &ett_ath_cap_tree,
61445 &ett_extreme_mesh_services_tree,
61446 &ett_addr,
61447
61448 &ett_80211_mgt,
61449 &ett_fixed_parameters,
61450 &ett_tagged_parameters,
61451 &ett_tag_bmapctl_tree,
61452 &ett_s1g_pvb_tree,
61453 &ett_s1g_pvb_eb_tree,
61454 &ett_s1g_pvb_block_control_byte,
61455 &ett_s1g_pvb_block_bitmap_tree,
61456 &ett_s1g_pvb_subblock_tree,
61457 &ett_s1g_pvb_olb_tree,
61458 &ett_s1g_pvb_ade_control,
61459 &ett_s1g_pvb_ade_tree,
61460 &ett_s1g_pvb_olb_subblock,
61461 &ett_tag_country_fnm_tree,
61462 &ett_tag_country_rcc_tree,
61463 &ett_qos_parameters,
61464 &ett_qos_ps_buf_state,
61465 &ett_wep_parameters,
61466 &ett_msh_control,
61467 &ett_hwmp_targ_flags_tree,
61468 &ett_mesh_chswitch_flag_tree,
61469 &ett_mesh_config_cap_tree,
61470 &ett_mesh_formation_info_tree,
61471 &ett_bcn_timing_rctrl_tree,
61472 &ett_bcn_timing_info_tree,
61473 &ett_gann_flags_tree,
61474 &ett_pxu_proxy_info_tree,
61475 &ett_pxu_proxy_info_flags_tree,
61476
61477 &ett_rsn_gcs_tree,
61478 &ett_rsn_pcs_tree,
61479 &ett_rsn_sub_pcs_tree,
61480 &ett_rsn_akms_tree,
61481 &ett_rsn_sub_akms_tree,
61482 &ett_rsn_cap_tree,
61483 &ett_rsn_pmkid_tree,
61484 &ett_rsn_gmcs_tree,
61485
61486 &ett_kde_mlo_link_info,
61487
61488 &ett_wpa_mcs_tree,
61489 &ett_wpa_ucs_tree,
61490 &ett_wpa_sub_ucs_tree,
61491 &ett_wpa_akms_tree,
61492 &ett_wpa_sub_akms_tree,
61493 &ett_wme_ac,
61494 &ett_wme_aci_aifsn,
61495 &ett_wme_ecw,
61496 &ett_wme_qos_info,
61497
61498 &ett_update_edca_info,
61499
61500 &ett_ht_cap_tree,
61501 &ett_ampduparam_tree,
61502 &ett_mcsset_tree,
61503 &ett_mcsbit_tree,
61504 &ett_htex_cap_tree,
61505 &ett_txbf_tree,
61506 &ett_antsel_tree,
61507 &ett_hta_cap_tree,
61508 &ett_hta_cap1_tree,
61509 &ett_hta_cap2_tree,
61510
61511 &ett_s1g_ndp,
61512 &ett_s1g_ndp_ack,
61513 &ett_s1g_ndp_cts,
61514 &ett_s1g_ndp_cf_end,
61515 &ett_s1g_ndp_ps_poll,
61516 &ett_s1g_ndp_ps_poll_ack,
61517 &ett_s1g_ndp_block_ack,
61518 &ett_s1g_ndp_beamforming_report_poll,
61519 &ett_s1g_ndp_paging,
61520 &ett_s1g_ndp_probe,
61521 &ett_pv1_sid,
61522 &ett_pv1_sid_field,
61523 &ett_pv1_seq_control,
61524 &ett_ieee80211_s1g_capabilities_info,
61525 &ett_ieee80211_s1g_capabilities,
61526 &ett_s1g_cap_byte1,
61527 &ett_s1g_cap_byte2,
61528 &ett_s1g_cap_byte3,
61529 &ett_s1g_cap_byte4,
61530 &ett_s1g_cap_byte5,
61531 &ett_s1g_cap_byte6,
61532 &ett_s1g_cap_byte7,
61533 &ett_s1g_cap_byte8,
61534 &ett_s1g_cap_byte9,
61535 &ett_s1g_cap_byte10,
61536 &ett_ieee80211_s1g_sup_mcs_and_nss_set,
61537 &ett_s1g_mcs_and_mcs_set,
61538 &ett_s1g_operation_info,
61539 &ett_s1g_channel_width,
61540 &ett_s1g_subchannel_selective_transmission,
61541 &ett_s1g_raw_assignment,
61542 &ett_s1g_raw_assn_tree,
61543 &ett_s1g_raw_control,
61544 &ett_s1g_raw_slot_def,
61545 &ett_s1g_raw_group_subfield,
61546 &ett_s1g_raw_channel_indication,
61547 &ett_s1g_page_slice_control,
61548 &ett_s1g_aid_request_mode,
61549 &ett_s1g_aid_characteristic,
61550 &ett_s1g_sector_operation,
61551 &ett_tack_info,
61552 &ett_ieee80211_s1g_auth_control,
61553 &ett_s1g_relay_control,
61554 &ett_s1g_relay_function,
61555 &ett_ieee80211_s1g_addr_list,
61556 &ett_ieee80211_s1g_reach_addr,
61557 &ett_s1g_relay_discovery_control,
61558 &ett_ieee80211_s1g_aid_entry,
61559 &ett_s1g_probe_resp_subfield_0,
61560 &ett_s1g_header_comp_control,
61561 &ett_pv1_mgmt_action,
61562 &ett_pv1_mgmt_action_no_ack,
61563 &ett_pv1_cntl_stack,
61564 &ett_pv1_cntl_bat,
61565
61566 &ett_htc_tree,
61567 &ett_htc_he_a_control,
61568 &ett_mfb_subtree,
61569 &ett_lac_subtree,
61570 &ett_ieee80211_a_control_padding,
61571 &ett_ieee80211_a_control_ones,
61572 &ett_ieee80211_triggered_response_schedule,
61573 &ett_ieee80211_control_om,
61574 &ett_ieee80211_hla_control,
61575 &ett_ieee80211_buffer_status_report,
61576 &ett_ieee80211_control_uph,
61577 &ett_ieee80211_buffer_control_bqr,
61578 &ett_ieee80211_control_cci,
61579 &ett_ieee80211_control_eht_om,
61580 &ett_ieee80211_control_srs,
61581 &ett_ieee80211_control_aar,
61582
61583 &ett_vht_cap_tree,
61584 &ett_vht_mcsset_tree,
61585 &ett_vht_rx_mcsbit_tree,
61586 &ett_vht_tx_mcsbit_tree,
61587 &ett_vht_basic_mcsbit_tree,
61588 &ett_vht_op_tree,
61589 &ett_vht_tpe_info_tree,
61590 &ett_tpe_psd,
61591
61592 &ett_vht_ranging_annc,
61593
61594 &ett_ff_he_action,
61595 &ett_ff_protected_he_action,
61596 &ett_ff_protected_eht_action,
61597 &ett_ff_he_mimo_control,
61598 &ett_ff_he_mimo_beamforming_report_snr,
61599 &ett_ff_he_mimo_feedback_matrices,
61600
61601 &ett_ff_vhtmimo_cntrl,
61602 &ett_ff_vhtmimo_beamforming_report,
61603 &ett_ff_vhtmimo_beamforming_report_snr,
61604 &ett_ff_vhtmimo_beamforming_angle,
61605 &ett_ff_vhtmimo_beamforming_report_feedback_matrices,
61606 &ett_ff_vhtmu_exclusive_beamforming_report_matrices,
61607
61608 &ett_vht_grpidmgmt,
61609 &ett_vht_msa,
61610 &ett_vht_upa,
61611
61612 &ett_ht_operation_info_delimiter1_tree,
61613 &ett_ht_operation_info_delimiter2_tree,
61614 &ett_ht_operation_info_delimiter3_tree,
61615
61616 &ett_ff_ftm_param_delim1,
61617 &ett_ff_ftm_param_delim2,
61618 &ett_ff_ftm_param_delim3,
61619 &ett_ff_ftm_tod_err1,
61620 &ett_ff_ftm_toa_err1,
61621 &ett_tag_ranging,
61622 &ett_tag_ranging_ntb,
61623 &ett_tag_ranging_secure_he_ltf,
61624
61625 &ett_ranging_subelement_tree,
61626
61627 &ett_tag_direct_meas_results,
61628
61629 &ett_rsta_avail_header,
61630 &ett_rsta_avail_tree,
61631 &ett_rsta_avail_subfield,
61632
61633 &ett_pasn_parameters,
61634 &ett_pasn_comeback_tree,
61635 &ett_pasn_auth_frame,
61636
61637 /* 802.11be tree */
61638 &ett_eht_multi_link_control,
61639 &ett_eht_multi_link_common_info,
61640 &ett_eht_multi_link_common_info_link_id,
61641 &ett_eht_multi_link_common_info_medium_sync,
61642 &ett_eht_multi_link_common_info_eml_capa,
61643 &ett_eht_multi_link_common_info_mld_capa,
61644 &ett_eht_multi_link_common_info_ext_mld_capa,
61645 &ett_eht_multi_link_per_sta,
61646 &ett_eht_multi_link_subelt,
61647 &ett_eht_multi_link_sta_control,
61648 &ett_eht_multi_link_per_sta_info,
61649 &ett_eht_multi_link_sta_dtim,
61650 &ett_eht_multi_link_reconf_oper_param,
61651 &ett_eht_multi_link_reconfig_presence_indi,
61652 &ett_eht_multi_link_reconfig_operation_para_info,
61653 &ett_eht_operation_params,
61654 &ett_eht_operation_control,
61655 &ett_eht_mac_capa,
61656 &ett_eht_phy_capa,
61657 &ett_eht_phy_bits_0_15,
61658 &ett_eht_phy_bits_16_31,
61659 &ett_eht_phy_bits_32_39,
61660 &ett_eht_phy_bits_40_63,
61661 &ett_eht_phy_bits_64_71,
61662 &ett_eht_phy_mcs_nss,
61663 &ett_eht_phy_mcs_nss_set,
61664 &ett_eht_ttl_mapping,
61665 &ett_eht_ttl_mapping_link_mapping,
61666 &ett_eht_eht_multi_link_tc,
61667 &ett_eht_qos_characteristics,
61668 &ett_eht_aid_bmapctl_tree,
61669 &ett_eht_bw_indication_param,
61670 &ett_eht_eml_control,
61671 &ett_eht_eml_control_link_map,
61672 &ett_eht_eml_control_mcs_map_count,
61673 &ett_eht_emlsr_para_update,
61674 &ett_eht_mimo_ctrl,
61675 &ett_eht_beamforming_rpt_ru_index,
61676 &ett_eht_beamforming_feedback_tree,
61677 &ett_ff_eht_mimo_beamforming_report_snr,
61678 &ett_ff_eht_mimo_mu_exclusive_report,
61679 &ett_eht_mu_exclusive_beamforming_rpt_ru_index,
61680 &ett_eht_reconfig_status_list,
61681 &ett_eht_group_key_data,
61682
61683 &ett_tag_measure_request_mode_tree,
61684 &ett_tag_measure_request_type_tree,
61685 &ett_tag_measure_request_sub_element_tree,
61686 &ett_tag_measure_report_mode_tree,
61687 &ett_tag_measure_report_type_tree,
61688 &ett_tag_measure_report_basic_map_tree,
61689 &ett_tag_measure_report_rpi_tree,
61690 &ett_tag_measure_report_frame_tree,
61691 &ett_tag_measure_report_sub_element_tree,
61692 &ett_tag_measure_reported_frame_tree,
61693 &ett_tag_measure_reported_frame_frag_id_tree,
61694 &ett_tag_measure_reported_lci_z_tree,
61695 &ett_tag_measure_reported_lci_urp_tree,
61696 &ett_tag_bss_bitmask_tree,
61697 &ett_tag_dfs_map_tree,
61698 &ett_tag_dfs_map_flags_tree,
61699 &ett_tag_erp_info_tree,
61700 &ett_tag_ex_cap1,
61701 &ett_tag_ex_cap2,
61702 &ett_tag_ex_cap3,
61703 &ett_tag_ex_cap4,
61704 &ett_tag_ex_cap5,
61705 &ett_tag_ex_cap6,
61706 &ett_tag_ex_cap7,
61707 &ett_tag_ex_cap8,
61708 &ett_tag_ex_cap89,
61709 &ett_tag_ex_cap10,
61710 &ett_tag_ex_cap11,
61711 &ett_tag_ex_cap12,
61712 &ett_tag_ex_cap13,
61713 &ett_tag_ex_cap14,
61714
61715 &ett_tag_rm_cap1,
61716 &ett_tag_rm_cap2,
61717 &ett_tag_rm_cap3,
61718 &ett_tag_rm_cap4,
61719 &ett_tag_rm_cap5,
61720
61721 &ett_tag_rsnx_octet1,
61722 &ett_tag_rsnx_octet2,
61723
61724 &ett_tag_multiple_bssid_subelem_tree,
61725
61726 &ett_tag_20_40_bc,
61727
61728 &ett_tag_intolerant_tree,
61729
61730 &ett_tag_tclas_mask_tree,
61731
61732 &ett_tag_supported_channels,
61733
61734 &ett_tag_neighbor_report_bssid_info_tree,
61735 &ett_tag_neighbor_report_bssid_info_capability_tree,
61736 &ett_tag_neighbor_report_subelement_tree,
61737 &ett_tag_neighbor_report_sub_tag_tree,
61738
61739 &ett_tag_wapi_param_set_akm_tree,
61740 &ett_tag_wapi_param_set_ucast_tree,
61741 &ett_tag_wapi_param_set_mcast_tree,
61742 &ett_tag_wapi_param_set_preauth_tree,
61743
61744 &ett_max_idle_period_options,
61745
61746 &ett_tag_time_adv_tree,
61747
61748 &ett_tag_he_6ghz_cap_inf_tree,
61749
61750 &ett_ff_ba_param_tree,
61751 &ett_ff_ba_ssc_tree,
61752 &ett_ff_delba_param_tree,
61753 &ett_ff_qos_info,
61754 &ett_ff_psmp_param_set,
61755 &ett_ff_mimo_cntrl,
61756 &ett_ff_ant_sel,
61757 &ett_mimo_report,
61758 &ett_ff_sm_pwr_save,
61759 &ett_ff_chan_switch_announce,
61760 &ett_ff_ht_info,
61761 &ett_ff_psmp_sta_info,
61762
61763 &ett_tpc,
61764
61765 &ett_msdu_aggregation_parent_tree,
61766 &ett_msdu_aggregation_subframe_tree,
61767
61768 &ett_80211_mgt_ie,
61769 &ett_tsinfo_tree,
61770 &ett_sched_tree,
61771
61772 &ett_fcs,
61773
61774 &ett_hs20_osu_providers_list,
61775 &ett_hs20_osu_provider_tree,
61776 &ett_hs20_friendly_names_list,
61777 &ett_hs20_friendly_name_tree,
61778 &ett_hs20_osu_provider_method_list,
61779 &ett_osu_icons_avail_list,
61780 &ett_hs20_osu_icon_tree,
61781 &ett_hs20_osu_service_desc_list,
61782 &ett_hs20_osu_service_desc_tree,
61783 &ett_hs20_venue_url,
61784 &ett_hs20_advice_of_charge,
61785 &ett_hs20_aoc_plan,
61786
61787 &ett_hs20_ofn_tree,
61788
61789 &ett_adv_proto,
61790 &ett_adv_proto_tuple,
61791 &ett_gas_query,
61792 &ett_gas_anqp,
61793 &ett_nai_realm,
61794 &ett_nai_realm_eap,
61795 &ett_tag_ric_data_desc_ie,
61796 &ett_anqp_vendor_capab,
61797
61798 &ett_osen_group_data_cipher_suite,
61799 &ett_osen_pairwise_cipher_suites,
61800 &ett_osen_pairwise_cipher_suite,
61801 &ett_osen_akm_cipher_suites,
61802 &ett_osen_akm_cipher_suite,
61803 &ett_osen_rsn_cap_tree,
61804 &ett_osen_pmkid_list,
61805 &ett_osen_pmkid_tree,
61806 &ett_osen_group_management_cipher_suite,
61807
61808 &ett_hs20_cc_proto_port_tuple,
61809
61810 &ett_tag_no_bssid_capability_dmg_bss_control_tree,
61811 &ett_ssid_list,
61812
61813 &ett_sgdsn,
61814 &ett_nintendo,
61815
61816 &ett_routerboard,
61817
61818 &ett_meru,
61819
61820 &ett_wisun_gtkl,
61821 &ett_wisun_lgtkl,
61822
61823 &ett_qos_map_set_exception,
61824 &ett_qos_map_set_range,
61825
61826 &ett_wnm_notif_subelt,
61827
61828 &ett_tag_mobility_domain_ft_capab_tree,
61829
61830 &ett_tag_ft_mic_control_tree,
61831 &ett_tag_ft_subelem_tree,
61832
61833 /* 802.11ad trees */
61834 &ett_dynamic_alloc_tree,
61835 &ett_ssw_tree,
61836 &ett_bf_tree,
61837 &ett_sswf_tree,
61838 &ett_brp_tree,
61839 &ett_blm_tree,
61840 &ett_bic_tree,
61841 &ett_dmg_params_tree,
61842 &ett_cc_tree,
61843 &ett_rcsi_tree,
61844 &ett_80211_ext,
61845 &ett_allocation_tree,
61846 &ett_sta_info,
61847
61848 &ett_ieee80211_esp,
61849 &ett_ieee80211_wfa_60g_attr,
61850 &ett_ieee80211_wfa_transition_disable_tree,
61851 &ett_gas_resp_fragment,
61852 &ett_gas_resp_fragments,
61853
61854 &ett_mbo_oce_attr,
61855 &ett_mbo_ap_cap,
61856 &ett_oce_cap,
61857 &ett_oce_metrics_cap,
61858
61859 /* 802.11 ah trees */
61860 &ett_s1g_sync_control_tree,
61861 &ett_s1g_twt_information_control,
61862 &ett_s1g_sector_id_index,
61863 &ett_twt_tear_down_tree,
61864 &ett_twt_control_field_tree,
61865 &ett_twt_req_type_tree,
61866 &ett_twt_ndp_paging_field_tree,
61867 &ett_twt_broadcast_info_tree,
61868 &ett_twt_traffic_info_tree,
61869 &ett_twt_traffic_info_control_tree,
61870
61871 /* 802.11ax trees */
61872 &ett_he_mac_capabilities,
61873 &ett_he_phy_capabilities,
61874 &ett_he_phy_cap_first_byte,
61875 &ett_he_phy_cap_chan_width_set,
61876 &ett_he_phy_cap_b8_to_b23,
61877 &ett_he_phy_cap_b24_to_b39,
61878 &ett_he_phy_cap_b40_to_b55,
61879 &ett_he_phy_cap_b56_to_b71,
61880 &ett_he_phy_cap_b72_to_b87,
61881 &ett_he_mcs_and_nss_set,
61882 &ett_he_rx_tx_he_mcs_map_lte_80,
61883 &ett_he_rx_mcs_map_lte_80,
61884 &ett_he_tx_mcs_map_lte_80,
61885 &ett_he_rx_tx_he_mcs_map_160,
61886 &ett_he_rx_mcs_map_160,
61887 &ett_he_tx_mcs_map_160,
61888 &ett_he_rx_tx_he_mcs_map_80_80,
61889 &ett_he_rx_mcs_map_80_80,
61890 &ett_he_tx_mcs_map_80_80,
61891 &ett_he_ppe_threshold,
61892 &ett_he_ppe_nss,
61893 &ett_he_ppe_ru_alloc,
61894 &ett_he_operation_params,
61895 &ett_he_bss_color_information,
61896 &ett_he_oper_basic_mcs,
61897 &ett_he_operation_vht_op_info,
61898 &ett_he_operation_6ghz,
61899 &ett_he_operation_6ghz_control,
61900 &ett_he_mu_edca_param,
61901 &ett_he_uora_tree,
61902 &ett_he_aic_aifsn,
61903 &ett_he_spatial_reuse_control,
61904 &ett_he_ess_report_info_field,
61905 &ett_he_bss_new_color_info,
61906 &ett_he_trigger_common_info,
61907 &ett_he_trigger_ranging,
61908 &ett_he_trigger_ranging_poll,
61909 &ett_he_trigger_packet_extension,
61910 &ett_he_trigger_base_common_info,
61911 &ett_he_trigger_bar_ctrl,
61912 &ett_he_trigger_bar_info,
61913 &ett_he_trigger_user_info,
61914 &ett_he_trigger_base_user_info,
61915 &ett_he_trigger_dep_basic_user_info,
61916 &ett_he_trigger_dep_nfrp_user_info,
61917 &ett_ndp_annc,
61918 &ett_ndp_vht_annc_sta_list,
61919 &ett_ndp_vht_annc_sta_info_tree,
61920 &ett_ndp_he_annc_sta_list,
61921 &ett_ndp_he_annc_sta_item,
61922 &ett_ndp_he_annc_sta_info,
61923 &ett_ndp_eht_annc_sta_list,
61924 &ett_ndp_eht_annc_sta_info,
61925 &ett_ndp_ranging_annc_sta_list,
61926 &ett_ndp_ranging_annc_sta_info,
61927 &ett_non_inheritance_element_id_list,
61928 &ett_non_inheritance_element_id_ext_list,
61929 &ett_mscs_user_prio,
61930 &ett_ieee80211_user_prio_bitmap,
61931 &ett_ieee80211_intra_access_prio,
61932
61933 &ett_ieee80211_3gpp_plmn,
61934
61935 /* 802.11ai trees */
61936 &ett_fils_indication_realm_list,
61937 &ett_fils_indication_public_key_list,
61938
61939 &ett_neighbor_ap_info,
61940 &ett_tbtt_infos,
61941 &ett_rnr_bss_params_tree,
61942 &ett_rnr_mld_params_tree,
61943
61944 &ett_qos_mgmt_dscp_policy_capabilities,
61945 &ett_qos_mgmt_pol_capa,
61946 &ett_qos_mgmt_attributes,
61947 &ett_qos_mgmt_dscp_policy,
61948 &ett_qos_mgmt_tclas,
61949 &ett_qos_mgmt_domain_name,
61950 &ett_qos_mgmt_unknown_attribute,
61951 &ett_dscp_policy_status_list,
61952 &ett_pol_rqst_cont_tree,
61953 &ett_pol_resp_cont_tree,
61954
61955 &ett_ff_fils_discovery_frame_control,
61956 &ett_ff_fils_discovery_capability,
61957
61958 &ett_ff_fils_req_params,
61959 &ett_ff_fils_req_params_fils_criteria,
61960
61961 &ett_nonap_sta_regulatory_conn,
61962
61963 &ett_chan_usage,
61964 };
61965
61966 static ei_register_info ei[] = {
61967 { &ei_ieee80211_bad_length,
61968 { "ieee80211.bad_length", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61969 "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)}}
}},
61970
61971 { &ei_ieee80211_inv_val,
61972 { "ieee80211.invalid_value", PI_MALFORMED0x07000000, PI_WARN0x00600000,
61973 "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)}}
}},
61974
61975 { &ei_ieee80211_tag_number,
61976 { "wlan.tag.number.unexpected_ie", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61977 "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)}}
}},
61978
61979 { &ei_ieee80211_tag_length,
61980 { "wlan.tag.length.bad", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61981 "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)}}
}},
61982
61983 { &ei_ieee80211_extra_data,
61984 { "ieee80211.extra_data", PI_MALFORMED0x07000000, PI_WARN0x00600000,
61985 "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)}}
}},
61986
61987 { &ei_ieee80211_ff_anqp_capability,
61988 { "wlan.fixed.anqp.capability.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61989 "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)}}
}},
61990
61991 { &ei_ieee80211_ff_anqp_venue_length,
61992 { "wlan.fixed.anqp.venue.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61993 "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)}}
}},
61994
61995 { &ei_ieee80211_ff_anqp_roaming_consortium_oi_len,
61996 { "wlan.fixed.anqp.roaming_consortium.oi_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61997 "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)}}
}},
61998
61999 { &ei_ieee80211_ff_anqp_nai_field_len,
62000 { "wlan.fixed.anqp.nai_realm_list.field_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62001 "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)}}
}},
62002
62003 { &ei_ieee80211_ff_anqp_nai_realm_eap_len,
62004 { "wlan.fixed.anqp_nai_realm_list.eap_method_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62005 "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)}}
}},
62006
62007 { &ei_hs20_anqp_ofn_length,
62008 { "wlan.hs20.anqp.ofn.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62009 "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)}}
}},
62010
62011 { &ei_hs20_anqp_nai_hrq_length,
62012 { "wlan.hs20.anqp.nai_hrq.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62013 "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)}}
}},
62014
62015 { &ei_ieee80211_ff_anqp_info_length,
62016 { "wlan.fixed.anqp.info_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62017 "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)}}
}},
62018
62019 { &ei_ieee80211_not_enough_room_for_anqp_header,
62020 { "wlan.fixed.query_length_invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62021 "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)}}
}},
62022
62023 { &ei_ieee80211_ff_query_request_length,
62024 { "wlan.fixed.query_request_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62025 "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)}}
}},
62026
62027 { &ei_ieee80211_ff_query_response_length,
62028 { "wlan.fixed.query_response_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62029 "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)}}
}},
62030
62031 { &ei_ieee80211_tag_wnm_sleep_mode_no_key_data,
62032 { "wlan.wnm_sleep_mode.no_key_data", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62033 "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)}}
}},
62034
62035 { &ei_ieee80211_tdls_setup_response_malformed,
62036 { "wlan.tdls_setup_response_malformed", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62037 "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)}}
}},
62038
62039 { &ei_ieee80211_tdls_setup_confirm_malformed,
62040 { "wlan.tdls_setup_confirm_malformed", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62041 "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)}}
}},
62042
62043 { &ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype,
62044 { "wlan.wfa.ie.wme.qos_info.bad_ftype", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62045 "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)}}
}},
62046
62047 { &ei_ieee80211_qos_info_bad_ftype,
62048 { "wlan.qos_info.bad_ftype", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62049 "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)}}
}},
62050
62051 { &ei_ieee80211_qos_bad_aifsn,
62052 { "wlan.qos_info.bad_aifsn", PI_MALFORMED0x07000000, PI_WARN0x00600000,
62053 "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)}}
}},
62054
62055 { &ei_ieee80211_rsn_pcs_count,
62056 { "wlan.rsn.pcs.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62057 "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)}}
}},
62058
62059 { &ei_ieee80211_rsn_pmkid_count,
62060 { "wlan.rsn.akms.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62061 "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)}}
}},
62062
62063 { &ei_ieee80211_pmkid_count_too_large,
62064 { "wlan.rsn.pmkid.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62065 "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)}}
}},
62066
62067 { &ei_ieee80211_vht_tpe_pwr_info_count,
62068 { "wlan.vht.tpe.pwr_info.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62069 "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)}}
}},
62070
62071 { &ei_ieee80211_vht_tpe_pwr_info_unit,
62072 { "wlan.vht.tpe.pwr_info.unit.unknown", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62073 "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)}}
}},
62074
62075 { &ei_ieee80211_missing_data,
62076 { "ieee80211.missing_data", PI_MALFORMED0x07000000, PI_WARN0x00600000,
62077 "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)}}
}},
62078
62079 { &ei_ieee80211_fc_retry,
62080 { "wlan.fc.retry.expert", PI_SEQUENCE0x02000000, PI_NOTE0x00400000,
62081 "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)}}
}},
62082
62083 { &ei_ieee80211_tag_measure_request_unknown,
62084 { "wlan.measure.req.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62085 "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)}}
}},
62086
62087 { &ei_ieee80211_tag_measure_request_beacon_unknown,
62088 { "wlan.measure.req.beacon.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62089 "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)}}
}},
62090
62091 { &ei_ieee80211_tag_measure_report_unknown,
62092 { "wlan.measure.rep.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62093 "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)}}
}},
62094
62095 { &ei_ieee80211_tag_measure_report_beacon_unknown,
62096 { "wlan.measure.rep.beacon.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62097 "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)}}
}},
62098
62099 { &ei_ieee80211_tag_measure_report_lci_unknown,
62100 { "wlan.measure.rep.lci.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62101 "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)}}
}},
62102
62103 { &ei_ieee80211_tag_data,
62104 { "wlan.tag.data.undecoded", PI_UNDECODED0x05000000, PI_NOTE0x00400000,
62105 "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)}}
}},
62106
62107 { &ei_ieee80211_dmg_subtype,
62108 { "wlan.dmg_subtype.bad", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62109 "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)}}
}},
62110
62111 { &ei_ieee80211_wfa_60g_attr_len_invalid,
62112 { "wlan.60g.attr.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62113 "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)}}
}},
62114
62115 { &ei_ieee80211_vht_action,
62116 { "wlan.vht.action.undecoded", PI_UNDECODED0x05000000, PI_NOTE0x00400000,
62117 "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)}}
}},
62118
62119 { &ei_ieee80211_mesh_peering_unexpected,
62120 { "wlan.peering.unexpected", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62121 "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)}}
}},
62122
62123 { &ei_ieee80211_wfa_60g_unknown_attribute,
62124 { "wlan.attr.unknown", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62125 "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)}}
}},
62126
62127 { &ei_ieee80211_fcs,
62128 { "wlan.fcs.bad_checksum", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62129 "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)}}
}},
62130
62131 { &ei_ieee80211_mismatched_akm_suite,
62132 { "wlan.rsn.akms.mismatched", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62133 "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)}}
}},
62134
62135 { &ei_ieee80211_vs_routerboard_unexpected_len,
62136 { "wlan.vs.routerboard.unexpected_len", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
62137 "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)}}
}},
62138
62139 { &ei_ieee80211_vs_sgdsn_serialnumber_invalid_len_val,
62140 { "wlan.vs.sgdsn.tag.serialnumber.invalid_len_val", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62141 "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)}}
}},
62142
62143 { &ei_ieee80211_vs_sgdsn_serialnumber_unexpected_len_val,
62144 { "wlan.vs.sgdsn.tag.serialnumber.unexpected_len_val", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
62145 "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)}}
}},
62146
62147 { &ei_ieee80211_twt_tear_down_bad_neg_type,
62148 { "wlan.twt.tear_down_bad_neg_type", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62149 "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)}}
}},
62150
62151 { &ei_ieee80211_twt_setup_bad_command,
62152 { "wlan.twt.setup_bad_command", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62153 "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)}}
}},
62154
62155 { &ei_ieee80211_twt_bcast_info_no_term,
62156 { "wlan.twt.incorrect_length", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62157 "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)}}
}},
62158
62159 { &ei_ieee80211_invalid_control_word,
62160 { "wlan.htc.he.a_control.invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62161 "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)}}
}},
62162
62163 { &ei_ieee80211_invalid_control_id,
62164 { "wlan.htc.he.a_control.ctrl_id.invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62165 "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)}}
}},
62166
62167 { &ei_ieee80211_invalid_control_length,
62168 { "wlan.htc.he.a_control.ctrl_length.invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62169 "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)}}
}},
62170
62171 { &ei_ieee80211_htc_in_dmg_packet,
62172 { "wlan.htc_in_dmg_packet", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62173 "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)}}
}},
62174
62175 { &ei_ieee80211_eht_invalid_subelement,
62176 { "wlan.eht.invalid_subelement", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62177 "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)}}
}},
62178
62179 { &ei_ieee80211_eht_invalid_action,
62180 { "wlan.eht.invalid_action", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62181 "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)}}
}},
62182
62183 { &ei_ieee80211_eht_invalid_multi_link,
62184 { "wlan.eht.invalid_multi_link", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62185 "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)}}
}},
62186
62187 {&ei_ieee80211_eht_invalid_nc_nr,
62188 { "wlan.eht.invalid_nc_nr", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
62189 "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)}}
}},
62190 };
62191
62192 expert_module_t *expert_ieee80211;
62193
62194 module_t *wlan_module;
62195
62196 memset(&wlan_stats, 0, sizeof wlan_stats);
62197
62198 proto_aggregate = proto_register_protocol("IEEE 802.11 wireless LAN aggregate frame",
62199 "IEEE 802.11 Aggregate Data", "wlan_aggregate");
62200 proto_register_field_array(proto_aggregate, aggregate_fields, array_length(aggregate_fields)(sizeof (aggregate_fields) / sizeof (aggregate_fields)[0]));
62201
62202 proto_wlan = proto_register_protocol("IEEE 802.11 wireless LAN", "IEEE 802.11", "wlan");
62203
62204 heur_subdissector_list = register_heur_dissector_list_with_description("wlan_data", "IEEE 802.11 WLAN v0 data", proto_wlan);
62205
62206 /* Created to remove Decode As confusion */
62207 proto_centrino = proto_register_protocol("IEEE 802.11 wireless LAN (Centrino)", "IEEE 802.11 (Centrino)", "wlan_centrino");
62208 proto_register_field_array(proto_wlan, hf, array_length(hf)(sizeof (hf) / sizeof (hf)[0]));
62209 centrino_handle = register_dissector("wlan_centrino", dissect_ieee80211_centrino, proto_centrino );
62210
62211 proto_wlan_ext = proto_register_protocol("IEEE 802.11 wireless LAN extension frame",
62212 "IEEE 802.11 EXT", "wlan_ext");
62213
62214 proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
62215
62216 expert_ieee80211 = expert_register_protocol(proto_wlan);
62217 expert_register_field_array(expert_ieee80211, ei, array_length(ei)(sizeof (ei) / sizeof (ei)[0]));
62218
62219 /*
62220 * Create the hash table we will use for holding STA properties that
62221 * track newer protocol variants like S1G, DMG, etc. Use the existing
62222 * retransmit hash and equal functions.
62223 */
62224 sta_prop_hash = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(),
62225 sta_prop_hash_fn, sta_prop_equal_fn);
62226
62227 ieee80211_handle = register_dissector("wlan", dissect_ieee80211, proto_wlan);
62228 register_dissector("wlan_withfcs", dissect_ieee80211_withfcs, proto_wlan);
62229 wlan_withoutfcs_handle = register_dissector("wlan_withoutfcs", dissect_ieee80211_withoutfcs, proto_wlan);
62230 register_dissector("wlan_bsfc", dissect_ieee80211_bsfc, proto_wlan);
62231 register_dissector("wlan_noqos", dissect_ieee80211_noqos, proto_wlan);
62232
62233 register_capture_dissector("ieee80211", capture_ieee80211, proto_wlan);
62234 register_capture_dissector("ieee80211_datapad", capture_ieee80211_datapad, proto_wlan);
62235
62236 reassembly_table_register(&wlan_reassembly_table,
62237 &addresses_reassembly_table_functions);
62238 register_init_routine(wlan_retransmit_init);
62239 reassembly_table_register(&gas_reassembly_table,
62240 &addresses_reassembly_table_functions);
62241
62242 wlan_tap = register_tap("wlan");
62243 register_conversation_table(proto_wlan, true1, wlan_conversation_packet, wlan_endpoint_packet);
62244
62245 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,
62246 ether_len, ether_name_resolution_str, ether_name_resolution_len);
62247 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,
62248 ether_len, ether_name_resolution_str, ether_name_resolution_len);
62249
62250 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,
62251 ether_len, ether_name_resolution_str, ether_name_resolution_len);
62252
62253 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));
62254
62255 tagged_field_table = register_dissector_table("wlan.tag.number", "IEEE 802.11 Fields", proto_wlan, FT_UINT8, BASE_DEC);
62256 vendor_specific_action_table = register_dissector_table("wlan.action.vendor_specific", "IEEE802.11 Vendor Specific Action", proto_wlan, FT_UINT24, BASE_HEX);
62257 wifi_alliance_action_subtype_table = register_dissector_table("wlan.action.wifi_alliance.subtype", "Wi-Fi Alliance Action Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62258 vendor_specific_anqp_info_table = register_dissector_table("wlan.anqp.vendor_specific", "IEEE802.11 ANQP information Vendor Specific", proto_wlan, FT_UINT24, BASE_HEX);
62259 wifi_alliance_anqp_info_table = register_dissector_table("wlan.anqp.wifi_alliance.subtype", "Wi-Fi Alliance ANQP Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62260 wifi_alliance_ie_table = register_dissector_table("wlan.ie.wifi_alliance.subtype", "Wi-Fi Alliance IE Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62261 wifi_alliance_public_action_table = register_dissector_table("wlan.pa.wifi_alliance.subtype", "Wi-Fi Alliance PA Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62262
62263 /* Register configuration options */
62264 wlan_module = prefs_register_protocol(proto_wlan, init_wepkeys);
62265 prefs_register_bool_preference(wlan_module, "defragment",
62266 "Reassemble fragmented 802.11 datagrams",
62267 "Whether fragmented 802.11 datagrams should be reassembled",
62268 &wlan_defragment);
62269
62270 prefs_register_bool_preference(wlan_module, "ignore_draft_ht",
62271 "Ignore vendor-specific HT elements",
62272 "Don't dissect 802.11n draft HT elements (which might contain duplicate information).",
62273 &wlan_ignore_draft_ht);
62274
62275 prefs_register_bool_preference(wlan_module, "retransmitted",
62276 "Call subdissector for retransmitted 802.11 frames",
62277 "Whether retransmitted 802.11 frames should be subdissected",
62278 &wlan_subdissector);
62279
62280 prefs_register_bool_preference(wlan_module, "check_fcs",
62281 "Assume packets have FCS",
62282 "Some 802.11 cards include the FCS at the end of a packet, others do not.",
62283 &wlan_check_fcs);
62284
62285 prefs_register_bool_preference(wlan_module, "check_checksum",
62286 "Validate the FCS checksum if possible",
62287 "Whether to validate the FCS checksum or not.",
62288 &wlan_check_checksum);
62289
62290 prefs_register_enum_preference(wlan_module, "ignore_wep",
62291 "Ignore the Protection bit",
62292 "Some 802.11 cards leave the Protection bit set even though the packet is decrypted, "
62293 "and some also leave the IV (initialization vector).",
62294 &wlan_ignore_prot, wlan_ignore_prot_options, true1);
62295
62296 prefs_register_bool_preference(wlan_module, "wpa_key_mic_len_enable",
62297 "Enable WPA Key MIC Length override",
62298 "Whether to enable MIC Length override or not.",
62299 &wlan_key_mic_len_enable);
62300
62301 prefs_register_uint_preference(wlan_module, "wpa_key_mic_len",
62302 "WPA Key MIC Length override",
62303 "Some Key MIC lengths are greater than 16 bytes, so set the length you require",
62304 10, &wlan_key_mic_len);
62305
62306 prefs_register_bool_preference(wlan_module, "treat_as_s1g",
62307 "Treat as S1G", "Treat all WiFi packets as S1G",
62308 &treat_as_s1g);
62309
62310 prefs_register_obsolete_preference(wlan_module, "wep_keys");
62311
62312 prefs_register_bool_preference(wlan_module, "enable_decryption",
62313 "Enable decryption", "Enable WEP and WPA/WPA2 decryption",
62314 &enable_decryption);
62315
62316 wep_uat = uat_new("WEP and WPA Decryption Keys",
62317 sizeof(uat_wep_key_record_t), /* record size */
62318 "80211_keys", /* filename */
62319 true1, /* from_profile */
62320 &uat_wep_key_records, /* data_ptr */
62321 &num_wepkeys_uat, /* numitems_ptr */
62322 UAT_AFFECTS_DISSECTION0x00000001, /* affects dissection of packets, but not set of named fields */
62323 "Ch80211Keys", /* help */
62324 uat_wep_key_record_copy_cb, /* copy callback */
62325 uat_wep_key_record_update_cb, /* update callback */
62326 uat_wep_key_record_free_cb, /* free callback */
62327 init_wepkeys, /* post update callback - update the WEP/WPA keys */
62328 NULL((void*)0), /* reset callback */
62329 wep_uat_flds); /* UAT field definitions */
62330
62331 prefs_register_uat_preference(wlan_module,
62332 "wep_key_table",
62333 "Decryption keys",
62334 "WEP and pre-shared WPA keys\n"
62335 "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
62336 "010203040506070809101111213 (104/128-bit WEP),\n"
62337 "MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
62338 "0102030405...6061626364 (WPA + 256-bit key)."
62339 "Invalid keys will be ignored.",
62340 wep_uat);
62341}
62342
62343void
62344proto_register_wlan_rsna_eapol(void)
62345{
62346
62347 static hf_register_info hf[] = {
62348 {&hf_wlan_rsna_eapol_wpa_keydes_msgnr,
62349 {"Message number", "wlan_rsna_eapol.keydes.msgnr",
62350 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
62351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62352
62353 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo,
62354 {"Key Information", "wlan_rsna_eapol.keydes.key_info",
62355 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
62356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62357
62358 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version,
62359 {"Key Descriptor Version", "wlan_rsna_eapol.keydes.key_info.keydes_version",
62360 FT_UINT16, BASE_DEC, VALS(keydes_version_vals)((0 ? (const struct _value_string*)0 : ((keydes_version_vals)
)))
, KEY_INFO_KEYDES_VERSION_MASK0x0007,
62361 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62362
62363 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type,
62364 {"Key Type", "wlan_rsna_eapol.keydes.key_info.key_type",
62365 FT_BOOLEAN, 16, TFS(&keyinfo_key_type_tfs)((0 ? (const struct true_false_string*)0 : ((&keyinfo_key_type_tfs
))))
, KEY_INFO_KEY_TYPE_MASK0x0008,
62366 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62367
62368 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index,
62369 {"Key Index", "wlan_rsna_eapol.keydes.key_info.key_index",
62370 FT_UINT16, BASE_DEC, NULL((void*)0), KEY_INFO_KEY_INDEX_MASK0x0030,
62371 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62372
62373 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install,
62374 {"Install", "wlan_rsna_eapol.keydes.key_info.install",
62375 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_INSTALL_MASK0x0040,
62376 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62377
62378 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack,
62379 {"Key ACK", "wlan_rsna_eapol.keydes.key_info.key_ack",
62380 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_KEY_ACK_MASK0x0080,
62381 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62382
62383 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic,
62384 {"Key MIC", "wlan_rsna_eapol.keydes.key_info.key_mic",
62385 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_KEY_MIC_MASK0x0100,
62386 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62387
62388 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure,
62389 {"Secure", "wlan_rsna_eapol.keydes.key_info.secure",
62390 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_SECURE_MASK0x0200,
62391 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62392
62393 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error,
62394 {"Error", "wlan_rsna_eapol.keydes.key_info.error",
62395 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_ERROR_MASK0x0400,
62396 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62397
62398 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request,
62399 {"Request", "wlan_rsna_eapol.keydes.key_info.request",
62400 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_REQUEST_MASK0x0800,
62401 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62402
62403 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data,
62404 {"Encrypted Key Data", "wlan_rsna_eapol.keydes.key_info.encrypted_key_data",
62405 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000,
62406 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62407
62408 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message,
62409 {"SMK Message", "wlan_rsna_eapol.keydes.key_info.smk_message",
62410 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_SMK_MESSAGE_MASK0x2000,
62411 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62412
62413 {&hf_wlan_rsna_eapol_keydes_key_len,
62414 {"Key Length", "eapol.keydes.key_len",
62415 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
62416 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62417
62418 {&hf_wlan_rsna_eapol_keydes_replay_counter,
62419 {"Replay Counter", "eapol.keydes.replay_counter",
62420 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
62421 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62422
62423 {&hf_wlan_rsna_eapol_keydes_key_iv,
62424 {"Key IV", "eapol.keydes.key_iv",
62425 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62426 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62427
62428 {&hf_wlan_rsna_eapol_wpa_keydes_nonce,
62429 {"WPA Key Nonce", "wlan_rsna_eapol.keydes.nonce",
62430 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62431 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62432
62433 {&hf_wlan_rsna_eapol_wpa_keydes_rsc,
62434 {"WPA Key RSC", "wlan_rsna_eapol.keydes.rsc",
62435 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62436 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62437
62438 {&hf_wlan_rsna_eapol_wpa_keydes_id,
62439 {"WPA Key ID", "wlan_rsna_eapol.keydes.id",
62440 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62441 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62442
62443 {&hf_wlan_rsna_eapol_wpa_keydes_mic,
62444 {"WPA Key MIC", "wlan_rsna_eapol.keydes.mic",
62445 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62446 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62447
62448 {&hf_wlan_rsna_eapol_wpa_keydes_data_len,
62449 {"WPA Key Data Length", "wlan_rsna_eapol.keydes.data_len",
62450 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
62451 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62452
62453 {&hf_wlan_rsna_eapol_wpa_keydes_data,
62454 {"WPA Key Data", "wlan_rsna_eapol.keydes.data",
62455 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62456 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62457
62458 {&hf_wlan_rsna_eapol_wpa_keydes_padding,
62459 {"WPA Key Data Padding", "wlan_rsna_eapol.keydes.padding",
62460 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62461 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62462
62463 {&hf_wlan_rsna_eapol_wpa_extraneous,
62464 {"WPA EAPOL Extraneous Data", "wlan_rsna_eapol.extraneous",
62465 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62466 };
62467
62468 static int *ett[] = {
62469 &ett_keyinfo,
62470 &ett_wlan_rsna_eapol_keydes_data,
62471 };
62472
62473 proto_wlan_rsna_eapol = proto_register_protocol("IEEE 802.11 RSNA EAPOL key",
62474 "802.11 RSNA EAPOL", "wlan_rsna_eapol");
62475 proto_register_field_array(proto_wlan_rsna_eapol, hf, array_length(hf)(sizeof (hf) / sizeof (hf)[0]));
62476
62477 proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
62478}
62479
62480void
62481proto_reg_handoff_ieee80211(void)
62482{
62483 dissector_handle_t data_encap_handle;
62484 dissector_handle_t wlan_rsna_eapol_wpa_key_handle, wlan_rsna_eapol_rsn_key_handle;
62485 capture_dissector_handle_t ieee80211_cap_handle;
62486
62487 dissector_add_for_decode_as_with_preference("udp.port", ieee80211_handle);
62488 /*
62489 * Get handles for the 802.2 (LPD) LLC, EPD LLC, IPX and Ethernet
62490 * dissectors.
62491 */
62492 llc_handle = find_dissector_add_dependency("llc", proto_wlan);
62493 epd_llc_handle = find_dissector_add_dependency("epd_llc", proto_wlan);
62494 ipx_handle = find_dissector_add_dependency("ipx", proto_wlan);
62495 eth_withoutfcs_handle = find_dissector_add_dependency("eth_withoutfcs", proto_wlan);
62496
62497 proto_eapol = proto_get_id_by_filter_name("eapol");
62498
62499 /*
62500 * Get the Ethertype dissector table.
62501 */
62502 ethertype_subdissector_table = find_dissector_table("ethertype");
62503
62504 llc_cap_handle = find_capture_dissector("llc");
62505 ipx_cap_handle = find_capture_dissector("ipx");
62506
62507 dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_1120, ieee80211_handle);
62508
62509 dissector_add_uint("ethertype", ETHERTYPE_CENTRINO_PROMISC0x2452, centrino_handle);
62510
62511 ieee80211_cap_handle = find_capture_dissector("ieee80211");
62512 capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_1120, ieee80211_cap_handle);
62513 capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11_WITH_RADIO22, ieee80211_cap_handle);
62514 capture_dissector_add_uint("ppi", 105 /* DLT_DLT_IEEE802_11 */, ieee80211_cap_handle);
62515
62516 /* Register handoff to Aruba GRE */
62517 dissector_add_uint("gre.proto", GRE_ARUBA_82000x8200, wlan_withoutfcs_handle);
62518 dissector_add_uint("gre.proto", GRE_ARUBA_82100x8210, wlan_withoutfcs_handle);
62519 dissector_add_uint("gre.proto", GRE_ARUBA_82200x8220, wlan_withoutfcs_handle);
62520 dissector_add_uint("gre.proto", GRE_ARUBA_82300x8230, wlan_withoutfcs_handle);
62521 dissector_add_uint("gre.proto", GRE_ARUBA_82400x8240, wlan_withoutfcs_handle);
62522 dissector_add_uint("gre.proto", GRE_ARUBA_82500x8250, wlan_withoutfcs_handle);
62523 dissector_add_uint("gre.proto", GRE_ARUBA_82600x8260, wlan_withoutfcs_handle);
62524 dissector_add_uint("gre.proto", GRE_ARUBA_82700x8270, wlan_withoutfcs_handle);
62525 dissector_add_uint("gre.proto", GRE_ARUBA_82800x8280, wlan_withoutfcs_handle);
62526 dissector_add_uint("gre.proto", GRE_ARUBA_82900x8290, wlan_withoutfcs_handle);
62527 dissector_add_uint("gre.proto", GRE_ARUBA_82A00x82A0, wlan_withoutfcs_handle);
62528 dissector_add_uint("gre.proto", GRE_ARUBA_82B00x82B0, wlan_withoutfcs_handle);
62529 dissector_add_uint("gre.proto", GRE_ARUBA_82C00x82C0, wlan_withoutfcs_handle);
62530 dissector_add_uint("gre.proto", GRE_ARUBA_82D00x82D0, wlan_withoutfcs_handle);
62531 dissector_add_uint("gre.proto", GRE_ARUBA_82E00x82E0, wlan_withoutfcs_handle);
62532 dissector_add_uint("gre.proto", GRE_ARUBA_82F00x82F0, wlan_withoutfcs_handle);
62533 dissector_add_uint("gre.proto", GRE_ARUBA_83000x8300, wlan_withoutfcs_handle);
62534 dissector_add_uint("gre.proto", GRE_ARUBA_83100x8310, wlan_withoutfcs_handle);
62535 dissector_add_uint("gre.proto", GRE_ARUBA_83200x8320, wlan_withoutfcs_handle);
62536 dissector_add_uint("gre.proto", GRE_ARUBA_83300x8330, wlan_withoutfcs_handle);
62537 dissector_add_uint("gre.proto", GRE_ARUBA_83400x8340, wlan_withoutfcs_handle);
62538 dissector_add_uint("gre.proto", GRE_ARUBA_83500x8350, wlan_withoutfcs_handle);
62539 dissector_add_uint("gre.proto", GRE_ARUBA_83600x8360, wlan_withoutfcs_handle);
62540 dissector_add_uint("gre.proto", GRE_ARUBA_83700x8370, wlan_withoutfcs_handle);
62541 dissector_add_uint("gre.proto", GRE_ARUBA_91000x9100, wlan_withoutfcs_handle);
62542 dissector_add_uint("gre.proto", GRE_ARUBA_91100x9110, wlan_withoutfcs_handle);
62543 dissector_add_uint("gre.proto", GRE_ARUBA_91200x9120, wlan_withoutfcs_handle);
62544 dissector_add_uint("gre.proto", GRE_ARUBA_91300x9130, wlan_withoutfcs_handle);
62545 dissector_add_uint("gre.proto", GRE_ARUBA_91400x9140, wlan_withoutfcs_handle);
62546 dissector_add_uint("gre.proto", GRE_ARUBA_91500x9150, wlan_withoutfcs_handle);
62547 dissector_add_uint("gre.proto", GRE_ARUBA_91600x9160, wlan_withoutfcs_handle);
62548 dissector_add_uint("gre.proto", GRE_ARUBA_91700x9170, wlan_withoutfcs_handle);
62549 dissector_add_uint("gre.proto", GRE_ARUBA_91800x9180, wlan_withoutfcs_handle);
62550 dissector_add_uint("gre.proto", GRE_ARUBA_91900x9190, wlan_withoutfcs_handle);
62551 dissector_add_uint("gre.proto", GRE_ARUBA_91A00x91A0, wlan_withoutfcs_handle);
62552 dissector_add_uint("gre.proto", GRE_ARUBA_91B00x91B0, wlan_withoutfcs_handle);
62553 dissector_add_uint("gre.proto", GRE_ARUBA_91C00x91C0, wlan_withoutfcs_handle);
62554 dissector_add_uint("gre.proto", GRE_ARUBA_91D00x91D0, wlan_withoutfcs_handle);
62555 dissector_add_uint("gre.proto", GRE_ARUBA_91E00x91E0, wlan_withoutfcs_handle);
62556 dissector_add_uint("gre.proto", GRE_ARUBA_91F00x91F0, wlan_withoutfcs_handle);
62557
62558 data_encap_handle = create_dissector_handle(dissect_data_encap, proto_wlan);
62559 dissector_add_uint("ethertype", ETHERTYPE_IEEE80211_DATA_ENCAP0x890d,
62560 data_encap_handle);
62561
62562 /*
62563 * EAPOL key descriptor types.
62564 */
62565 wlan_rsna_eapol_wpa_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
62566 proto_wlan_rsna_eapol);
62567 dissector_add_uint("eapol.keydes.type", EAPOL_WPA_KEY254, wlan_rsna_eapol_wpa_key_handle);
62568 wlan_rsna_eapol_rsn_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
62569 proto_wlan_rsna_eapol);
62570 dissector_add_uint("eapol.keydes.type", EAPOL_RSN_KEY2, wlan_rsna_eapol_rsn_key_handle);
62571
62572 dissector_add_uint("sflow_245.header_protocol", SFLOW_5_HEADER_80211_MAC15, wlan_withoutfcs_handle);
62573
62574 /* Tagged fields */
62575 /* XXX - for now, do it without pinos so the protocol is -1 */
62576 dissector_add_uint("wlan.tag.number", TAG_SSID0, create_dissector_handle(ieee80211_tag_ssid, -1));
62577 dissector_add_uint("wlan.tag.number", TAG_SUPP_RATES1, create_dissector_handle(ieee80211_tag_supp_rates, -1));
62578 dissector_add_uint("wlan.tag.number", TAG_FH_PARAMETER2, create_dissector_handle(ieee80211_tag_fh_parameter, -1));
62579 dissector_add_uint("wlan.tag.number", TAG_DS_PARAMETER3, create_dissector_handle(ieee80211_tag_ds_parameter, -1));
62580 dissector_add_uint("wlan.tag.number", TAG_CF_PARAMETER4, create_dissector_handle(ieee80211_tag_cf_parameter, -1));
62581 dissector_add_uint("wlan.tag.number", TAG_TIM5, create_dissector_handle(ieee80211_tag_tim, -1));
62582 dissector_add_uint("wlan.tag.number", TAG_IBSS_PARAMETER6, create_dissector_handle(ieee80211_tag_ibss_parameter, -1));
62583 dissector_add_uint("wlan.tag.number", TAG_COUNTRY_INFO7, create_dissector_handle(ieee80211_tag_country_info, -1));
62584 dissector_add_uint("wlan.tag.number", TAG_FH_HOPPING_PARAMETER8, create_dissector_handle(ieee80211_tag_fh_hopping_parameter, -1));
62585 dissector_add_uint("wlan.tag.number", TAG_FH_HOPPING_TABLE9, create_dissector_handle(ieee80211_tag_fh_hopping_table, -1));
62586 dissector_add_uint("wlan.tag.number", TAG_REQUEST10, create_dissector_handle(ieee80211_tag_request, -1));
62587 dissector_add_uint("wlan.tag.number", TAG_QBSS_LOAD11, create_dissector_handle(ieee80211_tag_qbss_load, -1));
62588 dissector_add_uint("wlan.tag.number", TAG_EDCA_PARAM_SET12, create_dissector_handle(ieee80211_tag_edca_param_set, -1));
62589 dissector_add_uint("wlan.tag.number", TAG_TSPEC13, create_dissector_handle(ieee80211_tag_tspec, -1));
62590 dissector_add_uint("wlan.tag.number", TAG_TCLAS14, create_dissector_handle(ieee80211_tag_tclas, -1));
62591 dissector_add_uint("wlan.tag.number", TAG_SCHEDULE15, create_dissector_handle(ieee80211_tag_schedule, -1));
62592 dissector_add_uint("wlan.tag.number", TAG_CHALLENGE_TEXT16, create_dissector_handle(ieee80211_tag_challenge_text, -1));
62593 dissector_add_uint("wlan.tag.number", TAG_POWER_CONSTRAINT32, create_dissector_handle(ieee80211_tag_power_constraint, -1));
62594 dissector_add_uint("wlan.tag.number", TAG_POWER_CAPABILITY33, create_dissector_handle(ieee80211_tag_power_capability, -1));
62595 dissector_add_uint("wlan.tag.number", TAG_TPC_REQUEST34, create_dissector_handle(ieee80211_tag_tpc_request, -1));
62596 dissector_add_uint("wlan.tag.number", TAG_TPC_REPORT35, create_dissector_handle(ieee80211_tag_tpc_report, -1));
62597 dissector_add_uint("wlan.tag.number", TAG_SUPPORTED_CHANNELS36, create_dissector_handle(ieee80211_tag_supported_channels, -1));
62598 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_ANN37, create_dissector_handle(ieee80211_tag_switch_ann, -1));
62599 dissector_add_uint("wlan.tag.number", TAG_MEASURE_REQ38, create_dissector_handle(ieee80211_tag_measure_req, -1));
62600 dissector_add_uint("wlan.tag.number", TAG_MEASURE_REP39, create_dissector_handle(ieee80211_tag_measure_rep, -1));
62601 dissector_add_uint("wlan.tag.number", TAG_QUIET40, create_dissector_handle(ieee80211_tag_quiet, -1));
62602 dissector_add_uint("wlan.tag.number", TAG_IBSS_DFS41, create_dissector_handle(ieee80211_tag_ibss_dfs, -1));
62603 dissector_add_uint("wlan.tag.number", TAG_ERP_INFO42, create_dissector_handle(ieee80211_tag_erp_info, -1));
62604 dissector_add_uint("wlan.tag.number", TAG_ERP_INFO_OLD47, create_dissector_handle(ieee80211_tag_erp_info, -1));
62605 dissector_add_uint("wlan.tag.number", TAG_TS_DELAY43, create_dissector_handle(ieee80211_tag_ts_delay, -1));
62606 dissector_add_uint("wlan.tag.number", TAG_TCLAS_PROCESS44, create_dissector_handle(ieee80211_tag_tclas_process, -1));
62607 dissector_add_uint("wlan.tag.number", TAG_QOS_CAPABILITY46, create_dissector_handle(ieee80211_tag_qos_capability, -1));
62608 dissector_add_uint("wlan.tag.number", TAG_RSN_IE48, create_dissector_handle(ieee80211_tag_rsn_ie, -1));
62609 dissector_add_uint("wlan.tag.number", TAG_EXT_SUPP_RATES50, create_dissector_handle(ieee80211_tag_ext_supp_rates, -1));
62610 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_CAPABILITIES127, create_dissector_handle(dissect_extended_capabilities_ie, -1));
62611 dissector_add_uint("wlan.tag.number", TAG_CISCO_CCX1_CKIP133, create_dissector_handle(ieee80211_tag_cisco_ccx1_ckip, -1));
62612 dissector_add_uint("wlan.tag.number", TAG_VHT_CAPABILITY191, create_dissector_handle(dissect_vht_capability_ie, -1));
62613 dissector_add_uint("wlan.tag.number", TAG_VHT_OPERATION192, create_dissector_handle(dissect_vht_operation_ie, -1));
62614 dissector_add_uint("wlan.tag.number", TAG_EXT_BSS_LOAD193, create_dissector_handle(dissect_ext_bss_load, -1));
62615 dissector_add_uint("wlan.tag.number", TAG_WIDE_BW_CHANNEL_SWITCH194, create_dissector_handle(dissect_wide_bw_channel_switch, -1));
62616 dissector_add_uint("wlan.tag.number", TAG_TX_PWR_ENVELOPE195, create_dissector_handle(dissect_vht_tx_pwr_envelope, -1));
62617 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_WRAPPER196, create_dissector_handle(dissect_channel_switch_wrapper, -1));
62618 dissector_add_uint("wlan.tag.number", TAG_OPERATING_MODE_NOTIFICATION199, create_dissector_handle(dissect_operating_mode_notification, -1));
62619 dissector_add_uint("wlan.tag.number", TAG_REDUCED_NEIGHBOR_REPORT201, create_dissector_handle(dissect_reduced_neighbor_report, -1));
62620 dissector_add_uint("wlan.tag.number", TAG_FINE_TIME_MEASUREMENT_PARAM206, create_dissector_handle(dissect_ftm_params, -1));
62621 dissector_add_uint("wlan.tag.number", TAG_S1G_CAPABILITIES217, create_dissector_handle(dissect_s1g_capabilities, -1));
62622 dissector_add_uint("wlan.tag.number", TAG_SUBCHANNEL_SELECTIVE_TRANSMISSION220, create_dissector_handle(dissect_subchannel_selective_transmission, -1));
62623 dissector_add_uint("wlan.tag.number", TAG_S1G_OPEN_LOOP_LINK_MARGIN_INDEX207, create_dissector_handle(dissect_s1g_open_loop_link_margin_index, -1));
62624 dissector_add_uint("wlan.tag.number", TAG_RPS208, create_dissector_handle(dissect_rps, -1));
62625 dissector_add_uint("wlan.tag.number", TAG_PAGE_SLICE209, create_dissector_handle(dissect_page_slice, -1));
62626 dissector_add_uint("wlan.tag.number", TAG_AID_REQUEST210, create_dissector_handle(dissect_aid_request, -1));
62627 dissector_add_uint("wlan.tag.number", TAG_AID_RESPONSE211, create_dissector_handle(dissect_aid_response, -1));
62628 dissector_add_uint("wlan.tag.number", TAG_S1G_SECTOR_OPERATION212, create_dissector_handle(dissect_s1g_sector_operation, -1));
62629 dissector_add_uint("wlan.tag.number", TAG_S1G_BEACON_COMPATIBILITY213, create_dissector_handle(dissect_s1g_beacon_compatibility, -1));
62630 dissector_add_uint("wlan.tag.number", TAG_SHORT_BEACON_INTERVAL214, create_dissector_handle(dissect_s1g_short_beacon_interval, -1));
62631 dissector_add_uint("wlan.tag.number", TAG_CHANGE_SEQUENCE215, create_dissector_handle(dissect_s1g_change_sequence, -1));
62632 /* 7.3.2.26 Vendor Specific information element (221) */
62633 dissector_add_uint("wlan.tag.number", TAG_VENDOR_SPECIFIC_IE221, create_dissector_handle(ieee80211_tag_vendor_specific_ie, -1));
62634 dissector_add_uint("wlan.tag.number", TAG_AUTHENTICATION_CONTROL222, create_dissector_handle(dissect_authentication_control, -1));
62635 dissector_add_uint("wlan.tag.number", TAG_TSF_TIMER_ACCURACY223, create_dissector_handle(dissect_tsf_timer_accuracy, -1));
62636 dissector_add_uint("wlan.tag.number", TAG_S1G_RELAY224, create_dissector_handle(dissect_s1g_relay, -1));
62637 dissector_add_uint("wlan.tag.number", TAG_REACHABLE_ADDRESS225, create_dissector_handle(dissect_reachable_address, -1));
62638 dissector_add_uint("wlan.tag.number", TAG_S1G_RELAY_DISCOVERY226, create_dissector_handle(dissect_s1g_relay_discovery, -1));
62639 dissector_add_uint("wlan.tag.number", TAG_S1G_RELAY_ACTIVATION236, create_dissector_handle(dissect_s1g_relay_activation, -1));
62640 dissector_add_uint("wlan.tag.number", TAG_AID_ANNOUNCEMENT228, create_dissector_handle(dissect_aid_announcement, -1));
62641 dissector_add_uint("wlan.tag.number", TAG_PV1_PROBE_RESPONSE_OPTION229, create_dissector_handle(dissect_pv1_probe_response_option, -1));
62642 dissector_add_uint("wlan.tag.number", TAG_EL_OPERATION230, create_dissector_handle(dissect_el_operation, -1));
62643 dissector_add_uint("wlan.tag.number", TAG_SECTORIZED_GROUP_ID_LIST231, create_dissector_handle(dissect_sectorized_group_id_list, -1));
62644 dissector_add_uint("wlan.tag.number", TAG_S1G_OPERATION232, create_dissector_handle(dissect_s1g_operation, -1));
62645 dissector_add_uint("wlan.tag.number", TAG_HEADER_COMPRESSION233, create_dissector_handle(dissect_header_compression, -1));
62646 dissector_add_uint("wlan.tag.number", TAG_SST_OPERATION234, create_dissector_handle(dissect_sst_operation, -1));
62647 dissector_add_uint("wlan.tag.number", TAG_MAD235, create_dissector_handle(dissect_max_away_duration, -1));
62648 /* This Cisco proprietary IE seems to mimic 221 */
62649 dissector_add_uint("wlan.tag.number", TAG_CISCO_VENDOR_SPECIFIC150, create_dissector_handle(ieee80211_tag_vendor_specific_ie, -1));
62650 dissector_add_uint("wlan.tag.number", TAG_SYMBOL_PROPRIETARY173, create_dissector_handle(ieee80211_tag_symbol_proprietary_ie, -1));
62651 dissector_add_uint("wlan.tag.number", TAG_MOBILITY_DOMAIN54, create_dissector_handle(dissect_mobility_domain, -1));
62652 dissector_add_uint("wlan.tag.number", TAG_FAST_BSS_TRANSITION55, create_dissector_handle(dissect_fast_bss_transition, -1));
62653 dissector_add_uint("wlan.tag.number", TAG_MMIE76, create_dissector_handle(dissect_mmie, -1));
62654 dissector_add_uint("wlan.tag.number", TAG_NO_BSSID_CAPABILITY83, create_dissector_handle(dissect_no_bssid_capability, -1));
62655 dissector_add_uint("wlan.tag.number", TAG_SSID_LIST84, create_dissector_handle(dissect_ssid_list, -1));
62656 dissector_add_uint("wlan.tag.number", TAG_MULTIPLE_BSSID_INDEX85, create_dissector_handle(dissect_multiple_bssid_index, -1));
62657 dissector_add_uint("wlan.tag.number", TAG_TIME_ZONE98, create_dissector_handle(dissect_time_zone, -1));
62658 dissector_add_uint("wlan.tag.number", TAG_TIMEOUT_INTERVAL56, create_dissector_handle(dissect_timeout_interval, -1));
62659 dissector_add_uint("wlan.tag.number", TAG_RIC_DATA57, create_dissector_handle(dissect_ric_data, -1));
62660 dissector_add_uint("wlan.tag.number", TAG_LINK_IDENTIFIER101, create_dissector_handle(dissect_link_identifier, -1));
62661 dissector_add_uint("wlan.tag.number", TAG_WAKEUP_SCHEDULE102, create_dissector_handle(dissect_wakeup_schedule, -1));
62662 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_TIMING104, create_dissector_handle(dissect_channel_switch_timing, -1));
62663 dissector_add_uint("wlan.tag.number", TAG_PTI_CONTROL105, create_dissector_handle(dissect_pti_control, -1));
62664 dissector_add_uint("wlan.tag.number", TAG_PU_BUFFER_STATUS106, create_dissector_handle(dissect_pu_buffer_status, -1));
62665 dissector_add_uint("wlan.tag.number", TAG_HT_CAPABILITY45, create_dissector_handle(dissect_ht_capability_ie, -1));
62666 dissector_add_uint("wlan.tag.number", TAG_HT_OPERATION61, create_dissector_handle(dissect_ht_operation_ie, -1));
62667 dissector_add_uint("wlan.tag.number", TAG_SECONDARY_CHANNEL_OFFSET62, create_dissector_handle(dissect_secondary_channel_offset_ie, -1));
62668 dissector_add_uint("wlan.tag.number", TAG_RCPI53, create_dissector_handle(dissect_rcpi_ie, -1));
62669 dissector_add_uint("wlan.tag.number", TAG_BSS_AVG_ACCESS_DELAY63, create_dissector_handle(dissect_bss_avg_access_delay_ie, -1));
62670 dissector_add_uint("wlan.tag.number", TAG_ANTENNA64, create_dissector_handle(dissect_antenna_ie, -1));
62671 dissector_add_uint("wlan.tag.number", TAG_RSNI65, create_dissector_handle(dissect_rsni_ie, -1));
62672 dissector_add_uint("wlan.tag.number", TAG_MEASURE_PILOT_TRANS66, create_dissector_handle(dissect_measurement_pilot_trans_ie, -1));
62673 dissector_add_uint("wlan.tag.number", TAG_BSS_AVB_ADM_CAPACITY67, create_dissector_handle(dissect_bss_available_admission_capacity_ie, -1));
62674 dissector_add_uint("wlan.tag.number", TAG_IE_68_CONFLICT68, create_dissector_handle(ieee80211_tag_ie_68_conflict, -1));
62675 dissector_add_uint("wlan.tag.number", TAG_BSS_MAX_IDLE_PERIOD90, create_dissector_handle(dissect_bss_max_idle_period, -1));
62676 dissector_add_uint("wlan.tag.number", TAG_TFS_REQUEST91, create_dissector_handle(dissect_tfs_request, -1));
62677 dissector_add_uint("wlan.tag.number", TAG_TFS_RESPONSE92, create_dissector_handle(dissect_tfs_response, -1));
62678 dissector_add_uint("wlan.tag.number", TAG_WNM_SLEEP_MODE93, create_dissector_handle(dissect_wnm_sleep_mode, -1));
62679 dissector_add_uint("wlan.tag.number", TAG_TIME_ADV69, create_dissector_handle(dissect_time_adv, -1));
62680 dissector_add_uint("wlan.tag.number", TAG_RM_ENABLED_CAPABILITY70, create_dissector_handle(dissect_rm_enabled_capabilities_ie, -1));
62681 dissector_add_uint("wlan.tag.number", TAG_MULTIPLE_BSSID71, create_dissector_handle(dissect_multiple_bssid_ie, -1));
62682 dissector_add_uint("wlan.tag.number", TAG_20_40_BSS_CO_EX72, create_dissector_handle(dissect_20_40_bss_coexistence, -1));
62683 dissector_add_uint("wlan.tag.number", TAG_20_40_BSS_INTOL_CH_REP73, create_dissector_handle(dissect_20_40_bss_intolerant, -1));
62684 dissector_add_uint("wlan.tag.number", TAG_OVERLAP_BSS_SCAN_PAR74, create_dissector_handle(dissect_overlap_bss_scan_par, -1));
62685 dissector_add_uint("wlan.tag.number", TAG_RIC_DESCRIPTOR75, create_dissector_handle(dissect_ric_descriptor, -1));
62686 dissector_add_uint("wlan.tag.number", TAG_MESH_PEERING_MGMT117, create_dissector_handle(ieee80211_tag_mesh_peering_mgmt, -1));
62687 dissector_add_uint("wlan.tag.number", TAG_MESH_CONFIGURATION113, create_dissector_handle(ieee80211_tag_mesh_configuration, -1));
62688 dissector_add_uint("wlan.tag.number", TAG_MESH_ID114, create_dissector_handle(ieee80211_tag_mesh_id, -1));
62689 dissector_add_uint("wlan.tag.number", TAG_BEACON_TIMING120, create_dissector_handle(ieee80211_tag_beacon_timing, -1));
62690 dissector_add_uint("wlan.tag.number", TAG_GANN125, create_dissector_handle(ieee80211_tag_gann, -1));
62691 dissector_add_uint("wlan.tag.number", TAG_MESH_PREQ130, create_dissector_handle(ieee80211_tag_mesh_preq, -1));
62692 dissector_add_uint("wlan.tag.number", TAG_MESH_PREP131, create_dissector_handle(ieee80211_tag_mesh_prep, -1));
62693 dissector_add_uint("wlan.tag.number", TAG_MESH_PERR132, create_dissector_handle(ieee80211_tag_mesh_perr, -1));
62694 dissector_add_uint("wlan.tag.number", TAG_PXU137, create_dissector_handle(ieee80211_tag_pxu, -1));
62695 dissector_add_uint("wlan.tag.number", TAG_PXUC138, create_dissector_handle(ieee80211_tag_pxuc, -1));
62696 dissector_add_uint("wlan.tag.number", TAG_MIC140, create_dissector_handle(ieee80211_tag_mic, -1));
62697 dissector_add_uint("wlan.tag.number", TAG_RANN126, create_dissector_handle(ieee80211_tag_rann, -1));
62698 dissector_add_uint("wlan.tag.number", TAG_MESH_CHANNEL_SWITCH118, create_dissector_handle(ieee80211_tag_mesh_channel_switch, -1));
62699 dissector_add_uint("wlan.tag.number", TAG_INTERWORKING107, create_dissector_handle(dissect_interworking, -1));
62700 dissector_add_uint("wlan.tag.number", TAG_ADVERTISEMENT_PROTOCOL108, create_dissector_handle(dissect_advertisement_protocol, -1));
62701 dissector_add_uint("wlan.tag.number", TAG_QOS_MAP_SET110, create_dissector_handle(dissect_qos_map_set, -1));
62702 dissector_add_uint("wlan.tag.number", TAG_ROAMING_CONSORTIUM111, create_dissector_handle(dissect_roaming_consortium, -1));
62703 dissector_add_uint("wlan.tag.number", TAG_AP_CHANNEL_REPORT51, create_dissector_handle(dissect_ap_channel_report, -1));
62704 dissector_add_uint("wlan.tag.number", TAG_NEIGHBOR_REPORT52, create_dissector_handle(dissect_neighbor_report, -1));
62705 dissector_add_uint("wlan.tag.number", TAG_MESH_AWAKE_WINDOW119, create_dissector_handle(ieee80211_tag_mesh_awake_window, -1));
62706 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60, create_dissector_handle(ieee80211_tag_channel_switch_announcement, -1));
62707 dissector_add_uint("wlan.tag.number", TAG_SUPPORTED_OPERATING_CLASSES59, create_dissector_handle(ieee80211_tag_supported_operating_classes, -1));
62708 dissector_add_uint("wlan.tag.number", TAG_RELAY_CAPABILITIES167, create_dissector_handle(add_tag_relay_capabilities, -1));
62709 dissector_add_uint("wlan.tag.number", TAG_DMG_BSS_PARAMETER_CHANGE152, create_dissector_handle(ieee80211_tag_bss_parameter_change, -1));
62710 dissector_add_uint("wlan.tag.number", TAG_DMG_CAPABILITIES148, create_dissector_handle(ieee80211_tag_dmg_capabilities, -1));
62711 dissector_add_uint("wlan.tag.number", TAG_DMG_OPERATION151, create_dissector_handle(ieee80211_tag_dmg_operation, -1));
62712 dissector_add_uint("wlan.tag.number", TAG_ANTENNA_SECTOR_ID190, create_dissector_handle(ieee80211_tag_antenna_section_id, -1));
62713 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_SCHEDULE144, create_dissector_handle(ieee80211_tag_extended_schedule, -1));
62714 dissector_add_uint("wlan.tag.number", TAG_STA_AVAILABILITY145, create_dissector_handle(ieee80211_tag_sta_availability, -1));
62715 dissector_add_uint("wlan.tag.number", TAG_NEXT_DMG_ATI147, create_dissector_handle(ieee80211_tag_next_dmg_ati, -1));
62716 dissector_add_uint("wlan.tag.number", TAG_NEXTPCP_LIST160, create_dissector_handle(ieee80211_tag_nextpcp_list, -1));
62717 dissector_add_uint("wlan.tag.number", TAG_PCP_HANDOVER161, create_dissector_handle(ieee80211_tag_pcp_handover, -1));
62718 dissector_add_uint("wlan.tag.number", TAG_BEAMLINK_MAINTENANCE169, create_dissector_handle(ieee80211_tag_beamlink_maintenance, -1));
62719 dissector_add_uint("wlan.tag.number", TAG_QUIET_PERIOD_RES177, create_dissector_handle(ieee80211_tag_quiet_period_res, -1));
62720 dissector_add_uint("wlan.tag.number", TAG_INTRA_ACCESS_CAT_PRIO184, create_dissector_handle(ieee80211_tag_intra_access_cat_prio, -1));
62721 dissector_add_uint("wlan.tag.number", TAG_SCS_DESCRIPTOR185, create_dissector_handle(ieee80211_tag_scs_descriptor, -1));
62722 dissector_add_uint("wlan.tag.number", TAG_RELAY_TRANSFER_PARAM168, create_dissector_handle(ieee80211_tag_relay_transfer_param, -1));
62723 dissector_add_uint("wlan.tag.number", TAG_DMG_BEAM_REFINEMENT153, create_dissector_handle(ieee80211_tag_dmg_beam_refinement, -1));
62724 dissector_add_uint("wlan.tag.number", TAG_WAKEUP_SCHEDULE_AD143, create_dissector_handle(ieee80211_tag_wakeup_schedule_ad, -1));
62725 dissector_add_uint("wlan.tag.number", TAG_DMG_TSPEC146, create_dissector_handle(ieee80211_tag_dmg_tspec, -1));
62726 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_MEASURMENT_FB154, create_dissector_handle(ieee80211_tag_channel_measurement_fb, -1));
62727 dissector_add_uint("wlan.tag.number", TAG_AWAKE_WINDOW157, create_dissector_handle(ieee80211_tag_awake_window, -1));
62728 dissector_add_uint("wlan.tag.number", TAG_ADDBA_EXT159, create_dissector_handle(ieee80211_tag_addba_ext, -1));
62729 dissector_add_uint("wlan.tag.number", TAG_MULTI_BAND158, create_dissector_handle(ieee80211_tag_multi_band, -1));
62730 dissector_add_uint("wlan.tag.number", TAG_DMG_LINK_MARGIN162, create_dissector_handle(ieee80211_tag_dmg_link_margin, -1));
62731 dissector_add_uint("wlan.tag.number", TAG_DMG_LINK_ADAPTION_ACK172, create_dissector_handle(ieee80211_tag_dmg_link_adaption_ack, -1));
62732 dissector_add_uint("wlan.tag.number", TAG_FILS_INDICATION240, create_dissector_handle(ieee80211_tag_fils_indication, -1));
62733 dissector_add_uint("wlan.tag.number", TAG_SWITCHING_STREAM163, create_dissector_handle(ieee80211_tag_switching_stream, -1));
62734 dissector_add_uint("wlan.tag.number", TAG_ELEMENT_ID_EXTENSION255, create_dissector_handle(ieee80211_tag_element_id_extension, -1));
62735 dissector_add_uint("wlan.tag.number", TAG_TWT216, create_dissector_handle(ieee80211_tag_twt, -1));
62736 dissector_add_uint("wlan.tag.number", TAG_RSNX244, create_dissector_handle(ieee80211_tag_rsnx, -1));
62737 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_USAGE97, create_dissector_handle(ieee80211_tag_channel_usage, -1));
62738 dissector_add_uint("wlan.tag.number", TAG_DMS_REQUEST99, create_dissector_handle(ieee80211_tag_dms_request, -1));
62739 dissector_add_uint("wlan.tag.number", TAG_DMS_RESPONSE100, create_dissector_handle(ieee80211_tag_dms_response, -1));
62740
62741 /* Vendor specific actions */
62742 dissector_add_uint("wlan.action.vendor_specific", OUI_MARVELL0x005043, create_dissector_handle(dissect_vendor_action_marvell, -1));
62743 dissector_add_uint("wlan.action.vendor_specific", OUI_WFA0x506F9A, create_dissector_handle(dissect_vendor_action_wifi_alliance, -1));
62744
62745 /* Protected action WFA ... */
62746 dissector_add_uint("wlan.action.wifi_alliance.subtype", WFA_SUBTYPE_ACTION_QOS_MGMT0x1A, create_dissector_handle(dissect_vendor_action_wfa_qos_mgmt, -1));
62747
62748 dissector_add_uint("wlan.anqp.vendor_specific", OUI_WFA0x506F9A, create_dissector_handle(dissect_vendor_wifi_alliance_anqp, -1));
62749 dissector_add_uint("wlan.anqp.wifi_alliance.subtype", WFA_ANQP_SUBTYPE_HS2017, create_dissector_handle(dissect_hs20_anqp, -1));
62750 dissector_add_uint("wlan.anqp.wifi_alliance.subtype", WFA_ANQP_SUBTYPE_MBO18, create_dissector_handle(dissect_mbo_anqp, -1));
62751 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_SUBSCRIPTION_REMEDIATION0, create_dissector_handle(dissect_hs20_subscription_remediation, -1));
62752 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_DEAUTHENTICATION_IMMINENT1, create_dissector_handle(dissect_hs20_deauthentication_imminent, -1));
62753 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_HS20_INDICATION16, create_dissector_handle(dissect_hs20_indication, -1));
62754 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_OSEN20, create_dissector_handle(dissect_hs20_osen, -1));
62755 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_OWE_TRANSITION_MODE28, create_dissector_handle(dissect_owe_transition_mode, -1));
62756 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_TRANSITION_DISABLE_KDE32, create_dissector_handle(dissect_transition_disable_kde, -1));
62757 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_WIFI_60G23, create_dissector_handle(dissect_wfa_60g_ie, -1));
62758 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_MBO_OCE22, create_dissector_handle(dissect_mbo_oce, -1));
62759 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));
62760 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_WNM_SUBTYPE_CELL_DATA_CAPABILITIES3, create_dissector_handle(dissect_wfa_wnm_cell_cap, -1));
62761 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_QOS_MGMT34, create_dissector_handle(dissect_qos_mgmt, -1));
62762 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_OVERRIDE41, create_dissector_handle(dissect_wfa_rsn_override, -1));
62763 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_OVERRIDE_242, create_dissector_handle(dissect_wfa_rsn_override_2, -1));
62764 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSNX_OVERRIDE43, create_dissector_handle(dissect_wfa_rsnx_override, -1));
62765 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_SELECTION44, create_dissector_handle(dissect_wfa_rsn_selection, -1));
62766 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_OVERRIDE_LINK_KDE45, create_dissector_handle(dissect_wfa_rsn_override_link_kde, -1));
62767}
62768
62769/*
62770 * Editor modelines
62771 *
62772 * Local Variables:
62773 * c-basic-offset: 2
62774 * tab-width: 8
62775 * indent-tabs-mode: nil
62776 * End:
62777 *
62778 * ex: set shiftwidth=2 tabstop=8 expandtab:
62779 * :indentSize=2:tabSize=8:noTabs=true:
62780 */