Coverage Report

Created: 2025-08-04 07:15

/src/wireshark/epan/dissectors/packet-ieee1905.c
Line
Count
Source (jump to first uncovered line)
1
/* packet-ieee1905.c
2
 * Routines for IEEE1905 dissection
3
 *
4
 * Copyright 2017, Richard Sharpe <realrichardsharpe@gmail.com>
5
 * Copyright 2017, The Wi-Fi Alliance.
6
 *
7
 * Wireshark - Network traffic analyzer
8
 * By Gerald Combs <gerald@wireshark.org>
9
 * Copyright 1998 Gerald Combs
10
 *
11
 * SPDX-License-Identifier: GPL-2.0-or-later
12
 */
13
14
/*
15
 * https://standards.ieee.org/ieee/1905.1/4995/
16
 *
17
 * IEEE Standard for a Convergent Digital Home Network for Heterogeneous
18
 * Technologies
19
 *
20
 * Plus incorporating the changes in the Multi-AP Technical Specification.
21
 */
22
23
#include <config.h>
24
25
#include <epan/packet.h>
26
#include <epan/etypes.h>
27
#include <epan/addr_resolv.h>
28
#include <epan/exceptions.h>
29
#include <epan/expert.h>
30
#include <epan/address.h>
31
#include <epan/reassemble.h>
32
#include <epan/tfs.h>
33
#include <epan/unit_strings.h>
34
#include "packet-wps.h"
35
#include "packet-wifi-dpp.h"
36
#include "packet-ieee80211.h"
37
38
static dissector_handle_t ieee1905_handle;
39
static dissector_handle_t eapol_handle;
40
41
extern value_string_ext ieee80211_reason_code_ext;
42
extern value_string_ext ieee80211_status_code_ext;
43
extern value_string_ext ff_pa_action_codes_ext;
44
extern const value_string wfa_subtype_vals[];
45
46
void proto_reg_handoff_ieee1905(void);
47
void proto_register_ieee1905(void);
48
49
/* Reassembly header fields */
50
static int hf_ieee1905_fragments;
51
static int hf_ieee1905_fragment;
52
static int hf_ieee1905_fragment_overlap;
53
static int hf_ieee1905_fragment_overlap_conflicts;
54
static int hf_ieee1905_fragment_multiple_tails;
55
static int hf_ieee1905_fragment_too_long_fragment;
56
static int hf_ieee1905_fragment_error;
57
static int hf_ieee1905_fragment_count;
58
static int hf_ieee1905_fragment_reassembled_in;
59
static int hf_ieee1905_fragment_reassembled_length;
60
61
/* Normal header fields */
62
static int proto_ieee1905;
63
static int hf_ieee1905_fragment_data;
64
static int hf_ieee1905_message_version;
65
static int hf_ieee1905_message_reserved;
66
static int hf_ieee1905_message_type;
67
static int hf_ieee1905_message_id;
68
static int hf_ieee1905_fragment_id;
69
static int hf_ieee1905_flags;
70
static int hf_ieee1905_last_fragment;
71
static int hf_ieee1905_relay_indicator;
72
static int hf_ieee1905_tlv_types;
73
static int hf_ieee1905_tlv_len;
74
static int hf_ieee1905_tlv_len_reserved;
75
static int hf_ieee1905_tlv_len_length;
76
static int hf_ieee1905_tlv_data;
77
static int hf_ieee1905_al_mac_address_type;
78
static int hf_ieee1905_mac_address_type;
79
static int hf_ieee1905_link_metric_query_type;
80
static int hf_ieee1905_link_metrics_requested;
81
static int hf_ieee1905_responder_al_mac_addr;
82
static int hf_ieee1905_neighbor_al_mac_addr;
83
static int hf_ieee1905_receiving_al_mac_addr;
84
static int hf_ieee1905_bridge_flag;
85
static int hf_ieee1905_packet_errors;
86
static int hf_ieee1905_transmitted_packets;
87
static int hf_ieee1905_mac_throughput_capacity;
88
static int hf_ieee1905_link_availability;
89
static int hf_ieee1905_phy_rate;
90
static int hf_ieee1905_packets_received;
91
static int hf_ieee1905_rssi;
92
static int hf_ieee1905_extra_tlv_data;
93
static int hf_ieee1905_local_interface_count;
94
static int hf_ieee1905_media_type;
95
static int hf_ieee1905_media_spec_info_len;
96
static int hf_ieee1905_media_spec_info;
97
static int hf_ieee1905_media_type_high;
98
static int hf_ieee1905_media_type_low;
99
static int hf_ieee1905_bridging_tuples_cnt;
100
static int hf_ieee1905_bridging_mac_address_cnt;
101
static int hf_ieee1905_bridging_mac_address;
102
static int hf_ieee1905_local_interface_mac;
103
static int hf_ieee1905_non_1905_neighbor_mac;
104
static int hf_ieee1905_neighbor_flags;
105
static int hf_ieee1905_bridges_flag;
106
static int hf_ieee1905_link_metric_result_code;
107
static int hf_ieee1905_vendor_specific_oui;
108
static int hf_ieee1905_vendor_specific_info;
109
static int hf_ieee1905_searched_role;
110
static int hf_ieee1905_supported_role;
111
static int hf_ieee1905_auto_config_freq_band;
112
static int hf_ieee1905_supported_freq_band;
113
static int hf_ieee1905_event_notification_media_types;
114
static int hf_ieee1905_sender_al_id;
115
static int hf_ieee1905_push_button_event_msg_id;
116
static int hf_ieee1905_sender_joining_interface;
117
static int hf_ieee1905_new_device_interface;
118
static int hf_ieee1905_device_al_mac;
119
static int hf_ieee1905_local_intf_oui;
120
static int hf_ieee1905_local_intf_variant;
121
static int hf_ieee1905_local_intf_variant_name;
122
static int hf_ieee1905_local_intf_url_count;
123
static int hf_ieee1905_local_intf_spec_count;
124
static int hf_ieee1905_local_intf_url;
125
static int hf_ieee1905_local_intf_spec;
126
static int hf_ieee1905_dev_id_friendly_name;
127
static int hf_ieee1905_dev_id_manuf_name;
128
static int hf_ieee1905_dev_id_manuf_model;
129
static int hf_ieee1905_control_url;
130
static int hf_ieee1905_ipv4_type_count;
131
static int hf_ieee1905_mac_address;
132
static int hf_ieee1905_ipv4_addr_count;
133
static int hf_ieee1905_addr_type;
134
static int hf_ieee1905_ipv4_addr;
135
static int hf_ieee1905_dhcp_server;
136
static int hf_ieee1905_ipv6_mac_address;
137
static int hf_ieee1905_ipv6_linklocal;
138
static int hf_ieee1905_ipv6_type_count;
139
static int hf_ieee1905_ipv6_addr_count;
140
static int hf_ieee1905_ipv6_addr_type;
141
static int hf_ieee1905_ipv6_addr;
142
static int hf_ieee1905_ipv6_dhcp_server;
143
static int hf_ieee1905_generic_phy_media_types;
144
static int hf_ieee1905_profile_version;
145
static int hf_ieee1905_power_off_intf_count;
146
static int hf_ieee1905_power_change_intf_count;
147
static int hf_ieee1905_power_change_mac_addr;
148
static int hf_ieee1905_power_change_state;
149
static int hf_ieee1905_power_status_intf_count;
150
static int hf_ieee1905_power_status_mac_addr;
151
static int hf_ieee1905_power_status_state;
152
static int hf_ieee1905_l2_neighbor_intf_count;
153
static int hf_ieee1905_l2_local_intf_mac_addr;
154
static int hf_ieee1905_l2_neighbor_dev_count;
155
static int hf_ieee1905_l2_neighbor_mac_addr;
156
static int hf_ieee1905_l2_behind_mac_addr_count;
157
static int hf_ieee1905_l2_behind_mac_addr;
158
static int hf_ieee1905_supported_service_count;
159
static int hf_ieee1905_supported_service;
160
static int hf_ieee1905_searched_service_count;
161
static int hf_ieee1905_searched_service;
162
static int hf_ieee1905_ap_radio_identifier;
163
static int hf_ieee1905_operatonal_bss_radio_count;
164
static int hf_ieee1905_ap_operational_intf_count;
165
static int hf_ieee1905_ap_local_intf_mac_addr;
166
static int hf_ieee1905_ap_local_intf_ssid_len;
167
static int hf_ieee1905_ap_local_intf_ssid;
168
static int hf_ieee1905_ap_capabilities_flags;
169
static int hf_ieee1905_rpt_unsuccessful_associations;
170
static int hf_ieee1905_unassoc_sta_metrics_oper_flag;
171
static int hf_ieee1905_unassoc_sta_metrics_non_oper_flag;
172
static int hf_ieee1905_agent_init_steering;
173
static int hf_ieee1905_rpt_unsuccessful_assoc_report;
174
static int hf_ieee1905_higher_layer_protocol;
175
static int hf_ieee1905_higher_layer_data;
176
static int hf_ieee1905_assoc_backhaul_station_mac;
177
static int hf_ieee1905_backhaul_target_bssid;
178
static int hf_ieee1905_backhaul_steering_status;
179
static int hf_ieee1905_backhaul_operating_class;
180
static int hf_ieee1905_backhaul_channel_number;
181
static int hf_ieee1905_client_assoc_bssid;
182
static int hf_ieee1905_association_control;
183
static int hf_ieee1905_association_control_validity;
184
static int hf_ieee1905_client_assoc_sta_count;
185
static int hf_ieee1905_client_assoc_mac_addr;
186
static int hf_ieee1905_btm_reporter_bssid;
187
static int hf_ieee1905_btm_sta_mac_addr;
188
static int hf_ieee1905_btm_report_status;
189
static int hf_ieee1905_btm_report_bssid;
190
static int hf_ieee1905_source_bss_bssid;
191
static int hf_ieee1905_steering_request_flags;
192
static int hf_ieee1905_steering_req_op_window;
193
static int hf_ieee1905_steering_request_mode_flag;
194
static int hf_ieee1905_btm_disassoc_imminent_flag;
195
static int hf_ieee1905_btm_abridged_flag;
196
static int hf_ieee1905_steering_req_reserved;
197
static int hf_ieee1905_steering_btm_disass_timer;
198
static int hf_ieee1905_steering_req_sta_count;
199
static int hf_ieee1905_steering_req_sta_mac;
200
static int hf_ieee1905_steering_req_target_bssid_count;
201
static int hf_ieee1905_steering_req_target_bssid;
202
static int hf_ieee1905_steering_req_oper_class;
203
static int hf_ieee1905_steering_req_target_channel;
204
static int hf_ieee1905_client_bssid;
205
static int hf_ieee1905_client_mac_addr;
206
static int hf_ieee1905_client_capability_result;
207
static int hf_ieee1905_client_capability_frame;
208
static int hf_ieee1905_association_flag;
209
static int hf_ieee1905_association_client_mac_addr;
210
static int hf_ieee1905_association_agent_bssid;
211
static int hf_ieee1905_association_event_flags;
212
static int hf_ieee1905_ap_radio_max_bss;
213
static int hf_ieee1905_ap_radio_classes;
214
static int hf_ieee1905_ap_radio_class;
215
static int hf_ieee1905_ap_radio_eirp;
216
static int hf_ieee1905_ap_radio_non_op_count;
217
static int hf_ieee1905_radio_basic_non_op_channel;
218
static int hf_ieee1905_max_supported_tx_streams;
219
static int hf_ieee1905_max_supported_rx_streams;
220
static int hf_ieee1905_short_gi_20mhz_flag;
221
static int hf_ieee1905_short_gi_40mhz_flag;
222
static int hf_ieee1905_ht_support_40mhz_flag;
223
static int hf_ieee1905_ap_ht_capabilities_radio_id;
224
static int hf_ieee1905_ht_cap_flags;
225
static int hf_ieee1905_vht_max_supported_tx_streams;
226
static int hf_ieee1905_vht_max_supported_rx_streams;
227
static int hf_ieee1905_short_gi_80mhz_flag;
228
static int hf_ieee1905_short_gi_160mhz_flag;
229
static int hf_ieee1905_vht_support_80plus_mhz_flag;
230
static int hf_ieee1905_vht_support_160_mhz_flag;
231
static int hf_ieee1905_su_beamformer_capable_flag;
232
static int hf_ieee1905_mu_beamformer_capable_flag;
233
static int hf_ieee1905_ap_vht_capabilities_radio_id;
234
static int hf_ieee1905_vht_cap_flags;
235
static int hf_ieee1905_assoc_clients_bss_count;
236
static int hf_ieee1905_assoc_bssid;
237
static int hf_ieee1905_bss_client_count;
238
static int hf_ieee1905_bss_client_mac;
239
static int hf_ieee1905_bss_client_last_assoc;
240
static int hf_ieee1905_ap_vht_supported_vht_tx_mcs;
241
static int hf_ieee1905_ap_vht_supported_vht_rx_mcs;
242
static int hf_ieee1905_ap_vht_tx_mcs_map_1ss;
243
static int hf_ieee1905_ap_vht_tx_mcs_map_2ss;
244
static int hf_ieee1905_ap_vht_tx_mcs_map_3ss;
245
static int hf_ieee1905_ap_vht_tx_mcs_map_4ss;
246
static int hf_ieee1905_ap_vht_tx_mcs_map_5ss;
247
static int hf_ieee1905_ap_vht_tx_mcs_map_6ss;
248
static int hf_ieee1905_ap_vht_tx_mcs_map_7ss;
249
static int hf_ieee1905_ap_vht_tx_mcs_map_8ss;
250
static int hf_ieee1905_ap_vht_rx_mcs_map_1ss;
251
static int hf_ieee1905_ap_vht_rx_mcs_map_2ss;
252
static int hf_ieee1905_ap_vht_rx_mcs_map_3ss;
253
static int hf_ieee1905_ap_vht_rx_mcs_map_4ss;
254
static int hf_ieee1905_ap_vht_rx_mcs_map_5ss;
255
static int hf_ieee1905_ap_vht_rx_mcs_map_6ss;
256
static int hf_ieee1905_ap_vht_rx_mcs_map_7ss;
257
static int hf_ieee1905_ap_vht_rx_mcs_map_8ss;
258
static int hf_ieee1905_channel_pref_preference;
259
static int hf_ieee1905_channel_pref_reason;
260
static int hf_ieee1905_channel_preference_radio_id;
261
static int hf_ieee1905_channel_preference_class_count;
262
static int hf_ieee1905_channel_pref_class;
263
static int hf_ieee1905_channel_pref_channel_count;
264
static int hf_ieee1905_channel_pref_channel;
265
static int hf_ieee1905_channel_prefs_flags;
266
static int hf_ieee1905_trans_power_limit_radio_id;
267
static int hf_ieee1905_trans_power_limit_eirp;
268
static int hf_ieee1905_channel_select_resp_radio_id;
269
static int hf_ieee1905_radio_metrics_radio_id;
270
static int hf_ieee1905_channel_select_resp_code;
271
static int hf_ieee1905_op_channel_report_radio_id;
272
static int hf_ieee1905_op_channel_report_classes;
273
static int hf_ieee1905_op_channel_class;
274
static int hf_ieee1905_op_channel_number;
275
static int hf_ieee1905_op_channel_eirp;
276
static int hf_ieee1905_ap_he_cap_radio_id;
277
static int hf_ieee1905_ap_he_cap_mcs_length;
278
static int hf_ieee1905_ap_he_cap_tx_mcs_le_80_mhz;
279
static int hf_ieee1905_ap_he_tx_mcs_map_1ss;
280
static int hf_ieee1905_ap_he_tx_mcs_map_2ss;
281
static int hf_ieee1905_ap_he_tx_mcs_map_3ss;
282
static int hf_ieee1905_ap_he_tx_mcs_map_4ss;
283
static int hf_ieee1905_ap_he_tx_mcs_map_5ss;
284
static int hf_ieee1905_ap_he_tx_mcs_map_6ss;
285
static int hf_ieee1905_ap_he_tx_mcs_map_7ss;
286
static int hf_ieee1905_ap_he_tx_mcs_map_8ss;
287
static int hf_ieee1905_ap_he_cap_rx_mcs_le_80_mhz;
288
static int hf_ieee1905_ap_he_rx_mcs_map_1ss;
289
static int hf_ieee1905_ap_he_rx_mcs_map_2ss;
290
static int hf_ieee1905_ap_he_rx_mcs_map_3ss;
291
static int hf_ieee1905_ap_he_rx_mcs_map_4ss;
292
static int hf_ieee1905_ap_he_rx_mcs_map_5ss;
293
static int hf_ieee1905_ap_he_rx_mcs_map_6ss;
294
static int hf_ieee1905_ap_he_rx_mcs_map_7ss;
295
static int hf_ieee1905_ap_he_rx_mcs_map_8ss;
296
static int hf_ieee1905_ap_he_cap_tx_mcs_160_mhz;
297
static int hf_ieee1905_ap_he_cap_rx_mcs_160_mhz;
298
static int hf_ieee1905_ap_he_cap_tx_mcs_80p80_mhz;
299
static int hf_ieee1905_ap_he_cap_rx_mcs_80p80_mhz;
300
static int hf_ieee1905_unassoc_link_metrics_query_mac;
301
static int hf_ieee1905_unassoc_sta_link_metrics_class;
302
static int hf_ieee1905_ap_metrics_reporting_interval;
303
static int hf_ieee1905_metric_reporting_policy_radio_id;
304
static int hf_ieee1905_metric_reporting_radio_count;
305
static int hf_ieee1905_metric_rcpi_threshold;
306
static int hf_ieee1905_metric_reporting_rcpi_hysteresis;
307
static int hf_ieee1905_metrics_policy_flags;
308
static int hf_ieee1905_metrics_channel_util_threshold;
309
static int hf_ieee1905_assoc_sta_traffic_stats_inclusion;
310
static int hf_ieee1905_assoc_sta_link_metrics_inclusion;
311
static int hf_ieee1905_assoc_wf6_status_policy_inclusion;
312
static int hf_ieee1905_reporting_policy_flags_reserved;
313
static int hf_ieee1905_ap_metric_query_bssid_cnt;
314
static int hf_ieee1905_ap_metric_query_bssid;
315
static int hf_ieee1905_sta_mac_address_type;
316
static int hf_ieee1905_assoc_sta_mac_addr;
317
static int hf_ieee1905_assoc_sta_bssid_count;
318
static int hf_ieee1905_assoc_sta_link_metrics_bssid;
319
static int hf_ieee1905_assoc_sta_link_metrics_time_delta;
320
static int hf_ieee1905_assoc_sta_link_metrics_dwn_rate;
321
static int hf_ieee1905_assoc_sta_link_metrics_up_rate;
322
static int hf_ieee1905_assoc_sta_link_metrics_rcpi;
323
static int hf_ieee1905_assoc_wf6_sta_mac_addr;
324
static int hf_ieee1905_assoc_wf6_sta_tid_count;
325
static int hf_ieee1905_assoc_wf6_sta_tid;
326
static int hf_ieee1905_assoc_wf6_sta_queue_size;
327
static int hf_ieee1905_assoc_sta_ext_link_metrics_mac_addr;
328
static int hf_ieee1905_assoc_sta_ext_link_metrics_count;
329
static int hf_ieee1905_assoc_sta_extended_metrics_bssid;
330
static int hf_ieee1905_assoc_sta_extended_metrics_lddlr;
331
static int hf_ieee1905_assoc_sta_extended_metrics_ldulr;
332
static int hf_ieee1905_assoc_sta_extended_metrics_ur;
333
static int hf_ieee1905_assoc_sta_extended_metrics_tr;
334
static int hf_ieee1905_unassoc_sta_link_channel_count;
335
static int hf_ieee1905_unassoc_metrics_channel;
336
static int hf_ieee1905_unassoc_metrics_mac_count;
337
static int hf_ieee1905_he_max_supported_tx_streams;
338
static int hf_ieee1905_he_max_supported_rx_streams;
339
static int hf_ieee1905_he_support_80plus_mhz_flag;
340
static int hf_ieee1905_he_support_160mhz_flag;
341
static int hf_ieee1905_he_su_beamformer_capable_flag;
342
static int hf_ieee1905_he_mu_beamformer_capable_flag;
343
static int hf_ieee1905_ul_mu_mimo_capable_flag;
344
static int hf_ieee1905_ul_mu_mimo_ofdma_capable_flag;
345
static int hf_ieee1905_dl_mu_mimo_ofdma_capable_flag;
346
static int hf_ieee1905_ul_ofdma_capable;
347
static int hf_ieee1905_dl_ofdma_capable;
348
static int hf_ieee1905_he_cap_flags;
349
static int hf_ieee1905_steering_policy_local_disallowed_count;
350
static int hf_ieee1905_steering_disallowed_mac_addr;
351
static int hf_ieee1905_btm_steering_disallowed_count;
352
static int hf_ieee1905_btm_steering_disallowed_mac_addr;
353
static int hf_ieee1905_steering_policy_radio_count;
354
static int hf_ieee1905_steering_policy_radio_id;
355
static int hf_ieee1905_steering_policy_policy;
356
static int hf_ieee1905_steering_policy_util;
357
static int hf_ieee1905_steering_policy_rcpi_threshold;
358
static int hf_ieee1905_radio_restriction_radio_id;
359
static int hf_ieee1905_radio_restriction_op_class_count;
360
static int hf_ieee1905_radio_restriction_op_class;
361
static int hf_ieee1905_radio_restriction_chan_count;
362
static int hf_ieee1905_radio_restriction_channel;
363
static int hf_ieee1905_radio_restriction_min_separation;
364
static int hf_ieee1905_ap_metrics_agent_bssid;
365
static int hf_ieee1905_include_estimated_spi_ac_eq_be;
366
static int hf_ieee1905_include_estimated_spi_ac_eq_bk;
367
static int hf_ieee1905_include_estimated_spi_ac_eq_vo;
368
static int hf_ieee1905_include_estimated_spi_ac_eq_vi;
369
static int hf_ieee1905_ap_metrics_channel_utilization;
370
static int hf_ieee1905_ap_metrics_sta_count;
371
static int hf_ieee1905_ap_metrics_flags;
372
static int hf_ieee1905_ap_metrics_service_params_be;
373
static int hf_ieee1905_ap_metrics_service_params_bk;
374
static int hf_ieee1905_ap_metrics_service_params_vo;
375
static int hf_ieee1905_ap_metrics_service_params_vi;
376
static int hf_ieee1905_unassoc_sta_link_metric_op_class;
377
static int hf_ieee1905_unassoc_sta_link_metric_sta_count;
378
static int hf_ieee1905_unassoc_link_metric_mac_addr;
379
static int hf_ieee1905_unassoc_link_metric_channel;
380
static int hf_ieee1905_unassoc_link_metric_delta;
381
static int hf_ieee1905_unassoc_link_metric_uplink_rcpi;
382
static int hf_ieee1905_beacon_metrics_query_mac_addr;
383
static int hf_ieee1905_beacon_metrics_query_op_class;
384
static int hf_ieee1905_beacon_metrics_query_channel;
385
static int hf_ieee1905_beacon_metrics_query_bssid;
386
static int hf_ieee1905_beacon_metrics_query_detail;
387
static int hf_ieee1905_beacon_metrics_query_ssid_len;
388
static int hf_ieee1905_beacon_metrics_query_ssid;
389
static int hf_ieee1905_beacon_metrics_channel_count;
390
static int hf_ieee1905_beacon_metrics_report_len;
391
static int hf_ieee1905_beacon_metrics_report_op_class;
392
static int hf_ieee1905_beacon_metrics_report_channel_id;
393
static int hf_ieee1905_measurement_report;
394
static int hf_ieee1905_beacon_metrics_response_mac_addr;
395
static int hf_ieee1905_beacon_metrics_response_reserved;
396
static int hf_ieee1905_beacon_metrics_response_meas_num;
397
static int hf_ieee1905_assoc_sta_traffic_stats_mac_addr;
398
static int hf_ieee1905_assoc_sta_traffic_stats_bytes_sent;
399
static int hf_ieee1905_assoc_sta_traffic_stats_bytes_rcvd;
400
static int hf_ieee1905_assoc_sta_traffic_stats_packets_sent;
401
static int hf_ieee1905_assoc_sta_traffic_stats_packets_rcvd;
402
static int hf_ieee1905_assoc_sta_traffic_stats_tx_pkt_errs;
403
static int hf_ieee1905_assoc_sta_traffic_stats_rx_pkt_errs;
404
static int hf_ieee1905_assoc_sta_traffic_stats_retrans_count;
405
static int hf_ieee1905_error_code_value;
406
static int hf_ieee1905_error_code_mac_addr;
407
static int hf_ieee1905_channel_scan_rep_policy;
408
static int hf_ieee1905_channel_scan_pol_report;
409
static int hf_ieee1905_channel_scan_pol_reserved;
410
static int hf_ieee1905_channel_scan_capabilities_radio_num;
411
static int hf_ieee1905_channel_scan_capa_radio_id;
412
static int hf_ieee1905_channel_scan_capa_flags;
413
static int hf_ieee1905_channel_scan_capa_flags_on_boot_only;
414
static int hf_ieee1905_channel_scan_capa_flags_scan_impact;
415
static int hf_ieee1905_channel_scan_capa_flags_reserved;
416
static int hf_ieee1905_channel_scan_capa_min_scan_interval;
417
static int hf_ieee1905_channel_scan_capa_class_num;
418
static int hf_ieee1905_channel_scan_capa_oper_class;
419
static int hf_ieee1905_channel_scan_capa_oper_class_chan_cnt;
420
static int hf_ieee1905_channel_scan_capa_channel;
421
static int hf_ieee1905_channel_scan_request_flags;
422
static int hf_ieee1905_channel_scan_request_flags_fresh_scan;
423
static int hf_ieee1905_channel_scan_request_flags_reserved;
424
static int hf_ieee1905_channel_scan_request_radio_num;
425
static int hf_ieee1905_channel_scan_request_radio_id;
426
static int hf_ieee1905_channel_scan_request_class_num;
427
static int hf_ieee1905_channel_scan_request_oper_class;
428
static int hf_ieee1905_channel_scan_request_oper_class_chan_cnt;
429
static int hf_ieee1905_channel_scan_request_channel;
430
static int hf_ieee1905_channel_scan_result_radio_id;
431
static int hf_ieee1905_channel_scan_result_oper_class;
432
static int hf_ieee1905_channel_scan_result_channel;
433
static int hf_ieee1905_channel_scan_result_status;
434
static int hf_ieee1905_channel_scan_result_timestamp_len;
435
static int hf_ieee1905_channel_scan_result_timestamp_string;
436
static int hf_ieee1905_channel_scan_result_utilization;
437
static int hf_ieee1905_channel_scan_result_noise;
438
static int hf_ieee1905_radio_metrics_noise;
439
static int hf_ieee1905_radio_metrics_transmit;
440
static int hf_ieee1905_radio_metrics_receive_self;
441
static int hf_ieee1905_radio_metrics_receive_other;
442
static int hf_ieee1905_ap_extended_metrics_bssid;
443
static int hf_ieee1905_ap_extended_metrics_unicast_sent;
444
static int hf_ieee1905_ap_extended_metrics_unicast_rcvd;
445
static int hf_ieee1905_ap_extended_metrics_multicast_sent;
446
static int hf_ieee1905_ap_extended_metrics_multicast_rcvd;
447
static int hf_ieee1905_ap_extended_metrics_bcast_sent;
448
static int hf_ieee1905_ap_extended_metrics_bcast_rcvd;
449
static int hf_ieee1905_channel_scan_result_neigh_num;
450
static int hf_ieee1905_channel_scan_result_bssid;
451
static int hf_ieee1905_channel_scan_result_ssid_len;
452
static int hf_ieee1905_channel_scan_result_ssid;
453
static int hf_ieee1905_channel_scan_result_sig_level;
454
static int hf_ieee1905_channel_scan_result_bw_len;
455
static int hf_ieee1905_channel_scan_result_bw;
456
static int hf_ieee1905_channel_scan_result_neigh_flags;
457
static int hf_ieee1905_channel_scan_result_load_element_present;
458
static int hf_ieee1905_channel_scan_result_neigh_reserved;
459
static int hf_ieee1905_channel_scan_result_util;
460
static int hf_ieee1905_channel_scan_result_sta_count;
461
static int hf_ieee1905_channel_scan_result_scan_duration;
462
static int hf_ieee1905_channel_scan_result_flags;
463
static int hf_ieee1905_channel_scan_result_scan_type;
464
static int hf_ieee1905_channel_scan_result_scan_flags_reserved;
465
static int hf_ieee1905_timestamp_length;
466
static int hf_ieee1905_timestamp_string;
467
static int hf_ieee1905_1905_layer_sec_capa_onboarding;
468
static int hf_ieee1905_1905_layer_sec_capa_mic_sup;
469
static int hf_ieee1905_1905_layer_sec_capa_enc_alg_sup;
470
static int hf_ieee1905_ap_wf6_capa_radio_id;
471
static int hf_ieee1905_ap_wf6_role_count;
472
static int hf_ieee1905_ap_wf6_agent_role_flags;
473
static int hf_ieee1905_ap_wf6_capa_agents_role;
474
static int hf_ieee1905_ap_wf6_capa_he_160_support;
475
static int hf_ieee1905_ap_wf6_capa_he_80p80_support;
476
static int hf_ieee1905_ap_wf6_capa_reserved;
477
static int hf_ieee1905_ap_wf6_he_supported_flags;
478
static int hf_ieee1905_ap_wf6_su_beamformer;
479
static int hf_ieee1905_ap_wf6_su_beamformee;
480
static int hf_ieee1905_ap_wf6_mu_beamformer_status;
481
static int hf_ieee1905_ap_wf6_beamformee_sts_le_80mhz;
482
static int hf_ieee1905_ap_wf6_beamformee_sts_gt_80mhz;
483
static int hf_ieee1905_ap_wf6_ul_mu_mimo;
484
static int hf_ieee1905_ap_wf6_ul_ofdma;
485
static int hf_ieee1905_ap_wf6_dl_ofdma;
486
static int hf_ieee1905_ap_wf6_mimo_max_flags;
487
static int hf_ieee1905_ap_wf6_max_ap_dl_mu_mimo_tx;
488
static int hf_ieee1905_ap_wf6_max_ap_ul_mu_mimi_rx;
489
static int hf_ieee1905_ap_wf6_dl_ofdma_max_tx;
490
static int hf_ieee1905_ap_wf6_ul_ofdma_max_rx;
491
static int hf_ieee1905_ap_wf6_gen_flags;
492
static int hf_ieee1905_ap_wf6_gen_rts;
493
static int hf_ieee1905_ap_wf6_gen_mu_rts;
494
static int hf_ieee1905_ap_wf6_gen_multi_bssid;
495
static int hf_ieee1905_ap_wf6_gen_mu_edca;
496
static int hf_ieee1905_ap_wf6_gen_twt_requester;
497
static int hf_ieee1905_ap_wf6_gen_twt_responder;
498
static int hf_ieee1905_ap_wf6_gen_reserved;
499
static int hf_ieee1905_agent_list_bytes;
500
static int hf_ieee1905_mic_group_temporal_key_id;
501
static int hf_ieee1905_mic_integrity_transmission_counter;
502
static int hf_ieee1905_mic_source_la_mac_id;
503
static int hf_ieee1905_mic_length;
504
static int hf_ieee1905_mic_bytes;
505
static int hf_ieee1905_1905_gtk_key_id;
506
static int hf_ieee1905_mic_version;
507
static int hf_ieee1905_mic_reserved;
508
static int hf_ieee1905_encrypted_dest_al_mac_addr;
509
static int hf_ieee1905_encrypted_enc_transmission_count;
510
static int hf_ieee1905_encrypted_source_la_mac_id;
511
static int hf_ieee1905_encrypted_enc_output_field_len;
512
static int hf_ieee1905_encrypted_enc_output_field;
513
static int hf_ieee1905_cac_request_radio_count;
514
static int hf_ieee1905_cac_request_radio_id;
515
static int hf_ieee1905_cac_request_op_class;
516
static int hf_ieee1905_cac_request_channel;
517
static int hf_ieee1905_cac_request_flags;
518
static int hf_ieee1905_cac_request_method;
519
static int hf_ieee1905_cac_request_completion_action;
520
static int hf_ieee1905_cac_request_completion_unsuccess;
521
static int hf_ieee1905_cac_request_reserved;
522
static int hf_ieee1905_cac_termination_radio_count;
523
static int hf_ieee1905_cac_terminate_radio_id;
524
static int hf_ieee1905_cac_terminate_op_class;
525
static int hf_ieee1905_cac_terminate_channel;
526
static int hf_ieee1905_cac_completion_rep_radio_count;
527
static int hf_ieee1905_cac_completion_radio_id;
528
static int hf_ieee1905_cac_completion_op_class;
529
static int hf_ieee1905_cac_completion_channel;
530
static int hf_ieee1905_cac_completion_status;
531
static int hf_ieee1905_cac_completion_radar_count;
532
static int hf_ieee1905_cac_comp_radar_op_class;
533
static int hf_ieee1905_cac_comp_radar_channel;
534
static int hf_ieee1905_cac_status_rpt_active_chan;
535
static int hf_ieee1905_cac_status_rpt_avail_op_class;
536
static int hf_ieee1905_cac_status_rpt_avail_channel;
537
static int hf_ieee1905_cac_status_rpt_avail_minutes;
538
static int hf_ieee1905_cac_status_rpt_non_occ_cnt;
539
static int hf_ieee1905_cac_status_rpt_non_occ_op_class;
540
static int hf_ieee1905_cac_status_rpt_non_occ_channel;
541
static int hf_ieee1905_cac_status_rpt_non_occ_seconds;
542
static int hf_ieee1905_cac_status_rpt_active_cac_cnt;
543
static int hf_ieee1905_cac_status_rpt_active_cac_op_class;
544
static int hf_ieee1905_cac_status_rpt_active_cac_channel;
545
static int hf_ieee1905_cac_status_rpt_active_cac_seconds;
546
static int hf_ieee1905_cac_capa_country_code;
547
static int hf_ieee1905_cac_capa_radio_cnt;
548
static int hf_ieee1905_cac_capabilities_radio_id;
549
static int hf_ieee1905_cac_capabilities_types_num;
550
static int hf_ieee1905_cac_capabilities_cac_mode;
551
static int hf_ieee1905_cac_capabilities_cac_seconds;
552
static int hf_ieee1905_cac_capabilities_op_class_num;
553
static int hf_ieee1905_cac_capabilities_op_class;
554
static int hf_ieee1905_cac_capabilities_channel_cnt;
555
static int hf_ieee1905_cac_capabillity_channel;
556
static int hf_ieee1905_multi_ap_version;
557
static int hf_ieee1905_max_total_serv_prio_rules;
558
static int hf_ieee1905_r2_ap_capa_reserved;
559
static int hf_ieee1905_r2_ap_capa_flags;
560
static int hf_ieee1905_byte_counter_units;
561
static int hf_ieee1905_ctag_service_prio_flag;
562
static int hf_ieee1905_dpp_onboarding_flag;
563
static int hf_ieee1905_traffic_separation_flag;
564
static int hf_ieee1905_r2_ap_capa_flags_reserved;
565
static int hf_ieee1905_max_vid_count;
566
static int hf_ieee1905_default_802_1q_settings_primary_vlan;
567
static int hf_ieee1905_default_802_1q_settings_flags;
568
static int hf_ieee1905_default_802_1q_settings_default_pcp;
569
static int hf_ieee1905_default_802_1q_settings_reserved;
570
static int hf_ieee1905_ap_radio_advanced_capa_radio_id;
571
static int hf_ieee1905_radio_advanced_capa_flags;
572
static int hf_ieee1905_traffic_separation_policy_num_ssids;
573
static int hf_ieee1905_traffic_separation_policy_ssid_len;
574
static int hf_ieee1905_traffic_separation_policy_ssid;
575
static int hf_ieee1905_traffic_separation_policy_vlanid;
576
static int hf_ieee1905_bss_config_report_radio_count;
577
static int hf_ieee1905_bss_config_report_radio_id;
578
static int hf_ieee1905_bss_config_report_flags;
579
static int hf_ieee1905_bss_config_report_backhaul_bss;
580
static int hf_ieee1905_bss_config_report_fronthaul_bss;
581
static int hf_ieee1905_bss_config_report_r1_disallowed_status;
582
static int hf_ieee1905_bss_config_report_r2_disallowed_status;
583
static int hf_ieee1905_bss_config_report_multiple_bssid_set;
584
static int hf_ieee1905_bss_config_report_transmitted_bssid;
585
static int hf_ieee1905_bss_config_report_reserved;
586
static int hf_ieee1905_bss_config_report_res;
587
static int hf_ieee1905_bss_config_report_bss_cnt;
588
static int hf_ieee1902_bss_config_report_mac;
589
static int hf_ieee1902_bss_config_report_ssid_len;
590
static int hf_ieee1905_bss_config_report_ssid;
591
static int hf_ieee1905_bssid_tlv_bssid;
592
static int hf_ieee1905_service_prio_rule_id;
593
static int hf_ieee1905_service_prio_rule_flags;
594
static int hf_ieee1905_service_prio_rule_add_remove_filter_bit;
595
static int hf_ieee1905_service_prio_rule_flags_reserved;
596
static int hf_ieee1905_service_prio_match_flags;
597
static int hf_ieee1905_service_prio_rule_precedence;
598
static int hf_ieee1905_service_prio_rule_output;
599
static int hf_ieee1905_service_prio_rule_match_always;
600
static int hf_ieee1905_service_prio_rule_match_reserved;
601
static int hf_ieee1905_service_prio_rule_match_up_in_qos;
602
static int hf_ieee1905_service_prio_rule_match_up_control_match;
603
static int hf_ieee1905_service_prio_rule_match_source_mac;
604
static int hf_ieee1905_service_prio_rule_match_source_mac_sense;
605
static int hf_ieee1905_service_prio_rule_match_dest_mac;
606
static int hf_ieee1905_service_prio_rule_match_dest_mac_sense;
607
static int hf_ieee1905_service_prio_rule_up_control;
608
static int hf_ieee1905_service_prio_rule_source_mac;
609
static int hf_ieee1905_service_prio_rule_dest_mac;
610
static int hf_ieee1905_dscp_mapping_table_val;
611
static int hf_ieee1905_r2_error_reason_code;
612
static int hf_ieee1905_r2_error_bssid;
613
static int hf_ieee1905_ap_radio_advanced_capa_backhaul_bss_traffic_sep;
614
static int hf_ieee1905_ap_radio_advanced_capa_combined_r1_r2_backhaul;
615
static int hf_ieee1905_ap_radio_advanced_capa_mscs;
616
static int hf_ieee1905_ap_radio_advanced_capa_scs;
617
static int hf_ieee1905_ap_radio_advanced_capa_qos_map;
618
static int hf_ieee1905_ap_radio_advanced_capa_dscp_policy;
619
static int hf_ieee1905_ap_radio_advanced_capa_qm_scs_traffic_descr;
620
static int hf_ieee1905_ap_radio_advanced_capa_reserved;
621
static int hf_ieee1905_assoc_status_notif_num_bssid;
622
static int hf_ieee1905_assoc_status_notif_bssid;
623
static int hf_ieee1905_assoc_status_notif_status;
624
static int hf_ieee1905_source_info_mac_addr;
625
static int hf_ieee1905_tunneled_message_type;
626
static int hf_ieee1905_tunneled_data;
627
static int hf_ieee1905_status_code_status;
628
static int hf_ieee1905_disassociation_reason_code;
629
static int hf_ieee1905_backhaul_sta_radio_id;
630
static int hf_ieee1905_backhaul_sta_radio_capabilities;
631
static int hf_ieee1905_backhaul_sta_radio_capa_mac_included;
632
static int hf_ieee1905_backhaul_sta_radio_capa_reserved;
633
static int hf_ieee1905_backhaul_sta_addr;
634
static int hf_ieee1905_backhaul_akm_suite_capa_count;
635
static int hf_ieee1905_akm_backhaul_suite_oui;
636
static int hf_ieee1905_akm_backhaul_suite_type;
637
static int hf_ieee1905_fronthaul_akm_suite_capa_count;
638
static int hf_ieee1905_akm_fronthaul_suite_oui;
639
static int hf_ieee1905_akm_fronthaul_suite_type;
640
static int hf_ieee1905_encap_dpp_flags;
641
static int hf_ieee1905_dpp_encap_enrollee_mac_present;
642
static int hf_ieee1905_dpp_encap_reserved;
643
static int hf_ieee1905_dpp_encap_frame_type_flag;
644
static int hf_ieee1905_dpp_encap_reserved2;
645
static int hf_ieee1905_encap_dpp_sta_mac;
646
static int hf_ieee1905_dpp_encap_frame_type;
647
static int hf_ieee1905_dpp_encap_frame_length;
648
static int hf_ieee1905_dpp_encap_dpp_oui;
649
static int hf_ieee1905_dpp_encap_public_action;
650
static int hf_ieee1905_dpp_encap_dpp_subtype;
651
static int hf_ieee1905_dpp_bootstrapping_uri_radio_id;
652
static int hf_ieee1905_dpp_bootstrapping_uri_local_mac_addr;
653
static int hf_ieee1905_dpp_bootstrapping_uri_bsta_mac_addr;
654
static int hf_ieee1905_dpp_bootstrapping_uri_received;
655
static int hf_ieee1905_dpp_advertise_cce_flag;
656
static int hf_ieee1905_dpp_chirp_value_flags;
657
static int hf_ieee1905_dpp_chirp_enrollee_mac_addr_present;
658
static int hf_ieee1905_dpp_chirp_hash_validity;
659
static int hf_ieee1905_dpp_chirp_reserved;
660
static int hf_ieee1905_dpp_chirp_enrollee_mac_addr;
661
static int hf_ieee1905_dpp_chirp_value_hash_length;
662
static int hf_ieee1905_dpp_chirp_value_hash_value;
663
static int hf_ieee1905_dev_inventory_lsn;
664
static int hf_ieee1905_dev_inventory_serial;
665
static int hf_ieee1905_dev_inventory_lsv;
666
static int hf_ieee1905_dev_inventory_sw_vers;
667
static int hf_ieee1905_dev_inventory_lee;
668
static int hf_ieee1905_dev_inventory_exec_env;
669
static int hf_ieee1905_dev_inventory_num_radios;
670
static int hf_ieee1905_dev_inventory_radio_id;
671
static int hf_ieee1905_dev_inventory_lcv;
672
static int hf_ieee1905_dev_inventory_chp_ven;
673
static int hf_ieee1905_r2_steering_req_src_bssid;
674
static int hf_ieee1905_r2_steering_req_flags;
675
static int hf_ieee1905_r2_steering_request_mode_flag;
676
static int hf_ieee1905_r2_btm_disassoc_imminent_flag;
677
static int hf_ieee1905_r2_btm_abridged_flag;
678
static int hf_ieee1905_r2_steering_req_reserved;
679
static int hf_ieee1905_r2_steering_op_window;
680
static int hf_ieee1905_r2_steering_btm_dissasoc_tmr;
681
static int hf_ieee1905_r2_steering_sta_count;
682
static int hf_ieee1905_r2_steering_sta_mac;
683
static int hf_ieee1905_r2_steering_target_count;
684
static int hf_ieee1905_r2_steering_target_bssid;
685
static int hf_ieee1905_r2_steering_target_op_class;
686
static int hf_ieee1905_r2_steering_target_channel;
687
static int hf_ieee1905_r2_steering_reason;
688
static int hf_ieee1905_metric_collection_interval;
689
static int hf_ieee1905_max_reporting_rate;
690
static int hf_ieee1905_bss_configuration_request;
691
static int hf_ieee1905_bss_configuration_response;
692
static int hf_ieee1905_dpp_message_public_action;
693
static int hf_ieee1905_spatial_reuse_req_radio_id;
694
static int hf_ieee1905_spatial_reuse_color_flags;
695
static int hf_ieee1905_spatial_reuse_reserved;
696
static int hf_ieee1905_spatial_reuse_bss_color;
697
static int hf_ieee1905_spatial_reuse_hesiga_flags;
698
static int hf_ieee1905_spatial_reuse_reserved2;
699
static int hf_ieee1905_spatial_reuse_hesiga_value15_allowed;
700
static int hf_ieee1905_spatial_reuse_srg_info_valid;
701
static int hf_ieee1905_spatial_reuse_non_srg_offset_valid;
702
static int hf_ieee1905_spatial_reuse_reserved3;
703
static int hf_ieee1905_spatial_reuse_psr_disallowed;
704
static int hf_ieee1905_spatial_reuse_non_srg_obsspd_max_offset;
705
static int hf_ieee1905_spatial_reuse_not_valid1;
706
static int hf_ieee1905_spatial_reuse_srg_obsspd_min_offset;
707
static int hf_ieee1905_spatial_reuse_srg_obsspd_max_offset;
708
static int hf_ieee1905_spatial_reuse_srg_bss_color_bitmap;
709
static int hf_ieee1905_spatial_reuse_srg_partial_bssid_bitmap;
710
static int hf_ieee1905_spatial_reuse_not_valid2;
711
static int hf_ieee1905_spatial_reuse_not_valid3;
712
static int hf_ieee1905_spatial_reuse_not_valid4;
713
static int hf_ieee1905_spatial_reuse_not_valid5;
714
static int hf_ieee1905_spatial_reuse_reserved4;
715
static int hf_ieee1905_spatial_reuse_rep_radio_id;
716
static int hf_ieee1905_spatial_reuse_rep_color_flags;
717
static int hf_ieee1905_spatial_reuse_rep_reserved;
718
static int hf_ieee1905_spatial_reuse_rep_partial_bss_color;
719
static int hf_ieee1905_spatial_reuse_rep_bss_color;
720
static int hf_ieee1905_spatial_reuse_rep_hesiga_flags;
721
static int hf_ieee1905_spatial_reuse_rep_reserved2;
722
static int hf_ieee1905_spatial_reuse_rep_hesiga_value15_allowed;
723
static int hf_ieee1905_spatial_reuse_rep_srg_info_valid;
724
static int hf_ieee1905_spatial_reuse_rep_non_srg_offset_valid;
725
static int hf_ieee1905_spatial_reuse_rep_reserved3;
726
static int hf_ieee1905_spatial_reuse_rep_psr_disallowed;
727
static int hf_ieee1905_spatial_reuse_rep_non_srg_obsspd_max_offset;
728
static int hf_ieee1905_spatial_reuse_rep_not_valid1;
729
static int hf_ieee1905_spatial_reuse_rep_srg_obsspd_min_offset;
730
static int hf_ieee1905_spatial_reuse_rep_srg_obsspd_max_offset;
731
static int hf_ieee1905_spatial_reuse_rep_srg_bss_color_bitmap;
732
static int hf_ieee1905_spatial_reuse_rep_srg_partial_bssid_bitmap;
733
static int hf_ieee1905_spatial_reuse_rep_not_valid2;
734
static int hf_ieee1905_spatial_reuse_rep_not_valid3;
735
static int hf_ieee1905_spatial_reuse_rep_not_valid4;
736
static int hf_ieee1905_spatial_reuse_rep_not_valid5;
737
static int hf_ieee1905_spatial_reuse_rep_nbor_bss_color_bitmap;
738
static int hf_ieee1905_spatial_reuse_rep_reserved4;
739
static int hf_ieee1905_spatial_reuse_config_radio_id;
740
static int hf_ieee1905_spatial_reuse_config_response;
741
static int hf_ieee1905_qos_mgmt_policy_mscs_disallowed;
742
static int hf_ieee1905_qos_mgmt_mscs_disallow_sta;
743
static int hf_ieee1905_qos_mgmt_policy_scs_disallowed;
744
static int hf_ieee1905_qos_mgmt_scs_disallow_sta;
745
static int hf_ieee1905_qos_mgmt_desc_qmid;
746
static int hf_ieee1905_qos_mgmt_desc_bssid;
747
static int hf_ieee1905_qos_mgmt_desc_client_mac;
748
static int hf_ieee1905_controller_capa_flags;
749
static int hf_ieee1905_controller_capa_reserved;
750
static int hf_ieee1905_controller_capa_early_ap_capa;
751
static int hf_ieee1905_controller_capa_kbmb_counter;
752
static int hf_ieee1905_wifi_7_agent_capabilities_max_num_mlds;
753
static int hf_ieee1905_wifi_7_agent_capabilities_flags;
754
static int hf_ieee1905_wifi_7_agent_capabilities_flags_sta_max_links;
755
static int hf_ieee1905_wifi_7_agent_capabilities_flags_ap_max_links;
756
static int hf_ieee1905_wifi_7_agent_capabilities_flags_ttl_mapping_cap;
757
static int hf_ieee1905_wifi_7_agent_capabilities_flags_reserved;
758
static int hf_ieee1905_wifi_7_agent_capabilities_reserved;
759
static int hf_ieee1905_wifi_7_agent_capabilities_radio_num;
760
static int hf_ieee1905_wifi_7_agent_capabilities_radio_id;
761
static int hf_ieee1905_wifi_7_agent_capabilities_radio_reserved;
762
static int hf_ieee1905_wifi_7_agent_capabilities_radio_flags;
763
static int hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_str_support;
764
static int hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_nstr_support;
765
static int hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_emlsr_support;
766
static int hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_emlmr_support;
767
static int hf_ieee1905_wifi_7_agent_capabilities_radio_flags_reserved1;
768
static int hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_str_support;
769
static int hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_nstr_support;
770
static int hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_emlsr_support;
771
static int hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_emlmr_support;
772
static int hf_ieee1905_wifi_7_agent_capabilities_radio_flags_reserved2;
773
static int hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_str_records;
774
static int hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_nstr_records;
775
static int hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_emlsr_records;
776
static int hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_emlmr_records;
777
static int hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_str_records;
778
static int hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_nstr_records;
779
static int hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_emlsr_records;
780
static int hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_emlmr_records;
781
static int hf_ieee1905_wifi_7_agent_capabilities_radio_record_id;
782
static int hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags;
783
static int hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags_freq_separation;
784
static int hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags_reserved;
785
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_num;
786
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags;
787
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags_ap_mld_mac_addr_valid;
788
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags_reserved;
789
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_ssid_len;
790
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_ssid;
791
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_mac_addr;
792
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2;
793
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_str;
794
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_nstr;
795
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_emlsr;
796
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_emlmr;
797
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_reserved;
798
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_reserved;
799
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_num;
800
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags;
801
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_affiliated_ap_mac_addr_valid;
802
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_link_id_valid;
803
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_reserved;
804
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_radio_id;
805
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_mac_addr;
806
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_link_id;
807
static int hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_reserved;
808
static int hf_ieee1905_backhaul_sta_mld_configuration_flags;
809
static int hf_ieee1905_backhaul_sta_mld_configuration_flags_bsta_mld_mac_addr_valid;
810
static int hf_ieee1905_backhaul_sta_mld_configuration_flags_ap_mld_mac_addr_valid;
811
static int hf_ieee1905_backhaul_sta_mld_configuration_flags_reserved;
812
static int hf_ieee1905_backhaul_sta_mld_configuration_bsta_mld_mac_addr;
813
static int hf_ieee1905_backhaul_sta_mld_configuration_ap_mld_mac_addr;
814
static int hf_ieee1905_backhaul_sta_mld_configuration_flags2;
815
static int hf_ieee1905_backhaul_sta_mld_configuration_flags2_str;
816
static int hf_ieee1905_backhaul_sta_mld_configuration_flags2_nstr;
817
static int hf_ieee1905_backhaul_sta_mld_configuration_flags2_emlsr;
818
static int hf_ieee1905_backhaul_sta_mld_configuration_flags2_emlmr;
819
static int hf_ieee1905_backhaul_sta_mld_configuration_flags2_reserved;
820
static int hf_ieee1905_backhaul_sta_mld_configuration_reserved;
821
static int hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_num;
822
static int hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags;
823
static int hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags_affiliated_bsta_mac_addr_valid;
824
static int hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags_reserved;
825
static int hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_radio_id;
826
static int hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_mac_addr;
827
static int hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_reserved;
828
static int hf_ieee1905_associated_sta_mld_configuration_sta_mld_mac_addr;
829
static int hf_ieee1905_associated_sta_mld_configuration_ap_mld_mac_addr;
830
static int hf_ieee1905_associated_sta_mld_configuration_flags;
831
static int hf_ieee1905_associated_sta_mld_configuration_flags_str;
832
static int hf_ieee1905_associated_sta_mld_configuration_flags_nstr;
833
static int hf_ieee1905_associated_sta_mld_configuration_flags_emlsr;
834
static int hf_ieee1905_associated_sta_mld_configuration_flags_emlmr;
835
static int hf_ieee1905_associated_sta_mld_configuration_flags_reserved;
836
static int hf_ieee1905_associated_sta_mld_configuration_reserved;
837
static int hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_num;
838
static int hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_bssid;
839
static int hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_mac_addr;
840
static int hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_reserved;
841
static int hf_ieee1905_affiliated_sta_metrics_sta_mac_addr;
842
static int hf_ieee1905_affiliated_sta_metrics_bytes_sent;
843
static int hf_ieee1905_affiliated_sta_metrics_bytes_rcvd;
844
static int hf_ieee1905_affiliated_sta_metrics_packets_sent;
845
static int hf_ieee1905_affiliated_sta_metrics_packets_rcvd;
846
static int hf_ieee1905_affiliated_sta_metrics_packets_sent_errors;
847
static int hf_ieee1905_affiliated_sta_metrics_reserved;
848
static int hf_ieee1905_affiliated_ap_metrics_bssid;
849
static int hf_ieee1905_affiliated_ap_metrics_packets_sent;
850
static int hf_ieee1905_affiliated_ap_metrics_packets_rcvd;
851
static int hf_ieee1905_affiliated_ap_metrics_packets_sent_errors;
852
static int hf_ieee1905_affiliated_ap_metrics_ucast_bytes_sent;
853
static int hf_ieee1905_affiliated_ap_metrics_ucast_bytes_rcvd;
854
static int hf_ieee1905_affiliated_ap_metrics_mcast_bytes_sent;
855
static int hf_ieee1905_affiliated_ap_metrics_mcast_bytes_rcvd;
856
static int hf_ieee1905_affiliated_ap_metrics_bcast_bytes_sent;
857
static int hf_ieee1905_affiliated_ap_metrics_bcast_bytes_rcvd;
858
static int hf_ieee1905_affiliated_ap_metrics_reserved;
859
static int hf_ieee1905_eht_operations_reserved;
860
static int hf_ieee1905_eht_operations_radio_num;
861
static int hf_ieee1905_eht_operations_radio_id;
862
static int hf_ieee1905_eht_operations_radio_reserved;
863
static int hf_ieee1905_eht_operations_radio_bss_num;
864
static int hf_ieee1905_eht_operations_radio_bss_bssid;
865
static int hf_ieee1905_eht_operations_radio_bss_reserved;
866
static int hf_ieee1905_eht_operations_radio_bss_flags;
867
static int hf_ieee1905_eht_operations_radio_bss_flags_eht_operation_information_valid;
868
static int hf_ieee1905_eht_operations_radio_bss_flags_disabled_subchannel_valid;
869
static int hf_ieee1905_eht_operations_radio_bss_flags_eht_default_pe_duration;
870
static int hf_ieee1905_eht_operations_radio_bss_flags_group_addr_bu_indication_limit;
871
static int hf_ieee1905_eht_operations_radio_bss_flags_group_addr_bu_indication_exponent;
872
static int hf_ieee1905_eht_operations_radio_bss_flags_reserved;
873
static int hf_ieee1905_eht_operations_radio_bss_basic_eht_nss_mcs_set;
874
static int hf_ieee1905_eht_operations_radio_bss_control;
875
static int hf_ieee1905_eht_operations_radio_bss_ccfs0;
876
static int hf_ieee1905_eht_operations_radio_bss_ccfs1;
877
static int hf_ieee1905_eht_operations_radio_bss_disabled_subchannel_bitmap;
878
static int hf_ieee1905_available_spectrum_inquiry_request_object;
879
static int hf_ieee1905_available_spectrum_inquiry_response_object;
880
881
static int ett_ieee1905;
882
static int ett_ieee1905_flags;
883
static int ett_ieee1905_tlv_len;
884
static int ett_tlv;
885
static int ett_device_information_list;
886
static int ett_device_information_tree;
887
static int ett_media_type;
888
static int ett_bridging_tuples_list;
889
static int ett_bridging_mac_list;
890
static int ett_non_1905_neighbor_list;
891
static int ett_1905_neighbor_list;
892
static int ett_ieee1905_neighbor_flags;
893
static int ett_media_type_list;
894
static int ett_media_item;
895
static int ett_local_interface_list;
896
static int ett_local_interface_info;
897
static int ett_ipv4_list;
898
static int ett_ipv4_info;
899
static int ett_ipv4_type_addr_list;
900
static int ett_ipv4_addr_info;
901
static int ett_ipv6_list;
902
static int ett_ipv6_info;
903
static int ett_ipv6_type_addr_list;
904
static int ett_ipv6_addr_info;
905
static int ett_push_button_phy_list;
906
static int ett_push_button_phy_info;
907
static int ett_power_off_info;
908
static int ett_power_change_list;
909
static int ett_power_change_info;
910
static int ett_power_status_list;
911
static int ett_power_status_info;
912
static int ett_l2_local_intf_list;
913
static int ett_l2_neighbor_device_info;
914
static int ett_l2_neighbor_dev_list;
915
static int ett_l2_neighbor_dev_tree;
916
static int ett_supported_service_list;
917
static int ett_searched_service_list;
918
static int ett_ap_operational_bss_list;
919
static int ett_ap_operational_bss_tree;
920
static int ett_ap_operational_bss_intf;
921
static int ett_ap_operational_bss_intf_list;
922
static int ett_ap_operational_bss_intf_tree;
923
static int ett_ieee1905_capabilities_flags;
924
static int ett_ieee1905_unsuccessful_associations;
925
static int ett_assoc_control_list;
926
static int ett_ieee1905_steering_request_flags;
927
static int ett_ieee1905_association_event_flags;
928
static int ett_client_capability_ies;
929
static int ett_radio_basic_class_list;
930
static int ett_ap_radio_basic_cap_class_tree;
931
static int ett_radio_basic_non_op_list;
932
static int ett_ht_cap_flags;
933
static int ett_vht_cap_flags;
934
static int ett_ieee1905_ap_vht_tx_mcs_set;
935
static int ett_ieee1905_ap_vht_rx_mcs_set;
936
static int ett_assoc_clients_bss_list;
937
static int ett_assoc_client_bss_tree;
938
static int ett_assoc_client_list;
939
static int ett_assoc_client_tree;
940
static int ett_channel_preference_class_list;
941
static int ett_ap_channel_preference_class_tree;
942
static int ett_channel_pref_channel_list;
943
static int ett_ieee1905_channel_prefs_flags;
944
static int ett_op_channel_report_class_tree;
945
static int ett_op_channel_report_class_list;
946
static int ett_sta_link_metrics_query_channel_list;
947
static int ett_sta_link_link_mac_addr_list;
948
static int ett_metric_reporting_policy_list;
949
static int ett_metric_reporting_policy_tree;
950
static int ett_metric_policy_flags;
951
static int ett_ap_metric_query_bssid_list;
952
static int ett_ieee1905_ap_metrics_flags;
953
static int ett_sta_list_metrics_bss_list;
954
static int ett_sta_list_metrics_bss_tree;
955
static int ett_sta_wf6_status_report_tid_list;
956
static int ett_sta_wf6_status_report_tid_tree;
957
static int ett_sta_extended_link_metrics_list;
958
static int ett_sta_extended_link_metrics_tree;
959
static int ett_ap_he_mcs_set;
960
static int ett_ap_he_cap_flags;
961
static int ett_ieee1905_ap_he_tx_mcs_set;
962
static int ett_ieee1905_ap_he_rx_mcs_set;
963
static int ett_steering_policy_disallowed_list;
964
static int ett_btm_steering_policy_disallowed_list;
965
static int ett_btm_steering_radio_list;
966
static int ett_radio_restriction_op_class_list;
967
static int ett_radio_restriction_op_class_tree;
968
static int ett_radio_restriction_channel_list;
969
static int ett_radio_restriction_channel_tree;
970
static int ett_unassoc_sta_link_metric_list;
971
static int ett_unassoc_sta_link_metric_tree;
972
static int ett_beacon_metrics_query_list;
973
static int ett_beacon_metrics_query_tree;
974
static int ett_beacon_metrics_query_channel_list;
975
static int ett_beacon_report_subelement_list;
976
static int ett_beacon_report_sub_element_tree;
977
static int ett_beacon_metrics_response_report_list;
978
static int ett_beacon_metrics_response_report_tree;
979
static int ett_ieee1905_beacon_reported_flags;
980
static int ett_channel_scan_rep_policy;
981
static int ett_channel_scan_capa_radio_list;
982
static int ett_channel_scan_capa_radio;
983
static int ett_channel_scan_capa_flags;
984
static int ett_channel_scan_capa_class_list;
985
static int ett_channel_scan_capa_class;
986
static int ett_channel_scan_capa_channels;
987
static int ett_channel_scan_request_flags;
988
static int ett_channel_scan_request_radio_list;
989
static int ett_channel_scan_request_radio;
990
static int ett_channel_scan_request_class_list;
991
static int ett_channel_scan_request_class;
992
static int ett_channel_scan_request_channels;
993
static int ett_channel_scan_result_neigh_list;
994
static int ett_channel_scan_result_neigh_flags;
995
static int ett_channel_scan_result_neigh;
996
static int ett_channel_scan_result_flags;
997
static int ett_ap_wf6_role_list;
998
static int ett_ap_wf6_role_tree;
999
static int ett_ap_wf6_agent_role_flags;
1000
static int ett_ap_wf6_supported_flags;
1001
static int ett_ap_wf6_mimo_max_flags;
1002
static int ett_ap_wf6_gen_flags;
1003
static int ett_cac_request_flags;
1004
static int ett_cac_request_radio_list;
1005
static int ett_cac_request_radio;
1006
static int ett_cac_terminate_radio_list;
1007
static int ett_cac_terminate_radio;
1008
static int ett_cac_completion_radio_list;
1009
static int ett_cac_completion_radio;
1010
static int ett_cac_completion_radar_list;
1011
static int ett_cac_completion_radar;
1012
static int ett_cac_status_rpt_avail_list;
1013
static int ett_cac_status_rpt_avail_chan;
1014
static int ett_cac_status_rpt_non_occupy_list;
1015
static int ett_cac_status_rpt_unocc_chan;
1016
static int ett_cac_status_rpt_active_cac_list;
1017
static int ett_cac_status_rpt_active_cac_tree;
1018
static int ett_cac_capabilities_radio_list;
1019
static int ett_cac_capabilities_radio_tree;
1020
static int ett_cac_capabilities_type_list;
1021
static int ett_cac_capabilities_type_tree;
1022
static int ett_cac_capabilities_class_list;
1023
static int ett_cac_capabilities_class_tree;
1024
static int ett_cac_capabilities_channel_list;
1025
static int ett_cac_capabilities_channel;
1026
static int ett_r2_ap_capa_flags;
1027
static int ett_edge_interface_list;
1028
static int ett_radio_advanced_capa_flags;
1029
static int ett_ap_operational_backhaul_bss_tree;
1030
static int ett_ap_operational_backhaul_bss_intf_list;
1031
static int ett_default_802_1q_settings_flags;
1032
static int ett_traffic_separation_ssid_list;
1033
static int ett_traffic_separation_ssid;
1034
static int ett_bss_config_report_list;
1035
static int ett_bss_config_report_tree;
1036
static int ett_bss_config_report_bss_list;
1037
static int ett_bss_config_report_bss_tree;
1038
static int ett_bss_config_report_flags;
1039
static int ett_ethernet_config_policy_list;
1040
static int ett_ethernet_config_policy;
1041
static int ett_ethernet_config_policy_flags;
1042
static int ett_ieee1905_service_prio_rule_flags;
1043
static int ett_ieee1905_service_prio_rule_match_flags;
1044
static int ett_backhaul_sta_radio_capa_flags;
1045
static int ett_assoc_status_notif_bssid_list;
1046
static int ett_assoc_status_notif_bssid_tree;
1047
static int ett_akm_suite_list;
1048
static int ett_akm_suite;
1049
static int ett_backhaul_akm_suite_list;
1050
static int ett_backhaul_akm_suite;
1051
static int ett_fronthaul_akm_suite_list;
1052
static int ett_fronthaul_akm_suite;
1053
static int ett_1905_encap_dpp_flags;
1054
static int ett_1905_encap_dpp_classes;
1055
static int ett_1905_encap_dpp_op_class_tree;
1056
static int ett_1905_encap_dpp_channel_list;
1057
static int ett_ieee1905_dpp_chirp;
1058
static int ett_device_inventory_radio_list;
1059
static int ett_device_inventory_radio_tree;
1060
static int ett_r2_steering_sta_list;
1061
static int ett_r2_steering_target_list;
1062
static int ett_r2_steering_target;
1063
static int ett_mic_group_temporal_key;
1064
static int ett_ieee1905_spatial_reuse_color;
1065
static int ett_ieee1905_spatial_reuse_hesiga;
1066
static int ett_ieee1905_spatial_reuse_rep_color;
1067
static int ett_ieee1905_spatial_reuse_rep_hesiga;
1068
static int ett_qos_mgmt_policy_mscs_list;
1069
static int ett_qos_mgmt_policy_scs_list;
1070
static int ett_ieee1905_controller_capa;
1071
static int ett_wifi_7_agent_capabilities_flags;
1072
static int ett_wifi_7_agent_capabilities_radio_list;
1073
static int ett_wifi_7_agent_capabilities_radio;
1074
static int ett_wifi_7_agent_capabilities_radio_flags;
1075
static int ett_wifi_7_agent_capabilities_radio_record_list;
1076
static int ett_wifi_7_agent_capabilities_radio_record;
1077
static int ett_wifi_7_agent_capabilities_radio_record_flags;
1078
static int ett_agent_ap_mld_configuration_ap_mld_list;
1079
static int ett_agent_ap_mld_configuration_ap_mld;
1080
static int ett_agent_ap_mld_configuration_ap_mld_flags;
1081
static int ett_agent_ap_mld_configuration_ap_mld_flags2;
1082
static int ett_agent_ap_mld_configuration_ap_mld_affiliated_ap_list;
1083
static int ett_agent_ap_mld_configuration_ap_mld_affiliated_ap;
1084
static int ett_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags;
1085
static int ett_backhaul_sta_mld_configuration_flags;
1086
static int ett_backhaul_sta_mld_configuration_flags2;
1087
static int ett_backhaul_sta_mld_configuration_affiliated_bsta_list;
1088
static int ett_backhaul_sta_mld_configuration_affiliated_bsta;
1089
static int ett_backhaul_sta_mld_configuration_affiliated_bsta_flags;
1090
static int ett_associated_sta_mld_configuration_flags;
1091
static int ett_associated_sta_mld_configuration_affiliated_sta_list;
1092
static int ett_associated_sta_mld_configuration_affiliated_sta;
1093
static int ett_eht_operations_radio_list;
1094
static int ett_eht_operations_radio;
1095
static int ett_eht_operations_radio_bss_list;
1096
static int ett_eht_operations_radio_bss;
1097
static int ett_eht_operations_radio_bss_flags;
1098
1099
static int ett_ieee1905_fragment;
1100
static int ett_ieee1905_fragments;
1101
1102
static expert_field ei_ieee1905_malformed_tlv;
1103
static expert_field ei_ieee1905_extraneous_tlv_data;
1104
1105
#define TOPOLOGY_DISCOVERY_MESSAGE                     0x0000
1106
#define TOPOLOGY_NOTIFICATION_MESSAGE                  0x0001
1107
#define TOPOLOGY_QUERY_MESSAGE                         0x0002
1108
#define TOPOLOGY_RESPONSE_MESSAGE                      0x0003
1109
#define VENDOR_SPECIFIC_MESSAGE                        0x0004
1110
#define LINK_METRIC_QUERY_MESSAGE                      0x0005
1111
#define LINK_METRIC_RESPONSE_MESSAGE                   0x0006
1112
#define AP_AUTOCONFIGURATION_SEARCH_MESSAGE            0x0007
1113
#define AP_AUTOCONFIGURATION_RESPONSE_MESSAGE          0x0008
1114
#define AP_AUTOCONFIGURATION_WSC_MESSAGE               0x0009
1115
#define AP_AUTOCONFIGURATION_RENEW_MESSAGE             0x000A
1116
#define IEEE1905_PUSH_BUTTON_EVENT_NOTIFICATION_MESSAGE 0x000B
1117
#define IEEE1905_PUSH_BUTTON_JOIN_NOTIFICATION_MESSAGE  0x000C
1118
#define HIGHER_LAYER_QUERY_MESSAGE                     0x000D
1119
#define HIGHER_LAYER_RESPONSE_MESSAGE                  0x000E
1120
#define INTERFACE_POWER_CHANGE_REQUEST_MESSAGE         0x000F
1121
#define INTERFACE_POWER_CHANGE_RESPONSE_MESSAGE        0x0010
1122
#define GENERIC_PHY_QUERY_MESSAGE                      0x0011
1123
#define GENERIC_PHY_RESPONSE_MESSAGE                   0x0012
1124
#define IEEE1905_ACK_MESSAGE                           0x8000
1125
#define AP_CAPABILITY_QUERY_MESSAGE                    0x8001
1126
#define AP_CAPABILITY_REPORT_MESSAGE                   0x8002
1127
#define MULTI_AP_POLICY_CONFIG_REQUEST_MESSAGE         0x8003
1128
#define CHANNEL_PREFERENCE_QUERY_MESSAGE               0x8004
1129
#define CHANNEL_PREFERENCE_REPORT_MESSAGE              0x8005
1130
#define CHANNEL_SELECTION_REQUEST_MESSAGE              0x8006
1131
#define CHANNEL_SELECTION_RESPONSE_MESSAGE             0x8007
1132
#define OPERATING_CHANNEL_REPORT_MESSAGE               0x8008
1133
#define CLIENT_CAPABILITIES_QUERY_MESSAGE              0x8009
1134
#define CLIENT_CAPABILITIES_REPORT_MESSAGE             0x800A
1135
#define AP_METRICS_QUERY_MESSAGE                       0x800B
1136
#define AP_METRICS_RESPONSE_MESSAGE                    0x800C
1137
#define ASSOCIATED_STA_LINK_METRICS_QUERY_MESSAGE      0x800D
1138
#define ASSOCIATED_STA_LINK_METRICS_RESPONSE_MESSAGE   0x800E
1139
#define UNASSOCIATED_STA_LINK_METRICS_QUERY_MESSAGE    0x800F
1140
#define UNASSOCIATED_STA_LINK_METRICS_RESPONSE_MESSAGE 0x8010
1141
#define BEACON_METRICS_QUERY_MESSAGE                   0x8011
1142
#define BEACON_METRICS_RESPONSE_METRICS                0x8012
1143
#define COMBINED_INFRASTRUCTURE_METRICS_MESSAGE        0x8013
1144
#define CLIENT_STEERING_REQUEST_MESSAGE                0x8014
1145
#define CLIENT_STEERING_BTM_REPORT_MESSAGE             0x8015
1146
#define CLIENT_ASSOCIATION_CONTROL_REQUEST_MESSAGE     0x8016
1147
#define STEERING_COMPLETED_MESSAGE                     0x8017
1148
#define HIGHER_LAYER_DATA_MESSAGE                      0x8018
1149
#define BACKHAUL_STEERING_REQUEST_MESSAGE              0x8019
1150
#define BACKHAUL_STEERING_RESPONSE_MESSAGE             0x801A
1151
#define CHANNEL_SCAN_REQUEST_MESSAGE                   0x801B
1152
#define CHANNEL_SCAN_REPORT_MESSAGE                    0x801C
1153
#define DPP_CCE_INDICATION_MESSAGE                     0x801D
1154
#define IEEE1905_REKEY_REQUEST_MESSAGE                 0x801E
1155
#define IEEE1905_DECRYPTION_FAILURE                    0x801F
1156
#define CAC_REQUEST_MESSAGE                            0x8020
1157
#define CAC_TERMINATION_MESSAGE                        0x8021
1158
#define CLIENT_DISASSOCIATION_STATS_MESSAGE            0x8022
1159
#define SERVICE_PPRIORITIZATION_REQUEST                0x8023
1160
#define ERROR_RESPONSE_MESSAGE                         0x8024
1161
#define ASSOCIATION_STATUS_NOTIFICATION_MESSAGE        0x8025
1162
#define TUNNELLED_MESSAGE                              0x8026
1163
#define BACKHAUL_STA_CAPABILITY_QUERY_MESSAGE          0x8027
1164
#define BACKHAUL_STA_CAPABILITY_REPORT_MESSAGE         0x8028
1165
#define PROXIED_ENCAP_DPP_MESSAGE                      0x8029
1166
#define DIRECT_ENCAP_DPP_MESSAGE                       0x802a
1167
#define RECONFIGURATION_TRIGGER_MESSAGE                0x802B
1168
#define BSS_CONFIGURATION_REQUEST_MESSAGE              0x802C
1169
#define BSS_CONFIGURATION_RESPONSE_MESSAGE             0x802D
1170
#define BSS_CONFIGURATION_RESULT_MESSAGE               0x802E
1171
#define CHIRP_NOTIFICATION_MESSAGE                     0x802F
1172
#define IEEE1905_ENCAP_EAPOL_MESSAGE                   0x8030
1173
#define DPP_BOOTSTRAPPING_URI_NOTIFICATION_MESSAGE     0x8031
1174
#define ANTICIPATED_CHANNEL_PREFERENCE_MESSAGE         0x8032
1175
#define FAILED_CONNECTION_MESSAGE                      0x8033
1176
#define AGENT_LIST_MESSAGE                             0x8035
1177
#define ANTICIPATED_CHANNEL_USAGE_MESSAGE              0x8036
1178
#define QOS_MANAGEMENT_NOTIFICATION_MESSAGE            0x8037
1179
#define EARLY_AP_CAPABILITY_REPORT_MESSAGE             0x8043
1180
#define AP_MLD_CONFIGURATION_REQUEST_MESSAGE           0x8044
1181
#define AP_MLD_CONFIGURATION_RESPONSE_MESSAGE          0x8045
1182
#define BSTA_MLD_CONFIGURATION_REQUEST_MESSAGE         0x8046
1183
#define BSTA_MLD_CONFIGURATION_RESPONSE_MESSAGE        0x8047
1184
#define AVAILABLE_SPECTRUM_INQUIRY_MESSAGE             0x8049
1185
1186
static const value_string ieee1905_message_type_vals[] = {
1187
  { TOPOLOGY_DISCOVERY_MESSAGE,                  "Topology discovery" },
1188
  { TOPOLOGY_NOTIFICATION_MESSAGE,               "Topology notification" },
1189
  { TOPOLOGY_QUERY_MESSAGE,                      "Topology query" },
1190
  { TOPOLOGY_RESPONSE_MESSAGE,                   "Topology response" },
1191
  { VENDOR_SPECIFIC_MESSAGE,                     "Vendor specific" },
1192
  { LINK_METRIC_QUERY_MESSAGE,                   "Link metric query" },
1193
  { LINK_METRIC_RESPONSE_MESSAGE,                "Link metric response" },
1194
  { AP_AUTOCONFIGURATION_SEARCH_MESSAGE,         "AP autoconfiguration search" },
1195
  { AP_AUTOCONFIGURATION_RESPONSE_MESSAGE,       "AP autoconfiguration response" },
1196
  { AP_AUTOCONFIGURATION_WSC_MESSAGE,            "AP autoconfiguration Wi-Fi simple configuration (WSC)" },
1197
  { AP_AUTOCONFIGURATION_RENEW_MESSAGE,          "AP autoconfiguration renew" },
1198
  { IEEE1905_PUSH_BUTTON_EVENT_NOTIFICATION_MESSAGE, "1905 push button event notification" },
1199
  { IEEE1905_PUSH_BUTTON_JOIN_NOTIFICATION_MESSAGE,  "1905 push button join notification" },
1200
  { HIGHER_LAYER_QUERY_MESSAGE,                  "Higher layer query" },
1201
  { HIGHER_LAYER_RESPONSE_MESSAGE,               "Higher layer response" },
1202
  { INTERFACE_POWER_CHANGE_REQUEST_MESSAGE,      "Interface power change request" },
1203
  { INTERFACE_POWER_CHANGE_RESPONSE_MESSAGE,     "Interface power change response" },
1204
  { GENERIC_PHY_QUERY_MESSAGE,                   "Generic phy query" },
1205
  { GENERIC_PHY_RESPONSE_MESSAGE,                "Generic phy response" },
1206
  { IEEE1905_ACK_MESSAGE,                        "1905 Ack" },
1207
  { AP_CAPABILITY_QUERY_MESSAGE,                 "AP Capability Query" },
1208
  { AP_CAPABILITY_REPORT_MESSAGE,                "AP Capability Report" },
1209
  { MULTI_AP_POLICY_CONFIG_REQUEST_MESSAGE,      "Multi-AP Policy Config Request" },
1210
  { CHANNEL_PREFERENCE_QUERY_MESSAGE,            "Channel Preference Query" },
1211
  { CHANNEL_PREFERENCE_REPORT_MESSAGE,           "Channel Preference Report" },
1212
  { CHANNEL_SELECTION_REQUEST_MESSAGE,           "Channel Selection Request" },
1213
  { CHANNEL_SELECTION_RESPONSE_MESSAGE,          "Channel Selection Response" },
1214
  { OPERATING_CHANNEL_REPORT_MESSAGE,            "Operating Channel Report" },
1215
  { CLIENT_CAPABILITIES_QUERY_MESSAGE,           "Client Capability Query"  },
1216
  { CLIENT_CAPABILITIES_REPORT_MESSAGE,          "Client Capability Report" },
1217
  { AP_METRICS_QUERY_MESSAGE,                    "AP Metrics Query" },
1218
  { AP_METRICS_RESPONSE_MESSAGE,                 "AP Metrics Response" },
1219
  { ASSOCIATED_STA_LINK_METRICS_QUERY_MESSAGE,   "Associated STA Link Metrics Query" },
1220
  { ASSOCIATED_STA_LINK_METRICS_RESPONSE_MESSAGE, "Associated STA Link Metrics Response" },
1221
  { UNASSOCIATED_STA_LINK_METRICS_QUERY_MESSAGE, "Unassociated STA Link Metrics Query" },
1222
  { UNASSOCIATED_STA_LINK_METRICS_RESPONSE_MESSAGE, "Unassociated STA Link Metrics Response" },
1223
  { BEACON_METRICS_QUERY_MESSAGE,                "Beacon Metrics Query" },
1224
  { BEACON_METRICS_RESPONSE_METRICS,              "Beacon Metrics Response" },
1225
  { COMBINED_INFRASTRUCTURE_METRICS_MESSAGE,     "Combined Infrastructure Metrics" },
1226
  { CLIENT_STEERING_REQUEST_MESSAGE,             "Client Steering Request" },
1227
  { CLIENT_STEERING_BTM_REPORT_MESSAGE,          "Client Steering BTM Report" },
1228
  { CLIENT_ASSOCIATION_CONTROL_REQUEST_MESSAGE,  "Client Association Control Request" },
1229
  { STEERING_COMPLETED_MESSAGE,                  "Steering Completed" },
1230
  { HIGHER_LAYER_DATA_MESSAGE,                   "Higher Layer Data" },
1231
  { BACKHAUL_STEERING_REQUEST_MESSAGE,           "Backhaul Steering Request" },
1232
  { BACKHAUL_STEERING_RESPONSE_MESSAGE,          "Backhaul Steering Response" },
1233
  { CHANNEL_SCAN_REQUEST_MESSAGE,                "Channel Scan Request" },
1234
  { CHANNEL_SCAN_REPORT_MESSAGE,                 "Channel Scan Report" },
1235
  { DPP_CCE_INDICATION_MESSAGE,                  "DPP CCE Indication" },
1236
  { IEEE1905_REKEY_REQUEST_MESSAGE,              "1905 Rekey Request" },
1237
  { IEEE1905_DECRYPTION_FAILURE,                 "1905 Decryption Failure" },
1238
  { CAC_REQUEST_MESSAGE,                         "CAC Request" },
1239
  { CAC_TERMINATION_MESSAGE,                     "CAC Termination" },
1240
  { CLIENT_DISASSOCIATION_STATS_MESSAGE,         "Client Disassociation Stats" },
1241
  { SERVICE_PPRIORITIZATION_REQUEST,             "Service Prioritization Request" },
1242
  { ERROR_RESPONSE_MESSAGE,                      "Error Response" },
1243
  { ASSOCIATION_STATUS_NOTIFICATION_MESSAGE,     "Association Status Notification" },
1244
  { TUNNELLED_MESSAGE,                           "Tunnelled" },
1245
  { BACKHAUL_STA_CAPABILITY_QUERY_MESSAGE,       "Backhaul STA Capability Query" },
1246
  { BACKHAUL_STA_CAPABILITY_REPORT_MESSAGE,      "Backhaul STA Capability Report" },
1247
  { PROXIED_ENCAP_DPP_MESSAGE,                   "Proxied Encap DPP" },
1248
  { DIRECT_ENCAP_DPP_MESSAGE,                    "Direct Encap DPP" },
1249
  { RECONFIGURATION_TRIGGER_MESSAGE,             "Reconfiguration Trigger" },
1250
  { BSS_CONFIGURATION_REQUEST_MESSAGE,           "BSS Configuration Request" },
1251
  { BSS_CONFIGURATION_RESPONSE_MESSAGE,          "BSS Configuration Response" },
1252
  { BSS_CONFIGURATION_RESULT_MESSAGE,            "BSS Configuration Result" },
1253
  { CHIRP_NOTIFICATION_MESSAGE,                  "Chirp Notification" },
1254
  { IEEE1905_ENCAP_EAPOL_MESSAGE,                "1905 Encap EAPOL" },
1255
  { DPP_BOOTSTRAPPING_URI_NOTIFICATION_MESSAGE,  "DPP Bootstrapping URI Notification" },
1256
  { ANTICIPATED_CHANNEL_PREFERENCE_MESSAGE,      "Anticipated Channel Preference" },
1257
  { FAILED_CONNECTION_MESSAGE,                   "Failed Connection" },
1258
  { AGENT_LIST_MESSAGE,                          "Agent List" },
1259
  { ANTICIPATED_CHANNEL_USAGE_MESSAGE,           "Anticipated Channel Usage" },
1260
  { QOS_MANAGEMENT_NOTIFICATION_MESSAGE,         "QoS Management Notification" },
1261
  { EARLY_AP_CAPABILITY_REPORT_MESSAGE,          "Early AP Capability Report" },
1262
  { AP_MLD_CONFIGURATION_REQUEST_MESSAGE,        "AP MLD Configuration Request" },
1263
  { AP_MLD_CONFIGURATION_RESPONSE_MESSAGE,       "AP MLD Configuration Response" },
1264
  { BSTA_MLD_CONFIGURATION_REQUEST_MESSAGE,      "BSTA MLD Configuration Request" },
1265
  { BSTA_MLD_CONFIGURATION_RESPONSE_MESSAGE,     "BSTA MLD Configuration Response" },
1266
  { AVAILABLE_SPECTRUM_INQUIRY_MESSAGE,          "Available Spectrum Inquiry Message" },
1267
  { 0, NULL }
1268
};
1269
static value_string_ext ieee1905_message_type_vals_ext = VALUE_STRING_EXT_INIT(ieee1905_message_type_vals);
1270
1271
9.39k
#define EOM_TLV                                 0x00
1272
469
#define AL_MAC_ADDRESS_TYPE_TLV                 1
1273
243
#define MAC_ADDRESS_TYPE_TLV                    2
1274
94
#define DEVICE_INFORMATION_TYPE_TLV             3
1275
53
#define DEVICE_BRIDGING_CAPABILITY_TLV          4
1276
22
#define NON_1905_NEIGHBOR_DEVICE_LIST_TLV       6
1277
30
#define NEIGHBOR_DEVICE_TLV                     7
1278
150
#define LINK_METRIC_QUERY_TLV                   8
1279
294
#define TRANSMITTER_LINK_METRIC_TLV             9
1280
127
#define RECEIVER_LINK_METRIC_TLV                10
1281
7
#define VENDOR_SPECIFIC_TLV                     11
1282
171
#define LINK_METRIC_RESULT_CODE_TLV             12
1283
239
#define SEARCHED_ROLE_TLV                       13
1284
141
#define AUTO_CONFIG_FREQ_BAND_TLV               14
1285
183
#define SUPPORTED_ROLE_TLV                      15
1286
161
#define SUPPORTED_FREQ_BAND_TLV                 16
1287
21
#define WSC_TLV                                 17
1288
38
#define PUSH_BUTTON_EVENT_NOTIFICATION_TLV      18
1289
8
#define PUSH_BUTTON_JOIN_NOTIFICATION_TLV       19
1290
16
#define GENERIC_PHY_DEVICE_INFORMATION_TLV      20
1291
14
#define DEVICE_IDENTIFICATION_TYPE_TLV          21
1292
2
#define CONTROL_URL_TYPE_TLV                    22
1293
36
#define IPV4_TYPE_TLV                           23
1294
37
#define IPV6_TYPE_TLV                           24
1295
16
#define PUSH_BUTTON_EVENT_TYPE_NOTIFICATION_TLV 25
1296
145
#define IEEE1905_PROFILE_VERSION_TLV            26
1297
15
#define POWER_OFF_INTERFACE_TLV                 27
1298
43
#define INTERFACE_POWER_CHANGE_INFORMATION_TLV  28
1299
28
#define INTERFACE_POWER_CHANGE_STATUS_TLV       29
1300
36
#define L2_NEIGHBOR_DEVICE_TLV                  30
1301
65
#define SUPPORTED_SERVICE_TLV                   0x80
1302
51
#define SEARCHED_SERVICE_TLV                    0x81
1303
146
#define AP_RADIO_IDENTIFIER_TLV                 0x82
1304
26
#define AP_OPERATIONAL_BSS_TLV                  0x83
1305
30
#define ASSOCIATED_CLIENTS_TLV                  0x84
1306
43
#define AP_RADIO_BASIC_CAPABILITIES_TLV         0x85
1307
45
#define AP_HT_CAPABILITIES_TLV                  0x86
1308
31
#define AP_VHT_CAPABILITIES_TLV                 0x87
1309
83
#define AP_HE_CAPABILITIES_TLV                  0x88
1310
58
#define STEERING_POLICY_TLV                     0x89
1311
18
#define METRIC_REPORTING_POLICY_TLV             0x8A
1312
53
#define CHANNEL_PREFERENCE_TLV                  0x8B
1313
46
#define RADIO_OPERATION_RESTRICTION_TLV         0x8C
1314
82
#define TRANSMIT_POWER_LIMIT_TLV                0x8D
1315
69
#define CHANNEL_SELECTION_RESPONSE_TLV          0x8E
1316
40
#define OPERATING_CHANNEL_REPORT_TLV            0x8F
1317
46
#define CLIENT_INFO_TLV                         0x90
1318
5
#define CLIENT_CAPABILITY_REPORT_TLV            0x91
1319
119
#define CLIENT_ASSOCIATION_EVENT_TLV            0x92
1320
11
#define AP_METRIC_QUERY_TLV                     0x93
1321
128
#define AP_METRICS_TLV                          0x94
1322
65
#define STA_MAC_ADDRESS_TYPE_TLV                0x95
1323
19
#define ASSOCIATED_STA_LINK_METRICS_TLV         0x96
1324
142
#define UNASSOCIATED_STA_LINK_METRICS_QUERY_TLV 0x97
1325
23
#define UNASSOCIATED_STA_LINK_METRICS_RESPONSE_TLV 0x98
1326
37
#define BEACON_METRICS_QUERY_TLV                0x99
1327
19
#define BEACON_METRICS_RESPONSE_TLV             0x9A
1328
31
#define STEERING_REQUEST_TLV                    0x9B
1329
5
#define STEERING_BTM_REPORT_TLV                 0x9C
1330
82
#define CLIENT_ASSOCIATION_CONTROL_REQUEST_TLV  0x9D
1331
141
#define BACKHAUL_STEERING_REQUEST_TLV           0x9E
1332
33
#define BACKHAUL_STEERING_RESPONSE_TLV          0x9F
1333
7
#define HIGHER_LAYER_DATA_TLV                   0xA0
1334
268
#define AP_CAPABILITY_TLV                       0xA1
1335
48
#define ASSOCIATED_STA_TRAFFIC_STATS_TLV        0xA2
1336
111
#define ERROR_CODE_TLV                          0xA3
1337
164
#define CHANNEL_SCAN_REPORTING_POLICY_TLV       0xA4
1338
52
#define CHANNEL_SCAN_CAPABILITIES_TLV           0xA5
1339
39
#define CHANNEL_SCAN_REQUEST_TLV                0xA6
1340
108
#define CHANNEL_SCAN_RESULT_TLV                 0xA7
1341
9
#define TIMESTAMP_TLV                           0xA8
1342
73
#define IEEE1905_LAYER_SECURITY_CAPABILITY_TLV  0xA9
1343
122
#define AP_WF6_CAPABILITIES_TLV                 0xAA
1344
6
#define MIC_TLV                                 0xAB
1345
4
#define ENCRYPTED_TLV                           0xAC
1346
24
#define CAC_REQUEST_TLV                         0xAD
1347
134
#define CAC_TERMINATION_TLV                     0xAE
1348
30
#define CAC_COMPLETION_REPORT_TLV               0xAF
1349
18
#define ASSOCIATED_WF6_STA_STATUS_REPORT_TLV    0xB0
1350
39
#define CAC_STATUS_REPORT_TLV                   0xB1
1351
60
#define CAC_CAPABILITIES_TLV                    0xB2
1352
74
#define MULTI_AP_PROFILE_TLV                    0xB3
1353
61
#define PROFILE_2_AP_CAPABILITY_TLV             0xB4
1354
93
#define DEFAULT_802_1Q_SETTINGS_TLV             0xB5
1355
17
#define TRAFFIC_SEPARATION_POLICY_TLV           0xB6
1356
29
#define BSS_CONFIGURATION_REPORT_TLV            0xB7
1357
95
#define BSSID_TLV                               0xB8
1358
123
#define SERVICE_PRIORITIZATION_RULE_TLV         0xB9
1359
78
#define DSCP_MAPPING_TABLE_TLV                  0xBA
1360
3
#define BSS_CONFIGURATION_REQUEST_TLV           0xBB
1361
251
#define PROFILE_2_ERROR_CODE_ERROR_TLV          0xBC
1362
1
#define BSS_CONFIGURATION_RESPONSE_TLV          0xBD /* FIX */
1363
80
#define AP_RADIO_ADVANCED_CAPABILITIES_TLV      0xBE
1364
18
#define ASSOCIATION_STATUS_NOTIFICATION_TLV     0xBF
1365
66
#define SOURCE_INFO_TLV                         0xC0
1366
189
#define TUNNELED_MESSAGE_TYPE_TLV               0xC1
1367
1
#define TUNNELED_TLV                            0xC2
1368
36
#define PROFILE_2_STEERING_REQUEST_TLV          0xC3
1369
44
#define UNSUCCESSFUL_ASSOCIATION_POLICY_TLV     0xC4
1370
2
#define METRIC_COLLECTION_INTERVAL_TLV          0xC5
1371
42
#define RADIO_METRICS_TLV                       0xC6
1372
37
#define AP_EXTENDED_METRICS_TLV                 0xC7
1373
18
#define ASSOCIATED_STA_EXTENDED_LINK_METRICS_TLV 0xC8
1374
101
#define STATUS_CODE_TLV                         0xC9
1375
106
#define REASON_CODE_TLV                         0xCA
1376
102
#define BACKHAUL_STA_RADIO_CAPABILITIES_TLV     0xCB
1377
37
#define AKM_SUITE_CAPABILITIES_TLV              0xCC
1378
19
#define IEEE1905_ENCAP_DPP_TLV                  0xCD
1379
3
#define IEEE1905_ENCAP_EAPOL_TLV                0xCE
1380
2
#define DPP_BOOTSTRAPPING_URI_NOTIFICATION_TLV  0xCF
1381
#define BACKHAUL_BSS_CONFIGURATION              0xD0
1382
5
#define DPP_MESSAGE_TLV                         0xD1
1383
201
#define DPP_CCE_INDICATION_TLV                  0xD2
1384
33
#define DPP_CHIRP_VALUE_TLV                     0xD3
1385
14
#define DEVICE_INVENTORY_TLV                    0xD4
1386
4
#define AGENT_LIST_TLV                          0xD5
1387
#define ANTICIPATED_CHANNEL_PREFERENCE_TLV      0xD6
1388
#define ANTICIPATED_CHANNEL_USAGE_TLV           0xD7
1389
135
#define SPATIAL_REUSE_REQUEST_TLV               0xD8
1390
106
#define SPATIAL_REUSE_REPORT_TLV                0xD9
1391
63
#define SPATIAL_REUSE_CONFIG_RESPONSE_TLV       0xDA
1392
32
#define QOS_MANAGEMENT_POLICY_TLV               0xDB
1393
44
#define QOS_MANAGEMENT_DESCRIPTOR_TLV           0xDC
1394
2
#define CONTROLLER_CAPABILITY_TLV               0xDD
1395
36
#define WIFI7_AGENT_CAPABILITIES_TLV            0xDF
1396
28
#define AGENT_AP_MLD_CONFIGURATION_TLV          0xE0
1397
19
#define BACKHAUL_STA_MLD_CONFIGURATION_TLV      0xE1
1398
17
#define ASSOCIATED_STA_MLD_CONFIGURATION_TLV    0xE2
1399
3
#define AFFILIATED_STA_METRICS_TLV              0xE4
1400
3
#define AFFILIATED_AP_METRICS_TLV               0xE5
1401
34
#define EHT_OPERATIONS_TLV                      0xE7
1402
4
#define AVAILABLE_SPECTRUM_INQUIRY_REQUEST_TLV  0xE8
1403
3
#define AVAILABLE_SPECTRUM_INQUIRY_RESPONSE_TLV 0xE9
1404
1405
static const value_string ieee1905_tlv_types_vals[] = {
1406
  { EOM_TLV,                                 "End of message" },
1407
  { AL_MAC_ADDRESS_TYPE_TLV,                 "1905 AL MAC address type" },
1408
  { MAC_ADDRESS_TYPE_TLV,                    "MAC address type" },
1409
  { DEVICE_INFORMATION_TYPE_TLV,             "1905 device information type" },
1410
  { DEVICE_BRIDGING_CAPABILITY_TLV,          "Device bridging capability" },
1411
  { NON_1905_NEIGHBOR_DEVICE_LIST_TLV,       "Non-1905 neighbor device list" },
1412
  { NEIGHBOR_DEVICE_TLV,                     "1905 neighbor device" },
1413
  { LINK_METRIC_QUERY_TLV,                   "Link metric query" },
1414
  { TRANSMITTER_LINK_METRIC_TLV,             "1905 transmitter link metric" },
1415
  { RECEIVER_LINK_METRIC_TLV,                "1905 receiver link metric" },
1416
  { VENDOR_SPECIFIC_TLV,                     "Vendor specific" },
1417
  { LINK_METRIC_RESULT_CODE_TLV,             "1905 link metric result code" },
1418
  { SEARCHED_ROLE_TLV,                       "SearchedRole" },
1419
  { AUTO_CONFIG_FREQ_BAND_TLV,               "AutoconfigFreqBand" },
1420
  { SUPPORTED_ROLE_TLV,                      "SupportedRole" },
1421
  { SUPPORTED_FREQ_BAND_TLV,                 "SupportedFreqBand" },
1422
  { WSC_TLV,                                 "WSC" },
1423
  { PUSH_BUTTON_EVENT_NOTIFICATION_TLV,      "Push_Button_Event notification" },
1424
  { PUSH_BUTTON_JOIN_NOTIFICATION_TLV,       "Push_Button_Join notification" },
1425
  { GENERIC_PHY_DEVICE_INFORMATION_TLV,      "Generic Phy device information" },
1426
  { DEVICE_IDENTIFICATION_TYPE_TLV,          "Device identification type" },
1427
  { CONTROL_URL_TYPE_TLV,                    "Control URL type" },
1428
  { IPV4_TYPE_TLV,                           "IPv4 type" },
1429
  { IPV6_TYPE_TLV,                           "IPv6 type" },
1430
  { PUSH_BUTTON_EVENT_TYPE_NOTIFICATION_TLV, "Push_Button_Generic_Phy_Event notification" },
1431
  { IEEE1905_PROFILE_VERSION_TLV,            "1905 profile version" },
1432
  { POWER_OFF_INTERFACE_TLV,                 "Power off interface" },
1433
  { INTERFACE_POWER_CHANGE_INFORMATION_TLV,  "Interface power change information" },
1434
  { INTERFACE_POWER_CHANGE_STATUS_TLV,       "Interface power change status" },
1435
  { L2_NEIGHBOR_DEVICE_TLV,                  "L2 neighbor device" },
1436
  { SUPPORTED_SERVICE_TLV,                   "Supported service information" },
1437
  { SEARCHED_SERVICE_TLV,                    "Searched service information" },
1438
  { AP_RADIO_IDENTIFIER_TLV,                 "AP radio identifier" },
1439
  { AP_OPERATIONAL_BSS_TLV,                  "AP operational BSS" },
1440
  { ASSOCIATED_CLIENTS_TLV,                  "Associated clients" },
1441
  { AP_RADIO_BASIC_CAPABILITIES_TLV,         "AP radio basic capabilities" },
1442
  { AP_HT_CAPABILITIES_TLV,                  "AP HT capabilities" },
1443
  { AP_VHT_CAPABILITIES_TLV,                 "AP VHT capabilities" },
1444
  { AP_HE_CAPABILITIES_TLV,                  "AP HE capabilities" },
1445
  { STEERING_POLICY_TLV,                     "Steering policy" },
1446
  { METRIC_REPORTING_POLICY_TLV,             "Metric reporting policy" },
1447
  { CHANNEL_PREFERENCE_TLV,                  "Channel preference" },
1448
  { RADIO_OPERATION_RESTRICTION_TLV,         "Radio operation restriction" },
1449
  { TRANSMIT_POWER_LIMIT_TLV,                "Transmit power limit" },
1450
  { CHANNEL_SELECTION_RESPONSE_TLV,          "Channel selection response" },
1451
  { OPERATING_CHANNEL_REPORT_TLV,            "Operating channel report" },
1452
  { CLIENT_INFO_TLV,                         "Client info" },
1453
  { CLIENT_CAPABILITY_REPORT_TLV,            "Client capability report" },
1454
  { CLIENT_ASSOCIATION_EVENT_TLV,            "Client association event" },
1455
  { AP_METRIC_QUERY_TLV,                     "AP metric query" },
1456
  { AP_METRICS_TLV,                          "AP metrics" },
1457
  { STA_MAC_ADDRESS_TYPE_TLV,                "STA MAC address type" },
1458
  { ASSOCIATED_STA_LINK_METRICS_TLV,         "Associated STA Link Metrics" },
1459
  { UNASSOCIATED_STA_LINK_METRICS_QUERY_TLV, "Unassociated STA link metrics query" },
1460
  { UNASSOCIATED_STA_LINK_METRICS_RESPONSE_TLV, "Unassociated STA link metrics response" },
1461
  { BEACON_METRICS_QUERY_TLV,                "Beacon metrics query" },
1462
  { BEACON_METRICS_RESPONSE_TLV,             "Beacon metrics response" },
1463
  { STEERING_REQUEST_TLV,                    "Steering request" },
1464
  { STEERING_BTM_REPORT_TLV,                 "Steering BTM report" },
1465
  { CLIENT_ASSOCIATION_CONTROL_REQUEST_TLV,  "Client association control request" },
1466
  { BACKHAUL_STEERING_REQUEST_TLV,           "Backhaul steering request" },
1467
  { BACKHAUL_STEERING_RESPONSE_TLV,          "Backhaul steering response" },
1468
  { HIGHER_LAYER_DATA_TLV,                   "Higher layer data" },
1469
  { AP_CAPABILITY_TLV,                       "AP capability" },
1470
  { ASSOCIATED_STA_TRAFFIC_STATS_TLV,        "Associated STA Traffic Stats" },
1471
  { ERROR_CODE_TLV,                          "Error Code" },
1472
  { CHANNEL_SCAN_REPORTING_POLICY_TLV,       "Channel Scan Reporting Policy" },
1473
  { CHANNEL_SCAN_CAPABILITIES_TLV,           "Channel Scan Capabilities" },
1474
  { CHANNEL_SCAN_REQUEST_TLV,                "Channel Scan Request" },
1475
  { CHANNEL_SCAN_RESULT_TLV,                 "Channel Scan Result" },
1476
  { TIMESTAMP_TLV,                           "Timestamp" },
1477
  { IEEE1905_LAYER_SECURITY_CAPABILITY_TLV,  "1905 Layer Security Capability" },
1478
  { AP_WF6_CAPABILITIES_TLV,                 "AP Wi-Fi 6 Capabilities" },
1479
  { MIC_TLV,                                 "MIC" },
1480
  { ENCRYPTED_TLV,                           "Encrypted" },
1481
  { CAC_REQUEST_TLV,                         "CAC Request" },
1482
  { CAC_TERMINATION_TLV,                     "CAC Termination" },
1483
  { CAC_COMPLETION_REPORT_TLV,               "CAC Completion Report" },
1484
  { ASSOCIATED_WF6_STA_STATUS_REPORT_TLV,    "Associated Wi-Fi 6 STA Status Report" },
1485
  { CAC_STATUS_REPORT_TLV,                   "CAC Status Report" },
1486
  { CAC_CAPABILITIES_TLV,                    "CAC Capabilities" },
1487
  { MULTI_AP_PROFILE_TLV,                    "Multi AP Profile" },
1488
  { PROFILE_2_AP_CAPABILITY_TLV,             "Profile 2 AP Capability" },
1489
  { DEFAULT_802_1Q_SETTINGS_TLV,             "Default 802.1Q Settings" },
1490
  { TRAFFIC_SEPARATION_POLICY_TLV,           "Traffic Separation Policy" },
1491
  { BSS_CONFIGURATION_REPORT_TLV,            "BSS Configuration Report" },
1492
  { BSSID_TLV,                               "BSSID" },
1493
  { SERVICE_PRIORITIZATION_RULE_TLV,         "Service Prioritization Rule" },
1494
  { DSCP_MAPPING_TABLE_TLV,                  "DSCP Mapping Table" },
1495
  { BSS_CONFIGURATION_REQUEST_TLV,           "BSS Configuration Request" },
1496
  { PROFILE_2_ERROR_CODE_ERROR_TLV,          "Profile 2 Error Code" },
1497
  { BSS_CONFIGURATION_RESPONSE_TLV,          "BSS Configuration Response" },
1498
  { AP_RADIO_ADVANCED_CAPABILITIES_TLV,      "AP Radio Advanced Capabilities" },
1499
  { ASSOCIATION_STATUS_NOTIFICATION_TLV,     "Associated Status Notification" },
1500
  { SOURCE_INFO_TLV,                         "Source Info" },
1501
  { TUNNELED_MESSAGE_TYPE_TLV,               "Tunneled Message Type" },
1502
  { TUNNELED_TLV,                            "Tunneled" },
1503
  { PROFILE_2_STEERING_REQUEST_TLV,          "Profile 2 Steering Request" },
1504
  { UNSUCCESSFUL_ASSOCIATION_POLICY_TLV,     "Unsuccessful Association Policy" },
1505
  { METRIC_COLLECTION_INTERVAL_TLV,          "Metric Collection Interval" },
1506
  { RADIO_METRICS_TLV,                       "Radio Metrics" },
1507
  { AP_EXTENDED_METRICS_TLV,                 "AP Extended Metrics" },
1508
  { ASSOCIATED_STA_EXTENDED_LINK_METRICS_TLV,"Associated STA Extended Link Metrics" },
1509
  { STATUS_CODE_TLV,                         "Status Code" },
1510
  { REASON_CODE_TLV,                         "Reason Code" },
1511
  { BACKHAUL_STA_RADIO_CAPABILITIES_TLV,     "Backhaul STA Radio Capabilities" },
1512
  { AKM_SUITE_CAPABILITIES_TLV,              "AKM Suite Capabilities" },
1513
  { IEEE1905_ENCAP_DPP_TLV,                  "1905 Encap DPP" },
1514
  { IEEE1905_ENCAP_EAPOL_TLV,                "1905 Encap EAPOL" },
1515
  { DPP_BOOTSTRAPPING_URI_NOTIFICATION_TLV,  "DPP Bootstrapping URI Notification" },
1516
  { BACKHAUL_BSS_CONFIGURATION,              "Backhaul BSS Configuration" },
1517
  { DPP_MESSAGE_TLV,                         "DPP Message" },
1518
  { DPP_CCE_INDICATION_TLV,                  "DPP CCE Indication" },
1519
  { DPP_CHIRP_VALUE_TLV,                     "DPP Chirp Value" },
1520
  { DEVICE_INVENTORY_TLV,                    "Device Inventory" },
1521
  { AGENT_LIST_TLV,                          "Agent List" },
1522
  { ANTICIPATED_CHANNEL_PREFERENCE_TLV,      "Anticipated Channel Preference" },
1523
  { ANTICIPATED_CHANNEL_USAGE_TLV,           "Anticipated Channel Usage" },
1524
  { SPATIAL_REUSE_REQUEST_TLV,               "Spatial Reuse Request" },
1525
  { SPATIAL_REUSE_REPORT_TLV,                "Spatial Reuse Report" },
1526
  { SPATIAL_REUSE_CONFIG_RESPONSE_TLV,       "Spatial Reuse Config Response" },
1527
  { QOS_MANAGEMENT_POLICY_TLV,               "QoS Management Policy" },
1528
  { QOS_MANAGEMENT_DESCRIPTOR_TLV,           "QoS Management Descriptor" },
1529
  { CONTROLLER_CAPABILITY_TLV,               "Controller Capability" },
1530
  { WIFI7_AGENT_CAPABILITIES_TLV,            "Wi-Fi 7 Agent Capabilities" },
1531
  { AGENT_AP_MLD_CONFIGURATION_TLV,          "Agent AP MLD Configuration" },
1532
  { BACKHAUL_STA_MLD_CONFIGURATION_TLV,      "Backhaul STA MLD Configuration" },
1533
  { ASSOCIATED_STA_MLD_CONFIGURATION_TLV,    "Associated STA MLD Configuration" },
1534
  { AFFILIATED_STA_METRICS_TLV,              "Affiliated STA Metrics" },
1535
  { AFFILIATED_AP_METRICS_TLV,               "Affiliated AP Metrics" },
1536
  { EHT_OPERATIONS_TLV,                      "EHT Operations" },
1537
  { AVAILABLE_SPECTRUM_INQUIRY_REQUEST_TLV,  "Available Spectrum Inquiry Request" },
1538
  { AVAILABLE_SPECTRUM_INQUIRY_RESPONSE_TLV, "Available Spectrum Inquiry Response" },
1539
  { 0, NULL }
1540
};
1541
static value_string_ext ieee1905_tlv_types_vals_ext = VALUE_STRING_EXT_INIT(ieee1905_tlv_types_vals);
1542
1543
static const true_false_string tfs_last_fragment = {
1544
  "This is the last fragment",
1545
  "This is not the last fragment"
1546
};
1547
1548
static const true_false_string tfs_relay_indicator = {
1549
  "Relayed multicast",
1550
  "Neighbor multicast or unicast"
1551
};
1552
1553
static const value_string ieee1905_link_metric_query_type_vals[] = {
1554
  { 0x00, "All neighbors" },
1555
  { 0x01, "Specific neighbor" },
1556
  { 0, NULL }
1557
};
1558
1559
static const value_string ieee1905_link_metrics_requested_vals[] = {
1560
  { 0x00, "Tx link metrics only" },
1561
  { 0x01, "Rx link metrics only" },
1562
  { 0x02, "Both Tx and Rx link metrics" },
1563
  { 0, NULL }
1564
};
1565
1566
static const value_string ieee1905_bridge_flag_vals[] = {
1567
  { 0x00, "1905 link does not include an IEEE 802.1 bridge" },
1568
  { 0x01, "1905 link includes one or more IEEE 802.1 bridges" },
1569
  { 0, NULL }
1570
};
1571
1572
static const value_string ieee1905_media_type_0_vals[] = {
1573
  { 0, "IEEE 802.3u fast Ethernet" },
1574
  { 1, "IEEE 802.3ab gigabit" },
1575
  { 0, NULL }
1576
};
1577
1578
static const value_string ieee1905_media_type_1_vals[] = {
1579
  { 0, "IEEE 802.11b (2.4 GHz)" },
1580
  { 1, "IEEE 802.11g (2.4 GHz)" },
1581
  { 2, "IEEE 802.11a (5 GHz)" },
1582
  { 3, "IEEE 802.11n (2.4 GHz)" },
1583
  { 4, "IEEE 802.11n (5 GHz)" },
1584
  { 5, "IEEE 802.11ac (5 GHz)" },
1585
  { 6, "IEEE 802.11ad (60 GHz)" },
1586
  { 7, "IEEE 802.11af (whitespace)" },
1587
  { 8, "IEEE 802.11ax" },
1588
  { 9, "IEEE 802.11be" },
1589
  { 0, NULL }
1590
};
1591
1592
static const value_string ieee1905_media_type_2_vals[] = {
1593
  { 0, "IEEE 1901 wavelet" },
1594
  { 1, "IEEE 1901 FFT" },
1595
  { 0, NULL }
1596
};
1597
1598
static const value_string ieee1905_media_type_3_vals[] = {
1599
  { 0, "MoCA v1.1" },
1600
  { 0, NULL }
1601
};
1602
1603
static const value_string ieee1905_link_metric_result_vals[] = {
1604
  { 0, "Invalid neighbor" },
1605
  { 0, NULL }
1606
};
1607
1608
static const true_false_string tfs_bridges_flag = {
1609
  "At least one IEEE 802.1 bridge exists between this device and the neighbor",
1610
  "No IEEE 802.1 bridges exist"
1611
};
1612
1613
static const value_string ieee1905_searched_role_vals[] = {
1614
  { 0, "Registrar" },
1615
  { 0, NULL }
1616
};
1617
1618
static const value_string ieee1905_freq_band_vals[] = {
1619
  { 0, "802.11 2.4 GHz" },
1620
  { 1, "802.11 5 GHz" },
1621
  { 2, "802.11 60 GHz" },
1622
  { 3, "802.11 6 GHz" },
1623
  { 0, NULL }
1624
};
1625
1626
static const value_string ieee1905_ipv4_addr_type_vals[] = {
1627
  { 0, "Unknown" },
1628
  { 1, "DHCP" },
1629
  { 2, "Static" },
1630
  { 3, "Auto-IP" },
1631
  { 0, NULL }
1632
};
1633
1634
static const value_string ieee1905_ipv6_addr_type_vals[] = {
1635
  { 0, "Unknown" },
1636
  { 1, "DHCP" },
1637
  { 2, "Static" },
1638
  { 3, "SLAAC" },
1639
  { 0, NULL}
1640
};
1641
1642
static const value_string ieee1905_profile_version_vals[] = {
1643
  { 0, "1905.1" },
1644
  { 1, "1905.1a" },
1645
  { 0, NULL }
1646
};
1647
1648
static const value_string ieee1905_power_state_vals[] = {
1649
  { 0, "PWR_OFF" },
1650
  { 1, "PWR_ON" },
1651
  { 2, "PWR_SAVE" },
1652
  { 0, NULL }
1653
};
1654
1655
static const value_string ieee1905_power_status_vals[] = {
1656
  { 0, "Request completed" },
1657
  { 1, "No change made" },
1658
  { 2, "Alternate change made" },
1659
  { 0, NULL }
1660
};
1661
1662
static const value_string ieee1905_supported_service_vals[] = {
1663
  { 0x00, "Multi-AP Controller" },
1664
  { 0x01, "Multi-AP Agent" },
1665
  { 0, NULL }
1666
};
1667
1668
static const value_string ieee1905_higher_layer_protocol_vals[] = {
1669
  { 0x00, "Reserved" },
1670
  { 0x01, "TR-181 transport protocol" },
1671
  { 0, NULL }
1672
};
1673
1674
static const value_string ieee1905_backhaul_status_vals[] = {
1675
  { 0x00, "Success" },
1676
  { 0x01, "Rejected because the backhaul station cannot operate on the channel specified" },
1677
  { 0x02, "Rejected because the target BSS signal is too weak or not found" },
1678
  { 0x03, "Authentication or association rejected by the target BSS" },
1679
  { 0, NULL },
1680
};
1681
1682
static const value_string ieee1905_association_control_vals[] = {
1683
  { 0x00, "Block" },
1684
  { 0x01, "Unblock" },
1685
  { 0x02, "Timed block" },
1686
  { 0x03, "Indefinite block" },
1687
  { 0, NULL }
1688
};
1689
1690
static const true_false_string tfs_ieee1905_steering_request_mode_flag = {
1691
  "Request is a steering mandate to trigger steering for specific client STA(s)",
1692
  "Request is a steering opportunity",
1693
};
1694
1695
static const true_false_string tfs_ieee1905_report_unsuccessful_association_attempt_flag = {
1696
  "Report",
1697
  "Do not Report",
1698
};
1699
1700
static const true_false_string tfs_ieee1905_btm_disassoc_imminent_flag = {
1701
  "BTM disassociation imminent",
1702
  "BTM disassociation not imminent"
1703
};
1704
1705
static const true_false_string tfs_ieee1905_btm_abridged_flag = {
1706
  "BTM abridged",
1707
  "BTM not abridged"
1708
};
1709
1710
static const value_string ieee1905_client_capability_result_vals[] = {
1711
  { 0x00, "Success" },
1712
  { 0x01, "Unspecified failure" },
1713
  { 0x02, "Client not associated with specified BSSID" },
1714
  { 0, NULL }
1715
};
1716
1717
static const true_false_string tfs_ieee1905_association_event_flag = {
1718
  "Client has joined the BSS",
1719
  "Client has left the BSS"
1720
};
1721
1722
static const value_string max_supported_tx_streams_vals[] = {
1723
  { 0x00, "1 Tx spatial stream" },
1724
  { 0x01, "2 Tx spatial streams" },
1725
  { 0x02, "3 Tx spatial streams" },
1726
  { 0x03, "4 Tx spatial streams" },
1727
  { 0, NULL },
1728
};
1729
1730
static const value_string max_supported_rx_streams_vals[] = {
1731
  { 0x00, "1 Rx spatial stream" },
1732
  { 0x01, "2 Rx spatial streams" },
1733
  { 0x02, "3 Rx spatial streams" },
1734
  { 0x03, "4 Rx spatial streams" },
1735
  { 0, NULL },
1736
};
1737
1738
static const value_string vht_he_max_supported_tx_streams_vals[] = {
1739
  { 0x00, "1 Tx spatial stream" },
1740
  { 0x01, "2 Tx spatial streams" },
1741
  { 0x02, "3 Tx spatial streams" },
1742
  { 0x03, "4 Tx spatial streams" },
1743
  { 0x04, "5 Tx spatial streams" },
1744
  { 0x05, "6 Tx spatial streams" },
1745
  { 0x06, "7 Tx spatial streams" },
1746
  { 0x07, "8 Tx spatial streams" },
1747
  { 0, NULL },
1748
};
1749
1750
static const value_string vht_he_max_supported_rx_streams_vals[] = {
1751
  { 0x00, "1 Rx spatial stream" },
1752
  { 0x01, "2 Rx spatial streams" },
1753
  { 0x02, "3 Rx spatial streams" },
1754
  { 0x03, "4 Rx spatial streams" },
1755
  { 0x04, "5 Rx spatial streams" },
1756
  { 0x05, "6 Rx spatial streams" },
1757
  { 0x06, "7 Rx spatial streams" },
1758
  { 0x07, "8 Rx spatial streams" },
1759
  { 0, NULL },
1760
};
1761
1762
static const value_string  channel_preference_prefs_vals[] = {
1763
  { 0x0, "Non-operable" },
1764
  { 0x1, "Operable with preference score 1" },
1765
  { 0x2, "Operable with preference score 2" },
1766
  { 0x3, "Operable with preference score 3" },
1767
  { 0x4, "Operable with preference score 4" },
1768
  { 0x5, "Operable with preference score 5" },
1769
  { 0x6, "Operable with preference score 6" },
1770
  { 0x7, "Operable with preference score 7" },
1771
  { 0x8, "Operable with preference score 8" },
1772
  { 0x9, "Operable with preference score 9" },
1773
  { 0xA, "Operable with preference score 10" },
1774
  { 0xB, "Operable with preference score 11" },
1775
  { 0xC, "Operable with preference score 12" },
1776
  { 0xD, "Operable with preference score 13" },
1777
  { 0xE, "Operable with preference score 14" },
1778
  { 0, NULL }
1779
};
1780
1781
static const value_string channel_preference_reason_vals[] = {
1782
  { 0x0, "Unspecified" },
1783
  { 0x1, "Proximate non-802.11 interference in local environment" },
1784
  { 0x2, "Intra-network 802.11 OBSS interference management" },
1785
  { 0x3, "External network 802.11 OBSS interference management" },
1786
  { 0x4, "Reduced coverage (e.g. due to limited transmit power" },
1787
  { 0x5, "Reduced throughput (e.g. due to limited channel bandwidth..." },
1788
  { 0x6, "In-device interference within AP" },
1789
  { 0x7, "Operation disallowed due to radar detection on a DFS channel" },
1790
  { 0x8, "Operation would prevent backhaul operation using shared radio" },
1791
  { 0x9, "Immediate operation possible on a DFS channel" },
1792
  { 0xA, "DFS channel state unknown" },
1793
  { 0xB, "Controller DFS Channel Clear Indication" },
1794
  { 0xC, "Operation disallowed by AFC restriction" },
1795
  { 0, NULL }
1796
};
1797
1798
static const value_string ieee1905_channel_select_resp_code_vals[] = {
1799
  { 0x00, "Accept" },
1800
  { 0x01, "Declined because request violates current preferences" },
1801
  { 0x02, "Declined because request violates most recently reported preferences" },
1802
  { 0x03, "Declined because request would prevent operation of a current backhaul link" },
1803
  { 0, NULL }
1804
};
1805
1806
static const value_string ieee1905_steering_policy_vals[] = {
1807
  { 0x0, "Agent initiated steering disallowed" },
1808
  { 0x1, "Agent initiated RCPI-based steering mandated" },
1809
  { 0x2, "Agent initiated RCPI-based steering allowed" },
1810
  { 0, NULL}
1811
};
1812
1813
static const value_string ieee1905_error_code_vals[] = {
1814
  { 0x01, "STA associated with a BSS operated by the Agent" },
1815
  { 0x02, "STA not associated with any BSS operated by the Agent" },
1816
  { 0x03, "Client capability report unspecified failure" },
1817
  { 0x04, "Backhaul steering request rejected because station cannot operate on specified channel" },
1818
  { 0x05, "Backhaul steering request rejected because target BSS signal too weak or not found" },
1819
  { 0x06, "Backhaul steering request authentication or association Rejected by target BSS" },
1820
  { 0, NULL }
1821
};
1822
1823
/*
1824
 * Minimum message has a single End of Message TLV with 3 bytes, plus 8 byte
1825
 * header.
1826
 */
1827
#define IEEE1905_MIN_LENGTH 11
1828
1829
/*
1830
 * Size of the fixed parameters in 802.11 management frames
1831
 */
1832
7
#define ASSOC_REQ_BODY_FIXED_SIZE 4
1833
1834
static int
1835
dissect_media_type(tvbuff_t *tvb, packet_info *pinfo _U_,
1836
        proto_tree *tree, unsigned offset)
1837
2.85k
{
1838
2.85k
    proto_item *pi = NULL;
1839
2.85k
    proto_tree *media_type = NULL;
1840
2.85k
    uint8_t bits_15_to_8 = 0, bits_7_to_0 = 0;
1841
1842
2.85k
    pi = proto_tree_add_item(tree, hf_ieee1905_media_type, tvb, offset,
1843
2.85k
                             2, ENC_BIG_ENDIAN);
1844
1845
2.85k
    media_type = proto_item_add_subtree(pi, ett_media_type);
1846
1847
    /*
1848
     * Now, break it out
1849
     */
1850
2.85k
    bits_15_to_8 = tvb_get_uint8(tvb, offset);
1851
2.85k
    bits_7_to_0 = tvb_get_uint8(tvb, offset + 1);
1852
1853
2.85k
    proto_tree_add_item(media_type, hf_ieee1905_media_type_high, tvb, offset,
1854
2.85k
                        1, ENC_NA);
1855
2.85k
    offset++;
1856
1857
2.85k
    proto_tree_add_item(media_type, hf_ieee1905_media_type_low, tvb, offset,
1858
2.85k
                        1, ENC_NA);
1859
2.85k
    offset++;
1860
1861
2.85k
    switch (bits_15_to_8) {
1862
832
    case 0:
1863
832
        proto_item_append_text(pi, ", %s",
1864
832
                        val_to_str_const(bits_7_to_0,
1865
832
                            ieee1905_media_type_0_vals,
1866
832
                            "Reserved"));
1867
832
        break;
1868
1869
227
    case 1:
1870
227
        proto_item_append_text(pi, ", %s",
1871
227
                        val_to_str_const(bits_7_to_0,
1872
227
                            ieee1905_media_type_1_vals,
1873
227
                            "Reserved"));
1874
227
        break;
1875
1876
139
    case 2:
1877
139
        proto_item_append_text(pi, ", %s",
1878
139
                        val_to_str(bits_7_to_0,
1879
139
                            ieee1905_media_type_2_vals,
1880
139
                            "Reserved"));
1881
139
        break;
1882
1883
189
    case 3:
1884
189
        proto_item_append_text(pi, ", %s",
1885
189
                        val_to_str_const(bits_7_to_0,
1886
189
                            ieee1905_media_type_3_vals,
1887
189
                            "Reserved"));
1888
189
        break;
1889
1890
216
    case 0xff:
1891
216
        proto_item_append_text(pi, ", Unknown media");
1892
216
        break;
1893
1894
1.24k
    default:
1895
1.24k
        proto_item_append_text(pi, ", Reserved");
1896
1.24k
        break;
1897
2.85k
    }
1898
1899
2.85k
    return offset;
1900
2.85k
}
1901
1902
/*
1903
 * Dissect a local interface list, putting them each in a subtree labeled
1904
 * with the number of the interface.
1905
 */
1906
static int
1907
dissect_local_interface_list(tvbuff_t *tvb, packet_info *pinfo,
1908
        proto_tree *tree, unsigned offset, uint8_t count)
1909
91
{
1910
91
    unsigned lil_index = 0;
1911
91
    unsigned media_type_offset = 0;
1912
91
    proto_item *pi = NULL;
1913
91
    proto_tree *dev_tree = NULL;
1914
1915
579
    while (count > 0) {
1916
488
        uint8_t spec_info_len = 0;
1917
1918
488
        dev_tree = proto_tree_add_subtree_format(tree, tvb, offset, 8,
1919
488
                                ett_device_information_tree,
1920
488
                                &pi, "Local interface %u device info",
1921
488
                                lil_index);
1922
1923
488
        proto_tree_add_item(dev_tree, hf_ieee1905_mac_address_type, tvb,
1924
488
                            offset, 6, ENC_NA);
1925
488
        offset += 6;
1926
1927
488
        media_type_offset = offset;
1928
1929
488
        offset = dissect_media_type(tvb, pinfo, dev_tree, offset);
1930
1931
488
        spec_info_len = tvb_get_uint8(tvb, offset);
1932
1933
488
        proto_tree_add_item(dev_tree, hf_ieee1905_media_spec_info_len,
1934
488
                            tvb, offset, 1, ENC_NA);
1935
488
        offset++;
1936
1937
488
        if (spec_info_len) {
1938
            /* FIXME: This should be dissected ... */
1939
305
            proto_tree_add_item(dev_tree, hf_ieee1905_media_spec_info,
1940
305
                                tvb, offset, spec_info_len, ENC_NA);
1941
305
            offset += spec_info_len;
1942
305
        }
1943
1944
488
        proto_item_set_len(pi, 6 + (offset - media_type_offset));
1945
1946
488
        count--;
1947
488
        lil_index++;
1948
488
    }
1949
1950
91
    return offset;
1951
91
}
1952
1953
/*
1954
 * Dissect device bridging capabilities
1955
 */
1956
static int
1957
dissect_device_bridging_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
1958
        proto_tree *tree, unsigned offset, uint16_t len _U_)
1959
53
{
1960
53
    uint8_t count = tvb_get_uint8(tvb, offset);
1961
53
    uint8_t tuple_no = 0;
1962
53
    uint8_t mac_addresses = 0;
1963
53
    unsigned start = 0;
1964
53
    proto_tree *tuple_list = NULL;
1965
53
    proto_tree *bridging_list = NULL;
1966
53
    proto_item *tpi = NULL, *mpi = NULL;
1967
1968
53
    proto_tree_add_item(tree, hf_ieee1905_bridging_tuples_cnt, tvb, offset,
1969
53
                        1, ENC_NA);
1970
53
    tuple_list = proto_tree_add_subtree(tree, tvb, offset, -1,
1971
53
                                ett_bridging_tuples_list,
1972
53
                                &tpi, "Bridging tuples list");
1973
1974
53
    start = offset; /* Starts at the count! */
1975
53
    offset++;
1976
1977
521
    while (count > 0) {
1978
468
        unsigned bl_start = offset;
1979
468
        mac_addresses = tvb_get_uint8(tvb, offset);
1980
1981
468
        bridging_list = proto_tree_add_subtree_format(tuple_list, tvb, offset,
1982
468
                                -1, ett_bridging_mac_list,
1983
468
                                &mpi, "Bridging tuple %u", tuple_no);
1984
1985
468
        proto_tree_add_item(bridging_list,
1986
468
                            hf_ieee1905_bridging_mac_address_cnt,
1987
468
                            tvb, offset, 1, ENC_NA);
1988
1989
468
        offset++;
1990
468
        tuple_no++;
1991
1992
1.51k
        while (mac_addresses) {
1993
1.04k
           proto_tree_add_item(bridging_list,
1994
1.04k
                               hf_ieee1905_bridging_mac_address, tvb,
1995
1.04k
                               offset, 6, ENC_NA);
1996
1.04k
           offset += 6;
1997
1.04k
           mac_addresses--;
1998
1999
1.04k
        }
2000
2001
468
        proto_item_set_len(mpi, offset - bl_start);
2002
468
        count--;
2003
468
    }
2004
2005
53
    proto_item_set_len(tpi, offset - start);
2006
53
    return offset;
2007
53
}
2008
2009
/*
2010
 * Dissect the non 1905 neighbor device list TLV
2011
 */
2012
static int
2013
dissect_non_1905_neighbor_device_list(tvbuff_t *tvb, packet_info *pinfo _U_,
2014
        proto_tree *tree, unsigned offset, uint16_t len)
2015
22
{
2016
22
    proto_tree *neighbor_list = NULL;
2017
22
    proto_item *pi = NULL;
2018
22
    unsigned start;
2019
22
    int remaining = len;
2020
2021
22
    proto_tree_add_item(tree, hf_ieee1905_local_interface_mac, tvb,
2022
22
                        offset, 6, ENC_NA);
2023
2024
22
    remaining -= 6;
2025
22
    offset += 6;
2026
2027
22
    neighbor_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2028
22
                                ett_non_1905_neighbor_list,
2029
22
                                &pi, "Non IEEE1905 neighbor devices");
2030
2031
22
    start = offset;
2032
2033
585
    while (remaining > 0) {
2034
563
        proto_tree_add_item(neighbor_list, hf_ieee1905_neighbor_al_mac_addr,
2035
563
                            tvb, offset, 6, ENC_NA);
2036
2037
563
        remaining -= 6;
2038
563
        offset += 6;
2039
563
    }
2040
2041
22
    proto_item_set_len(pi, offset - start);
2042
2043
22
    return offset;
2044
22
}
2045
2046
/*
2047
 * Dissect an IEEE1905 Neighbor device TLV
2048
 */
2049
static int
2050
dissect_1905_neighbor_device(tvbuff_t *tvb, packet_info *pinfo _U_,
2051
        proto_tree *tree, unsigned offset, uint16_t len)
2052
30
{
2053
30
    proto_tree *neighbor_list = NULL;
2054
30
    proto_item *pi = NULL;
2055
30
    unsigned start;
2056
30
    int remaining = len;
2057
30
    static int * const flags[] = {
2058
30
      &hf_ieee1905_bridges_flag,
2059
30
      NULL,
2060
30
    };
2061
2062
30
    proto_tree_add_item(tree, hf_ieee1905_local_interface_mac, tvb,
2063
30
                        offset, 6, ENC_NA);
2064
2065
30
    remaining -= 6;
2066
30
    offset += 6;
2067
2068
30
    neighbor_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2069
30
                                ett_1905_neighbor_list, &pi,
2070
30
                                "IEEE1905 neighbor devices");
2071
2072
30
    start = offset;
2073
2074
329
    while (remaining > 0) {
2075
299
        proto_tree_add_item(neighbor_list, hf_ieee1905_neighbor_al_mac_addr,
2076
299
                            tvb, offset, 6, ENC_NA);
2077
2078
299
        remaining -= 6;
2079
299
        offset += 6;
2080
2081
299
        proto_tree_add_bitmask(neighbor_list, tvb, offset,
2082
299
                               hf_ieee1905_neighbor_flags,
2083
299
                               ett_ieee1905_neighbor_flags, flags, ENC_NA);
2084
2085
299
        remaining--;
2086
299
        offset++;
2087
2088
299
    }
2089
2090
30
    proto_item_set_len(pi, offset - start);
2091
2092
30
    return offset;
2093
30
}
2094
2095
/*
2096
 * Dissect the link metric result code
2097
 */
2098
static int
2099
dissect_link_metric_result_code(tvbuff_t *tvb, packet_info *pinfo _U_,
2100
        proto_tree *tree, unsigned offset)
2101
171
{
2102
171
    proto_item *pi = NULL;
2103
171
    uint8_t code = tvb_get_uint8(tvb, offset);
2104
2105
171
    pi = proto_tree_add_item(tree, hf_ieee1905_link_metric_result_code,
2106
171
                             tvb, offset, 1, ENC_NA);
2107
2108
171
    proto_item_append_text(pi, ", %s",
2109
171
                        val_to_str_const(code, ieee1905_link_metric_result_vals,
2110
171
                                "Reserved"));
2111
2112
171
    offset++;
2113
2114
171
    return offset;
2115
171
}
2116
2117
/*
2118
 * Dissect a vendor specific TLV.
2119
 */
2120
static int
2121
dissect_vendor_specific(tvbuff_t *tvb, packet_info *pinfo _U_,
2122
        proto_tree *tree, unsigned offset, uint16_t len)
2123
7
{
2124
2125
7
    proto_tree_add_item(tree, hf_ieee1905_vendor_specific_oui, tvb, offset,
2126
7
                        3, ENC_NA);
2127
7
    offset += 3;
2128
2129
7
    proto_tree_add_item(tree, hf_ieee1905_vendor_specific_info, tvb, offset,
2130
7
                        len - 3, ENC_NA);
2131
7
    offset += (len - 3);
2132
2133
7
    return offset;
2134
7
}
2135
2136
/*
2137
 * Dissect the searched role TLV
2138
 */
2139
static int
2140
dissect_searched_role(tvbuff_t *tvb, packet_info *pinfo _U_,
2141
        proto_tree *tree, unsigned offset)
2142
239
{
2143
239
    proto_item *pi = NULL;
2144
239
    uint8_t role = tvb_get_uint8(tvb, offset);
2145
2146
239
    pi = proto_tree_add_item(tree, hf_ieee1905_searched_role, tvb, offset,
2147
239
                             1, ENC_NA);
2148
2149
239
    proto_item_append_text(pi, ", %s",
2150
239
                        val_to_str_const(role, ieee1905_searched_role_vals,
2151
239
                                "Reserved"));
2152
2153
239
    offset++;
2154
2155
239
    return offset;
2156
239
}
2157
2158
/*
2159
 * Dissect the supported role TLV
2160
 */
2161
static int
2162
dissect_supported_role(tvbuff_t *tvb, packet_info *pinfo _U_,
2163
        proto_tree *tree, unsigned offset)
2164
183
{
2165
183
    proto_item *pi = NULL;
2166
183
    uint8_t role = tvb_get_uint8(tvb, offset);
2167
2168
183
    pi = proto_tree_add_item(tree, hf_ieee1905_supported_role, tvb, offset,
2169
183
                             1, ENC_NA);
2170
2171
    /*
2172
     * We can re-use this.
2173
     */
2174
183
    proto_item_append_text(pi, ", %s",
2175
183
                        val_to_str_const(role, ieee1905_searched_role_vals,
2176
183
                                "Reserved"));
2177
2178
183
    offset++;
2179
2180
183
    return offset;
2181
183
}
2182
2183
/*
2184
 * Dissect an Auto config frequency band TLV
2185
 */
2186
static int
2187
dissect_auto_config_freq_band(tvbuff_t *tvb, packet_info *pinfo _U_,
2188
        proto_tree *tree, unsigned offset)
2189
141
{
2190
141
    proto_item *pi = NULL;
2191
141
    uint8_t freq = tvb_get_uint8(tvb, offset);
2192
2193
141
    pi = proto_tree_add_item(tree, hf_ieee1905_auto_config_freq_band, tvb,
2194
141
                             offset, 1, ENC_NA);
2195
2196
141
    proto_item_append_text(pi, ", %s",
2197
141
                        val_to_str_const(freq, ieee1905_freq_band_vals,
2198
141
                                "Reserved"));
2199
2200
141
    offset++;
2201
2202
141
    return offset;
2203
141
}
2204
2205
/*
2206
 * Dissect a Supported frequency band TLV
2207
 */
2208
static int
2209
dissect_supported_freq_band(tvbuff_t *tvb, packet_info *pinfo _U_,
2210
        proto_tree *tree, unsigned offset)
2211
161
{
2212
161
    proto_item *pi = NULL;
2213
161
    uint8_t freq = tvb_get_uint8(tvb, offset);
2214
2215
161
    pi = proto_tree_add_item(tree, hf_ieee1905_supported_freq_band, tvb,
2216
161
                             offset, 1, ENC_NA);
2217
2218
161
    proto_item_append_text(pi, ", %s",
2219
161
                        val_to_str_const(freq, ieee1905_freq_band_vals,
2220
161
                                "Reserved"));
2221
2222
161
    offset++;
2223
2224
161
    return offset;
2225
161
}
2226
2227
/*
2228
 * Dissect a WSC TLV
2229
 */
2230
static int
2231
dissect_wsc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
2232
        unsigned offset, uint16_t len)
2233
21
{
2234
21
    dissect_wps_tlvs(tree, tvb, offset, len, pinfo, true);
2235
21
    offset += len;
2236
2237
21
    return offset;
2238
21
}
2239
2240
/*
2241
 * Dissect a push button notification event TLV
2242
 */
2243
static int
2244
dissect_push_button_event_notification(tvbuff_t *tvb, packet_info *pinfo,
2245
        proto_tree *tree, unsigned offset)
2246
38
{
2247
38
    proto_item *pi = NULL, *mpi = NULL;
2248
38
    proto_tree *media_type_list = NULL, *media_item = NULL;
2249
38
    unsigned list_offset = 0, media_type_offset = 0;
2250
38
    uint8_t media_types = tvb_get_uint8(tvb, offset);
2251
38
    uint8_t media_type_index = 0;
2252
2253
38
    proto_tree_add_item(tree, hf_ieee1905_event_notification_media_types,
2254
38
                        tvb, offset, 1, ENC_NA);
2255
38
    offset++;
2256
2257
    /* If there are none, nothing more to do. */
2258
38
    if (media_types == 0)
2259
4
        return offset;
2260
2261
34
    media_type_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2262
34
                                             ett_media_type_list,
2263
34
                                             &pi, "Media type list");
2264
34
    list_offset = offset;
2265
2266
775
    while (media_type_index < media_types) {
2267
741
        uint8_t spec_info_len = 0;
2268
2269
741
        media_item = proto_tree_add_subtree_format(media_type_list,
2270
741
                                tvb, offset, -1,
2271
741
                                ett_media_item, &mpi,
2272
741
                                "Media type %u", media_type_index);
2273
2274
741
        media_type_offset = offset;
2275
2276
741
        offset = dissect_media_type(tvb, pinfo, media_item, offset);
2277
2278
741
        spec_info_len = tvb_get_uint8(tvb, offset);
2279
2280
741
        proto_tree_add_item(media_item, hf_ieee1905_media_spec_info_len,
2281
741
                            tvb, offset, 1, ENC_NA);
2282
741
        offset++;
2283
2284
741
        if (spec_info_len) {
2285
            /* FIXME: This should be dissected ... */
2286
351
            proto_tree_add_item(media_item, hf_ieee1905_media_spec_info,
2287
351
                                tvb, offset, spec_info_len, ENC_NA);
2288
351
            offset += spec_info_len;
2289
351
        }
2290
2291
741
        proto_item_set_len(mpi, offset - media_type_offset);
2292
2293
741
        media_type_index++;
2294
741
    }
2295
2296
34
    proto_item_set_len(pi, offset - list_offset);
2297
2298
34
    return offset;
2299
38
}
2300
2301
/*
2302
 * Dissect a push button event join TLV
2303
 */
2304
static int
2305
dissect_push_button_join_notification(tvbuff_t *tvb, packet_info *pinfo _U_,
2306
        proto_tree *tree, unsigned offset)
2307
8
{
2308
8
    proto_tree_add_item(tree, hf_ieee1905_sender_al_id, tvb, offset, 6,
2309
8
                        ENC_NA);
2310
8
    offset += 6;
2311
2312
8
    proto_tree_add_item(tree, hf_ieee1905_push_button_event_msg_id, tvb,
2313
8
                        offset, 2, ENC_BIG_ENDIAN);
2314
8
    offset += 2;
2315
2316
8
    proto_tree_add_item(tree, hf_ieee1905_sender_joining_interface, tvb,
2317
8
                        offset, 2, ENC_NA);
2318
8
    offset += 6;
2319
2320
8
    proto_tree_add_item(tree, hf_ieee1905_new_device_interface, tvb,
2321
8
                        offset, 2, ENC_NA);
2322
2323
8
    return offset;
2324
8
}
2325
2326
/*
2327
 * Dissect a generic phy device info TLV
2328
 */
2329
static int
2330
dissect_generic_phy_device_info(tvbuff_t *tvb, packet_info *pinfo _U_,
2331
        proto_tree *tree, unsigned offset)
2332
16
{
2333
16
    proto_item *pi = NULL;
2334
16
    proto_tree *local_interface_list = NULL;
2335
16
    uint8_t local_intf_count, local_intf_index = 0;
2336
16
    int saved_offset = 0;
2337
2338
16
    proto_tree_add_item(tree, hf_ieee1905_device_al_mac, tvb, offset,
2339
16
                        6, ENC_NA);
2340
16
    offset += 6;
2341
2342
16
    local_intf_count = tvb_get_uint8(tvb, offset);
2343
2344
16
    proto_tree_add_item(tree, hf_ieee1905_local_interface_count, tvb,
2345
16
                        offset, 1, ENC_NA);
2346
2347
16
    offset++;
2348
2349
16
    if (local_intf_count == 0)
2350
4
        return offset;
2351
2352
12
    local_interface_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2353
12
                                        ett_local_interface_list,
2354
12
                                        &pi, "Local interface list");
2355
12
    saved_offset = 0;
2356
2357
45
    while (local_intf_index < local_intf_count) {
2358
33
        proto_tree *intf_tree = NULL;
2359
33
        proto_item *ipi = NULL;
2360
33
        unsigned start_offset = offset;
2361
33
        uint8_t url_field_count, media_spec_count;
2362
2363
33
        intf_tree = proto_tree_add_subtree_format(local_interface_list,
2364
33
                                        tvb, offset, -1,
2365
33
                                        ett_local_interface_info,
2366
33
                                        &ipi, "Local interface %u generic info",
2367
33
                                        local_intf_index);
2368
2369
33
        proto_tree_add_item(intf_tree, hf_ieee1905_local_interface_mac,
2370
33
                            tvb, offset, 6, ENC_NA);
2371
33
        offset += 6;
2372
2373
33
        proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_oui,
2374
33
                            tvb, offset, 3, ENC_NA);
2375
33
        offset+= 3;
2376
2377
33
        proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_variant,
2378
33
                            tvb, offset, 1, ENC_NA);
2379
33
        offset++;
2380
2381
33
        proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_variant_name,
2382
33
                            tvb, offset, 32, ENC_UTF_8);
2383
33
        offset += 32;
2384
2385
33
        url_field_count = tvb_get_uint8(tvb, offset);
2386
33
        proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_url_count,
2387
33
                            tvb, offset, 1, ENC_NA);
2388
33
        offset++;
2389
2390
33
        media_spec_count = tvb_get_uint8(tvb, offset);
2391
33
        proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_spec_count,
2392
33
                            tvb, offset, 1, ENC_NA);
2393
33
        offset++;
2394
2395
33
        proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_url, tvb,
2396
33
                            offset, url_field_count, ENC_ASCII);
2397
33
        offset += url_field_count;
2398
2399
33
        proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_spec, tvb,
2400
33
                            offset, media_spec_count, ENC_NA);
2401
33
        offset+= media_spec_count;
2402
2403
33
        proto_item_set_len(ipi, offset - start_offset);
2404
2405
33
        local_intf_index++;
2406
33
    }
2407
2408
12
    proto_item_set_len(pi, offset - saved_offset);
2409
2410
12
    return offset;
2411
16
}
2412
2413
/*
2414
 * Dissect a Device Identification Type TLV
2415
 */
2416
static int
2417
dissect_device_identification(tvbuff_t *tvb, packet_info *pinfo _U_,
2418
        proto_tree *tree, unsigned offset)
2419
14
{
2420
14
    proto_tree_add_item(tree, hf_ieee1905_dev_id_friendly_name, tvb,
2421
14
                        offset, 64, ENC_UTF_8);
2422
14
    offset += 64;
2423
2424
14
    proto_tree_add_item(tree, hf_ieee1905_dev_id_manuf_name, tvb,
2425
14
                        offset, 64, ENC_UTF_8);
2426
14
    offset += 64;
2427
2428
14
    proto_tree_add_item(tree, hf_ieee1905_dev_id_manuf_model, tvb,
2429
14
                        offset, 64, ENC_UTF_8);
2430
14
    offset += 64;
2431
2432
14
    return offset;
2433
14
}
2434
2435
/*
2436
 * Dissect a Control URL Type TLV
2437
 */
2438
static int
2439
dissect_control_url_type(tvbuff_t *tvb, packet_info *pinfo _U_,
2440
        proto_tree *tree, unsigned offset, uint16_t len)
2441
2
{
2442
2
    proto_tree_add_item(tree, hf_ieee1905_control_url, tvb, offset,
2443
2
                        len, ENC_ASCII);
2444
2
    offset += len;
2445
2446
2
    return offset;
2447
2
}
2448
2449
/*
2450
 * Dissect an IPv4 Type TLV
2451
 */
2452
static int
2453
dissect_ipv4_type(tvbuff_t *tvb, packet_info *pinfo _U_,
2454
        proto_tree *tree, unsigned offset)
2455
36
{
2456
36
    uint8_t entry_count = tvb_get_uint8(tvb, offset);
2457
36
    uint8_t entry_index = 0;
2458
36
    proto_item *pi = NULL;
2459
36
    proto_tree *ipv4_list = NULL;
2460
36
    unsigned saved_offset = 0;
2461
2462
36
    proto_tree_add_item(tree, hf_ieee1905_ipv4_type_count, tvb, offset,
2463
36
                        1, ENC_NA);
2464
36
    offset++;
2465
2466
36
    if (entry_count == 0)
2467
5
        return offset;
2468
2469
31
    ipv4_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2470
31
                                       ett_ipv4_list,
2471
31
                                       &pi, "IPv4 type list");
2472
31
    saved_offset = offset;
2473
2474
175
    while (entry_index < entry_count) {
2475
144
        proto_tree *ipv4_tree = NULL, *addr_list = NULL;
2476
144
        proto_item *ipi = NULL;
2477
144
        unsigned start_offset = offset;
2478
144
        uint8_t addr_count = 0, addr_index = 0;
2479
2480
144
        ipv4_tree = proto_tree_add_subtree_format(ipv4_list,
2481
144
                                        tvb, offset, -1,
2482
144
                                        ett_ipv4_info,
2483
144
                                        &ipi, "IPv4 type %u info",
2484
144
                                        entry_index);
2485
2486
144
        proto_tree_add_item(ipv4_tree, hf_ieee1905_mac_address, tvb,
2487
144
                            offset, 6, ENC_NA);
2488
144
        offset += 6;
2489
2490
144
        addr_count = tvb_get_uint8(tvb, offset);
2491
144
        proto_tree_add_item(ipv4_tree, hf_ieee1905_ipv4_addr_count,
2492
144
                            tvb, offset, 1, ENC_NA);
2493
144
        offset++;
2494
2495
144
        if (addr_count == 0)
2496
71
            continue;
2497
2498
73
        addr_list = proto_tree_add_subtree(ipv4_tree, tvb, offset,
2499
73
                                        addr_count * 9,
2500
73
                                        ett_ipv4_type_addr_list,
2501
73
                                        NULL, "IPv4 address list");
2502
2503
728
        while (addr_index < addr_count) {
2504
655
            proto_tree *addr_tree = NULL;
2505
655
            proto_item *atpi = NULL;
2506
655
            uint8_t addr_type = tvb_get_uint8(tvb, offset);
2507
2508
655
            addr_tree = proto_tree_add_subtree_format(addr_list, tvb,
2509
655
                                        offset, 9, ett_ipv4_addr_info,
2510
655
                                        NULL, "IPv4 address %u info",
2511
655
                                        addr_index);
2512
2513
655
            atpi = proto_tree_add_item(addr_tree, hf_ieee1905_addr_type,
2514
655
                        tvb, offset, 1, ENC_NA);
2515
655
            proto_item_append_text(atpi, ", %s",
2516
655
                        val_to_str_const(addr_type, ieee1905_ipv4_addr_type_vals,
2517
655
                                "Reserved"));
2518
655
            offset++;
2519
2520
655
            proto_tree_add_item(addr_tree, hf_ieee1905_ipv4_addr, tvb,
2521
655
                        offset, 4, ENC_LITTLE_ENDIAN);
2522
655
            offset += 4;
2523
2524
655
            proto_tree_add_item(addr_tree, hf_ieee1905_dhcp_server, tvb,
2525
655
                        offset, 4, ENC_LITTLE_ENDIAN);
2526
655
            offset += 4;
2527
2528
655
            addr_index++;
2529
655
        }
2530
2531
73
        proto_item_set_len(ipi, offset - start_offset);
2532
2533
73
        entry_index++;
2534
73
    }
2535
2536
31
    proto_item_set_len(pi, offset - saved_offset);
2537
2538
31
    return offset;
2539
36
}
2540
2541
/*
2542
 * Dissect an IPv6 Type TLV
2543
 */
2544
static int
2545
dissect_ipv6_type(tvbuff_t *tvb, packet_info *pinfo _U_,
2546
        proto_tree *tree, unsigned offset)
2547
37
{
2548
37
    uint8_t entry_count = tvb_get_uint8(tvb, offset);
2549
37
    uint8_t entry_index = 0;
2550
37
    proto_item *pi = NULL;
2551
37
    proto_tree *ipv6_list = NULL;
2552
37
    unsigned saved_offset = 0;
2553
2554
37
    proto_tree_add_item(tree, hf_ieee1905_ipv6_type_count, tvb, offset,
2555
37
                        1, ENC_NA);
2556
37
    offset++;
2557
2558
37
    if (entry_count == 0)
2559
4
        return offset;
2560
2561
33
    ipv6_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2562
33
                                       ett_ipv6_list,
2563
33
                                       &pi, "IPv6 type list");
2564
33
    saved_offset = offset;
2565
2566
109
    while (entry_index < entry_count) {
2567
76
        proto_tree *ipv6_tree = NULL, *addr_list = NULL;
2568
76
        proto_item *ipi = NULL;
2569
76
        unsigned start_offset = offset;
2570
76
        uint8_t addr_count = 0, addr_index = 0;
2571
2572
76
        ipv6_tree = proto_tree_add_subtree_format(ipv6_list,
2573
76
                                        tvb, offset, -1,
2574
76
                                        ett_ipv6_info,
2575
76
                                        &ipi, "IPv6 type %u info",
2576
76
                                        entry_index);
2577
2578
76
        proto_tree_add_item(ipv6_tree, hf_ieee1905_ipv6_mac_address, tvb,
2579
76
                            offset, 6, ENC_NA);
2580
76
        offset += 6;
2581
2582
76
        proto_tree_add_item(ipv6_tree, hf_ieee1905_ipv6_linklocal, tvb,
2583
76
                            offset, 16, ENC_NA);
2584
2585
76
        offset += 16;
2586
2587
76
        addr_count = tvb_get_uint8(tvb, offset);
2588
76
        proto_tree_add_item(ipv6_tree, hf_ieee1905_ipv6_addr_count,
2589
76
                            tvb, offset, 1, ENC_NA);
2590
76
        offset++;
2591
2592
76
        if (addr_count == 0)
2593
26
            continue;
2594
2595
50
        addr_list = proto_tree_add_subtree(ipv6_tree, tvb, offset,
2596
50
                                        addr_count * 9,
2597
50
                                        ett_ipv6_type_addr_list,
2598
50
                                        NULL, "IPv6 address list");
2599
2600
279
        while (addr_index < addr_count) {
2601
229
            proto_tree *addr_tree = NULL;
2602
229
            proto_item *atpi = NULL;
2603
229
            uint8_t addr_type = tvb_get_uint8(tvb, offset);
2604
2605
229
            addr_tree = proto_tree_add_subtree_format(addr_list, tvb,
2606
229
                                        offset, 9, ett_ipv6_addr_info,
2607
229
                                        NULL, "IPv6 address %u info",
2608
229
                                        addr_index);
2609
2610
229
            atpi = proto_tree_add_item(addr_tree, hf_ieee1905_ipv6_addr_type,
2611
229
                        tvb, offset, 1, ENC_NA);
2612
229
            proto_item_append_text(atpi, ", %s",
2613
229
                        val_to_str_const(addr_type, ieee1905_ipv6_addr_type_vals,
2614
229
                                "Reserved"));
2615
229
            offset++;
2616
2617
229
            proto_tree_add_item(addr_tree, hf_ieee1905_ipv6_addr, tvb,
2618
229
                        offset, 16, ENC_NA);
2619
229
            offset += 16;
2620
2621
229
            proto_tree_add_item(addr_tree, hf_ieee1905_ipv6_dhcp_server, tvb,
2622
229
                        offset, 16, ENC_NA);
2623
229
            offset += 16;
2624
2625
229
            addr_index++;
2626
229
        }
2627
2628
50
        proto_item_set_len(ipi, offset - start_offset);
2629
2630
50
        entry_index++;
2631
50
    }
2632
2633
33
    proto_item_set_len(pi, offset - saved_offset);
2634
2635
33
    return offset;
2636
37
}
2637
2638
/*
2639
 * Dissect a push butteon generic phy event notification
2640
 */
2641
static int
2642
dissect_push_button_event_type_notification(tvbuff_t *tvb, packet_info *pinfo _U_,
2643
        proto_tree *tree, unsigned offset)
2644
16
{
2645
16
    uint8_t media_type_count = tvb_get_uint8(tvb, offset);
2646
16
    uint8_t media_type_index = 0;
2647
16
    unsigned saved_offset;
2648
16
    proto_item *pi = NULL;
2649
16
    proto_tree *phy_list = NULL;
2650
2651
16
    proto_tree_add_item(tree, hf_ieee1905_generic_phy_media_types,
2652
16
                        tvb, offset, 1, ENC_NA);
2653
16
    offset++;
2654
2655
16
    phy_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2656
16
                                       ett_push_button_phy_list,
2657
16
                                       &pi, "Generic Phy media type list");
2658
16
    saved_offset = offset;
2659
2660
114
    while (media_type_index < media_type_count) {
2661
98
        proto_item *ppi = NULL;
2662
98
        proto_tree *phy_tree;
2663
98
        unsigned start_offset = offset;
2664
98
        uint8_t media_specific_len;
2665
2666
98
        phy_tree = proto_tree_add_subtree_format(phy_list, tvb,
2667
98
                                    offset, -1, ett_push_button_phy_info,
2668
98
                                    &ppi, "Generic Phy media type %u info",
2669
98
                                    media_type_index);
2670
2671
98
        proto_tree_add_item(phy_tree, hf_ieee1905_local_intf_oui,
2672
98
                            tvb, offset, 3, ENC_NA);
2673
98
        offset+= 3;
2674
2675
98
        proto_tree_add_item(phy_tree, hf_ieee1905_local_intf_variant,
2676
98
                            tvb, offset, 1, ENC_NA);
2677
98
        offset++;
2678
2679
98
        media_specific_len = tvb_get_uint8(tvb, offset);
2680
2681
98
        proto_tree_add_item(phy_tree, hf_ieee1905_local_intf_spec_count,
2682
98
                            tvb, offset, 1, ENC_NA);
2683
98
        offset++;
2684
2685
98
        proto_tree_add_item(phy_tree, hf_ieee1905_local_intf_spec, tvb,
2686
98
                            offset, media_specific_len, ENC_NA);
2687
98
        offset += media_specific_len;
2688
2689
98
        proto_item_set_len(ppi, offset - start_offset);
2690
2691
98
        media_type_index++;
2692
98
    }
2693
2694
16
    proto_item_set_len(pi, offset - saved_offset);
2695
2696
16
    return offset;
2697
16
}
2698
2699
/*
2700
 * Dissect a 1905 profile version TLV
2701
 */
2702
static int
2703
dissect_profile_version(tvbuff_t *tvb, packet_info *pinfo _U_,
2704
        proto_tree *tree, unsigned offset)
2705
145
{
2706
145
    uint8_t profile_version = tvb_get_uint8(tvb, offset);
2707
145
    proto_item *pi = NULL;
2708
2709
145
    pi = proto_tree_add_item(tree, hf_ieee1905_profile_version, tvb,
2710
145
                offset, 1, ENC_NA);
2711
145
    proto_item_append_text(pi, ", %s",
2712
145
                val_to_str_const(profile_version, ieee1905_profile_version_vals,
2713
145
                           "Reserved"));
2714
145
    offset++;
2715
2716
145
    return offset;
2717
145
}
2718
2719
/*
2720
 * Dissect the power off interface TLV
2721
 */
2722
static int
2723
dissect_power_off_interface(tvbuff_t *tvb, packet_info *pinfo,
2724
        proto_tree *tree, unsigned offset)
2725
15
{
2726
15
    uint8_t local_intf_count = tvb_get_uint8(tvb, offset);
2727
15
    uint8_t local_intf_index = 0;
2728
15
    proto_item *pi = NULL;
2729
15
    proto_tree *intf_list = NULL;
2730
15
    unsigned saved_offset = 0;
2731
2732
15
    proto_tree_add_item(tree, hf_ieee1905_power_off_intf_count, tvb,
2733
15
                        offset, 1, ENC_NA);
2734
15
    offset++;
2735
2736
15
    if (local_intf_count == 0)
2737
1
        return offset;
2738
2739
14
    intf_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2740
14
                                       ett_push_button_phy_list,
2741
14
                                       &pi, "Generic Phy media type list");
2742
14
    saved_offset = offset;
2743
2744
93
    while (local_intf_index < local_intf_count) {
2745
79
        proto_tree *intf_tree = NULL;
2746
79
        proto_item *ppi = NULL;
2747
79
        uint8_t media_specific_len = 0;
2748
2749
79
        intf_tree = proto_tree_add_subtree_format(intf_list, tvb,
2750
79
                                    offset, -1, ett_power_off_info,
2751
79
                                    &ppi, "Powered off interface %u info",
2752
79
                                    local_intf_index);
2753
2754
79
        proto_tree_add_item(intf_tree, hf_ieee1905_mac_address, tvb,
2755
79
                            offset, 6, ENC_NA);
2756
79
        offset += 6;
2757
2758
79
        offset = dissect_media_type(tvb, pinfo, intf_tree, offset);
2759
2760
79
        proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_oui,
2761
79
                            tvb, offset, 3, ENC_NA);
2762
79
        offset+= 3;
2763
2764
79
        proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_variant,
2765
79
                            tvb, offset, 1, ENC_NA);
2766
79
        offset++;
2767
2768
79
        media_specific_len = tvb_get_uint8(tvb, offset);
2769
2770
79
        proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_spec_count,
2771
79
                            tvb, offset, 1, ENC_NA);
2772
79
        offset++;
2773
2774
79
        proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_spec, tvb,
2775
79
                            offset, media_specific_len, ENC_NA);
2776
79
        offset += media_specific_len;
2777
2778
79
        local_intf_index++;
2779
79
    }
2780
2781
14
    proto_item_set_len(pi, offset - saved_offset);
2782
2783
14
    return offset;
2784
15
}
2785
2786
/*
2787
 * Dissect an interface power change information TLV.
2788
 */
2789
static int
2790
dissect_interface_power_change_info(tvbuff_t *tvb, packet_info *pinfo _U_,
2791
        proto_tree *tree, unsigned offset)
2792
43
{
2793
43
    unsigned intf_count = tvb_get_uint8(tvb, offset);
2794
43
    unsigned intf_index = 0;
2795
43
    proto_tree *intf_list = NULL;
2796
2797
43
    proto_tree_add_item(tree, hf_ieee1905_power_change_intf_count, tvb,
2798
43
                        offset, 1, ENC_NA);
2799
2800
43
    intf_list = proto_tree_add_subtree(tree, tvb, offset, intf_count * 7,
2801
43
                        ett_power_change_list, NULL,
2802
43
                        "Interface power change list");
2803
2804
857
    while (intf_index < intf_count) {
2805
814
        proto_tree *intf_tree = NULL;
2806
814
        proto_item *pi = NULL;
2807
814
        uint8_t power_state = 0;
2808
2809
814
        intf_tree = proto_tree_add_subtree_format(intf_list, tvb,
2810
814
                        offset, 7, ett_power_change_info,
2811
814
                        NULL, "Power change interface %u info",
2812
814
                        intf_index);
2813
2814
814
        proto_tree_add_item(intf_tree, hf_ieee1905_power_change_mac_addr,
2815
814
                        tvb, offset, 6, ENC_NA);
2816
814
        offset += 6;
2817
2818
814
        power_state = tvb_get_uint8(tvb, offset);
2819
814
        pi = proto_tree_add_item(tree, hf_ieee1905_power_change_state, tvb,
2820
814
                        offset, 1, ENC_NA);
2821
814
        proto_item_append_text(pi, ", %s",
2822
814
                        val_to_str(power_state,
2823
814
                                   ieee1905_power_state_vals,
2824
814
                                   "Reserved"));
2825
814
        offset++;
2826
2827
814
        intf_index++;
2828
814
    }
2829
2830
43
    return offset;
2831
43
}
2832
2833
/*
2834
 * Dissect an interface power change status TLV.
2835
 */
2836
static int
2837
dissect_interface_power_change_status(tvbuff_t *tvb, packet_info *pinfo _U_,
2838
        proto_tree *tree, unsigned offset)
2839
28
{
2840
28
    unsigned intf_count = tvb_get_uint8(tvb, offset);
2841
28
    unsigned intf_index = 0;
2842
28
    proto_tree *intf_list = NULL;
2843
2844
28
    proto_tree_add_item(tree, hf_ieee1905_power_status_intf_count, tvb,
2845
28
                        offset, 1, ENC_NA);
2846
2847
28
    intf_list = proto_tree_add_subtree(tree, tvb, offset, intf_count * 7,
2848
28
                        ett_power_status_list, NULL,
2849
28
                        "Interface power status list");
2850
2851
532
    while (intf_index < intf_count) {
2852
504
        proto_tree *intf_tree = NULL;
2853
504
        proto_item *pi = NULL;
2854
504
        uint8_t power_state = 0;
2855
2856
504
        intf_tree = proto_tree_add_subtree_format(intf_list, tvb,
2857
504
                        offset, 7, ett_power_status_info,
2858
504
                        NULL, "Power status interface %u info",
2859
504
                        intf_index);
2860
2861
504
        proto_tree_add_item(intf_tree, hf_ieee1905_power_status_mac_addr,
2862
504
                        tvb, offset, 6, ENC_NA);
2863
504
        offset += 6;
2864
2865
504
        power_state = tvb_get_uint8(tvb, offset);
2866
504
        pi = proto_tree_add_item(tree, hf_ieee1905_power_status_state, tvb,
2867
504
                        offset, 1, ENC_NA);
2868
504
        proto_item_append_text(pi, ", %s",
2869
504
                        val_to_str(power_state,
2870
504
                                   ieee1905_power_status_vals,
2871
504
                                   "Reserved"));
2872
504
        offset++;
2873
2874
504
        intf_index++;
2875
504
    }
2876
2877
28
    return offset;
2878
28
}
2879
2880
static int
2881
dissect_l2_neighbor_device(tvbuff_t *tvb, packet_info *pinfo _U_,
2882
        proto_tree *tree, unsigned offset)
2883
36
{
2884
36
    unsigned intf_count = tvb_get_uint8(tvb, offset);
2885
36
    unsigned intf_index = 0;
2886
36
    proto_tree *intf_list = NULL;
2887
36
    proto_item *pi = NULL;
2888
36
    unsigned saved_offset = 0;
2889
2890
36
    proto_tree_add_item(tree, hf_ieee1905_l2_neighbor_intf_count, tvb,
2891
36
                        offset, 1, ENC_NA);
2892
36
    offset++;
2893
2894
36
    if (intf_count == 0)
2895
1
        return offset;
2896
2897
35
    intf_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2898
35
                        ett_l2_local_intf_list, &pi,
2899
35
                        "L2 local interface list");
2900
2901
35
    saved_offset = offset;
2902
2903
126
    while (intf_index < intf_count) {
2904
91
        proto_tree *intf_tree = NULL, *neighbor_list = NULL;
2905
91
        proto_item *ipi = NULL, *mpi = NULL;
2906
91
        uint16_t neighbor_device_count = 0, neighbor_device_index = 0;
2907
91
        unsigned start_offset = offset, ndl_start_offset = 0;
2908
2909
91
        intf_tree = proto_tree_add_subtree_format(intf_list, tvb, offset, -1,
2910
91
                            ett_l2_neighbor_device_info, &ipi,
2911
91
                            "L2 neighbor device %u info", intf_count);
2912
2913
91
        proto_tree_add_item(intf_tree, hf_ieee1905_l2_local_intf_mac_addr, tvb,
2914
91
                            offset, 6, ENC_NA);
2915
91
        offset += 6;
2916
2917
91
        neighbor_device_count = tvb_get_ntohs(tvb, offset);
2918
91
        proto_tree_add_item(intf_tree, hf_ieee1905_l2_neighbor_dev_count, tvb,
2919
91
                            offset, 2, ENC_BIG_ENDIAN);
2920
91
        offset += 2;
2921
2922
91
        neighbor_list = proto_tree_add_subtree(intf_tree, tvb, offset, -1,
2923
91
                            ett_l2_neighbor_dev_list, &mpi,
2924
91
                            "Neighbor device list");
2925
2926
91
        ndl_start_offset = offset;
2927
2928
221
        while (neighbor_device_index < neighbor_device_count) {
2929
130
            proto_tree *neighbor_dev_tree = NULL;
2930
130
            proto_item *bmpi = NULL;
2931
130
            uint16_t behind_mac_addr_count = 0, behind_mac_addr_index = 0;
2932
130
            unsigned ndt_start_offset = offset;
2933
2934
130
            neighbor_dev_tree = proto_tree_add_subtree_format(neighbor_list,
2935
130
                                        tvb, offset, -1,
2936
130
                                        ett_l2_neighbor_dev_tree, &bmpi,
2937
130
                                        "Neighbor device %u info",
2938
130
                                        neighbor_device_index);
2939
2940
130
            proto_tree_add_item(neighbor_dev_tree,
2941
130
                                hf_ieee1905_l2_neighbor_mac_addr, tvb,
2942
130
                                offset, 6, ENC_NA);
2943
130
            offset += 6;
2944
2945
130
            behind_mac_addr_count = tvb_get_ntohs(tvb, offset);
2946
130
            proto_tree_add_item(neighbor_dev_tree,
2947
130
                                hf_ieee1905_l2_behind_mac_addr_count,
2948
130
                                tvb, offset, 2, ENC_BIG_ENDIAN);
2949
130
            offset += 2;
2950
2951
721
            while(behind_mac_addr_index < behind_mac_addr_count) {
2952
591
                proto_tree_add_item(neighbor_dev_tree,
2953
591
                                    hf_ieee1905_l2_behind_mac_addr, tvb,
2954
591
                                    offset, 6, ENC_NA);
2955
591
                offset += 6;
2956
2957
591
                behind_mac_addr_index++;
2958
591
            }
2959
2960
130
            neighbor_device_index++;
2961
2962
130
            proto_item_set_len(bmpi, offset - ndt_start_offset);
2963
2964
130
        }
2965
2966
91
        proto_item_set_len(mpi, offset - ndl_start_offset);
2967
91
        proto_item_set_len(ipi, offset - start_offset);
2968
2969
91
        intf_index++;
2970
91
    }
2971
2972
35
    proto_item_set_len(pi, offset - saved_offset);
2973
2974
35
    return offset;
2975
36
}
2976
2977
static int
2978
dissect_supported_service(tvbuff_t *tvb, packet_info *pinfo _U_,
2979
        proto_tree *tree, unsigned offset)
2980
65
{
2981
65
    unsigned service_count = tvb_get_uint8(tvb, offset);
2982
65
    unsigned service_index = 0;
2983
65
    proto_tree *service_list = NULL;
2984
2985
65
    proto_tree_add_item(tree, hf_ieee1905_supported_service_count, tvb,
2986
65
                        offset, 1, ENC_NA);
2987
65
    offset++;
2988
2989
65
    service_list = proto_tree_add_subtree(tree, tvb, offset, service_count,
2990
65
                        ett_supported_service_list, NULL,
2991
65
                        "Supported service list");
2992
2993
5.41k
    while (service_index < service_count) {
2994
5.35k
        proto_item *pi = NULL;
2995
5.35k
        uint8_t service = tvb_get_uint8(tvb, offset);
2996
2997
5.35k
        pi = proto_tree_add_item(service_list, hf_ieee1905_supported_service,
2998
5.35k
                                tvb, offset, 1, ENC_NA);
2999
3000
5.35k
        proto_item_append_text(pi, ", %s",
3001
5.35k
                        val_to_str(service,
3002
5.35k
                                   ieee1905_supported_service_vals,
3003
5.35k
                                   "Reserved"));
3004
5.35k
        offset++;
3005
3006
5.35k
        service_index++;
3007
5.35k
    }
3008
3009
65
    return offset;
3010
65
}
3011
3012
/*
3013
 * Dissect a searched service TLV\
3014
 */
3015
static int
3016
dissect_searched_service(tvbuff_t *tvb, packet_info *pinfo _U_,
3017
        proto_tree *tree, unsigned offset)
3018
51
{
3019
51
    unsigned service_count = tvb_get_uint8(tvb, offset);
3020
51
    unsigned service_index = 0;
3021
51
    proto_tree *service_list = NULL;
3022
3023
51
    proto_tree_add_item(tree, hf_ieee1905_searched_service_count, tvb,
3024
51
                        offset, 1, ENC_NA);
3025
51
    offset++;
3026
3027
51
    service_list = proto_tree_add_subtree(tree, tvb, offset, service_count,
3028
51
                        ett_searched_service_list, NULL,
3029
51
                        "Searched service list");
3030
3031
3.38k
    while (service_index < service_count) {
3032
3.33k
        proto_item *pi = NULL;
3033
3.33k
        uint8_t service = tvb_get_uint8(tvb, offset);
3034
3035
3.33k
        pi = proto_tree_add_item(service_list, hf_ieee1905_searched_service,
3036
3.33k
                                tvb, offset, 1, ENC_NA);
3037
3038
        /*
3039
         * Use the same set of values until we figure out if the spec has
3040
         * an error in 17.2.2.
3041
         */
3042
3.33k
        proto_item_append_text(pi, ", %s",
3043
3.33k
                        val_to_str(service,
3044
3.33k
                                   ieee1905_supported_service_vals,
3045
3.33k
                                   "Reserved"));
3046
3.33k
        offset++;
3047
3048
3.33k
        service_index++;
3049
3.33k
    }
3050
3051
51
    return offset;
3052
51
}
3053
3054
/*
3055
 * Dissect an AP Radio Identifier TLV
3056
 */
3057
static int
3058
dissect_ap_radio_identifier(tvbuff_t *tvb, packet_info *pinfo _U_,
3059
        proto_tree *tree, unsigned offset)
3060
146
{
3061
146
    proto_tree_add_item(tree, hf_ieee1905_ap_radio_identifier, tvb,
3062
146
                        offset, 6, ENC_NA);
3063
146
    offset += 6;
3064
3065
146
    return offset;
3066
146
}
3067
3068
/*
3069
 * Dissect an AP Operational BSS TLV
3070
 */
3071
static int
3072
dissect_ap_operational_bss(tvbuff_t *tvb, packet_info *pinfo _U_,
3073
        proto_tree *tree, unsigned offset)
3074
26
{
3075
26
    proto_item *rpi = NULL;
3076
26
    proto_tree *radio_list = NULL;
3077
26
    uint8_t radio_count = tvb_get_uint8(tvb, offset);
3078
26
    uint8_t radio_index = 0;
3079
26
    unsigned saved_offset = 0;
3080
3081
26
    proto_tree_add_item(tree, hf_ieee1905_operatonal_bss_radio_count,
3082
26
                        tvb, offset, 1, ENC_NA);
3083
26
    offset++;
3084
3085
26
    if (radio_count == 0)
3086
1
        return offset;
3087
3088
25
    radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
3089
25
                        ett_ap_operational_bss_list, &rpi,
3090
25
                        "AP operational BSS radio list");
3091
25
    saved_offset = offset;
3092
3093
238
    while (radio_index < radio_count) {
3094
213
        proto_tree *radio_tree = NULL, *local_intf_list = NULL;
3095
213
        proto_item *opi = NULL, *ipi = NULL;
3096
213
        unsigned start_offset = offset, list_start_offset;
3097
213
        uint8_t local_intf_count = 0;
3098
213
        uint8_t local_intf_index = 0;
3099
3100
213
        radio_tree = proto_tree_add_subtree_format(radio_list,
3101
213
                                    tvb, offset, -1,
3102
213
                                    ett_ap_operational_bss_tree, &opi,
3103
213
                                    "AP operational BSS %u info",
3104
213
                                    radio_index);
3105
3106
213
        proto_tree_add_item(radio_tree, hf_ieee1905_ap_radio_identifier,
3107
213
                            tvb, offset, 6, ENC_NA);
3108
213
        offset += 6;
3109
3110
213
        local_intf_count = tvb_get_uint8(tvb, offset);
3111
3112
213
        proto_tree_add_item(radio_tree, hf_ieee1905_ap_operational_intf_count,
3113
213
                            tvb, offset, 1, ENC_NA);
3114
213
        offset++;
3115
3116
213
        list_start_offset = offset;
3117
3118
213
        local_intf_list = proto_tree_add_subtree(radio_tree, tvb, offset, -1,
3119
213
                                ett_ap_operational_bss_intf_list, &ipi,
3120
213
                                "AP operational BSS local interface list");
3121
3122
583
        while (local_intf_index < local_intf_count) {
3123
370
            uint8_t ssid_len = 0;
3124
370
            proto_tree *local_intf_tree = NULL;
3125
370
            proto_item *itpi = NULL;
3126
370
            unsigned local_intf_offset = offset;
3127
3128
370
            local_intf_tree = proto_tree_add_subtree_format(local_intf_list,
3129
370
                                tvb, offset, -1,
3130
370
                                ett_ap_operational_bss_intf_tree, &itpi,
3131
370
                                "AP operational BSS Interface %u",
3132
370
                                local_intf_index);
3133
3134
370
            proto_tree_add_item(local_intf_tree, hf_ieee1905_ap_local_intf_mac_addr,
3135
370
                                tvb, offset, 6, ENC_NA);
3136
370
            offset += 6;
3137
3138
370
            ssid_len = tvb_get_uint8(tvb, offset);
3139
3140
370
            proto_tree_add_item(local_intf_tree, hf_ieee1905_ap_local_intf_ssid_len,
3141
370
                                tvb, offset, 1, ENC_NA);
3142
370
            offset++;
3143
3144
370
            proto_tree_add_item(local_intf_tree, hf_ieee1905_ap_local_intf_ssid,
3145
370
                                tvb, offset, ssid_len, ENC_ASCII);
3146
370
            offset += ssid_len;
3147
3148
370
            proto_item_set_len(itpi, offset - local_intf_offset);
3149
3150
370
            local_intf_index++;
3151
370
        }
3152
3153
213
        proto_item_set_len(ipi, offset - list_start_offset);
3154
213
        proto_item_set_len(opi, offset - start_offset);
3155
213
        radio_index++;
3156
213
    }
3157
3158
25
    proto_item_set_len(rpi, offset - saved_offset);
3159
3160
25
    return offset;
3161
26
}
3162
3163
/*
3164
 * Dissect an Associated Clients TLV
3165
 */
3166
static int
3167
dissect_associated_clients(tvbuff_t *tvb, packet_info *pinfo _U_,
3168
        proto_tree *tree, unsigned offset)
3169
30
{
3170
30
    uint8_t bss_count = tvb_get_uint8(tvb, offset);
3171
30
    uint8_t bss_index = 0;
3172
30
    proto_tree *bss_list = NULL;
3173
30
    proto_item *pi = NULL;
3174
30
    unsigned saved_offset = 0;
3175
3176
30
    proto_tree_add_item(tree, hf_ieee1905_assoc_clients_bss_count,
3177
30
                        tvb, offset, 1, ENC_NA);
3178
30
    offset++;
3179
3180
30
    bss_list = proto_tree_add_subtree(tree, tvb, offset, -1,
3181
30
                                ett_assoc_clients_bss_list, &pi,
3182
30
                                "Associated BSS list");
3183
30
    saved_offset = offset;
3184
3185
106
    while (bss_index < bss_count) {
3186
76
        proto_tree *bss_tree = NULL, *client_list = NULL;
3187
76
        proto_item *bpi = NULL;
3188
76
        unsigned start_offset = offset;
3189
76
        uint16_t client_count = 0, client_index = 0;
3190
3191
3192
76
        bss_tree = proto_tree_add_subtree_format(bss_list,
3193
76
                                tvb, offset, -1,
3194
76
                                ett_assoc_client_bss_tree, &bpi,
3195
76
                                "Associated BSS %u",
3196
76
                                bss_index);
3197
3198
76
        proto_tree_add_item(bss_tree, hf_ieee1905_assoc_bssid, tvb,
3199
76
                            offset, 6, ENC_NA);
3200
76
        offset += 6;
3201
3202
76
        client_count = tvb_get_ntohs(tvb, offset);
3203
76
        proto_tree_add_item(bss_tree, hf_ieee1905_bss_client_count,
3204
76
                            tvb, offset, 2, ENC_BIG_ENDIAN);
3205
76
        offset += 2;
3206
3207
76
        client_list = proto_tree_add_subtree(bss_tree, tvb, offset,
3208
76
                            client_count * 8, ett_assoc_client_list,
3209
76
                            NULL, "Associated BSS clients list");
3210
3211
556
        while (client_index < client_count) {
3212
480
            proto_tree *client_tree = NULL;
3213
3214
480
            client_tree = proto_tree_add_subtree_format(client_list, tvb,
3215
480
                                offset, 8, ett_assoc_client_tree,
3216
480
                                NULL, "Client %u", client_index);
3217
3218
480
            proto_tree_add_item(client_tree, hf_ieee1905_bss_client_mac,
3219
480
                                tvb, offset, 6, ENC_NA);
3220
480
            offset += 6;
3221
3222
480
            proto_tree_add_item(client_tree, hf_ieee1905_bss_client_last_assoc,
3223
480
                                tvb, offset, 2, ENC_BIG_ENDIAN);
3224
480
            offset += 2;
3225
3226
480
            client_index++;
3227
480
        }
3228
3229
76
        proto_item_set_len(bpi, offset - start_offset);
3230
76
        bss_index++;
3231
76
    }
3232
3233
30
    proto_item_set_len(pi, offset - saved_offset);
3234
3235
30
    return offset;
3236
30
}
3237
3238
/*
3239
 * Dissect an AP Capability TLV
3240
 */
3241
static int
3242
dissect_ap_capability(tvbuff_t *tvb, packet_info *pinfo _U_,
3243
        proto_tree *tree, unsigned offset)
3244
268
{
3245
268
    static int * const capabilities[] = {
3246
268
        &hf_ieee1905_unassoc_sta_metrics_oper_flag,
3247
268
        &hf_ieee1905_unassoc_sta_metrics_non_oper_flag,
3248
268
        &hf_ieee1905_agent_init_steering,
3249
268
        NULL,
3250
268
    };
3251
3252
268
    proto_tree_add_bitmask(tree, tvb, offset,
3253
268
                           hf_ieee1905_ap_capabilities_flags,
3254
268
                           ett_ieee1905_capabilities_flags,
3255
268
                           capabilities, ENC_NA);
3256
268
    offset++;
3257
3258
268
    return offset;
3259
268
}
3260
3261
/*
3262
 * Dissect an AP Radio Basic Capabilities TLV
3263
 */
3264
static int
3265
dissect_ap_radio_basic_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
3266
        proto_tree *tree, unsigned offset)
3267
43
{
3268
43
    uint8_t classes = 0, class_index = 0;
3269
43
    proto_tree *class_list = NULL;
3270
43
    proto_item *pi = NULL;
3271
43
    unsigned saved_offset = 0;
3272
3273
43
    proto_tree_add_item(tree, hf_ieee1905_ap_radio_identifier, tvb,
3274
43
                        offset, 6, ENC_NA);
3275
43
    offset += 6;
3276
3277
43
    proto_tree_add_item(tree, hf_ieee1905_ap_radio_max_bss, tvb,
3278
43
                        offset, 1, ENC_NA);
3279
43
    offset++;
3280
3281
43
    classes = tvb_get_uint8(tvb, offset);
3282
43
    proto_tree_add_item(tree, hf_ieee1905_ap_radio_classes, tvb,
3283
43
                        offset, 1, ENC_NA);
3284
43
    offset++;
3285
3286
43
    class_list = proto_tree_add_subtree(tree, tvb, offset, -1,
3287
43
                        ett_radio_basic_class_list, &pi,
3288
43
                        "Supported operating classes list");
3289
43
    saved_offset = offset;
3290
3291
487
    while (class_index < classes) {
3292
444
        proto_tree *class_tree = NULL;
3293
444
        proto_tree *non_op_channel_list = NULL;
3294
444
        proto_item *cpi = NULL;
3295
444
        unsigned class_offset = offset;
3296
444
        uint8_t non_op_channel_count = 0;
3297
3298
444
        class_tree = proto_tree_add_subtree_format(class_list,
3299
444
                                tvb, offset, -1,
3300
444
                                ett_ap_radio_basic_cap_class_tree, &cpi,
3301
444
                                "Operating class %u",
3302
444
                                class_index);
3303
3304
444
        proto_tree_add_item(class_tree, hf_ieee1905_ap_radio_class, tvb,
3305
444
                            offset, 1, ENC_NA);
3306
444
        offset++;
3307
3308
444
        proto_tree_add_item(class_tree, hf_ieee1905_ap_radio_eirp,
3309
444
                            tvb, offset, 1, ENC_NA);
3310
444
        offset++;
3311
3312
444
        non_op_channel_count = tvb_get_uint8(tvb, offset);
3313
444
        proto_tree_add_item(class_tree, hf_ieee1905_ap_radio_non_op_count,
3314
444
                            tvb, offset, 1, ENC_NA);
3315
444
        offset++;
3316
3317
444
        if (non_op_channel_count > 0) {
3318
3319
236
            non_op_channel_list = proto_tree_add_subtree(class_tree, tvb, offset,
3320
236
                                    non_op_channel_count,
3321
236
                                    ett_radio_basic_non_op_list, NULL,
3322
236
                                    "Non-operating channel list");
3323
3324
9.79k
            while (non_op_channel_count > 0) {
3325
9.56k
                proto_tree_add_item(non_op_channel_list,
3326
9.56k
                                    hf_ieee1905_radio_basic_non_op_channel,
3327
9.56k
                                    tvb, offset, 1, ENC_NA);
3328
9.56k
                offset++;
3329
3330
9.56k
                non_op_channel_count--;
3331
9.56k
            }
3332
236
        }
3333
3334
444
        proto_item_set_len(cpi, offset - class_offset);
3335
444
        class_index++;
3336
444
    }
3337
3338
43
    proto_item_set_len(pi, offset - saved_offset);
3339
43
    return offset;
3340
43
}
3341
3342
/*
3343
 * Dissect an AP HT Capabilities TLV
3344
 */
3345
static int
3346
dissect_ap_ht_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
3347
        proto_tree *tree, unsigned offset)
3348
45
{
3349
45
    static int * const capabilities[] = {
3350
45
        &hf_ieee1905_max_supported_tx_streams,
3351
45
        &hf_ieee1905_max_supported_rx_streams,
3352
45
        &hf_ieee1905_short_gi_20mhz_flag,
3353
45
        &hf_ieee1905_short_gi_40mhz_flag,
3354
45
        &hf_ieee1905_ht_support_40mhz_flag,
3355
45
        NULL,
3356
45
    };
3357
3358
45
    proto_tree_add_item(tree, hf_ieee1905_ap_ht_capabilities_radio_id,
3359
45
                        tvb, offset, 6, ENC_NA);
3360
45
    offset += 6;
3361
3362
45
    proto_tree_add_bitmask(tree, tvb, offset, hf_ieee1905_ht_cap_flags,
3363
45
                           ett_ht_cap_flags, capabilities, ENC_NA);
3364
45
    offset++;
3365
3366
45
    return offset;
3367
45
}
3368
3369
/*
3370
 * Dissect an AP VHT Capabilities TLV
3371
 */
3372
3373
static const value_string vht_supported_mcs_vals[] = {
3374
    { 0, "Support for VHT-MCS 0-7" },
3375
    { 1, "Support for VHT-MCS 0-8" },
3376
    { 2, "Support for VHT-MCS 0-9" },
3377
    { 3, "Not supported" },
3378
    { 0, NULL }
3379
};
3380
3381
static int * const tx_vht_mcs_map_headers[] = {
3382
    &hf_ieee1905_ap_vht_tx_mcs_map_8ss,
3383
    &hf_ieee1905_ap_vht_tx_mcs_map_7ss,
3384
    &hf_ieee1905_ap_vht_tx_mcs_map_6ss,
3385
    &hf_ieee1905_ap_vht_tx_mcs_map_5ss,
3386
    &hf_ieee1905_ap_vht_tx_mcs_map_4ss,
3387
    &hf_ieee1905_ap_vht_tx_mcs_map_3ss,
3388
    &hf_ieee1905_ap_vht_tx_mcs_map_2ss,
3389
    &hf_ieee1905_ap_vht_tx_mcs_map_1ss,
3390
    NULL
3391
};
3392
3393
static int * const rx_vht_mcs_map_headers[] = {
3394
    &hf_ieee1905_ap_vht_rx_mcs_map_8ss,
3395
    &hf_ieee1905_ap_vht_rx_mcs_map_7ss,
3396
    &hf_ieee1905_ap_vht_rx_mcs_map_6ss,
3397
    &hf_ieee1905_ap_vht_rx_mcs_map_5ss,
3398
    &hf_ieee1905_ap_vht_rx_mcs_map_4ss,
3399
    &hf_ieee1905_ap_vht_rx_mcs_map_3ss,
3400
    &hf_ieee1905_ap_vht_rx_mcs_map_2ss,
3401
    &hf_ieee1905_ap_vht_rx_mcs_map_1ss,
3402
    NULL
3403
};
3404
3405
static int
3406
dissect_ap_vht_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
3407
        proto_tree *tree, unsigned offset)
3408
31
{
3409
31
    static int * const capabilities[] = {
3410
31
        &hf_ieee1905_vht_max_supported_tx_streams,
3411
31
        &hf_ieee1905_vht_max_supported_rx_streams,
3412
31
        &hf_ieee1905_short_gi_80mhz_flag,
3413
31
        &hf_ieee1905_short_gi_160mhz_flag,
3414
31
        &hf_ieee1905_vht_support_80plus_mhz_flag,
3415
31
        &hf_ieee1905_vht_support_160_mhz_flag,
3416
31
        &hf_ieee1905_su_beamformer_capable_flag,
3417
31
        &hf_ieee1905_mu_beamformer_capable_flag,
3418
31
        NULL,
3419
31
    };
3420
3421
31
    proto_tree_add_item(tree, hf_ieee1905_ap_vht_capabilities_radio_id,
3422
31
                        tvb, offset, 6, ENC_NA);
3423
31
    offset += 6;
3424
3425
31
    proto_tree_add_bitmask_with_flags(tree, tvb, offset,
3426
31
                    hf_ieee1905_ap_vht_supported_vht_tx_mcs,
3427
31
                    ett_ieee1905_ap_vht_tx_mcs_set,
3428
31
                    tx_vht_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3429
31
    offset += 2;
3430
3431
31
    proto_tree_add_bitmask_with_flags(tree, tvb, offset,
3432
31
                    hf_ieee1905_ap_vht_supported_vht_rx_mcs,
3433
31
                    ett_ieee1905_ap_vht_rx_mcs_set,
3434
31
                    rx_vht_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3435
31
    offset += 2;
3436
3437
31
    proto_tree_add_bitmask(tree, tvb, offset, hf_ieee1905_vht_cap_flags,
3438
31
                           ett_vht_cap_flags, capabilities, ENC_NA);
3439
31
    offset += 2;
3440
3441
31
    return offset;
3442
31
}
3443
3444
/*
3445
 * Dissect an AP HE Capabilities TLV
3446
 */
3447
static int * const he_capabilities[] = {
3448
    &hf_ieee1905_he_max_supported_tx_streams,
3449
    &hf_ieee1905_he_max_supported_rx_streams,
3450
    &hf_ieee1905_he_support_80plus_mhz_flag,
3451
    &hf_ieee1905_he_support_160mhz_flag,
3452
    &hf_ieee1905_he_su_beamformer_capable_flag,
3453
    &hf_ieee1905_he_mu_beamformer_capable_flag,
3454
    &hf_ieee1905_ul_mu_mimo_capable_flag,
3455
    &hf_ieee1905_ul_mu_mimo_ofdma_capable_flag,
3456
    &hf_ieee1905_dl_mu_mimo_ofdma_capable_flag,
3457
    &hf_ieee1905_ul_ofdma_capable,
3458
    &hf_ieee1905_dl_ofdma_capable,
3459
    NULL,
3460
};
3461
3462
static const value_string max_he_mcs_1_ss_vals[] = {
3463
    { 0, "Support for HE-MCS 0-7 for 1 Spatial Stream" },
3464
    { 1, "Support for HE-MCS 0-9 for 1 Spatial Stream" },
3465
    { 2, "Support for HE-MCS 0-11 for 1 Spatial Stream" },
3466
    { 3, "1 Spatial Stream not supported" },
3467
    { 0, NULL }
3468
};
3469
3470
static const value_string max_he_mcs_2_ss_vals[] = {
3471
    { 0, "Support for HE-MCS 0-7 for 2 Spatial Streams" },
3472
    { 1, "Support for HE-MCS 0-9 for 2 Spatial Streams" },
3473
    { 2, "Support for HE-MCS 0-11 for 2 Spatial Streams" },
3474
    { 3, "2 Spatial Streams not supported" },
3475
    { 0, NULL }
3476
};
3477
3478
static const value_string max_he_mcs_3_ss_vals[] = {
3479
    { 0, "Support for HE-MCS 0-7 for 3 Spatial Streams" },
3480
    { 1, "Support for HE-MCS 0-9 for 3 Spatial Streams" },
3481
    { 2, "Support for HE-MCS 0-11 for 3 Spatial Streams" },
3482
    { 3, "3 Spatial Streams not supported" },
3483
    { 0, NULL }
3484
};
3485
3486
static const value_string max_he_mcs_4_ss_vals[] = {
3487
    { 0, "Support for HE-MCS 0-7 for 4 Spatial Streams" },
3488
    { 1, "Support for HE-MCS 0-9 for 4 Spatial Streams" },
3489
    { 2, "Support for HE-MCS 0-11 for 4 Spatial Streams" },
3490
    { 3, "4 Spatial Streams not supported" },
3491
    { 0, NULL }
3492
};
3493
3494
static const value_string max_he_mcs_5_ss_vals[] = {
3495
    { 0, "Support for HE-MCS 0-7 for 5 Spatial Streams" },
3496
    { 1, "Support for HE-MCS 0-9 for 5 Spatial Streams" },
3497
    { 2, "Support for HE-MCS 0-11 for 5 Spatial Streams" },
3498
    { 3, "5 Spatial Streams not supported" },
3499
    { 0, NULL }
3500
};
3501
3502
static const value_string max_he_mcs_6_ss_vals[] = {
3503
    { 0, "Support for HE-MCS 0-7 for 6 Spatial Streams" },
3504
    { 1, "Support for HE-MCS 0-9 for 6 Spatial Streams" },
3505
    { 2, "Support for HE-MCS 0-11 for 6 Spatial Streams" },
3506
    { 3, "6 Spatial Streams not supported" },
3507
    { 0, NULL }
3508
};
3509
3510
static const value_string max_he_mcs_7_ss_vals[] = {
3511
    { 0, "Support for HE-MCS 0-7 for 7 Spatial Streams" },
3512
    { 1, "Support for HE-MCS 0-9 for 7 Spatial Streams" },
3513
    { 2, "Support for HE-MCS 0-11 for 7 Spatial Streams" },
3514
    { 3, "7 Spatial Streams not supported" },
3515
    { 0, NULL }
3516
};
3517
3518
static const value_string max_he_mcs_8_ss_vals[] = {
3519
    { 0, "Support for HE-MCS 0-7 for 8 Spatial Streams" },
3520
    { 1, "Support for HE-MCS 0-9 for 8 Spatial Streams" },
3521
    { 2, "Support for HE-MCS 0-11 for 8 Spatial Streams" },
3522
    { 3, "8 Spatial Streams not supported" },
3523
    { 0, NULL }
3524
};
3525
3526
static int * const rx_he_mcs_map_headers[] = {
3527
    &hf_ieee1905_ap_he_rx_mcs_map_8ss,
3528
    &hf_ieee1905_ap_he_rx_mcs_map_7ss,
3529
    &hf_ieee1905_ap_he_rx_mcs_map_6ss,
3530
    &hf_ieee1905_ap_he_rx_mcs_map_5ss,
3531
    &hf_ieee1905_ap_he_rx_mcs_map_4ss,
3532
    &hf_ieee1905_ap_he_rx_mcs_map_3ss,
3533
    &hf_ieee1905_ap_he_rx_mcs_map_2ss,
3534
    &hf_ieee1905_ap_he_rx_mcs_map_1ss,
3535
    NULL
3536
};
3537
3538
static int * const tx_he_mcs_map_headers[] = {
3539
    &hf_ieee1905_ap_he_tx_mcs_map_8ss,
3540
    &hf_ieee1905_ap_he_tx_mcs_map_7ss,
3541
    &hf_ieee1905_ap_he_tx_mcs_map_6ss,
3542
    &hf_ieee1905_ap_he_tx_mcs_map_5ss,
3543
    &hf_ieee1905_ap_he_tx_mcs_map_4ss,
3544
    &hf_ieee1905_ap_he_tx_mcs_map_3ss,
3545
    &hf_ieee1905_ap_he_tx_mcs_map_2ss,
3546
    &hf_ieee1905_ap_he_tx_mcs_map_1ss,
3547
    NULL
3548
};
3549
3550
static int
3551
dissect_ap_he_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
3552
        proto_tree *tree, unsigned offset)
3553
83
{
3554
83
    uint8_t he_mcs_len = 0;
3555
3556
83
    proto_tree_add_item(tree, hf_ieee1905_ap_he_cap_radio_id, tvb,
3557
83
                        offset, 6, ENC_NA);
3558
83
    offset += 6;
3559
3560
83
    he_mcs_len = tvb_get_uint8(tvb, offset);
3561
83
    proto_tree_add_item(tree, hf_ieee1905_ap_he_cap_mcs_length, tvb,
3562
83
                        offset, 1, ENC_NA);
3563
83
    offset++;
3564
3565
    /*
3566
     * If the count is not 4, 8, or 12, it is an error.
3567
     */
3568
83
    if (he_mcs_len != 4 && he_mcs_len != 8 && he_mcs_len != 12) {
3569
3570
74
    } else {
3571
9
        proto_tree *mcs_set = NULL;
3572
3573
9
        mcs_set = proto_tree_add_subtree(tree, tvb, offset, 4,
3574
9
                        ett_ap_he_mcs_set, NULL,
3575
9
                        "Supported HE-MCS and NSS Set <= 80 MHz");
3576
3577
9
        proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
3578
9
                        hf_ieee1905_ap_he_cap_tx_mcs_le_80_mhz,
3579
9
                        ett_ieee1905_ap_he_tx_mcs_set,
3580
9
                        tx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3581
9
        offset += 2;
3582
3583
9
        proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
3584
9
                        hf_ieee1905_ap_he_cap_rx_mcs_le_80_mhz,
3585
9
                        ett_ieee1905_ap_he_rx_mcs_set,
3586
9
                        rx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3587
9
        offset += 2;
3588
3589
9
        if (he_mcs_len > 4) {
3590
3
            mcs_set = proto_tree_add_subtree(tree, tvb, offset, 4,
3591
3
                        ett_ap_he_mcs_set, NULL,
3592
3
                        "Supported HE-MCS and NSS Set 160 MHz");
3593
3594
3
            proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
3595
3
                        hf_ieee1905_ap_he_cap_tx_mcs_160_mhz,
3596
3
                        ett_ieee1905_ap_he_tx_mcs_set,
3597
3
                        tx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3598
3
            offset += 2;
3599
3600
3
            proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
3601
3
                        hf_ieee1905_ap_he_cap_rx_mcs_160_mhz,
3602
3
                        ett_ieee1905_ap_he_rx_mcs_set,
3603
3
                        rx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3604
3
            offset += 2;
3605
3
        }
3606
3607
9
        if (he_mcs_len > 8) {
3608
1
            mcs_set = proto_tree_add_subtree(tree, tvb, offset, 4,
3609
1
                        ett_ap_he_mcs_set, NULL,
3610
1
                        "Supported HE-MCS and NSS Set 80+80 MHz");
3611
3612
1
            proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
3613
1
                        hf_ieee1905_ap_he_cap_tx_mcs_80p80_mhz,
3614
1
                        ett_ieee1905_ap_he_tx_mcs_set,
3615
1
                        tx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3616
1
            offset += 2;
3617
3618
1
            proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
3619
1
                        hf_ieee1905_ap_he_cap_rx_mcs_80p80_mhz,
3620
1
                        ett_ieee1905_ap_he_rx_mcs_set,
3621
1
                        rx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3622
1
            offset += 2;
3623
1
        }
3624
9
    }
3625
3626
83
    proto_tree_add_bitmask(tree, tvb, offset, hf_ieee1905_he_cap_flags,
3627
83
                           ett_ap_he_cap_flags, he_capabilities,
3628
83
                           ENC_BIG_ENDIAN);
3629
83
    offset += 2;
3630
3631
83
    return offset;
3632
83
}
3633
3634
/*
3635
 * Dissect a Steering Policy TLV
3636
 */
3637
static int
3638
dissect_steering_policy(tvbuff_t *tvb, packet_info *pinfo _U_,
3639
        proto_tree *tree, unsigned offset, uint16_t len _U_)
3640
58
{
3641
58
    uint8_t steering_disallowed_count = tvb_get_uint8(tvb, offset);
3642
58
    uint8_t btm_steering_disallowed_count = 0;
3643
58
    uint8_t radio_count = 0, radio_index = 0;
3644
3645
58
    proto_tree_add_item(tree, hf_ieee1905_steering_policy_local_disallowed_count,
3646
58
                        tvb, offset, 1, ENC_NA);
3647
58
    offset++;
3648
3649
58
    if (steering_disallowed_count) {
3650
48
        proto_tree *disallowed_list = NULL;
3651
3652
48
        disallowed_list = proto_tree_add_subtree(tree, tvb, offset,
3653
48
                        steering_disallowed_count * 6,
3654
48
                        ett_steering_policy_disallowed_list, NULL,
3655
48
                        "Steering disallowed STA list");
3656
3657
925
        while (steering_disallowed_count > 0) {
3658
877
            proto_tree_add_item(disallowed_list,
3659
877
                        hf_ieee1905_steering_disallowed_mac_addr,
3660
877
                        tvb, offset, 6, ENC_NA);
3661
877
            offset += 6;
3662
877
            steering_disallowed_count--;
3663
877
        }
3664
48
    }
3665
3666
58
    btm_steering_disallowed_count = tvb_get_uint8(tvb, offset);
3667
58
    proto_tree_add_item(tree, hf_ieee1905_btm_steering_disallowed_count,
3668
58
                        tvb, offset, 1, ENC_NA);
3669
58
    offset++;
3670
3671
58
    if (btm_steering_disallowed_count > 0) {
3672
28
        proto_tree *btm_disallowed_list = NULL;
3673
3674
28
        btm_disallowed_list = proto_tree_add_subtree(tree, tvb, offset,
3675
28
                        btm_steering_disallowed_count * 6,
3676
28
                        ett_btm_steering_policy_disallowed_list, NULL,
3677
28
                        "BTM steering disallowed STA list");
3678
3679
746
        while (btm_steering_disallowed_count > 0) {
3680
3681
718
            proto_tree_add_item(btm_disallowed_list,
3682
718
                        hf_ieee1905_btm_steering_disallowed_mac_addr,
3683
718
                        tvb, offset, 6, ENC_NA);
3684
718
            offset += 6;
3685
3686
718
            btm_steering_disallowed_count--;
3687
718
        }
3688
28
    }
3689
3690
58
    radio_count = tvb_get_uint8(tvb, offset);
3691
58
    proto_tree_add_item(tree, hf_ieee1905_steering_policy_radio_count,
3692
58
                        tvb, offset, 1, ENC_NA);
3693
58
    offset++;
3694
3695
58
    if (radio_count > 0) {
3696
20
        proto_tree *policy_list = NULL;
3697
3698
20
        policy_list = proto_tree_add_subtree(tree, tvb, offset,
3699
20
                        radio_count * 9,
3700
20
                        ett_btm_steering_radio_list, NULL,
3701
20
                        "BTM steering policy radio list");
3702
3703
193
        while (radio_index < radio_count) {
3704
173
            proto_tree *policy_tree = NULL;
3705
173
            proto_item *pi = NULL;
3706
173
            uint8_t policy = 0;
3707
3708
173
            policy_tree = proto_tree_add_subtree_format(policy_list,
3709
173
                                tvb, offset, 9,
3710
173
                                ett_ap_operational_bss_intf_tree, NULL,
3711
173
                                "Radio %u", radio_index);
3712
3713
173
            proto_tree_add_item(policy_tree, hf_ieee1905_steering_policy_radio_id,
3714
173
                                tvb, offset, 6, ENC_NA);
3715
173
            offset += 6;
3716
3717
173
            policy = tvb_get_uint8(tvb, offset);
3718
173
            pi = proto_tree_add_item(policy_tree, hf_ieee1905_steering_policy_policy,
3719
173
                                tvb, offset, 1, ENC_NA);
3720
173
            proto_item_append_text(pi, ", %s",
3721
173
                                val_to_str(policy,
3722
173
                                        ieee1905_steering_policy_vals,
3723
173
                                        "Reserved"));
3724
173
            offset++;
3725
3726
173
            proto_tree_add_item(policy_tree, hf_ieee1905_steering_policy_util,
3727
173
                                tvb, offset, 1, ENC_NA);
3728
173
            offset++;
3729
3730
173
            proto_tree_add_item(policy_tree,
3731
173
                                hf_ieee1905_steering_policy_rcpi_threshold,
3732
173
                                tvb, offset, 1, ENC_NA);
3733
173
            offset++;
3734
3735
173
            radio_index++;
3736
173
        }
3737
3738
20
    }
3739
3740
58
    return offset;
3741
58
}
3742
3743
static void
3744
rcpi_threshold_custom(char *result, uint8_t rcpi_threshold)
3745
0
{
3746
0
    if (rcpi_threshold == 0) {
3747
0
        snprintf(result, ITEM_LABEL_LENGTH, "Do not report STA Metrics based on RCPI threshold");
3748
0
    } else if (rcpi_threshold > 0 && rcpi_threshold < 220) {
3749
0
        snprintf(result, ITEM_LABEL_LENGTH, "RCPI Threshold = %.1fdBm",
3750
0
                 (float)rcpi_threshold/2 - 110);
3751
0
    } else if (rcpi_threshold == 220) {
3752
0
        snprintf(result, ITEM_LABEL_LENGTH, "RCPI Threshold >= 0dBm");
3753
0
    } else {
3754
0
        snprintf(result, ITEM_LABEL_LENGTH, "Reserved");
3755
0
    }
3756
0
}
3757
3758
static void
3759
rcpi_hysteresis_custom(char *result, uint8_t rcpi_hysteresis)
3760
0
{
3761
0
    if (rcpi_hysteresis == 0) {
3762
0
        snprintf(result, ITEM_LABEL_LENGTH, "Use Agent's implementation-specific default RCPI Hysteresis margin");
3763
0
    } else {
3764
0
        snprintf(result, ITEM_LABEL_LENGTH, "%udB", rcpi_hysteresis);
3765
0
    }
3766
0
}
3767
3768
/*
3769
 * Dissect a Metric Reporting Policy TLV
3770
 */
3771
static int
3772
dissect_metric_reporting_policy(tvbuff_t *tvb, packet_info *pinfo _U_,
3773
        proto_tree *tree, unsigned offset)
3774
18
{
3775
18
    uint8_t radio_count = 0, radio_index = 0;
3776
18
    proto_tree *radio_list = NULL;
3777
18
    proto_tree *radio_tree = NULL;
3778
18
    proto_item *pi = NULL;
3779
18
    unsigned saved_offset = 0;
3780
18
    static int * const ieee1905_reporting_policy_flags[] = {
3781
18
        &hf_ieee1905_assoc_sta_traffic_stats_inclusion,
3782
18
        &hf_ieee1905_assoc_sta_link_metrics_inclusion,
3783
18
        &hf_ieee1905_assoc_wf6_status_policy_inclusion,
3784
18
        &hf_ieee1905_reporting_policy_flags_reserved,
3785
18
        NULL
3786
18
    };
3787
3788
18
    proto_tree_add_item(tree, hf_ieee1905_ap_metrics_reporting_interval,
3789
18
                        tvb, offset, 1, ENC_NA);
3790
18
    offset++;
3791
3792
18
    radio_count = tvb_get_uint8(tvb, offset);
3793
18
    proto_tree_add_item(tree, hf_ieee1905_metric_reporting_radio_count,
3794
18
                        tvb, offset, 1, ENC_NA);
3795
18
    offset++;
3796
3797
18
    if (radio_count == 0)
3798
3
        return offset;
3799
3800
15
    radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
3801
15
                        ett_metric_reporting_policy_list, &pi,
3802
15
                        "Metric reporting policy list");
3803
15
    saved_offset = offset;
3804
3805
117
    while (radio_index < radio_count) {
3806
102
        radio_tree = proto_tree_add_subtree_format(radio_list,
3807
102
                                tvb, offset, 8,
3808
102
                                ett_metric_reporting_policy_tree, NULL,
3809
102
                                "Reporting policy for radio %u",
3810
102
                                radio_index);
3811
3812
102
        proto_tree_add_item(radio_tree, hf_ieee1905_metric_reporting_policy_radio_id,
3813
102
                            tvb, offset, 6, ENC_NA);
3814
102
        offset += 6;
3815
3816
102
        proto_tree_add_item(radio_tree, hf_ieee1905_metric_rcpi_threshold, tvb,
3817
102
                            offset, 1, ENC_NA);
3818
102
        offset++;
3819
3820
102
        proto_tree_add_item(radio_tree, hf_ieee1905_metric_reporting_rcpi_hysteresis,
3821
102
                            tvb, offset, 1, ENC_NA);
3822
102
        offset++;
3823
3824
102
        proto_tree_add_item(radio_tree, hf_ieee1905_metrics_channel_util_threshold,
3825
102
                            tvb, offset, 1, ENC_NA);
3826
102
        offset++;
3827
3828
102
        proto_tree_add_bitmask_with_flags(radio_tree, tvb, offset,
3829
102
                            hf_ieee1905_metrics_policy_flags,
3830
102
                            ett_metric_policy_flags,
3831
102
                            ieee1905_reporting_policy_flags, ENC_NA,
3832
102
                            BMT_NO_APPEND);
3833
102
        offset++;
3834
3835
102
        radio_index++;
3836
102
    }
3837
3838
15
    proto_item_set_len(pi, offset - saved_offset);
3839
3840
15
    return offset;
3841
18
}
3842
3843
/*
3844
 * Dissect a Channel Preference TLV
3845
 */
3846
static int
3847
dissect_channel_preference(tvbuff_t *tvb, packet_info *pinfo,
3848
        proto_tree *tree, unsigned offset, uint16_t len)
3849
53
{
3850
53
    uint8_t operating_classes = 0, operating_index = 0;
3851
53
    proto_tree *class_list = NULL;
3852
53
    proto_item *pi = NULL;
3853
53
    unsigned saved_offset = 0;
3854
53
    static int * const preference[] = {
3855
53
        &hf_ieee1905_channel_pref_preference,
3856
53
        &hf_ieee1905_channel_pref_reason,
3857
53
        NULL,
3858
53
    };
3859
3860
53
    if (len < 6) {
3861
1
        expert_add_info(pinfo, tree, &ei_ieee1905_malformed_tlv);
3862
1
        return offset + len;
3863
1
    }
3864
3865
52
    proto_tree_add_item(tree, hf_ieee1905_channel_preference_radio_id,
3866
52
                        tvb, offset, 6, ENC_NA);
3867
52
    offset += 6;
3868
3869
52
    if (len < 7) {
3870
0
        expert_add_info(pinfo, tree, &ei_ieee1905_malformed_tlv);
3871
0
        return offset;
3872
0
    }
3873
3874
52
    operating_classes = tvb_get_uint8(tvb, offset);
3875
52
    proto_tree_add_item(tree, hf_ieee1905_channel_preference_class_count,
3876
52
                        tvb, offset, 1, ENC_NA);
3877
52
    offset++;
3878
3879
52
    if (operating_classes == 0)
3880
14
        return offset;
3881
3882
38
    class_list = proto_tree_add_subtree(tree, tvb, offset, -1,
3883
38
                        ett_channel_preference_class_list, &pi,
3884
38
                        "Supported operating classes list");
3885
38
    saved_offset = offset;
3886
3887
    /*
3888
     * There should be at least 2 more bytes here ... add some more expert
3889
     * info soon.
3890
     */
3891
3892
399
    while (operating_index < operating_classes) {
3893
361
        proto_tree *class_tree = NULL;
3894
361
        proto_item *cpi = NULL;
3895
361
        uint8_t channels = 0;
3896
361
        unsigned start_offset = offset;
3897
3898
361
        class_tree = proto_tree_add_subtree_format(class_list,
3899
361
                                tvb, offset, -1,
3900
361
                                ett_ap_channel_preference_class_tree, &cpi,
3901
361
                                "Operating class %u",
3902
361
                                operating_index);
3903
3904
361
        proto_tree_add_item(class_tree, hf_ieee1905_channel_pref_class,
3905
361
                            tvb, offset, 1, ENC_NA);
3906
361
        offset++;
3907
3908
361
        channels = tvb_get_uint8(tvb, offset);
3909
361
        proto_tree_add_item(class_tree, hf_ieee1905_channel_pref_channel_count,
3910
361
                            tvb, offset, 1, ENC_NA);
3911
361
        offset++;
3912
3913
361
        if (channels > 0) {
3914
140
            proto_tree *channel_list = NULL;
3915
3916
140
            channel_list = proto_tree_add_subtree(class_tree, tvb, offset,
3917
140
                                    channels,
3918
140
                                    ett_channel_pref_channel_list, NULL,
3919
140
                                    "Channel list");
3920
3921
8.11k
            while (channels > 0) {
3922
7.97k
                proto_tree_add_item(channel_list,
3923
7.97k
                                    hf_ieee1905_channel_pref_channel,
3924
7.97k
                                    tvb, offset, 1, ENC_NA);
3925
7.97k
                offset++;
3926
3927
7.97k
                channels--;
3928
7.97k
            }
3929
3930
140
        }
3931
3932
361
        proto_tree_add_bitmask(class_tree, tvb, offset,
3933
361
                           hf_ieee1905_channel_prefs_flags,
3934
361
                           ett_ieee1905_channel_prefs_flags,
3935
361
                           preference, ENC_NA);
3936
361
        offset++;
3937
3938
361
        proto_item_set_len(cpi, offset - start_offset);
3939
3940
361
        operating_index++;
3941
361
    }
3942
3943
38
    proto_item_set_len(pi, offset - saved_offset);
3944
3945
38
    return offset;
3946
52
}
3947
3948
/*
3949
 * Dissect a Radio Operation Restriction TLV
3950
 */
3951
static int
3952
dissect_radio_operation_restriction(tvbuff_t *tvb, packet_info *pinfo _U_,
3953
        proto_tree *tree, unsigned offset, uint16_t len _U_)
3954
46
{
3955
46
    uint8_t op_class_count = 0, op_class_index = 0;
3956
46
    proto_tree *op_class_list = NULL, *op_class_tree = NULL;
3957
46
    proto_item *pi = NULL;
3958
46
    unsigned saved_offset = 0;
3959
3960
46
    proto_tree_add_item(tree, hf_ieee1905_radio_restriction_radio_id,
3961
46
                        tvb, offset, 6, ENC_NA);
3962
46
    offset += 6;
3963
3964
46
    op_class_count = tvb_get_uint8(tvb, offset);
3965
46
    proto_tree_add_item(tree, hf_ieee1905_radio_restriction_op_class_count,
3966
46
                        tvb, offset, 1, ENC_NA);
3967
46
    offset++;
3968
3969
46
    if (op_class_count == 0)
3970
2
        return offset;
3971
3972
44
    op_class_list = proto_tree_add_subtree(tree, tvb, offset, -1,
3973
44
                        ett_radio_restriction_op_class_list, &pi,
3974
44
                        "Restricted operating class list");
3975
44
    saved_offset = offset;
3976
3977
379
    while (op_class_index < op_class_count) {
3978
335
        proto_item *ocpi = NULL;
3979
335
        proto_tree *channel_list = NULL, *channel_tree = NULL;
3980
335
        unsigned start_offset = offset;
3981
335
        uint8_t channel_count = 0, channel_index = 0;
3982
3983
335
        op_class_tree = proto_tree_add_subtree_format(op_class_list,
3984
335
                                tvb, offset, -1,
3985
335
                                ett_radio_restriction_op_class_tree, &ocpi,
3986
335
                                "Operating class %u",
3987
335
                                op_class_index);
3988
3989
335
        proto_tree_add_item(op_class_tree, hf_ieee1905_radio_restriction_op_class,
3990
335
                            tvb, offset, 1, ENC_NA);
3991
335
        offset++;
3992
3993
335
        channel_count = tvb_get_uint8(tvb, offset);
3994
335
        proto_tree_add_item(op_class_tree, hf_ieee1905_radio_restriction_chan_count,
3995
335
                            tvb, offset, 1, ENC_NA);
3996
335
        offset++;
3997
3998
335
        if (channel_count == 0) {
3999
173
            proto_item_set_len(ocpi, offset - start_offset);
4000
173
            op_class_index++;
4001
173
            continue;
4002
173
        }
4003
4004
162
        channel_list = proto_tree_add_subtree(op_class_tree, tvb, offset, channel_count * 2,
4005
162
                        ett_radio_restriction_channel_list, NULL,
4006
162
                        "Restricted channel(s) list");
4007
4008
4.25k
        while (channel_index < channel_count) {
4009
4.09k
            uint8_t separation = 0;
4010
4.09k
            unsigned sep_mhz = 0;
4011
4012
4.09k
            channel_tree = proto_tree_add_subtree_format(channel_list,
4013
4.09k
                                tvb, offset, 2,
4014
4.09k
                                ett_radio_restriction_channel_tree, NULL,
4015
4.09k
                                "Channel restriction %u",
4016
4.09k
                                channel_index);
4017
4018
4.09k
            proto_tree_add_item(channel_tree, hf_ieee1905_radio_restriction_channel,
4019
4.09k
                                tvb, offset, 1, ENC_NA);
4020
4.09k
            offset++;
4021
4022
4.09k
            separation = tvb_get_uint8(tvb, offset);
4023
4.09k
            sep_mhz = separation * 10;
4024
4.09k
            proto_tree_add_uint_format(channel_tree,
4025
4.09k
                                hf_ieee1905_radio_restriction_min_separation,
4026
4.09k
                                tvb, offset, 1, separation,
4027
4.09k
                                "Min frequency separation: %dMHz", sep_mhz);
4028
4.09k
            offset++;
4029
4030
4.09k
            channel_index++;
4031
4.09k
        }
4032
4033
162
        proto_item_set_len(ocpi, offset - start_offset);
4034
162
        op_class_index++;
4035
162
    }
4036
4037
44
    proto_item_set_len(pi, offset - saved_offset);
4038
4039
44
    return offset;
4040
46
}
4041
4042
/*
4043
 * Dissect a Transmit Power Limit TLV
4044
 */
4045
static int
4046
dissect_transmit_power_limit(tvbuff_t *tvb, packet_info *pinfo _U_,
4047
        proto_tree *tree, unsigned offset)
4048
82
{
4049
82
    proto_tree_add_item(tree, hf_ieee1905_trans_power_limit_radio_id,
4050
82
                        tvb, offset, 6, ENC_NA);
4051
82
    offset += 6;
4052
4053
82
    proto_tree_add_item(tree, hf_ieee1905_trans_power_limit_eirp,
4054
82
                        tvb, offset, 1, ENC_NA);
4055
82
    offset++;
4056
4057
82
    return offset;
4058
82
}
4059
4060
/*
4061
 * Dissect a Channel Selection Response TLV
4062
 */
4063
static int
4064
dissect_channel_selection_response(tvbuff_t *tvb, packet_info *pinfo _U_,
4065
        proto_tree *tree, unsigned offset)
4066
69
{
4067
69
    uint8_t response_code = 0;
4068
69
    proto_item *pi = NULL;
4069
4070
69
    proto_tree_add_item(tree, hf_ieee1905_channel_select_resp_radio_id,
4071
69
                        tvb, offset, 6, ENC_NA);
4072
69
    offset += 6;
4073
4074
69
    response_code = tvb_get_uint8(tvb, offset);
4075
69
    pi = proto_tree_add_item(tree, hf_ieee1905_channel_select_resp_code, tvb,
4076
69
                        offset, 1, ENC_NA);
4077
69
    proto_item_append_text(pi, ", %s",
4078
69
                        val_to_str(response_code,
4079
69
                            ieee1905_channel_select_resp_code_vals,
4080
69
                            "Reserved"));
4081
69
    offset++;
4082
4083
69
    return offset;
4084
69
}
4085
4086
/*
4087
 * Dissect an Operaring Channel Report TLV
4088
 */
4089
static int
4090
dissect_operating_channel_report(tvbuff_t *tvb, packet_info *pinfo _U_,
4091
        proto_tree *tree, unsigned offset)
4092
40
{
4093
40
    uint8_t class_count = 0, class_index = 0;
4094
40
    proto_tree *class_list = NULL, *class_tree = NULL;
4095
4096
40
    proto_tree_add_item(tree, hf_ieee1905_op_channel_report_radio_id,
4097
40
                        tvb, offset, 6, ENC_NA);
4098
40
    offset += 6;
4099
4100
40
    class_count = tvb_get_uint8(tvb, offset);
4101
40
    proto_tree_add_item(tree, hf_ieee1905_op_channel_report_classes,
4102
40
                        tvb, offset, 1, ENC_NA);
4103
40
    offset++;
4104
4105
40
    if (class_count > 0) {
4106
4107
36
        class_list = proto_tree_add_subtree(tree, tvb, offset, 2 * class_count,
4108
36
                                ett_op_channel_report_class_list, NULL,
4109
36
                                "Operating classes list");
4110
4111
2.46k
        while (class_index < class_count) {
4112
2.42k
            class_tree = proto_tree_add_subtree_format(class_list, tvb,
4113
2.42k
                                offset, 2, ett_op_channel_report_class_tree,
4114
2.42k
                                NULL, "Operating class %u", class_index);
4115
4116
2.42k
            proto_tree_add_item(class_tree, hf_ieee1905_op_channel_class,
4117
2.42k
                                tvb, offset, 1, ENC_NA);
4118
2.42k
            offset++;
4119
4120
2.42k
            proto_tree_add_item(class_tree, hf_ieee1905_op_channel_number,
4121
2.42k
                                tvb, offset, 1, ENC_NA);
4122
2.42k
            offset++;
4123
4124
2.42k
            class_index++;
4125
2.42k
        }
4126
36
    }
4127
4128
40
    proto_tree_add_item(tree, hf_ieee1905_op_channel_eirp, tvb,
4129
40
                             offset, 1, ENC_NA);
4130
40
    offset++;
4131
4132
40
    return offset;
4133
40
}
4134
4135
/*
4136
 * Dissect a Higher Layer Data TLV
4137
 */
4138
static int
4139
dissect_higher_layer_data(tvbuff_t *tvb, packet_info *pinfo _U_,
4140
        proto_tree *tree, unsigned offset, uint16_t len)
4141
7
{
4142
7
    uint8_t protocol = tvb_get_uint8(tvb, offset);
4143
7
    proto_item *pi = NULL;
4144
4145
7
    pi = proto_tree_add_item(tree, hf_ieee1905_higher_layer_protocol,
4146
7
                             tvb, offset, 1, ENC_NA);
4147
4148
7
    proto_item_append_text(pi, ", %s",
4149
7
                    val_to_str(protocol,
4150
7
                               ieee1905_higher_layer_protocol_vals,
4151
7
                               "Reserved"));
4152
7
    offset++;
4153
4154
7
    proto_tree_add_item(tree, hf_ieee1905_higher_layer_data, tvb,
4155
7
                        offset, len - 1, ENC_NA);
4156
7
    offset += len - 1;
4157
4158
7
    return offset;
4159
7
}
4160
4161
/*
4162
 * Dissect an unassociated sta link metric response TLV
4163
 */
4164
static int
4165
dissect_unassociated_sta_link_metric_response(tvbuff_t *tvb, packet_info *pinfo _U_,
4166
        proto_tree *tree, unsigned offset, uint16_t len _U_)
4167
23
{
4168
23
    uint8_t sta_count = 0, sta_index = 0;
4169
23
    proto_tree *sta_list = NULL;
4170
4171
23
    proto_tree_add_item(tree, hf_ieee1905_unassoc_sta_link_metric_op_class,
4172
23
                        tvb, offset, 1, ENC_NA);
4173
23
    offset++;
4174
4175
23
    sta_count = tvb_get_uint8(tvb, offset);
4176
23
    proto_tree_add_item(tree, hf_ieee1905_unassoc_sta_link_metric_sta_count,
4177
23
                        tvb, offset, 1, ENC_NA);
4178
23
    offset++;
4179
4180
23
    sta_list = proto_tree_add_subtree(tree, tvb, offset, sta_count * 12,
4181
23
                        ett_unassoc_sta_link_metric_list, NULL,
4182
23
                        "Unassociated STA list");
4183
4184
201
    while (sta_index < sta_count) {
4185
178
        proto_tree *sta_tree = NULL;
4186
4187
178
        sta_tree = proto_tree_add_subtree_format(sta_list, tvb,
4188
178
                                offset, 12, ett_unassoc_sta_link_metric_tree,
4189
178
                                NULL, "STA %u", sta_index);
4190
4191
178
        proto_tree_add_item(sta_tree, hf_ieee1905_unassoc_link_metric_mac_addr,
4192
178
                            tvb, offset, 6, ENC_NA);
4193
178
        offset += 6;
4194
4195
178
        proto_tree_add_item(sta_tree, hf_ieee1905_unassoc_link_metric_channel,
4196
178
                            tvb, offset, 1, ENC_NA);
4197
178
        offset++;
4198
4199
178
        proto_tree_add_item(sta_tree, hf_ieee1905_unassoc_link_metric_delta,
4200
178
                            tvb, offset, 4, ENC_BIG_ENDIAN);
4201
178
        offset += 4;
4202
4203
178
        proto_tree_add_item(sta_tree, hf_ieee1905_unassoc_link_metric_uplink_rcpi,
4204
178
                            tvb, offset, 1, ENC_NA);
4205
178
        offset++;
4206
4207
178
        sta_index++;
4208
178
    }
4209
4210
23
    return offset;
4211
23
}
4212
4213
/*
4214
 * Dissect a Steering request TLV
4215
 */
4216
static int * const steering_flags[] = {
4217
    &hf_ieee1905_steering_request_mode_flag,
4218
    &hf_ieee1905_btm_disassoc_imminent_flag,
4219
    &hf_ieee1905_btm_abridged_flag,
4220
    &hf_ieee1905_steering_req_reserved,
4221
    NULL,
4222
};
4223
4224
static int
4225
dissect_steering_request(tvbuff_t *tvb, packet_info *pinfo,
4226
        proto_tree *tree, unsigned offset, uint16_t len)
4227
31
{
4228
31
    uint8_t mode = 0;
4229
31
    uint8_t steering_count = 0;
4230
31
    proto_item *pi = NULL;
4231
31
    proto_tree *sta_list = NULL, *bssid_list = NULL;
4232
31
    uint8_t target_bssid_count = 0;
4233
31
    unsigned start_offset = offset;
4234
4235
31
    proto_tree_add_item(tree, hf_ieee1905_source_bss_bssid, tvb, offset,
4236
31
                        6, ENC_NA);
4237
31
    offset += 6;
4238
4239
31
    mode = tvb_get_uint8(tvb, offset);
4240
31
    proto_tree_add_bitmask(tree, tvb, offset,
4241
31
                           hf_ieee1905_steering_request_flags,
4242
31
                           ett_ieee1905_steering_request_flags,
4243
31
                           steering_flags, ENC_NA);
4244
31
    offset++;
4245
4246
    /* If Request Mode is 1, this field is ignored. */
4247
31
    proto_tree_add_item(tree, hf_ieee1905_steering_req_op_window,
4248
31
                        tvb, offset, 2, ENC_BIG_ENDIAN);
4249
31
    offset += 2;
4250
4251
31
    proto_tree_add_item(tree, hf_ieee1905_steering_btm_disass_timer,
4252
31
                        tvb, offset, 2, ENC_BIG_ENDIAN);
4253
31
    offset += 2;
4254
4255
31
    steering_count = tvb_get_uint8(tvb, offset);
4256
31
    pi = proto_tree_add_item(tree, hf_ieee1905_steering_req_sta_count,
4257
31
                        tvb, offset, 1, ENC_NA);
4258
31
    offset++;
4259
4260
31
    if (steering_count > 0) {
4261
25
        sta_list = proto_tree_add_subtree(tree, tvb, offset, steering_count * 6,
4262
25
                            ett_assoc_control_list, NULL,
4263
25
                            "Steering request MAC list");
4264
4265
520
        while (steering_count > 0) {
4266
495
            proto_tree_add_item(sta_list, hf_ieee1905_steering_req_sta_mac,
4267
495
                            tvb, offset, 6, ENC_NA);
4268
495
            offset += 6;
4269
4270
495
            steering_count--;
4271
495
        }
4272
4273
4274
25
    } else {
4275
6
        proto_item_append_text(pi, " (Request applies to all STA(s) in BSS)");
4276
6
    }
4277
4278
    /*
4279
     * These fields only appear if Request mode is one.
4280
     */
4281
31
    if (mode & 0x80) {
4282
16
        target_bssid_count = tvb_get_uint8(tvb, offset);
4283
16
        proto_tree_add_item(tree, hf_ieee1905_steering_req_target_bssid_count,
4284
16
                            tvb, offset, 1, ENC_NA);
4285
16
        offset++;
4286
4287
16
        bssid_list = proto_tree_add_subtree(tree, tvb, offset,
4288
16
                            target_bssid_count * 8,
4289
16
                            ett_assoc_control_list, NULL,
4290
16
                            "Target BSSID list");
4291
4292
196
        while (target_bssid_count > 0) {
4293
            /* Have to add a tree here ... */
4294
180
            proto_tree_add_item(bssid_list,
4295
180
                            hf_ieee1905_steering_req_target_bssid,
4296
180
                            tvb, offset, 6, ENC_NA);
4297
180
            offset += 6;
4298
4299
180
            proto_tree_add_item(bssid_list,
4300
180
                            hf_ieee1905_steering_req_oper_class,
4301
180
                            tvb, offset, 1, ENC_NA);
4302
180
            offset++;
4303
4304
180
            proto_tree_add_item(bssid_list,
4305
180
                            hf_ieee1905_steering_req_target_channel,
4306
180
                            tvb, offset, 1, ENC_NA);
4307
180
            offset++;
4308
4309
180
            target_bssid_count--;
4310
180
        }
4311
16
    }
4312
4313
31
    if ((offset - start_offset) < len) {
4314
9
        proto_item *ei = NULL;
4315
4316
9
        ei = proto_tree_add_item(tree, hf_ieee1905_extra_tlv_data, tvb, offset,
4317
9
                             len - (offset - start_offset), ENC_NA);
4318
9
        expert_add_info(pinfo, ei, &ei_ieee1905_extraneous_tlv_data);
4319
9
        offset = start_offset + len; /* Skip the extras. */
4320
9
    }
4321
31
    return offset;
4322
31
}
4323
4324
/*
4325
 * Dissect a Steering BTM report TLV
4326
 */
4327
static int
4328
dissect_steering_btm_report(tvbuff_t *tvb, packet_info *pinfo _U_,
4329
        proto_tree *tree, unsigned offset, uint16_t len)
4330
5
{
4331
5
    proto_tree_add_item(tree, hf_ieee1905_btm_reporter_bssid, tvb, offset,
4332
5
                        6, ENC_NA);
4333
5
    offset += 6;
4334
4335
5
    proto_tree_add_item(tree, hf_ieee1905_btm_sta_mac_addr, tvb, offset,
4336
5
                        6, ENC_NA);
4337
5
    offset += 6;
4338
4339
5
    proto_tree_add_item(tree, hf_ieee1905_btm_report_status, tvb, offset,
4340
5
                        1, ENC_NA);
4341
5
    offset++;
4342
4343
    /*
4344
     * Handle the BSSID if present. Not sure which status values indicate
4345
     * its presence. 13 is the number of bytes already dissected above.
4346
     */
4347
5
    if (len >= 13 + 6) {
4348
3
        proto_tree_add_item(tree, hf_ieee1905_btm_report_bssid, tvb, offset,
4349
3
                            len - 13, ENC_NA);
4350
3
        offset += len - 13; /* Should check for more entries ... */
4351
3
    }
4352
4353
5
    return offset;
4354
5
}
4355
4356
/*
4357
 * Dissect a Client association control request TLV
4358
 */
4359
static int
4360
dissect_client_association_control_request(tvbuff_t *tvb, packet_info *pinfo _U_,
4361
        proto_tree *tree, unsigned offset)
4362
82
{
4363
82
    unsigned sta_list_count = 0;
4364
82
    unsigned control = 0;
4365
82
    proto_tree *sta_list = NULL;
4366
82
    proto_item *pi = NULL;
4367
4368
82
    proto_tree_add_item(tree, hf_ieee1905_client_assoc_bssid, tvb, offset,
4369
82
                        6, ENC_NA);
4370
82
    offset += 6;
4371
4372
82
    control = tvb_get_uint8(tvb, offset);
4373
82
    pi = proto_tree_add_item(tree, hf_ieee1905_association_control, tvb,
4374
82
                             offset, 1, ENC_NA);
4375
82
    proto_item_append_text(pi, ", %s",
4376
82
                        val_to_str(control,
4377
82
                           ieee1905_association_control_vals,
4378
82
                           "Reserved"));
4379
82
    offset++;
4380
4381
82
    pi = proto_tree_add_item(tree, hf_ieee1905_association_control_validity,
4382
82
                        tvb, offset, 2, ENC_BIG_ENDIAN);
4383
82
    proto_item_append_text(pi, " seconds");
4384
82
    offset += 2;
4385
4386
82
    sta_list_count = tvb_get_uint8(tvb, offset);
4387
82
    proto_tree_add_item(tree, hf_ieee1905_client_assoc_sta_count, tvb,
4388
82
                        offset, 1, ENC_NA);
4389
82
    offset++;
4390
4391
82
    sta_list = proto_tree_add_subtree(tree, tvb, offset, sta_list_count * 6,
4392
82
                            ett_assoc_control_list, NULL,
4393
82
                            "Client association control MAC list");
4394
4395
666
    while (sta_list_count > 0) {
4396
584
        proto_tree_add_item(sta_list, hf_ieee1905_client_assoc_mac_addr,
4397
584
                            tvb, offset, 6, ENC_NA);
4398
584
        offset += 6;
4399
4400
584
        sta_list_count--;
4401
584
    }
4402
4403
82
    return offset;
4404
82
}
4405
4406
/*
4407
 * Dissect a Beacon Metrics Query TLV
4408
 */
4409
static int
4410
dissect_beacon_metrics_query(tvbuff_t *tvb, packet_info *pinfo _U_,
4411
        proto_tree *tree, unsigned offset, uint16_t len _U_)
4412
37
{
4413
37
    uint8_t ssid_len = 0;
4414
37
    uint8_t channel_count = 0, channel_index = 0;
4415
37
    unsigned saved_offset = 0;
4416
37
    proto_tree *channel_report_list = NULL;
4417
37
    proto_item *pi = NULL;
4418
4419
37
    proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_mac_addr,
4420
37
                        tvb, offset, 6, ENC_NA);
4421
37
    offset += 6;
4422
4423
37
    proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_op_class,
4424
37
                        tvb, offset, 1, ENC_NA);
4425
37
    offset++;
4426
4427
37
    proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_channel,
4428
37
                        tvb, offset, 1, ENC_NA);
4429
37
    offset++;
4430
4431
37
    proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_bssid,
4432
37
                        tvb, offset, 6, ENC_NA);
4433
37
    offset += 6;
4434
4435
37
    proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_detail,
4436
37
                        tvb, offset, 1, ENC_NA);
4437
37
    offset++;
4438
4439
37
    ssid_len = tvb_get_uint8(tvb, offset);
4440
37
    proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_ssid_len,
4441
37
                        tvb, offset, 1, ENC_NA);
4442
37
    offset++;
4443
4444
37
    proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_ssid,
4445
37
                        tvb, offset, ssid_len, ENC_ASCII);
4446
37
    offset += ssid_len;
4447
4448
    /*
4449
     * This field should only be non-zero if query_channel above is
4450
     * not 255 ... should check
4451
     */
4452
37
    channel_count = tvb_get_uint8(tvb, offset);
4453
37
    proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_channel_count,
4454
37
                        tvb, offset, 1, ENC_NA);
4455
37
    offset++;
4456
4457
37
    channel_report_list = proto_tree_add_subtree(tree, tvb, offset, -1,
4458
37
                            ett_beacon_metrics_query_list, &pi,
4459
37
                            "Channel report list");
4460
37
    saved_offset = offset;
4461
4462
487
    while (channel_index < channel_count) {
4463
450
        uint8_t report_len = 0, report_index = 0;
4464
450
        proto_tree *channel_report_tree = NULL;
4465
450
        proto_item *lpi = NULL;
4466
450
        unsigned start_offset = offset;
4467
450
        proto_tree *channel_list = NULL;
4468
4469
450
        channel_report_tree = proto_tree_add_subtree_format(channel_report_list, tvb,
4470
450
                                offset, -1, ett_beacon_metrics_query_tree,
4471
450
                                &lpi, "Channel report %u", channel_index);
4472
4473
450
        report_len = tvb_get_uint8(tvb, offset);
4474
450
        proto_tree_add_item(channel_report_tree,
4475
450
                            hf_ieee1905_beacon_metrics_report_len,
4476
450
                            tvb, offset, 1, ENC_NA);
4477
450
        offset++;
4478
4479
450
        proto_tree_add_item(channel_report_tree,
4480
450
                            hf_ieee1905_beacon_metrics_report_op_class,
4481
450
                            tvb, offset, 1, ENC_NA);
4482
450
        offset++;
4483
4484
450
        channel_list = proto_tree_add_subtree(channel_report_tree, tvb, offset,
4485
450
                            report_len - 1,
4486
450
                            ett_beacon_metrics_query_channel_list, NULL,
4487
450
                            "Channel report list");
4488
9.02k
        while (report_index < report_len - 1) {
4489
8.57k
            proto_tree_add_item(channel_list,
4490
8.57k
                                hf_ieee1905_beacon_metrics_report_channel_id,
4491
8.57k
                                tvb, offset, 1, ENC_NA);
4492
8.57k
            offset++;
4493
4494
8.57k
            report_index++;
4495
8.57k
        }
4496
4497
450
        proto_item_set_len(lpi, offset - start_offset);
4498
4499
450
        channel_index++;
4500
450
    }
4501
4502
37
    proto_item_set_len(pi, offset - saved_offset);
4503
4504
37
    return offset;
4505
37
}
4506
4507
/*
4508
 * Dissect a measurement report. This should go into ieee80211.c but not
4509
 * for now. We expect a new TVB that contains only one measurement report.
4510
 */
4511
static int
4512
dissect_measurement_report(tvbuff_t *tvb, packet_info *pinfo _U_,
4513
        proto_tree *tree)
4514
168
{
4515
168
    int   offset = 0;
4516
168
    unsigned rep_len = tvb_reported_length_remaining(tvb, offset);
4517
4518
168
    proto_tree_add_item(tree, hf_ieee1905_measurement_report, tvb, offset,
4519
168
                        rep_len, ENC_NA);
4520
168
    offset += rep_len;
4521
4522
168
    return offset;
4523
168
}
4524
4525
/*
4526
 * Dissect a Beacon Metrics Response TLV
4527
 */
4528
static int
4529
dissect_beacon_metrics_response(tvbuff_t *tvb, packet_info *pinfo,
4530
        proto_tree *tree, unsigned offset, uint16_t len _U_)
4531
19
{
4532
19
    uint8_t report_index = 0;
4533
19
    proto_item *pi = NULL;
4534
19
    proto_tree *report_list = NULL;
4535
19
    unsigned saved_offset = 0;
4536
19
    uint8_t meas_count = 0;
4537
4538
19
    proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_response_mac_addr,
4539
19
                        tvb, offset, 6, ENC_NA);
4540
19
    offset += 6;
4541
4542
19
    pi = proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_response_reserved,
4543
19
                        tvb, offset, 1, ENC_NA);
4544
19
    offset++;
4545
4546
19
    meas_count = tvb_get_uint8(tvb, offset);
4547
19
    pi = proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_response_meas_num,
4548
19
                        tvb, offset, 1, ENC_NA);
4549
19
    offset++;
4550
4551
    /* Now, the report(s) ... */
4552
19
    report_list = proto_tree_add_subtree(tree, tvb, offset, -1,
4553
19
                            ett_beacon_metrics_response_report_list, &pi,
4554
19
                            "Measurement report list");
4555
19
    saved_offset = offset;
4556
4557
189
    while (meas_count > 0) {
4558
170
        proto_tree *report_tree = NULL;
4559
170
        proto_item *lpi = NULL;
4560
170
        tvbuff_t *new_tvb = NULL;
4561
170
        uint8_t new_len = 0;
4562
4563
170
        report_tree = proto_tree_add_subtree_format(report_list, tvb,
4564
170
                                offset, -1,
4565
170
                                ett_beacon_metrics_response_report_tree,
4566
170
                                &lpi, "Beacon report %u", report_index);
4567
4568
        /*
4569
         * This is a measurement report, so the elt-id must be 39. The length
4570
         * is the next field. Create a new TVB?
4571
         */
4572
170
        new_len = tvb_get_uint8(tvb, offset + 1);
4573
170
        new_tvb = tvb_new_subset_length(tvb, offset + 2, new_len);
4574
4575
170
        dissect_measurement_report(new_tvb, pinfo, report_tree);
4576
4577
170
        proto_item_set_len(lpi, new_len + 2);
4578
4579
170
        offset += 2 + new_len;
4580
170
        report_index++;
4581
170
        meas_count--;
4582
170
    }
4583
4584
19
    proto_item_set_len(pi, offset - saved_offset);
4585
4586
19
    return offset;
4587
19
}
4588
4589
/*
4590
 * Dissect a Backhaul steering request TLV
4591
 */
4592
static int
4593
dissect_backhaul_steering_request(tvbuff_t *tvb, packet_info *pinfo _U_,
4594
        proto_tree *tree, unsigned offset)
4595
141
{
4596
141
    proto_tree_add_item(tree, hf_ieee1905_assoc_backhaul_station_mac, tvb,
4597
141
                        offset, 6, ENC_NA);
4598
141
    offset += 6;
4599
4600
141
    proto_tree_add_item(tree, hf_ieee1905_backhaul_target_bssid, tvb, offset,
4601
141
                        6, ENC_NA);
4602
141
    offset += 6;
4603
4604
141
    proto_tree_add_item(tree, hf_ieee1905_backhaul_operating_class, tvb,
4605
141
                        offset, 1, ENC_NA);
4606
141
    offset++;
4607
4608
141
    proto_tree_add_item(tree, hf_ieee1905_backhaul_channel_number, tvb,
4609
141
                        offset, 1, ENC_NA);
4610
141
    offset++;
4611
4612
141
    return offset;
4613
141
}
4614
4615
/*
4616
 * Dissect a Backhaul steering response TLV
4617
 */
4618
static int
4619
dissect_backhaul_steering_response(tvbuff_t *tvb, packet_info *pinfo _U_,
4620
        proto_tree *tree, unsigned offset)
4621
33
{
4622
33
    proto_item *pi = NULL;
4623
33
    uint8_t status = 0;
4624
4625
33
    proto_tree_add_item(tree, hf_ieee1905_assoc_backhaul_station_mac, tvb,
4626
33
                        offset, 6, ENC_NA);
4627
33
    offset += 6;
4628
4629
33
    proto_tree_add_item(tree, hf_ieee1905_backhaul_target_bssid, tvb, offset,
4630
33
                        6, ENC_NA);
4631
33
    offset += 6;
4632
4633
33
    status = tvb_get_uint8(tvb, offset);
4634
33
    pi = proto_tree_add_item(tree, hf_ieee1905_backhaul_steering_status,
4635
33
                        tvb, offset, 1, ENC_NA);
4636
33
    proto_item_append_text(pi, ", %s",
4637
33
                        val_to_str(status,
4638
33
                                   ieee1905_backhaul_status_vals,
4639
33
                                   "Reserved"));
4640
33
    offset++;
4641
4642
33
    return offset;
4643
33
}
4644
4645
/*
4646
 * Dissect a client info TLV
4647
 */
4648
static int
4649
dissect_client_info(tvbuff_t *tvb, packet_info *pinfo _U_,
4650
        proto_tree *tree, unsigned offset)
4651
46
{
4652
46
    proto_tree_add_item(tree, hf_ieee1905_client_bssid, tvb, offset,
4653
46
                        6, ENC_NA);
4654
46
    offset += 6;
4655
4656
46
    proto_tree_add_item(tree, hf_ieee1905_client_mac_addr, tvb, offset,
4657
46
                        6, ENC_NA);
4658
46
    offset += 6;
4659
46
    return offset;
4660
46
}
4661
4662
/*
4663
 * Dissect a client capability report TLV
4664
 */
4665
static int
4666
dissect_80211_information_elements(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
4667
1
{
4668
1
    int offset_end = offset + len;
4669
2
    while (offset < offset_end) {
4670
1
        int tlen = add_tagged_field(pinfo, tree, tvb, offset, 0, NULL, 0, NULL);
4671
1
        if (tlen == 0) {
4672
0
            break;
4673
0
        }
4674
1
        offset += tlen;
4675
1
    }
4676
1
    return offset;
4677
1
}
4678
4679
static int
4680
dissect_client_capability_report(tvbuff_t *tvb, packet_info *pinfo _U_,
4681
        proto_tree *tree, unsigned offset, uint16_t len)
4682
5
{
4683
5
    uint8_t result = tvb_get_uint8(tvb, offset);
4684
5
    proto_item *pi = NULL;
4685
4686
5
    pi = proto_tree_add_item(tree, hf_ieee1905_client_capability_result, tvb,
4687
5
                        offset, 1, ENC_NA);
4688
5
    proto_item_append_text(pi, ", %s",
4689
5
                        val_to_str(result,
4690
5
                                   ieee1905_client_capability_result_vals,
4691
5
                                   "Reserved"));
4692
5
    offset++;
4693
4694
5
    if (len > 1) { /* Must be the frame body of most recent assoc req */
4695
5
        len--;
4696
5
        proto_tree_add_item(tree, hf_ieee1905_client_capability_frame, tvb,
4697
5
                            offset, len, ENC_NA);
4698
4699
        /* Attempt to decode Information Elements from the Assoc Request.
4700
         *
4701
         * According to the EM standard, the frame can either be an Assoc or a Reassoc Request.
4702
         * The data starts at the "Fixed Parameters", which have length 4 for an Assoc Request and
4703
         * 10 for a Reassoc Request.
4704
         *
4705
         * => The problem is that you don't know which of the 2 it is and where the IE start
4706
         * => Assume the most occuring case and thus useful case (Assoc Request)
4707
         */
4708
5
        if (len >= ASSOC_REQ_BODY_FIXED_SIZE) {
4709
1
            proto_tree *ie_tree;
4710
1
            proto_item *ie;
4711
1
            unsigned ie_offset = offset + ASSOC_REQ_BODY_FIXED_SIZE;
4712
1
            unsigned ie_len = len - ASSOC_REQ_BODY_FIXED_SIZE;
4713
4714
1
            ie_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
4715
1
                                                    ett_client_capability_ies,
4716
1
                                                    &ie, "Information Elements (%d bytes)", ie_len);
4717
4718
1
            dissect_80211_information_elements(tvb, pinfo, ie_tree, ie_offset, ie_len);
4719
1
        }
4720
4721
5
        offset += len;
4722
5
    }
4723
4724
5
    return offset;
4725
5
}
4726
4727
/*
4728
 * Dissect a client capability report TLV
4729
 */
4730
static int
4731
dissect_client_association_event(tvbuff_t *tvb, packet_info *pinfo _U_,
4732
        proto_tree *tree, unsigned offset)
4733
119
{
4734
119
    static int * const association_flags[] = {
4735
119
        &hf_ieee1905_association_flag,
4736
119
        NULL,
4737
119
    };
4738
4739
119
    proto_tree_add_item(tree, hf_ieee1905_association_client_mac_addr,
4740
119
                        tvb, offset, 6, ENC_NA);
4741
119
    offset += 6;
4742
4743
119
    proto_tree_add_item(tree, hf_ieee1905_association_agent_bssid,
4744
119
                        tvb, offset, 6, ENC_NA);
4745
119
    offset += 6;
4746
4747
119
    proto_tree_add_bitmask(tree, tvb, offset,
4748
119
                           hf_ieee1905_association_event_flags,
4749
119
                           ett_ieee1905_association_event_flags,
4750
119
                           association_flags, ENC_NA);
4751
119
    offset++;
4752
4753
119
    return offset;
4754
119
}
4755
4756
/*
4757
 * Dissect an AP Metrics Query TLV
4758
 */
4759
static int
4760
dissect_ap_metric_query(tvbuff_t *tvb, packet_info *pinfo _U_,
4761
        proto_tree *tree, unsigned offset, uint16_t len)
4762
11
{
4763
11
    proto_tree *bssid_list = NULL;
4764
11
    proto_item *pi = NULL;
4765
11
    unsigned saved_offset;
4766
11
    int remaining = len;
4767
4768
11
    proto_tree_add_item(tree, hf_ieee1905_ap_metric_query_bssid_cnt, tvb,
4769
11
                        offset, 1, ENC_NA);
4770
11
    offset++;
4771
4772
11
    bssid_list = proto_tree_add_subtree(tree, tvb, offset, -1,
4773
11
                            ett_ap_metric_query_bssid_list, &pi,
4774
11
                            "AP BSSID list");
4775
11
    saved_offset = offset;
4776
4777
265
    while (remaining >= 6) {
4778
254
        proto_tree_add_item(bssid_list, hf_ieee1905_ap_metric_query_bssid,
4779
254
                            tvb, offset, 6, ENC_NA);
4780
254
        offset += 6;
4781
254
        remaining -= 6;
4782
254
    }
4783
4784
11
    proto_item_set_len(pi, offset - saved_offset);
4785
4786
11
    return offset;
4787
11
}
4788
4789
/*
4790
 * Dissect an STA MAC address type TLV
4791
 */
4792
#define INCLUDE_ESTIMATED_SP_AC_EQ_BE 0x80
4793
128
#define INCLUDE_ESTIMATED_SP_AC_EQ_BK 0x40
4794
128
#define INCLUDE_ESTIMATED_SP_AC_EQ_VO 0x20
4795
128
#define INCLUDE_ESTIMATED_SP_AC_EQ_VI 0x10
4796
4797
static int
4798
dissect_ap_metrics(tvbuff_t *tvb, packet_info *pinfo _U_,
4799
        proto_tree *tree, unsigned offset, uint16_t len _U_)
4800
128
{
4801
128
    uint8_t presence_flags = 0;
4802
128
    static int * const flags[] = {
4803
128
        &hf_ieee1905_include_estimated_spi_ac_eq_be,
4804
128
        &hf_ieee1905_include_estimated_spi_ac_eq_bk,
4805
128
        &hf_ieee1905_include_estimated_spi_ac_eq_vo,
4806
128
        &hf_ieee1905_include_estimated_spi_ac_eq_vi,
4807
128
        NULL
4808
128
    };
4809
4810
128
    proto_tree_add_item(tree, hf_ieee1905_ap_metrics_agent_bssid,
4811
128
                        tvb, offset, 6, ENC_NA);
4812
128
    offset += 6;
4813
4814
128
    proto_tree_add_item(tree, hf_ieee1905_ap_metrics_channel_utilization,
4815
128
                        tvb, offset, 1, ENC_NA);
4816
128
    offset++;
4817
4818
128
    proto_tree_add_item(tree, hf_ieee1905_ap_metrics_sta_count,
4819
128
                        tvb, offset, 2, ENC_BIG_ENDIAN);
4820
128
    offset += 2;
4821
4822
128
    presence_flags = tvb_get_uint8(tvb, offset);
4823
128
    proto_tree_add_bitmask_with_flags(tree, tvb, offset,
4824
128
                        hf_ieee1905_ap_metrics_flags,
4825
128
                        ett_ieee1905_ap_metrics_flags, flags, ENC_NA,
4826
128
                        BMT_NO_APPEND);
4827
128
    offset++;
4828
4829
    /*
4830
     * This field should always be present, and the associated flag bit
4831
     * should be 1 (TODO:check that).
4832
     */
4833
128
    proto_tree_add_item(tree, hf_ieee1905_ap_metrics_service_params_be,
4834
128
                        tvb, offset, 3, ENC_NA);
4835
128
    offset += 3;
4836
4837
    /*
4838
     * We should indicate an error if the field is too small. Also,
4839
     * need to know the format of these fields.
4840
     */
4841
128
    if (presence_flags & INCLUDE_ESTIMATED_SP_AC_EQ_BK) {
4842
40
        proto_tree_add_item(tree, hf_ieee1905_ap_metrics_service_params_bk,
4843
40
                        tvb, offset, 3, ENC_NA);
4844
40
        offset += 3;
4845
40
    }
4846
4847
128
    if (presence_flags & INCLUDE_ESTIMATED_SP_AC_EQ_VO) {
4848
43
        proto_tree_add_item(tree, hf_ieee1905_ap_metrics_service_params_vo,
4849
43
                        tvb, offset, 3, ENC_NA);
4850
43
        offset += 3;
4851
43
    }
4852
4853
128
    if (presence_flags & INCLUDE_ESTIMATED_SP_AC_EQ_VI) {
4854
68
        proto_tree_add_item(tree, hf_ieee1905_ap_metrics_service_params_vi,
4855
68
                        tvb, offset, 3, ENC_NA);
4856
68
        offset += 3;
4857
68
    }
4858
4859
128
    return offset;
4860
128
}
4861
4862
/*
4863
 * Dissect an STA MAC address type TLV
4864
 */
4865
static int
4866
dissect_sta_mac_address_type(tvbuff_t *tvb, packet_info *pinfo _U_,
4867
        proto_tree *tree, unsigned offset, uint16_t len _U_)
4868
65
{
4869
65
    proto_tree_add_item(tree, hf_ieee1905_sta_mac_address_type, tvb,
4870
65
                        offset, 6, ENC_NA);
4871
65
    offset += 6;
4872
4873
65
    return offset;
4874
65
}
4875
4876
/*
4877
 * Dissect an Associated STA Link Metrics TLV
4878
 */
4879
static int
4880
dissect_associated_sta_link_metrics(tvbuff_t *tvb, packet_info *pinfo _U_,
4881
        proto_tree *tree, unsigned offset, uint16_t len)
4882
19
{
4883
19
    proto_tree *bss_list = NULL;
4884
19
    proto_tree *bss_tree = NULL;
4885
19
    proto_item *pi = NULL;
4886
19
    int remaining;
4887
19
    uint8_t bss_list_index = 0;
4888
19
    unsigned start_offset = 0;
4889
4890
19
    proto_tree_add_item(tree, hf_ieee1905_assoc_sta_mac_addr, tvb, offset,
4891
19
                        6, ENC_NA);
4892
19
    offset += 6;
4893
19
    len -= 6;
4894
4895
19
    proto_tree_add_item(tree, hf_ieee1905_assoc_sta_bssid_count, tvb, offset,
4896
19
                        1, ENC_NA);
4897
19
    offset++;
4898
19
    len--;
4899
4900
19
    bss_list = proto_tree_add_subtree(tree, tvb, offset, -1,
4901
19
                            ett_sta_list_metrics_bss_list, NULL,
4902
19
                            "BSS list");
4903
4904
19
    remaining = len;
4905
166
    while (remaining >= 19) {
4906
147
        bss_tree = proto_tree_add_subtree_format(bss_list, tvb,
4907
147
                                offset, 18, ett_sta_list_metrics_bss_tree,
4908
147
                                NULL, "BSS %u", bss_list_index);
4909
4910
147
        proto_tree_add_item(bss_tree, hf_ieee1905_assoc_sta_link_metrics_bssid,
4911
147
                            tvb, offset, 6, ENC_NA);
4912
147
        offset += 6;
4913
4914
147
        proto_tree_add_item(bss_tree, hf_ieee1905_assoc_sta_link_metrics_time_delta,
4915
147
                            tvb, offset, 4, ENC_BIG_ENDIAN);
4916
147
        offset += 4;
4917
4918
147
        proto_tree_add_item(bss_tree, hf_ieee1905_assoc_sta_link_metrics_dwn_rate,
4919
147
                            tvb, offset, 4, ENC_BIG_ENDIAN);
4920
147
        offset += 4;
4921
4922
147
        proto_tree_add_item(bss_tree, hf_ieee1905_assoc_sta_link_metrics_up_rate,
4923
147
                            tvb, offset, 4, ENC_BIG_ENDIAN);
4924
147
        offset += 4;
4925
4926
147
        proto_tree_add_item(bss_tree, hf_ieee1905_assoc_sta_link_metrics_rcpi,
4927
147
                            tvb, offset, 1, ENC_NA);
4928
147
        offset++;
4929
4930
147
        bss_list_index++;
4931
147
        remaining -= 19;
4932
147
    }
4933
4934
19
    proto_item_set_len(pi, offset - start_offset);
4935
4936
19
    if (remaining > 0) {
4937
19
        offset += remaining;
4938
19
    }
4939
4940
19
    return offset;
4941
19
}
4942
4943
/*
4944
 * Dissect an Associated Wi-Fi 6 STA Status Report TLV
4945
 */
4946
static int
4947
dissect_associated_wf6_sta_status_report(tvbuff_t *tvb, packet_info *pinfo _U_,
4948
        proto_tree *tree, unsigned offset, uint16_t len)
4949
18
{
4950
18
    proto_tree *tid_list = NULL;
4951
18
    proto_tree *tid_tree = NULL;
4952
18
    proto_item *pi = NULL;
4953
18
    int remaining;
4954
18
    uint8_t tid_list_index = 0;
4955
18
    unsigned start_offset = 0;
4956
4957
18
    proto_tree_add_item(tree, hf_ieee1905_assoc_wf6_sta_mac_addr, tvb, offset,
4958
18
                        6, ENC_NA);
4959
18
    offset += 6;
4960
18
    len -= 6;       //BUG: Introduce remaining variable
4961
4962
18
    proto_tree_add_item(tree, hf_ieee1905_assoc_wf6_sta_tid_count, tvb, offset,
4963
18
                        1, ENC_NA);
4964
18
    offset++;
4965
18
    len--;
4966
4967
18
    tid_list = proto_tree_add_subtree(tree, tvb, offset, -1,
4968
18
                            ett_sta_wf6_status_report_tid_list, NULL,
4969
18
                            "TID list");
4970
4971
18
    remaining = len;
4972
1.00k
    while (remaining >= 2) {
4973
985
        uint8_t tid = tvb_get_uint8(tvb, offset);
4974
4975
985
        tid_tree = proto_tree_add_subtree_format(tid_list, tvb,
4976
985
                                offset, 2, ett_sta_wf6_status_report_tid_tree,
4977
985
                                NULL, "TID %u (%0x)", tid_list_index, tid);
4978
4979
985
        proto_tree_add_item(tid_tree, hf_ieee1905_assoc_wf6_sta_tid,
4980
985
                            tvb, offset, 1, ENC_NA);
4981
985
        offset += 1;
4982
4983
985
        proto_tree_add_item(tid_tree, hf_ieee1905_assoc_wf6_sta_queue_size,
4984
985
                            tvb, offset, 1, ENC_NA);
4985
985
        offset += 1;
4986
4987
985
        tid_list_index++;
4988
985
        remaining -= 2;
4989
985
    }
4990
4991
18
    proto_item_set_len(pi, offset - start_offset);
4992
4993
18
    if (remaining > 0) {
4994
2
        offset += remaining;
4995
2
    }
4996
4997
18
    return offset;
4998
18
}
4999
5000
/*
5001
 * Dissect an Associated STA extended link metrics TLV
5002
 */
5003
static int
5004
dissect_associated_sta_extended_link_metrics(tvbuff_t *tvb,
5005
        packet_info *pinfo _U_, proto_tree *tree, unsigned offset, uint16_t len _U_)
5006
18
{
5007
18
    uint8_t bssid_count = 0;
5008
5009
18
    proto_tree_add_item(tree, hf_ieee1905_assoc_sta_ext_link_metrics_mac_addr,
5010
18
                        tvb, offset, 6, ENC_NA);
5011
18
    offset += 6;
5012
5013
18
    bssid_count = tvb_get_uint8(tvb, offset);
5014
18
    proto_tree_add_item(tree, hf_ieee1905_assoc_sta_ext_link_metrics_count, tvb,
5015
18
                        offset, 1, ENC_NA);
5016
18
    offset += 1;
5017
5018
18
    if (bssid_count > 0) {
5019
13
        proto_tree *bss_list = NULL, *bss_tree = NULL;
5020
13
        proto_item *bli = NULL;
5021
13
        unsigned saved_offset = offset;
5022
13
        uint8_t bssid_id = 0;
5023
5024
13
        bss_list = proto_tree_add_subtree(tree, tvb, offset, -1,
5025
13
                                          ett_sta_extended_link_metrics_list,
5026
13
                                          &bli, "BSS List");
5027
101
        while (bssid_id < bssid_count) {
5028
88
            bss_tree = proto_tree_add_subtree_format(bss_list, tvb, offset, 22,
5029
88
                                              ett_sta_extended_link_metrics_tree,
5030
88
                                              NULL, "BSS #%u", bssid_id);
5031
5032
88
            proto_tree_add_item(bss_tree,
5033
88
                                hf_ieee1905_assoc_sta_extended_metrics_bssid,
5034
88
                                tvb, offset, 6, ENC_NA);
5035
88
            offset += 6;
5036
5037
88
            proto_tree_add_item(bss_tree,
5038
88
                                hf_ieee1905_assoc_sta_extended_metrics_lddlr,
5039
88
                                tvb, offset, 4, ENC_BIG_ENDIAN);
5040
88
            offset += 4;
5041
5042
88
            proto_tree_add_item(bss_tree,
5043
88
                                hf_ieee1905_assoc_sta_extended_metrics_ldulr,
5044
88
                                tvb, offset, 4, ENC_BIG_ENDIAN);
5045
88
            offset += 4;
5046
5047
88
            proto_tree_add_item(bss_tree,
5048
88
                                hf_ieee1905_assoc_sta_extended_metrics_ur,
5049
88
                                tvb, offset, 4, ENC_BIG_ENDIAN);
5050
88
            offset += 4;
5051
5052
88
            proto_tree_add_item(bss_tree,
5053
88
                                hf_ieee1905_assoc_sta_extended_metrics_tr,
5054
88
                                tvb, offset, 4, ENC_BIG_ENDIAN);
5055
88
            offset += 4;
5056
5057
88
            bssid_id++;
5058
88
        }
5059
13
        proto_item_set_len(bli, offset - saved_offset);
5060
13
    }
5061
5062
18
    return offset;
5063
18
}
5064
5065
/*
5066
 * Dissect an Unassociated STA Link Metrics Query TLV
5067
 */
5068
static int
5069
dissect_unassociated_sta_link_metrics_query(tvbuff_t *tvb,
5070
        packet_info *pinfo _U_, proto_tree *tree, unsigned offset, uint16_t len _U_)
5071
142
{
5072
142
    uint8_t channel_count = 0;
5073
142
    uint8_t mac_count = 0;
5074
142
    proto_tree *channel_list = NULL;
5075
142
    proto_tree *sta_mac_list = NULL;
5076
142
    proto_item *pi = NULL, *ci = NULL;
5077
142
    unsigned saved_offset = 0, chan_saved_offset = 0;
5078
5079
142
    proto_tree_add_item(tree, hf_ieee1905_unassoc_sta_link_metrics_class,
5080
142
                        tvb, offset, 1, ENC_NA);
5081
142
    offset++;
5082
5083
142
    channel_count = tvb_get_uint8(tvb, offset);
5084
142
    proto_tree_add_item(tree, hf_ieee1905_unassoc_sta_link_channel_count,
5085
142
                        tvb, offset, 1, ENC_NA);
5086
142
    offset++;
5087
5088
142
    if (channel_count > 0) {
5089
32
        chan_saved_offset = offset;
5090
5091
32
        channel_list = proto_tree_add_subtree(tree, tvb, offset, -1,
5092
32
                            ett_sta_link_metrics_query_channel_list, &ci,
5093
32
                            "Channel list");
5094
5095
286
        while (channel_count > 0) {
5096
254
            proto_tree_add_item(channel_list,
5097
254
                            hf_ieee1905_unassoc_metrics_channel,
5098
254
                            tvb, offset, 1, ENC_NA);
5099
254
            offset++;
5100
254
            channel_count--;
5101
5102
254
            mac_count = tvb_get_uint8(tvb, offset);
5103
5104
254
            proto_tree_add_item(channel_list,
5105
254
                                hf_ieee1905_unassoc_metrics_mac_count,
5106
254
                                tvb, offset, 1, ENC_NA);
5107
254
            offset += 1;
5108
5109
254
            saved_offset = offset;
5110
254
            sta_mac_list = proto_tree_add_subtree(channel_list, tvb, offset, -1,
5111
254
                                    ett_sta_link_link_mac_addr_list, &pi,
5112
254
                                    "MAC address list");
5113
5114
1.07k
            while (mac_count) {
5115
817
                proto_tree_add_item(sta_mac_list,
5116
817
                            hf_ieee1905_unassoc_link_metrics_query_mac,
5117
817
                            tvb, offset, 6, ENC_NA);
5118
817
                offset += 6;
5119
817
                mac_count--;
5120
817
            }
5121
5122
254
            proto_item_set_len(pi, offset - saved_offset);
5123
254
        }
5124
32
        proto_item_set_len(ci, offset - chan_saved_offset);
5125
32
    }
5126
5127
142
    return offset;
5128
142
}
5129
5130
/*
5131
 * Dissect a Device Information Type TLV
5132
 */
5133
static int
5134
dissect_device_information_type(tvbuff_t *tvb, packet_info *pinfo,
5135
        proto_tree *tree, unsigned offset, uint16_t len _U_)
5136
94
{
5137
94
    proto_item *pi = NULL;
5138
94
    proto_tree *sub_tree = NULL;
5139
94
    uint8_t count;
5140
94
    unsigned start_offset;
5141
5142
94
    proto_tree_add_item(tree, hf_ieee1905_al_mac_address_type, tvb,
5143
94
                        offset, 6, ENC_NA);
5144
94
    offset += 6;
5145
5146
94
    count = tvb_get_uint8(tvb, offset);
5147
94
    proto_tree_add_item(tree, hf_ieee1905_local_interface_count, tvb,
5148
94
                        offset, 1, ENC_NA);
5149
94
    offset++;
5150
94
    start_offset = offset;
5151
5152
94
    sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
5153
94
                            ett_device_information_list,
5154
94
                            &pi, "Local interface list");
5155
5156
94
    offset = dissect_local_interface_list(tvb, pinfo, sub_tree,
5157
94
                            offset, count);
5158
5159
94
    proto_item_set_len(pi, offset - start_offset);
5160
5161
94
    return offset;
5162
94
}
5163
5164
/*
5165
 * Dissect a Transmitter Link Metric TLV
5166
 */
5167
static int
5168
dissect_transmitter_link_metric(tvbuff_t *tvb, packet_info *pinfo,
5169
        proto_tree *tree, unsigned offset, uint16_t len)
5170
294
{
5171
294
    int remaining;
5172
5173
294
    proto_tree_add_item(tree, hf_ieee1905_responder_al_mac_addr, tvb,
5174
294
                        offset, 6, ENC_NA);
5175
294
    offset += 6;
5176
5177
294
    proto_tree_add_item(tree, hf_ieee1905_neighbor_al_mac_addr, tvb,
5178
294
                        offset, 6, ENC_NA);
5179
294
    offset += 6;
5180
5181
294
    remaining = len - 12;
5182
1.03k
    while (remaining > 0) {
5183
736
        proto_tree_add_item(tree, hf_ieee1905_receiving_al_mac_addr,
5184
736
                            tvb, offset, 6, ENC_NA);
5185
736
        offset += 6;
5186
5187
736
        proto_tree_add_item(tree, hf_ieee1905_neighbor_al_mac_addr,
5188
736
                            tvb, offset, 6, ENC_NA);
5189
736
        offset += 6;
5190
5191
736
        offset = dissect_media_type(tvb, pinfo, tree, offset);
5192
5193
736
        proto_tree_add_item(tree, hf_ieee1905_bridge_flag, tvb, offset,
5194
736
                            1, ENC_NA);
5195
736
        offset += 1;
5196
5197
736
        proto_tree_add_item(tree, hf_ieee1905_packet_errors, tvb, offset,
5198
736
                            4, ENC_BIG_ENDIAN);
5199
736
        offset += 4;
5200
5201
736
        proto_tree_add_item(tree, hf_ieee1905_transmitted_packets, tvb,
5202
736
                            offset, 4, ENC_BIG_ENDIAN);
5203
736
        offset += 4;
5204
5205
736
        proto_tree_add_item(tree, hf_ieee1905_mac_throughput_capacity, tvb,
5206
736
                            offset, 2, ENC_BIG_ENDIAN);
5207
736
        offset += 2;
5208
5209
736
        proto_tree_add_item(tree, hf_ieee1905_link_availability, tvb,
5210
736
                            offset, 2, ENC_BIG_ENDIAN);
5211
736
        offset += 2;
5212
5213
736
        proto_tree_add_item(tree, hf_ieee1905_phy_rate, tvb, offset,
5214
736
                            2, ENC_BIG_ENDIAN);
5215
736
        offset += 2;
5216
5217
736
        remaining -= 29;
5218
736
    }
5219
5220
294
    return offset;
5221
294
}
5222
5223
/*
5224
 * Dissect a Receiver Link Metric TLV
5225
 */
5226
static int
5227
dissect_receiver_link_metric(tvbuff_t *tvb, packet_info *pinfo,
5228
        proto_tree *tree, unsigned offset, uint16_t len)
5229
127
{
5230
127
    int remaining;
5231
5232
127
    proto_tree_add_item(tree, hf_ieee1905_responder_al_mac_addr, tvb,
5233
127
                        offset, 6, ENC_NA);
5234
127
    offset += 6;
5235
127
    proto_tree_add_item(tree, hf_ieee1905_neighbor_al_mac_addr, tvb,
5236
127
                        offset, 6, ENC_NA);
5237
127
    offset += 6;
5238
5239
127
    remaining = len - 12;
5240
974
    while (remaining > 0) {
5241
847
        proto_tree_add_item(tree, hf_ieee1905_receiving_al_mac_addr,
5242
847
                            tvb, offset, 6, ENC_NA);
5243
847
        offset += 6;
5244
5245
847
        proto_tree_add_item(tree, hf_ieee1905_neighbor_al_mac_addr,
5246
847
                            tvb, offset, 6, ENC_NA);
5247
847
        offset += 6;
5248
5249
847
        offset = dissect_media_type(tvb, pinfo, tree, offset);
5250
5251
847
        proto_tree_add_item(tree, hf_ieee1905_packet_errors, tvb, offset,
5252
847
                            4, ENC_BIG_ENDIAN);
5253
847
        offset += 4;
5254
5255
847
        proto_tree_add_item(tree, hf_ieee1905_packets_received, tvb,
5256
847
                            offset, 4, ENC_BIG_ENDIAN);
5257
847
        offset += 4;
5258
5259
847
        proto_tree_add_item(tree, hf_ieee1905_rssi, tvb, offset, 1, ENC_NA);
5260
847
        offset++;
5261
5262
847
        remaining -= 23;
5263
847
    }
5264
127
    return offset;
5265
127
}
5266
5267
/*
5268
 * Dissect an Associated STA Traffic Stats TLV
5269
 */
5270
static int
5271
dissect_associated_sta_traffic_stats(tvbuff_t *tvb,
5272
        packet_info *pinfo _U_, proto_tree *tree, unsigned offset, uint16_t len _U_)
5273
48
{
5274
48
    proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_mac_addr, tvb,
5275
48
                        offset, 6, ENC_NA);
5276
48
    offset += 6;
5277
5278
48
    proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_bytes_sent,
5279
48
                        tvb, offset, 4, ENC_BIG_ENDIAN);
5280
48
    offset += 4;
5281
5282
48
    proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_bytes_rcvd,
5283
48
                        tvb, offset, 4, ENC_BIG_ENDIAN);
5284
48
    offset += 4;
5285
5286
48
    proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_packets_sent,
5287
48
                        tvb, offset, 4, ENC_BIG_ENDIAN);
5288
48
    offset += 4;
5289
5290
48
    proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_packets_rcvd,
5291
48
                        tvb, offset, 4, ENC_BIG_ENDIAN);
5292
48
    offset += 4;
5293
5294
48
    proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_tx_pkt_errs,
5295
48
                        tvb, offset, 4, ENC_BIG_ENDIAN);
5296
48
    offset += 4;
5297
5298
48
    proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_rx_pkt_errs,
5299
48
                        tvb, offset, 4, ENC_BIG_ENDIAN);
5300
48
    offset += 4;
5301
5302
48
    proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_retrans_count,
5303
48
                        tvb, offset, 4, ENC_BIG_ENDIAN);
5304
48
    offset += 4;
5305
5306
48
    return offset;
5307
48
}
5308
5309
/*
5310
 * Dissect an Error code TLV
5311
 */
5312
static int
5313
dissect_error_code(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
5314
        unsigned offset, uint16_t len _U_)
5315
111
{
5316
111
    proto_item *pi = NULL;
5317
111
    uint8_t error_code = tvb_get_uint8(tvb, offset);
5318
5319
111
    pi = proto_tree_add_item(tree, hf_ieee1905_error_code_value, tvb,
5320
111
                        offset, 1, ENC_NA);
5321
111
    proto_item_append_text(pi, ", %s",
5322
111
                        val_to_str(error_code,
5323
111
                                   ieee1905_error_code_vals,
5324
111
                                   "Reserved"));
5325
111
    offset++;
5326
5327
111
    proto_tree_add_item(tree, hf_ieee1905_error_code_mac_addr, tvb, offset,
5328
111
                        6, ENC_NA);
5329
111
    offset += 6;
5330
5331
111
    return offset;
5332
111
}
5333
5334
/*
5335
 * Dissect a Channel Scan Reporting Policy TLV
5336
 */
5337
static int * const  channel_scan_rep_policy_headers[] = {
5338
    &hf_ieee1905_channel_scan_pol_report,
5339
    &hf_ieee1905_channel_scan_pol_reserved,
5340
    NULL
5341
};
5342
5343
static const true_false_string report_independent_scans_tfs = {
5344
    "Report Independent Channel Scans",
5345
    "Do not report Independent Channel Scans unless requested"
5346
};
5347
5348
static int
5349
dissect_channel_scan_reporting_policy(tvbuff_t *tvb, packet_info *pinfo _U_,
5350
        proto_tree *tree, unsigned offset, uint16_t len _U_)
5351
164
{
5352
164
    proto_tree_add_bitmask(tree, tvb, offset,
5353
164
                           hf_ieee1905_channel_scan_rep_policy,
5354
164
                           ett_channel_scan_rep_policy,
5355
164
                           channel_scan_rep_policy_headers, ENC_NA);
5356
164
    offset += 1;
5357
5358
164
    return offset;
5359
164
}
5360
5361
/*
5362
 * Dissect a Channel Scan Capabilities TLV
5363
 */
5364
static int * const channel_scan_capa_flags_headers[] = {
5365
    &hf_ieee1905_channel_scan_capa_flags_on_boot_only,
5366
    &hf_ieee1905_channel_scan_capa_flags_scan_impact,
5367
    &hf_ieee1905_channel_scan_capa_flags_reserved,
5368
    NULL
5369
};
5370
5371
static const true_false_string channel_scan_capa_flags_on_boot_only_tfs = {
5372
    "Agent can only perform scan on boot",
5373
    "Agent can perform requested scans"
5374
};
5375
5376
static const value_string channel_scan_capa_flags_impact_vals[] = {
5377
    { 0, "No impact" },
5378
    { 1, "Reduced number of spacial streams" },
5379
    { 2, "Time slicing impairment" },
5380
    { 3, "Radio unavailable for >= 2 seconds" },
5381
    { 0, NULL }
5382
};
5383
5384
static int
5385
dissect_channel_scan_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
5386
        proto_tree *tree, unsigned offset, uint16_t len _U_)
5387
52
{
5388
52
    proto_tree *radio_list = NULL;
5389
52
    proto_item *rli = NULL;
5390
52
    uint8_t radio_count = 0, radio_num = 0;
5391
52
    unsigned radio_list_start = 0;
5392
5393
52
    radio_count = tvb_get_uint8(tvb, offset);
5394
52
    proto_tree_add_item(tree, hf_ieee1905_channel_scan_capabilities_radio_num,
5395
52
                        tvb, offset, 1, ENC_NA);
5396
52
    offset += 1;
5397
5398
52
    radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
5399
52
                                        ett_channel_scan_capa_radio_list,
5400
52
                                        &rli, "Radio List");
5401
52
    radio_list_start = offset;
5402
5403
255
    while (radio_num < radio_count) {
5404
203
        proto_tree *radio_tree = NULL;
5405
203
        proto_item *ri = NULL;
5406
203
        proto_tree *oper_class_list = NULL;
5407
203
        proto_item *cli = NULL;
5408
203
        unsigned start_offset = offset;
5409
203
        uint8_t oper_class_count = 0, oper_class_num = 0;
5410
203
        unsigned class_start_offset = 0;
5411
5412
203
        radio_tree = proto_tree_add_subtree_format(radio_list, tvb, offset,
5413
203
                                        -1, ett_channel_scan_capa_radio,
5414
203
                                        &ri, "Radio %u", radio_num);
5415
5416
203
        proto_tree_add_item(radio_tree, hf_ieee1905_channel_scan_capa_radio_id,
5417
203
                            tvb, offset, 6, ENC_NA);
5418
203
        offset += 6;
5419
5420
203
        proto_tree_add_bitmask(radio_tree, tvb, offset,
5421
203
                               hf_ieee1905_channel_scan_capa_flags,
5422
203
                               ett_channel_scan_capa_flags,
5423
203
                               channel_scan_capa_flags_headers, ENC_NA);
5424
203
        offset += 1;
5425
5426
203
        proto_tree_add_item(radio_tree,
5427
203
                            hf_ieee1905_channel_scan_capa_min_scan_interval,
5428
203
                            tvb, offset, 4, ENC_BIG_ENDIAN);
5429
203
        offset += 4;
5430
5431
203
        oper_class_count = tvb_get_uint8(tvb, offset);
5432
203
        proto_tree_add_item(radio_tree, hf_ieee1905_channel_scan_capa_class_num,
5433
203
                            tvb, offset, 1, ENC_NA);
5434
203
        offset += 1;
5435
5436
203
        oper_class_list = proto_tree_add_subtree(radio_tree, tvb, offset, -1,
5437
203
                                             ett_channel_scan_capa_class_list,
5438
203
                                             &cli, "Operating Class List");
5439
5440
203
        class_start_offset = offset;
5441
744
        while (oper_class_num < oper_class_count) {
5442
541
            uint8_t chan_num = 0;
5443
541
            proto_tree *oper_class = NULL;
5444
541
            proto_item *ci = NULL;
5445
541
            int oper_class_start_offset = offset;
5446
5447
541
            oper_class = proto_tree_add_subtree_format(oper_class_list, tvb,
5448
541
                                                offset, -1,
5449
541
                                                ett_channel_scan_capa_class,
5450
541
                                                &ci, "Operating Class %d",
5451
541
                                                oper_class_num);
5452
5453
5454
541
            proto_tree_add_item(oper_class,
5455
541
                                hf_ieee1905_channel_scan_capa_oper_class, tvb,
5456
541
                                offset, 1, ENC_NA);
5457
541
            offset += 1;
5458
5459
541
            chan_num = tvb_get_uint8(tvb, offset);
5460
541
            proto_tree_add_item(oper_class,
5461
541
                                hf_ieee1905_channel_scan_capa_oper_class_chan_cnt,
5462
541
                                tvb, offset, 1, ENC_NA);
5463
541
            offset += 1;
5464
5465
541
            if (chan_num > 0) {
5466
                /* Add them */
5467
160
                proto_tree *channels = NULL;
5468
5469
160
                channels = proto_tree_add_subtree(oper_class, tvb, offset, chan_num,
5470
160
                                       ett_channel_scan_capa_channels,
5471
160
                                       NULL, "Channel List");
5472
5473
6.86k
                while (chan_num > 0) {
5474
6.70k
                    proto_tree_add_item(channels, hf_ieee1905_channel_scan_capa_channel,
5475
6.70k
                                        tvb, offset, 1, ENC_NA);
5476
6.70k
                    offset += 1;
5477
6.70k
                    chan_num--;
5478
6.70k
                }
5479
5480
160
                offset += chan_num;
5481
160
            }
5482
5483
541
            proto_item_set_len(ci, offset - oper_class_start_offset);
5484
541
            oper_class_num++;
5485
541
        }
5486
5487
203
        proto_item_set_len(cli, offset - class_start_offset);
5488
203
        proto_item_set_len(ri, offset - start_offset);
5489
203
        radio_num++;
5490
203
    }
5491
5492
52
    proto_item_set_len(rli, offset - radio_list_start);
5493
5494
52
    return offset;
5495
52
}
5496
5497
/*
5498
 * Dissect a Channel Scan Request TLV
5499
 */
5500
static int * const channel_scan_request_flags_headers[] = {
5501
    &hf_ieee1905_channel_scan_request_flags_fresh_scan,
5502
    &hf_ieee1905_channel_scan_request_flags_reserved,
5503
    NULL
5504
};
5505
5506
static const true_false_string perform_fresh_scan_tfs = {
5507
    "Perform a fresh scan",
5508
    "Return results from previous scan"
5509
};
5510
5511
static int
5512
dissect_channel_scan_request(tvbuff_t *tvb, packet_info *pinfo _U_,
5513
        proto_tree *tree, unsigned offset, uint16_t len _U_)
5514
39
{
5515
39
    proto_tree *radio_list = NULL;
5516
39
    proto_item *rli = NULL;
5517
39
    uint8_t radio_count = 0, radio_num = 0;
5518
39
    unsigned radio_list_start = 0;
5519
5520
39
    proto_tree_add_bitmask(tree, tvb, offset,
5521
39
                           hf_ieee1905_channel_scan_request_flags,
5522
39
                           ett_channel_scan_request_flags,
5523
39
                           channel_scan_request_flags_headers, ENC_NA);
5524
39
    offset += 1;
5525
5526
39
    radio_count = tvb_get_uint8(tvb, offset);
5527
39
    proto_tree_add_item(tree, hf_ieee1905_channel_scan_request_radio_num,
5528
39
                        tvb, offset, 1, ENC_NA);
5529
39
    offset += 1;
5530
5531
39
    radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
5532
39
                                        ett_channel_scan_request_radio_list,
5533
39
                                        &rli, "Radio List");
5534
39
    radio_list_start = offset;
5535
5536
240
    while (radio_num < radio_count) {
5537
201
        proto_tree *radio_tree = NULL;
5538
201
        proto_item *ri = NULL;
5539
201
        proto_tree *oper_class_list = NULL;
5540
201
        proto_item *cli = NULL;
5541
201
        unsigned start_offset = offset;
5542
201
        uint8_t oper_class_count = 0, oper_class_num = 0;
5543
201
        unsigned class_start_offset = 0;
5544
5545
201
        radio_tree = proto_tree_add_subtree_format(radio_list, tvb, offset,
5546
201
                                        -1, ett_channel_scan_request_radio,
5547
201
                                        &ri, "Radio %u", radio_num);
5548
5549
201
        proto_tree_add_item(radio_tree, hf_ieee1905_channel_scan_request_radio_id,
5550
201
                            tvb, offset, 6, ENC_NA);
5551
201
        offset += 6;
5552
5553
201
        oper_class_count = tvb_get_uint8(tvb, offset);
5554
201
        proto_tree_add_item(radio_tree, hf_ieee1905_channel_scan_request_class_num,
5555
201
                            tvb, offset, 1, ENC_NA);
5556
201
        offset += 1;
5557
5558
201
        if (oper_class_count > 0) {
5559
64
            oper_class_list = proto_tree_add_subtree(radio_tree, tvb, offset, -1,
5560
64
                                             ett_channel_scan_request_class_list,
5561
64
                                             &cli, "Operating Class List");
5562
5563
64
            class_start_offset = offset;
5564
502
            while (oper_class_num < oper_class_count) {
5565
438
                uint8_t chan_num = 0;
5566
438
                proto_tree *oper_class = NULL;
5567
438
                proto_item *ci = NULL;
5568
438
                int oper_class_start_offset = offset;
5569
5570
438
                oper_class = proto_tree_add_subtree_format(oper_class_list, tvb,
5571
438
                                                offset, -1,
5572
438
                                                ett_channel_scan_request_class,
5573
438
                                                &ci, "Operating Class %d",
5574
438
                                                oper_class_num);
5575
5576
5577
438
                proto_tree_add_item(oper_class,
5578
438
                                hf_ieee1905_channel_scan_request_oper_class, tvb,
5579
438
                                offset, 1, ENC_NA);
5580
438
                offset += 1;
5581
5582
438
                chan_num = tvb_get_uint8(tvb, offset);
5583
438
                proto_tree_add_item(oper_class,
5584
438
                                hf_ieee1905_channel_scan_request_oper_class_chan_cnt,
5585
438
                                tvb, offset, 1, ENC_NA);
5586
438
                offset += 1;
5587
5588
438
                if (chan_num > 0) {
5589
                    /* Add them */
5590
180
                    proto_tree *channels = NULL;
5591
5592
180
                    channels = proto_tree_add_subtree(oper_class, tvb, offset, chan_num,
5593
180
                                       ett_channel_scan_request_channels,
5594
180
                                       NULL, "Channel List");
5595
5596
6.16k
                    while (chan_num > 0) {
5597
5.98k
                        proto_tree_add_item(channels, hf_ieee1905_channel_scan_request_channel,
5598
5.98k
                                        tvb, offset, 1, ENC_NA);
5599
5.98k
                        offset += 1;
5600
5.98k
                        chan_num--;
5601
5.98k
                    }
5602
180
                }
5603
5604
438
                proto_item_set_len(ci, offset - oper_class_start_offset);
5605
438
                oper_class_num++;
5606
438
            }
5607
64
        }
5608
5609
201
        proto_item_set_len(cli, offset - class_start_offset);
5610
201
        proto_item_set_len(ri, offset - start_offset);
5611
201
        radio_num++;
5612
201
    }
5613
5614
39
    proto_item_set_len(rli, offset - radio_list_start);
5615
5616
39
    return offset;
5617
39
}
5618
5619
/*
5620
 * Dissect a Channel Scan Result TLV
5621
 */
5622
static const range_string channel_scan_result_status_rvals[] = {
5623
    { 0, 0, "Success" },
5624
    { 1, 1, "Scan not supported on this operating class/channel on this radio" },
5625
    { 2, 2, "Request too soon after last scan" },
5626
    { 3, 3, "Radio too busy to perform scan" },
5627
    { 4, 4, "Scan not completed" },
5628
    { 5, 5, "Scan aborted" },
5629
    { 6, 6, "Fresh scan not supported. Radio only supports on-boot scans" },
5630
    { 7, 255, "Reserved" },
5631
    { 0, 0, NULL }
5632
};
5633
5634
static int * const channel_scan_result_neigh_flags[] = {
5635
    &hf_ieee1905_channel_scan_result_load_element_present,
5636
    &hf_ieee1905_channel_scan_result_neigh_reserved,
5637
    NULL
5638
};
5639
5640
static int * const channel_scan_result_flags[] = {
5641
    &hf_ieee1905_channel_scan_result_scan_type,
5642
    &hf_ieee1905_channel_scan_result_scan_flags_reserved,
5643
    NULL
5644
};
5645
5646
static const true_false_string channel_scan_result_type_tfs = {
5647
    "Scan was an Active scan",
5648
    "Scan was a Passive scan"
5649
};
5650
5651
static int
5652
dissect_channel_scan_result(tvbuff_t *tvb, packet_info *pinfo _U_,
5653
        proto_tree *tree, unsigned offset, uint16_t len _U_)
5654
108
{
5655
108
    uint8_t status = 0;
5656
5657
108
    proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_radio_id, tvb,
5658
108
                        offset, 6, ENC_NA);
5659
108
    offset += 6;
5660
5661
108
    proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_oper_class, tvb,
5662
108
                        offset, 1, ENC_NA);
5663
108
    offset += 1;
5664
5665
108
    proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_channel, tvb,
5666
108
                        offset, 1, ENC_NA);
5667
108
    offset += 1;
5668
5669
108
    status = tvb_get_uint8(tvb, offset);
5670
108
    proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_status, tvb,
5671
108
                        offset, 1, ENC_NA);
5672
108
    offset += 1;
5673
5674
108
    if (status == 0) {
5675
22
        uint8_t timestamp_len = tvb_get_uint8(tvb, offset);
5676
22
        uint8_t ssid_len;
5677
22
        uint16_t neighbor_num = 0, neighbor_cnt = 0;
5678
22
        proto_tree *neigh_list = NULL;
5679
22
        proto_item *nli = NULL;
5680
22
        unsigned saved_offset = 0;
5681
5682
22
        proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_timestamp_len,
5683
22
                            tvb, offset, 1, ENC_NA);
5684
22
        offset += 1;
5685
5686
22
        proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_timestamp_string,
5687
22
                            tvb, offset, timestamp_len, ENC_ASCII);
5688
22
        offset += timestamp_len;
5689
5690
22
        proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_utilization,
5691
22
                            tvb, offset, 1, ENC_NA);
5692
22
        offset += 1;
5693
5694
22
        proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_noise, tvb,
5695
22
                            offset, 1, ENC_NA);
5696
22
        offset += 1;
5697
5698
22
        neighbor_num = tvb_get_ntohs(tvb, offset);
5699
22
        proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_neigh_num,
5700
22
                            tvb, offset, 2, ENC_NA);
5701
22
        offset += 2;
5702
5703
22
        if (neighbor_num > 0) {
5704
14
            neigh_list = proto_tree_add_subtree(tree, tvb, offset, -1,
5705
14
                                            ett_channel_scan_result_neigh_list,
5706
14
                                            &nli, "Neighbor List");
5707
14
            saved_offset = offset;
5708
5709
120
            while (neighbor_cnt < neighbor_num) {
5710
106
                proto_tree *neigh_tree = NULL;
5711
106
                proto_item *nti = NULL;
5712
106
                unsigned neigh_saved_offset = offset;
5713
106
                uint8_t channel_bw_len = 0;
5714
106
                uint8_t flags = 0;
5715
5716
106
                neigh_tree = proto_tree_add_subtree_format(neigh_list, tvb,
5717
106
                                        offset, -1,
5718
106
                                        ett_channel_scan_result_neigh,
5719
106
                                        &nti, "Neighbor %u", neighbor_cnt);
5720
5721
106
                proto_tree_add_item(neigh_tree,
5722
106
                                hf_ieee1905_channel_scan_result_bssid, tvb,
5723
106
                                offset, 6, ENC_NA);
5724
106
                offset += 6;
5725
5726
106
                ssid_len = tvb_get_uint8(tvb, offset);
5727
106
                proto_tree_add_item(neigh_tree,
5728
106
                                hf_ieee1905_channel_scan_result_ssid_len, tvb,
5729
106
                                offset, 1, ENC_NA);
5730
106
                offset += 1;
5731
5732
106
                proto_tree_add_item(neigh_tree, hf_ieee1905_channel_scan_result_ssid,
5733
106
                                    tvb, offset, ssid_len, ENC_ASCII);
5734
106
                offset += ssid_len;
5735
5736
106
                proto_tree_add_item(neigh_tree,
5737
106
                                    hf_ieee1905_channel_scan_result_sig_level,
5738
106
                                    tvb, offset, 1, ENC_NA);
5739
106
                offset += 1;
5740
5741
106
                channel_bw_len = tvb_get_uint8(tvb, offset);
5742
106
                proto_tree_add_item(neigh_tree, hf_ieee1905_channel_scan_result_bw_len,
5743
106
                                tvb, offset, 1, ENC_NA);
5744
106
                offset += 1;
5745
5746
106
                proto_tree_add_item(neigh_tree, hf_ieee1905_channel_scan_result_bw,
5747
106
                                tvb, offset, channel_bw_len, ENC_ASCII);
5748
106
                offset += channel_bw_len;
5749
5750
106
                flags = tvb_get_uint8(tvb, offset);
5751
106
                proto_tree_add_bitmask(neigh_tree, tvb, offset,
5752
106
                                   hf_ieee1905_channel_scan_result_neigh_flags,
5753
106
                                   ett_channel_scan_result_neigh_flags,
5754
106
                                   channel_scan_result_neigh_flags, ENC_NA);
5755
106
                offset += 1;
5756
5757
106
                if (flags & 0x80) {
5758
15
                    proto_tree_add_item(neigh_tree, hf_ieee1905_channel_scan_result_util,
5759
15
                                     tvb, offset, 1, ENC_NA);
5760
15
                    offset += 1;
5761
5762
15
                    proto_tree_add_item(neigh_tree, hf_ieee1905_channel_scan_result_sta_count,
5763
15
                                     tvb, offset, 2, ENC_NA);
5764
15
                    offset += 2;
5765
15
                }
5766
5767
106
                proto_item_set_len(nti, offset - neigh_saved_offset);
5768
106
                neighbor_cnt++;
5769
106
            }
5770
14
        }
5771
5772
22
        proto_item_set_len(nli, offset - saved_offset);
5773
5774
22
        proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_scan_duration,
5775
22
                        tvb, offset, 4, ENC_BIG_ENDIAN);
5776
22
        offset += 4;
5777
5778
22
        proto_tree_add_bitmask(tree, tvb, offset,
5779
22
                               hf_ieee1905_channel_scan_result_flags,
5780
22
                               ett_channel_scan_result_flags,
5781
22
                               channel_scan_result_flags, ENC_NA);
5782
22
        offset += 1;
5783
5784
22
    }
5785
5786
108
    return offset;
5787
108
}
5788
5789
/*
5790
 * Dissect a Timestamp TLV
5791
 */
5792
static int
5793
dissect_timestamp(tvbuff_t *tvb, packet_info *pinfo _U_,
5794
        proto_tree *tree, unsigned offset, uint16_t len _U_)
5795
9
{
5796
9
    uint8_t timestamp_len = tvb_get_uint8(tvb, offset);
5797
5798
9
    proto_tree_add_item(tree, hf_ieee1905_timestamp_length, tvb, offset, 1,
5799
9
                        ENC_NA);
5800
9
    offset += 1;
5801
5802
9
    proto_tree_add_item(tree, hf_ieee1905_timestamp_string, tvb, offset,
5803
9
                        timestamp_len, ENC_ASCII);
5804
9
    offset += timestamp_len;
5805
5806
9
    return offset;
5807
9
}
5808
5809
/*
5810
 * Dissect a 1905 Layer Security Capability TLV
5811
 */
5812
static const range_string onboarding_protocol_supported_rvals[] = {
5813
    { 0, 0,   "1905 Device Provisioning Protocol" },
5814
    { 1, 255, "Reserved" },
5815
    { 0, 0,   NULL }
5816
};
5817
5818
static const range_string message_integrity_algorithms_sup_rvals[] = {
5819
    { 0, 0,   "HMAC-SHAR256" },
5820
    { 1, 255, "Reserved" },
5821
    { 0, 0,   NULL }
5822
};
5823
5824
static const range_string message_encryption_algorithms_sup_rvals[] = {
5825
    { 0, 0,   "AES-SIV" },
5826
    { 1, 255, "Reserved" },
5827
    { 0, 0,   NULL }
5828
};
5829
5830
static int
5831
dissect_1905_layer_security_capability(tvbuff_t *tvb, packet_info *pinfo _U_,
5832
        proto_tree *tree, unsigned offset, uint16_t len _U_)
5833
73
{
5834
73
    proto_tree_add_item(tree, hf_ieee1905_1905_layer_sec_capa_onboarding, tvb,
5835
73
                        offset, 1, ENC_NA);
5836
73
    offset += 1;
5837
5838
73
    proto_tree_add_item(tree, hf_ieee1905_1905_layer_sec_capa_mic_sup, tvb,
5839
73
                        offset, 1, ENC_NA);
5840
73
    offset += 1;
5841
5842
73
    proto_tree_add_item(tree, hf_ieee1905_1905_layer_sec_capa_enc_alg_sup, tvb,
5843
73
                        offset, 1, ENC_NA);
5844
73
    offset += 1;
5845
5846
73
    return offset;
5847
73
}
5848
5849
/*
5850
 * Dissect an AP Wi-Fi 6 Capabilities TLV
5851
 */
5852
static int * const ap_wf6_role_flags[] = {
5853
    &hf_ieee1905_ap_wf6_capa_agents_role,
5854
    &hf_ieee1905_ap_wf6_capa_he_160_support,
5855
    &hf_ieee1905_ap_wf6_capa_he_80p80_support,
5856
    &hf_ieee1905_ap_wf6_capa_reserved,
5857
    NULL
5858
};
5859
5860
static int * const ap_wf6_supported_flags[] = {
5861
    &hf_ieee1905_ap_wf6_su_beamformer,
5862
    &hf_ieee1905_ap_wf6_su_beamformee,
5863
    &hf_ieee1905_ap_wf6_mu_beamformer_status,
5864
    &hf_ieee1905_ap_wf6_beamformee_sts_le_80mhz,
5865
    &hf_ieee1905_ap_wf6_beamformee_sts_gt_80mhz,
5866
    &hf_ieee1905_ap_wf6_ul_mu_mimo,
5867
    &hf_ieee1905_ap_wf6_ul_ofdma,
5868
    &hf_ieee1905_ap_wf6_dl_ofdma,
5869
    NULL
5870
};
5871
5872
static int * const ap_wf6_mimo_flags[] = {
5873
    &hf_ieee1905_ap_wf6_max_ap_dl_mu_mimo_tx,
5874
    &hf_ieee1905_ap_wf6_max_ap_ul_mu_mimi_rx,
5875
    NULL
5876
};
5877
5878
static int * const ap_wf6_gen_flags[] = {
5879
    &hf_ieee1905_ap_wf6_gen_rts,
5880
    &hf_ieee1905_ap_wf6_gen_mu_rts,
5881
    &hf_ieee1905_ap_wf6_gen_multi_bssid,
5882
    &hf_ieee1905_ap_wf6_gen_mu_edca,
5883
    &hf_ieee1905_ap_wf6_gen_twt_requester,
5884
    &hf_ieee1905_ap_wf6_gen_twt_responder,
5885
    &hf_ieee1905_ap_wf6_gen_reserved,
5886
    NULL
5887
};
5888
5889
static const value_string ap_wf6_agent_role_vals[] = {
5890
    { 0, "Wi-Fi 6 support info for the AP role" },
5891
    { 1, "Wi-Fi 6 support info for the non-AP STA role" },
5892
    { 0, NULL }
5893
};
5894
5895
static int
5896
dissect_ap_wf6_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
5897
        proto_tree *tree, unsigned offset, uint16_t len _U_)
5898
122
{
5899
122
    uint8_t role_count, role_id = 0;
5900
122
    proto_tree *role_list = NULL;
5901
122
    proto_item *rli = NULL;
5902
122
    unsigned start_list_offset;
5903
5904
122
    proto_tree_add_item(tree, hf_ieee1905_ap_wf6_capa_radio_id, tvb,
5905
122
                        offset, 6, ENC_NA);
5906
122
    offset += 6;
5907
5908
122
    role_count = tvb_get_uint8(tvb, offset);
5909
5910
122
    proto_tree_add_item(tree, hf_ieee1905_ap_wf6_role_count, tvb, offset, 1,
5911
122
                        ENC_NA);
5912
122
    offset += 1;
5913
5914
122
    start_list_offset = offset;
5915
122
    role_list = proto_tree_add_subtree(tree, tvb, offset, -1,
5916
122
                                       ett_ap_wf6_role_list,
5917
122
                                       &rli, "Role List");
5918
5919
1.42k
    while (role_id < role_count) {
5920
1.30k
        proto_tree *role_tree;
5921
1.30k
        proto_item *rti = NULL;
5922
1.30k
        unsigned start_tree_offset = offset;
5923
1.30k
        proto_tree *mcs_set = NULL;
5924
5925
1.30k
        role_tree = proto_tree_add_subtree_format(role_list, tvb, offset, -1,
5926
1.30k
                                                  ett_ap_wf6_role_tree,
5927
1.30k
                                                  &rti, "Role %u", role_id);
5928
5929
1.30k
        uint8_t role_flags = tvb_get_uint8(tvb, offset);
5930
5931
1.30k
        proto_tree_add_bitmask(role_tree, tvb, offset,
5932
1.30k
                               hf_ieee1905_ap_wf6_agent_role_flags,
5933
1.30k
                               ett_ap_wf6_agent_role_flags, ap_wf6_role_flags,
5934
1.30k
                               ENC_NA);
5935
1.30k
        offset += 1;
5936
5937
1.30k
        mcs_set = proto_tree_add_subtree(role_tree, tvb, offset, 4,
5938
1.30k
                        ett_ap_he_mcs_set, NULL,
5939
1.30k
                        "Supported HE-MCS and NSS Set <= 80 MHz");
5940
5941
1.30k
        proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
5942
1.30k
                        hf_ieee1905_ap_he_cap_tx_mcs_le_80_mhz,
5943
1.30k
                        ett_ieee1905_ap_he_rx_mcs_set,
5944
1.30k
                        tx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
5945
1.30k
        offset += 2;
5946
5947
1.30k
        proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
5948
1.30k
                        hf_ieee1905_ap_he_cap_rx_mcs_le_80_mhz,
5949
1.30k
                        ett_ieee1905_ap_he_rx_mcs_set,
5950
1.30k
                        rx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
5951
1.30k
        offset += 2;
5952
5953
5954
1.30k
        if (role_flags & 0x20) { /* HE MCS & NSS for 160MHz */
5955
459
            mcs_set = proto_tree_add_subtree(role_tree, tvb, offset, 4,
5956
459
                        ett_ap_he_mcs_set, NULL,
5957
459
                        "Supported HE-MCS and NSS Set 160 MHz");
5958
5959
459
            proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
5960
459
                        hf_ieee1905_ap_he_cap_tx_mcs_160_mhz,
5961
459
                        ett_ieee1905_ap_he_rx_mcs_set,
5962
459
                        tx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
5963
459
            offset += 2;
5964
5965
459
            proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
5966
459
                        hf_ieee1905_ap_he_cap_rx_mcs_160_mhz,
5967
459
                        ett_ieee1905_ap_he_rx_mcs_set,
5968
459
                        rx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
5969
459
            offset += 2;
5970
459
        }
5971
5972
1.30k
        if (role_flags & 0x10) { /* HE MCS & NSS for 80+80MHz */
5973
495
            mcs_set = proto_tree_add_subtree(role_tree, tvb, offset, 4,
5974
495
                        ett_ap_he_mcs_set, NULL,
5975
495
                        "Supported HE-MCS and NSS Set 80+80 MHz");
5976
5977
495
            proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
5978
495
                        hf_ieee1905_ap_he_cap_tx_mcs_80p80_mhz,
5979
495
                        ett_ieee1905_ap_he_rx_mcs_set,
5980
495
                        tx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
5981
495
            offset += 2;
5982
5983
495
            proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
5984
495
                        hf_ieee1905_ap_he_cap_rx_mcs_80p80_mhz,
5985
495
                        ett_ieee1905_ap_he_rx_mcs_set,
5986
495
                        rx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
5987
495
            offset += 2;
5988
495
        }
5989
5990
1.30k
        proto_tree_add_bitmask(role_tree, tvb, offset,
5991
1.30k
                               hf_ieee1905_ap_wf6_he_supported_flags,
5992
1.30k
                               ett_ap_wf6_supported_flags,
5993
1.30k
                               ap_wf6_supported_flags, ENC_NA);
5994
1.30k
        offset += 1;
5995
5996
1.30k
        proto_tree_add_bitmask(role_tree, tvb, offset,
5997
1.30k
                               hf_ieee1905_ap_wf6_mimo_max_flags,
5998
1.30k
                               ett_ap_wf6_mimo_max_flags, ap_wf6_mimo_flags,
5999
1.30k
                               ENC_NA);
6000
1.30k
        offset += 1;
6001
6002
1.30k
        proto_tree_add_item(role_tree, hf_ieee1905_ap_wf6_dl_ofdma_max_tx, tvb,
6003
1.30k
                            offset, 1, ENC_NA);
6004
1.30k
        offset += 1;
6005
6006
1.30k
        proto_tree_add_item(role_tree, hf_ieee1905_ap_wf6_ul_ofdma_max_rx, tvb,
6007
1.30k
                            offset, 1, ENC_NA);
6008
1.30k
        offset += 1;
6009
6010
1.30k
        proto_tree_add_bitmask(role_tree, tvb, offset,
6011
1.30k
                               hf_ieee1905_ap_wf6_gen_flags,
6012
1.30k
                               ett_ap_wf6_gen_flags, ap_wf6_gen_flags,
6013
1.30k
                               ENC_NA);
6014
1.30k
        offset += 1;
6015
6016
1.30k
        proto_item_set_len(rti, offset - start_tree_offset);
6017
1.30k
        role_id++;
6018
1.30k
    }
6019
6020
122
    proto_item_set_len(rli, offset - start_list_offset);
6021
122
    return offset;
6022
122
}
6023
6024
static int
6025
dissect_agent_list(tvbuff_t *tvb, packet_info *pinfo _U_,
6026
        proto_tree *tree, unsigned offset, uint16_t len)
6027
4
{
6028
4
    proto_tree_add_item(tree, hf_ieee1905_agent_list_bytes, tvb, offset,
6029
4
                        len, ENC_NA);
6030
4
    offset += len;
6031
6032
4
    return offset;
6033
4
}
6034
6035
/*
6036
 * Dissect a MIC TLV
6037
 */
6038
static int * const gtk_key_id_headers[] = {
6039
    &hf_ieee1905_1905_gtk_key_id,
6040
    &hf_ieee1905_mic_version,
6041
    &hf_ieee1905_mic_reserved,
6042
    NULL
6043
};
6044
6045
static const value_string mic_version_vals[] = {
6046
    { 0, "Version 1" },
6047
    { 1, "Reserved" },
6048
    { 2, "Reserved" },
6049
    { 3, "Reserved" },
6050
    { 0, NULL }
6051
};
6052
6053
static int
6054
dissect_mic(tvbuff_t *tvb, packet_info *pinfo _U_,
6055
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6056
6
{
6057
6
    uint16_t mic_len = 0;
6058
6059
6
    proto_tree_add_bitmask(tree, tvb, offset,
6060
6
                           hf_ieee1905_mic_group_temporal_key_id,
6061
6
                           ett_mic_group_temporal_key,
6062
6
                           gtk_key_id_headers, ENC_NA);
6063
6
    offset += 1;
6064
6065
6
    proto_tree_add_item(tree, hf_ieee1905_mic_integrity_transmission_counter,
6066
6
                        tvb, offset, 6, ENC_BIG_ENDIAN);
6067
6
    offset += 6;
6068
6069
6
    proto_tree_add_item(tree, hf_ieee1905_mic_source_la_mac_id, tvb, offset, 6,
6070
6
                        ENC_NA);
6071
6
    offset += 6;
6072
6073
6
    mic_len = tvb_get_ntohs(tvb, offset);
6074
6
    proto_tree_add_item(tree, hf_ieee1905_mic_length, tvb, offset, 2, ENC_NA);
6075
6
    offset += 2;
6076
6077
6
    proto_tree_add_item(tree, hf_ieee1905_mic_bytes, tvb, offset, mic_len,
6078
6
                        ENC_NA);
6079
6
    offset += mic_len;
6080
6081
6
    return offset;
6082
6
}
6083
6084
/*
6085
 * Dissect an Encrypted TLV
6086
 */
6087
static int
6088
dissect_encrypted(tvbuff_t *tvb, packet_info *pinfo _U_,
6089
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6090
4
{
6091
4
    uint16_t enc_len = 0;
6092
6093
4
    proto_tree_add_item(tree, hf_ieee1905_encrypted_enc_transmission_count,
6094
4
                        tvb, offset, 6, ENC_NA);
6095
4
    offset += 6;
6096
6097
4
    proto_tree_add_item(tree, hf_ieee1905_encrypted_source_la_mac_id, tvb,
6098
4
                        offset, 6, ENC_NA);
6099
4
    offset += 6;
6100
6101
4
    proto_tree_add_item(tree, hf_ieee1905_encrypted_dest_al_mac_addr, tvb,
6102
4
                        offset, 6, ENC_NA);
6103
4
    offset += 6;
6104
6105
4
    enc_len = tvb_get_ntohs(tvb, offset);
6106
4
    proto_tree_add_item(tree, hf_ieee1905_encrypted_enc_output_field_len, tvb,
6107
4
                        offset, 2, ENC_NA);
6108
4
    offset += 2;
6109
6110
4
    proto_tree_add_item(tree, hf_ieee1905_encrypted_enc_output_field, tvb,
6111
4
                        offset, enc_len, ENC_NA);
6112
4
    offset += enc_len;
6113
6114
4
    return offset;
6115
4
}
6116
6117
/*
6118
 * Dissect a CAC Request TLV
6119
 */
6120
static int * const cac_request_method_flags[] = {
6121
    &hf_ieee1905_cac_request_method,
6122
    &hf_ieee1905_cac_request_completion_action,
6123
    &hf_ieee1905_cac_request_completion_unsuccess,
6124
    &hf_ieee1905_cac_request_reserved,
6125
    NULL
6126
};
6127
6128
static const value_string cac_request_method_vals[] = {
6129
    { 0, "Continuous CAC" },
6130
    { 1, "Continuous with dedicated radio" },
6131
    { 2, "MIMO dimension reduced" },
6132
    { 3, "Time sliced CAC" },
6133
    { 4, "Reserved" },
6134
    { 5, "Reserved" },
6135
    { 6, "Reserved" },
6136
    { 7, "Reserved" },
6137
    { 0, NULL }
6138
};
6139
6140
static const range_string cac_completion_action_vals[] = {
6141
    { 0, 0,   "Remain on channel and continue to monitor for radar" },
6142
    { 1, 1,   "Return to previous state" },
6143
    { 2, 255, "Reserved" },
6144
    { 0, 0,   NULL }
6145
};
6146
6147
static int
6148
dissect_cac_request(tvbuff_t *tvb, packet_info *pinfo _U_,
6149
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6150
24
{
6151
24
    unsigned radio_count = tvb_get_uint8(tvb, offset);
6152
6153
24
    proto_tree_add_item(tree, hf_ieee1905_cac_request_radio_count, tvb,
6154
24
                        offset, 1, ENC_NA);
6155
24
    offset += 1;
6156
6157
24
    if (radio_count > 0) {
6158
19
        proto_tree *radio_list = NULL;
6159
19
        uint8_t radio_num = 0;
6160
6161
19
        radio_list = proto_tree_add_subtree(tree, tvb, offset, radio_count * 9,
6162
19
                                        ett_cac_request_radio_list,
6163
19
                                        NULL, "Radio List");
6164
6165
235
        while (radio_num < radio_count) {
6166
216
            proto_tree *radio = NULL;
6167
6168
216
            radio = proto_tree_add_subtree_format(radio_list, tvb, offset, 9,
6169
216
                                           ett_cac_request_radio, NULL,
6170
216
                                           "Radio %u", radio_num);
6171
6172
216
            proto_tree_add_item(radio, hf_ieee1905_cac_request_radio_id, tvb,
6173
216
                                offset, 6, ENC_NA);
6174
216
            offset += 6;
6175
6176
216
            proto_tree_add_item(radio, hf_ieee1905_cac_request_op_class, tvb,
6177
216
                                offset, 1, ENC_NA);
6178
216
            offset += 1;
6179
6180
216
            proto_tree_add_item(radio, hf_ieee1905_cac_request_channel, tvb,
6181
216
                                offset, 1, ENC_NA);
6182
216
            offset += 1;
6183
6184
216
            proto_tree_add_bitmask(radio, tvb, offset,
6185
216
                           hf_ieee1905_cac_request_flags,
6186
216
                           ett_cac_request_flags,
6187
216
                           cac_request_method_flags, ENC_NA);
6188
216
            offset += 1;
6189
6190
216
            radio_num += 1;
6191
216
        }
6192
6193
6194
19
    }
6195
6196
24
    return offset;
6197
24
}
6198
6199
/*
6200
 * Dissect a CAC Termination TLV
6201
 */
6202
static int
6203
dissect_cac_termination(tvbuff_t *tvb, packet_info *pinfo _U_,
6204
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6205
134
{
6206
134
    uint8_t radio_count = tvb_get_uint8(tvb, offset);
6207
6208
134
    proto_tree_add_item(tree, hf_ieee1905_cac_termination_radio_count, tvb,
6209
134
                        offset, 1, ENC_NA);
6210
134
    offset += 1;
6211
6212
134
    if (radio_count > 0) {
6213
131
        proto_tree *radio_list = NULL;
6214
131
        uint8_t radio_num = 0;
6215
6216
131
        radio_list = proto_tree_add_subtree(tree, tvb, offset, radio_count * 9,
6217
131
                                        ett_cac_terminate_radio_list,
6218
131
                                        NULL, "Radio list");
6219
6220
761
        while (radio_num < radio_count) {
6221
630
            proto_tree *radio = NULL;
6222
6223
630
            radio = proto_tree_add_subtree_format(radio_list, tvb, offset, 9,
6224
630
                                           ett_cac_terminate_radio, NULL,
6225
630
                                           "Radio %u", radio_num);
6226
6227
630
            proto_tree_add_item(radio, hf_ieee1905_cac_terminate_radio_id, tvb,
6228
630
                                offset, 6, ENC_NA);
6229
630
            offset += 6;
6230
6231
630
            proto_tree_add_item(radio, hf_ieee1905_cac_terminate_op_class, tvb,
6232
630
                                offset, 1, ENC_NA);
6233
630
            offset += 1;
6234
6235
630
            proto_tree_add_item(radio, hf_ieee1905_cac_terminate_channel, tvb,
6236
630
                                offset, 1, ENC_NA);
6237
630
            offset += 1;
6238
6239
630
            radio_num += 1;
6240
630
        }
6241
131
    }
6242
6243
134
    return offset;
6244
134
}
6245
6246
/*
6247
 * Dissect a CAC Completion Report TLV
6248
 */
6249
static const range_string cac_completion_status_rvals[] = {
6250
    { 0, 0,   "Successful" },
6251
    { 1, 1,   "Radar detected" },
6252
    { 2, 2,   "CAC not supported as requested" },
6253
    { 3, 3,   "Radio too busy to perform CAC" },
6254
    { 4, 4,   "Request was considered non conformant to regulations in country of operation" },
6255
    { 5, 5,   "Other error" },
6256
    { 6, 255, "Reserved" },
6257
    { 0, 0, NULL },
6258
};
6259
6260
static int
6261
dissect_cac_completion_report(tvbuff_t *tvb, packet_info *pinfo _U_,
6262
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6263
30
{
6264
30
    uint8_t radio_count = tvb_get_uint8(tvb, offset);
6265
6266
30
    proto_tree_add_item(tree, hf_ieee1905_cac_completion_rep_radio_count, tvb,
6267
30
                        offset, 1, ENC_NA);
6268
30
    offset += 1;
6269
6270
30
    if (radio_count > 0) {
6271
26
        proto_tree *radio_list = NULL;
6272
26
        uint8_t radio_num = 0;
6273
26
        uint8_t radar_count = 0;
6274
6275
26
        radio_list = proto_tree_add_subtree(tree, tvb, offset, radio_count * 9,
6276
26
                                        ett_cac_completion_radio_list,
6277
26
                                        NULL, "Radio list");
6278
6279
199
        while (radio_num < radio_count) {
6280
173
            proto_tree *radio = NULL;
6281
6282
173
            radio = proto_tree_add_subtree_format(radio_list, tvb, offset, 9,
6283
173
                                           ett_cac_completion_radio, NULL,
6284
173
                                           "Radio %u", radio_num);
6285
6286
173
            proto_tree_add_item(radio, hf_ieee1905_cac_completion_radio_id, tvb,
6287
173
                                offset, 6, ENC_NA);
6288
173
            offset += 6;
6289
6290
173
            proto_tree_add_item(radio, hf_ieee1905_cac_completion_op_class, tvb,
6291
173
                                offset, 1, ENC_NA);
6292
173
            offset += 1;
6293
6294
173
            proto_tree_add_item(radio, hf_ieee1905_cac_completion_channel, tvb,
6295
173
                                offset, 1, ENC_NA);
6296
173
            offset += 1;
6297
6298
173
            proto_tree_add_item(radio, hf_ieee1905_cac_completion_status, tvb,
6299
173
                                offset, 1, ENC_NA);
6300
173
            offset += 1;
6301
6302
173
            radar_count = tvb_get_uint8(tvb, offset);
6303
6304
173
            proto_tree_add_item(radio, hf_ieee1905_cac_completion_radar_count,
6305
173
                                tvb, offset, 1, ENC_NA);
6306
173
            offset += 1;
6307
6308
173
            if (radar_count > 0) {
6309
78
                proto_tree *radar_det_list = NULL;
6310
78
                uint8_t radar_num = 0;
6311
6312
78
                radar_det_list = proto_tree_add_subtree(radio, tvb, offset,
6313
78
                                                radar_count * 2,
6314
78
                                                ett_cac_completion_radar_list,
6315
78
                                                NULL, "Radar detection list");
6316
2.78k
                while (radar_num < radar_count) {
6317
2.70k
                    proto_tree *radar = NULL;
6318
6319
2.70k
                    radar = proto_tree_add_subtree_format(radar_det_list, tvb,
6320
2.70k
                                                offset, 2,
6321
2.70k
                                                ett_cac_completion_radar, NULL,
6322
2.70k
                                                "Class/Channel pair %u",
6323
2.70k
                                                radar_num);
6324
6325
2.70k
                    proto_tree_add_item(radar,
6326
2.70k
                                        hf_ieee1905_cac_comp_radar_op_class,
6327
2.70k
                                        tvb, offset, 1, ENC_NA);
6328
2.70k
                    offset += 1;
6329
6330
2.70k
                    proto_tree_add_item(radar,
6331
2.70k
                                        hf_ieee1905_cac_comp_radar_channel,
6332
2.70k
                                        tvb, offset, 1, ENC_NA);
6333
2.70k
                    offset += 1;
6334
6335
2.70k
                    radar_num += 1;
6336
2.70k
                }
6337
78
            }
6338
6339
173
            radio_num += 1;
6340
173
        }
6341
26
    }
6342
6343
30
    return offset;
6344
30
}
6345
6346
/*
6347
 * Dissect a CAC Status Report TLV
6348
 */
6349
static int
6350
dissect_cac_status_report(tvbuff_t *tvb, packet_info *pinfo _U_,
6351
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6352
39
{
6353
39
    uint8_t channel_count = tvb_get_uint8(tvb, offset);
6354
39
    uint8_t non_occupancy_count = 0;
6355
39
    uint8_t active_cac_count = 0;
6356
6357
39
    proto_tree_add_item(tree, hf_ieee1905_cac_status_rpt_active_chan, tvb,
6358
39
                        offset, 1, ENC_NA);
6359
39
    offset += 1;
6360
6361
39
    if (channel_count > 0) {
6362
34
        uint8_t channel_num = 0;
6363
34
        proto_tree *active_chan_list = NULL;
6364
6365
34
        active_chan_list = proto_tree_add_subtree(tree, tvb, offset,
6366
34
                                        4 * channel_count,
6367
34
                                        ett_cac_status_rpt_avail_list,
6368
34
                                        NULL, "Available Channels List");
6369
856
        while (channel_num < channel_count) {
6370
822
            proto_tree *active_chan_tree = NULL;
6371
6372
822
            active_chan_tree = proto_tree_add_subtree_format(active_chan_list,
6373
822
                                        tvb, offset, 4,
6374
822
                                        ett_cac_status_rpt_avail_chan,
6375
822
                                        NULL, "Available Channel %u",
6376
822
                                        channel_num);
6377
6378
822
            proto_tree_add_item(active_chan_tree,
6379
822
                                hf_ieee1905_cac_status_rpt_avail_op_class,
6380
822
                                tvb, offset, 1, ENC_NA);
6381
822
            offset += 1;
6382
6383
822
            proto_tree_add_item(active_chan_tree,
6384
822
                                hf_ieee1905_cac_status_rpt_avail_channel,
6385
822
                                tvb, offset, 1, ENC_NA);
6386
822
            offset += 1;
6387
6388
822
            proto_tree_add_item(active_chan_tree,
6389
822
                                hf_ieee1905_cac_status_rpt_avail_minutes,
6390
822
                                tvb, offset, 2, ENC_BIG_ENDIAN);
6391
822
            offset += 2;
6392
6393
822
            channel_num += 1;
6394
822
        }
6395
34
    }
6396
6397
39
    non_occupancy_count = tvb_get_uint8(tvb, offset);
6398
39
    proto_tree_add_item(tree, hf_ieee1905_cac_status_rpt_non_occ_cnt, tvb,
6399
39
                        offset, 1, ENC_NA);
6400
39
    offset += 1;
6401
6402
39
    if (non_occupancy_count > 0) {
6403
23
        uint8_t non_occupancy_num = 0;
6404
23
        proto_tree *non_occupancy_list = NULL;
6405
6406
23
        non_occupancy_list = proto_tree_add_subtree(tree, tvb, offset,
6407
23
                                        4 * non_occupancy_count,
6408
23
                                        ett_cac_status_rpt_non_occupy_list,
6409
23
                                        NULL, "Non-occupancy List");
6410
540
        while (non_occupancy_num < non_occupancy_count) {
6411
517
            proto_tree *non_occupancy_tree = NULL;
6412
6413
517
            non_occupancy_tree = proto_tree_add_subtree_format(
6414
517
                                        non_occupancy_list, tvb, offset, 4,
6415
517
                                        ett_cac_status_rpt_unocc_chan,
6416
517
                                        NULL, "Unoccupied Channel %u",
6417
517
                                        non_occupancy_num);
6418
6419
517
            proto_tree_add_item(non_occupancy_tree,
6420
517
                                hf_ieee1905_cac_status_rpt_non_occ_op_class,
6421
517
                                tvb, offset, 1, ENC_NA);
6422
517
            offset += 1;
6423
6424
517
            proto_tree_add_item(non_occupancy_tree,
6425
517
                                hf_ieee1905_cac_status_rpt_non_occ_channel,
6426
517
                                tvb, offset, 1, ENC_NA);
6427
517
            offset += 1;
6428
6429
517
            proto_tree_add_item(non_occupancy_tree,
6430
517
                                hf_ieee1905_cac_status_rpt_non_occ_seconds,
6431
517
                                tvb, offset, 2, ENC_BIG_ENDIAN);
6432
517
            offset += 2;
6433
6434
517
            non_occupancy_num += 1;
6435
517
        }
6436
23
    }
6437
6438
39
    active_cac_count = tvb_get_uint8(tvb, offset);
6439
39
    proto_tree_add_item(tree, hf_ieee1905_cac_status_rpt_active_cac_cnt, tvb,
6440
39
                        offset, 1, ENC_NA);
6441
39
    offset += 1;
6442
6443
39
    if (active_cac_count > 0) {
6444
16
        uint8_t active_cac_num = 0;
6445
16
        proto_tree *active_cac_list = NULL;
6446
6447
16
        active_cac_list = proto_tree_add_subtree(tree, tvb, offset,
6448
16
                                        5 * active_cac_count,
6449
16
                                        ett_cac_status_rpt_active_cac_list,
6450
16
                                        NULL, "Active CAC List");
6451
373
        while (active_cac_num < active_cac_count) {
6452
357
            proto_tree *active_cac_tree = NULL;
6453
6454
357
            active_cac_tree = proto_tree_add_subtree_format(active_cac_list,
6455
357
                                        tvb, offset, 5,
6456
357
                                        ett_cac_status_rpt_active_cac_tree,
6457
357
                                        NULL, "Active CAC %u",
6458
357
                                        active_cac_num);
6459
6460
357
            proto_tree_add_item(active_cac_tree,
6461
357
                                hf_ieee1905_cac_status_rpt_active_cac_op_class,
6462
357
                                tvb, offset, 1, ENC_NA);
6463
357
            offset += 1;
6464
6465
357
            proto_tree_add_item(active_cac_tree,
6466
357
                                hf_ieee1905_cac_status_rpt_active_cac_channel,
6467
357
                                tvb, offset, 1, ENC_NA);
6468
357
            offset += 1;
6469
6470
357
            proto_tree_add_item(active_cac_tree,
6471
357
                                hf_ieee1905_cac_status_rpt_active_cac_seconds,
6472
357
                                tvb, offset, 3, ENC_BIG_ENDIAN);
6473
357
            offset += 3;
6474
6475
357
            active_cac_num += 1;
6476
357
        }
6477
16
    }
6478
6479
39
    return offset;
6480
39
}
6481
6482
/*
6483
 * Dissect a CAC Capabilities TLV
6484
 */
6485
static const range_string cac_mode_supported_rvals[] = {
6486
    { 0, 0,   "Continuous CAC" },
6487
    { 1, 1,   "Continuous with dedicated radio" },
6488
    { 2, 2,   "MIMO dimension reduced" },
6489
    { 3, 3,   "Time sliced CAC" },
6490
    { 4, 255, "Reserved" },
6491
    { 0, 0, NULL }
6492
};
6493
6494
static int
6495
dissect_cac_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
6496
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6497
60
{
6498
60
    uint8_t cac_radios = 0;
6499
6500
60
    proto_tree_add_item(tree, hf_ieee1905_cac_capa_country_code, tvb, offset,
6501
60
                        2, ENC_ASCII);
6502
60
    offset += 2;
6503
6504
60
    cac_radios = tvb_get_uint8(tvb, offset);
6505
60
    proto_tree_add_item(tree, hf_ieee1905_cac_capa_radio_cnt, tvb, offset,
6506
60
                        1, ENC_NA);
6507
60
    offset += 1;
6508
6509
60
    if (cac_radios > 0) {
6510
58
        uint8_t radio_num = 0;
6511
58
        proto_tree *radio_list = NULL;
6512
58
        proto_item *rli = NULL;
6513
58
        unsigned start_offset = offset;
6514
6515
58
        radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
6516
58
                                        ett_cac_capabilities_radio_list,
6517
58
                                        &rli, "Radio List");
6518
231
        while (radio_num < cac_radios) {
6519
173
            proto_tree *radio_tree = NULL;
6520
173
            uint8_t cac_types = 0;
6521
6522
173
            radio_tree = proto_tree_add_subtree_format(radio_list,
6523
173
                                        tvb, offset, 5,
6524
173
                                        ett_cac_capabilities_radio_tree,
6525
173
                                        NULL, "Radio %u",
6526
173
                                        radio_num);
6527
6528
173
            proto_tree_add_item(radio_tree,
6529
173
                                hf_ieee1905_cac_capabilities_radio_id, tvb,
6530
173
                                offset, 6, ENC_NA);
6531
173
            offset += 6;
6532
6533
173
            cac_types = tvb_get_uint8(tvb, offset);
6534
173
            proto_tree_add_item(radio_tree,
6535
173
                                hf_ieee1905_cac_capabilities_types_num,
6536
173
                                tvb, offset, 1, ENC_NA);
6537
173
            offset += 1;
6538
6539
173
            if (cac_types > 0) {
6540
73
                uint8_t cac_num = 0;
6541
73
                proto_tree *cac_type_list = NULL;
6542
73
                proto_item *rci = NULL;
6543
73
                unsigned cac_type_start = offset;
6544
73
                uint8_t cac_classes = 0;
6545
6546
73
                cac_type_list = proto_tree_add_subtree(radio_tree, tvb, offset,
6547
73
                                        -1, ett_cac_capabilities_type_list,
6548
73
                                        &rci, "CAC Type List");
6549
378
                while (cac_num < cac_types) {
6550
305
                    proto_tree *cac_type_tree = NULL;
6551
305
                    proto_item *cti = NULL;
6552
6553
305
                    cac_type_tree = proto_tree_add_subtree_format(cac_type_list,
6554
305
                                        tvb, offset,
6555
305
                                        -1, ett_cac_capabilities_type_tree,
6556
305
                                        &cti, "CAC Type %u", cac_num);
6557
6558
305
                    proto_tree_add_item(cac_type_tree,
6559
305
                                hf_ieee1905_cac_capabilities_cac_mode, tvb,
6560
305
                                offset, 1, ENC_NA);
6561
305
                    offset += 1;
6562
6563
305
                    proto_tree_add_item(cac_type_tree,
6564
305
                                hf_ieee1905_cac_capabilities_cac_seconds, tvb,
6565
305
                                offset, 3, ENC_BIG_ENDIAN);
6566
305
                    offset += 3;
6567
6568
305
                    cac_classes = tvb_get_uint8(tvb, offset);
6569
305
                    proto_tree_add_item(cac_type_tree,
6570
305
                                hf_ieee1905_cac_capabilities_op_class_num, tvb,
6571
305
                                offset, 1, ENC_NA);
6572
305
                    offset += 1;
6573
6574
305
                    if (cac_classes > 0) {
6575
91
                        proto_tree *cac_class_list = NULL;
6576
91
                        uint8_t cac_class_num = 0;
6577
91
                        proto_item *cli = NULL;
6578
6579
91
                        cac_class_list = proto_tree_add_subtree(cac_type_tree,
6580
91
                                tvb, offset, -1,
6581
91
                                ett_cac_capabilities_class_list, &cli,
6582
91
                                "Class List");
6583
6584
805
                        while (cac_class_num < cac_classes) {
6585
714
                            uint8_t channel_cnt = 0;
6586
714
                            proto_tree *cac_class_tree = NULL;
6587
714
                            unsigned cac_class_start = offset;
6588
6589
714
                            cac_class_tree = proto_tree_add_subtree_format(
6590
714
                                    cac_class_list, tvb, offset, -1,
6591
714
                                    ett_cac_capabilities_class_tree, &cti,
6592
714
                                    "Operating Class %u", cac_class_num);
6593
6594
714
                            proto_tree_add_item(cac_class_tree,
6595
714
                                    hf_ieee1905_cac_capabilities_op_class, tvb,
6596
714
                                    offset, 1, ENC_NA);
6597
714
                            offset += 1;
6598
6599
714
                            channel_cnt = tvb_get_uint8(tvb, offset);
6600
714
                            proto_tree_add_item(cac_class_tree,
6601
714
                                    hf_ieee1905_cac_capabilities_channel_cnt,
6602
714
                                    tvb, offset, 1, ENC_NA);
6603
714
                            offset += 1;
6604
6605
714
                            if (channel_cnt > 0) {
6606
341
                                proto_tree *channel_list = NULL;
6607
6608
341
                                channel_list = proto_tree_add_subtree(
6609
341
                                            cac_class_tree, tvb, offset,
6610
341
                                            channel_cnt,
6611
341
                                            ett_cac_capabilities_channel_list,
6612
341
                                            NULL, "Channel List");
6613
6614
12.2k
                                while (channel_cnt > 0) {
6615
11.8k
                                    proto_tree_add_item(channel_list,
6616
11.8k
                                            hf_ieee1905_cac_capabillity_channel,
6617
11.8k
                                            tvb, offset, 1, ENC_NA);
6618
11.8k
                                    channel_cnt -= 1;
6619
11.8k
                                    offset += 1;
6620
11.8k
                                }
6621
341
                            }
6622
6623
714
                            proto_item_set_len(cti, offset - cac_class_start);
6624
714
                            cac_class_num += 1;
6625
714
                        }
6626
91
                    }
6627
305
                    cac_num += 1;
6628
305
                }
6629
73
                proto_item_set_len(rci, offset - cac_type_start);
6630
73
            }
6631
6632
173
            radio_num += 1;
6633
173
        }
6634
58
        proto_item_set_len(rli, offset - start_offset);
6635
58
    }
6636
6637
60
    return offset;
6638
60
}
6639
6640
/*
6641
 * Dissect a Multi-AP Version TLV
6642
 */
6643
6644
static const range_string multi_ap_version_rvals[] = {
6645
    { 0, 0,   "Reserved" },
6646
    { 1, 1,   "Multi-AP Profile 1" },
6647
    { 2, 2,   "Multi-AP Profile 2" },
6648
    { 3, 3,   "Multi-AP Profile 3" },
6649
    { 4, 255, "Reserved" },
6650
    { 0, 0, NULL }
6651
};
6652
6653
static int
6654
dissect_multi_ap_version(tvbuff_t *tvb, packet_info *pinfo _U_,
6655
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6656
74
{
6657
74
    proto_tree_add_item(tree, hf_ieee1905_multi_ap_version, tvb, offset, 1,
6658
74
                        ENC_NA);
6659
74
    offset += 1;
6660
6661
74
    return offset;
6662
74
}
6663
6664
/*
6665
 * Dissect an R2 AP Capabilities TLV
6666
 */
6667
static const value_string byte_counter_units_vals[] = {
6668
    { 0, "bytes" },
6669
    { 1, "kibibytes (KiB)" },
6670
    { 2, "mebibytes (MiB)" },
6671
    { 3, "reserved" },
6672
    { 0, NULL }
6673
};
6674
6675
static int* const r2_ap_capa_flags[] = {
6676
    &hf_ieee1905_byte_counter_units,
6677
    &hf_ieee1905_ctag_service_prio_flag,
6678
    &hf_ieee1905_dpp_onboarding_flag,
6679
    &hf_ieee1905_traffic_separation_flag,
6680
    &hf_ieee1905_r2_ap_capa_flags_reserved,
6681
    NULL
6682
};
6683
6684
static int
6685
dissect_r2_ap_capability(tvbuff_t *tvb, packet_info *pinfo _U_,
6686
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6687
61
{
6688
61
    proto_tree_add_item(tree, hf_ieee1905_max_total_serv_prio_rules, tvb,
6689
61
                        offset, 1, ENC_NA);
6690
61
    offset += 1;
6691
6692
61
    proto_tree_add_item(tree, hf_ieee1905_r2_ap_capa_reserved, tvb, offset, 1,
6693
61
                        ENC_NA);
6694
61
    offset += 1;
6695
6696
61
    proto_tree_add_bitmask(tree, tvb, offset,
6697
61
                           hf_ieee1905_r2_ap_capa_flags,
6698
61
                           ett_r2_ap_capa_flags,
6699
61
                           r2_ap_capa_flags, ENC_NA);
6700
61
    offset += 1;
6701
6702
61
    proto_tree_add_item(tree, hf_ieee1905_max_vid_count, tvb, offset, 1,
6703
61
                        ENC_NA);
6704
61
    offset += 1;
6705
6706
61
    return offset;
6707
61
}
6708
6709
/*
6710
 * Dissect a Service Prioritization Rule TLV
6711
 */
6712
static int * const default_802_1q_settings_flags[] = {
6713
    &hf_ieee1905_default_802_1q_settings_default_pcp,
6714
    &hf_ieee1905_default_802_1q_settings_reserved,
6715
    NULL
6716
};
6717
6718
static int
6719
dissect_default_802_1q_settings(tvbuff_t *tvb, packet_info *pinfo _U_,
6720
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6721
93
{
6722
93
    proto_tree_add_item(tree, hf_ieee1905_default_802_1q_settings_primary_vlan, tvb,
6723
93
                        offset, 2, ENC_NA);
6724
93
    offset += 2;
6725
6726
93
    proto_tree_add_bitmask(tree, tvb, offset,
6727
93
                           hf_ieee1905_default_802_1q_settings_flags,
6728
93
                           ett_default_802_1q_settings_flags,
6729
93
                           default_802_1q_settings_flags, ENC_NA);
6730
93
    offset += 1;
6731
6732
93
    return offset;
6733
93
}
6734
6735
/*
6736
 * Dissect a Traffic Separation Policy TLV
6737
 */
6738
static int
6739
dissect_traffic_separation_policy(tvbuff_t *tvb, packet_info *pinfo _U_,
6740
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6741
17
{
6742
17
    uint8_t ssid_cnt = tvb_get_uint8(tvb, offset);
6743
17
    uint8_t ssid_num = 0;
6744
17
    proto_tree *ssid_list = NULL;
6745
17
    proto_item *sli = NULL;
6746
17
    unsigned saved_offset = 0;
6747
6748
17
    proto_tree_add_item(tree, hf_ieee1905_traffic_separation_policy_num_ssids,
6749
17
                        tvb, offset, 1, ENC_NA);
6750
17
    offset += 1;
6751
6752
17
    if (ssid_cnt > 0) {
6753
15
        ssid_list = proto_tree_add_subtree(tree, tvb, offset, -1,
6754
15
                                        ett_traffic_separation_ssid_list,
6755
15
                                        &sli, "SSID List");
6756
15
        saved_offset = offset;
6757
15
    }
6758
6759
242
    while (ssid_num < ssid_cnt) {
6760
225
        proto_tree *ssid_tree = NULL;
6761
225
        proto_item *si = NULL;
6762
225
        uint8_t ssid_len = tvb_get_uint8(tvb, offset);
6763
225
        unsigned start_offset = offset;
6764
6765
225
        ssid_tree = proto_tree_add_subtree_format(ssid_list, tvb, offset, -1,
6766
225
                                                  ett_traffic_separation_ssid,
6767
225
                                                  &si, "SSID %u", ssid_num);
6768
6769
225
        proto_tree_add_item(ssid_tree,
6770
225
                            hf_ieee1905_traffic_separation_policy_ssid_len,
6771
225
                            tvb, offset, 1, ENC_NA);
6772
225
        offset += 1;
6773
6774
225
        proto_tree_add_item(ssid_tree,
6775
225
                            hf_ieee1905_traffic_separation_policy_ssid,
6776
225
                            tvb, offset, ssid_len, ENC_ASCII);
6777
225
        offset += ssid_len;
6778
6779
225
        proto_tree_add_item(ssid_tree,
6780
225
                            hf_ieee1905_traffic_separation_policy_vlanid, tvb,
6781
225
                            offset, 2, ENC_BIG_ENDIAN);
6782
225
        offset += 2;
6783
6784
225
        proto_item_set_len(si, offset - start_offset);
6785
225
        ssid_num++;
6786
225
    }
6787
6788
17
    if (ssid_cnt > 0) {
6789
3
        proto_item_set_len(sli, offset - saved_offset);
6790
3
    }
6791
6792
17
    return offset;
6793
17
}
6794
6795
/*
6796
 * Dissect a BSS Configuration Report
6797
 */
6798
static int * const bss_config_report_flags[] = {
6799
    &hf_ieee1905_bss_config_report_backhaul_bss,
6800
    &hf_ieee1905_bss_config_report_fronthaul_bss,
6801
    &hf_ieee1905_bss_config_report_r1_disallowed_status,
6802
    &hf_ieee1905_bss_config_report_r2_disallowed_status,
6803
    &hf_ieee1905_bss_config_report_multiple_bssid_set,
6804
    &hf_ieee1905_bss_config_report_transmitted_bssid,
6805
    &hf_ieee1905_bss_config_report_reserved,
6806
    NULL
6807
};
6808
6809
static const true_false_string tfs_disallowed_allowed = {
6810
    "Disallowed",
6811
    "Allowed"
6812
};
6813
6814
static const true_false_string tfs_configured_not_configured = {
6815
    "Configured",
6816
    "Not-Configured"
6817
};
6818
6819
static const true_false_string tfs_not_inuse_inuse = {
6820
    "Not in use",
6821
    "In use"
6822
};
6823
6824
static const true_false_string tfs_transmitted_non_transmitted = {
6825
    "Transmitted",
6826
    "Non-transmitted"
6827
};
6828
6829
static int
6830
dissect_bss_configuration_report(tvbuff_t *tvb, packet_info *pinfo _U_,
6831
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6832
29
{
6833
29
    uint8_t radio_count = tvb_get_uint8(tvb, offset);
6834
29
    uint8_t radio_id = 0;
6835
29
    unsigned start_offset;
6836
29
    proto_tree *radio_list = NULL;
6837
29
    proto_item *rti = NULL;
6838
6839
29
    proto_tree_add_item(tree, hf_ieee1905_bss_config_report_radio_count, tvb,
6840
29
                        offset, 1, ENC_NA);
6841
29
    offset += 1;
6842
6843
29
    start_offset = offset;
6844
6845
29
    radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
6846
29
                                        ett_bss_config_report_list, &rti,
6847
29
                                        "BSS Configuration Radio List");
6848
151
    while (radio_id < radio_count) {
6849
122
        proto_tree *radio_tree = NULL;
6850
122
        proto_tree *bss_list = NULL;
6851
122
        proto_item *rli = NULL, *bli = NULL;
6852
122
        unsigned radio_saved_offset = offset, bss_start_offset = 0;
6853
122
        uint8_t bss_count, bss_id = 0;
6854
6855
122
        radio_tree = proto_tree_add_subtree_format(radio_list, tvb, offset, -1,
6856
122
                                                   ett_bss_config_report_tree,
6857
122
                                                   &rli, "Radio %d", radio_id);
6858
6859
122
        proto_tree_add_item(radio_tree, hf_ieee1905_bss_config_report_radio_id,
6860
122
                            tvb, offset, 6, ENC_NA);
6861
122
        offset += 6;
6862
6863
122
        bss_count = tvb_get_uint8(tvb, offset);
6864
6865
122
        proto_tree_add_item(radio_tree, hf_ieee1905_bss_config_report_bss_cnt,
6866
122
                            tvb, offset, 1, ENC_NA);
6867
122
        offset += 1;
6868
6869
122
        radio_id++;  /* Increment this before we continue */
6870
6871
        /* If no BSSes on the radio, skip it. Spec says so. */
6872
122
        if (bss_count == 0) {
6873
90
                proto_item_set_len(rli, offset - radio_saved_offset);
6874
90
                continue;
6875
90
        }
6876
6877
32
        bss_list = proto_tree_add_subtree(radio_tree, tvb, offset, -1,
6878
32
                                          ett_bss_config_report_bss_list, &bli,
6879
32
                                          "BSS List");
6880
32
        bss_start_offset = offset;
6881
6882
214
        while (bss_id < bss_count) {
6883
182
                proto_tree *bss_tree = NULL;
6884
182
                proto_item *bti = NULL;
6885
182
                unsigned bss_item_start = offset;
6886
182
                uint8_t ssid_len = 0;
6887
6888
182
                bss_tree = proto_tree_add_subtree_format(bss_list, tvb, offset,
6889
182
                                          -1, ett_bss_config_report_bss_tree,
6890
182
                                          &bti, "BSS %d", bss_id);
6891
6892
182
                proto_tree_add_item(bss_tree, hf_ieee1902_bss_config_report_mac,
6893
182
                                    tvb, offset, 6, ENC_NA);
6894
182
                offset += 6;
6895
6896
182
                proto_tree_add_bitmask(bss_tree, tvb, offset,
6897
182
                                       hf_ieee1905_bss_config_report_flags,
6898
182
                                       ett_bss_config_report_flags,
6899
182
                                       bss_config_report_flags, ENC_NA);
6900
182
                offset += 1;
6901
6902
182
                proto_tree_add_item(bss_tree, hf_ieee1905_bss_config_report_res,
6903
182
                                    tvb, offset, 1, ENC_NA);
6904
182
                offset += 1;
6905
6906
182
                ssid_len = tvb_get_uint8(tvb, offset);
6907
6908
182
                proto_tree_add_item(bss_tree,
6909
182
                                    hf_ieee1902_bss_config_report_ssid_len,
6910
182
                                    tvb, offset, 1, ENC_NA);
6911
182
                offset += 1;
6912
6913
182
                proto_tree_add_item(bss_tree,
6914
182
                            hf_ieee1905_bss_config_report_ssid,
6915
182
                            tvb, offset, ssid_len, ENC_ASCII);
6916
182
                offset += ssid_len;
6917
6918
182
                proto_item_set_len(bti, offset - bss_item_start);
6919
6920
182
                bss_id++;
6921
182
        }
6922
6923
32
        proto_item_set_len(bli, offset - bss_start_offset);
6924
32
        proto_item_set_len(rli, offset - radio_saved_offset);
6925
32
    }
6926
6927
29
    proto_item_set_len(rti, offset - start_offset);
6928
6929
29
    return offset;
6930
29
}
6931
6932
static int
6933
dissect_bssid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
6934
              unsigned offset, uint16_t len _U_)
6935
95
{
6936
95
        proto_tree_add_item(tree, hf_ieee1905_bssid_tlv_bssid, tvb, offset, 6,
6937
95
                            ENC_NA);
6938
95
        offset += 6;
6939
6940
95
        return offset;
6941
95
}
6942
6943
/*
6944
 * Dissect a Service Prioritization Format TLV
6945
 */
6946
static int * const sp_rule_flags_headers[] = {
6947
    &hf_ieee1905_service_prio_rule_add_remove_filter_bit,
6948
    &hf_ieee1905_service_prio_rule_flags_reserved,
6949
    NULL
6950
};
6951
6952
static int * const sp_rule_match_headers[] = {
6953
    &hf_ieee1905_service_prio_rule_match_always,
6954
    &hf_ieee1905_service_prio_rule_match_reserved,
6955
    &hf_ieee1905_service_prio_rule_match_up_in_qos,
6956
    &hf_ieee1905_service_prio_rule_match_up_control_match,
6957
    &hf_ieee1905_service_prio_rule_match_source_mac,
6958
    &hf_ieee1905_service_prio_rule_match_source_mac_sense,
6959
    &hf_ieee1905_service_prio_rule_match_dest_mac,
6960
    &hf_ieee1905_service_prio_rule_match_dest_mac_sense,
6961
    NULL
6962
};
6963
6964
static const true_false_string tfs_add_remove = {
6965
    "Add this filter",
6966
    "Remove this filter"
6967
};
6968
6969
static int
6970
dissect_service_prioritization_rule(tvbuff_t *tvb, packet_info *pinfo _U_,
6971
        proto_tree *tree, unsigned offset, uint16_t len _U_)
6972
123
{
6973
123
    uint8_t flags = 0;
6974
123
    uint8_t match_flags = 0;
6975
6976
123
    proto_tree_add_item(tree, hf_ieee1905_service_prio_rule_id, tvb, offset, 4,
6977
123
                        ENC_BIG_ENDIAN);
6978
123
    offset += 4;
6979
6980
123
    flags = tvb_get_uint8(tvb, offset);
6981
123
    proto_tree_add_bitmask(tree, tvb, offset, hf_ieee1905_service_prio_rule_flags,
6982
123
                           ett_ieee1905_service_prio_rule_flags,
6983
123
                           sp_rule_flags_headers, ENC_NA);
6984
123
    offset += 1;
6985
6986
123
    if ((flags & 0x80) == 0) {
6987
16
        return offset;  /* We are done here ... */
6988
16
    }
6989
6990
107
    proto_tree_add_item(tree, hf_ieee1905_service_prio_rule_precedence, tvb,
6991
107
                        offset, 1, ENC_NA);
6992
107
    offset += 1;
6993
6994
107
    proto_tree_add_item(tree, hf_ieee1905_service_prio_rule_output, tvb, offset,
6995
107
                        1, ENC_NA);
6996
107
    offset += 1;
6997
6998
107
    match_flags = tvb_get_uint8(tvb, offset);
6999
107
    proto_tree_add_bitmask(tree, tvb, offset,
7000
107
                           hf_ieee1905_service_prio_match_flags,
7001
107
                           ett_ieee1905_service_prio_rule_match_flags,
7002
107
                           sp_rule_match_headers, ENC_NA);
7003
107
    offset += 1;
7004
7005
107
    if (match_flags & 0x20) { /* MATCH UP in 802.11 QOS ... */
7006
53
        proto_tree_add_item(tree, hf_ieee1905_service_prio_rule_up_control, tvb,
7007
53
                            offset, 1, ENC_NA);
7008
53
        offset += 1;
7009
53
    }
7010
7011
107
    if (match_flags & 0x08) {
7012
92
        proto_tree_add_item(tree, hf_ieee1905_service_prio_rule_source_mac, tvb,
7013
92
                            offset, 6, ENC_NA);
7014
92
        offset += 6;
7015
92
    }
7016
7017
107
    if (match_flags & 0x02) {
7018
48
        proto_tree_add_item(tree, hf_ieee1905_service_prio_rule_dest_mac, tvb,
7019
48
                            offset, 6, ENC_NA);
7020
48
        offset += 6;
7021
48
   }
7022
7023
107
    return offset;
7024
123
}
7025
7026
/*
7027
 * Dissect a DSCP Mapping Table TLV
7028
 */
7029
static int
7030
dissect_dscp_mapping_table(tvbuff_t *tvb, packet_info *pinfo _U_,
7031
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7032
78
{
7033
78
    int i = 0;
7034
7035
4.70k
    for (i = 0; i < 64; i++) {
7036
4.63k
        uint8_t pcp_val = tvb_get_uint8(tvb, offset);
7037
7038
4.63k
        proto_tree_add_uint_format(tree, hf_ieee1905_dscp_mapping_table_val, tvb,
7039
4.63k
                offset, 1, pcp_val, "DSCP:%d -> PCP: %u", i, pcp_val);
7040
4.63k
        offset += 1;
7041
4.63k
    }
7042
7043
78
    return offset;
7044
78
}
7045
7046
/*
7047
 * Dissect an R2 Error Code TLV
7048
 */
7049
static const range_string r2_error_code_rvals[] = {
7050
    { 0, 0,   "Reserved" },
7051
    { 1, 1,   "Service Prioritization Rule not found" },
7052
    { 2, 2,   "Number of Service Prioritization Rules reached the max supported" },
7053
    { 3, 3,   "Default PCP or VLAN ID not provided" },
7054
    { 4, 4,   "Reserved" },
7055
    { 5, 5,   "Number of unique VID exceeds maximum supported" },
7056
    { 6, 6,   "Reserved" },
7057
    { 7, 7,   "Traffic Separation one combined fronthaul and Profile-1 backhaul unsupported" },
7058
    { 8, 8,   "Traffic Separation on combined Profile-1 backhaul and Profile-2 backhaul unsupported" },
7059
    { 9, 9,   "Service Prioritization Rule not supported" },
7060
    { 10, 255, "Reserved" },
7061
    { 0, 0,   NULL }
7062
};
7063
7064
static int
7065
dissect_r2_error_code(tvbuff_t *tvb, packet_info *pinfo _U_,
7066
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7067
251
{
7068
251
    uint8_t reason_code = tvb_get_uint8(tvb, offset);
7069
7070
251
    proto_tree_add_item(tree, hf_ieee1905_r2_error_reason_code, tvb, offset, 1,
7071
251
                        ENC_NA);
7072
251
    offset += 1;
7073
7074
251
    if (reason_code == 7 || reason_code == 8) {
7075
2
        proto_tree_add_item(tree, hf_ieee1905_r2_error_bssid,
7076
2
                        tvb, offset, 6, ENC_NA);
7077
2
        offset += 6;
7078
2
    }
7079
7080
251
    return offset;
7081
251
}
7082
7083
/*
7084
 * Dissect an AP Radio Advanced Capabilities TLV
7085
 */
7086
7087
static int * const ap_radio_advanced_capa_flags[] = {
7088
    &hf_ieee1905_ap_radio_advanced_capa_backhaul_bss_traffic_sep,
7089
    &hf_ieee1905_ap_radio_advanced_capa_combined_r1_r2_backhaul,
7090
    &hf_ieee1905_ap_radio_advanced_capa_mscs,
7091
    &hf_ieee1905_ap_radio_advanced_capa_scs,
7092
    &hf_ieee1905_ap_radio_advanced_capa_qos_map,
7093
    &hf_ieee1905_ap_radio_advanced_capa_dscp_policy,
7094
    &hf_ieee1905_ap_radio_advanced_capa_qm_scs_traffic_descr,
7095
    &hf_ieee1905_ap_radio_advanced_capa_reserved,
7096
    NULL
7097
};
7098
7099
static int
7100
dissect_ap_radio_advanced_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
7101
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7102
80
{
7103
80
    proto_tree_add_item(tree, hf_ieee1905_ap_radio_advanced_capa_radio_id, tvb,
7104
80
                        offset, 6, ENC_NA);
7105
80
    offset += 6;
7106
7107
80
    proto_tree_add_bitmask(tree, tvb, offset,
7108
80
                           hf_ieee1905_radio_advanced_capa_flags,
7109
80
                           ett_radio_advanced_capa_flags,
7110
80
                           ap_radio_advanced_capa_flags, ENC_NA);
7111
80
    offset += 1;
7112
7113
80
    return offset;
7114
80
}
7115
7116
/*
7117
 * Dissect an Association Status Notification TLV:
7118
 */
7119
static const range_string assoc_status_notif_status_rvals[] = {
7120
    { 0, 0,   "No more associations allowed" },
7121
    { 1, 1,   "Associations allowed" },
7122
    { 2, 255, "Reserved" },
7123
    { 0, 0, NULL }
7124
};
7125
7126
static int
7127
dissect_association_status_notification(tvbuff_t *tvb, packet_info *pinfo _U_,
7128
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7129
18
{
7130
18
    uint8_t num_bssids = tvb_get_uint8(tvb, offset);
7131
7132
18
    proto_tree_add_item(tree, hf_ieee1905_assoc_status_notif_num_bssid, tvb,
7133
18
                        offset, 1, ENC_NA);
7134
18
    offset += 1;
7135
7136
18
    if (num_bssids > 0) {
7137
16
        proto_tree *bssid_list = NULL;
7138
16
        uint8_t bssid_num = 0;
7139
7140
16
        bssid_list = proto_tree_add_subtree(tree, tvb, offset,
7141
16
                                7 * num_bssids,
7142
16
                                ett_assoc_status_notif_bssid_list, NULL,
7143
16
                                "BSSID list");
7144
197
        while (bssid_num < num_bssids) {
7145
181
            proto_tree *bssid_tree = NULL;
7146
7147
181
            bssid_tree = proto_tree_add_subtree_format(bssid_list, tvb, offset,
7148
181
                                7, ett_assoc_status_notif_bssid_tree, NULL,
7149
181
                                "BSSID %u", bssid_num);
7150
7151
181
            proto_tree_add_item(bssid_tree,
7152
181
                                hf_ieee1905_assoc_status_notif_bssid, tvb,
7153
181
                                offset, 6, ENC_NA);
7154
181
            offset += 6;
7155
7156
181
            proto_tree_add_item(bssid_tree,
7157
181
                                hf_ieee1905_assoc_status_notif_status,
7158
181
                                tvb, offset, 1, ENC_NA);
7159
181
            offset += 1;
7160
7161
181
            bssid_num++;
7162
181
        }
7163
16
    }
7164
7165
18
    return offset;
7166
18
}
7167
7168
/*
7169
 * Dissect a Source Info TLV:
7170
 */
7171
static int
7172
dissect_source_info(tvbuff_t *tvb, packet_info *pinfo _U_,
7173
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7174
66
{
7175
66
    proto_tree_add_item(tree, hf_ieee1905_source_info_mac_addr, tvb, offset,
7176
66
                        6, ENC_NA);
7177
66
    offset += 6;
7178
7179
66
    return offset;
7180
66
}
7181
7182
/*
7183
 * Dissect a Tunneled Message Type TLV:
7184
 */
7185
static const range_string tunneled_message_type_rvals[] = {
7186
    { 0, 0,   "Association Request" },
7187
    { 1, 1,   "Re-Association Request" },
7188
    { 2, 2,   "BTM Query" },
7189
    { 3, 3,   "WNM Request" },
7190
    { 4, 4,   "ANQP Request for Neighbor Report" },
7191
    { 5, 5,   "DPP Message" },
7192
    { 6, 255, "Reserved" },
7193
    { 0, 0, NULL }
7194
};
7195
7196
static int
7197
dissect_tunneled_message_type(tvbuff_t *tvb, packet_info *pinfo _U_,
7198
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7199
189
{
7200
189
    proto_tree_add_item(tree, hf_ieee1905_tunneled_message_type, tvb, offset,
7201
189
                        1, ENC_NA);
7202
189
    offset += 1;
7203
7204
189
    return offset;
7205
189
}
7206
7207
/*
7208
 * Dissect a Tunneled TLV:
7209
 */
7210
static int
7211
dissect_tunneled(tvbuff_t *tvb, packet_info *pinfo _U_,
7212
        proto_tree *tree, unsigned offset, uint16_t len)
7213
1
{
7214
1
    proto_tree_add_item(tree, hf_ieee1905_tunneled_data, tvb, offset, len,
7215
1
                        ENC_NA);
7216
7217
    /*
7218
     * TODO: Save the tunnelled type and then dissect the message
7219
     */
7220
1
    offset += len;
7221
7222
1
    return offset;
7223
1
}
7224
7225
/*
7226
 * Dissect an R2 Steering Request TLV:
7227
 */
7228
static int * const r2_steering_flags[] = {
7229
    &hf_ieee1905_r2_steering_request_mode_flag,
7230
    &hf_ieee1905_r2_btm_disassoc_imminent_flag,
7231
    &hf_ieee1905_r2_btm_abridged_flag,
7232
    &hf_ieee1905_r2_steering_req_reserved,
7233
    NULL,
7234
};
7235
7236
static int
7237
dissect_r2_steering_request(tvbuff_t *tvb, packet_info *pinfo _U_,
7238
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7239
36
{
7240
36
    uint8_t sta_list_count = 0;
7241
36
    uint8_t target_count = 0;
7242
36
    proto_item *steer_item = NULL;
7243
7244
36
    proto_tree_add_item(tree, hf_ieee1905_r2_steering_req_src_bssid, tvb,
7245
36
                        offset, 6, ENC_NA);
7246
36
    offset += 6;
7247
7248
36
    proto_tree_add_bitmask(tree, tvb, offset,
7249
36
                           hf_ieee1905_r2_steering_req_flags,
7250
36
                           ett_ieee1905_steering_request_flags,
7251
36
                           r2_steering_flags, ENC_NA);
7252
36
    offset += 1;
7253
7254
36
    proto_tree_add_item(tree, hf_ieee1905_r2_steering_op_window, tvb, offset,
7255
36
                        2, ENC_BIG_ENDIAN);
7256
36
    offset += 2;
7257
7258
36
    proto_tree_add_item(tree, hf_ieee1905_r2_steering_btm_dissasoc_tmr, tvb,
7259
36
                        offset, 2, ENC_BIG_ENDIAN);
7260
36
    offset += 2;
7261
7262
36
    sta_list_count = tvb_get_uint8(tvb, offset);
7263
36
    steer_item = proto_tree_add_item(tree, hf_ieee1905_r2_steering_sta_count,
7264
36
                                     tvb, offset, 1, ENC_NA);
7265
36
    offset += 1;
7266
7267
36
    if (sta_list_count == 0) {
7268
8
        proto_item_append_text(steer_item, " (Steering request applies to all"
7269
8
                                           "AMB capable associated STAs in the"
7270
8
                                           "BSS)");
7271
28
    } else {
7272
28
        proto_tree *amb_list = NULL;
7273
7274
28
        amb_list = proto_tree_add_subtree(tree, tvb, offset, 6 * sta_list_count,
7275
28
                                ett_r2_steering_sta_list, NULL,
7276
28
                                "AMB capable STA list");
7277
412
        while (sta_list_count > 0) {
7278
384
            proto_tree_add_item(amb_list, hf_ieee1905_r2_steering_sta_mac, tvb,
7279
384
                                offset, 6, ENC_NA);
7280
384
            offset += 6;
7281
7282
384
            sta_list_count -= 1;
7283
384
        }
7284
28
    }
7285
7286
36
    target_count = tvb_get_uint8(tvb, offset);
7287
36
    proto_tree_add_item(tree, hf_ieee1905_r2_steering_target_count, tvb, offset,
7288
36
                        1, ENC_NA);
7289
36
    offset += 1;
7290
7291
36
    if (target_count > 0) {
7292
15
        proto_tree *target_list = NULL;
7293
15
        int target_num = 0;
7294
7295
15
        target_list = proto_tree_add_subtree(tree, tvb, offset,
7296
15
                                             9 * target_count,
7297
15
                                             ett_r2_steering_target_list,
7298
15
                                             NULL, "Target BSS list");
7299
174
        while (target_num < target_count) {
7300
159
            proto_tree *target = NULL;
7301
7302
159
            target = proto_tree_add_subtree_format(target_list, tvb, offset, 9,
7303
159
                                                   ett_r2_steering_target,
7304
159
                                                   NULL, "Target BSS %u",
7305
159
                                                   target_num);
7306
7307
159
            proto_tree_add_item(target, hf_ieee1905_r2_steering_target_bssid,
7308
159
                                tvb, offset, 6, ENC_NA);
7309
159
            offset += 6;
7310
7311
159
            proto_tree_add_item(target, hf_ieee1905_r2_steering_target_op_class,
7312
159
                                tvb, offset, 1, ENC_NA);
7313
159
            offset += 1;
7314
7315
159
            proto_tree_add_item(target, hf_ieee1905_r2_steering_target_channel,
7316
159
                                tvb, offset, 1, ENC_NA);
7317
159
            offset += 1;
7318
7319
159
            proto_tree_add_item(target, hf_ieee1905_r2_steering_reason, tvb,
7320
159
                                offset, 1, ENC_NA);
7321
159
            offset += 1;
7322
7323
159
            target_num += 1;
7324
159
        }
7325
15
    }
7326
7327
36
    return offset;
7328
36
}
7329
7330
/*
7331
 * Dissect an Unsuccessful Association Policy TLV:
7332
 */
7333
static int
7334
dissect_unsuccessful_association_policy(tvbuff_t *tvb, packet_info *pinfo _U_,
7335
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7336
44
{
7337
44
    static int * const capabilities[] = {
7338
44
      &hf_ieee1905_rpt_unsuccessful_assoc_report,
7339
44
      NULL,
7340
44
    };
7341
7342
44
    proto_tree_add_bitmask(tree, tvb, offset,
7343
44
                           hf_ieee1905_rpt_unsuccessful_associations,
7344
44
                           ett_ieee1905_unsuccessful_associations,
7345
44
                           capabilities, ENC_NA);
7346
44
    offset++;
7347
7348
44
    proto_tree_add_item(tree, hf_ieee1905_max_reporting_rate,
7349
44
                        tvb, offset, 4, ENC_NA);
7350
44
    offset += 4;
7351
7352
44
    return offset;
7353
44
}
7354
7355
/*
7356
 * Dissect a Metric Collection Interval TLV:
7357
 */
7358
static int
7359
dissect_metric_collection_interval(tvbuff_t *tvb, packet_info *pinfo _U_,
7360
        proto_tree *tree, unsigned offset, uint16_t len)
7361
2
{
7362
2
    proto_tree_add_item(tree, hf_ieee1905_metric_collection_interval,
7363
2
                        tvb, offset, 4, ENC_NA);
7364
2
    offset += len;
7365
7366
2
    return offset;
7367
2
}
7368
7369
/*
7370
 * Dissect a Radio Metrics TLV:
7371
 */
7372
static int
7373
dissect_radio_metrics(tvbuff_t *tvb, packet_info *pinfo _U_,
7374
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7375
42
{
7376
42
    proto_tree_add_item(tree, hf_ieee1905_radio_metrics_radio_id,
7377
42
                        tvb, offset, 6, ENC_NA);
7378
42
    offset += 6;
7379
7380
42
    proto_tree_add_item(tree, hf_ieee1905_radio_metrics_noise, tvb,
7381
42
                        offset, 1, ENC_NA);
7382
42
    offset += 1;
7383
7384
42
    proto_tree_add_item(tree, hf_ieee1905_radio_metrics_transmit, tvb,
7385
42
                        offset, 1, ENC_NA);
7386
42
    offset += 1;
7387
7388
42
    proto_tree_add_item(tree, hf_ieee1905_radio_metrics_receive_self, tvb,
7389
42
                        offset, 1, ENC_NA);
7390
42
    offset += 1;
7391
7392
42
    proto_tree_add_item(tree, hf_ieee1905_radio_metrics_receive_other, tvb,
7393
42
                        offset, 1, ENC_NA);
7394
42
    offset += 1;
7395
7396
42
    return offset;
7397
42
}
7398
7399
/*
7400
 * Dissect an AP Extended Metrics TLV:
7401
 */
7402
static int
7403
dissect_ap_extended_metrics(tvbuff_t *tvb, packet_info *pinfo _U_,
7404
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7405
37
{
7406
37
    proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_bssid, tvb,
7407
37
                        offset, 6, ENC_NA);
7408
37
    offset += 6;
7409
7410
37
    proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_unicast_sent, tvb,
7411
37
                        offset, 4, ENC_NA);
7412
37
    offset += 4;
7413
7414
37
    proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_unicast_rcvd,
7415
37
                        tvb, offset, 4, ENC_NA);
7416
37
    offset += 4;
7417
7418
37
    proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_multicast_sent,
7419
37
                        tvb, offset, 4, ENC_NA);
7420
37
    offset += 4;
7421
7422
37
    proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_multicast_rcvd,
7423
37
                        tvb, offset, 4, ENC_NA);
7424
37
    offset += 4;
7425
7426
37
    proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_bcast_sent,
7427
37
                        tvb, offset, 4, ENC_NA);
7428
37
    offset += 4;
7429
7430
37
    proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_bcast_rcvd,
7431
37
                        tvb, offset, 4, ENC_NA);
7432
37
    offset += 4;
7433
7434
37
    return offset;
7435
37
}
7436
7437
/*
7438
 * Dissect an Status Code TLV:
7439
 */
7440
static int
7441
dissect_status_code(tvbuff_t *tvb, packet_info *pinfo _U_,
7442
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7443
101
{
7444
101
    proto_tree_add_item(tree, hf_ieee1905_status_code_status, tvb,
7445
101
                        offset, 2, ENC_NA);
7446
101
    offset += 2;
7447
7448
101
    return offset;
7449
101
}
7450
7451
/*
7452
 * Dissect a Disassociation Reason Code TLV:
7453
 */
7454
static int
7455
dissect_disassociation_reason_code(tvbuff_t *tvb, packet_info *pinfo _U_,
7456
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7457
106
{
7458
106
    proto_tree_add_item(tree, hf_ieee1905_disassociation_reason_code, tvb,
7459
106
                        offset, 2, ENC_BIG_ENDIAN);
7460
106
    offset += 2;
7461
7462
106
    return offset;
7463
106
}
7464
7465
/*
7466
 * Dissect a Backhaul STA Radio Capabilitoes TLV:
7467
 */
7468
static int * const backhaul_sta_radio_capa_flags[] = {
7469
    &hf_ieee1905_backhaul_sta_radio_capa_mac_included,
7470
    &hf_ieee1905_backhaul_sta_radio_capa_reserved,
7471
    NULL
7472
};
7473
7474
static int
7475
dissect_backhaul_sta_radio_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
7476
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7477
102
{
7478
102
    uint8_t mac_addr_included = 0;
7479
7480
102
    proto_tree_add_item(tree, hf_ieee1905_backhaul_sta_radio_id, tvb, offset,
7481
102
                        6, ENC_NA);
7482
102
    offset += 6;
7483
7484
102
    mac_addr_included = tvb_get_uint8(tvb, offset);
7485
102
    proto_tree_add_bitmask(tree, tvb, offset,
7486
102
                           hf_ieee1905_backhaul_sta_radio_capabilities,
7487
102
                           ett_backhaul_sta_radio_capa_flags,
7488
102
                           backhaul_sta_radio_capa_flags, ENC_NA);
7489
102
    offset += 1;
7490
7491
102
    if (mac_addr_included & 0x80) {
7492
84
        proto_tree_add_item(tree, hf_ieee1905_backhaul_sta_addr, tvb, offset,
7493
84
                            6, ENC_NA);
7494
84
        offset += 6;
7495
84
    }
7496
7497
102
    return offset;
7498
102
}
7499
7500
/*
7501
 * Dissect an AKM Suite Capabilities TLV:
7502
 */
7503
static int
7504
dissect_akm_suite_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
7505
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7506
37
{
7507
37
    uint8_t backhaul_akm_suite_count = 0;
7508
37
    uint8_t fronthaul_akm_suite_count = 0;
7509
7510
37
    backhaul_akm_suite_count = tvb_get_uint8(tvb, offset);
7511
37
    proto_tree_add_item(tree, hf_ieee1905_backhaul_akm_suite_capa_count, tvb,
7512
37
                        offset, 1, ENC_NA);
7513
37
    offset += 1;
7514
7515
37
    if (backhaul_akm_suite_count > 0) {
7516
33
        uint8_t backhaul_suite_num = 0;
7517
33
        proto_tree *backhaul_suite_list = NULL;
7518
7519
33
        backhaul_suite_list = proto_tree_add_subtree(tree, tvb, offset,
7520
33
                                backhaul_akm_suite_count * 4,
7521
33
                                ett_backhaul_akm_suite_list, NULL,
7522
33
                                "Backhaul AKM Suite list");
7523
7524
1.13k
        while (backhaul_suite_num < backhaul_akm_suite_count) {
7525
1.10k
            proto_tree *backhaul_akm_suite = NULL;
7526
7527
1.10k
            backhaul_akm_suite = proto_tree_add_subtree_format(backhaul_suite_list,
7528
1.10k
                                tvb, offset, 4, ett_backhaul_akm_suite, NULL,
7529
1.10k
                                "Backhaul AKM Suite %u", backhaul_suite_num++);
7530
7531
1.10k
            proto_tree_add_item(backhaul_akm_suite,
7532
1.10k
                                hf_ieee1905_akm_backhaul_suite_oui, tvb,
7533
1.10k
                                offset, 3, ENC_NA);
7534
1.10k
            offset += 3;
7535
7536
1.10k
            proto_tree_add_item(backhaul_akm_suite,
7537
1.10k
                                hf_ieee1905_akm_backhaul_suite_type, tvb,
7538
1.10k
                                offset, 1, ENC_NA);
7539
1.10k
            offset += 1;
7540
1.10k
        }
7541
33
    }
7542
7543
37
    fronthaul_akm_suite_count = tvb_get_uint8(tvb, offset);
7544
37
    proto_tree_add_item(tree, hf_ieee1905_fronthaul_akm_suite_capa_count, tvb,
7545
37
                        offset, 1, ENC_NA);
7546
37
    offset += 1;
7547
7548
37
    if (fronthaul_akm_suite_count > 0) {
7549
21
        uint8_t fronthaul_suite_num = 0;
7550
21
        proto_tree *fronthaul_suite_list = NULL;
7551
7552
21
        fronthaul_suite_list = proto_tree_add_subtree(tree, tvb, offset,
7553
21
                                fronthaul_akm_suite_count * 4,
7554
21
                                ett_fronthaul_akm_suite_list, NULL,
7555
21
                                "Fronthaul AKM Suite list");
7556
7557
673
        while (fronthaul_suite_num < fronthaul_akm_suite_count) {
7558
652
            proto_tree *fronthaul_akm_suite = NULL;
7559
7560
652
            fronthaul_akm_suite = proto_tree_add_subtree_format(fronthaul_suite_list,
7561
652
                                tvb, offset, 4, ett_fronthaul_akm_suite, NULL,
7562
652
                                "Fronthaul AKM Suite %u", fronthaul_suite_num++);
7563
7564
652
            proto_tree_add_item(fronthaul_akm_suite,
7565
652
                                hf_ieee1905_akm_fronthaul_suite_oui, tvb,
7566
652
                                offset, 3, ENC_NA);
7567
652
            offset += 3;
7568
7569
652
            proto_tree_add_item(fronthaul_akm_suite,
7570
652
                                hf_ieee1905_akm_fronthaul_suite_type, tvb,
7571
652
                                offset, 1, ENC_NA);
7572
652
            offset += 1;
7573
652
        }
7574
21
    }
7575
7576
37
    return offset;
7577
37
}
7578
7579
static const true_false_string tfs_dpp_frame_indicator = {
7580
    "GAS frame",
7581
    "DPP public action frame"
7582
};
7583
7584
static int * const ieee1905_encap_dpp_flags[] = {
7585
  &hf_ieee1905_dpp_encap_enrollee_mac_present,
7586
  &hf_ieee1905_dpp_encap_reserved,
7587
  &hf_ieee1905_dpp_encap_frame_type_flag,
7588
  &hf_ieee1905_dpp_encap_reserved2,
7589
  NULL
7590
};
7591
7592
static int
7593
dissect_1905_encap_dpp(tvbuff_t *tvb, packet_info *pinfo,
7594
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7595
19
{
7596
19
    uint8_t flags = tvb_get_uint8(tvb, offset);
7597
19
    uint16_t frame_length;
7598
7599
19
    proto_tree_add_bitmask(tree, tvb, offset,
7600
19
                           hf_ieee1905_encap_dpp_flags,
7601
19
                           ett_1905_encap_dpp_flags,
7602
19
                           ieee1905_encap_dpp_flags, ENC_NA);
7603
19
    offset += 1;
7604
7605
19
    if (flags & 0x80) { /* Enrollee MAC present */
7606
15
        proto_tree_add_item(tree, hf_ieee1905_encap_dpp_sta_mac, tvb, offset,
7607
15
                            6, ENC_NA);
7608
15
        offset += 6;
7609
15
    }
7610
7611
19
    proto_tree_add_item(tree, hf_ieee1905_dpp_encap_frame_type, tvb, offset, 1,
7612
19
                        ENC_NA);
7613
19
    offset += 1;
7614
7615
19
    frame_length = tvb_get_ntohs(tvb, offset);
7616
19
    proto_tree_add_item(tree, hf_ieee1905_dpp_encap_frame_length, tvb, offset,
7617
19
                        2, ENC_BIG_ENDIAN);
7618
19
    offset += 2;
7619
7620
19
    if (flags & 0x20) {
7621
4
        uint8_t code;
7622
4
        tvbuff_t *new_tvb;
7623
7624
4
        code = tvb_get_uint8(tvb, offset);
7625
4
        proto_tree_add_item(tree, hf_ieee1905_dpp_message_public_action, tvb,
7626
4
                            offset, 1, ENC_NA);
7627
4
        offset += 1;
7628
7629
4
        new_tvb = tvb_new_subset_length(tvb, offset, frame_length - 1);
7630
7631
4
        add_ff_action_public_fields(tree, new_tvb, pinfo, 0, code);
7632
7633
4
        offset += frame_length - 1;
7634
15
    } else {
7635
15
        tvbuff_t *new_tvb;
7636
7637
15
        proto_tree_add_item(tree, hf_ieee1905_dpp_encap_public_action, tvb,
7638
15
                            offset, 1, ENC_NA);
7639
15
        offset += 1;
7640
7641
15
        proto_tree_add_item(tree, hf_ieee1905_dpp_encap_dpp_oui, tvb, offset,
7642
15
                            3, ENC_NA);
7643
15
        offset += 3;
7644
7645
15
        proto_tree_add_item(tree, hf_ieee1905_dpp_encap_dpp_subtype, tvb,
7646
15
                            offset, 1, ENC_NA);
7647
15
        offset += 1;
7648
7649
15
        new_tvb = tvb_new_subset_length(tvb, offset, frame_length - 5);
7650
15
        dissect_wifi_dpp_public_action(new_tvb, pinfo, tree, NULL);
7651
7652
15
        offset += (frame_length - 5);
7653
15
    }
7654
7655
19
    return offset;
7656
19
}
7657
7658
/*
7659
 * Dissect a 1905 Encap EAPOL TLV:
7660
 */
7661
static int
7662
dissect_1905_encap_eapol(tvbuff_t *tvb, packet_info *pinfo,
7663
        proto_tree *tree, unsigned offset, uint16_t len)
7664
3
{
7665
3
    offset += call_dissector(eapol_handle,
7666
3
                             tvb_new_subset_length(tvb, offset, len),
7667
3
                             pinfo, tree);
7668
7669
3
    return offset;
7670
3
}
7671
7672
/*
7673
 * Dissect a DPP Bootstrapping URI Notification TLV:
7674
 */
7675
static int
7676
dissect_dpp_bootstrapping_uri_notification(tvbuff_t *tvb, packet_info *pinfo _U_,
7677
        proto_tree *tree, unsigned offset, uint16_t len)
7678
2
{
7679
2
    uint16_t uri_len;
7680
7681
2
    proto_tree_add_item(tree, hf_ieee1905_dpp_bootstrapping_uri_radio_id,
7682
2
                        tvb, offset, 6, ENC_NA);
7683
2
    offset += 6;
7684
7685
2
    proto_tree_add_item(tree, hf_ieee1905_dpp_bootstrapping_uri_local_mac_addr,
7686
2
                        tvb, offset, 6, ENC_NA);
7687
2
    offset += 6;
7688
7689
2
    proto_tree_add_item(tree, hf_ieee1905_dpp_bootstrapping_uri_bsta_mac_addr,
7690
2
                        tvb, offset, 6, ENC_NA);
7691
2
    offset += 6;
7692
7693
    /* Assume we got the whole URI */
7694
2
    uri_len = len - 18;
7695
2
    proto_tree_add_item(tree, hf_ieee1905_dpp_bootstrapping_uri_received,
7696
2
                        tvb, offset, uri_len, ENC_ASCII);
7697
2
    offset += uri_len;
7698
7699
2
    return offset;
7700
2
}
7701
7702
/*
7703
 * Dissect a DPP CCE Indication TLV:
7704
 */
7705
static int
7706
dissect_dpp_cce_indication(tvbuff_t *tvb, packet_info *pinfo _U_,
7707
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7708
201
{
7709
201
    proto_tree_add_item(tree, hf_ieee1905_dpp_advertise_cce_flag, tvb, offset,
7710
201
                        1, ENC_NA);
7711
201
    offset += 1;
7712
7713
201
    return offset;
7714
201
}
7715
7716
/*
7717
 * Dissect a DPP Chirp Value TLV:
7718
 */
7719
static int * const dpp_chirp_headers[] = {
7720
    &hf_ieee1905_dpp_chirp_enrollee_mac_addr_present,
7721
    &hf_ieee1905_dpp_chirp_hash_validity,
7722
    &hf_ieee1905_dpp_chirp_reserved,
7723
    NULL
7724
};
7725
7726
static const true_false_string tfs_chirp_hash_validity_bit = {
7727
    "Establish DPP authentication state pertaining to this hash value",
7728
    "Purge any DPP authentication state pertaining to this hash value"
7729
};
7730
7731
static int
7732
dissect_dpp_chirp_value(tvbuff_t *tvb, packet_info *pinfo _U_,
7733
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7734
33
{
7735
33
    uint8_t flags = tvb_get_uint8(tvb, offset);
7736
33
    uint8_t hash_length = 0;
7737
7738
33
    proto_tree_add_bitmask_with_flags(tree, tvb, offset,
7739
33
                        hf_ieee1905_dpp_chirp_value_flags,
7740
33
                        ett_ieee1905_dpp_chirp, dpp_chirp_headers, ENC_NA,
7741
33
                        BMT_NO_APPEND);
7742
33
    offset += 1;
7743
7744
33
    if (flags & 0x80) {
7745
29
        proto_tree_add_item(tree, hf_ieee1905_dpp_chirp_enrollee_mac_addr, tvb,
7746
29
                            offset, 6, ENC_NA);
7747
29
        offset += 6;
7748
29
    }
7749
7750
33
    hash_length = tvb_get_uint8(tvb, offset);
7751
33
    proto_tree_add_item(tree, hf_ieee1905_dpp_chirp_value_hash_length, tvb,
7752
33
                        offset, 1, ENC_NA);
7753
33
    offset += 1;
7754
7755
33
    if (hash_length) {
7756
29
      proto_tree_add_item(tree, hf_ieee1905_dpp_chirp_value_hash_value, tvb,
7757
29
                          offset, hash_length, ENC_NA);
7758
29
      offset += hash_length;
7759
29
    }
7760
7761
33
    return offset;
7762
33
}
7763
7764
static int
7765
dissect_device_inventory(tvbuff_t *tvb, packet_info *pinfo _U_,
7766
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7767
14
{
7768
14
    uint8_t lsn = tvb_get_uint8(tvb, offset);
7769
14
    unsigned lsv = 0, lee = 0, num_radios = 0;
7770
7771
14
    proto_tree_add_item(tree, hf_ieee1905_dev_inventory_lsn, tvb, offset, 1,
7772
14
                        ENC_NA);
7773
14
    offset += 1;
7774
7775
14
    proto_tree_add_item(tree, hf_ieee1905_dev_inventory_serial, tvb, offset,
7776
14
                        lsn, ENC_ASCII);
7777
14
    offset += lsn;
7778
7779
14
    lsv = tvb_get_uint8(tvb, offset);
7780
14
    proto_tree_add_item(tree, hf_ieee1905_dev_inventory_lsv, tvb, offset, 1,
7781
14
                        ENC_NA);
7782
14
    offset += 1;
7783
7784
14
    proto_tree_add_item(tree, hf_ieee1905_dev_inventory_sw_vers, tvb, offset,
7785
14
                        lsv, ENC_ASCII);
7786
14
    offset += lsv;
7787
7788
14
    lee = tvb_get_uint8(tvb, offset);
7789
14
    proto_tree_add_item(tree, hf_ieee1905_dev_inventory_lee, tvb, offset, 1,
7790
14
                        ENC_NA);
7791
14
    offset += 1;
7792
7793
14
    proto_tree_add_item(tree, hf_ieee1905_dev_inventory_exec_env, tvb, offset,
7794
14
                        lee, ENC_ASCII);
7795
14
    offset += lee;
7796
7797
14
    num_radios = tvb_get_uint8(tvb, offset);
7798
14
    proto_tree_add_item(tree, hf_ieee1905_dev_inventory_num_radios, tvb, offset,
7799
14
                        1, ENC_NA);
7800
14
    offset += 1;
7801
7802
14
    if (num_radios > 0) {
7803
11
        uint8_t radio_id = 0;
7804
11
        proto_tree *radio_list = NULL;
7805
11
        proto_item *rli = NULL;
7806
11
        unsigned start_list_offset = offset;
7807
7808
11
        radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
7809
11
                                            ett_device_inventory_radio_list,
7810
11
                                            &rli, "Radio List");
7811
7812
62
        while (num_radios > 0) {
7813
51
            uint8_t lcv = 0;
7814
51
            proto_tree *radio_tree = NULL;
7815
51
            proto_item *rti = NULL;
7816
51
            unsigned start_tree_offset = offset;
7817
7818
51
            radio_tree = proto_tree_add_subtree_format(radio_list, tvb, offset,
7819
51
                                            -1, ett_device_inventory_radio_tree,
7820
51
                                            &rti, "Radio %u", radio_id);
7821
7822
51
            proto_tree_add_item(radio_tree, hf_ieee1905_dev_inventory_radio_id,
7823
51
                                tvb, offset, 6, ENC_NA);
7824
51
            offset += 6;
7825
7826
51
            lcv = tvb_get_uint8(tvb, offset);
7827
51
            proto_tree_add_item(radio_tree, hf_ieee1905_dev_inventory_lcv, tvb,
7828
51
                                offset, 1, ENC_NA);
7829
51
            offset += 1;
7830
7831
51
            proto_tree_add_item(radio_tree, hf_ieee1905_dev_inventory_chp_ven,
7832
51
                                tvb, offset, lcv, ENC_ASCII);
7833
51
            offset += lcv;
7834
7835
51
            proto_item_set_len(rti, offset - start_tree_offset);
7836
51
            num_radios -= 1;
7837
51
            radio_id += 1;
7838
51
        }
7839
11
        proto_item_set_len(rli, offset - start_list_offset);
7840
11
    }
7841
7842
14
    return offset;
7843
14
}
7844
7845
static int
7846
dissect_bss_configuration_request(tvbuff_t *tvb, packet_info *pinfo _U_,
7847
        proto_tree *tree, unsigned offset, uint16_t len)
7848
3
{
7849
3
    proto_tree_add_item(tree, hf_ieee1905_bss_configuration_request, tvb,
7850
3
                        offset, len, ENC_NA);
7851
3
    offset += len;
7852
7853
3
    return offset;
7854
3
}
7855
7856
static int
7857
dissect_bss_configuration_response(tvbuff_t *tvb, packet_info *pinfo _U_,
7858
        proto_tree *tree, unsigned offset, uint16_t len)
7859
1
{
7860
1
    proto_tree_add_item(tree, hf_ieee1905_bss_configuration_response, tvb,
7861
1
                        offset, len, ENC_NA);
7862
1
    offset += len;
7863
7864
1
    return offset;
7865
1
}
7866
7867
static int
7868
dissect_dpp_message(tvbuff_t *tvb, packet_info *pinfo,
7869
        proto_tree *tree, unsigned offset, uint16_t len)
7870
5
{
7871
5
    uint8_t code;
7872
5
    tvbuff_t *new_tvb;
7873
7874
5
    code = tvb_get_uint8(tvb, offset);
7875
5
    proto_tree_add_item(tree, hf_ieee1905_dpp_message_public_action, tvb,
7876
5
                        offset, 1, ENC_NA);
7877
5
    offset += 1;
7878
7879
5
    new_tvb = tvb_new_subset_length(tvb, offset, len - 1);
7880
7881
5
    add_ff_action_public_fields(tree, new_tvb, pinfo, 0, code);
7882
7883
5
    offset += len -1;
7884
7885
5
    return offset;
7886
5
}
7887
7888
static int * const spatial_reuse_bss_color[] = {
7889
    &hf_ieee1905_spatial_reuse_reserved,
7890
    &hf_ieee1905_spatial_reuse_bss_color,
7891
    NULL
7892
};
7893
7894
static int * const spatial_reuse_hesiga_flags[] = {
7895
    &hf_ieee1905_spatial_reuse_reserved2,
7896
    &hf_ieee1905_spatial_reuse_hesiga_value15_allowed,
7897
    &hf_ieee1905_spatial_reuse_srg_info_valid,
7898
    &hf_ieee1905_spatial_reuse_non_srg_offset_valid,
7899
    &hf_ieee1905_spatial_reuse_reserved3,
7900
    &hf_ieee1905_spatial_reuse_psr_disallowed,
7901
    NULL
7902
};
7903
7904
241
#define SRG_INFO_VALID       0x08
7905
241
#define NON_SRG_OFFSET_VALID 0x04
7906
7907
static int
7908
dissect_spatial_reuse_request(tvbuff_t *tvb, packet_info *pinfo _U_,
7909
        proto_tree *tree, unsigned offset, uint16_t len _U_)
7910
135
{
7911
135
    uint8_t flags2;
7912
7913
135
    proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_req_radio_id,
7914
135
                        tvb, offset, 6, ENC_NA);
7915
135
    offset += 6;
7916
7917
135
    proto_tree_add_bitmask(tree, tvb, offset,
7918
135
                           hf_ieee1905_spatial_reuse_color_flags,
7919
135
                           ett_ieee1905_spatial_reuse_color,
7920
135
                           spatial_reuse_bss_color, ENC_NA);
7921
135
    offset += 1;
7922
7923
135
    flags2 = tvb_get_uint8(tvb, offset);
7924
135
    proto_tree_add_bitmask(tree, tvb, offset,
7925
135
                           hf_ieee1905_spatial_reuse_hesiga_flags,
7926
135
                           ett_ieee1905_spatial_reuse_hesiga,
7927
135
                           spatial_reuse_hesiga_flags, ENC_NA);
7928
135
    offset += 1;
7929
7930
135
    if (flags2 & NON_SRG_OFFSET_VALID) {
7931
29
        proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_non_srg_obsspd_max_offset,
7932
29
                            tvb, offset, 1, ENC_NA);
7933
29
        offset += 1;
7934
106
    } else {
7935
106
        proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_not_valid1, tvb,
7936
106
                            offset, 1, ENC_NA);
7937
106
        offset += 1;
7938
106
    }
7939
7940
135
    if (flags2 & SRG_INFO_VALID) {
7941
86
        proto_tree_add_item(tree,
7942
86
                            hf_ieee1905_spatial_reuse_srg_obsspd_min_offset,
7943
86
                            tvb, offset, 1, ENC_NA);
7944
86
        offset += 1;
7945
7946
86
        proto_tree_add_item(tree,
7947
86
                            hf_ieee1905_spatial_reuse_srg_obsspd_max_offset,
7948
86
                            tvb, offset, 1, ENC_NA);
7949
86
        offset += 1;
7950
7951
86
        proto_tree_add_item(tree,
7952
86
                            hf_ieee1905_spatial_reuse_srg_bss_color_bitmap,
7953
86
                            tvb, offset, 8, ENC_BIG_ENDIAN);
7954
86
        offset += 8;
7955
7956
86
        proto_tree_add_item(tree,
7957
86
                            hf_ieee1905_spatial_reuse_srg_partial_bssid_bitmap,
7958
86
                            tvb, offset, 8, ENC_BIG_ENDIAN);
7959
86
        offset += 8;
7960
86
    } else {
7961
49
        proto_tree_add_item(tree,
7962
49
                            hf_ieee1905_spatial_reuse_not_valid2, tvb,
7963
49
                            offset, 1, ENC_NA);
7964
49
        offset += 1;
7965
7966
49
        proto_tree_add_item(tree,
7967
49
                            hf_ieee1905_spatial_reuse_not_valid3, tvb,
7968
49
                            offset, 1, ENC_NA);
7969
49
        offset += 1;
7970
7971
49
        proto_tree_add_item(tree,
7972
49
                            hf_ieee1905_spatial_reuse_not_valid4, tvb,
7973
49
                            offset, 8, ENC_BIG_ENDIAN);
7974
49
        offset += 8;
7975
7976
49
        proto_tree_add_item(tree,
7977
49
                            hf_ieee1905_spatial_reuse_not_valid5, tvb,
7978
49
                            offset, 8, ENC_BIG_ENDIAN);
7979
49
        offset += 8;
7980
49
    }
7981
7982
135
    proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_reserved4, tvb,
7983
135
                        offset, 2, ENC_BIG_ENDIAN);
7984
135
    offset += 2;
7985
7986
135
    return offset;
7987
135
}
7988
7989
static int * const spatial_reuse_rep_bss_color[] = {
7990
    &hf_ieee1905_spatial_reuse_rep_reserved,
7991
    &hf_ieee1905_spatial_reuse_rep_partial_bss_color,
7992
    &hf_ieee1905_spatial_reuse_rep_bss_color,
7993
    NULL
7994
};
7995
7996
static int * const spatial_reuse_rep_hesiga_flags[] = {
7997
    &hf_ieee1905_spatial_reuse_rep_reserved2,
7998
    &hf_ieee1905_spatial_reuse_rep_hesiga_value15_allowed,
7999
    &hf_ieee1905_spatial_reuse_rep_srg_info_valid,
8000
    &hf_ieee1905_spatial_reuse_rep_non_srg_offset_valid,
8001
    &hf_ieee1905_spatial_reuse_rep_reserved3,
8002
    &hf_ieee1905_spatial_reuse_rep_psr_disallowed,
8003
    NULL
8004
};
8005
8006
static int
8007
dissect_spatial_reuse_report(tvbuff_t *tvb, packet_info *pinfo _U_,
8008
        proto_tree *tree, unsigned offset, uint16_t len _U_)
8009
106
{
8010
106
    uint8_t flags2;
8011
8012
106
    proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_rep_radio_id,
8013
106
                        tvb, offset, 6, ENC_NA);
8014
106
    offset += 6;
8015
8016
106
    proto_tree_add_bitmask(tree, tvb, offset,
8017
106
                           hf_ieee1905_spatial_reuse_rep_color_flags,
8018
106
                           ett_ieee1905_spatial_reuse_rep_color,
8019
106
                           spatial_reuse_rep_bss_color, ENC_NA);
8020
106
    offset += 1;
8021
8022
106
    flags2 = tvb_get_uint8(tvb, offset);
8023
106
    proto_tree_add_bitmask(tree, tvb, offset,
8024
106
                           hf_ieee1905_spatial_reuse_rep_hesiga_flags,
8025
106
                           ett_ieee1905_spatial_reuse_rep_hesiga,
8026
106
                           spatial_reuse_rep_hesiga_flags, ENC_NA);
8027
106
    offset += 1;
8028
8029
106
    if (flags2 & NON_SRG_OFFSET_VALID) {
8030
24
        proto_tree_add_item(tree,
8031
24
                            hf_ieee1905_spatial_reuse_rep_non_srg_obsspd_max_offset, tvb,
8032
24
                            offset, 1, ENC_NA);
8033
24
        offset += 1;
8034
82
    } else {
8035
82
        proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_rep_not_valid1, tvb,
8036
82
                            offset, 1, ENC_NA);
8037
82
        offset += 1;
8038
82
    }
8039
8040
106
    if (flags2 & SRG_INFO_VALID) {
8041
65
        proto_tree_add_item(tree,
8042
65
                            hf_ieee1905_spatial_reuse_rep_srg_obsspd_min_offset,
8043
65
                            tvb, offset, 1, ENC_NA);
8044
65
        offset += 1;
8045
8046
65
        proto_tree_add_item(tree,
8047
65
                            hf_ieee1905_spatial_reuse_rep_srg_obsspd_max_offset,
8048
65
                            tvb, offset, 1, ENC_NA);
8049
65
        offset += 1;
8050
8051
65
        proto_tree_add_item(tree,
8052
65
                            hf_ieee1905_spatial_reuse_rep_srg_bss_color_bitmap,
8053
65
                            tvb, offset, 8, ENC_BIG_ENDIAN);
8054
65
        offset += 8;
8055
8056
65
        proto_tree_add_item(tree,
8057
65
                            hf_ieee1905_spatial_reuse_rep_srg_partial_bssid_bitmap,
8058
65
                            tvb, offset, 8, ENC_BIG_ENDIAN);
8059
65
        offset += 8;
8060
65
    } else {
8061
41
        proto_tree_add_item(tree,
8062
41
                            hf_ieee1905_spatial_reuse_rep_not_valid2, tvb,
8063
41
                            offset, 1, ENC_NA);
8064
41
        offset += 1;
8065
8066
41
        proto_tree_add_item(tree,
8067
41
                            hf_ieee1905_spatial_reuse_rep_not_valid3, tvb,
8068
41
                            offset, 1, ENC_NA);
8069
41
        offset += 1;
8070
8071
41
        proto_tree_add_item(tree,
8072
41
                            hf_ieee1905_spatial_reuse_rep_not_valid4, tvb,
8073
41
                            offset, 8, ENC_BIG_ENDIAN);
8074
41
        offset += 8;
8075
8076
41
        proto_tree_add_item(tree,
8077
41
                            hf_ieee1905_spatial_reuse_rep_not_valid5, tvb,
8078
41
                            offset, 8, ENC_BIG_ENDIAN);
8079
41
        offset += 8;
8080
41
    }
8081
8082
106
    proto_tree_add_item(tree,
8083
106
                        hf_ieee1905_spatial_reuse_rep_nbor_bss_color_bitmap,
8084
106
                        tvb, offset, 8, ENC_BIG_ENDIAN);
8085
106
    offset += 8;
8086
8087
106
    proto_tree_add_item(tree,
8088
106
                        hf_ieee1905_spatial_reuse_rep_reserved4, tvb, offset,
8089
106
                        2, ENC_BIG_ENDIAN);
8090
106
    offset += 2;
8091
8092
106
    return offset;
8093
106
}
8094
8095
static const range_string spatial_reuse_response_rvals[] = {
8096
  { 0x00, 0x00, "Accept" },
8097
  { 0x01, 0x01, "Decline because radio does not support requested configuration" },
8098
  { 0x02, 0xFF, "Reserved" },
8099
  { 0, 0, NULL }
8100
};
8101
8102
static int
8103
dissect_spatial_reuse_config_response(tvbuff_t *tvb, packet_info *pinfo _U_,
8104
        proto_tree *tree, unsigned offset, uint16_t len _U_)
8105
63
{
8106
63
    proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_config_radio_id,
8107
63
                        tvb, offset, 6, ENC_NA);
8108
63
    offset += 6;
8109
8110
63
    proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_config_response,
8111
63
                        tvb, offset, 1, ENC_NA);
8112
63
    offset += 1;
8113
8114
63
    return offset;
8115
63
}
8116
8117
static int
8118
dissect_qos_management_policy(tvbuff_t *tvb, packet_info *pinfo _U_,
8119
        proto_tree *tree, unsigned offset, uint16_t len _U_)
8120
32
{
8121
32
    uint8_t num_mscs_disallowed = tvb_get_uint8(tvb, offset);
8122
32
    uint8_t num_scs_disallowed = 0;
8123
32
    proto_tree *mscs_list = NULL;
8124
32
    proto_tree *scs_list = NULL;
8125
8126
32
    proto_tree_add_item(tree, hf_ieee1905_qos_mgmt_policy_mscs_disallowed,
8127
32
                        tvb, offset, 1, ENC_NA);
8128
32
    offset += 1;
8129
8130
32
    mscs_list = proto_tree_add_subtree(tree, tvb, offset,
8131
32
                                       num_mscs_disallowed * 6,
8132
32
                                       ett_qos_mgmt_policy_mscs_list,
8133
32
                                       NULL, "MSCS List");
8134
537
    while (num_mscs_disallowed) {
8135
505
        proto_tree_add_item(mscs_list, hf_ieee1905_qos_mgmt_mscs_disallow_sta,
8136
505
                            tvb, offset, 6, ENC_NA);
8137
8138
505
        offset += 6;
8139
505
        num_mscs_disallowed--;
8140
505
    }
8141
8142
32
    num_scs_disallowed = tvb_get_uint8(tvb, offset);
8143
32
    proto_tree_add_item(tree, hf_ieee1905_qos_mgmt_policy_scs_disallowed,
8144
32
                        tvb, offset, 1, ENC_NA);
8145
32
    offset += 1;
8146
8147
32
    scs_list = proto_tree_add_subtree(tree, tvb, offset,
8148
32
                                      num_scs_disallowed * 6,
8149
32
                                      ett_qos_mgmt_policy_scs_list,
8150
32
                                      NULL, "SCS List");
8151
8152
495
    while (num_scs_disallowed) {
8153
463
        proto_tree_add_item(scs_list, hf_ieee1905_qos_mgmt_scs_disallow_sta,
8154
463
                            tvb, offset, 6, ENC_NA);
8155
8156
463
        offset += 6;
8157
463
        num_scs_disallowed--;
8158
463
    }
8159
8160
32
    return offset;
8161
32
}
8162
8163
static int
8164
dissect_qos_management_descriptor(tvbuff_t *tvb, packet_info *pinfo,
8165
        proto_tree *tree, unsigned offset, uint16_t len)
8166
44
{
8167
44
    uint16_t desc_size = 0;
8168
8169
44
    proto_tree_add_item(tree, hf_ieee1905_qos_mgmt_desc_qmid, tvb, offset,
8170
44
                        2, ENC_BIG_ENDIAN);
8171
44
    offset += 2;
8172
44
    len -= 2;
8173
8174
44
    proto_tree_add_item(tree, hf_ieee1905_qos_mgmt_desc_bssid, tvb, offset,
8175
44
                        6, ENC_NA);
8176
44
    offset += 6;
8177
44
    len -= 6;
8178
8179
44
    proto_tree_add_item(tree, hf_ieee1905_qos_mgmt_desc_client_mac, tvb,
8180
44
                        offset, 6, ENC_NA);
8181
44
    offset += 6;
8182
44
    len -= 6;
8183
8184
    /* There is MSCS, SCS or QoS element */
8185
794
    while (len > 0) {
8186
750
        desc_size = add_tagged_field(pinfo, tree, tvb, offset, 0, NULL, 0, NULL);
8187
750
        offset += desc_size;
8188
750
        len -= desc_size;
8189
750
    }
8190
8191
44
    return offset;
8192
44
}
8193
8194
static int * const controller_capa_header[] = {
8195
    &hf_ieee1905_controller_capa_reserved,
8196
    &hf_ieee1905_controller_capa_early_ap_capa,
8197
    &hf_ieee1905_controller_capa_kbmb_counter,
8198
    NULL
8199
};
8200
8201
static int
8202
dissect_controller_capability(tvbuff_t *tvb, packet_info *pinfo _U_,
8203
        proto_tree *tree, unsigned offset, uint16_t len)
8204
2
{
8205
2
    proto_tree_add_bitmask(tree, tvb, offset,
8206
2
                           hf_ieee1905_controller_capa_flags,
8207
2
                           ett_ieee1905_controller_capa,
8208
2
                           controller_capa_header, ENC_NA);
8209
2
    offset += len;
8210
8211
2
    return offset;
8212
2
}
8213
8214
/*
8215
 * Dissect a Wi-Fi 7 agent capability TLV:
8216
 */
8217
static int* const wifi_7_agent_capabilities_flags_headers[] = {
8218
    &hf_ieee1905_wifi_7_agent_capabilities_flags_ap_max_links,
8219
    &hf_ieee1905_wifi_7_agent_capabilities_flags_sta_max_links,
8220
    &hf_ieee1905_wifi_7_agent_capabilities_flags_ttl_mapping_cap,
8221
    &hf_ieee1905_wifi_7_agent_capabilities_flags_reserved,
8222
    NULL
8223
};
8224
8225
static int* const wifi_7_agent_capabilities_radio_flags_headers[] = {
8226
    &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_str_support,
8227
    &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_nstr_support,
8228
    &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_emlsr_support,
8229
    &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_emlmr_support,
8230
    &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_reserved1,
8231
    &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_str_support,
8232
    &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_nstr_support,
8233
    &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_emlsr_support,
8234
    &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_emlmr_support,
8235
    &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_reserved2,
8236
    NULL
8237
};
8238
8239
static int* const wifi_7_agent_capabilities_radio_record_flags_headers[] = {
8240
    &hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags_freq_separation,
8241
    &hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags_reserved,
8242
    NULL
8243
};
8244
8245
static const value_string tid_to_link_mapping_capability_vals[] = {
8246
    { 0, "The Agent does not support TID-to-Link mapping" },
8247
    { 1, "The Agent supports the mapping of each TID to the same or different link set" },
8248
    { 2, "reserved" },
8249
    { 3, "The Agent only supports the mapping of all TIDs to the same link set" },
8250
    { 0, NULL }
8251
};
8252
8253
static unsigned
8254
wifi_7_agent_cap_add_record(proto_tree *tree, int hf,
8255
        tvbuff_t *tvb, const char *list_name, unsigned offset)
8256
347
{
8257
347
    proto_tree *record_list = NULL;
8258
347
    proto_item *rli = NULL;
8259
347
    uint32_t record_count = 0, record_num = 0;
8260
347
    unsigned record_list_start = 0;
8261
8262
347
    proto_tree_add_item_ret_uint(tree, hf, tvb, offset, 1, ENC_NA, &record_count);
8263
347
    offset += 1;
8264
8265
347
    if (record_count == 0) {
8266
286
        return offset;
8267
286
    }
8268
8269
61
    record_list = proto_tree_add_subtree(tree, tvb, offset, -1,
8270
61
                                         ett_wifi_7_agent_capabilities_radio_record_list,
8271
61
                                         &rli, list_name);
8272
8273
61
    record_list_start = offset;
8274
8275
767
    while (record_num < record_count) {
8276
706
        proto_tree *record_tree = NULL;
8277
706
        proto_item *ri = NULL;
8278
8279
706
        record_tree = proto_tree_add_subtree_format(record_list, tvb, offset, -1,
8280
706
                                                    ett_wifi_7_agent_capabilities_radio_record,
8281
706
                                                    &ri, "Record %u", record_num);
8282
8283
706
        proto_tree_add_item(record_tree, hf_ieee1905_wifi_7_agent_capabilities_radio_record_id,
8284
706
                            tvb, offset, 6, ENC_NA);
8285
706
        offset += 6;
8286
8287
706
        proto_tree_add_bitmask(record_tree, tvb, offset,
8288
706
                               hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags,
8289
706
                               ett_wifi_7_agent_capabilities_radio_record_flags,
8290
706
                               wifi_7_agent_capabilities_radio_record_flags_headers, ENC_NA);
8291
706
        offset++;
8292
8293
706
        record_num++;
8294
706
    }
8295
8296
61
    proto_item_set_len(rli, offset - record_list_start);
8297
8298
61
    return offset;
8299
347
}
8300
8301
static int
8302
dissect_wifi_7_agent_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
8303
        proto_tree *tree, unsigned offset, uint16_t len _U_)
8304
36
{
8305
36
    proto_tree *radio_list = NULL;
8306
36
    proto_item *rli = NULL;
8307
36
    uint32_t radio_count = 0, radio_num = 0;
8308
36
    unsigned radio_list_start = 0;
8309
8310
36
    proto_tree_add_item(tree, hf_ieee1905_wifi_7_agent_capabilities_max_num_mlds, tvb, offset,
8311
36
                        1, ENC_NA);
8312
36
    offset++;
8313
8314
36
    proto_tree_add_bitmask(tree, tvb, offset,
8315
36
                           hf_ieee1905_wifi_7_agent_capabilities_flags,
8316
36
                           ett_wifi_7_agent_capabilities_flags,
8317
36
                           wifi_7_agent_capabilities_flags_headers, ENC_NA);
8318
36
    offset += 2;
8319
8320
36
    proto_tree_add_item(tree, hf_ieee1905_wifi_7_agent_capabilities_reserved,
8321
36
                        tvb, offset, 13, ENC_NA);
8322
36
    offset += 13;
8323
8324
36
    proto_tree_add_item_ret_uint(tree, hf_ieee1905_wifi_7_agent_capabilities_radio_num,
8325
36
                                 tvb, offset, 1, ENC_NA, &radio_count);
8326
36
    offset++;
8327
8328
36
    radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
8329
36
                                        ett_wifi_7_agent_capabilities_radio_list,
8330
36
                                        &rli, "Radio List");
8331
8332
36
    radio_list_start = offset;
8333
8334
102
    while (radio_num < radio_count) {
8335
66
        proto_tree *radio_tree = NULL;
8336
66
        proto_item *ri = NULL;
8337
8338
66
        radio_tree = proto_tree_add_subtree_format(radio_list, tvb, offset,
8339
66
                                                   -1, ett_wifi_7_agent_capabilities_radio,
8340
66
                                                   &ri, "Radio %u", radio_num);
8341
8342
66
        proto_tree_add_item(radio_tree, hf_ieee1905_wifi_7_agent_capabilities_radio_id,
8343
66
                            tvb, offset, 6, ENC_NA);
8344
66
        offset += 6;
8345
8346
66
        proto_tree_add_item(radio_tree, hf_ieee1905_wifi_7_agent_capabilities_radio_reserved,
8347
66
                            tvb, offset, 24, ENC_NA);
8348
66
        offset += 24;
8349
8350
66
        proto_tree_add_bitmask(radio_tree, tvb, offset,
8351
66
                               hf_ieee1905_wifi_7_agent_capabilities_radio_flags,
8352
66
                               ett_wifi_7_agent_capabilities_radio_flags,
8353
66
                               wifi_7_agent_capabilities_radio_flags_headers, ENC_NA);
8354
66
        offset += 2;
8355
8356
66
        offset = wifi_7_agent_cap_add_record(radio_tree,
8357
66
                                             hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_str_records,
8358
66
                                             tvb, "AP STR Record List", offset);
8359
8360
66
        offset = wifi_7_agent_cap_add_record(radio_tree,
8361
66
                                             hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_nstr_records,
8362
66
                                             tvb, "AP NSTR Record List", offset);
8363
8364
66
        offset = wifi_7_agent_cap_add_record(radio_tree,
8365
66
                                             hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_emlsr_records,
8366
66
                                             tvb, "AP EMLSR Record List", offset);
8367
8368
66
        offset = wifi_7_agent_cap_add_record(radio_tree,
8369
66
                                             hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_emlmr_records,
8370
66
                                             tvb, "AP EMLMR Record List", offset);
8371
8372
66
        offset = wifi_7_agent_cap_add_record(radio_tree,
8373
66
                                             hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_str_records,
8374
66
                                             tvb, "bSTA STR Record List", offset);
8375
8376
66
        offset = wifi_7_agent_cap_add_record(radio_tree,
8377
66
                                             hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_nstr_records,
8378
66
                                             tvb, "bSTA NSTR Record List", offset);
8379
8380
66
        offset = wifi_7_agent_cap_add_record(radio_tree,
8381
66
                                             hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_emlsr_records,
8382
66
                                             tvb, "bSTA EMLSR Record List", offset);
8383
8384
66
        offset = wifi_7_agent_cap_add_record(radio_tree,
8385
66
                                             hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_emlmr_records,
8386
66
                                             tvb, "bSTA EMLMR Record List", offset);
8387
8388
66
        radio_num++;
8389
66
    }
8390
8391
36
    proto_item_set_len(rli, offset - radio_list_start);
8392
8393
36
    return offset;
8394
36
}
8395
8396
/*
8397
 * Dissect an Agent AP MLD Configuration TLV:
8398
 */
8399
static int* const agent_ap_mld_configuration_ap_mld_flags_headers[] = {
8400
    &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags_ap_mld_mac_addr_valid,
8401
    &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags_reserved,
8402
    NULL
8403
};
8404
8405
static int* const agent_ap_mld_configuration_ap_mld_flags2_headers[] = {
8406
    &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_str,
8407
    &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_nstr,
8408
    &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_emlsr,
8409
    &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_emlmr,
8410
    &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_reserved,
8411
    NULL
8412
};
8413
8414
static int* const agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_headers[] = {
8415
    &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_affiliated_ap_mac_addr_valid,
8416
    &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_link_id_valid,
8417
    &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_reserved,
8418
    NULL
8419
};
8420
8421
static int
8422
dissect_agent_agent_ap_mld_configuration(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8423
        proto_tree *tree, unsigned offset, uint16_t len _U_)
8424
28
{
8425
28
    proto_tree *ap_mld_list = NULL;
8426
28
    proto_item *amli = NULL;
8427
28
    uint32_t ap_mld_count = 0, ap_mld_num = 0;
8428
28
    unsigned ap_mld_list_start = 0;
8429
8430
28
    proto_tree_add_item_ret_uint(tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_num,
8431
28
                                 tvb, offset, 1, ENC_NA, &ap_mld_count);
8432
28
    offset++;
8433
8434
28
    ap_mld_list = proto_tree_add_subtree(tree, tvb, offset, -1,
8435
28
                                         ett_agent_ap_mld_configuration_ap_mld_list,
8436
28
                                         &amli, "AP MLD List");
8437
8438
28
    ap_mld_list_start = offset;
8439
8440
115
    while (ap_mld_num < ap_mld_count) {
8441
87
        proto_tree *ap_mld_tree = NULL;
8442
87
        proto_item *ami = NULL;
8443
87
        uint32_t ssid_len;
8444
87
        proto_tree *aff_ap_list = NULL;
8445
87
        proto_item *aali = NULL;
8446
87
        uint32_t aff_ap_count = 0, aff_ap_num = 0;
8447
87
        unsigned aff_ap_list_start = 0;
8448
8449
87
        ap_mld_tree = proto_tree_add_subtree_format(ap_mld_list, tvb, offset,
8450
87
                                                    -1, ett_agent_ap_mld_configuration_ap_mld,
8451
87
                                                    &ami, "AP MLD %u", ap_mld_num);
8452
8453
87
        proto_tree_add_bitmask(ap_mld_tree, tvb, offset,
8454
87
                               hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags,
8455
87
                               ett_agent_ap_mld_configuration_ap_mld_flags,
8456
87
                               agent_ap_mld_configuration_ap_mld_flags_headers, ENC_NA);
8457
87
        offset++;
8458
8459
87
        proto_tree_add_item_ret_uint(ap_mld_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_ssid_len,
8460
87
                                     tvb, offset, 1, ENC_NA, &ssid_len);
8461
87
        offset++;
8462
8463
87
        proto_tree_add_item(ap_mld_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_ssid,
8464
87
                            tvb, offset, ssid_len, ENC_ASCII);
8465
87
        offset += ssid_len;
8466
8467
87
        proto_tree_add_item(ap_mld_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_mac_addr,
8468
87
                            tvb, offset, 6, ENC_NA);
8469
87
        offset += 6;
8470
8471
87
        proto_tree_add_bitmask(ap_mld_tree, tvb, offset,
8472
87
                               hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2,
8473
87
                               ett_agent_ap_mld_configuration_ap_mld_flags2,
8474
87
                               agent_ap_mld_configuration_ap_mld_flags2_headers, ENC_NA);
8475
87
        offset++;
8476
8477
87
        proto_tree_add_item(ap_mld_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_reserved, tvb, offset,
8478
87
                            20, ENC_NA);
8479
87
        offset += 20;
8480
8481
87
        proto_tree_add_item_ret_uint(ap_mld_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_num,
8482
87
                                     tvb, offset, 1, ENC_NA, &aff_ap_count);
8483
87
        offset++;
8484
8485
87
        aff_ap_list = proto_tree_add_subtree(ap_mld_tree, tvb, offset, -1,
8486
87
                                             ett_agent_ap_mld_configuration_ap_mld_affiliated_ap_list,
8487
87
                                             &aali, "Affiliated AP List");
8488
8489
87
        aff_ap_list_start = offset;
8490
8491
239
        while (aff_ap_num < aff_ap_count) {
8492
152
            proto_tree *aff_ap_tree = NULL;
8493
152
            proto_item *aai = NULL;
8494
8495
152
            aff_ap_tree = proto_tree_add_subtree_format(aff_ap_list, tvb, offset,
8496
152
                                                        -1, ett_agent_ap_mld_configuration_ap_mld_affiliated_ap,
8497
152
                                                        &aai, "Affiliated AP %u", aff_ap_num);
8498
8499
152
            proto_tree_add_bitmask(aff_ap_tree, tvb, offset,
8500
152
                                   hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags,
8501
152
                                   ett_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags,
8502
152
                                   agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_headers, ENC_NA);
8503
152
            offset++;
8504
8505
152
            proto_tree_add_item(aff_ap_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_radio_id,
8506
152
                                tvb, offset, 6, ENC_NA);
8507
152
            offset += 6;
8508
8509
152
            proto_tree_add_item(aff_ap_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_mac_addr,
8510
152
                                tvb, offset, 6, ENC_NA);
8511
152
            offset += 6;
8512
8513
152
            proto_tree_add_item(aff_ap_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_link_id,
8514
152
                                tvb, offset, 1, ENC_NA);
8515
152
            offset++;
8516
8517
152
            proto_tree_add_item(aff_ap_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_reserved,
8518
152
                                tvb, offset, 18, ENC_NA);
8519
152
            offset += 18;
8520
8521
152
            aff_ap_num++;
8522
152
        }
8523
8524
87
        proto_item_set_len(aali, offset - aff_ap_list_start);
8525
87
        ap_mld_num++;
8526
87
    }
8527
8528
28
    proto_item_set_len(amli, offset - ap_mld_list_start);
8529
8530
28
    return offset;
8531
28
}
8532
8533
/*
8534
 * Dissect a Backhaul STA MLD Configuration TLV:
8535
 */
8536
static int* const backhaul_sta_mld_configuration_flags_headers[] = {
8537
    &hf_ieee1905_backhaul_sta_mld_configuration_flags_bsta_mld_mac_addr_valid,
8538
    &hf_ieee1905_backhaul_sta_mld_configuration_flags_ap_mld_mac_addr_valid,
8539
    &hf_ieee1905_backhaul_sta_mld_configuration_flags_reserved,
8540
    NULL
8541
};
8542
8543
static int* const backhaul_sta_mld_configuration_flags2_headers[] = {
8544
    &hf_ieee1905_backhaul_sta_mld_configuration_flags2_str,
8545
    &hf_ieee1905_backhaul_sta_mld_configuration_flags2_nstr,
8546
    &hf_ieee1905_backhaul_sta_mld_configuration_flags2_emlsr,
8547
    &hf_ieee1905_backhaul_sta_mld_configuration_flags2_emlmr,
8548
    &hf_ieee1905_backhaul_sta_mld_configuration_flags2_reserved,
8549
    NULL
8550
};
8551
8552
static int* const backhaul_sta_mld_configuration_affiliated_bsta_flags_headers[] = {
8553
    &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags_affiliated_bsta_mac_addr_valid,
8554
    &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags_reserved,
8555
    NULL
8556
};
8557
8558
static int
8559
dissect_backhaul_sta_mld_configuration(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8560
        proto_tree *tree, unsigned offset, uint16_t len _U_)
8561
19
{
8562
19
    proto_tree *aff_bsta_list = NULL;
8563
19
    proto_item *abli = NULL;
8564
19
    uint32_t aff_bsta_count = 0, aff_bsta_num = 0;
8565
19
    unsigned aff_bsta_list_start = 0;
8566
8567
19
    proto_tree_add_bitmask(tree, tvb, offset,
8568
19
                           hf_ieee1905_backhaul_sta_mld_configuration_flags,
8569
19
                           ett_backhaul_sta_mld_configuration_flags,
8570
19
                           backhaul_sta_mld_configuration_flags_headers, ENC_NA);
8571
19
    offset++;
8572
8573
19
    proto_tree_add_item(tree, hf_ieee1905_backhaul_sta_mld_configuration_bsta_mld_mac_addr,
8574
19
                        tvb, offset, 6, ENC_NA);
8575
19
    offset += 6;
8576
8577
19
    proto_tree_add_item(tree, hf_ieee1905_backhaul_sta_mld_configuration_ap_mld_mac_addr,
8578
19
                        tvb, offset, 6, ENC_NA);
8579
19
    offset += 6;
8580
8581
19
    proto_tree_add_bitmask(tree, tvb, offset,
8582
19
                           hf_ieee1905_backhaul_sta_mld_configuration_flags2,
8583
19
                           ett_backhaul_sta_mld_configuration_flags2,
8584
19
                           backhaul_sta_mld_configuration_flags2_headers, ENC_NA);
8585
19
    offset++;
8586
8587
19
    proto_tree_add_item(tree, hf_ieee1905_backhaul_sta_mld_configuration_reserved,
8588
19
                        tvb, offset, 17, ENC_NA);
8589
19
    offset += 17;
8590
8591
19
    proto_tree_add_item_ret_uint(tree, hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_num,
8592
19
                                 tvb, offset, 1, ENC_NA, &aff_bsta_count);
8593
19
    offset++;
8594
8595
19
    aff_bsta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
8596
19
                                           ett_backhaul_sta_mld_configuration_affiliated_bsta_list,
8597
19
                                           &abli, "Affiliated bSTA List");
8598
8599
19
    aff_bsta_list_start = offset;
8600
8601
117
    while (aff_bsta_num < aff_bsta_count) {
8602
98
        proto_tree *aff_bsta_tree = NULL;
8603
98
        proto_item *abi = NULL;
8604
8605
98
        aff_bsta_tree = proto_tree_add_subtree_format(aff_bsta_list, tvb, offset,
8606
98
                                                      -1, ett_backhaul_sta_mld_configuration_affiliated_bsta,
8607
98
                                                       &abi, "Affiliated bSTA %u", aff_bsta_num);
8608
8609
98
        proto_tree_add_bitmask(aff_bsta_tree, tvb, offset,
8610
98
                               hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags,
8611
98
                               ett_backhaul_sta_mld_configuration_affiliated_bsta_flags,
8612
98
                               backhaul_sta_mld_configuration_affiliated_bsta_flags_headers, ENC_NA);
8613
98
        offset++;
8614
8615
98
        proto_tree_add_item(aff_bsta_tree, hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_radio_id,
8616
98
                            tvb, offset, 6, ENC_NA);
8617
98
        offset += 6;
8618
8619
98
        proto_tree_add_item(aff_bsta_tree, hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_mac_addr,
8620
98
                            tvb, offset, 6, ENC_NA);
8621
98
        offset += 6;
8622
8623
98
        proto_tree_add_item(aff_bsta_tree, hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_reserved,
8624
98
                            tvb, offset, 19, ENC_NA);
8625
98
        offset += 19;
8626
8627
98
        aff_bsta_num++;
8628
98
    }
8629
8630
19
    proto_item_set_len(abli, offset - aff_bsta_list_start);
8631
8632
19
    return offset;
8633
19
}
8634
8635
/*
8636
 * Dissect a Associated STA MLD Configuration TLV:
8637
 */
8638
static int* const associated_sta_mld_configuration_flags_headers[] = {
8639
    &hf_ieee1905_associated_sta_mld_configuration_flags_str,
8640
    &hf_ieee1905_associated_sta_mld_configuration_flags_nstr,
8641
    &hf_ieee1905_associated_sta_mld_configuration_flags_emlsr,
8642
    &hf_ieee1905_associated_sta_mld_configuration_flags_emlmr,
8643
    &hf_ieee1905_associated_sta_mld_configuration_flags_reserved,
8644
    NULL
8645
};
8646
8647
static int
8648
dissect_associated_sta_mld_configuration(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8649
        proto_tree *tree, unsigned offset, uint16_t len _U_)
8650
17
{
8651
17
    proto_tree *aff_sta_list = NULL;
8652
17
    proto_item *asli = NULL;
8653
17
    uint32_t aff_sta_count = 0, aff_sta_num = 0;
8654
17
    unsigned aff_sta_list_start = 0;
8655
8656
17
    proto_tree_add_item(tree, hf_ieee1905_associated_sta_mld_configuration_sta_mld_mac_addr,
8657
17
                        tvb, offset, 6, ENC_NA);
8658
17
    offset += 6;
8659
8660
17
    proto_tree_add_item(tree, hf_ieee1905_associated_sta_mld_configuration_ap_mld_mac_addr,
8661
17
                        tvb, offset, 6, ENC_NA);
8662
17
    offset += 6;
8663
8664
17
    proto_tree_add_bitmask(tree, tvb, offset,
8665
17
                           hf_ieee1905_associated_sta_mld_configuration_flags,
8666
17
                           ett_associated_sta_mld_configuration_flags,
8667
17
                           associated_sta_mld_configuration_flags_headers, ENC_NA);
8668
17
    offset++;
8669
8670
17
    proto_tree_add_item(tree, hf_ieee1905_associated_sta_mld_configuration_reserved,
8671
17
                        tvb, offset, 18, ENC_NA);
8672
17
    offset += 18;
8673
8674
17
    proto_tree_add_item_ret_uint(tree, hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_num,
8675
17
                                 tvb, offset, 1, ENC_NA, &aff_sta_count);
8676
17
    offset++;
8677
8678
17
    aff_sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
8679
17
                                          ett_associated_sta_mld_configuration_affiliated_sta_list,
8680
17
                                          &asli, "Affiliated STA List");
8681
8682
17
    aff_sta_list_start = offset;
8683
8684
105
    while (aff_sta_num < aff_sta_count) {
8685
88
        proto_tree *aff_sta_tree = NULL;
8686
88
        proto_item *asi = NULL;
8687
8688
88
        aff_sta_tree = proto_tree_add_subtree_format(aff_sta_list, tvb, offset,
8689
88
                                                     -1, ett_associated_sta_mld_configuration_affiliated_sta,
8690
88
                                                      &asi, "Affiliated STA %u", aff_sta_num);
8691
8692
88
        proto_tree_add_item(aff_sta_tree, hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_bssid,
8693
88
                            tvb, offset, 6, ENC_NA);
8694
88
        offset += 6;
8695
8696
88
        proto_tree_add_item(aff_sta_tree, hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_mac_addr,
8697
88
                            tvb, offset, 6, ENC_NA);
8698
88
        offset += 6;
8699
8700
88
        proto_tree_add_item(aff_sta_tree, hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_reserved,
8701
88
                            tvb, offset, 19, ENC_NA);
8702
88
        offset += 19;
8703
8704
88
        aff_sta_num++;
8705
88
    }
8706
8707
17
    proto_item_set_len(asli, offset - aff_sta_list_start);
8708
8709
17
    return offset;
8710
17
}
8711
8712
/*
8713
 * Dissect an Affiliated STA Metrics TLV:
8714
 */
8715
static int
8716
dissect_affiliated_sta_metrics(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8717
        proto_tree *tree, unsigned offset, uint16_t len)
8718
3
{
8719
3
    unsigned end = offset + len;
8720
8721
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_sta_mac_addr,
8722
3
                        tvb, offset, 6, ENC_NA);
8723
3
    offset += 6;
8724
8725
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_bytes_sent,
8726
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8727
3
    offset += 4;
8728
8729
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_bytes_rcvd,
8730
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8731
3
    offset += 4;
8732
8733
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_packets_sent,
8734
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8735
3
    offset += 4;
8736
8737
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_packets_rcvd,
8738
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8739
3
    offset += 4;
8740
8741
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_packets_sent_errors,
8742
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8743
3
    offset += 4;
8744
8745
    /* EM R6 adds N (>=0) reserved bytes */
8746
3
    if (end > offset) {
8747
2
        proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_reserved,
8748
2
                            tvb, offset, end - offset, ENC_NA);
8749
8750
2
        offset = end;
8751
2
    }
8752
8753
3
    return offset;
8754
3
}
8755
8756
/*
8757
 * Dissect an Affiliated AP Metrics TLV:
8758
 */
8759
static int
8760
dissect_affiliated_ap_metrics(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8761
        proto_tree *tree, unsigned offset, uint16_t len)
8762
3
{
8763
3
    unsigned end = offset + len;
8764
8765
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_bssid,
8766
3
                        tvb, offset, 6, ENC_NA);
8767
3
    offset += 6;
8768
8769
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_packets_sent,
8770
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8771
3
    offset += 4;
8772
8773
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_packets_rcvd,
8774
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8775
3
    offset += 4;
8776
8777
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_packets_sent_errors,
8778
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8779
3
    offset += 4;
8780
8781
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_ucast_bytes_sent,
8782
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8783
3
    offset += 4;
8784
8785
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_ucast_bytes_rcvd,
8786
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8787
3
    offset += 4;
8788
8789
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_mcast_bytes_sent,
8790
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8791
3
    offset += 4;
8792
8793
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_mcast_bytes_rcvd,
8794
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8795
3
    offset += 4;
8796
8797
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_bcast_bytes_sent,
8798
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8799
3
    offset += 4;
8800
8801
3
    proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_bcast_bytes_rcvd,
8802
3
                        tvb, offset, 4, ENC_BIG_ENDIAN);
8803
3
    offset += 4;
8804
8805
    /* EM R6 adds N (>=0) reserved bytes */
8806
3
    if (end > offset) {
8807
2
        proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_reserved,
8808
2
                            tvb, offset, end - offset, ENC_NA);
8809
8810
2
        offset = end;
8811
2
    }
8812
8813
3
    return offset;
8814
3
}
8815
8816
/*
8817
 * Dissect an EHT Operations TLV:
8818
 */
8819
static int* const eht_operations_radio_bss_flags_headers[] = {
8820
    &hf_ieee1905_eht_operations_radio_bss_flags_eht_operation_information_valid,
8821
    &hf_ieee1905_eht_operations_radio_bss_flags_disabled_subchannel_valid,
8822
    &hf_ieee1905_eht_operations_radio_bss_flags_eht_default_pe_duration,
8823
    &hf_ieee1905_eht_operations_radio_bss_flags_group_addr_bu_indication_limit,
8824
    &hf_ieee1905_eht_operations_radio_bss_flags_group_addr_bu_indication_exponent,
8825
    &hf_ieee1905_eht_operations_radio_bss_flags_reserved,
8826
    NULL
8827
};
8828
8829
static int
8830
dissect_eht_operations_tlv(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8831
        proto_tree *tree, unsigned offset, uint16_t len _U_)
8832
34
{
8833
34
    proto_tree *radio_list = NULL;
8834
34
    proto_item *rli = NULL;
8835
34
    uint32_t radio_count = 0, radio_num = 0;
8836
34
    unsigned radio_list_start = 0;
8837
8838
34
    proto_tree_add_item(tree, hf_ieee1905_eht_operations_reserved,
8839
34
                        tvb, offset, 32, ENC_NA);
8840
34
    offset += 32;
8841
8842
34
    proto_tree_add_item_ret_uint(tree, hf_ieee1905_eht_operations_radio_num,
8843
34
                                 tvb, offset, 1, ENC_NA, &radio_count);
8844
34
    offset++;
8845
8846
34
    radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
8847
34
                                        ett_eht_operations_radio_list,
8848
34
                                        &rli, "Radio List");
8849
8850
34
    radio_list_start = offset;
8851
8852
120
    while (radio_num < radio_count) {
8853
86
        proto_tree *radio_tree = NULL;
8854
86
        proto_item *ri = NULL;
8855
86
        proto_tree *bss_list = NULL;
8856
86
        proto_item *bli = NULL;
8857
86
        uint32_t bss_count = 0, bss_num = 0;
8858
86
        unsigned bss_list_start = 0;
8859
8860
86
        radio_tree = proto_tree_add_subtree_format(radio_list, tvb, offset,
8861
86
                                                   -1, ett_eht_operations_radio,
8862
86
                                                    &ri, "Radio %u", radio_num);
8863
8864
86
        proto_tree_add_item(radio_tree, hf_ieee1905_eht_operations_radio_id,
8865
86
                            tvb, offset, 6, ENC_NA);
8866
86
        offset += 6;
8867
8868
86
        proto_tree_add_item_ret_uint(radio_tree, hf_ieee1905_eht_operations_radio_bss_num,
8869
86
                                     tvb, offset, 1, ENC_NA, &bss_count);
8870
86
        offset++;
8871
8872
86
        bss_list = proto_tree_add_subtree(radio_tree, tvb, offset, -1,
8873
86
                                          ett_eht_operations_radio_bss_list,
8874
86
                                          &bli, "BSS List");
8875
8876
86
        bss_list_start = offset;
8877
8878
217
        while (bss_num < bss_count) {
8879
131
            proto_tree *bss_tree = NULL;
8880
131
            proto_item *bi = NULL;
8881
8882
131
            bss_tree = proto_tree_add_subtree_format(bss_list, tvb, offset,
8883
131
                                                     -1, ett_eht_operations_radio_bss,
8884
131
                                                     &bi, "BSS %u", bss_num);
8885
8886
131
            proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_bssid,
8887
131
                                tvb, offset, 6, ENC_NA);
8888
131
            offset += 6;
8889
8890
131
            proto_tree_add_bitmask(bss_tree, tvb, offset,
8891
131
                                   hf_ieee1905_eht_operations_radio_bss_flags,
8892
131
                                   ett_eht_operations_radio_bss_flags,
8893
131
                                   eht_operations_radio_bss_flags_headers, ENC_NA);
8894
131
            offset++;
8895
8896
131
            proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_basic_eht_nss_mcs_set,
8897
131
                                tvb, offset, 4, ENC_BIG_ENDIAN);
8898
131
            offset += 4;
8899
8900
131
            proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_control,
8901
131
                                tvb, offset, 1, ENC_NA);
8902
131
            offset++;
8903
8904
131
            proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_ccfs0,
8905
131
                                tvb, offset, 1, ENC_NA);
8906
131
            offset++;
8907
8908
131
            proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_ccfs1,
8909
131
                                tvb, offset, 1, ENC_NA);
8910
131
            offset++;
8911
8912
131
            proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_disabled_subchannel_bitmap,
8913
131
                                tvb, offset, 2, ENC_BIG_ENDIAN);
8914
131
            offset += 2;
8915
8916
131
            proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_reserved,
8917
131
                                tvb, offset, 16, ENC_NA);
8918
131
            offset += 16;
8919
8920
131
            bss_num++;
8921
131
        }
8922
8923
86
        proto_item_set_len(bli, offset - bss_list_start);
8924
8925
86
        proto_tree_add_item(radio_tree, hf_ieee1905_eht_operations_radio_reserved,
8926
86
                            tvb, offset, 25, ENC_NA);
8927
86
        offset += 25;
8928
8929
86
        radio_num++;
8930
86
    }
8931
8932
34
    proto_item_set_len(rli, offset - radio_list_start);
8933
8934
34
    return offset;
8935
34
}
8936
8937
/*
8938
 * Dissect an Available Spectrum Inquiry Request TLV:
8939
 */
8940
static int
8941
dissect_available_spectrum_inquiry_request(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8942
        proto_tree *tree, unsigned offset, uint16_t len)
8943
4
{
8944
    /* Content is a JSON message */
8945
4
    proto_tree_add_item(tree, hf_ieee1905_available_spectrum_inquiry_request_object,
8946
4
                        tvb, offset, len, ENC_ASCII);
8947
4
    offset += len;
8948
8949
4
    return offset;
8950
4
}
8951
8952
/*
8953
 * Dissect an Available Spectrum Inquiry Response TLV:
8954
 */
8955
static int
8956
dissect_available_spectrum_inquiry_response(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8957
        proto_tree *tree, unsigned offset, uint16_t len)
8958
3
{
8959
    /* Content is a JSON message */
8960
3
    proto_tree_add_item(tree, hf_ieee1905_available_spectrum_inquiry_response_object,
8961
3
                        tvb, offset, len, ENC_ASCII);
8962
3
    offset += len;
8963
8964
3
    return offset;
8965
3
}
8966
8967
/*
8968
 * Dissect each of the TLV types we know about
8969
 */
8970
static int
8971
dissect_ieee1905_tlv_data(tvbuff_t *tvb, packet_info *pinfo,
8972
        proto_tree *tree, unsigned offset, uint8_t tlv_type, uint16_t tlv_len)
8973
8.89k
{
8974
8.89k
    unsigned link_metric_query;
8975
8976
8.89k
    switch (tlv_type) {
8977
8978
469
    case AL_MAC_ADDRESS_TYPE_TLV:
8979
469
        proto_tree_add_item(tree, hf_ieee1905_al_mac_address_type, tvb,
8980
469
                            offset, 6, ENC_NA);
8981
469
        offset += 6;
8982
469
        break;
8983
8984
243
    case MAC_ADDRESS_TYPE_TLV:
8985
243
        proto_tree_add_item(tree, hf_ieee1905_mac_address_type, tvb,
8986
243
                            offset, 6, ENC_NA);
8987
243
        offset += 6;
8988
243
        break;
8989
8990
94
    case DEVICE_INFORMATION_TYPE_TLV:
8991
94
        offset = dissect_device_information_type(tvb, pinfo, tree, offset,
8992
94
                                tlv_len);
8993
94
        break;
8994
8995
53
    case DEVICE_BRIDGING_CAPABILITY_TLV:
8996
53
        offset = dissect_device_bridging_capabilities(tvb, pinfo, tree,
8997
53
                                offset, tlv_len);
8998
53
        break;
8999
9000
22
    case NON_1905_NEIGHBOR_DEVICE_LIST_TLV:
9001
22
        offset = dissect_non_1905_neighbor_device_list(tvb, pinfo, tree,
9002
22
                                offset, tlv_len);
9003
22
        break;
9004
9005
30
    case NEIGHBOR_DEVICE_TLV:
9006
30
        offset = dissect_1905_neighbor_device(tvb, pinfo, tree, offset,
9007
30
                                tlv_len);
9008
30
        break;
9009
9010
150
    case LINK_METRIC_QUERY_TLV:
9011
150
        proto_tree_add_item_ret_uint(tree,
9012
150
                                      hf_ieee1905_link_metric_query_type,
9013
150
                                      tvb, offset, 1, ENC_NA,
9014
150
                                      &link_metric_query);
9015
150
        offset++;
9016
9017
150
        if (link_metric_query) {
9018
147
            proto_tree_add_item(tree, hf_ieee1905_al_mac_address_type, tvb,
9019
147
                                offset, 6, ENC_NA);
9020
147
            offset += 6;
9021
147
        }
9022
9023
150
        proto_tree_add_item(tree, hf_ieee1905_link_metrics_requested, tvb,
9024
150
                            offset, 1, ENC_NA);
9025
150
        offset++;
9026
150
        break;
9027
9028
294
    case TRANSMITTER_LINK_METRIC_TLV:
9029
294
        offset = dissect_transmitter_link_metric(tvb, pinfo, tree, offset,
9030
294
                                        tlv_len);
9031
294
        break;
9032
9033
127
    case RECEIVER_LINK_METRIC_TLV:
9034
127
        offset = dissect_receiver_link_metric(tvb, pinfo, tree, offset,
9035
127
                                        tlv_len);
9036
127
        break;
9037
9038
7
    case VENDOR_SPECIFIC_TLV:
9039
7
        offset = dissect_vendor_specific(tvb, pinfo, tree, offset, tlv_len);
9040
7
        break;
9041
9042
171
    case LINK_METRIC_RESULT_CODE_TLV:
9043
171
        offset = dissect_link_metric_result_code(tvb, pinfo, tree, offset);
9044
171
        break;
9045
9046
239
    case SEARCHED_ROLE_TLV:
9047
239
        offset = dissect_searched_role(tvb, pinfo, tree, offset);
9048
239
        break;
9049
9050
141
    case AUTO_CONFIG_FREQ_BAND_TLV:
9051
141
        offset = dissect_auto_config_freq_band(tvb, pinfo, tree, offset);
9052
141
        break;
9053
9054
183
    case SUPPORTED_ROLE_TLV:
9055
183
        offset = dissect_supported_role(tvb, pinfo, tree, offset);
9056
183
        break;
9057
9058
161
    case SUPPORTED_FREQ_BAND_TLV:
9059
161
        offset = dissect_supported_freq_band(tvb, pinfo, tree, offset);
9060
161
        break;
9061
9062
21
    case WSC_TLV:
9063
21
        offset = dissect_wsc(tvb, pinfo, tree, offset, tlv_len);
9064
21
        break;
9065
9066
38
    case PUSH_BUTTON_EVENT_NOTIFICATION_TLV:
9067
38
        offset = dissect_push_button_event_notification(tvb, pinfo,
9068
38
                                tree, offset);
9069
38
        break;
9070
9071
8
    case PUSH_BUTTON_JOIN_NOTIFICATION_TLV:
9072
8
        offset = dissect_push_button_join_notification(tvb, pinfo,
9073
8
                                tree, offset);
9074
8
        break;
9075
9076
16
    case GENERIC_PHY_DEVICE_INFORMATION_TLV:
9077
16
        offset = dissect_generic_phy_device_info(tvb, pinfo, tree,
9078
16
                                offset);
9079
16
        break;
9080
9081
14
    case DEVICE_IDENTIFICATION_TYPE_TLV:
9082
14
        offset = dissect_device_identification(tvb, pinfo, tree,
9083
14
                                offset);
9084
14
        break;
9085
9086
2
    case CONTROL_URL_TYPE_TLV:
9087
2
        offset = dissect_control_url_type(tvb, pinfo, tree, offset, tlv_len);
9088
2
        break;
9089
9090
36
    case IPV4_TYPE_TLV:
9091
36
        offset = dissect_ipv4_type(tvb, pinfo, tree, offset);
9092
36
        break;
9093
9094
37
    case IPV6_TYPE_TLV:
9095
37
        offset = dissect_ipv6_type(tvb, pinfo, tree, offset);
9096
37
        break;
9097
9098
16
    case PUSH_BUTTON_EVENT_TYPE_NOTIFICATION_TLV:
9099
16
        offset = dissect_push_button_event_type_notification(tvb, pinfo, tree,
9100
16
                                offset);
9101
16
        break;
9102
9103
145
    case IEEE1905_PROFILE_VERSION_TLV:
9104
145
        offset = dissect_profile_version(tvb, pinfo, tree, offset);
9105
145
        break;
9106
9107
15
    case POWER_OFF_INTERFACE_TLV:
9108
15
        offset = dissect_power_off_interface(tvb, pinfo, tree, offset);
9109
15
        break;
9110
9111
43
    case INTERFACE_POWER_CHANGE_INFORMATION_TLV:
9112
43
        offset = dissect_interface_power_change_info(tvb, pinfo, tree, offset);
9113
43
        break;
9114
9115
28
    case INTERFACE_POWER_CHANGE_STATUS_TLV:
9116
28
        offset = dissect_interface_power_change_status(tvb, pinfo, tree, offset);
9117
28
        break;
9118
9119
36
    case L2_NEIGHBOR_DEVICE_TLV:
9120
36
        offset = dissect_l2_neighbor_device(tvb, pinfo, tree, offset);
9121
36
        break;
9122
9123
65
    case SUPPORTED_SERVICE_TLV:
9124
65
        offset = dissect_supported_service(tvb, pinfo, tree, offset);
9125
65
        break;
9126
9127
51
    case SEARCHED_SERVICE_TLV:
9128
51
        offset = dissect_searched_service(tvb, pinfo, tree, offset);
9129
51
        break;
9130
9131
146
    case AP_RADIO_IDENTIFIER_TLV:
9132
146
        offset = dissect_ap_radio_identifier(tvb, pinfo, tree, offset);
9133
146
        break;
9134
9135
26
    case AP_OPERATIONAL_BSS_TLV:
9136
26
        offset = dissect_ap_operational_bss(tvb, pinfo, tree, offset);
9137
26
        break;
9138
9139
30
    case ASSOCIATED_CLIENTS_TLV:
9140
30
        offset = dissect_associated_clients(tvb, pinfo, tree, offset);
9141
30
        break;
9142
9143
43
    case AP_RADIO_BASIC_CAPABILITIES_TLV:
9144
43
        offset = dissect_ap_radio_basic_capabilities(tvb, pinfo, tree, offset);
9145
43
        break;
9146
9147
45
    case AP_HT_CAPABILITIES_TLV:
9148
45
        offset = dissect_ap_ht_capabilities(tvb, pinfo, tree, offset);
9149
45
        break;
9150
9151
31
    case AP_VHT_CAPABILITIES_TLV:
9152
31
        offset = dissect_ap_vht_capabilities(tvb, pinfo, tree, offset);
9153
31
        break;
9154
9155
83
    case AP_HE_CAPABILITIES_TLV:
9156
83
        offset = dissect_ap_he_capabilities(tvb, pinfo, tree, offset);
9157
83
        break;
9158
9159
58
    case STEERING_POLICY_TLV:
9160
58
        offset = dissect_steering_policy(tvb, pinfo, tree, offset, tlv_len);
9161
58
        break;
9162
9163
18
    case METRIC_REPORTING_POLICY_TLV:
9164
18
        offset = dissect_metric_reporting_policy(tvb, pinfo, tree, offset);
9165
18
        break;
9166
9167
53
    case CHANNEL_PREFERENCE_TLV:
9168
53
        offset = dissect_channel_preference(tvb, pinfo, tree, offset, tlv_len);
9169
53
        break;
9170
9171
46
    case RADIO_OPERATION_RESTRICTION_TLV:
9172
46
        offset = dissect_radio_operation_restriction(tvb, pinfo, tree, offset,
9173
46
                                tlv_len);
9174
46
        break;
9175
9176
82
    case TRANSMIT_POWER_LIMIT_TLV:
9177
82
        offset = dissect_transmit_power_limit(tvb, pinfo, tree, offset);
9178
82
        break;
9179
9180
69
    case CHANNEL_SELECTION_RESPONSE_TLV:
9181
69
        offset = dissect_channel_selection_response(tvb, pinfo, tree, offset);
9182
69
        break;
9183
9184
40
    case OPERATING_CHANNEL_REPORT_TLV:
9185
40
        offset = dissect_operating_channel_report(tvb, pinfo, tree, offset);
9186
40
        break;
9187
9188
46
    case CLIENT_INFO_TLV:
9189
46
        offset = dissect_client_info(tvb, pinfo, tree, offset);
9190
46
        break;
9191
9192
5
    case CLIENT_CAPABILITY_REPORT_TLV:
9193
5
        offset = dissect_client_capability_report(tvb, pinfo, tree, offset, tlv_len);
9194
5
        break;
9195
9196
119
    case CLIENT_ASSOCIATION_EVENT_TLV:
9197
119
        offset = dissect_client_association_event(tvb, pinfo, tree, offset);
9198
119
        break;
9199
9200
11
    case AP_METRIC_QUERY_TLV:
9201
11
        offset = dissect_ap_metric_query(tvb, pinfo, tree, offset, tlv_len);
9202
11
        break;
9203
9204
128
    case AP_METRICS_TLV:
9205
128
        offset = dissect_ap_metrics(tvb, pinfo, tree, offset, tlv_len);
9206
128
        break;
9207
9208
65
    case STA_MAC_ADDRESS_TYPE_TLV:
9209
65
        offset = dissect_sta_mac_address_type(tvb, pinfo, tree, offset, tlv_len);
9210
65
        break;
9211
9212
19
    case ASSOCIATED_STA_LINK_METRICS_TLV:
9213
19
        offset = dissect_associated_sta_link_metrics(tvb, pinfo, tree, offset,
9214
19
                                                     tlv_len);
9215
19
        break;
9216
9217
142
    case UNASSOCIATED_STA_LINK_METRICS_QUERY_TLV:
9218
142
        offset = dissect_unassociated_sta_link_metrics_query(tvb, pinfo, tree,
9219
142
                                                        offset, tlv_len);
9220
142
        break;
9221
9222
23
    case UNASSOCIATED_STA_LINK_METRICS_RESPONSE_TLV:
9223
23
        offset = dissect_unassociated_sta_link_metric_response(tvb, pinfo, tree,
9224
23
                                                        offset, tlv_len);
9225
23
        break;
9226
9227
37
    case BEACON_METRICS_QUERY_TLV:
9228
37
        offset = dissect_beacon_metrics_query(tvb, pinfo, tree, offset, tlv_len);
9229
37
        break;
9230
9231
19
    case BEACON_METRICS_RESPONSE_TLV:
9232
19
        offset = dissect_beacon_metrics_response(tvb, pinfo, tree, offset, tlv_len);
9233
19
        break;
9234
9235
31
    case STEERING_REQUEST_TLV:
9236
31
        offset = dissect_steering_request(tvb, pinfo, tree, offset, tlv_len);
9237
31
        break;
9238
9239
5
    case STEERING_BTM_REPORT_TLV:
9240
5
        offset = dissect_steering_btm_report(tvb, pinfo, tree, offset, tlv_len);
9241
5
        break;
9242
9243
82
    case CLIENT_ASSOCIATION_CONTROL_REQUEST_TLV:
9244
82
        offset = dissect_client_association_control_request(tvb, pinfo, tree, offset);
9245
82
        break;
9246
9247
141
    case BACKHAUL_STEERING_REQUEST_TLV:
9248
141
        offset = dissect_backhaul_steering_request(tvb, pinfo, tree, offset);
9249
141
        break;
9250
9251
33
    case BACKHAUL_STEERING_RESPONSE_TLV:
9252
33
        offset = dissect_backhaul_steering_response(tvb, pinfo, tree, offset);
9253
33
        break;
9254
9255
7
    case HIGHER_LAYER_DATA_TLV:
9256
7
        offset = dissect_higher_layer_data(tvb, pinfo, tree, offset, tlv_len);
9257
7
        break;
9258
9259
268
    case AP_CAPABILITY_TLV:
9260
268
        offset = dissect_ap_capability(tvb, pinfo, tree, offset);
9261
268
        break;
9262
9263
48
    case ASSOCIATED_STA_TRAFFIC_STATS_TLV:
9264
48
        offset = dissect_associated_sta_traffic_stats(tvb, pinfo, tree, offset, tlv_len);
9265
48
        break;
9266
9267
111
    case ERROR_CODE_TLV:
9268
111
        offset = dissect_error_code(tvb, pinfo, tree, offset, tlv_len);
9269
111
        break;
9270
9271
164
    case CHANNEL_SCAN_REPORTING_POLICY_TLV:
9272
164
        offset = dissect_channel_scan_reporting_policy(tvb, pinfo, tree,
9273
164
                                                       offset, tlv_len);
9274
164
        break;
9275
9276
52
    case CHANNEL_SCAN_CAPABILITIES_TLV:
9277
52
        offset = dissect_channel_scan_capabilities(tvb, pinfo, tree, offset,
9278
52
                                                   tlv_len);
9279
52
        break;
9280
9281
39
    case CHANNEL_SCAN_REQUEST_TLV:
9282
39
        offset = dissect_channel_scan_request(tvb, pinfo, tree, offset,
9283
39
                                              tlv_len);
9284
39
        break;
9285
9286
108
    case CHANNEL_SCAN_RESULT_TLV:
9287
108
        offset = dissect_channel_scan_result(tvb, pinfo, tree, offset, tlv_len);
9288
108
        break;
9289
9290
9
    case TIMESTAMP_TLV:
9291
9
        offset = dissect_timestamp(tvb, pinfo, tree, offset, tlv_len);
9292
9
        break;
9293
9294
73
    case IEEE1905_LAYER_SECURITY_CAPABILITY_TLV:
9295
73
        offset = dissect_1905_layer_security_capability(tvb, pinfo, tree,
9296
73
                                                        offset, tlv_len);
9297
73
        break;
9298
9299
122
    case AP_WF6_CAPABILITIES_TLV:
9300
122
        offset = dissect_ap_wf6_capabilities(tvb, pinfo, tree, offset, tlv_len);
9301
122
        break;
9302
9303
6
    case MIC_TLV:
9304
6
        offset = dissect_mic(tvb, pinfo, tree, offset, tlv_len);
9305
6
        break;
9306
9307
4
    case ENCRYPTED_TLV:
9308
4
        offset = dissect_encrypted(tvb, pinfo, tree, offset, tlv_len);
9309
4
        break;
9310
9311
24
    case CAC_REQUEST_TLV:
9312
24
        offset = dissect_cac_request(tvb, pinfo, tree, offset, tlv_len);
9313
24
        break;
9314
9315
134
    case CAC_TERMINATION_TLV:
9316
134
        offset = dissect_cac_termination(tvb, pinfo, tree, offset, tlv_len);
9317
134
        break;
9318
9319
30
    case CAC_COMPLETION_REPORT_TLV:
9320
30
        offset = dissect_cac_completion_report(tvb, pinfo, tree, offset,
9321
30
                                               tlv_len);
9322
30
        break;
9323
9324
18
    case ASSOCIATED_WF6_STA_STATUS_REPORT_TLV:
9325
18
        offset = dissect_associated_wf6_sta_status_report(tvb, pinfo, tree,
9326
18
                                                          offset, tlv_len);
9327
18
        break;
9328
9329
39
    case CAC_STATUS_REPORT_TLV:
9330
39
        offset = dissect_cac_status_report(tvb, pinfo, tree, offset, tlv_len);
9331
39
        break;
9332
9333
60
    case CAC_CAPABILITIES_TLV:
9334
60
        offset = dissect_cac_capabilities(tvb, pinfo, tree, offset, tlv_len);
9335
60
        break;
9336
9337
74
    case MULTI_AP_PROFILE_TLV:
9338
74
        offset = dissect_multi_ap_version(tvb, pinfo, tree, offset, tlv_len);
9339
74
        break;
9340
9341
61
    case PROFILE_2_AP_CAPABILITY_TLV:
9342
61
        offset = dissect_r2_ap_capability(tvb, pinfo, tree, offset, tlv_len);
9343
61
        break;
9344
9345
93
    case DEFAULT_802_1Q_SETTINGS_TLV:
9346
93
        offset = dissect_default_802_1q_settings(tvb, pinfo, tree, offset,
9347
93
                                                 tlv_len);
9348
93
        break;
9349
9350
17
    case TRAFFIC_SEPARATION_POLICY_TLV:
9351
17
        offset = dissect_traffic_separation_policy(tvb, pinfo, tree, offset,
9352
17
                                                   tlv_len);
9353
17
        break;
9354
9355
29
    case BSS_CONFIGURATION_REPORT_TLV:
9356
29
        offset = dissect_bss_configuration_report(tvb, pinfo, tree, offset,
9357
29
                                                  tlv_len);
9358
29
        break;
9359
9360
95
    case BSSID_TLV:
9361
95
        offset = dissect_bssid(tvb, pinfo, tree, offset, tlv_len);
9362
95
        break;
9363
9364
123
    case SERVICE_PRIORITIZATION_RULE_TLV:
9365
123
        offset = dissect_service_prioritization_rule(tvb, pinfo, tree, offset,
9366
123
                                                     tlv_len);
9367
123
        break;
9368
9369
78
    case DSCP_MAPPING_TABLE_TLV:
9370
78
        offset = dissect_dscp_mapping_table(tvb, pinfo, tree, offset, tlv_len);
9371
78
        break;
9372
9373
251
    case PROFILE_2_ERROR_CODE_ERROR_TLV:
9374
251
        offset = dissect_r2_error_code(tvb, pinfo, tree, offset, tlv_len);
9375
251
        break;
9376
9377
80
    case AP_RADIO_ADVANCED_CAPABILITIES_TLV:
9378
80
        offset = dissect_ap_radio_advanced_capabilities(tvb, pinfo, tree,
9379
80
                                                        offset, tlv_len);
9380
80
        break;
9381
9382
18
    case ASSOCIATION_STATUS_NOTIFICATION_TLV:
9383
18
        offset = dissect_association_status_notification(tvb, pinfo, tree,
9384
18
                                                         offset, tlv_len);
9385
18
        break;
9386
9387
66
    case SOURCE_INFO_TLV:
9388
66
        offset = dissect_source_info(tvb, pinfo, tree, offset, tlv_len);
9389
66
        break;
9390
9391
189
    case TUNNELED_MESSAGE_TYPE_TLV:
9392
189
        offset = dissect_tunneled_message_type(tvb, pinfo, tree, offset,
9393
189
                                                tlv_len);
9394
189
        break;
9395
9396
1
    case TUNNELED_TLV:
9397
1
        offset = dissect_tunneled(tvb, pinfo, tree, offset, tlv_len);
9398
1
        break;
9399
9400
36
    case PROFILE_2_STEERING_REQUEST_TLV:
9401
36
        offset = dissect_r2_steering_request(tvb, pinfo, tree, offset, tlv_len);
9402
36
        break;
9403
9404
44
    case UNSUCCESSFUL_ASSOCIATION_POLICY_TLV:
9405
44
        offset = dissect_unsuccessful_association_policy(tvb, pinfo, tree,
9406
44
                                                        offset, tlv_len);
9407
44
        break;
9408
9409
2
    case METRIC_COLLECTION_INTERVAL_TLV:
9410
2
        offset = dissect_metric_collection_interval(tvb, pinfo, tree, offset,
9411
2
                                                    tlv_len);
9412
2
        break;
9413
9414
42
    case RADIO_METRICS_TLV:
9415
42
        offset = dissect_radio_metrics(tvb, pinfo, tree, offset, tlv_len);
9416
42
        break;
9417
9418
37
    case AP_EXTENDED_METRICS_TLV:
9419
37
        offset = dissect_ap_extended_metrics(tvb, pinfo, tree, offset, tlv_len);
9420
37
        break;
9421
9422
18
    case ASSOCIATED_STA_EXTENDED_LINK_METRICS_TLV:
9423
18
        offset = dissect_associated_sta_extended_link_metrics(tvb, pinfo, tree,
9424
18
                                                              offset, tlv_len);
9425
18
        break;
9426
9427
101
    case STATUS_CODE_TLV:
9428
101
        offset = dissect_status_code(tvb, pinfo, tree, offset,
9429
101
                                                tlv_len);
9430
101
        break;
9431
9432
106
    case REASON_CODE_TLV:
9433
106
        offset = dissect_disassociation_reason_code(tvb, pinfo, tree, offset,
9434
106
                                                    tlv_len);
9435
106
        break;
9436
9437
102
    case BACKHAUL_STA_RADIO_CAPABILITIES_TLV:
9438
102
        offset = dissect_backhaul_sta_radio_capabilities(tvb, pinfo, tree,
9439
102
                                                        offset, tlv_len);
9440
102
        break;
9441
9442
37
    case AKM_SUITE_CAPABILITIES_TLV:
9443
37
        offset = dissect_akm_suite_capabilities(tvb, pinfo, tree, offset,
9444
37
                                                tlv_len);
9445
37
        break;
9446
9447
19
    case IEEE1905_ENCAP_DPP_TLV:
9448
19
        offset = dissect_1905_encap_dpp(tvb, pinfo, tree, offset, tlv_len);
9449
19
        break;
9450
9451
3
    case IEEE1905_ENCAP_EAPOL_TLV:
9452
3
        offset = dissect_1905_encap_eapol(tvb, pinfo, tree, offset, tlv_len);
9453
3
        break;
9454
9455
2
    case DPP_BOOTSTRAPPING_URI_NOTIFICATION_TLV:
9456
2
        offset = dissect_dpp_bootstrapping_uri_notification(tvb, pinfo, tree,
9457
2
                                                            offset, tlv_len);
9458
2
        break;
9459
9460
201
    case DPP_CCE_INDICATION_TLV:
9461
201
        offset = dissect_dpp_cce_indication(tvb, pinfo, tree, offset, tlv_len);
9462
201
        break;
9463
9464
33
    case DPP_CHIRP_VALUE_TLV:
9465
33
        offset = dissect_dpp_chirp_value(tvb, pinfo, tree, offset, tlv_len);
9466
33
        break;
9467
9468
14
    case DEVICE_INVENTORY_TLV:
9469
14
        offset = dissect_device_inventory(tvb, pinfo, tree, offset, tlv_len);
9470
14
        break;
9471
9472
4
    case AGENT_LIST_TLV:
9473
4
        offset = dissect_agent_list(tvb, pinfo, tree, offset, tlv_len);
9474
4
        break;
9475
9476
3
    case BSS_CONFIGURATION_REQUEST_TLV:
9477
3
        offset = dissect_bss_configuration_request(tvb, pinfo, tree, offset,
9478
3
                                                   tlv_len);
9479
3
        break;
9480
9481
1
    case BSS_CONFIGURATION_RESPONSE_TLV:
9482
1
        offset = dissect_bss_configuration_response(tvb, pinfo, tree, offset,
9483
1
                                                    tlv_len);
9484
1
        break;
9485
9486
5
    case DPP_MESSAGE_TLV:
9487
5
        offset = dissect_dpp_message(tvb, pinfo, tree, offset, tlv_len);
9488
5
        break;
9489
9490
135
    case SPATIAL_REUSE_REQUEST_TLV:
9491
135
        offset = dissect_spatial_reuse_request(tvb, pinfo, tree, offset,
9492
135
                                               tlv_len);
9493
135
        break;
9494
9495
106
    case SPATIAL_REUSE_REPORT_TLV:
9496
106
        offset = dissect_spatial_reuse_report(tvb, pinfo, tree, offset,
9497
106
                                              tlv_len);
9498
106
        break;
9499
9500
63
    case SPATIAL_REUSE_CONFIG_RESPONSE_TLV:
9501
63
        offset = dissect_spatial_reuse_config_response(tvb, pinfo, tree,
9502
63
                                                       offset, tlv_len);
9503
63
        break;
9504
9505
32
    case QOS_MANAGEMENT_POLICY_TLV:
9506
32
        offset = dissect_qos_management_policy(tvb, pinfo, tree, offset,
9507
32
                                               tlv_len);
9508
32
        break;
9509
9510
44
    case QOS_MANAGEMENT_DESCRIPTOR_TLV:
9511
44
        offset = dissect_qos_management_descriptor(tvb, pinfo, tree, offset,
9512
44
                                                   tlv_len);
9513
44
        break;
9514
9515
2
    case CONTROLLER_CAPABILITY_TLV:
9516
2
        offset = dissect_controller_capability(tvb, pinfo, tree, offset,
9517
2
                                               tlv_len);
9518
2
        break;
9519
9520
36
    case WIFI7_AGENT_CAPABILITIES_TLV:
9521
36
        offset = dissect_wifi_7_agent_capabilities(tvb, pinfo, tree, offset,
9522
36
                                                   tlv_len);
9523
36
        break;
9524
9525
28
    case AGENT_AP_MLD_CONFIGURATION_TLV:
9526
28
        offset = dissect_agent_agent_ap_mld_configuration(tvb, pinfo, tree, offset,
9527
28
                                                          tlv_len);
9528
28
        break;
9529
9530
19
    case BACKHAUL_STA_MLD_CONFIGURATION_TLV:
9531
19
        offset = dissect_backhaul_sta_mld_configuration(tvb, pinfo, tree, offset,
9532
19
                                                        tlv_len);
9533
19
        break;
9534
9535
17
    case ASSOCIATED_STA_MLD_CONFIGURATION_TLV:
9536
17
        offset = dissect_associated_sta_mld_configuration(tvb, pinfo, tree, offset,
9537
17
                                                          tlv_len);
9538
17
        break;
9539
9540
3
    case AFFILIATED_STA_METRICS_TLV:
9541
3
        offset = dissect_affiliated_sta_metrics(tvb, pinfo, tree, offset,
9542
3
                                                tlv_len);
9543
3
        break;
9544
9545
3
    case AFFILIATED_AP_METRICS_TLV:
9546
3
        offset = dissect_affiliated_ap_metrics(tvb, pinfo, tree, offset,
9547
3
                                               tlv_len);
9548
3
        break;
9549
9550
34
    case EHT_OPERATIONS_TLV:
9551
34
        offset = dissect_eht_operations_tlv(tvb, pinfo, tree, offset,
9552
34
                                            tlv_len);
9553
34
        break;
9554
9555
4
    case AVAILABLE_SPECTRUM_INQUIRY_REQUEST_TLV:
9556
4
        offset = dissect_available_spectrum_inquiry_request(tvb, pinfo, tree, offset,
9557
4
                                                            tlv_len);
9558
4
        break;
9559
9560
3
    case AVAILABLE_SPECTRUM_INQUIRY_RESPONSE_TLV:
9561
3
        offset = dissect_available_spectrum_inquiry_response(tvb, pinfo, tree, offset,
9562
3
                                                             tlv_len);
9563
3
        break;
9564
9565
436
    default:
9566
436
        proto_tree_add_item(tree, hf_ieee1905_tlv_data, tvb, offset, tlv_len, ENC_NA);
9567
436
        offset += tlv_len;
9568
8.89k
    }
9569
9570
7.22k
  return offset;
9571
8.89k
}
9572
9573
static int * const tlv_len_headers[] = {
9574
    &hf_ieee1905_tlv_len_reserved,
9575
    &hf_ieee1905_tlv_len_length,
9576
    NULL
9577
};
9578
9579
#ifndef min
9580
9.39k
#define min(a, b) ((a < b) ? a : b)
9581
#endif
9582
9583
static int
9584
dissect_ieee1905_tlvs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
9585
1.89k
{
9586
1.89k
    bool eom_seen;
9587
1.89k
    unsigned offset = 0;
9588
9589
9.39k
    do {
9590
9.39k
        uint8_t tlv_type;
9591
9.39k
        uint16_t tlv_len;
9592
9.39k
        proto_item *tlv_tree;
9593
9594
9.39k
        tlv_type = tvb_get_uint8(tvb, offset);
9595
9.39k
        eom_seen = (tlv_type == EOM_TLV) ? true : false;
9596
        /*
9597
        * We can only deal with the reported length remaining ATM so take the
9598
        * min of the TLV len and the reported len.
9599
        */
9600
9.39k
        tlv_len = min(tvb_get_ntohs(tvb, offset + 1),
9601
9.39k
                    tvb_reported_length_remaining(tvb, offset));
9602
9603
9.39k
        tlv_tree = proto_tree_add_subtree(tree, tvb, offset, tlv_len + 3,
9604
9.39k
                                          ett_tlv, NULL, val_to_str_ext(tlv_type,
9605
9.39k
                                                &ieee1905_tlv_types_vals_ext,
9606
9.39k
                                                "Unknown: %02x"));
9607
9608
9.39k
        proto_tree_add_item(tlv_tree, hf_ieee1905_tlv_types, tvb, offset, 1, ENC_NA);
9609
9.39k
        offset++;
9610
9611
9.39k
        proto_tree_add_bitmask(tlv_tree, tvb, offset, hf_ieee1905_tlv_len,
9612
9.39k
                             ett_ieee1905_tlv_len, tlv_len_headers, ENC_BIG_ENDIAN);
9613
9.39k
        offset += 2;
9614
9615
9.39k
        if (tlv_len)
9616
8.89k
            offset = dissect_ieee1905_tlv_data(tvb, pinfo, tlv_tree, offset, tlv_type, tlv_len);
9617
9.39k
    } while (eom_seen == false);
9618
9619
1.89k
    return offset;
9620
1.89k
}
9621
9622
static const fragment_items ieee1905_fragment_items = {
9623
    /* Fragment subtrees */
9624
    &ett_ieee1905_fragment,
9625
    &ett_ieee1905_fragments,
9626
    /* Fragment fields */
9627
    &hf_ieee1905_fragments,
9628
    &hf_ieee1905_fragment,
9629
    &hf_ieee1905_fragment_overlap,
9630
    &hf_ieee1905_fragment_overlap_conflicts,
9631
    &hf_ieee1905_fragment_multiple_tails,
9632
    &hf_ieee1905_fragment_too_long_fragment,
9633
    &hf_ieee1905_fragment_error,
9634
    &hf_ieee1905_fragment_count,
9635
    &hf_ieee1905_fragment_reassembled_in,
9636
    &hf_ieee1905_fragment_reassembled_length,
9637
    NULL,
9638
    "IEEE1905 Fragments"
9639
};
9640
9641
typedef struct {
9642
    address src;
9643
    address dst;
9644
    uint32_t vlan_id; /* Take the VLAN ID into account */
9645
    uint8_t frag_id;
9646
} ieee1905_fragment_key;
9647
9648
static unsigned
9649
ieee1905_fragment_hash(const void *k)
9650
21
{
9651
21
    unsigned hash_val;
9652
21
    const ieee1905_fragment_key *key = (const ieee1905_fragment_key *)k;
9653
9654
21
    if (!key || !key->src.data || !key->dst.data) {
9655
6
        return 0;
9656
6
    }
9657
9658
15
    const uint8_t src_len = key->src.len;
9659
15
    const uint8_t dst_len = key->dst.len;
9660
15
    const uint8_t hash_buf_len = src_len + dst_len + sizeof(uint8_t) + sizeof(uint32_t);
9661
15
    uint8_t* hash_buf = (uint8_t*)wmem_alloc(NULL, hash_buf_len);
9662
9663
15
    memcpy(hash_buf, key->src.data, src_len);
9664
15
    memcpy(&hash_buf[src_len], key->dst.data, dst_len);
9665
15
    hash_buf[src_len + dst_len] = key->frag_id;
9666
15
    memcpy(&hash_buf[src_len + dst_len + sizeof(uint8_t)], &key->vlan_id, sizeof(uint32_t));
9667
15
    hash_val = wmem_strong_hash((const uint8_t *)hash_buf, hash_buf_len);
9668
15
    wmem_free(NULL, hash_buf);
9669
15
    return hash_val;
9670
21
}
9671
9672
static gboolean
9673
ieee1905_fragment_equal(const void *k1, const void *k2)
9674
11
{
9675
11
    const ieee1905_fragment_key *key1 =
9676
11
                        (const ieee1905_fragment_key *)k1;
9677
11
    const ieee1905_fragment_key *key2 =
9678
11
                        (const ieee1905_fragment_key *)k2;
9679
9680
11
    if (!key1 || !key2) {
9681
6
        return FALSE;
9682
6
    }
9683
9684
5
    return (key1->frag_id == key2->frag_id &&
9685
5
            key1->vlan_id == key2->vlan_id &&
9686
5
            addresses_equal(&key1->src, &key2->src) &&
9687
5
            addresses_equal(&key1->src, &key2->src));
9688
11
}
9689
9690
static void *
9691
ieee1905_fragment_temporary_key(const packet_info *pinfo, const uint32_t id,
9692
                                const void *data _U_)
9693
13
{
9694
13
    ieee1905_fragment_key *key;
9695
9696
13
    if (pinfo->src.data == NULL || pinfo->dst.data == NULL) {
9697
3
        return NULL;
9698
3
    }
9699
9700
10
    key = g_slice_new(ieee1905_fragment_key);
9701
9702
10
    key->frag_id = id & 0xFF;
9703
10
    copy_address_shallow(&key->src, &pinfo->src);
9704
10
    copy_address_shallow(&key->dst, &pinfo->dst);
9705
10
    key->vlan_id = pinfo->vlan_id;
9706
9707
10
    return (void *)key;
9708
13
}
9709
9710
static void *
9711
ieee1905_fragment_persistent_key(const packet_info *pinfo, const unsigned id,
9712
                                 const void *data _U_)
9713
8
{
9714
8
    if (pinfo->src.data == NULL || pinfo->dst.data == NULL) {
9715
3
        return NULL;
9716
3
    }
9717
9718
5
    ieee1905_fragment_key *key = g_slice_new(ieee1905_fragment_key);
9719
9720
5
    key->frag_id = id & 0xFF;
9721
5
    copy_address(&key->src, &pinfo->src);
9722
5
    copy_address(&key->dst, &pinfo->dst);
9723
5
    key->vlan_id = pinfo->vlan_id;
9724
9725
5
    return (void *)key;
9726
8
}
9727
9728
static void
9729
ieee1905_fragment_free_temporary_key(void *ptr)
9730
13
{
9731
13
    ieee1905_fragment_key *key = (ieee1905_fragment_key *)ptr;
9732
9733
13
    g_slice_free(ieee1905_fragment_key, key);
9734
13
}
9735
9736
static void
9737
ieee1905_fragment_free_persistent_key(void *ptr)
9738
0
{
9739
0
    ieee1905_fragment_key *key = (ieee1905_fragment_key *)ptr;
9740
9741
0
    if (key) {
9742
0
        free_address(&key->src);
9743
0
        free_address(&key->dst);
9744
0
        g_slice_free(ieee1905_fragment_key, key);
9745
0
    }
9746
0
}
9747
9748
static reassembly_table g_ieee1905_reassembly_table;
9749
9750
static reassembly_table_functions ieee1905_reassembly_table_functions = {
9751
    ieee1905_fragment_hash,
9752
    ieee1905_fragment_equal,
9753
    ieee1905_fragment_temporary_key,
9754
    ieee1905_fragment_persistent_key,
9755
    ieee1905_fragment_free_temporary_key,
9756
    ieee1905_fragment_free_persistent_key,
9757
};
9758
9759
1.92k
#define LAST_IEEE1905_FRAGMENT 0x80
9760
9761
static int
9762
dissect_ieee1905(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
9763
1.91k
{
9764
1.91k
    proto_item *ti;
9765
1.91k
    proto_tree *ieee1905_tree;
9766
1.91k
    uint16_t   message_type;
9767
1.91k
    unsigned   offset = 0, next_offset = 0;
9768
1.91k
    static int * const flag_headers[] = {
9769
1.91k
        &hf_ieee1905_last_fragment,
9770
1.91k
        &hf_ieee1905_relay_indicator,
9771
1.91k
        NULL
9772
1.91k
    };
9773
1.91k
    uint16_t msg_id = tvb_get_ntohs(tvb, 4);
9774
1.91k
    uint8_t frag_id = tvb_get_uint8(tvb, 6);
9775
1.91k
    uint8_t flags = tvb_get_uint8(tvb, 7);
9776
1.91k
    tvbuff_t *next_tvb = NULL;
9777
9778
1.91k
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "ieee1905");
9779
9780
1.91k
    col_clear(pinfo->cinfo, COL_INFO);
9781
9782
1.91k
    message_type = tvb_get_ntohs(tvb, 2);
9783
9784
1.91k
    col_add_str(pinfo->cinfo, COL_INFO,
9785
1.91k
                val_to_str_ext(message_type, &ieee1905_message_type_vals_ext,
9786
1.91k
                        "Unknown: %u"));
9787
9788
1.91k
    ti = proto_tree_add_item(tree, proto_ieee1905, tvb, 0, -1, ENC_NA);
9789
9790
1.91k
    ieee1905_tree = proto_item_add_subtree(ti, ett_ieee1905);
9791
9792
1.91k
    proto_tree_add_item(ieee1905_tree, hf_ieee1905_message_version, tvb, offset, 1, ENC_NA);
9793
1.91k
    offset++;
9794
9795
1.91k
    proto_tree_add_item(ieee1905_tree, hf_ieee1905_message_reserved, tvb, offset, 1, ENC_NA);
9796
1.91k
    offset++;
9797
9798
1.91k
    proto_tree_add_item(ieee1905_tree, hf_ieee1905_message_type, tvb, offset, 2, ENC_BIG_ENDIAN);
9799
1.91k
    offset += 2;
9800
9801
1.91k
    proto_tree_add_item(ieee1905_tree, hf_ieee1905_message_id, tvb, offset, 2, ENC_BIG_ENDIAN);
9802
1.91k
    offset += 2;
9803
9804
1.91k
    proto_tree_add_item(ieee1905_tree, hf_ieee1905_fragment_id, tvb, offset, 1, ENC_NA);
9805
1.91k
    offset++;
9806
9807
1.91k
    proto_tree_add_bitmask(ieee1905_tree, tvb, offset, hf_ieee1905_flags,
9808
1.91k
                           ett_ieee1905_flags, flag_headers, ENC_NA);
9809
1.91k
    offset++;
9810
9811
    /*
9812
     * Now figure out if it is a fragment and do reassembly. If we have a
9813
     * fragment but not the whole lot, just dissect it as data, otherwise
9814
     * dissect it.
9815
     */
9816
1.91k
    if ((flags & LAST_IEEE1905_FRAGMENT) && frag_id == 0) {
9817
1.89k
        next_tvb = tvb_new_subset_remaining(tvb, offset);
9818
1.89k
        next_offset = dissect_ieee1905_tlvs(next_tvb, pinfo, ieee1905_tree);
9819
1.89k
    } else {
9820
14
        bool save_fragmented = pinfo->fragmented;
9821
14
        pinfo->fragmented = true;
9822
14
        fragment_head *frag_head = NULL;
9823
14
        tvbuff_t *new_tvb = NULL;
9824
14
        unsigned remaining_length = tvb_captured_length_remaining(tvb, offset);
9825
9826
14
        frag_head = fragment_add_seq_check(&g_ieee1905_reassembly_table, tvb,
9827
14
                                           offset, pinfo,
9828
14
                                           msg_id, NULL, frag_id,
9829
14
                                           remaining_length,
9830
14
                                           (flags & LAST_IEEE1905_FRAGMENT) == 0);
9831
9832
14
        new_tvb = process_reassembled_data(tvb, offset, pinfo,
9833
14
                                            "Reassembled Message",
9834
14
                                            frag_head,
9835
14
                                            &ieee1905_fragment_items,
9836
14
                                            NULL, ieee1905_tree);
9837
9838
14
        pinfo->fragmented = save_fragmented;
9839
9840
14
        if (new_tvb) { /* Reassembled */
9841
0
            unsigned reassembled_length = tvb_captured_length(new_tvb);
9842
0
            unsigned reassembled_next_offset = dissect_ieee1905_tlvs(new_tvb, pinfo, ieee1905_tree);
9843
9844
0
            tvb_set_reported_length(new_tvb, reassembled_next_offset);
9845
            /* Calculate how many bytes of the last packet contributed to the reassembled payload */
9846
0
            next_offset = remaining_length - (reassembled_length - reassembled_next_offset);
9847
14
        } else {
9848
14
            col_append_fstr(pinfo->cinfo, COL_INFO,
9849
14
                            " (Message ID: %u, Fragment ID: %u, VLAN ID: %u)",
9850
14
                            msg_id, frag_id, pinfo->vlan_id);
9851
14
            proto_tree_add_item(ieee1905_tree, hf_ieee1905_fragment_data, tvb,
9852
14
                                offset,
9853
14
                                tvb_reported_length_remaining(tvb, offset),
9854
14
                                ENC_NA);
9855
14
            next_offset = remaining_length;
9856
14
        }
9857
14
    }
9858
9859
1.91k
    proto_item_set_len(ti, offset + next_offset);
9860
1.91k
    tvb_set_reported_length(tvb, offset + next_offset);
9861
9862
1.91k
    return offset + next_offset;
9863
1.91k
}
9864
9865
void
9866
proto_register_ieee1905(void)
9867
14
{
9868
14
    static hf_register_info hf[] = {
9869
14
        { &hf_ieee1905_fragment_data,
9870
14
          { "Fragment Data", "ieee1905.fragment.data",
9871
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
9872
9873
14
        { &hf_ieee1905_message_version,
9874
14
          { "Message version", "ieee1905.message_version",
9875
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
9876
9877
14
        { &hf_ieee1905_message_reserved,
9878
14
          { "Message reserved", "ieee1905.message_reserved",
9879
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
9880
9881
14
        { &hf_ieee1905_message_type,
9882
14
          { "Message type", "ieee1905.message_type",
9883
14
            FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee1905_message_type_vals_ext, 0, NULL, HFILL }},
9884
9885
14
        { &hf_ieee1905_message_id,
9886
14
          { "Message id", "ieee1905.message_id",
9887
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
9888
9889
14
        { &hf_ieee1905_fragment_id,
9890
14
          { "Fragment id", "ieee1905.fragment_id",
9891
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
9892
9893
14
        { &hf_ieee1905_flags,
9894
14
          { "Flags", "ieee1905.flags",
9895
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
9896
9897
14
        { &hf_ieee1905_last_fragment,
9898
14
          { "Last fragment", "ieee1905.last_fragment",
9899
14
            FT_BOOLEAN, 8, TFS(&tfs_last_fragment), 0x80, NULL, HFILL }},
9900
9901
14
        { &hf_ieee1905_relay_indicator,
9902
14
          { "Relay indicator", "ieee1905.relay_indicator",
9903
14
            FT_BOOLEAN, 8, TFS(&tfs_relay_indicator), 0x40, NULL, HFILL }},
9904
9905
14
        { &hf_ieee1905_tlv_types,
9906
14
          { "TLV type", "ieee1905.tlv_type",
9907
14
            FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee1905_tlv_types_vals_ext, 0, NULL, HFILL }},
9908
9909
14
        { &hf_ieee1905_tlv_len,
9910
14
          { "TLV length", "ieee1905.tlv_length",
9911
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
9912
9913
14
        { &hf_ieee1905_tlv_len_reserved,
9914
14
          { "TLV length reserved", "ieee1905.tlv_length.reserved",
9915
14
            FT_UINT16, BASE_HEX, NULL, 0xC000, NULL, HFILL }},
9916
9917
14
        { &hf_ieee1905_tlv_len_length,
9918
14
          { "TLV length length", "ieee1905.tlv_length.length",
9919
14
            FT_UINT16, BASE_DEC, NULL, 0x3FFF, NULL, HFILL }},
9920
9921
14
        { &hf_ieee1905_tlv_data,
9922
14
          { "TLV data", "ieee1905.tlv_data",
9923
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
9924
9925
14
        { &hf_ieee1905_al_mac_address_type,
9926
14
          { "1905 AL MAC address type", "ieee1905.1905_al_mac_addr",
9927
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
9928
9929
14
        { &hf_ieee1905_mac_address_type,
9930
14
          { "MAC address type", "ieee1905.mac_addr",
9931
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
9932
9933
14
        { &hf_ieee1905_link_metric_query_type,
9934
14
          { "Link metric query type", "ieee1905.link_metric_query_type",
9935
14
            FT_UINT8, BASE_DEC, VALS(ieee1905_link_metric_query_type_vals),
9936
14
            0, NULL, HFILL }},
9937
9938
14
        { &hf_ieee1905_link_metrics_requested,
9939
14
          { "Link metrics requested", "ieee1905.link_metrics_requested",
9940
14
            FT_UINT8, BASE_DEC, VALS(ieee1905_link_metrics_requested_vals),
9941
14
            0, NULL, HFILL }},
9942
9943
14
        { &hf_ieee1905_responder_al_mac_addr,
9944
14
          { "Responder MAC address", "ieee1905.responder_al_mac_addr",
9945
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
9946
9947
14
        { &hf_ieee1905_neighbor_al_mac_addr,
9948
14
          { "Neighbor MAC address", "ieee1905.neighbor_al_mac_addr",
9949
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
9950
9951
14
        { &hf_ieee1905_receiving_al_mac_addr,
9952
14
          { "Receiving AL MAC address", "ieee1905.receiving_al_mac_addr",
9953
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
9954
9955
14
        { &hf_ieee1905_bridge_flag,
9956
14
          { "IEEE 802.1 bridge flag", "ieee1905.bridgeFlag",
9957
14
            FT_UINT8, BASE_DEC, VALS(ieee1905_bridge_flag_vals), 0, NULL, HFILL }},
9958
9959
14
        { &hf_ieee1905_packet_errors,
9960
14
          { "Packet errors", "ieee1905.packetErrors",
9961
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
9962
9963
14
        { &hf_ieee1905_transmitted_packets,
9964
14
          { "Transmitted packets", "ieee1905.transmittedPackets",
9965
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
9966
9967
14
        { &hf_ieee1905_mac_throughput_capacity,
9968
14
          { "MAC throughput capacity", "ieee1905.macThroughputCapacity",
9969
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
9970
9971
14
        { &hf_ieee1905_link_availability,
9972
14
          { "Link availability", "ieee1905.linkAvailability",
9973
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
9974
9975
14
        { &hf_ieee1905_phy_rate,
9976
14
          { "Phy rate", "ieee1905.phyRate",
9977
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
9978
9979
14
        { &hf_ieee1905_packets_received,
9980
14
          { "Packets received", "ieee1905.packets_received",
9981
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
9982
9983
14
        { &hf_ieee1905_rssi,
9984
14
          { "RSSI", "ieee1905.rssi",
9985
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
9986
9987
14
        { &hf_ieee1905_local_interface_count,
9988
14
          { "Local interface count", "ieee1905.dev_info.local_int_cnt",
9989
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
9990
9991
14
        { &hf_ieee1905_media_type,
9992
14
          { "Media type", "ieee1905.dev_info.media_type",
9993
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
9994
9995
14
        { &hf_ieee1905_media_type_high,
9996
14
          { "Media type bits 15 to 8", "ieee1905.media_type.bits_15_to_8",
9997
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
9998
9999
14
        { &hf_ieee1905_media_type_low,
10000
14
          { "Media type bits 7 to 0", "ieee1905.media_type.bits_7_to_0",
10001
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10002
10003
14
        { &hf_ieee1905_media_spec_info_len,
10004
14
          { "Special info length", "ieee1905.dev_info.spec_info_len",
10005
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10006
10007
14
        { &hf_ieee1905_media_spec_info,
10008
14
          { "Special info", "ieee1905.dev_info.spec_info",
10009
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10010
10011
14
        { &hf_ieee1905_bridging_tuples_cnt,
10012
14
          { "Bridging tuples count", "ieee1905.bridging_info.tuples_count",
10013
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10014
10015
14
        { &hf_ieee1905_bridging_mac_address_cnt,
10016
14
          { "Bridging MAC address count", "ieee1905.bridging_info.mac_addr_count",
10017
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10018
10019
14
        { &hf_ieee1905_bridging_mac_address,
10020
14
          { "Bridging MAC address", "ieee1905.bridging_info.mac_address",
10021
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10022
10023
14
        { &hf_ieee1905_local_interface_mac,
10024
14
          { "Local interface MAC address", "ieee1905.local_intf.mac_address",
10025
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10026
10027
14
        { &hf_ieee1905_non_1905_neighbor_mac,
10028
14
          { "Non 1905 neighbor MAC address", "ieee1905.non_1905_neighbor.mac_address",
10029
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10030
10031
14
        { &hf_ieee1905_neighbor_flags,
10032
14
          { "IEEE1905 neighbor flags", "ieee1905.neighbor_flags",
10033
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10034
10035
14
        { &hf_ieee1905_bridges_flag,
10036
14
          { "IEEE1905 bridges", "ieee1905.bridges",
10037
14
            FT_BOOLEAN, 8, TFS(&tfs_bridges_flag), 0x80, NULL, HFILL }},
10038
10039
14
        { &hf_ieee1905_link_metric_result_code,
10040
14
          { "IEEE1905 link metric result code", "ieee1905.link_metric.result_code",
10041
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10042
10043
14
        { &hf_ieee1905_vendor_specific_oui,
10044
14
          { "Vendor specific OUI", "ieee1905.vendor_specific.oui",
10045
14
            FT_UINT24, BASE_OUI, NULL, 0, NULL, HFILL }},
10046
10047
14
        { &hf_ieee1905_vendor_specific_info,
10048
14
          { "Vendor specific information", "ieee1905.vendor_specific.info",
10049
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10050
10051
14
        { &hf_ieee1905_searched_role,
10052
14
          { "Searched role", "ieee1905.searched_role",
10053
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10054
10055
14
        { &hf_ieee1905_supported_role,
10056
14
          { "Supported role", "ieee1905.supported_role",
10057
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10058
10059
14
        { &hf_ieee1905_auto_config_freq_band,
10060
14
          { "Auto config frequency band", "ieee1905.auto_config.freq_band",
10061
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10062
10063
14
        { &hf_ieee1905_supported_freq_band,
10064
14
          { "Supported frequency band", "ieee1905.supported.freq_band",
10065
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10066
10067
14
        { &hf_ieee1905_event_notification_media_types,
10068
14
          { "Media types", "ieee1905.event_notif.media_types",
10069
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10070
10071
14
        { &hf_ieee1905_sender_al_id,
10072
14
          { "Sender AL ID", "ieee1905.sender.al_id",
10073
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10074
10075
14
        { &hf_ieee1905_push_button_event_msg_id,
10076
14
          { "Push button event message ID", "ieee1905.sender.msg_id",
10077
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10078
10079
14
        { &hf_ieee1905_sender_joining_interface,
10080
14
          { "Joining MAC address of sender", "ieee1905.sender.joining_intf",
10081
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10082
10083
14
        { &hf_ieee1905_new_device_interface,
10084
14
          { "New device MAC address", "ieee1905.new_device.intf",
10085
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10086
10087
14
        { &hf_ieee1905_device_al_mac,
10088
14
          { "1905 device AL MAC address", "ieee1905.device_al_mac_addr",
10089
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10090
10091
14
        { &hf_ieee1905_local_intf_oui,
10092
14
          { "Local interface OUI", "ieee1905.local_intf.oui",
10093
14
            FT_UINT24, BASE_OUI, NULL, 0, NULL, HFILL }},
10094
10095
14
        { &hf_ieee1905_local_intf_variant,
10096
14
          { "Local interface variant index", "ieee1905.local_intf.variant",
10097
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10098
10099
14
        { &hf_ieee1905_local_intf_variant_name,
10100
14
          { "Local interface variant name", "ieee1905.local_intf.variant_name",
10101
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10102
10103
14
        { &hf_ieee1905_local_intf_url_count,
10104
14
          { "Local interface URL octet count", "ieee1905.local_intf.url_byte_count",
10105
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10106
10107
14
        { &hf_ieee1905_local_intf_spec_count,
10108
14
          { "Local interface media specific count", "ieee1905.local_intf.media_count",
10109
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10110
10111
14
        { &hf_ieee1905_local_intf_url,
10112
14
          { "Local interface XML description URL", "ieee1905.local_intf.url",
10113
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10114
10115
14
        { &hf_ieee1905_local_intf_spec,
10116
14
          { "Local interface media specific info", "ieee1905.local_intf.spec_info",
10117
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10118
10119
14
        { &hf_ieee1905_dev_id_friendly_name,
10120
14
          { "Device Id Friendly name", "ieee1905.device_id.friendly_name",
10121
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10122
10123
14
        { &hf_ieee1905_dev_id_manuf_name,
10124
14
          { "Device Id Manufacturer name", "ieee1905.device_id.manuf_name",
10125
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10126
10127
14
        { &hf_ieee1905_dev_id_manuf_model,
10128
14
          { "Device Id Manufacturer model", "ieee1905.device_id.manuf_model",
10129
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10130
10131
14
        { &hf_ieee1905_control_url,
10132
14
          { "Device control URL", "ieee1905.device.control_url",
10133
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10134
10135
14
        { &hf_ieee1905_ipv4_type_count,
10136
14
          { "Count of IPv4 entries", "ieee1905.ipv4_type.count",
10137
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10138
10139
14
        { &hf_ieee1905_mac_address,
10140
14
          { "MAC address", "ieee1905.ipv4_type.mac_address",
10141
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10142
10143
14
        { &hf_ieee1905_ipv4_addr_count,
10144
14
          { "IPv4 address count", "ieee1905.ipv4_type.addr_count",
10145
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10146
10147
14
        { &hf_ieee1905_addr_type,
10148
14
          { "IPv4 address type", "ieee1905.ipv4_type.addr_type",
10149
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10150
10151
14
        { &hf_ieee1905_ipv4_addr,
10152
14
          { "IPv4 address", "ieee1905.ipv4_type.ipv4_addr",
10153
14
            FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
10154
10155
14
        { &hf_ieee1905_dhcp_server,
10156
14
          { "DHCP server", "ieee1905.ipv4_type.dhcp_server",
10157
14
            FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
10158
10159
14
        { &hf_ieee1905_ipv6_type_count,
10160
14
          { "Count of IPv6 entries", "ieee1905.ipv6_type.count",
10161
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10162
10163
14
        { &hf_ieee1905_ipv6_linklocal,
10164
14
          { "Link local address", "ieee1905.ipv6_type.link_local",
10165
14
            FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }},
10166
10167
14
        { &hf_ieee1905_ipv6_mac_address,
10168
14
          { "MAC address", "ieee1905.ipv6_type.mac_address",
10169
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10170
10171
14
        { &hf_ieee1905_ipv6_addr_count,
10172
14
          { "IPv6 address count", "ieee1905.ipv6_type.addr_count",
10173
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10174
10175
14
        { &hf_ieee1905_ipv6_addr_type,
10176
14
          { "IPv6 address type", "ieee1905.ipv6_type.addr_type",
10177
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10178
10179
14
        { &hf_ieee1905_ipv6_addr,
10180
14
          { "IPv6 address", "ieee1905.ipv6_type.ipv6_addr",
10181
14
            FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }},
10182
10183
14
        { &hf_ieee1905_ipv6_dhcp_server,
10184
14
          { "DHCP server", "ieee1905.ipv6_type.dhcp_server",
10185
14
            FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }},
10186
10187
14
        { &hf_ieee1905_generic_phy_media_types,
10188
14
          { "Generic Phy media type count", "ieee1905.button_push.phy_count",
10189
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10190
10191
14
        { &hf_ieee1905_profile_version,
10192
14
          { "1905 profile version type", "ieee1905.profile.version",
10193
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10194
10195
14
        { &hf_ieee1905_power_off_intf_count,
10196
14
          { "Powered off interface count", "ieee1905.power_off.intf_count",
10197
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10198
10199
14
        { &hf_ieee1905_power_change_intf_count,
10200
14
          { "Power change local interface count", "ieee1905.power_chg.intf_count",
10201
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10202
10203
14
        { &hf_ieee1905_power_change_mac_addr,
10204
14
          { "Power change interface MAc addr", "ieee1905.power_chg.mac_addr",
10205
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10206
10207
14
        { &hf_ieee1905_power_change_state,
10208
14
          { "Power change requested state", "ieee1905.power_chg.state",
10209
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10210
10211
14
        { &hf_ieee1905_power_status_intf_count,
10212
14
          { "Power status local interface count", "ieee1905.power_sts.intf_count",
10213
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10214
10215
14
        { &hf_ieee1905_power_status_mac_addr,
10216
14
          { "Power status interface MAc addr", "ieee1905.power_sts.mac_addr",
10217
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10218
10219
14
        { &hf_ieee1905_power_status_state,
10220
14
          { "Power change status", "ieee1905.power_sts.state",
10221
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10222
10223
14
        { &hf_ieee1905_l2_neighbor_intf_count,
10224
14
          { "L2 neighbor interface count", "ieee1905.l2_neighbor.intf_count",
10225
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10226
10227
14
        { &hf_ieee1905_l2_local_intf_mac_addr,
10228
14
          { "L2 neighbor local interface MAC addr", "ieee1905.l2_neighbor.mac_addr",
10229
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10230
10231
14
        { &hf_ieee1905_l2_neighbor_dev_count,
10232
14
          { "L2 neighbor device count", "ieee1905.l2_neighbor.dev_count",
10233
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10234
10235
14
        { &hf_ieee1905_l2_neighbor_mac_addr,
10236
14
          { "L2 neighbor interface MAC address", "ieee1905.l2_neighbor.neighbor_mac_addr",
10237
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10238
10239
14
        { &hf_ieee1905_l2_behind_mac_addr_count,
10240
14
          { "L2 neighbor behind MAC addr count", "ieee1905.l2_neighbor.neighbor_behind_count",
10241
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10242
10243
14
        { &hf_ieee1905_l2_behind_mac_addr,
10244
14
          { "L2 neighbor behind MAC addr", "ieee1905.l2_neighbor.neighbor_behind_mac_addr",
10245
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10246
10247
14
        { &hf_ieee1905_supported_service_count,
10248
14
          { "Supported service count", "ieee1905.supported_service.service_count",
10249
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10250
10251
14
        { &hf_ieee1905_supported_service,
10252
14
          { "Supported service", "ieee1905.supported_service.service",
10253
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10254
10255
14
        { &hf_ieee1905_searched_service_count,
10256
14
          { "Searched service count", "ieee1905.searched_service.service_count",
10257
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10258
10259
14
        { &hf_ieee1905_searched_service,
10260
14
          { "Searched service", "ieee1905.searched_service.service",
10261
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10262
10263
14
        { &hf_ieee1905_ap_radio_identifier,
10264
14
          { "AP radio identifier", "ieee1905.ap_radio_identifier",
10265
14
           FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10266
10267
14
        { &hf_ieee1905_operatonal_bss_radio_count,
10268
14
          { "AP operational BSS radio count", "ieee1905.ap_bss_radio_count",
10269
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10270
10271
14
        { &hf_ieee1905_ap_operational_intf_count,
10272
14
          { "AP operational interface count", "ieee1905.ap_bss_intf_count",
10273
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10274
10275
14
        { &hf_ieee1905_ap_local_intf_mac_addr,
10276
14
          { "AP operational local interface MAC addr", "ieee1905.ap_bss_local_intf_addr",
10277
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10278
10279
14
        { &hf_ieee1905_ap_local_intf_ssid_len,
10280
14
          { "AP operational BSS local interface SSID len", "ieee1905.ap_bss_local_intf_ssid_len",
10281
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10282
10283
14
        { &hf_ieee1905_ap_local_intf_ssid,
10284
14
          { "AP operational BSS local interface SSID", "ieee1905.ap_bss_local_intf_ssid",
10285
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10286
10287
14
        { &hf_ieee1905_ap_capabilities_flags,
10288
14
          { "AP capabilities flags", "ieee1905.ap_capability_flags",
10289
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10290
10291
14
        { &hf_ieee1905_rpt_unsuccessful_associations,
10292
14
          { "Report Unsuccessful Associations", "ieee1905.rpt_unsuccessful_assoc",
10293
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10294
10295
14
        { &hf_ieee1905_unassoc_sta_metrics_oper_flag,
10296
14
          { "STA link metric reporting operational channels", "ieee1905.link_metric_oper",
10297
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80, NULL, HFILL }},
10298
10299
14
        { &hf_ieee1905_unassoc_sta_metrics_non_oper_flag,
10300
14
          { "STA link metric reporting non-operational channels", "ieee1905.link_metric_non_oper",
10301
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40, NULL, HFILL }},
10302
10303
14
        { &hf_ieee1905_agent_init_steering,
10304
14
          { "Agent-initiated RCPI-based Steering", "ieee1905.agent_init_steering",
10305
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20, NULL, HFILL }},
10306
10307
14
        { &hf_ieee1905_rpt_unsuccessful_assoc_report,
10308
14
          { "Unsuccessful Association Attempts", "ieee1905.report_unsuccessful_associations",
10309
14
            FT_BOOLEAN, 8, TFS(&tfs_ieee1905_report_unsuccessful_association_attempt_flag), 0x80, NULL, HFILL }},
10310
10311
14
        { &hf_ieee1905_higher_layer_protocol,
10312
14
          { "Higher layer protocol", "ieee1905.higher_layer_proto",
10313
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10314
10315
14
        { &hf_ieee1905_higher_layer_data,
10316
14
          { "Higher layer data", "ieee1905.higher_layer_data",
10317
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10318
10319
14
        { &hf_ieee1905_assoc_backhaul_station_mac,
10320
14
          { "Associated backhaul station MAC address", "ieee1905.assoc.mac_addr",
10321
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10322
10323
14
        { &hf_ieee1905_backhaul_target_bssid,
10324
14
          { "Target BSS BSSID", "ieee1905.assoc.target_bssid",
10325
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10326
10327
14
        { &hf_ieee1905_backhaul_steering_status,
10328
14
          { "Status code", "ieee1905.assoc.status",
10329
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10330
10331
14
        { &hf_ieee1905_backhaul_operating_class,
10332
14
          { "Backhaul operating class", "ieee1905.assoc.operating_class",
10333
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10334
10335
14
        { &hf_ieee1905_backhaul_channel_number,
10336
14
          { "Backhaul beacon channel number", "ieee1905.assoc.channel_num",
10337
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10338
10339
14
        { &hf_ieee1905_client_assoc_bssid,
10340
14
          { "Target BSSID", "ieee1905.assoc_ctrl.bssid",
10341
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10342
10343
14
        { &hf_ieee1905_association_control,
10344
14
          { "Association control", "ieee1905.assoc_ctrl.control",
10345
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10346
10347
14
        { &hf_ieee1905_association_control_validity,
10348
14
          { "Request validity period", "ieee1905.assoc_ctrl.validity",
10349
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10350
10351
14
        { &hf_ieee1905_client_assoc_sta_count,
10352
14
          { "STA control list count", "ieee1905.assoc_ctrl.sta_list_count",
10353
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10354
10355
14
        { &hf_ieee1905_client_assoc_mac_addr,
10356
14
          { "Target STA MAC address", "ieee1905.assoc_ctrl.target_mac_addr",
10357
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10358
10359
14
        { &hf_ieee1905_btm_reporter_bssid,
10360
14
          { "BTM report source BSSID", "ieee1905.btm_report.source_bssid",
10361
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10362
10363
14
        { &hf_ieee1905_btm_sta_mac_addr,
10364
14
          { "BTM report target MAC address", "ieee1905.btm_report.mac_addr",
10365
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10366
10367
14
        { &hf_ieee1905_btm_report_status,
10368
14
          { "BTM status code", "ieee1905.btm_report.status",
10369
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10370
10371
14
        { &hf_ieee1905_btm_report_bssid,
10372
14
          { "BTM target BSSID", "ieee1905.btm_report.target_bssid",
10373
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10374
10375
14
        { &hf_ieee1905_source_bss_bssid,
10376
14
          { "Source BSS BSSID", "ieee1905.steering_req.source_bssid",
10377
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10378
10379
14
        { &hf_ieee1905_steering_request_flags,
10380
14
          { "Steering request flags", "ieee1905.steering_req.flags",
10381
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10382
10383
14
        { &hf_ieee1905_steering_req_op_window,
10384
14
          { "Steering opportunity window", "ieee1905.steering_req.window",
10385
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10386
10387
14
        { &hf_ieee1905_steering_request_mode_flag,
10388
14
          { "Mode", "ieee1905.steering_req.mode",
10389
14
            FT_BOOLEAN, 8, TFS(&tfs_ieee1905_steering_request_mode_flag), 0x80, NULL, HFILL }},
10390
10391
14
        { &hf_ieee1905_btm_disassoc_imminent_flag,
10392
14
          { "BTM disassociation imminent", "ieee1905.steering_req.disassoc_imminent",
10393
14
            FT_BOOLEAN, 8, TFS(&tfs_ieee1905_btm_disassoc_imminent_flag), 0x40, NULL, HFILL }},
10394
10395
14
        { &hf_ieee1905_btm_abridged_flag,
10396
14
          { "BTM abridged", "ieee1905.steering_req.btm_abridged",
10397
14
            FT_BOOLEAN, 8, TFS(&tfs_ieee1905_btm_abridged_flag), 0x20, NULL, HFILL }},
10398
10399
14
        { &hf_ieee1905_steering_req_reserved,
10400
14
          { "Reserved", "ieee1905.steering_req.reserved",
10401
14
            FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
10402
10403
14
        { &hf_ieee1905_steering_btm_disass_timer,
10404
14
          { "BTM disassociation timer", "ieee1905.steering_req.disass_timer",
10405
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10406
10407
14
        { &hf_ieee1905_steering_req_sta_count,
10408
14
          { "STA list count", "ieee1905.steering_req.sta_count",
10409
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10410
10411
14
        { &hf_ieee1905_steering_req_target_bssid_count,
10412
14
          { "Target BSSID list count", "ieee1905.steering_req.bssid_count",
10413
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10414
10415
14
        { &hf_ieee1905_steering_req_sta_mac,
10416
14
          { "Target MAC address", "ieee1905.steering_req.target_mac",
10417
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10418
10419
14
        { &hf_ieee1905_steering_req_target_bssid,
10420
14
          { "Target BSSID", "ieee1905.steering_req.target_bssid",
10421
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10422
10423
14
        { &hf_ieee1905_steering_req_oper_class,
10424
14
          { "Target BSS operating class", "ieee1905.steering_req.oper_class",
10425
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10426
10427
14
        { &hf_ieee1905_steering_req_target_channel,
10428
14
          { "Target BSS channel number", "ieee1905.steering_req.target_channel",
10429
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10430
10431
14
        { &hf_ieee1905_client_bssid,
10432
14
          { "Client BSSID", "ieee1905.client_info.bssid",
10433
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10434
10435
14
        { &hf_ieee1905_client_mac_addr,
10436
14
          { "Client MAC address", "ieee1905.client_info.mac_addr",
10437
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10438
10439
14
        { &hf_ieee1905_client_capability_result,
10440
14
          { "Result code", "ieee1905.client_capability.result",
10441
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10442
10443
14
        { &hf_ieee1905_client_capability_frame,
10444
14
          { "(Re)Association frame body", "ieee1905.client_capability.frame",
10445
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10446
10447
14
        { &hf_ieee1905_association_flag,
10448
14
          { "Association event", "ieee1905.assoc_event.assoc_event",
10449
14
            FT_BOOLEAN, 8, TFS(&tfs_ieee1905_association_event_flag),
10450
14
            0x80, NULL, HFILL }},
10451
10452
14
        { &hf_ieee1905_association_client_mac_addr,
10453
14
          { "Client mac address", "ieee1905.assoc_event.client_mac",
10454
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10455
10456
14
        { &hf_ieee1905_association_agent_bssid,
10457
14
          { "Multi-AP agent BSSID", "ieee1905.assoc_event.agent_bssid",
10458
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10459
10460
14
        { &hf_ieee1905_association_event_flags,
10461
14
          { "Association event flags", "ieee1905.assoc_event.flags",
10462
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10463
10464
14
        { &hf_ieee1905_ap_radio_max_bss,
10465
14
          { "Maximum BSS support", "ieee1905.radio_basic_cap.max_bss",
10466
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10467
10468
14
        { &hf_ieee1905_ap_radio_classes,
10469
14
          { "Operating class count", "ieee1905.radio_basic.op_classes",
10470
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10471
10472
14
        { &hf_ieee1905_ap_radio_class,
10473
14
          { "Operating class", "ieee1905.radio_basic.op_class",
10474
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10475
10476
14
        { &hf_ieee1905_ap_radio_eirp,
10477
14
          { "Maximum transmit power EIRP", "ieee1905.radio_basic.max_power",
10478
14
            FT_INT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_dbm), 0, NULL, HFILL }},
10479
10480
14
        { &hf_ieee1905_ap_radio_non_op_count,
10481
14
          { "Number of non-operable channels", "ieee1905.radio_basic.non_op_channels",
10482
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10483
10484
14
        { &hf_ieee1905_radio_basic_non_op_channel,
10485
14
          { "Statically non-operable channel", "ieee1905.radio_basic.non_op_channel",
10486
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10487
10488
14
        { &hf_ieee1905_max_supported_tx_streams,
10489
14
          { "Maximum supported Tx spatial streams", "ieee1905.ap_ht.max_tx_streams",
10490
14
            FT_UINT8, BASE_HEX, VALS(max_supported_tx_streams_vals), 0xC0, NULL, HFILL}},
10491
10492
14
        { &hf_ieee1905_max_supported_rx_streams,
10493
14
          { "Maximum supported Rx spatial streams", "ieee1905.ap_ht.max_rx_streams",
10494
14
            FT_UINT8, BASE_HEX, VALS(max_supported_rx_streams_vals), 0x30, NULL, HFILL}},
10495
10496
14
        { &hf_ieee1905_short_gi_20mhz_flag,
10497
14
          { "Short GI support for 20 MHz", "ieee1905.ap_ht.short_gi_20mhz",
10498
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08, NULL, HFILL}},
10499
10500
14
        { &hf_ieee1905_short_gi_40mhz_flag,
10501
14
          { "Short GI support for 40 MHz", "ieee1905.ap_ht.short_gi_40mhz",
10502
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04, NULL, HFILL}},
10503
10504
14
        { &hf_ieee1905_ht_support_40mhz_flag,
10505
14
          { "HT support for 40MHz", "ieee1905.ap_ht.ht_support_40mhz",
10506
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02, NULL, HFILL}},
10507
10508
14
        { &hf_ieee1905_ap_ht_capabilities_radio_id,
10509
14
          { "Radio unique ID", "ieee1905.ap_ht.radio_id",
10510
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10511
10512
14
        { &hf_ieee1905_ht_cap_flags,
10513
14
          { "Capabilities", "ieee1905.ap_ht.caps",
10514
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10515
10516
14
        { &hf_ieee1905_vht_max_supported_tx_streams,
10517
14
          { "Maximum supported Tx spatial streams", "ieee1905.ap_vht.max_tx_streams",
10518
14
            FT_UINT16, BASE_HEX, VALS(vht_he_max_supported_tx_streams_vals), 0xE000, NULL, HFILL}},
10519
10520
14
        { &hf_ieee1905_vht_max_supported_rx_streams,
10521
14
          { "Maximum supported Rx spatial streams", "ieee1905.ap_vht.max_rx_streams",
10522
14
            FT_UINT16, BASE_HEX, VALS(vht_he_max_supported_rx_streams_vals), 0x1C00, NULL, HFILL}},
10523
10524
14
        { &hf_ieee1905_short_gi_80mhz_flag,
10525
14
          { "Short GI support for 80 MHz", "ieee1905.ap_vht.short_gi_80mhz",
10526
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0200, NULL, HFILL}},
10527
10528
14
        { &hf_ieee1905_short_gi_160mhz_flag,
10529
14
          { "Short GI support for 160 and 80+80 MHz", "ieee1905.ap_vht.short_gi_160mhz",
10530
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0100, NULL, HFILL}},
10531
10532
14
        { &hf_ieee1905_vht_support_80plus_mhz_flag,
10533
14
          { "VHT support for 80+80 MHz", "ieee1905.ap_vht.vht_80plus_mhz",
10534
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0080, NULL, HFILL}},
10535
10536
14
        { &hf_ieee1905_vht_support_160_mhz_flag,
10537
14
          { "VHT support for 160 MHz", "ieee1905.ap_vht.vht_160mhz",
10538
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0040, NULL, HFILL}},
10539
10540
14
        { &hf_ieee1905_su_beamformer_capable_flag,
10541
14
          { "SU beamformer capable", "ieee1905.ap_vht.su_beamformer",
10542
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0020, NULL, HFILL}},
10543
10544
14
        { &hf_ieee1905_mu_beamformer_capable_flag,
10545
14
          { "MU beamformer capable", "ieee1905.ap_vht.mu_beamformer",
10546
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0010, NULL, HFILL}},
10547
10548
14
        { &hf_ieee1905_ap_vht_capabilities_radio_id,
10549
14
          { "Radio unique ID", "ieee1905.ap_vht.radio_id",
10550
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10551
10552
14
        { &hf_ieee1905_vht_cap_flags,
10553
14
          { "Capabilities", "ieee1905.ap_vht.caps",
10554
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10555
10556
14
        { &hf_ieee1905_ap_vht_supported_vht_tx_mcs,
10557
14
          { "Supported VHT Tx MCS", "ieee1905.ap_vht.supported_tx_mcs",
10558
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10559
10560
14
        { &hf_ieee1905_ap_vht_supported_vht_rx_mcs,
10561
14
          { "Supported VHT Rx MCS", "ieee1905.ap_vht.supported_rx_mcs",
10562
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10563
10564
14
        { &hf_ieee1905_ap_vht_tx_mcs_map_1ss,
10565
14
          { "Max Tx VHT MCS for 1 SS",
10566
14
            "ieee1905.ap_vht.max_tx_vht_mcs_1_ss",
10567
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10568
14
            0x0003, NULL, HFILL }},
10569
10570
14
        { &hf_ieee1905_ap_vht_tx_mcs_map_2ss,
10571
14
          { "Max Tx VHT MCS for 2 SS",
10572
14
            "ieee1905.ap_vht.max_tx_vht_mcs_2_ss",
10573
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10574
14
            0x000C, NULL, HFILL }},
10575
10576
14
        { &hf_ieee1905_ap_vht_tx_mcs_map_3ss,
10577
14
          { "Max Tx VHT MCS for 3 SS",
10578
14
            "ieee1905.ap_vht.max_tx_vht_mcs_3_ss",
10579
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10580
14
            0x0030, NULL, HFILL }},
10581
10582
14
        { &hf_ieee1905_ap_vht_tx_mcs_map_4ss,
10583
14
          { "Max Tx VHT MCS for 4 SS",
10584
14
            "ieee1905.ap_vht.max_tx_vht_mcs_4_ss",
10585
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10586
14
            0x00C0, NULL, HFILL }},
10587
10588
14
        { &hf_ieee1905_ap_vht_tx_mcs_map_5ss,
10589
14
          { "Max Tx VHT MCS for 5 SS",
10590
14
            "ieee1905.ap_vht.max_tx_vht_mcs_5_ss",
10591
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10592
14
            0x0300, NULL, HFILL }},
10593
10594
14
        { &hf_ieee1905_ap_vht_tx_mcs_map_6ss,
10595
14
          { "Max Tx VHT MCS for 6 SS",
10596
14
            "ieee1905.ap_vht.max_tx_vht_mcs_6_ss",
10597
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10598
14
            0x0C00, NULL, HFILL }},
10599
10600
14
        { &hf_ieee1905_ap_vht_tx_mcs_map_7ss,
10601
14
          { "Max Tx VHT MCS for 7 SS",
10602
14
            "ieee1905.ap_vht.max_tx_vht_mcs_7_ss",
10603
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10604
14
            0x3000, NULL, HFILL }},
10605
10606
14
        { &hf_ieee1905_ap_vht_tx_mcs_map_8ss,
10607
14
          { "Max Tx VHT MCS for 8 SS",
10608
14
            "ieee1905.ap_vht.max_tx_vht_mcs_8_ss",
10609
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10610
14
            0xC000, NULL, HFILL }},
10611
10612
14
        { &hf_ieee1905_ap_vht_rx_mcs_map_1ss,
10613
14
          { "Max Rx VHT MCS for 1 SS",
10614
14
            "ieee1905.ap_vht.max_rx_vht_mcs_1_ss",
10615
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10616
14
            0x0003, NULL, HFILL }},
10617
10618
14
        { &hf_ieee1905_ap_vht_rx_mcs_map_2ss,
10619
14
          { "Max Rx VHT MCS for 2 SS",
10620
14
            "ieee1905.ap_vht.max_rx_vht_mcs_2_ss",
10621
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10622
14
            0x000C, NULL, HFILL }},
10623
10624
14
        { &hf_ieee1905_ap_vht_rx_mcs_map_3ss,
10625
14
          { "Max Rx VHT MCS for 3 SS",
10626
14
            "ieee1905.ap_vht.max_rx_vht_mcs_3_ss",
10627
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10628
14
            0x0030, NULL, HFILL }},
10629
10630
14
        { &hf_ieee1905_ap_vht_rx_mcs_map_4ss,
10631
14
          { "Max Rx VHT MCS for 4 SS",
10632
14
            "ieee1905.ap_vht.max_rx_vht_mcs_4_ss",
10633
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10634
14
            0x00C0, NULL, HFILL }},
10635
10636
14
        { &hf_ieee1905_ap_vht_rx_mcs_map_5ss,
10637
14
          { "Max Rx VHT MCS for 5 SS",
10638
14
            "ieee1905.ap_vht.max_rx_vht_mcs_5_ss",
10639
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10640
14
            0x0300, NULL, HFILL }},
10641
10642
14
        { &hf_ieee1905_ap_vht_rx_mcs_map_6ss,
10643
14
          { "Max Rx VHT MCS for 6 SS",
10644
14
            "ieee1905.ap_vht.max_rx_vht_mcs_6_ss",
10645
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10646
14
            0x0C00, NULL, HFILL }},
10647
10648
14
        { &hf_ieee1905_ap_vht_rx_mcs_map_7ss,
10649
14
          { "Max Rx VHT MCS for 7 SS",
10650
14
            "ieee1905.ap_vht.max_rx_vht_mcs_7_ss",
10651
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10652
14
            0x3000, NULL, HFILL }},
10653
10654
14
        { &hf_ieee1905_ap_vht_rx_mcs_map_8ss,
10655
14
          { "Max Rx VHT MCS for 8 SS",
10656
14
            "ieee1905.ap_vht.max_rx_vht_mcs_8_ss",
10657
14
            FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10658
14
            0xC000, NULL, HFILL }},
10659
10660
14
        { &hf_ieee1905_assoc_clients_bss_count,
10661
14
          { "Included BSS count", "ieee1905.assoc_client.bss_count",
10662
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10663
10664
14
        { &hf_ieee1905_assoc_bssid,
10665
14
          { "Associated BSS", "ieee1905.assoc_client.bss",
10666
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10667
10668
14
        { &hf_ieee1905_bss_client_count,
10669
14
          { "Associated client count", "ieee1905.assoc_client.client_count",
10670
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10671
10672
14
        { &hf_ieee1905_bss_client_mac,
10673
14
          { "Associated client MAC address", "ieee1905.assoc_client.mac_addr",
10674
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10675
10676
14
        { &hf_ieee1905_bss_client_last_assoc,
10677
14
          { "Time since last association", "ieee1905.assoc_client.time_since",
10678
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10679
10680
14
        { &hf_ieee1905_channel_pref_preference,
10681
14
          { "Preference", "ieee1905.channel_pref.pref",
10682
14
            FT_UINT8, BASE_HEX, VALS(channel_preference_prefs_vals), 0xF0, NULL, HFILL}},
10683
14
        { &hf_ieee1905_channel_pref_reason,
10684
14
          { "Reason code", "ieee1905.channel_pref.reason",
10685
14
            FT_UINT8, BASE_HEX, VALS(channel_preference_reason_vals), 0x0F, NULL, HFILL}},
10686
10687
14
        { &hf_ieee1905_channel_preference_radio_id,
10688
14
          { "Radio unique ID", "ieee1905.channel_pref.radio_id",
10689
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10690
10691
14
        { &hf_ieee1905_channel_preference_class_count,
10692
14
          { "Operating class count", "ieee1905.channel_prefs.class_count",
10693
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10694
10695
14
        { &hf_ieee1905_channel_pref_class,
10696
14
          { "Operating class", "ieee1905.channel_prefs.class",
10697
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10698
10699
14
        { &hf_ieee1905_channel_pref_channel_count,
10700
14
          { "Channel list count", "ieee1905.channel_prefs.channel_count",
10701
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10702
10703
14
        { &hf_ieee1905_channel_pref_channel,
10704
14
          { "Channel number", "ieee1905.channel_prefs.channel_no",
10705
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10706
10707
14
        { &hf_ieee1905_channel_prefs_flags,
10708
14
          { "Channel preference flags", "ieee1905.channel_prefs.flags",
10709
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10710
10711
14
        { &hf_ieee1905_trans_power_limit_radio_id,
10712
14
          { "Radio unique ID", "ieee1905.transmit_power.radio_id",
10713
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10714
10715
14
        { &hf_ieee1905_trans_power_limit_eirp,
10716
14
          { "Transmit power limit EIRP per 20MHz", "ieee1905.transmit_power.eirp",
10717
14
            FT_INT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_dbm), 0, NULL, HFILL }},
10718
10719
14
        { &hf_ieee1905_channel_select_resp_radio_id,
10720
14
          { "Radio unique ID", "ieee1905.channel_select.radio_id",
10721
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10722
10723
14
        { &hf_ieee1905_radio_metrics_radio_id,
10724
14
          { "Radio unique ID", "ieee1905.radio_metrics.radio_id",
10725
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10726
10727
14
        { &hf_ieee1905_channel_select_resp_code,
10728
14
          { "Response code", "ieee1905.channel_select.response_code",
10729
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10730
10731
14
        { &hf_ieee1905_op_channel_report_radio_id,
10732
14
          { "Radio unique ID", "ieee1905.operating_channel.radio_id",
10733
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10734
10735
14
        { &hf_ieee1905_op_channel_report_classes,
10736
14
          { "Currently operating classes", "ieee1905.operating_channel.classes",
10737
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10738
10739
14
        { &hf_ieee1905_op_channel_class,
10740
14
          { "Operating class", "ieee1905.operating_channel.op_class",
10741
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10742
10743
14
        { &hf_ieee1905_op_channel_number,
10744
14
          { "Operating channel number", "ieee1905.operating_channel.chan_num",
10745
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10746
10747
14
        { &hf_ieee1905_op_channel_eirp,
10748
14
          { "Current transmit power EIRP", "ieee1905.operating_channel.eirp",
10749
14
            FT_INT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_dbm), 0, NULL, HFILL }},
10750
10751
14
        { &hf_ieee1905_ap_he_cap_radio_id,
10752
14
          { "Radio unique ID", "ieee1905.ap_he_capability.radio_id",
10753
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10754
10755
14
        { &hf_ieee1905_ap_he_cap_mcs_length,
10756
14
          { "Supported HE MCS length", "ieee1905.ap_he_capability.he_mcs_count",
10757
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10758
10759
14
        { &hf_ieee1905_ap_he_cap_tx_mcs_le_80_mhz,
10760
14
          { "Supported Tx HE-MCS <= 80 MHz",
10761
14
            "ieee1905.ap_he_capability.supported_tx_he_mcs_le_80mhz",
10762
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10763
10764
14
        { &hf_ieee1905_ap_he_tx_mcs_map_1ss,
10765
14
          { "Max Tx HE-MCS for 1 SS",
10766
14
            "ieee1905.ap_he_capability.max_tx_he_mcs_1_ss",
10767
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_1_ss_vals),
10768
14
            0x0003, NULL, HFILL }},
10769
10770
14
        { &hf_ieee1905_ap_he_tx_mcs_map_2ss,
10771
14
          { "Max Tx HE-MCS for 2 SS",
10772
14
            "ieee1905.ap_he_capability.max_tx_he_mcs_2_ss",
10773
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_2_ss_vals),
10774
14
            0x000C, NULL, HFILL }},
10775
10776
14
        { &hf_ieee1905_ap_he_tx_mcs_map_3ss,
10777
14
          { "Max Tx HE-MCS for 3 SS",
10778
14
            "ieee1905.ap_he_capability.max_tx_he_mcs_3_ss",
10779
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_3_ss_vals),
10780
14
            0x0030, NULL, HFILL }},
10781
10782
14
        { &hf_ieee1905_ap_he_tx_mcs_map_4ss,
10783
14
          { "Max Tx HE-MCS for 4 SS",
10784
14
            "ieee1905.ap_he_capability.max_tx_he_mcs_4_ss",
10785
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_4_ss_vals),
10786
14
            0x00C0, NULL, HFILL }},
10787
10788
14
        { &hf_ieee1905_ap_he_tx_mcs_map_5ss,
10789
14
          { "Max Tx HE-MCS for 5 SS",
10790
14
            "ieee1905.ap_he_capability.max_tx_he_mcs_5_ss",
10791
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_5_ss_vals),
10792
14
            0x0300, NULL, HFILL }},
10793
10794
14
        { &hf_ieee1905_ap_he_tx_mcs_map_6ss,
10795
14
          { "Max Tx HE-MCS for 6 SS",
10796
14
            "ieee1905.ap_he_capability.max_tx_he_mcs_6_ss",
10797
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_6_ss_vals),
10798
14
            0x0C00, NULL, HFILL }},
10799
10800
14
        { &hf_ieee1905_ap_he_tx_mcs_map_7ss,
10801
14
          { "Max Tx HE-MCS for 7 SS",
10802
14
            "ieee1905.ap_he_capability.max_tx_he_mcs_7_ss",
10803
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_7_ss_vals),
10804
14
            0x3000, NULL, HFILL }},
10805
10806
14
        { &hf_ieee1905_ap_he_tx_mcs_map_8ss,
10807
14
          { "Max Tx HE-MCS for 8 SS",
10808
14
            "ieee1905.ap_he_capability.max_tx_he_mcs_8_ss",
10809
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_8_ss_vals),
10810
14
            0xC000, NULL, HFILL }},
10811
10812
14
        { &hf_ieee1905_ap_he_cap_rx_mcs_le_80_mhz,
10813
14
          { "Supported Rx HE-MCS <= 80 MHz",
10814
14
            "ieee1905.ap_he_capability.supported_rx_he_mcs_le_80mhz",
10815
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10816
10817
14
        { &hf_ieee1905_ap_he_rx_mcs_map_1ss,
10818
14
          { "Max Rx HE-MCS for 1 SS",
10819
14
            "ieee1905.ap_he_capability.max_rx_he_mcs_1_ss",
10820
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_1_ss_vals),
10821
14
            0x0003, NULL, HFILL }},
10822
10823
14
        { &hf_ieee1905_ap_he_rx_mcs_map_2ss,
10824
14
          { "Max Rx HE-MCS for 2 SS",
10825
14
            "ieee1905.ap_he_capability.max_rx_he_mcs_2_ss",
10826
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_2_ss_vals),
10827
14
            0x000C, NULL, HFILL }},
10828
10829
14
        { &hf_ieee1905_ap_he_rx_mcs_map_3ss,
10830
14
          { "Max Rx HE-MCS for 3 SS",
10831
14
            "ieee1905.ap_he_capability.max_rx_he_mcs_3_ss",
10832
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_3_ss_vals),
10833
14
            0x0030, NULL, HFILL }},
10834
10835
14
        { &hf_ieee1905_ap_he_rx_mcs_map_4ss,
10836
14
          { "Max Rx HE-MCS for 4 SS",
10837
14
            "ieee1905.ap_he_capability.max_rx_he_mcs_4_ss",
10838
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_4_ss_vals),
10839
14
            0x00C0, NULL, HFILL }},
10840
10841
14
        { &hf_ieee1905_ap_he_rx_mcs_map_5ss,
10842
14
          { "Max Rx HE-MCS for 5 SS",
10843
14
            "ieee1905.ap_he_capability.max_rx_he_mcs_5_ss",
10844
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_5_ss_vals),
10845
14
            0x0300, NULL, HFILL }},
10846
10847
14
        { &hf_ieee1905_ap_he_rx_mcs_map_6ss,
10848
14
          { "Max Rx HE-MCS for 6 SS",
10849
14
            "ieee1905.ap_he_capability.max_rx_he_mcs_6_ss",
10850
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_6_ss_vals),
10851
14
            0x0C00, NULL, HFILL }},
10852
10853
14
        { &hf_ieee1905_ap_he_rx_mcs_map_7ss,
10854
14
          { "Max Rx HE-MCS for 7 SS",
10855
14
            "ieee1905.ap_he_capability.max_rx_he_mcs_7_ss",
10856
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_7_ss_vals),
10857
14
            0x3000, NULL, HFILL }},
10858
10859
14
        { &hf_ieee1905_ap_he_rx_mcs_map_8ss,
10860
14
          { "Max Rx HE-MCS for 8 SS",
10861
14
            "ieee1905.ap_he_capability.max_rx_he_mcs_8_ss",
10862
14
            FT_UINT16, BASE_DEC, VALS(max_he_mcs_8_ss_vals),
10863
14
            0xC000, NULL, HFILL }},
10864
10865
14
        { &hf_ieee1905_ap_he_cap_tx_mcs_160_mhz,
10866
14
          { "Supported Tx HE-MCS 160 MHz",
10867
14
            "ieee1905.ap_he_capability.supported_tx_he_mcs_160mhz",
10868
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10869
10870
14
        { &hf_ieee1905_ap_he_cap_rx_mcs_160_mhz,
10871
14
          { "Supported Rx HE-MCS 160 MHz",
10872
14
            "ieee1905.ap_he_capability.supported_rx_he_mcs_160mhz",
10873
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10874
10875
14
        { &hf_ieee1905_ap_he_cap_tx_mcs_80p80_mhz,
10876
14
          { "Supported Tx HE-MCS 80+80 MHz",
10877
14
            "ieee1905.ap_he_capability.supported_tx_he_mcs_80p80mhz",
10878
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10879
10880
14
        { &hf_ieee1905_ap_he_cap_rx_mcs_80p80_mhz,
10881
14
          { "Supported Rx HE-MCS 80+80 MHz",
10882
14
            "ieee1905.ap_he_capability.supported_rx_he_mcs_80p80mhz",
10883
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10884
10885
14
        { &hf_ieee1905_unassoc_metrics_mac_count,
10886
14
          {"MAC Addresses for this channel",
10887
14
           "ieee1905.unassoc_sta_link_metrics.mac_count",
10888
14
           FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10889
10890
14
        { &hf_ieee1905_unassoc_link_metrics_query_mac,
10891
14
          { "STA MAC address", "ieee1905.unassoc_sta_link_metrics.mac_addr",
10892
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10893
10894
14
        { &hf_ieee1905_ap_metrics_reporting_interval,
10895
14
          { "AP metrics reporting interval", "ieee1905.sta_metric_policy.ap_interval",
10896
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10897
10898
14
        { &hf_ieee1905_metric_reporting_policy_radio_id,
10899
14
          { "Radio ID", "ieee1905.metric_reporting_policy.radio_id",
10900
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10901
10902
14
        { &hf_ieee1905_metric_reporting_radio_count,
10903
14
          { "Radio count", "ieee1905.sta_metric_policy.radio_count",
10904
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10905
10906
14
        { &hf_ieee1905_metric_rcpi_threshold,
10907
14
          { "RCPI reporting threshold", "ieee1905.sta_metric_policy.rcpi_threshold",
10908
14
            FT_UINT8, BASE_CUSTOM, CF_FUNC(rcpi_threshold_custom),
10909
14
            0, NULL, HFILL }},
10910
10911
14
        { &hf_ieee1905_metric_reporting_rcpi_hysteresis,
10912
14
          {"STA Metrics Reporting RCPI Hysteresis Margin Override",
10913
14
            "ieee1905.sta_metric_policy.rcpi_hysteresis_margin_override",
10914
14
            FT_UINT8, BASE_CUSTOM, CF_FUNC(rcpi_hysteresis_custom),
10915
14
            0, NULL, HFILL }},
10916
10917
14
        { &hf_ieee1905_metrics_policy_flags,
10918
14
          {"STA Metrics Reporting Policy Flags",
10919
14
            "ieee1905.sta_metrics_policy_flags",
10920
14
          FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10921
10922
14
        { &hf_ieee1905_assoc_sta_traffic_stats_inclusion,
10923
14
          { "Associated STA Traffic Stats Inclusion Policy",
10924
14
             "ieee1905.sta_metrics_policy_flags.sta_traffic_stats_inclusion",
10925
14
          FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
10926
10927
14
        { &hf_ieee1905_assoc_sta_link_metrics_inclusion,
10928
14
          { "Associated STA Link Metrics Inclusion Policy",
10929
14
             "ieee1905.sta_metrics_policy_flags.sta_link_metrics_inclusion",
10930
14
          FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
10931
10932
14
        { &hf_ieee1905_assoc_wf6_status_policy_inclusion,
10933
14
          { "Associated Wi-Fi6 STA Status Inclusion Policy",
10934
14
            "ieee1905.sta_metrics_policy_flags.wf6_sta_status_inclusion",
10935
14
            FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
10936
10937
14
        { &hf_ieee1905_reporting_policy_flags_reserved,
10938
14
          { "Reserved", "ieee1905.sta_metrics_policy_flags.reserved",
10939
14
            FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
10940
10941
14
        { &hf_ieee1905_metrics_channel_util_threshold,
10942
14
          { "Utilization Reporting threshold", "ieee1905.sta_metric_policy.utilization_threshold",
10943
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_dbm), 0, NULL, HFILL }},
10944
10945
14
        { &hf_ieee1905_ap_metric_query_bssid_cnt,
10946
14
          { "BSSID Count", "ieee1905.ap_metrics_query.bssid_cnt",
10947
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10948
10949
14
        { &hf_ieee1905_ap_metric_query_bssid,
10950
14
          { "Query BSSID", "ieee1905.ap_metrics_query.bssid",
10951
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10952
10953
14
        { &hf_ieee1905_sta_mac_address_type,
10954
14
          { "MAC address", "ieee1905.sta_mac_addr_type.mac_addr",
10955
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10956
10957
14
        { &hf_ieee1905_assoc_sta_mac_addr,
10958
14
          { "MAC address", "ieee1905.assoc_sta_link_metrics.mac_addr",
10959
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10960
10961
14
        { &hf_ieee1905_assoc_sta_bssid_count,
10962
14
          { "Number of BSSIDs for STA", "ieee1905.assoc_sta_link_metrics.bssid_count",
10963
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10964
10965
14
        { &hf_ieee1905_assoc_sta_link_metrics_bssid,
10966
14
          { "STA BSSID", "ieee1905.assoc_sta_link_metrics.bssid",
10967
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10968
10969
14
        { &hf_ieee1905_assoc_sta_link_metrics_time_delta,
10970
14
          { "Measurement time delta", "ieee1905.assoc_sta_link_metrics.time_delta",
10971
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
10972
10973
14
        { &hf_ieee1905_assoc_sta_link_metrics_dwn_rate,
10974
14
          { "Downlink data rate", "ieee1905.assoc_sta_link_metrics.down_rate",
10975
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
10976
10977
14
        { &hf_ieee1905_assoc_sta_link_metrics_up_rate,
10978
14
          { "Uplink data rate", "ieee1905.assoc_sta_link_metrics.up_rate",
10979
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
10980
10981
14
        { &hf_ieee1905_assoc_sta_link_metrics_rcpi,
10982
14
          { "Measured uplink RCPI for STA", "ieee1905.assoc_sta_link_metrics.rcpi",
10983
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10984
10985
14
        { &hf_ieee1905_assoc_wf6_sta_mac_addr,
10986
14
          { "MAC address", "ieee1905.assoc_wf6_sta_status_report.mac_addr",
10987
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10988
10989
14
        { &hf_ieee1905_assoc_wf6_sta_tid_count,
10990
14
          { "Number of Wi-Fi 6 TIDs",
10991
14
            "ieee1905.assoc_wf6_sta_status_report.tid_count",
10992
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10993
10994
14
        { &hf_ieee1905_assoc_wf6_sta_tid,
10995
14
          { "TID", "ieee1905.assoc_wf6_sta_status_report.tid",
10996
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10997
10998
14
        { &hf_ieee1905_assoc_wf6_sta_queue_size,
10999
14
          { "Queue Size", "ieee1905.assoc_wf6_sta_status_report.queue_size",
11000
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11001
11002
14
        { &hf_ieee1905_assoc_sta_ext_link_metrics_mac_addr,
11003
14
          { "Associated STA MAC Address",
11004
14
            "ieee1905.assoc_sta_extended_link_metrics.mac_addr",
11005
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11006
11007
14
        { &hf_ieee1905_assoc_sta_ext_link_metrics_count,
11008
14
          { "BSSID count", "ieee1905.assoc_sta_extended_link_metrics.count",
11009
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11010
11011
14
        { &hf_ieee1905_assoc_sta_extended_metrics_bssid,
11012
14
          { "BSSID", "ieee1905.assoc_sta_extended_link_metrics.bssid",
11013
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11014
11015
14
        { &hf_ieee1905_assoc_sta_extended_metrics_lddlr,
11016
14
          { "Last Data Downlink Rate",
11017
14
            "ieee1905.assoc_sta_extended_link_metrics.lddlr",
11018
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11019
11020
14
        { &hf_ieee1905_assoc_sta_extended_metrics_ldulr,
11021
14
          { "Last Data Uplink Rate",
11022
14
            "ieee1905.assoc_sta_extended_link_metrics.ldulr",
11023
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11024
11025
14
        { &hf_ieee1905_assoc_sta_extended_metrics_ur,
11026
14
          { "Utilization Receive",
11027
14
            "ieee1905.assoc_sta_extended_link_metrics.ur",
11028
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11029
11030
14
        { &hf_ieee1905_assoc_sta_extended_metrics_tr,
11031
14
          { "Utilization Transmit",
11032
14
            "ieee1905.assoc_sta_extended_link_metrics.ut",
11033
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11034
11035
14
        { &hf_ieee1905_unassoc_sta_link_metrics_class,
11036
14
          { "Operating class", "ieee1905.unassoc_sta_link_metrics.operaring_class",
11037
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11038
11039
14
        { &hf_ieee1905_unassoc_sta_link_channel_count,
11040
14
          { "Channel count", "ieee1905.unassoc_sta_link_metrics.channel_count",
11041
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11042
11043
14
        { &hf_ieee1905_unassoc_metrics_channel,
11044
14
          { "Channel number", "ieee1905.unassoc_sta_link_metrics.channel",
11045
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11046
11047
14
        { &hf_ieee1905_he_max_supported_tx_streams,
11048
14
          { "Maximum supported Tx spatial streams", "ieee1905.he_cap.max_tx_streams",
11049
14
            FT_UINT16, BASE_HEX, VALS(vht_he_max_supported_tx_streams_vals), 0xE000, NULL, HFILL}},
11050
11051
14
        { &hf_ieee1905_he_max_supported_rx_streams,
11052
14
          { "Maximum supported Rx spatial streams", "ieee1905.he_cap.max_rx_streams",
11053
14
            FT_UINT16, BASE_HEX, VALS(vht_he_max_supported_rx_streams_vals), 0x1C00, NULL, HFILL}},
11054
11055
14
        { &hf_ieee1905_he_support_80plus_mhz_flag,
11056
14
          { "HE support for 80+80 MHz", "ieee1905.ap_he.he_80plus_mhz",
11057
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported),
11058
14
            0x0200, NULL, HFILL}},
11059
11060
14
        { &hf_ieee1905_he_support_160mhz_flag,
11061
14
          { "HE support for 160 MHz", "ieee1905.ap_he.he_160_mhz",
11062
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0100, NULL, HFILL}},
11063
11064
14
        { &hf_ieee1905_he_su_beamformer_capable_flag,
11065
14
          { "SU beanformer capable", "ieee1905.ap_he.su_beamformer",
11066
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0080, NULL, HFILL}},
11067
11068
14
        { &hf_ieee1905_he_mu_beamformer_capable_flag,
11069
14
          { "MU beamformer capable", "ieee1905.ap_he.mu_beamformer",
11070
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0040, NULL, HFILL}},
11071
11072
14
        { &hf_ieee1905_ul_mu_mimo_capable_flag,
11073
14
          { "UL MU-MIMO capable", "ieee1905.ap_he.ul_mu_mimo",
11074
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0020, NULL, HFILL}},
11075
11076
14
        { &hf_ieee1905_ul_mu_mimo_ofdma_capable_flag,
11077
14
          { "UL MU-MIMO OFDMA capable", "ieee1905.ap_he.he_ul_mu_mimo_ofdma",
11078
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0010, NULL, HFILL}},
11079
11080
14
        { &hf_ieee1905_dl_mu_mimo_ofdma_capable_flag,
11081
14
          { "DL MU-MIMO OFDMA capable", "ieee1905.ap_he.he_dl_mu_mimo_ofdma",
11082
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0008, NULL, HFILL}},
11083
11084
14
        { &hf_ieee1905_ul_ofdma_capable,
11085
14
          { "UL OFDMA capable", "ieee1905.ap_he.he_ul_ofdma",
11086
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0004, NULL, HFILL}},
11087
11088
14
        { &hf_ieee1905_dl_ofdma_capable,
11089
14
          { "DL OFDMA capable", "ieee1905.ap_he.he_dl_ofdma",
11090
14
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0002, NULL, HFILL}},
11091
11092
14
        { &hf_ieee1905_he_cap_flags,
11093
14
          { "Capabilities", "ieee1905.ap_he.caps",
11094
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
11095
11096
14
        { &hf_ieee1905_steering_policy_local_disallowed_count,
11097
14
          { "Local steering disallowed STA count", "ieee1905.steering_policy.local_disallow_sta",
11098
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11099
11100
14
        { &hf_ieee1905_steering_disallowed_mac_addr,
11101
14
          { "Local steering disallowed MAC address", "ieee1905.steering_policy.local_disallow_mac",
11102
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11103
11104
14
        { &hf_ieee1905_btm_steering_disallowed_count,
11105
14
          { "BTM steering disallowed count", "ieee1905.steering_policy.btm_disall_count",
11106
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11107
11108
14
        { &hf_ieee1905_btm_steering_disallowed_mac_addr,
11109
14
          { "Local steering disallowed MAC address", "ieee1905.steering_policy.local_disallow_mac_addr",
11110
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11111
11112
14
        { &hf_ieee1905_steering_policy_radio_count,
11113
14
          { "Steering policy radio count", "ieee1905.steering_policy.radio_count",
11114
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11115
11116
14
        { &hf_ieee1905_steering_policy_radio_id,
11117
14
          { "Radio unique ID", "ieee1905.steering_policy.radio_id",
11118
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11119
11120
14
        { &hf_ieee1905_steering_policy_policy,
11121
14
          { "Steering policy", "ieee1905.steering_policy.policy",
11122
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11123
11124
14
        { &hf_ieee1905_steering_policy_util,
11125
14
          { "Channel utilization threshold", "ieee1905.steering_policy.utilization_threshold",
11126
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11127
11128
14
        { &hf_ieee1905_steering_policy_rcpi_threshold,
11129
14
          { "RCPI steering threshold", "ieee1905.steering_policy.rcpi_threshold",
11130
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11131
11132
14
        { &hf_ieee1905_radio_restriction_radio_id,
11133
14
          { "Radio unique ID", "ieee1905.radio_restriction.radio_id",
11134
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11135
11136
14
        { &hf_ieee1905_radio_restriction_op_class_count,
11137
14
          { "Restricted operating classes", "ieee1905.radio_restriction.classes",
11138
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11139
11140
14
        { &hf_ieee1905_radio_restriction_op_class,
11141
14
          { "Restricted operating class", "ieee1905.radio_restriction.class",
11142
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11143
11144
14
        { &hf_ieee1905_radio_restriction_chan_count,
11145
14
          { "Channel count", "ieee1905.radio_restriction.channel_count",
11146
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11147
11148
14
        { &hf_ieee1905_radio_restriction_channel,
11149
14
          { "Restricted channel", "ieee1905.radio_restriction.channel",
11150
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11151
11152
14
        { &hf_ieee1905_radio_restriction_min_separation,
11153
14
          { "Minimum separation", "ieee1905.radio_restriction.min_sep",
11154
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11155
11156
14
        { &hf_ieee1905_include_estimated_spi_ac_eq_be,
11157
14
          { "Include Estimated Service Parameters Information for AC=BE",
11158
14
             "ieee1905.ap_metrics.include_ac_eq_be_params",
11159
14
           FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x80, NULL, HFILL }},
11160
11161
14
        { &hf_ieee1905_include_estimated_spi_ac_eq_bk,
11162
14
          { "Include Estimated Service Parameters Information for AC=BK",
11163
14
             "ieee1905.ap_metrics.include_ac_eq_bk_params",
11164
14
           FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x40, NULL, HFILL }},
11165
11166
14
        { &hf_ieee1905_include_estimated_spi_ac_eq_vo,
11167
14
          { "Include Estimated Service Parameters Information for AC=VO",
11168
14
             "ieee1905.ap_metrics.include_ac_eq_vo_params",
11169
14
           FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x20, NULL, HFILL }},
11170
11171
14
        { &hf_ieee1905_include_estimated_spi_ac_eq_vi,
11172
14
          { "Include Estimated Service Parameters Information for AC=VI",
11173
14
             "ieee1905.ap_metrics.include_ac_eq_vi_params",
11174
14
           FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x10, NULL, HFILL }},
11175
11176
14
        { &hf_ieee1905_ap_metrics_agent_bssid,
11177
14
          { "Multi-AP agent BSSID", "ieee1905.ap_metrics.bssid",
11178
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11179
11180
14
        { &hf_ieee1905_ap_metrics_channel_utilization,
11181
14
          { "Channel utilization", "ieee1905.ap_metrics.channel_util",
11182
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11183
11184
14
        { &hf_ieee1905_ap_metrics_sta_count,
11185
14
          { "BSS STA count", "ieee1905.ap_metrics.sta_count",
11186
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
11187
11188
14
        { &hf_ieee1905_ap_metrics_flags,
11189
14
          { "Estimated Service Parameters Flags", "ieee1905.ap_metrics.flags",
11190
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11191
11192
14
        { &hf_ieee1905_ap_metrics_service_params_be,
11193
14
          { "Estimated service parameters AC=BE", "ieee1905.ap_metrics.est_param_be",
11194
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11195
11196
14
        { &hf_ieee1905_ap_metrics_service_params_bk,
11197
14
          { "Estimated service parameters AC=BK", "ieee1905.ap_metrics.est_param_bk",
11198
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11199
11200
14
        { &hf_ieee1905_ap_metrics_service_params_vo,
11201
14
          { "Estimated service parameters AC=VO", "ieee1905.ap_metrics.est_param_vo",
11202
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11203
11204
14
        { &hf_ieee1905_ap_metrics_service_params_vi,
11205
14
          { "Estimated service parameters AC=VI", "ieee1905.ap_metrics.est_param_vi",
11206
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11207
11208
14
        { &hf_ieee1905_unassoc_sta_link_metric_op_class,
11209
14
          { "Operating class", "ieee1905.unassoc_sta_link_metrics.op_class",
11210
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11211
11212
14
        { &hf_ieee1905_unassoc_sta_link_metric_sta_count,
11213
14
          { "STA count", "ieee1905.unassoc_sta_link_metrics.sta_count",
11214
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11215
11216
14
        { &hf_ieee1905_unassoc_link_metric_mac_addr,
11217
14
          { "STA MAC address", "ieee1905.unassoc_sta_link_metrics.mac_addr",
11218
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11219
11220
14
        { &hf_ieee1905_unassoc_link_metric_channel,
11221
14
          { "Channel number", "ieee1905.unassoc_sta_link_metrics.channel",
11222
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11223
11224
14
        { &hf_ieee1905_unassoc_link_metric_delta,
11225
14
          { "Time delta (ms)", "ieee1905.unassoc_sta_link_metrics.delta",
11226
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11227
11228
14
        { &hf_ieee1905_beacon_metrics_query_mac_addr,
11229
14
          { "Associated STA MAC address", "ieee1905.beacon_metrics.assoc_sta_mac",
11230
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11231
11232
14
        { &hf_ieee1905_unassoc_link_metric_uplink_rcpi,
11233
14
          { "Uplink RCPI", "ieee1905.unassoc_sta_link_metrics.rcpi",
11234
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11235
11236
14
        { &hf_ieee1905_beacon_metrics_query_op_class,
11237
14
          { "Operating class", "ieee1905.beacon_metrics.op_class",
11238
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11239
11240
14
        { &hf_ieee1905_beacon_metrics_query_channel,
11241
14
          { "Channel number", "ieee1905.beacon_metrics.channel_number",
11242
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11243
11244
14
        { &hf_ieee1905_beacon_metrics_query_bssid,
11245
14
          { "BSSID", "ieee1905.beacon_metrics.bssid",
11246
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11247
11248
14
        { &hf_ieee1905_beacon_metrics_query_detail,
11249
14
          { "Reporting detail", "ieee1905.beacon_metrics.detail",
11250
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11251
11252
14
        { &hf_ieee1905_beacon_metrics_query_ssid_len,
11253
14
          { "SSID length", "ieee1905.beacon_metrics.ssid_len",
11254
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11255
11256
14
        { &hf_ieee1905_beacon_metrics_query_ssid,
11257
14
          { "SSID", "ieee1905.beacon_metrics.ssid",
11258
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
11259
11260
14
        { &hf_ieee1905_beacon_metrics_channel_count,
11261
14
          { "Channel reports number", "ieee1905.beacon_metrics.report_number",
11262
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11263
11264
14
        { &hf_ieee1905_beacon_metrics_report_len,
11265
14
          { "Channel report length", "ieee1905.beacon_metrics.report_length",
11266
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11267
11268
14
        { &hf_ieee1905_beacon_metrics_report_op_class,
11269
14
          { "Channel report operating class", "ieee1905.beacon_metrics.op_class",
11270
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11271
11272
14
        { &hf_ieee1905_beacon_metrics_report_channel_id,
11273
14
          { "Channel number", "ieee1905.beacon_metrics.channel_number",
11274
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11275
11276
14
        { &hf_ieee1905_measurement_report,
11277
14
          { "Measurement Report", "ieee1905.measurement_report",
11278
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11279
11280
14
        { &hf_ieee1905_beacon_metrics_response_mac_addr,
11281
14
          { "STA MAC address", "ieee1905.beacon_metrics.mac_addr",
11282
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11283
11284
14
        { &hf_ieee1905_beacon_metrics_response_reserved,
11285
14
          { "Reserved", "ieee1905.beacon_metrics.reserved",
11286
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11287
11288
14
        { &hf_ieee1905_beacon_metrics_response_meas_num,
11289
14
          { "Number of Measurements", "ieee1905.beacon_metrics.number_of_measurements",
11290
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11291
11292
14
        { &hf_ieee1905_assoc_sta_traffic_stats_mac_addr,
11293
14
          { "Associated STA MAC address", "ieee1905.assoc_sta_traffic_stats.mac_addr",
11294
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11295
11296
14
        { &hf_ieee1905_assoc_sta_traffic_stats_bytes_sent,
11297
14
          { "Bytes Sent", "ieee1905.assoc_sta_traffic_stats.bytes_sent",
11298
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11299
11300
14
        { &hf_ieee1905_assoc_sta_traffic_stats_bytes_rcvd,
11301
14
          { "Bytes Received", "ieee1905.assoc_sta_traffic_stats.bytes_rcvd",
11302
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11303
11304
14
        { &hf_ieee1905_assoc_sta_traffic_stats_packets_sent,
11305
14
          { "Packets Sent", "ieee1905.assoc_sta_traffic_stats.packets_sent",
11306
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11307
11308
14
        { &hf_ieee1905_assoc_sta_traffic_stats_packets_rcvd,
11309
14
          { "Packets Received", "ieee1905.assoc_sta_traffic_stats.packets_rcvd",
11310
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11311
11312
14
        { &hf_ieee1905_assoc_sta_traffic_stats_tx_pkt_errs,
11313
14
          { "Tx Packet Errors", "ieee1905.assoc_sta_traffic_stats.tx_pkt_errs",
11314
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11315
11316
14
        { &hf_ieee1905_assoc_sta_traffic_stats_rx_pkt_errs,
11317
14
          { "Rx Packet Errors", "ieee1905.assoc_sta_traffic_stats.rx_packet_errs",
11318
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11319
11320
14
        { &hf_ieee1905_assoc_sta_traffic_stats_retrans_count,
11321
14
          { "Retransmission Count", "ieee1905.assoc_sta_traffic_stats.retrans_count",
11322
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11323
11324
14
        { &hf_ieee1905_error_code_value,
11325
14
          { "Reason code", "ieee1905.error_code.reason",
11326
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11327
11328
14
        { &hf_ieee1905_error_code_mac_addr,
11329
14
          { "MAC address of error-code STA", "ieee1905.error_code.mac_addr",
11330
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11331
11332
14
        { &hf_ieee1905_channel_scan_rep_policy,
11333
14
          { "Reporting Policy", "ieee1905.channel_scan_reporting_policy",
11334
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11335
11336
14
        { &hf_ieee1905_channel_scan_pol_report,
11337
14
          { "Report Independent Channel Scans",
11338
14
            "ieee1905.channel_scan_reporting_policy.report_independent_channel_scans",
11339
14
            FT_BOOLEAN, 8, TFS(&report_independent_scans_tfs), 0x01, NULL, HFILL }},
11340
11341
14
        { &hf_ieee1905_channel_scan_pol_reserved,
11342
14
          { "Reserved", "ieee1905.channel_scan_reporting_policy.reserved",
11343
14
            FT_UINT8, BASE_HEX, NULL, 0xFE, NULL, HFILL }},
11344
11345
14
        { &hf_ieee1905_channel_scan_capabilities_radio_num,
11346
14
          { "Number of radios", "ieee1905.channel_scan_capabilities.num_radios",
11347
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11348
11349
14
        { &hf_ieee1905_channel_scan_capa_radio_id,
11350
14
          { "Radio Unique ID", "ieee1905.channel_scan_capabilities.radio_id",
11351
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
11352
11353
14
        { &hf_ieee1905_channel_scan_capa_flags,
11354
14
          { "Flags", "ieee1905.channel_scan_capabilities.flags",
11355
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
11356
11357
14
        { &hf_ieee1905_channel_scan_capa_flags_on_boot_only,
11358
14
          { "On boot only", "ieee1905.channel_scan_capabilities.flags.on_boot_only",
11359
14
            FT_BOOLEAN, 8, TFS(&channel_scan_capa_flags_on_boot_only_tfs),
11360
14
            0x80, NULL, HFILL }},
11361
11362
14
        { &hf_ieee1905_channel_scan_capa_flags_scan_impact,
11363
14
          { "Scan Impact", "ieee1905.channel_scan_capabilities.flags.scan_impact",
11364
14
            FT_UINT8, BASE_HEX, VALS(channel_scan_capa_flags_impact_vals), 0x60,
11365
14
            NULL, HFILL }},
11366
11367
14
        { &hf_ieee1905_channel_scan_capa_flags_reserved,
11368
14
          { "Reserved", "ieee1905.channel_scan_capabilities.flags.reserved",
11369
14
            FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
11370
11371
14
        { &hf_ieee1905_channel_scan_capa_min_scan_interval,
11372
14
          { "Minimum Scan Interval", "ieee1905.channel_scan_capabilities.min_scan_interval",
11373
14
            FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_seconds),
11374
14
            0, NULL, HFILL }},
11375
11376
14
        { &hf_ieee1905_channel_scan_capa_class_num,
11377
14
          { "Number of Operating Classes",
11378
14
            "ieee1905.channel_scan_capabilities.num_operating_classes",
11379
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11380
11381
14
        { &hf_ieee1905_channel_scan_capa_oper_class,
11382
14
          { "Operating Class", "ieee1905.channel_scan_capabilities.operating_class",
11383
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11384
11385
14
        { &hf_ieee1905_channel_scan_capa_oper_class_chan_cnt,
11386
14
          { "Number of Channels", "ieee1905.channel_scan_capabilities.operating_class.num_channels",
11387
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11388
11389
14
        { &hf_ieee1905_channel_scan_capa_channel,
11390
14
          { "Channel", "ieee1905.channel_scan_capabilities.operating_class.channel",
11391
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11392
11393
14
        { &hf_ieee1905_channel_scan_request_flags,
11394
14
          { "Flags", "ieee1905.channel_scan_request.flags",
11395
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11396
11397
14
        { &hf_ieee1905_channel_scan_request_flags_fresh_scan,
11398
14
          { "Perform Fresh Scan", "ieee1905.channel_scan_request.flags.perform_fresh_scan",
11399
14
            FT_BOOLEAN, 8, TFS(&perform_fresh_scan_tfs), 0x80, NULL, HFILL }},
11400
11401
14
        { &hf_ieee1905_channel_scan_request_flags_reserved,
11402
14
          { "Reserved", "ieee1905.channel_scan_request.flags.reserved",
11403
14
            FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
11404
11405
14
        { &hf_ieee1905_channel_scan_request_radio_num,
11406
14
          { "Number of Radios", "ieee1905.channel_scan_request.number_radios",
11407
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11408
11409
14
        { &hf_ieee1905_channel_scan_request_radio_id,
11410
14
          { "Radio Unique ID", "ieee1905.channel_scan_request.radio_id",
11411
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11412
11413
14
        { &hf_ieee1905_channel_scan_request_class_num,
11414
14
          { "Number of Operating Classes",
11415
14
            "ieee1905.channel_scan_request.num_operating_classes",
11416
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11417
11418
14
        { &hf_ieee1905_channel_scan_request_oper_class,
11419
14
          { "Operating Class", "ieee1905.channel_scan_request.operating_class",
11420
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11421
11422
14
        { &hf_ieee1905_channel_scan_request_oper_class_chan_cnt,
11423
14
          { "Number of Channels", "ieee1905.channel_scan_request.operating_class.num_channels",
11424
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11425
11426
14
        { &hf_ieee1905_channel_scan_request_channel,
11427
14
          { "Channel", "ieee1905.channel_scan_request.channel",
11428
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11429
11430
14
        { &hf_ieee1905_channel_scan_result_radio_id,
11431
14
          { "Radio Unique ID", "ieee1905.channel_scan_result.radio_id",
11432
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
11433
11434
14
        { &hf_ieee1905_channel_scan_result_oper_class,
11435
14
          { "Operating Class", "ieee1905.channel_scan_result.operating_class",
11436
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11437
11438
14
        { &hf_ieee1905_channel_scan_result_channel,
11439
14
          { "Channel", "ieee1905.channel_scan_result.channel",
11440
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11441
11442
14
        { &hf_ieee1905_channel_scan_result_status,
11443
14
          { "Status", "ieee1905.channel_scan_result.status",
11444
14
            FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(channel_scan_result_status_rvals),
11445
14
            0, NULL, HFILL }},
11446
11447
14
        { &hf_ieee1905_channel_scan_result_timestamp_len,
11448
14
          { "Timestamp Length", "ieee1905.channel_scan_result.timestamp_len",
11449
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11450
11451
14
        { &hf_ieee1905_channel_scan_result_timestamp_string,
11452
14
          { "Timestamp", "ieee1905.channel_scan_result.timestamp",
11453
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
11454
11455
14
        { &hf_ieee1905_channel_scan_result_utilization,
11456
14
          { "Utilization", "ieee1905.channel_scan_result.utilization",
11457
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11458
11459
14
        { &hf_ieee1905_channel_scan_result_noise,
11460
14
          { "Noise", "ieee1905.channel_scan_result.noise",
11461
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11462
11463
14
        { &hf_ieee1905_radio_metrics_noise,
11464
14
          { "Noise", "ieee1905.radio_metrics.noise",
11465
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11466
11467
14
        { &hf_ieee1905_radio_metrics_transmit,
11468
14
          { "Transmit", "ieee1905.radio_metrics.transmit",
11469
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11470
11471
14
        { &hf_ieee1905_radio_metrics_receive_self,
11472
14
          { "ReceiveSelf", "ieee1905.radio_metrics.receive_self",
11473
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11474
11475
14
        { &hf_ieee1905_radio_metrics_receive_other,
11476
14
          { "ReceiveOther", "ieee1905.radio_metrics.receive_other",
11477
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11478
11479
14
        { &hf_ieee1905_ap_extended_metrics_bssid,
11480
14
          { "BSSID", "ieee1905.ap_extended_metrics.bssid",
11481
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11482
11483
14
        { &hf_ieee1905_ap_extended_metrics_unicast_sent,
11484
14
          { "UnicastBytesSent",
11485
14
            "ieee1905.ap_extended_metrics.unicast_bytes_sent",
11486
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11487
11488
14
        { &hf_ieee1905_ap_extended_metrics_unicast_rcvd,
11489
14
          { "UnicastBytesReceived",
11490
14
            "ieee1905.ap_extended_metrics.unicast_bytes_received",
11491
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11492
11493
14
        { &hf_ieee1905_ap_extended_metrics_multicast_sent,
11494
14
          { "MulticastBytesSent",
11495
14
            "ieee1905.ap_extended_metrics.multicast_bytes_sent",
11496
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11497
11498
14
        { &hf_ieee1905_ap_extended_metrics_multicast_rcvd,
11499
14
          { "MulticastBytesReceived",
11500
14
            "ieee1905.ap_extended_metrics.multicast_bytes_received",
11501
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11502
11503
14
        { &hf_ieee1905_ap_extended_metrics_bcast_sent,
11504
14
          { "BroadcastBytesSent",
11505
14
            "ieee1905.ap_extended_metrics.Broadcast_bytes_sent",
11506
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11507
11508
14
        { &hf_ieee1905_ap_extended_metrics_bcast_rcvd,
11509
14
          { "BroadcastBytesReceived",
11510
14
            "ieee1905.ap_extended_metrics.broadcast_bytes_received",
11511
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11512
11513
14
        { &hf_ieee1905_channel_scan_result_neigh_num,
11514
14
          { "Number of Neighbors", "ieee1905.channel_scan_result.number_of_neighbors",
11515
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
11516
11517
14
        { &hf_ieee1905_channel_scan_result_bssid,
11518
14
          { "BSSID", "ieee1905.channel_scan_result.bssid",
11519
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11520
11521
14
        { &hf_ieee1905_channel_scan_result_ssid_len,
11522
14
          { "SSID Length", "ieee1905.channel_scan_result.ssid_len",
11523
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11524
11525
14
        { &hf_ieee1905_channel_scan_result_ssid,
11526
14
          { "SSID", "ieee1905.channel_scan_result.ssid",
11527
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
11528
11529
14
        { &hf_ieee1905_channel_scan_result_sig_level,
11530
14
          { "Signal Strength", "ieee1905.channel_scan_result.signal_strength",
11531
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11532
11533
14
        { &hf_ieee1905_channel_scan_result_bw_len,
11534
14
          { "Channel BW Length", "ieee1905.channel_scan_result.channel_bw_len",
11535
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11536
11537
14
        { &hf_ieee1905_channel_scan_result_bw,
11538
14
          { "Channel BW", "ieee1905.channel_scan_result.channel_bw",
11539
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
11540
11541
14
        { &hf_ieee1905_channel_scan_result_neigh_flags,
11542
14
          { "Neighbor Flags", "ieee1905.channel_scan_result.neighbor_flags",
11543
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11544
11545
14
        { &hf_ieee1905_channel_scan_result_load_element_present,
11546
14
          { "Utilization Present", "ieee1905.channel_scan_result.neighbor_flags.load_element_present",
11547
14
            FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
11548
11549
14
        { &hf_ieee1905_channel_scan_result_util,
11550
14
          { "Channel Utilization", "ieee1905.channel_scan_result.channel_util",
11551
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11552
11553
14
        { &hf_ieee1905_channel_scan_result_sta_count,
11554
14
          { "Station Count", "ieee1905.channel_scan_result.station_count",
11555
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
11556
11557
14
        { &hf_ieee1905_channel_scan_result_neigh_reserved,
11558
14
          { "Reserved", "ieee1905.channel_scan_result.neighbor_flags.reserved",
11559
14
            FT_UINT8, BASE_DEC, NULL, 0x7F, NULL, HFILL }},
11560
11561
14
        { &hf_ieee1905_channel_scan_result_scan_duration,
11562
14
          { "Scan Duration", "ieee1905.channel_scan_result.scan_duration",
11563
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11564
11565
14
        { &hf_ieee1905_channel_scan_result_flags,
11566
14
          { "Flags", "ieee1905.channel_scan_result.flags",
11567
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11568
11569
14
        { &hf_ieee1905_channel_scan_result_scan_type,
11570
14
          { "Scan Type", "ieee1905.channel_scan_result.flags.scan_type",
11571
14
            FT_BOOLEAN, 8, TFS(&channel_scan_result_type_tfs), 0x80, NULL, HFILL }},
11572
11573
14
        { &hf_ieee1905_channel_scan_result_scan_flags_reserved,
11574
14
          { "Reserved", "ieee1905.channel_scan_result.flags.reserved",
11575
14
            FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
11576
11577
14
        { &hf_ieee1905_timestamp_length,
11578
14
          { "Timestamp Length", "ieee1905.timestamp.length",
11579
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11580
11581
14
        { &hf_ieee1905_timestamp_string,
11582
14
          { "Timestamp", "ieee1905.timestamp.timestamp",
11583
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
11584
11585
14
        { &hf_ieee1905_1905_layer_sec_capa_onboarding,
11586
14
          { "Onboarding Protocols Supported", "ieee1905.1905_layer_security_capability.onboarding_protocols_supported",
11587
14
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(onboarding_protocol_supported_rvals),
11588
14
            0, NULL, HFILL }},
11589
11590
14
        { &hf_ieee1905_1905_layer_sec_capa_mic_sup,
11591
14
          { "Message Integrity Algorithms Supported",
11592
14
            "ieee1905.1905_layer_security_capability.message_integrity_algorithms_supported",
11593
14
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(message_integrity_algorithms_sup_rvals),
11594
14
            0, NULL, HFILL }},
11595
11596
14
        { &hf_ieee1905_1905_layer_sec_capa_enc_alg_sup,
11597
14
          { "Message Encryption Algorithms Supported",
11598
14
            "ieee1905.1905_layer_security_capability.message_encryption_algorithms_supported",
11599
14
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(message_encryption_algorithms_sup_rvals),
11600
14
            0, NULL, HFILL }},
11601
11602
14
        { &hf_ieee1905_ap_wf6_capa_radio_id,
11603
14
          { "Radio ID", "ieee1905.ap_wifi_6_capabilities.radio_id",
11604
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL}},
11605
11606
14
        { &hf_ieee1905_ap_wf6_role_count,
11607
14
          { "Role Count", "ieee1905.ap_wifi_6_capabilities.role_count",
11608
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL}},
11609
11610
14
        { &hf_ieee1905_ap_wf6_agent_role_flags,
11611
14
          { "Role Flags", "ieee1905.ap_wifi_6_capabilities.role_flags",
11612
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL}},
11613
11614
14
        { &hf_ieee1905_ap_wf6_capa_agents_role,
11615
14
          { "Agent's Role", "ieee1905.ap_wifi_6_capabilities.agents_role",
11616
14
            FT_UINT8, BASE_HEX, VALS(ap_wf6_agent_role_vals),
11617
14
            0xC0, NULL, HFILL}},
11618
11619
14
        { &hf_ieee1905_ap_wf6_capa_he_160_support,
11620
14
          { "Support for HE 160 MHz",
11621
14
            "ieee1905.ap_wifi_6_capabilities.support_for_he_160",
11622
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11623
14
            0x20, NULL, HFILL}},
11624
11625
14
        { &hf_ieee1905_ap_wf6_capa_he_80p80_support,
11626
14
          { "Support for HE 80+80 MHz",
11627
14
            "ieee1905.ap_wifi_6_capabilities.support_for_he_80_p_80",
11628
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11629
14
            0x10, NULL, HFILL}},
11630
11631
14
        { &hf_ieee1905_ap_wf6_capa_reserved,
11632
14
          { "Reserved", "ieee1905.ap_wifi_6_capabilities.reserved",
11633
14
            FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL}},
11634
11635
14
        { &hf_ieee1905_ap_wf6_he_supported_flags,
11636
14
          { "HE Support flags",
11637
14
            "ieee1905.ap_wifi_6_capabilities.he_support_flags",
11638
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL}},
11639
11640
14
        { &hf_ieee1905_ap_wf6_su_beamformer,
11641
14
          { "SU Beamformer", "ieee1905.ap_wifi_6_capabilities.su_beamformer",
11642
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11643
14
            0x80, NULL, HFILL}},
11644
11645
14
        { &hf_ieee1905_ap_wf6_su_beamformee,
11646
14
          { "SU Beamformee", "ieee1905.ap_wifi_6_capabilities.su_beamformee",
11647
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11648
14
            0x40, NULL, HFILL}},
11649
11650
14
        { &hf_ieee1905_ap_wf6_mu_beamformer_status,
11651
14
          { "MU Beamformer Status",
11652
14
            "ieee1905.ap_wifi_6_capabilities.mu_beamformer_status",
11653
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11654
14
            0x20, NULL, HFILL}},
11655
11656
14
        { &hf_ieee1905_ap_wf6_beamformee_sts_le_80mhz,
11657
14
          { "Beamformee STS <= 80MHz",
11658
14
            "ieee1905.ap_wifi_6_capabilities.beamformee_sts_le_80mhz",
11659
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11660
14
            0x10, NULL, HFILL}},
11661
11662
14
        { &hf_ieee1905_ap_wf6_beamformee_sts_gt_80mhz,
11663
14
          { "Beamformee STS > 80MHz",
11664
14
            "ieee1905.ap_wifi_6_capabilities.beamformee_sts_gt_80mhz",
11665
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11666
14
            0x08, NULL, HFILL}},
11667
11668
14
        { &hf_ieee1905_ap_wf6_ul_mu_mimo,
11669
14
          { "UL MU MIMO", "ieee1905.ap_wifi_6_capabilities.us_mu_mimo",
11670
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11671
14
            0x04, NULL, HFILL}},
11672
11673
14
        { &hf_ieee1905_ap_wf6_ul_ofdma,
11674
14
          { "UL OFDMA", "ieee1905.ap_wifi_6_capabilities.ul_ofdma",
11675
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11676
14
            0x02, NULL, HFILL}},
11677
11678
14
        { &hf_ieee1905_ap_wf6_dl_ofdma,
11679
14
          { "DL OFDMA", "ieee1905.ap_wifi_6_capabilities.dl_ofdma",
11680
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11681
14
            0x01, NULL, HFILL}},
11682
11683
14
        { &hf_ieee1905_ap_wf6_mimo_max_flags,
11684
14
          { "MIMO Max Users flags",
11685
14
            "ieee1905.ap_wifi_6_capabilities.mimo_max_users_flags",
11686
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL}},
11687
11688
14
        { &hf_ieee1905_ap_wf6_max_ap_dl_mu_mimo_tx,
11689
14
          { "Max AP DL MU-MIMO TX",
11690
14
            "ieee1905.ap_wifi_6_capabilities.max_ap_dl_mu_mimo_tx",
11691
14
            FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL}},
11692
11693
14
        { &hf_ieee1905_ap_wf6_max_ap_ul_mu_mimi_rx,
11694
14
          { "Max AP UL MU-MIMO RX",
11695
14
            "ieee1905.ap_wifi_6_capabilities.max_ap_ul_mu_mimo_rx",
11696
14
            FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL}},
11697
11698
14
        { &hf_ieee1905_ap_wf6_dl_ofdma_max_tx,
11699
14
          { "Max users per DL OFDMA TX in AP role",
11700
14
            "ieee1905.ap_wifi_6_capabilities.ap_max_users_per_dl_ofdma_tx",
11701
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL}},
11702
11703
14
        { &hf_ieee1905_ap_wf6_ul_ofdma_max_rx,
11704
14
          { "Max users per UL OFDMA RX in AP role",
11705
14
            "ieee1905.ap_wifi_6_capabilities.ap_max_users_per_ul_ofdma_rx",
11706
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL}},
11707
11708
14
        { &hf_ieee1905_ap_wf6_gen_flags,
11709
14
          { "General flags", "ieee1905.ap_wifi_6_capabilities.general_flags",
11710
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL}},
11711
11712
14
        { &hf_ieee1905_ap_wf6_gen_rts,
11713
14
          { "RTS", "ieee1905.ap_wifi_6_capabilities.general_flags.rts",
11714
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11715
14
            0x80, NULL, HFILL}},
11716
11717
14
        { &hf_ieee1905_ap_wf6_gen_mu_rts,
11718
14
          { "MU RTS", "ieee1905.ap_wifi_6_capabilities.general_flags.mu_rts",
11719
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11720
14
            0x40, NULL, HFILL}},
11721
11722
14
        { &hf_ieee1905_ap_wf6_gen_multi_bssid,
11723
14
          { "Multi-BSSID",
11724
14
            "ieee1905.ap_wifi_6_capabilities.general_flags.multi_bssid",
11725
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11726
14
            0x20, NULL, HFILL}},
11727
11728
14
        { &hf_ieee1905_ap_wf6_gen_mu_edca,
11729
14
          { "MU EDCA", "ieee1905.ap_wifi_6_capabilities.general_flags.mu_edca",
11730
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11731
14
            0x10, NULL, HFILL}},
11732
11733
14
        { &hf_ieee1905_ap_wf6_gen_twt_requester,
11734
14
          { "TWT Requester",
11735
14
            "ieee1905.ap_wifi_6_capabilities.general_flags.twt_requester",
11736
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11737
14
            0x08, NULL, HFILL}},
11738
11739
14
        { &hf_ieee1905_ap_wf6_gen_twt_responder,
11740
14
          { "TWT Responder",
11741
14
            "ieee1905.ap_wifi_6_capabilities.general_flags.twt_responder",
11742
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11743
14
            0x04, NULL, HFILL}},
11744
11745
14
        { &hf_ieee1905_ap_wf6_gen_reserved,
11746
14
          { "Reserved",
11747
14
            "ieee1905.ap_wifi_6_capabilities.general_flags.reserved",
11748
14
            FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL }},
11749
11750
14
        { &hf_ieee1905_agent_list_bytes,
11751
14
          { "Agent List", "ieee1905.agent_list.agent_list_data",
11752
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
11753
11754
14
        { &hf_ieee1905_mic_group_temporal_key_id,
11755
14
          { "Group Temporal Key ID", "ieee1905.mic.group_temporal_key_id",
11756
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11757
11758
14
        { &hf_ieee1905_1905_gtk_key_id,
11759
14
          { "Key ID", "ieee1905.mic.group_temporal_key_id.key_id",
11760
14
            FT_UINT8, BASE_DEC, NULL, 0xC0, NULL, HFILL }},
11761
11762
14
        { &hf_ieee1905_mic_version,
11763
14
          { "MIC Version", "ieee1905.mic.group_temporal_key_id.mic_version",
11764
14
            FT_UINT8, BASE_HEX, VALS(mic_version_vals), 0x30, NULL, HFILL }},
11765
11766
14
        { &hf_ieee1905_mic_reserved,
11767
14
          { "Reserved", "ieee1905.mic.group_temporal_key_id.reserved",
11768
14
             FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL }},
11769
11770
14
        { &hf_ieee1905_mic_integrity_transmission_counter,
11771
14
          { "Integrity Transmission Counter",
11772
14
            "ieee1905.mic.integrity_transmission_counter",
11773
14
            FT_UINT48, BASE_DEC, NULL, 0, NULL, HFILL }},
11774
11775
14
        { &hf_ieee1905_mic_source_la_mac_id,
11776
14
          {"Source LA MAC ID", "ieee1905.mic.source_la_max_id",
11777
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11778
11779
14
        { &hf_ieee1905_mic_length,
11780
14
          { "MIC Length", "ieee1905.mic.mic_length",
11781
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
11782
11783
14
        { &hf_ieee1905_mic_bytes,
11784
14
          { "MIC", "ieee1905.mic.mic_bytes",
11785
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11786
11787
14
        { &hf_ieee1905_encrypted_enc_transmission_count,
11788
14
          { "Encryption Transmission Counter",
11789
14
            "ieee1905.encrypted.encryption_transmission_counter",
11790
14
            FT_UINT48, BASE_DEC, NULL, 0, NULL, HFILL }},
11791
11792
14
        { &hf_ieee1905_encrypted_dest_al_mac_addr,
11793
14
          { "Destination 1905 AL MAC Address",
11794
14
            "ieee1905.encrypted.destination_1905_al_mac",
11795
14
            FT_ETHER, ENC_NA, NULL, 0, NULL, HFILL }},
11796
11797
14
        { &hf_ieee1905_encrypted_source_la_mac_id,
11798
14
          { "Source AL MAC", "ieee1905.encrypted.source_al_mac",
11799
14
            FT_ETHER, ENC_NA, NULL, 0, NULL, HFILL }},
11800
11801
14
        { &hf_ieee1905_encrypted_enc_output_field_len,
11802
14
          { "AES-SIV Encrypted Output Length",
11803
14
            "ieee1905.encrypted.aes_siv_encrypted_output_length",
11804
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
11805
11806
14
        { &hf_ieee1905_encrypted_enc_output_field,
11807
14
          { "AES-SIV Encryption Output",
11808
14
            "ieee1905.encrypted.aes_siv_encryption_output",
11809
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11810
11811
14
        { &hf_ieee1905_cac_request_radio_count,
11812
14
          { "Number of Radios", "ieee1905.cac_request.number_of_radios",
11813
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11814
11815
14
        { &hf_ieee1905_cac_request_radio_id,
11816
14
          { "Radio ID", "ieee1905.cac_request.radio_id",
11817
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11818
11819
14
        { &hf_ieee1905_cac_request_op_class,
11820
14
          { "Operating class", "ieee1905.cac_request.operating_class",
11821
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11822
11823
14
        { &hf_ieee1905_cac_request_channel,
11824
14
          { "Channel", "ieee1905.cac_request.channel",
11825
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11826
11827
14
        { &hf_ieee1905_cac_request_flags,
11828
14
          { "Request flags", "ieee1905.cac_request.flags",
11829
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11830
11831
14
        { &hf_ieee1905_cac_request_method,
11832
14
          { "CAC Method", "ieee1905.cac_request.flags.cac_method",
11833
14
            FT_UINT8, BASE_DEC, VALS(cac_request_method_vals),
11834
14
            0xE0, NULL, HFILL }},
11835
11836
14
        { &hf_ieee1905_cac_request_completion_action,
11837
14
          { "Successful Completion Action",
11838
14
            "ieee1905.cac_request.flags.successful_completion_action",
11839
14
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING,
11840
14
            RVALS(cac_completion_action_vals), 0x18, NULL, HFILL }},
11841
11842
14
        { &hf_ieee1905_cac_request_completion_unsuccess,
11843
14
          { "Unsuccessful Completion Action",
11844
14
            "ieee1905.cac_request.flags.unsuccessful_completion_action",
11845
14
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING,
11846
14
            RVALS(cac_completion_action_vals), 0x06, NULL, HFILL }},
11847
11848
14
        { &hf_ieee1905_cac_request_reserved,
11849
14
          { "Reserved", "ieee1905.cac_request.flags.reserved",
11850
14
            FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
11851
11852
14
        { &hf_ieee1905_cac_termination_radio_count,
11853
14
          { "Number of Radios", "ieee1905.cac_termination.number_of_radios",
11854
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11855
11856
14
        { &hf_ieee1905_cac_terminate_radio_id,
11857
14
          { "Radio ID", "ieee1905.cac_termination.radio_id",
11858
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
11859
11860
14
        { &hf_ieee1905_cac_terminate_op_class,
11861
14
          { "Operating class", "ieee1905.cac_termination.operating_class",
11862
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11863
11864
14
        { &hf_ieee1905_cac_terminate_channel,
11865
14
          { "Channel", "ieee1905.cac_termination.channel",
11866
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11867
11868
14
        { &hf_ieee1905_cac_completion_rep_radio_count,
11869
14
          { "Number of radios",
11870
14
            "ieee1905.cac_completion_report.number_of_radios",
11871
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11872
11873
14
        { &hf_ieee1905_cac_completion_radio_id,
11874
14
          { "Radio ID", "ieee1905.cac_completion_report.radio_id",
11875
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11876
11877
14
        { &hf_ieee1905_cac_completion_op_class,
11878
14
          { "Operating class", "ieee1905.cac_completion_report.operating_class",
11879
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11880
11881
14
        { &hf_ieee1905_cac_completion_channel,
11882
14
          { "Channel", "ieee1905.cac_completion_report.channel",
11883
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11884
11885
14
        { &hf_ieee1905_cac_completion_status,
11886
14
          { "CAC Completion Status",
11887
14
            "ieee1905.cac_completion_report.cac_completion_status",
11888
14
            FT_UINT8, BASE_HEX | BASE_RANGE_STRING,
11889
14
            RVALS(cac_completion_status_rvals), 0, NULL, HFILL }},
11890
11891
14
        { &hf_ieee1905_cac_completion_radar_count,
11892
14
          { "Radar detected count",
11893
14
            "ieee1905.cac_completion_report.radar_detected_count",
11894
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11895
11896
14
        { &hf_ieee1905_cac_comp_radar_op_class,
11897
14
          { "Operating class",
11898
14
            "ieee1905.cac_completion_report.radar.operating_class",
11899
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11900
11901
14
        { &hf_ieee1905_cac_comp_radar_channel,
11902
14
          { "Channel", "ieee1905.cac_completion_report.radar.channel",
11903
14
            FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11904
11905
14
        { &hf_ieee1905_cac_status_rpt_active_chan,
11906
14
          { "Available Channel Count",
11907
14
            "ieee1905.cac_status_report.available_channel_count",
11908
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11909
11910
14
        { &hf_ieee1905_cac_status_rpt_avail_op_class,
11911
14
          { "Operating Class",
11912
14
            "ieee1905.cac_status_report.available_channel.operating_class",
11913
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11914
11915
14
        { &hf_ieee1905_cac_status_rpt_avail_channel,
11916
14
          { "Channel",
11917
14
            "ieee1905.cac_status_report.available_channel.channel",
11918
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11919
11920
14
        { &hf_ieee1905_cac_status_rpt_avail_minutes,
11921
14
          { "Minutes since CAC completed",
11922
14
            "ieee1905.cac_status_report.available_channel.minutes_since",
11923
14
            FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11924
11925
14
        { &hf_ieee1905_cac_status_rpt_non_occ_cnt,
11926
14
          { "Non-occupied Channel Count",
11927
14
            "ieee1905.cac_status_report.non_occupied_channel_count",
11928
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11929
11930
14
        { &hf_ieee1905_cac_status_rpt_non_occ_op_class,
11931
14
          { "Operating Class",
11932
14
            "ieee1905.cac_status_report.non_occupied_channel.operating_class",
11933
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11934
11935
14
        { &hf_ieee1905_cac_status_rpt_non_occ_channel,
11936
14
          { "Channel",
11937
14
            "ieee1905.cac_status_report.non_occupied_channel.channel",
11938
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11939
11940
14
        { &hf_ieee1905_cac_status_rpt_non_occ_seconds,
11941
14
          { "Seconds remaining",
11942
14
            "ieee1905.cac_status_report.non_occupied_channel.second_remaining",
11943
14
            FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11944
11945
14
        { &hf_ieee1905_cac_status_rpt_active_cac_cnt,
11946
14
          { "Active CAC Channel Count",
11947
14
            "ieee1905.cac_status_report.active_cac_channel_count",
11948
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11949
11950
14
        { &hf_ieee1905_cac_status_rpt_active_cac_op_class,
11951
14
          { "Operating Class",
11952
14
            "ieee1905.cac_status_report.active_cac.operating_class",
11953
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11954
11955
14
        { &hf_ieee1905_cac_status_rpt_active_cac_channel,
11956
14
          { "Channel",
11957
14
            "ieee1905.cac_status_report.active_cac.channel",
11958
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11959
11960
14
        { &hf_ieee1905_cac_status_rpt_active_cac_seconds,
11961
14
          { "Seconds remaining",
11962
14
            "ieee1905.cac_status_report.active_cac.seconds_remaining",
11963
14
            FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11964
11965
14
        { &hf_ieee1905_cac_capa_country_code,
11966
14
          { "Country Code", "ieee1905.cac_capabilities.country_code",
11967
14
            FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
11968
11969
14
        { &hf_ieee1905_cac_capa_radio_cnt,
11970
14
          { "Number of radios", "ieee1905.cac_capabilities.number_of_radios",
11971
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11972
11973
14
        { &hf_ieee1905_cac_capabilities_radio_id,
11974
14
          { "Radio ID", "ieee1905.cac_capabilities.radio_id",
11975
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
11976
11977
14
        { &hf_ieee1905_cac_capabilities_types_num,
11978
14
          { "Number of types", "ieee1905.cac_capabilities.number_of_types",
11979
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11980
11981
14
        { &hf_ieee1905_cac_capabilities_cac_mode,
11982
14
          { "CAC mode supported",
11983
14
            "ieee1905.cac_capabilities.cac_mode_supported",
11984
14
            FT_UINT8, BASE_HEX | BASE_RANGE_STRING,
11985
14
            RVALS(cac_mode_supported_rvals), 0, NULL, HFILL }},
11986
11987
14
        { &hf_ieee1905_cac_capabilities_cac_seconds,
11988
14
          { "Seconds required to complete CAC",
11989
14
            "ieee1905.cac_capabilities.seconds_required_to_complete_cac",
11990
14
            FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11991
11992
14
        { &hf_ieee1905_cac_capabilities_op_class_num,
11993
14
          { "Operating Class number",
11994
14
            "ieee1905.cac_capabilities.operating_class_number",
11995
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11996
11997
14
        { &hf_ieee1905_cac_capabilities_op_class,
11998
14
          { "Operating Class", "ieee1905.cac_capabilities.operating_class",
11999
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12000
12001
14
        { &hf_ieee1905_cac_capabilities_channel_cnt,
12002
14
          { "Number of channels",
12003
14
            "ieee1905.cac_capabilities.number_of_channels",
12004
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12005
12006
14
        { &hf_ieee1905_cac_capabillity_channel,
12007
14
          { "Channel", "ieee1905.cac_capabilities.channel",
12008
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12009
12010
14
        { &hf_ieee1905_multi_ap_version,
12011
14
          { "Multi-AP Profile", "ieee1905.multi_ap_version",
12012
14
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING,
12013
14
            RVALS(multi_ap_version_rvals), 0x0, NULL, HFILL }},
12014
12015
14
        { &hf_ieee1905_max_total_serv_prio_rules,
12016
14
          { "Max Total Number Service Prioritization Rules",
12017
14
            "ieee1905.r2_ap_capabilities.max_total_service_prio_rules",
12018
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12019
12020
14
        { &hf_ieee1905_r2_ap_capa_reserved,
12021
14
          { "Reserved", "ieee1905.r2_ap_capabilities.reserved",
12022
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12023
12024
14
        { &hf_ieee1905_r2_ap_capa_flags,
12025
14
          { "Flags", "ieee1905.r2_ap_capabilities.flags",
12026
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12027
12028
14
        { &hf_ieee1905_byte_counter_units,
12029
14
          { "Byte Counter Units", "ieee1905.r2_ap_capabilities.byte_counter_units",
12030
14
            FT_UINT8, BASE_DEC, VALS(byte_counter_units_vals), 0xC0, NULL, HFILL}},
12031
12032
14
        { &hf_ieee1905_ctag_service_prio_flag,
12033
14
          { "802.1Q C-TAG Service Prioritization", "ieee1905.r2_ap_capabilities.ctag_service_prioritization",
12034
14
            FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20, NULL, HFILL }},
12035
12036
14
        { &hf_ieee1905_dpp_onboarding_flag,
12037
14
          { "DPP Onboarding procedure", "ieee1905.r2_ap_capabilities.dpp_onboarding" ,
12038
14
            FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10, NULL, HFILL }},
12039
12040
14
       { &hf_ieee1905_traffic_separation_flag,
12041
14
          { "802.1Q C-TAG Traffic Separation", "ieee1905.r2_ap_capabilities.traffic_separation" ,
12042
14
            FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL }},
12043
12044
14
        { &hf_ieee1905_r2_ap_capa_flags_reserved,
12045
14
          { "Reserved", "ieee1905.r2_ap_capabilities.reserved",
12046
14
            FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL }},
12047
12048
14
        { &hf_ieee1905_max_vid_count,
12049
14
          { "Max Total Number of VIDs", "ieee1905.r2_ap_capabilities.max_total_number_of_vids",
12050
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12051
12052
14
        { &hf_ieee1905_default_802_1q_settings_primary_vlan,
12053
14
          { "Primary VLAN ID", "ieee1905.service_prioritization_rule.primary_vlan_id",
12054
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
12055
12056
14
        { &hf_ieee1905_default_802_1q_settings_flags,
12057
14
          { "Flags", "ieee1905.service_prioritization_rule.flags",
12058
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12059
12060
14
        { &hf_ieee1905_default_802_1q_settings_default_pcp,
12061
14
          { "Primary PCP", "ieee1905.service_prioritization_rule.flags.primary_pcp",
12062
14
            FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL }},
12063
12064
14
        { &hf_ieee1905_default_802_1q_settings_reserved,
12065
14
          { "Reserved", "ieee1905.service_prioritization_rule.flags.reserved",
12066
14
            FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
12067
12068
14
        { &hf_ieee1905_ap_radio_advanced_capa_radio_id,
12069
14
          { "Radio Unique ID", "ieee1905.ap_advanced_capabilities.radio_id",
12070
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12071
12072
14
        { &hf_ieee1905_radio_advanced_capa_flags,
12073
14
          { "AP Radio Advanced Capabilities Flags",
12074
14
            "ieee1905.ap_advanced_capabilities.flags",
12075
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12076
12077
14
        { &hf_ieee1905_traffic_separation_policy_num_ssids,
12078
14
          { "Number of SSIDs", "ieee1905.traffic_separation_policy.num_ssids",
12079
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12080
12081
14
        { &hf_ieee1905_traffic_separation_policy_ssid_len,
12082
14
          { "SSID Length", "ieee1905.traffic_separation_policy.ssid_length",
12083
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12084
12085
14
        { &hf_ieee1905_traffic_separation_policy_ssid,
12086
14
          { "SSID", "ieee1905.traffic_separation_policy.ssid",
12087
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12088
12089
14
        { &hf_ieee1905_traffic_separation_policy_vlanid,
12090
14
          { "VLAN ID", "ieee1905.traffic_separation_policy.vlan_id",
12091
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
12092
12093
14
        { &hf_ieee1905_bss_config_report_radio_count,
12094
14
          { "Radio Count", "ieee1905.bss_config_report.radio_count",
12095
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12096
12097
14
        { &hf_ieee1905_bss_config_report_radio_id,
12098
14
          { "Radio ID", "ieee1905.bss_config_report.radio_id",
12099
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12100
12101
14
        { &hf_ieee1905_bss_config_report_flags,
12102
14
          { "Report Flags", "ieee1905.bss_config_report.report_flags",
12103
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12104
12105
14
        { &hf_ieee1905_bss_config_report_backhaul_bss,
12106
14
          { "Backhaul BSS", "ieee1905.bss_config_report.backhaul_bss",
12107
14
            FT_BOOLEAN, 8, TFS(&tfs_not_inuse_inuse), 0x80, NULL, HFILL }},
12108
12109
14
        { &hf_ieee1905_bss_config_report_fronthaul_bss,
12110
14
          { "Fronthaul BSS", "ieee1905.bss_config_report.fronthaul_bss",
12111
14
            FT_BOOLEAN, 8, TFS(&tfs_not_inuse_inuse), 0x40, NULL, HFILL }},
12112
12113
14
        { &hf_ieee1905_bss_config_report_r1_disallowed_status,
12114
14
          { "R1 Disallowed Status",
12115
14
            "ieee1905.bss_config_report.r1_disallowed_status",
12116
14
            FT_BOOLEAN, 8, TFS(&tfs_disallowed_allowed), 0x20, NULL, HFILL }},
12117
12118
14
        { &hf_ieee1905_bss_config_report_r2_disallowed_status,
12119
14
          { "R2 Disallowed Status",
12120
14
            "ieee1905.bss_config_report.r2_disallowed_status",
12121
14
            FT_BOOLEAN, 8, TFS(&tfs_disallowed_allowed), 0x10, NULL, HFILL }},
12122
12123
14
        { &hf_ieee1905_bss_config_report_multiple_bssid_set,
12124
14
          { "Multiple BSSID Set",
12125
14
            "ieee1905.bss_config_report.multiple_bssid_set",
12126
14
            FT_BOOLEAN, 8, TFS(&tfs_configured_not_configured),
12127
14
            0x08, NULL, HFILL }},
12128
12129
14
        { &hf_ieee1905_bss_config_report_transmitted_bssid,
12130
14
          { "Transmitted BSSID",
12131
14
            "ieee1905.bss_config_report.transmitted_bssid",
12132
14
            FT_BOOLEAN, 8, TFS(&tfs_transmitted_non_transmitted),
12133
14
            0x04, NULL, HFILL }},
12134
12135
14
        { &hf_ieee1905_bss_config_report_reserved,
12136
14
          { "Reserved", "ieee1905.bss_config_report.reserved",
12137
14
            FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL }},
12138
12139
14
        { &hf_ieee1905_bss_config_report_res,
12140
14
          { "Reserved", "ieee1905.bss_config_report.reserved",
12141
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12142
12143
14
        { &hf_ieee1905_bss_config_report_bss_cnt,
12144
14
          { "BSS Count", "ieee1905.bss_config_report.bss_count",
12145
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12146
12147
14
        { &hf_ieee1902_bss_config_report_mac,
12148
14
          { "Local Interface MAC addr",
12149
14
            "ieee1905.bss_config_report.mac_addr",
12150
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12151
12152
14
        { &hf_ieee1902_bss_config_report_ssid_len,
12153
14
          { "SSID Length", "ieee1905.bss_config_report.ssid_length",
12154
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12155
12156
14
        { &hf_ieee1905_bss_config_report_ssid,
12157
14
          { "SSID", "ieee1905.bss_config_report.ssid",
12158
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12159
12160
14
        { &hf_ieee1905_bssid_tlv_bssid,
12161
14
          { "BSSID", "ieee1905.bssid",
12162
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12163
12164
14
        { &hf_ieee1905_service_prio_rule_id,
12165
14
          { "Rule Identifier", "ieee1905.service_prio_rule.id",
12166
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
12167
12168
14
        { &hf_ieee1905_service_prio_rule_flags,
12169
14
          { "Flags", "ieee1905.service_prio_rule.flags",
12170
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12171
12172
14
        { &hf_ieee1905_service_prio_rule_add_remove_filter_bit,
12173
14
          { "Add-Remove Filter", "ieee1905.service_prio_rule.flags.add_remove",
12174
14
            FT_BOOLEAN, 8, TFS(&tfs_add_remove), 0x80, NULL, HFILL }},
12175
12176
14
        { &hf_ieee1905_service_prio_rule_flags_reserved,
12177
14
          { "Reserved", "ieee1905.service_prio_rule.flags.reserved",
12178
14
            FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
12179
12180
12181
14
        { &hf_ieee1905_service_prio_rule_precedence,
12182
14
          { "Rule Precedence", "ieee1905.service_prio_rule.precedence",
12183
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12184
12185
14
        { &hf_ieee1905_service_prio_rule_output,
12186
14
          { "Rule Output", "ieee1905.service_prio_rule.output",
12187
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12188
12189
14
        { &hf_ieee1905_service_prio_match_flags,
12190
14
          { "Match flags", "ieee1905.service_prio_rule.match_flags",
12191
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12192
12193
14
        { &hf_ieee1905_service_prio_rule_match_always,
12194
14
          { "Match Always", "ieee1905.service_prio_rule.match.match_always",
12195
14
            FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
12196
12197
14
        { &hf_ieee1905_service_prio_rule_match_reserved,
12198
14
          { "Reserved", "ieee1905.service_prio_rule.match.reserved",
12199
14
            FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL }},
12200
12201
14
        { &hf_ieee1905_service_prio_rule_match_up_in_qos,
12202
14
          { "Match Up in 802.11 QoS Control",
12203
14
            "ieee1905.service_prio_rule.match.match_up_802_11_qos",
12204
14
            FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
12205
12206
14
        { &hf_ieee1905_service_prio_rule_match_up_control_match,
12207
14
          { "UP in 802.11 QoS Control Match Sense Flag",
12208
14
            "ieee1905.service_prio_rule.match.up_in_802_11_qos_control",
12209
14
            FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
12210
12211
14
        { &hf_ieee1905_service_prio_rule_match_source_mac,
12212
14
          { "Match Source MAC Address",
12213
14
            "ieee1905.service_prio_rule.match.match_source_mac",
12214
14
            FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
12215
12216
14
        { &hf_ieee1905_service_prio_rule_match_source_mac_sense,
12217
14
          { "Source MAC Address Match Sense",
12218
14
            "ieee1905.service_prio_rule.match.source_mac_address_match_sense",
12219
14
            FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
12220
12221
14
        { &hf_ieee1905_service_prio_rule_match_dest_mac,
12222
14
          { "Match Destination MAC address",
12223
14
            "ieee1905.service_prio_rule.match.match_destination_mac",
12224
14
            FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
12225
12226
14
        { &hf_ieee1905_service_prio_rule_match_dest_mac_sense,
12227
14
          { "Destination MAC Address Match Sense",
12228
14
            "ieee1905.service_prio_rule.match.destination_mac_address_match_sense",
12229
14
            FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
12230
12231
14
        { &hf_ieee1905_service_prio_rule_up_control,
12232
14
          { "UP in 802.11 QoS Control",
12233
14
            "ieee1905.service_prio_rule.up_in_802_11_qos_control",
12234
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12235
12236
14
        { &hf_ieee1905_service_prio_rule_source_mac,
12237
14
          { "Source MAC Address", "ieee1905.service_prio_rule.source_mac_addr",
12238
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12239
12240
14
        { &hf_ieee1905_service_prio_rule_dest_mac,
12241
14
          { "Destination MAC Address", "ieee1905.service_prio_rule.destination_mac_addr",
12242
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12243
12244
14
        { &hf_ieee1905_dscp_mapping_table_val,
12245
14
          { "PCP Value", "ieee1905.dscp_mapping_table.pcp_value",
12246
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12247
12248
14
        { &hf_ieee1905_r2_error_reason_code,
12249
14
          { "Reason Code", "ieee1905.profile_2_error.reason_code",
12250
14
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(r2_error_code_rvals),
12251
14
            0, NULL, HFILL }},
12252
12253
14
        { &hf_ieee1905_r2_error_bssid,
12254
14
          { "BSSID", "ieee1905.profile_2_error.bssid",
12255
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12256
12257
14
        { &hf_ieee1905_ap_radio_advanced_capa_backhaul_bss_traffic_sep,
12258
14
          { "Traffic Separation on combined fronthaul and R1-only backhaul",
12259
14
            "ieee1905.ap_advanced_capabilities.traffic_sep_on_combined_fronthaul_and_r1_only_backhaul",
12260
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
12261
14
            0x80, NULL, HFILL }},
12262
12263
14
        { &hf_ieee1905_ap_radio_advanced_capa_combined_r1_r2_backhaul,
12264
14
          { "Traffic Separation on combined R1 and R2 and above backhaul",
12265
14
            "ieee1905.ap_advanced_capabilities.traffic_sep_on_combined_r1_and_r2_and_backhaul",
12266
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
12267
14
            0x40, NULL, HFILL }},
12268
12269
14
        { &hf_ieee1905_ap_radio_advanced_capa_mscs,
12270
14
          { "MSCS and EasyMesh configuration of extensions to MSCS",
12271
14
            "ieee1905.ap_advanced_capabilities.mscs",
12272
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
12273
14
            0x20, NULL, HFILL }},
12274
12275
14
        { &hf_ieee1905_ap_radio_advanced_capa_scs,
12276
14
          { "SCS and EasyMesh configuration of extensions to SCS",
12277
14
            "ieee1905.ap_advanced_capabilities.scs",
12278
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
12279
14
            0x10, NULL, HFILL }},
12280
12281
14
        { &hf_ieee1905_ap_radio_advanced_capa_qos_map,
12282
14
          { "DSCP Mapping Table TLV based DSCP-to-UP mapping and distribution of QoS Map elements to associated STAs",
12283
14
            "ieee1905.ap_advanced_capabilities.qos_map",
12284
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
12285
14
            0x08, NULL, HFILL }},
12286
12287
14
        { &hf_ieee1905_ap_radio_advanced_capa_dscp_policy,
12288
14
          { "Sending DSCP Policy Requests to associated STAs, and EasyMesh configuration of such policies",
12289
14
            "ieee1905.ap_advanced_capabilities.dscp_policy",
12290
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
12291
14
            0x04, NULL, HFILL }},
12292
12293
14
        { &hf_ieee1905_ap_radio_advanced_capa_qm_scs_traffic_descr,
12294
14
          { "Qos Management SCS Traffic Description and EasyMesh configuration of and/or extensions to SCS using traffic descriptions",
12295
14
            "ieee1905.ap_advanced_capabilities.qm_scs_traffic_descr",
12296
14
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
12297
14
            0x02, NULL, HFILL }},
12298
12299
14
        { &hf_ieee1905_ap_radio_advanced_capa_reserved,
12300
14
          { "Reserved", "ieee1905.ap_advanced_capabilities.reserved",
12301
14
            FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
12302
12303
14
        { &hf_ieee1905_assoc_status_notif_num_bssid,
12304
14
          { "Number of BSSIDs",
12305
14
            "ieee1905.association_status_notification.num_bssids",
12306
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12307
12308
14
        { &hf_ieee1905_assoc_status_notif_bssid,
12309
14
          { "BSSID of operated BSS",
12310
14
            "ieee1905.associated_status_notification.bssid_of_operated_bss",
12311
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12312
12313
14
        { &hf_ieee1905_assoc_status_notif_status,
12314
14
          { "Status", "ieee1905.associated_status_notification.status",
12315
14
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING,
12316
14
            RVALS(assoc_status_notif_status_rvals), 0x0, NULL, HFILL }},
12317
12318
14
        { &hf_ieee1905_source_info_mac_addr,
12319
14
          { "Tunneled Source MAC Address",
12320
14
            "ieee1905.source_info.tunneled_source_mac_address",
12321
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12322
12323
14
        { &hf_ieee1905_tunneled_message_type,
12324
14
          { "Tunneled protocol payload type",
12325
14
            "ieee1905.tunneled_message_type.tunneled_payload_type",
12326
14
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING,
12327
14
            RVALS(tunneled_message_type_rvals), 0x0, NULL, HFILL }},
12328
12329
14
        { &hf_ieee1905_tunneled_data,
12330
14
          { "Tunneled protocol payload",
12331
14
            "ieee1905.tunneled.tunneled_protocol_payload",
12332
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12333
12334
14
        { &hf_ieee1905_status_code_status,
12335
14
          { "Status Code", "ieee1905.status_code.status_code",
12336
14
            FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_status_code_ext, 0,
12337
14
            NULL, HFILL }},
12338
12339
14
        { &hf_ieee1905_disassociation_reason_code,
12340
14
          { "Reason Code", "ieee1905.disassociation_reason_code.reason_code",
12341
14
            FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_reason_code_ext, 0,
12342
14
            NULL, HFILL }},
12343
12344
14
        { &hf_ieee1905_backhaul_sta_radio_id,
12345
14
          { "Radio ID", "ieee1905.backhaul_sta_radio_capabilities.radio_id",
12346
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12347
12348
14
        { &hf_ieee1905_backhaul_sta_radio_capabilities,
12349
14
          { "Flags", "ieee1905.backhaul_sta_radio_capabilities.flags",
12350
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12351
12352
14
        { &hf_ieee1905_backhaul_sta_radio_capa_mac_included,
12353
14
          { "MAC address included",
12354
14
            "ieee1905.backhaul_sta_radio_capabilities.mac_address_included",
12355
14
            FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
12356
12357
14
        { &hf_ieee1905_backhaul_sta_radio_capa_reserved,
12358
14
          { "Reserved", "ieee1905.backhaul_sta_radio_capabilities.reserved",
12359
14
            FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
12360
12361
14
        { &hf_ieee1905_backhaul_sta_addr,
12362
14
          { "Backhaul STA MAC address",
12363
14
            "ieee1905.backhaul_sta_radio_capabilities.backhaul_sta_mac_address",
12364
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12365
12366
14
        { &hf_ieee1905_akm_backhaul_suite_oui,
12367
14
          { "Backhaul Suite OUI",
12368
14
            "ieee1905.akm_suite_capabilities.backhaul.backhaul_akm_suite_oui",
12369
14
            FT_UINT24, BASE_OUI, NULL, 0, NULL, HFILL }},
12370
12371
14
        { &hf_ieee1905_akm_backhaul_suite_type,
12372
14
          { "Backhaul AKM Suite type",
12373
14
            "ieee1905.akm_suite_capabilities.backhaul_akm_suite_type",
12374
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12375
12376
14
        { &hf_ieee1905_backhaul_akm_suite_capa_count,
12377
14
          { "Backhaul AKM Suite count",
12378
14
            "ieee1905.akm_suite_capabilities.backhaul_akm_suite_count",
12379
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12380
12381
14
        { &hf_ieee1905_akm_fronthaul_suite_oui,
12382
14
          { "Fronthaul Suite OUI",
12383
14
            "ieee1905.akm_suite_capabilities.backhaul.fronthaul_akm_suite_oui",
12384
14
            FT_UINT24, BASE_OUI, NULL, 0, NULL, HFILL }},
12385
12386
14
        { &hf_ieee1905_akm_fronthaul_suite_type,
12387
14
          { "Fronthaul AKM Suite type",
12388
14
            "ieee1905.akm_suite_capabilities.fronthaul_akm_suite_type",
12389
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12390
12391
14
        { &hf_ieee1905_fronthaul_akm_suite_capa_count,
12392
14
          { "Fronthaul AKM Suite count",
12393
14
            "ieee1905.akm_suite_capabilities.fronthaul_akm_suite_count",
12394
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12395
12396
14
        { &hf_ieee1905_encap_dpp_flags,
12397
14
          { "Flags", "ieee1905.1905_encap_dpp.flags",
12398
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12399
12400
14
        { &hf_ieee1905_dpp_encap_enrollee_mac_present,
12401
14
          { "Enrollee Mac Address Present",
12402
14
            "ieee1905.1905_encap_dpp.flags.enrollee_mac_address_present",
12403
14
            FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
12404
12405
14
        { &hf_ieee1905_dpp_encap_reserved,
12406
14
          { "Reserved",
12407
14
            "ieee1905.1905_encap_dpp.flags.reserved",
12408
14
            FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
12409
12410
14
        { &hf_ieee1905_dpp_encap_frame_type_flag,
12411
14
          { "DPP Frame Indicator",
12412
14
            "ieee1905.1905_encap_dpp.flags.dpp_frame_indicator",
12413
14
            FT_BOOLEAN, 8, TFS(&tfs_dpp_frame_indicator), 0x20, NULL, HFILL }},
12414
12415
14
        { &hf_ieee1905_dpp_encap_reserved2,
12416
14
          { "Reserved", "ieee1905.1905_encap_dpp.flags.reserved2",
12417
14
            FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
12418
12419
14
        { &hf_ieee1905_encap_dpp_sta_mac,
12420
14
          { "Destination STA MAC address",
12421
14
            "ieee1905.1905_encap_dpp.destination_sta_mac_address",
12422
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12423
12424
14
        { &hf_ieee1905_dpp_encap_frame_type,
12425
14
          { "Frame Type", "ieee1905.1905_encap_dpp.frame_type",
12426
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12427
12428
14
        { &hf_ieee1905_dpp_encap_frame_length,
12429
14
          { "Frame Length", "ieee1905.1905_encap_dpp.frame_length",
12430
14
            FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12431
12432
14
        { &hf_ieee1905_dpp_encap_dpp_oui,
12433
14
          { "OUI", "ieee1905.1905_encap_dpp.oui",
12434
14
            FT_UINT24, BASE_OUI, NULL, 0, NULL, HFILL }},
12435
12436
14
        { &hf_ieee1905_dpp_encap_public_action,
12437
14
          { "Public Action", "ieee1905.1905_encap_dpp.public_action",
12438
14
            FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ff_pa_action_codes_ext, 0,
12439
14
            NULL, HFILL }},
12440
12441
14
        { &hf_ieee1905_dpp_encap_dpp_subtype,
12442
14
          { "WFA Subtype", "ieee1905.1905_encap_dpp.subtype",
12443
14
            FT_UINT8, BASE_DEC, VALS(wfa_subtype_vals), 0,
12444
14
            NULL, HFILL }},
12445
12446
14
        { &hf_ieee1905_dpp_bootstrapping_uri_radio_id,
12447
14
          { "Radio ID", "ieee1905.dpp_bootstrapping_uri_notification.radio_id",
12448
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12449
12450
14
        { &hf_ieee1905_dpp_bootstrapping_uri_local_mac_addr,
12451
14
          { "MAC Address of Local Interface",
12452
14
            "ieee1905.dpp_bootstrapping_uri_notification.mac_addr_local_intf",
12453
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12454
12455
14
        { &hf_ieee1905_dpp_bootstrapping_uri_bsta_mac_addr,
12456
14
          { "MAC Address of bSTA",
12457
14
            "ieee1905.dpp_bootstrapping_uri_notification.mac_addr_bsta",
12458
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12459
12460
14
        { &hf_ieee1905_dpp_bootstrapping_uri_received,
12461
14
          { "DPP Bootstrapping URI",
12462
14
            "ieee1905.dpp_bootstrapping_uri_notification.dpp_bootstrapping_uri",
12463
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12464
12465
14
        { &hf_ieee1905_dpp_advertise_cce_flag,
12466
14
          { "Advertise CCE", "ieee1905.dpp_advertise_cce.flag",
12467
14
            FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
12468
12469
14
        { &hf_ieee1905_dpp_chirp_value_flags,
12470
14
          { "Chirp Value Flags", "ieee1905.dpp_chirp_value.flags",
12471
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12472
12473
14
        { &hf_ieee1905_dpp_chirp_enrollee_mac_addr_present,
12474
14
          { "Enrollee MAC Address Present",
12475
14
            "ieee1905.dpp_chirp_value.flags.enrollee_mac_addr_present",
12476
14
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x80, NULL, HFILL }},
12477
12478
14
        { &hf_ieee1905_dpp_chirp_hash_validity,
12479
14
          { "Hash Validity Bit", "ieee1905.dpp_chirp_value.flags.hash_validity_bit",
12480
14
            FT_BOOLEAN, 8, TFS(&tfs_chirp_hash_validity_bit),
12481
14
            0x40, NULL, HFILL }},
12482
12483
14
        { &hf_ieee1905_dpp_chirp_reserved,
12484
14
          { "Reserved", "ieee1905.dpp_chirp_value.flags.reserved",
12485
14
            FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL }},
12486
12487
14
        { &hf_ieee1905_dpp_chirp_enrollee_mac_addr,
12488
14
          { "Destination STA MAC Address",
12489
14
            "ieee1905.dpp_chirp_value.dest_mac_addr",
12490
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12491
12492
14
        { &hf_ieee1905_dpp_chirp_value_hash_length,
12493
14
          { "Hash Length", "ieee1905.dpp_chirp_value.hash_length",
12494
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12495
12496
14
        { &hf_ieee1905_dpp_chirp_value_hash_value,
12497
14
          { "Hash Value", "ieee1905.dpp_chirp_value.hash_value",
12498
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
12499
12500
14
        { &hf_ieee1905_dev_inventory_lsn,
12501
14
          { "Serial Number Length", "ieee1905.device_inventory.lsn",
12502
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12503
12504
14
        { &hf_ieee1905_dev_inventory_serial,
12505
14
          { "Serial Number", "ieee1905.device_inventory.serial_number",
12506
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12507
12508
14
        { &hf_ieee1905_dev_inventory_lsv,
12509
14
          { "Software Version Length", "ieee1905.device_inventory.lsv",
12510
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12511
12512
14
        { &hf_ieee1905_dev_inventory_sw_vers,
12513
14
          { "Software Version", "ieee1905.device_inventory.software_version",
12514
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12515
12516
14
        { &hf_ieee1905_dev_inventory_lee,
12517
14
          { "Execution Env Length", "ieee1905.device_inventory.lee",
12518
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12519
12520
14
        { &hf_ieee1905_dev_inventory_exec_env,
12521
14
          { "Execution Env", "ieee1905.device_inventory.execution_env",
12522
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12523
12524
14
        { &hf_ieee1905_dev_inventory_num_radios,
12525
14
          { "Number of Radios", "ieee1905.device_inventory.number_of_radios",
12526
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12527
12528
14
        { &hf_ieee1905_dev_inventory_radio_id,
12529
14
          { "Radio ID", "ieee1905.device_inventory.radio_id",
12530
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12531
12532
14
        { &hf_ieee1905_dev_inventory_lcv,
12533
14
          { "Chipset Vendor Length", "ieee1905.device_inventory.lcv",
12534
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12535
12536
14
        { &hf_ieee1905_dev_inventory_chp_ven,
12537
14
          { "Chipset Vendor", "ieee1905.device_inventory.chipset_vendor",
12538
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12539
12540
14
        { &hf_ieee1905_r2_steering_req_src_bssid,
12541
14
          { "Src BSSID", "ieee1905.r2_steering_request.src_bssid",
12542
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12543
12544
14
        { &hf_ieee1905_r2_steering_req_flags,
12545
14
          { "Flags", "ieee1905.r2_steering_request.flags",
12546
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12547
12548
14
        { &hf_ieee1905_r2_steering_request_mode_flag,
12549
14
          { "Request Mode", "ieee1905.r2_steering_request.flags.request_mode",
12550
14
            FT_BOOLEAN, 8, TFS(&tfs_ieee1905_steering_request_mode_flag),
12551
14
            0x80, NULL, HFILL }},
12552
12553
14
        { &hf_ieee1905_r2_btm_disassoc_imminent_flag,
12554
14
          { "BTM Disassociation Imminent",
12555
14
            "ieee1905.r2_steering_request.flags.btm_disassociation_imminent",
12556
14
            FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
12557
12558
14
        { &hf_ieee1905_r2_btm_abridged_flag,
12559
14
          { "BTM Abridged", "ieee1905.r2_steering_request.flags.btm_abridged",
12560
14
            FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
12561
12562
14
        { &hf_ieee1905_r2_steering_req_reserved,
12563
14
          { "Reserved", "ieee1905.r2_steering_request.flags.reserved",
12564
14
            FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
12565
12566
14
        { &hf_ieee1905_r2_steering_op_window,
12567
14
          { "Steering Opportunity window",
12568
14
            "ieee1905.r2_steering_request.steering_opportunity_window",
12569
14
            FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12570
12571
14
        { &hf_ieee1905_r2_steering_btm_dissasoc_tmr,
12572
14
          { "BTM Disassociation Timer",
12573
14
            "ieee1905.r2_steering_request.btm_disassociation_timer",
12574
14
            FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12575
12576
14
        { &hf_ieee1905_r2_steering_sta_count,
12577
14
          { "STA List Count", "ieee1905.r2_steering_request.sta_list_count",
12578
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12579
12580
14
        { &hf_ieee1905_r2_steering_sta_mac,
12581
14
          { "AMB capable STA MAC",
12582
14
            "ieee1905.r2_steering_request.amb_capable_sta_mac",
12583
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12584
12585
14
        { &hf_ieee1905_r2_steering_target_count,
12586
14
          { "Target BSSID Count",
12587
14
            "ieee1905.r2_steering_request.target_bssid_count",
12588
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12589
12590
14
        { &hf_ieee1905_r2_steering_target_bssid,
12591
14
          { "Target BSSID", "ieee1905.r2_steering_request.target_bssid",
12592
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12593
12594
14
        { &hf_ieee1905_r2_steering_target_op_class,
12595
14
          { "Target Operating Class",
12596
14
            "ieee1905.r2_steering_request.target_operating_class",
12597
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12598
12599
14
        { &hf_ieee1905_r2_steering_target_channel,
12600
14
          { "Target Channel",
12601
14
            "ieee1905.r2_steering_request.target_channel",
12602
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12603
12604
14
        { &hf_ieee1905_r2_steering_reason,
12605
14
          { "Reason code", "ieee1905.r2_steering_request.reason_code",
12606
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12607
12608
14
        { &hf_ieee1905_metric_collection_interval,
12609
14
          { "Collection Interval", "ieee1905.metric_collection_interval.interval",
12610
14
            FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12611
12612
14
        { &hf_ieee1905_max_reporting_rate,
12613
14
          { "Maximum Reporting Rate", "ieee1905.unsuccessful_assoc.max_report_rate",
12614
14
            FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12615
12616
14
        { &hf_ieee1905_bss_configuration_request,
12617
14
          { "Configuration Request Object",
12618
14
            "ieee1905.bss_configuration_request.configuration_request_object",
12619
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12620
12621
14
        { &hf_ieee1905_bss_configuration_response,
12622
14
          { "Configuration Response Object",
12623
14
            "ieee1905.bss_configuration_response.configuration_response_object",
12624
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12625
12626
14
        { &hf_ieee1905_dpp_message_public_action,
12627
14
          { "Public Action", "ieee1905.dpp_message.public_action",
12628
14
            FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ff_pa_action_codes_ext, 0,
12629
14
            NULL, HFILL }},
12630
12631
14
        { &hf_ieee1905_spatial_reuse_req_radio_id,
12632
14
          { "RUID", "ieee1905.spatial_reuse_req.ruid",
12633
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12634
12635
14
        { &hf_ieee1905_spatial_reuse_color_flags,
12636
14
          { "Spatial Reuse Color Flags",
12637
14
            "ieee1905.spatial_reuse_req.color_flags",
12638
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12639
12640
14
        { &hf_ieee1905_spatial_reuse_reserved,
12641
14
          { "Reserved", "ieee1905.spatial_reuse_req.reserved1",
12642
14
            FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL }},
12643
12644
14
        { &hf_ieee1905_spatial_reuse_bss_color,
12645
14
          { "BSS Color", "ieee1905.spatial_reuse_req.bss_color",
12646
14
            FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL }},
12647
12648
14
        { &hf_ieee1905_spatial_reuse_hesiga_flags,
12649
14
          { "Spatial Reuse Misc Flags", "ieee1905.spatial_reuse_req.misc_flags",
12650
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12651
12652
14
        { &hf_ieee1905_spatial_reuse_reserved2,
12653
14
          { "Reserved", "ieee1905.spatial_reuse_req.reserved2",
12654
14
            FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL }},
12655
12656
14
        { &hf_ieee1905_spatial_reuse_hesiga_value15_allowed,
12657
14
          { "HESIGA Spatial reuse value15 allowed",
12658
14
            "ieee1905.spatial_reuse_req.hesiga_spatial_reuse_value15_allowed",
12659
14
            FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
12660
12661
14
        { &hf_ieee1905_spatial_reuse_srg_info_valid,
12662
14
          { "SRG Information Valid",
12663
14
            "ieee1905.spatial_reuse_req.srg_information_valid",
12664
14
            FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
12665
12666
14
        { &hf_ieee1905_spatial_reuse_non_srg_offset_valid,
12667
14
          { "Non-SRG Offset Valid",
12668
14
            "ieee1905.spatial_reuse_req.non_srg_offset_valid",
12669
14
            FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
12670
12671
14
        { &hf_ieee1905_spatial_reuse_reserved3,
12672
14
          { "Reserved", "ieee1905.spatial_reuse_req.reserved3",
12673
14
            FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL }},
12674
12675
14
        { &hf_ieee1905_spatial_reuse_psr_disallowed,
12676
14
          { "PSR Disallowed", "ieee1905.spatial_reuse_req.psr_disallowed",
12677
14
            FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
12678
12679
14
        { &hf_ieee1905_spatial_reuse_non_srg_obsspd_max_offset,
12680
14
          { "Non-SRG OBSSPD Max Offset",
12681
14
            "ieee1905.spatial_reuse_req.non_srg_obsspd_max_offset",
12682
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12683
12684
14
        { &hf_ieee1905_spatial_reuse_not_valid1,
12685
14
          { "Not Valid",
12686
14
            "ieee1905.spatial_reuse_req.not_valid_1",
12687
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12688
12689
14
        { &hf_ieee1905_spatial_reuse_srg_obsspd_min_offset,
12690
14
          { "SRG OBSSPD Min Offset",
12691
14
            "ieee1905.spatial_reuse_req.srg_obsspd_min_offset",
12692
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12693
12694
14
        { &hf_ieee1905_spatial_reuse_srg_obsspd_max_offset,
12695
14
          { "SRG OBSSPD Max Offset",
12696
14
            "ieee1905.spatial_reuse_req.srg_obsspd_max_offset",
12697
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12698
12699
14
        { &hf_ieee1905_spatial_reuse_srg_bss_color_bitmap,
12700
14
          { "SRG BSS Color Bitmap",
12701
14
            "ieee1905.spatial_reuse_req.srg_bss_color_bitmap",
12702
14
            FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12703
12704
14
        { &hf_ieee1905_spatial_reuse_srg_partial_bssid_bitmap,
12705
14
          { "SRG Partial BSSID Bitmap",
12706
14
            "ieee1905.spatial_reuse_req.srg_partial_bssid_bitmap",
12707
14
            FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12708
12709
14
        { &hf_ieee1905_spatial_reuse_not_valid2,
12710
14
          { "Not Valid",
12711
14
            "ieee1905.spatial_reuse_req.not_valid_2",
12712
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12713
12714
14
        { &hf_ieee1905_spatial_reuse_not_valid3,
12715
14
          { "Not Valid",
12716
14
            "ieee1905.spatial_reuse_req.not_valid_3",
12717
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12718
12719
14
        { &hf_ieee1905_spatial_reuse_not_valid4,
12720
14
          { "Not Valid",
12721
14
            "ieee1905.spatial_reuse_req.not_valid_4",
12722
14
            FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12723
12724
14
        { &hf_ieee1905_spatial_reuse_not_valid5,
12725
14
          { "Not Valid",
12726
14
            "ieee1905.spatial_reuse_req.not_valid_5",
12727
14
            FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12728
12729
14
        { &hf_ieee1905_spatial_reuse_reserved4,
12730
14
          { "Reserved",
12731
14
            "ieee1905.spatial_reuse_req.reserved4",
12732
14
            FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12733
12734
14
        { &hf_ieee1905_spatial_reuse_rep_radio_id,
12735
14
          { "RUID", "ieee1905.spatial_reuse_rep.ruid",
12736
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12737
12738
14
        { &hf_ieee1905_spatial_reuse_rep_color_flags,
12739
14
          { "Spatial Reuse Color Flags",
12740
14
            "ieee1905.spatial_reuse_rep.color_flags",
12741
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12742
12743
14
        { &hf_ieee1905_spatial_reuse_rep_reserved,
12744
14
          { "Reserved", "ieee1905.spatial_reuse_rep.reserved1",
12745
14
            FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL }},
12746
12747
14
        { &hf_ieee1905_spatial_reuse_rep_partial_bss_color,
12748
14
          { "Partial BSS Color", "ieee1905.spatial_reuse_rep.partial_bss_color",
12749
14
            FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL }},
12750
12751
14
        { &hf_ieee1905_spatial_reuse_rep_bss_color,
12752
14
          { "BSS Color", "ieee1905.spatial_reuse_rep.bss_color",
12753
14
            FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL }},
12754
12755
14
        { &hf_ieee1905_spatial_reuse_rep_hesiga_flags,
12756
14
          { "Spatial Reuse Misc Flags", "ieee1905.spatial_reuse_rep.misc_flags",
12757
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12758
12759
14
        { &hf_ieee1905_spatial_reuse_rep_reserved2,
12760
14
          { "Reserved", "ieee1905.spatial_reuse_rep.reserved2",
12761
14
            FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL }},
12762
12763
14
        { &hf_ieee1905_spatial_reuse_rep_hesiga_value15_allowed,
12764
14
          { "HESIGA Spatial reuse value15 allowed",
12765
14
            "ieee1905.spatial_reuse_rep.hesiga_spatial_reuse_value15_allowed",
12766
14
            FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
12767
12768
14
        { &hf_ieee1905_spatial_reuse_rep_srg_info_valid,
12769
14
          { "SRG Information Valid",
12770
14
            "ieee1905.spatial_reuse_rep.srg_information_valid",
12771
14
            FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
12772
12773
14
        { &hf_ieee1905_spatial_reuse_rep_non_srg_offset_valid,
12774
14
          { "Non-SRG Offset Valid",
12775
14
            "ieee1905.spatial_reuse_rep.non_srg_offset_valid",
12776
14
            FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
12777
12778
14
        { &hf_ieee1905_spatial_reuse_rep_reserved3,
12779
14
          { "Reserved", "ieee1905.spatial_reuse_rep.reserved3",
12780
14
            FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL }},
12781
12782
14
        { &hf_ieee1905_spatial_reuse_rep_psr_disallowed,
12783
14
          { "PSR Disallowed", "ieee1905.spatial_reuse_rep.psr_disallowed",
12784
14
            FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
12785
12786
14
        { &hf_ieee1905_spatial_reuse_rep_non_srg_obsspd_max_offset,
12787
14
          { "Non-SRG OBSSPD Max Offset",
12788
14
            "ieee1905.spatial_reuse_rep.non_srg_obsspd_max_offset",
12789
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12790
12791
14
        { &hf_ieee1905_spatial_reuse_rep_not_valid1,
12792
14
          { "Not Valid",
12793
14
            "ieee1905.spatial_reuse_rep.not_valid_1",
12794
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12795
12796
14
        { &hf_ieee1905_spatial_reuse_rep_srg_obsspd_min_offset,
12797
14
          { "SRG OBSSPD Min Offset",
12798
14
            "ieee1905.spatial_reuse_rep.srg_obsspd_min_offset",
12799
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12800
12801
14
        { &hf_ieee1905_spatial_reuse_rep_srg_obsspd_max_offset,
12802
14
          { "SRG OBSSPD Max Offset",
12803
14
            "ieee1905.spatial_reuse_rep.srg_obsspd_max_offset",
12804
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12805
12806
14
        { &hf_ieee1905_spatial_reuse_rep_srg_bss_color_bitmap,
12807
14
          { "SRG BSS Color Bitmap",
12808
14
            "ieee1905.spatial_reuse_rep.srg_bss_color_bitmap",
12809
14
            FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12810
12811
14
        { &hf_ieee1905_spatial_reuse_rep_srg_partial_bssid_bitmap,
12812
14
          { "SRG Partial BSSID Bitmap",
12813
14
            "ieee1905.spatial_reuse_rep.srg_partial_bssid_bitmap",
12814
14
            FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12815
12816
14
        { &hf_ieee1905_spatial_reuse_rep_not_valid2,
12817
14
          { "Not Valid",
12818
14
            "ieee1905.spatial_reuse_rep.not_valid_2",
12819
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12820
12821
14
        { &hf_ieee1905_spatial_reuse_rep_not_valid3,
12822
14
          { "Not Valid",
12823
14
            "ieee1905.spatial_reuse_rep.not_valid_3",
12824
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12825
12826
14
        { &hf_ieee1905_spatial_reuse_rep_not_valid4,
12827
14
          { "Not Valid",
12828
14
            "ieee1905.spatial_reuse_rep.not_valid_4",
12829
14
            FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12830
12831
14
        { &hf_ieee1905_spatial_reuse_rep_not_valid5,
12832
14
          { "Not Valid",
12833
14
            "ieee1905.spatial_reuse_rep.not_valid_5",
12834
14
            FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12835
12836
14
        { &hf_ieee1905_spatial_reuse_rep_nbor_bss_color_bitmap,
12837
14
          { "Neighbor BSS Color In Use Bitmap",
12838
14
            "ieee1905.spatial_reuse_rep.neighbor_bss_color_in_use_bitmap",
12839
14
            FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12840
12841
14
        { &hf_ieee1905_spatial_reuse_rep_reserved4,
12842
14
          { "Reserved", "ieee1905.spatial_reuse_rep.reserved4",
12843
14
            FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12844
12845
14
        { &hf_ieee1905_spatial_reuse_config_radio_id,
12846
14
          { "RUID", "ieee1905.spatial_reuse_config_response.ruid",
12847
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12848
12849
14
        { &hf_ieee1905_spatial_reuse_config_response,
12850
14
          { "Response Code",
12851
14
            "ieee1905.spatial_reuse_config_response.response_code",
12852
14
            FT_UINT8, BASE_DEC|BASE_RANGE_STRING,
12853
14
            RVALS(spatial_reuse_response_rvals), 0x0, NULL, HFILL }},
12854
12855
14
        { &hf_ieee1905_qos_mgmt_policy_mscs_disallowed,
12856
14
          { "Num STAs MSCS disallowed",
12857
14
            "ieee1905.qos_mgmt_policy.num_stas_mscs_disallowed",
12858
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12859
12860
14
        { &hf_ieee1905_qos_mgmt_mscs_disallow_sta,
12861
14
          { "MAC Addr of MSCS Disallowed STA",
12862
14
            "ieee1905.qos_mgmt_policy.mac_addr_mscs_disallowed_sta",
12863
14
           FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12864
12865
14
        { &hf_ieee1905_qos_mgmt_policy_scs_disallowed,
12866
14
          { "Num STAs SCS disallowed",
12867
14
            "ieee1905.qos_mgmt_policy.num_stas_scs_disallowed",
12868
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12869
12870
14
        { &hf_ieee1905_qos_mgmt_scs_disallow_sta,
12871
14
          { "MAC Addr of SCS Disallowed STA",
12872
14
            "ieee1905.qos_mgmt_policy.mac_addr_scs_disallowed_sta",
12873
14
           FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12874
12875
14
        { &hf_ieee1905_qos_mgmt_desc_qmid,
12876
14
          { "QMID", "ieee1905.qos_mgmt_desc.qmid",
12877
14
            FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12878
12879
14
        { &hf_ieee1905_qos_mgmt_desc_bssid,
12880
14
          { "BSSID", "ieee1905.qos_mgmt_desc.bssid",
12881
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12882
12883
14
        { &hf_ieee1905_qos_mgmt_desc_client_mac,
12884
14
          { "Client MAC", "ieee1905.qos_mgmt_desc.client_mac",
12885
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12886
12887
14
        { &hf_ieee1905_controller_capa_flags,
12888
14
          { "Controller Capability Flags",
12889
14
            "ieee1905.controller_capa.flags",
12890
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12891
12892
14
        { &hf_ieee1905_controller_capa_reserved,
12893
14
          { "Reserved",
12894
14
            "ieee1905.controller_capa.reserved",
12895
14
            FT_BOOLEAN, 8, NULL, 0x3f, NULL, HFILL }},
12896
12897
14
        { &hf_ieee1905_controller_capa_early_ap_capa,
12898
14
          { "Early AP Capability",
12899
14
            "ieee1905.controller_capa.early_ap_capa",
12900
14
            FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
12901
12902
14
        { &hf_ieee1905_controller_capa_kbmb_counter,
12903
14
          { "KiBMiB Counter",
12904
14
            "ieee1905.controller_capa.kbmb_counter",
12905
14
            FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
12906
12907
14
        { &hf_ieee1905_wifi_7_agent_capabilities_max_num_mlds,
12908
14
          { "Max number of MLDs", "ieee1905.wifi_7_agent_capabilities.max_num_mlds",
12909
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12910
12911
14
        { &hf_ieee1905_wifi_7_agent_capabilities_flags,
12912
14
          { "Flags", "ieee1905.wifi_7_agent_capabilities.flags",
12913
14
            FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12914
12915
14
        { &hf_ieee1905_wifi_7_agent_capabilities_flags_ap_max_links,
12916
14
          { "AP Maximum links", "ieee1905.wifi_7_agent_capabilities.flags.max_links_ap",
12917
14
            FT_UINT16, BASE_HEX, NULL, 0xf000, NULL, HFILL }},
12918
12919
14
        { &hf_ieee1905_wifi_7_agent_capabilities_flags_sta_max_links,
12920
14
          { "STA Maximum links", "ieee1905.wifi_7_agent_capabilities.flags.max_links_sta",
12921
14
            FT_UINT16, BASE_HEX, NULL, 0x0f00, NULL, HFILL }},
12922
12923
14
        { &hf_ieee1905_wifi_7_agent_capabilities_flags_ttl_mapping_cap,
12924
14
          { "TID-to-Link mapping capability", "ieee1905.wifi_7_agent_capabilities.flags.tid_to_link_mapping_capability",
12925
14
            FT_UINT16, BASE_HEX, VALS(tid_to_link_mapping_capability_vals), 0x00c0, NULL, HFILL }},
12926
12927
14
        { &hf_ieee1905_wifi_7_agent_capabilities_flags_reserved,
12928
14
          { "Reserved", "ieee1905.wifi_7_agent_capabilities.flags.reserved",
12929
14
            FT_UINT16, BASE_HEX, NULL, 0x003f, NULL, HFILL }},
12930
12931
14
        { &hf_ieee1905_wifi_7_agent_capabilities_reserved,
12932
14
          { "Reserved", "ieee1905.wifi_7_agent_capabilities.reserved",
12933
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12934
12935
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_num,
12936
14
          { "Number of radios", "ieee1905.wifi_7_agent_capabilities.num_radios",
12937
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12938
12939
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_id,
12940
14
          { "Radio Unique ID", "ieee1905.wifi_7_agent_capabilities.radio_id",
12941
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12942
12943
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_reserved,
12944
14
          { "Reserved", "ieee1905.wifi_7_agent_capabilities.radio_reserved",
12945
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12946
12947
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags,
12948
14
          { "Flags", "ieee1905.wifi_7_agent_capabilities.radio_flags",
12949
14
            FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12950
12951
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_str_support,
12952
14
          { "AP STR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.ap_str_support",
12953
14
            FT_UINT16, BASE_DEC, NULL, 0x8000, NULL, HFILL }},
12954
12955
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_nstr_support,
12956
14
          { "AP NSTR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.ap_nstr_support",
12957
14
            FT_UINT16, BASE_DEC, NULL, 0x4000, NULL, HFILL }},
12958
12959
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_emlsr_support,
12960
14
          { "AP EMLSR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.ap_emlsr_support",
12961
14
            FT_UINT16, BASE_DEC, NULL, 0x2000, NULL, HFILL }},
12962
12963
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_emlmr_support,
12964
14
          { "AP EMLMR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.ap_emlmr_support",
12965
14
            FT_UINT16, BASE_DEC, NULL, 0x1000, NULL, HFILL }},
12966
12967
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_reserved1,
12968
14
          { "Reserved", "ieee1905.wifi_7_agent_capabilities.radio_flags.reserved1",
12969
14
            FT_UINT16, BASE_HEX, NULL, 0x0f00, NULL, HFILL }},
12970
12971
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_str_support,
12972
14
          { "bSTA STR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.bsta_str_support",
12973
14
            FT_UINT16, BASE_DEC, NULL, 0x0080, NULL, HFILL }},
12974
12975
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_nstr_support,
12976
14
          { "bSTA NSTR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.bsta_nstr_support",
12977
14
            FT_UINT16, BASE_DEC, NULL, 0x0040, NULL, HFILL }},
12978
12979
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_emlsr_support,
12980
14
          { "bSTA EMLSR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags_bsta_emlsr_support",
12981
14
            FT_UINT16, BASE_DEC, NULL, 0x0020, NULL, HFILL }},
12982
12983
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_emlmr_support,
12984
14
          { "bSTA EMLMR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.bsta_emlmr_support",
12985
14
            FT_UINT16, BASE_DEC, NULL, 0x0010, NULL, HFILL }},
12986
12987
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_reserved2,
12988
14
          { "Reserved", "ieee1905.wifi_7_agent_capabilities.radio_flags.reserved2",
12989
14
            FT_UINT16, BASE_HEX, NULL, 0x000f, NULL, HFILL }},
12990
12991
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_str_records,
12992
14
          { "Number of AP STR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_ap_str_records",
12993
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12994
12995
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_nstr_records,
12996
14
          { "Number of AP NSTR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_ap_nstr_records",
12997
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12998
12999
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_emlsr_records,
13000
14
          { "Number of AP EMLSR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_ap_emlsr_records",
13001
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13002
13003
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_emlmr_records,
13004
14
          { "Number of AP EMLMR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_ap_emlmr_records",
13005
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13006
13007
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_str_records,
13008
14
          { "Number of bSTA STR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_bsta_str_records",
13009
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13010
13011
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_nstr_records,
13012
14
          { "Number of bSTA NSTR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_bsta_nstr_records",
13013
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13014
13015
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_emlsr_records,
13016
14
          { "Number of bSTA EMLSR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_bsta_emlsr_records",
13017
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13018
13019
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_emlmr_records,
13020
14
          { "Number of bSTA EMLMR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_bsta_emlmr_records",
13021
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13022
13023
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_record_id,
13024
14
          { "Radio Unique ID", "ieee1905.wifi_7_agent_capabilities.radio_record_id",
13025
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13026
13027
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags,
13028
14
          { "Flags", "ieee1905.wifi_7_agent_capabilities.radio_record_flags",
13029
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13030
13031
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags_freq_separation,
13032
14
          { "Freq separation", "ieee1905.wifi_7_agent_capabilities.radio_record_flags.freq_separation",
13033
14
            FT_UINT8, BASE_DEC, NULL, 0xf8, NULL, HFILL }},
13034
13035
14
        { &hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags_reserved,
13036
14
          { "Reserved", "ieee1905.wifi_7_agent_capabilities.radio_record_flags.reserved",
13037
14
            FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL }},
13038
13039
14
       { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_num,
13040
14
          { "Number of AP MLDs", "ieee1905.agent_ap_mld_configuration.ap_mld_num",
13041
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13042
13043
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags,
13044
14
          { "Flags", "ieee1905.agent_ap_mld_configuration.flags",
13045
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13046
13047
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags_ap_mld_mac_addr_valid,
13048
14
          { "AP MLD MAC Addr Valid", "ieee1905.agent_ap_mld_configuration.flags.ap_mld_mac_addr_valid",
13049
14
            FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13050
13051
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags_reserved,
13052
14
          { "Reserved", "ieee1905.agent_ap_mld_configuration.flags.reserved",
13053
14
            FT_UINT8, BASE_DEC, NULL, 0x7f, NULL, HFILL }},
13054
13055
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_ssid_len,
13056
14
          { "SSID Length", "ieee1905.agent_ap_mld_configuration.ssid_length",
13057
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13058
13059
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_ssid,
13060
14
          { "SSID", "ieee1905.agent_ap_mld_configuration.ssid",
13061
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
13062
13063
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_mac_addr,
13064
14
          { "AP MLD MAC Addr", "ieee1905.agent_ap_mld_configuration.ap_mld_mac_addr",
13065
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13066
13067
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2,
13068
14
          { "Flags2", "ieee1905.agent_ap_mld_configuration.flags2",
13069
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13070
13071
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_str,
13072
14
          { "STR", "ieee1905.agent_ap_mld_configuration.flags2.str",
13073
14
            FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13074
13075
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_nstr,
13076
14
          { "NSTR", "ieee1905.agent_ap_mld_configuration.flags2.nstr",
13077
14
            FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13078
13079
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_emlsr,
13080
14
          { "EMLSR", "ieee1905.agent_ap_mld_configuration.flags2.emlsr",
13081
14
            FT_UINT8, BASE_DEC, NULL, 0x20, NULL, HFILL }},
13082
13083
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_emlmr,
13084
14
          { "EMLMR", "ieee1905.agent_ap_mld_configuration.flags2.emlmr",
13085
14
            FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL }},
13086
13087
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_reserved,
13088
14
          { "Reserved", "ieee1905.agent_ap_mld_configuration.flags2.reserved",
13089
14
            FT_UINT8, BASE_HEX, NULL, 0x0f, NULL, HFILL }},
13090
13091
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_reserved,
13092
14
          { "Reserved", "ieee1905.agent_ap_mld_configuration.reserved",
13093
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13094
13095
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_num,
13096
14
          { "Number of Affiliated APs", "ieee1905.agent_ap_mld_configuration.ap_mld_affiliated_ap_num",
13097
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13098
13099
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags,
13100
14
          { "Flags", "ieee1905.agent_ap_mld_configuration.affiliated_ap_flags",
13101
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13102
13103
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_affiliated_ap_mac_addr_valid,
13104
14
          { "Affiliated AP MAC Addr Valid", "ieee1905.agent_ap_mld_configuration.affiliated_ap_flags.affiliated_ap_mac_addr_valid",
13105
14
            FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13106
13107
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_link_id_valid,
13108
14
          { "Link ID Valid", "ieee1905.agent_ap_mld_configuration.affiliated_ap_flags.link_id_valid",
13109
14
            FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13110
13111
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_reserved,
13112
14
          { "Reserved", "ieee1905.agent_ap_mld_configuration.affiliated_ap_flags.reserved",
13113
14
            FT_UINT8, BASE_HEX, NULL, 0x3f, NULL, HFILL }},
13114
13115
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_radio_id,
13116
14
          { "Radio Unique ID", "ieee1905.agent_ap_mld_configuration.affiliated_ap_radio_id",
13117
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13118
13119
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_mac_addr,
13120
14
          { "Affiliated AP MAC Addr", "ieee1905.agent_ap_mld_configuration.affiliated_ap_mac_addr",
13121
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13122
13123
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_link_id,
13124
14
          { "Link ID", "ieee1905.agent_ap_mld_configuration.ap_mld_affiliated_ap_link_id",
13125
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13126
13127
14
        { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_reserved,
13128
14
          { "Reserved", "ieee1905.agent_ap_mld_configuration.ap_mld_affiliated_ap_reserved",
13129
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13130
13131
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_flags,
13132
14
          { "Flags", "ieee1905.backhaul_sta_mld_configuration.flags",
13133
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13134
13135
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_flags_bsta_mld_mac_addr_valid,
13136
14
          { "bSTA MLD MAC Addr Valid", "ieee1905.backhaul_sta_mld_configuration.flags.bsta_mld_mac_addr_valid",
13137
14
            FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13138
13139
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_flags_ap_mld_mac_addr_valid,
13140
14
          { "AP MLD MAC Addr Valid", "ieee1905.backhaul_sta_mld_configuration.flags.ap_mld_mac_addr_valid",
13141
14
            FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13142
13143
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_flags_reserved,
13144
14
          { "Reserved", "ieee1905.backhaul_sta_mld_configuration.flags.reserved",
13145
14
            FT_UINT8, BASE_HEX, NULL, 0x3f, NULL, HFILL }},
13146
13147
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_bsta_mld_mac_addr,
13148
14
          { "bSTA MLD MAC Addr", "ieee1905.backhaul_sta_mld_configuration.bsta_mld_mac_addr",
13149
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13150
13151
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_ap_mld_mac_addr,
13152
14
          { "AP MLD MAC Addr", "ieee1905.backhaul_sta_mld_configuration.ap_mld_mac_addr",
13153
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13154
13155
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_flags2,
13156
14
          { "Flags2", "ieee1905.backhaul_sta_mld_configuration.flags2",
13157
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13158
13159
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_flags2_str,
13160
14
          { "STR", "ieee1905.backhaul_sta_mld_configuration.flags2.str",
13161
14
            FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13162
13163
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_flags2_nstr,
13164
14
          { "NSTR", "ieee1905.backhaul_sta_mld_configuration.flags2.nstr",
13165
14
            FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13166
13167
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_flags2_emlsr,
13168
14
          { "EMLSR", "ieee1905.backhaul_sta_mld_configuration.flags2.emlsr",
13169
14
            FT_UINT8, BASE_DEC, NULL, 0x20, NULL, HFILL }},
13170
13171
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_flags2_emlmr,
13172
14
          { "EMLMR", "ieee1905.backhaul_sta_mld_configuration.flags2.emlmr",
13173
14
            FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL }},
13174
13175
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_flags2_reserved,
13176
14
          { "Reserved", "ieee1905.backhaul_sta_mld_configuration.flags2.reserved",
13177
14
            FT_UINT8, BASE_HEX, NULL, 0x0f, NULL, HFILL }},
13178
13179
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_reserved,
13180
14
          { "Reserved", "ieee1905.backhaul_sta_mld_configuration.reserved",
13181
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13182
13183
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_num,
13184
14
          { "Number of Affiliated bSTAs", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_num",
13185
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13186
13187
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags,
13188
14
          { "Flags", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_flags",
13189
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13190
13191
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags_affiliated_bsta_mac_addr_valid,
13192
14
          { "AP MLD MAC Addr Valid", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_flags.bsta_mac_addr_valid",
13193
14
            FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13194
13195
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags_reserved,
13196
14
          { "Reserved", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_flags.reserved",
13197
14
            FT_UINT8, BASE_HEX, NULL, 0x3f, NULL, HFILL }},
13198
13199
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_radio_id,
13200
14
          { "Radio Unique ID", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_radio_id",
13201
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13202
13203
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_mac_addr,
13204
14
          { "Affiliated bSTA MAC Addr", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_mac_addr",
13205
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13206
13207
14
        { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_reserved,
13208
14
          { "Reserved", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_reserved",
13209
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13210
13211
14
        { &hf_ieee1905_associated_sta_mld_configuration_sta_mld_mac_addr,
13212
14
          { "STA MLD MAC Addr", "ieee1905.associated_sta_mld_configuration.sta_mld_mac_addr",
13213
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13214
13215
14
        { &hf_ieee1905_associated_sta_mld_configuration_ap_mld_mac_addr,
13216
14
          { "AP MLD MAC Addr", "ieee1905.associated_sta_mld_configuration.ap_mld_mac_addr",
13217
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13218
13219
14
        { &hf_ieee1905_associated_sta_mld_configuration_flags,
13220
14
          { "Flags", "ieee1905.associated_sta_mld_configuration.flags",
13221
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13222
13223
14
        { &hf_ieee1905_associated_sta_mld_configuration_flags_str,
13224
14
          { "STR", "ieee1905.associated_sta_mld_configuration.flags.str",
13225
14
            FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13226
13227
14
        { &hf_ieee1905_associated_sta_mld_configuration_flags_nstr,
13228
14
          { "NSTR", "ieee1905.associated_sta_mld_configuration.flags.nstr",
13229
14
            FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13230
13231
14
        { &hf_ieee1905_associated_sta_mld_configuration_flags_emlsr,
13232
14
          { "EMLSR", "ieee1905.associated_sta_mld_configuration.flags.emlsr",
13233
14
            FT_UINT8, BASE_DEC, NULL, 0x20, NULL, HFILL }},
13234
13235
14
        { &hf_ieee1905_associated_sta_mld_configuration_flags_emlmr,
13236
14
          { "EMLMR", "ieee1905.associated_sta_mld_configuration.flags.emlmr",
13237
14
            FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL }},
13238
13239
14
        { &hf_ieee1905_associated_sta_mld_configuration_flags_reserved,
13240
14
          { "Reserved", "ieee1905.associated_sta_mld_configuration.flags.reserved",
13241
14
            FT_UINT8, BASE_HEX, NULL, 0x0f, NULL, HFILL }},
13242
13243
14
        { &hf_ieee1905_associated_sta_mld_configuration_reserved,
13244
14
          { "Reserved", "ieee1905.associated_sta_mld_configuration.reserved",
13245
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13246
13247
14
        { &hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_num,
13248
14
          { "Number of Affiliated STAs", "ieee1905.associated_sta_mld_configuration.affiliated_sta_num",
13249
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13250
13251
14
        { &hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_bssid,
13252
14
          { "BSSID", "ieee1905.associated_sta_mld_configuration.affiliated_sta_bssid",
13253
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13254
13255
14
        { &hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_mac_addr,
13256
14
          { "Affiliated STA MAC Addr", "ieee1905.associated_sta_mld_configuration.affiliated_sta_mac_addr",
13257
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13258
13259
14
        { &hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_reserved,
13260
14
          { "Reserved", "ieee1905.associated_sta_mld_configuration.affiliated_sta_reserved",
13261
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13262
13263
14
        { &hf_ieee1905_affiliated_sta_metrics_sta_mac_addr,
13264
14
          { "STA MAC Address", "ieee1905.affiliated_sta_metrics.sta_mac_addr",
13265
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13266
13267
14
        { &hf_ieee1905_affiliated_sta_metrics_bytes_sent,
13268
14
          { "Bytes Sent", "ieee1905.affiliated_sta_metrics.bytes_sent",
13269
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13270
13271
14
        { &hf_ieee1905_affiliated_sta_metrics_bytes_rcvd,
13272
14
          { "Bytes Received", "ieee1905.affiliated_sta_metrics.bytes_rcvd",
13273
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13274
13275
14
        { &hf_ieee1905_affiliated_sta_metrics_packets_sent,
13276
14
          { "Packets Sent", "ieee1905.affiliated_sta_metrics.packets_sent",
13277
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13278
13279
14
        { &hf_ieee1905_affiliated_sta_metrics_packets_rcvd,
13280
14
          { "Packets Received", "ieee1905.affiliated_sta_metrics.packets_rcvd",
13281
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13282
13283
14
        { &hf_ieee1905_affiliated_sta_metrics_packets_sent_errors,
13284
14
          { "Packets Sent Errors", "ieee1905.affiliated_sta_metrics.packets_sent_errors",
13285
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13286
13287
14
        { &hf_ieee1905_affiliated_sta_metrics_reserved,
13288
14
          { "Reserved", "ieee1905.affiliated_sta_metrics.reserved",
13289
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13290
13291
14
        { &hf_ieee1905_affiliated_ap_metrics_bssid,
13292
14
          { "BSSID", "ieee1905.affiliated_ap_metrics.bssid",
13293
14
            FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13294
13295
14
        { &hf_ieee1905_affiliated_ap_metrics_packets_sent,
13296
14
          { "Packets Sent", "ieee1905.affiliated_ap_metrics.packets_sent",
13297
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13298
13299
14
        { &hf_ieee1905_affiliated_ap_metrics_packets_rcvd,
13300
14
          { "Packets Received", "ieee1905.affiliated_ap_metrics.packets_rcvd",
13301
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13302
13303
14
        { &hf_ieee1905_affiliated_ap_metrics_packets_sent_errors,
13304
14
          { "Packets Sent Errors", "ieee1905.affiliated_ap_metrics.packets_sent_errors",
13305
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13306
13307
14
        { &hf_ieee1905_affiliated_ap_metrics_ucast_bytes_sent,
13308
14
          { "Unicast Bytes Sent", "ieee1905.affiliated_ap_metrics.ucast_bytes_sent",
13309
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13310
13311
14
        { &hf_ieee1905_affiliated_ap_metrics_ucast_bytes_rcvd,
13312
14
          { "Unicast Bytes Received", "ieee1905.affiliated_ap_metrics.ucast_bytes_rcvd",
13313
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13314
13315
14
        { &hf_ieee1905_affiliated_ap_metrics_mcast_bytes_sent,
13316
14
          { "Multicast Bytes Sent", "ieee1905.affiliated_ap_metrics.mcast_bytes_sent",
13317
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13318
13319
14
        { &hf_ieee1905_affiliated_ap_metrics_mcast_bytes_rcvd,
13320
14
          { "Multicast Bytes Received", "ieee1905.affiliated_ap_metrics.mcast_bytes_rcvd",
13321
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13322
13323
14
        { &hf_ieee1905_affiliated_ap_metrics_bcast_bytes_sent,
13324
14
          { "Broadcast Bytes Sent", "ieee1905.affiliated_ap_metrics.bcast_bytes_sent",
13325
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13326
13327
14
        { &hf_ieee1905_affiliated_ap_metrics_bcast_bytes_rcvd,
13328
14
          { "Broadcast Bytes Received", "ieee1905.affiliated_ap_metrics.bcast_bytes_rcvd",
13329
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13330
13331
14
        { &hf_ieee1905_affiliated_ap_metrics_reserved,
13332
14
          { "Reserved", "ieee1905.affiliated_ap_metrics.reserved",
13333
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13334
13335
14
        { &hf_ieee1905_eht_operations_reserved,
13336
14
          { "Reserved", "ieee1905.eht_operations.reserved",
13337
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13338
13339
14
        { &hf_ieee1905_eht_operations_radio_num,
13340
14
          { "Number of Radios", "ieee1905.eht_operations.num_radios",
13341
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13342
13343
14
        { &hf_ieee1905_eht_operations_radio_id,
13344
14
          { "Radio Unique ID", "ieee1905.eht_operations.radio_id",
13345
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
13346
13347
14
        { &hf_ieee1905_eht_operations_radio_bss_num,
13348
14
          { "Number of BSS", "ieee1905.eht_operations.radio.num_bss",
13349
14
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13350
13351
14
        { &hf_ieee1905_eht_operations_radio_reserved,
13352
14
          { "Reserved", "ieee1905.eht_operations.radio.reserved",
13353
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13354
13355
14
        { &hf_ieee1905_eht_operations_radio_bss_bssid,
13356
14
          { "BSSID", "ieee1905.eht_operations.radio.bss.bssid",
13357
14
            FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
13358
13359
14
        { &hf_ieee1905_eht_operations_radio_bss_flags,
13360
14
          { "Flags", "ieee1905.eht_operations.radio.bss.flags",
13361
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13362
13363
14
        { &hf_ieee1905_eht_operations_radio_bss_flags_eht_operation_information_valid,
13364
14
          { "EHT Operation Information Valid", "ieee1905.eht_operations.radio.bss.flags.eht_operation_information_valid",
13365
14
            FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13366
13367
14
        { &hf_ieee1905_eht_operations_radio_bss_flags_disabled_subchannel_valid,
13368
14
          { "Disabled Subchannel Valid", "ieee1905.eht_operations.radio.bss.flags.disabled_subchannel_valid",
13369
14
            FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13370
13371
14
        { &hf_ieee1905_eht_operations_radio_bss_flags_eht_default_pe_duration,
13372
14
          { "EHT Default PE Duration", "ieee1905.eht_operations.radio.bss.flags.eht_default_pe_duration",
13373
14
            FT_UINT8, BASE_DEC, NULL, 0x20, NULL, HFILL }},
13374
13375
14
        { &hf_ieee1905_eht_operations_radio_bss_flags_group_addr_bu_indication_limit,
13376
14
          { "Group Addr BU Indication Limit", "ieee1905.eht_operations.radio.bss.flags.group_addr_bu_indication_limit",
13377
14
            FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL }},
13378
13379
14
        { &hf_ieee1905_eht_operations_radio_bss_flags_group_addr_bu_indication_exponent,
13380
14
          { "Group Addr BU Indication Exponent", "ieee1905.eht_operations.radio.bss.flags.group_addr_bu_indication_exponent",
13381
14
            FT_UINT8, BASE_DEC, NULL, 0x0C, NULL, HFILL }},
13382
13383
14
        { &hf_ieee1905_eht_operations_radio_bss_flags_reserved,
13384
14
          { "Reserved", "ieee1905.eht_operations.radio.bss.flags.reserved",
13385
14
            FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL }},
13386
13387
14
        { &hf_ieee1905_eht_operations_radio_bss_basic_eht_nss_mcs_set,
13388
14
          { "Basic EHT NSS MCS Set", "ieee1905.eht_operations.radio.bss.basic_eht_nss_mcs_set",
13389
14
            FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13390
13391
14
        { &hf_ieee1905_eht_operations_radio_bss_control,
13392
14
          { "Control", "ieee1905.eht_operations.radio.bss.control",
13393
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13394
13395
14
        { &hf_ieee1905_eht_operations_radio_bss_ccfs0,
13396
14
          { "CCFS0", "ieee1905.eht_operations.radio.bss.ccfs0",
13397
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13398
13399
14
        { &hf_ieee1905_eht_operations_radio_bss_ccfs1,
13400
14
          { "CCFS1", "ieee1905.eht_operations.radio.bss.ccfs1",
13401
14
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13402
13403
14
        { &hf_ieee1905_eht_operations_radio_bss_disabled_subchannel_bitmap,
13404
14
          { "Disabled Subchannel Bitmap", "ieee1905.eht_operations.radio.bss.disabled_subchannel_bitmap",
13405
14
            FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13406
13407
14
        { &hf_ieee1905_eht_operations_radio_bss_reserved,
13408
14
          { "Reserved", "ieee1905.eht_operations.radio.bss.reserved",
13409
14
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13410
13411
14
        { &hf_ieee1905_available_spectrum_inquiry_request_object,
13412
14
          { "Object", "ieee1905.available_spectrum_inquiry_request.object",
13413
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
13414
13415
14
        { &hf_ieee1905_available_spectrum_inquiry_response_object,
13416
14
          { "Object", "ieee1905.available_spectrum_inquiry_response.object",
13417
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
13418
13419
14
        { &hf_ieee1905_extra_tlv_data,
13420
14
          { "Extraneous TLV data", "ieee1905.extra_tlv_data",
13421
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
13422
13423
14
        { &hf_ieee1905_fragments,
13424
14
          { "IEEE1905 Message Fragments", "ieee1905.fragments",
13425
14
            FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13426
13427
14
        { &hf_ieee1905_fragment,
13428
14
          { "IEEE1905 Message Fragment", "ieee1905.fragment",
13429
14
            FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13430
13431
14
        { &hf_ieee1905_fragment_overlap,
13432
14
          { "IEEE1905 Message Fragment Overlap", "ieee1905.fragment.overlap",
13433
14
            FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13434
13435
14
        { &hf_ieee1905_fragment_overlap_conflicts,
13436
14
          { "IEEE1905 Message Fragment Overlap Conflict",
13437
14
            "ieee1905.fragment.overlap.conflicts",
13438
14
            FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13439
13440
14
        { &hf_ieee1905_fragment_multiple_tails,
13441
14
          { "IEEE1905 Message has multiple tail fragments",
13442
14
            "ieee1905.fragment.multiple_tails",
13443
14
            FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13444
13445
14
        { &hf_ieee1905_fragment_too_long_fragment,
13446
14
          { "IEEE1905 Message Fragment too long",
13447
14
            "ieee1905.fragment.too_long",
13448
14
            FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13449
13450
14
        { &hf_ieee1905_fragment_error,
13451
14
          { "IEEE1905 Message defragmentation error",
13452
14
            "ieee1905.fragment.error",
13453
14
            FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13454
13455
14
        { &hf_ieee1905_fragment_count,
13456
14
          { "IEEE1905 Message Fragment count", "ieee1905.fragment.count",
13457
14
            FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13458
13459
14
        { &hf_ieee1905_fragment_reassembled_in,
13460
14
          { "Reassembled in", "ieee1905.fragment.reassembled.in",
13461
14
            FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13462
13463
14
        { &hf_ieee1905_fragment_reassembled_length,
13464
14
          { "IEEE1905 Message length", "ieee1905.fragment.reassembled.length",
13465
14
            FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13466
13467
14
    };
13468
13469
14
    static int *ett[] = {
13470
14
        &ett_ieee1905,
13471
14
        &ett_ieee1905_flags,
13472
14
        &ett_ieee1905_tlv_len,
13473
14
        &ett_tlv,
13474
14
        &ett_device_information_list,
13475
14
        &ett_device_information_tree,
13476
14
        &ett_media_type,
13477
14
        &ett_bridging_tuples_list,
13478
14
        &ett_bridging_mac_list,
13479
14
        &ett_non_1905_neighbor_list,
13480
14
        &ett_1905_neighbor_list,
13481
14
        &ett_ieee1905_neighbor_flags,
13482
14
        &ett_media_type_list,
13483
14
        &ett_media_item,
13484
14
        &ett_local_interface_list,
13485
14
        &ett_local_interface_info,
13486
14
        &ett_ipv4_list,
13487
14
        &ett_ipv4_info,
13488
14
        &ett_ipv4_type_addr_list,
13489
14
        &ett_ipv4_addr_info,
13490
14
        &ett_ipv6_list,
13491
14
        &ett_ipv6_info,
13492
14
        &ett_ipv6_type_addr_list,
13493
14
        &ett_ipv6_addr_info,
13494
14
        &ett_push_button_phy_list,
13495
14
        &ett_push_button_phy_info,
13496
14
        &ett_power_off_info,
13497
14
        &ett_power_change_list,
13498
14
        &ett_power_change_info,
13499
14
        &ett_power_status_list,
13500
14
        &ett_power_status_info,
13501
14
        &ett_l2_local_intf_list,
13502
14
        &ett_l2_neighbor_device_info,
13503
14
        &ett_l2_neighbor_dev_list,
13504
14
        &ett_l2_neighbor_dev_tree,
13505
14
        &ett_supported_service_list,
13506
14
        &ett_searched_service_list,
13507
14
        &ett_ap_operational_bss_list,
13508
14
        &ett_ap_operational_bss_tree,
13509
14
        &ett_ap_operational_bss_intf,
13510
14
        &ett_ap_operational_bss_intf_list,
13511
14
        &ett_ap_operational_bss_intf_tree,
13512
14
        &ett_ieee1905_capabilities_flags,
13513
14
        &ett_ieee1905_unsuccessful_associations,
13514
14
        &ett_assoc_control_list,
13515
14
        &ett_ieee1905_steering_request_flags,
13516
14
        &ett_ieee1905_association_event_flags,
13517
14
        &ett_client_capability_ies,
13518
14
        &ett_radio_basic_class_list,
13519
14
        &ett_ap_radio_basic_cap_class_tree,
13520
14
        &ett_radio_basic_non_op_list,
13521
14
        &ett_ht_cap_flags,
13522
14
        &ett_vht_cap_flags,
13523
14
        &ett_ieee1905_ap_vht_tx_mcs_set,
13524
14
        &ett_ieee1905_ap_vht_rx_mcs_set,
13525
14
        &ett_assoc_clients_bss_list,
13526
14
        &ett_assoc_client_bss_tree,
13527
14
        &ett_assoc_client_list,
13528
14
        &ett_assoc_client_tree,
13529
14
        &ett_channel_preference_class_list,
13530
14
        &ett_ap_channel_preference_class_tree,
13531
14
        &ett_channel_pref_channel_list,
13532
14
        &ett_ieee1905_channel_prefs_flags,
13533
14
        &ett_op_channel_report_class_tree,
13534
14
        &ett_op_channel_report_class_list,
13535
14
        &ett_sta_link_metrics_query_channel_list,
13536
14
        &ett_sta_link_link_mac_addr_list,
13537
14
        &ett_metric_reporting_policy_list,
13538
14
        &ett_metric_reporting_policy_tree,
13539
14
        &ett_metric_policy_flags,
13540
14
        &ett_ap_metric_query_bssid_list,
13541
14
        &ett_ieee1905_ap_metrics_flags,
13542
14
        &ett_sta_list_metrics_bss_list,
13543
14
        &ett_sta_list_metrics_bss_tree,
13544
14
        &ett_sta_wf6_status_report_tid_list,
13545
14
        &ett_sta_wf6_status_report_tid_tree,
13546
14
        &ett_sta_extended_link_metrics_list,
13547
14
        &ett_sta_extended_link_metrics_tree,
13548
14
        &ett_ap_he_mcs_set,
13549
14
        &ett_ap_he_cap_flags,
13550
14
        &ett_ieee1905_ap_he_tx_mcs_set,
13551
14
        &ett_ieee1905_ap_he_rx_mcs_set,
13552
14
        &ett_steering_policy_disallowed_list,
13553
14
        &ett_btm_steering_policy_disallowed_list,
13554
14
        &ett_btm_steering_radio_list,
13555
14
        &ett_radio_restriction_op_class_list,
13556
14
        &ett_radio_restriction_op_class_tree,
13557
14
        &ett_radio_restriction_channel_list,
13558
14
        &ett_radio_restriction_channel_tree,
13559
14
        &ett_unassoc_sta_link_metric_list,
13560
14
        &ett_unassoc_sta_link_metric_tree,
13561
14
        &ett_beacon_metrics_query_list,
13562
14
        &ett_beacon_metrics_query_tree,
13563
14
        &ett_beacon_metrics_query_channel_list,
13564
14
        &ett_beacon_report_subelement_list,
13565
14
        &ett_beacon_report_sub_element_tree,
13566
14
        &ett_beacon_metrics_response_report_list,
13567
14
        &ett_beacon_metrics_response_report_tree,
13568
14
        &ett_ieee1905_beacon_reported_flags,
13569
14
        &ett_channel_scan_rep_policy,
13570
14
        &ett_channel_scan_capa_radio_list,
13571
14
        &ett_channel_scan_capa_radio,
13572
14
        &ett_channel_scan_capa_flags,
13573
14
        &ett_channel_scan_capa_class_list,
13574
14
        &ett_channel_scan_capa_class,
13575
14
        &ett_channel_scan_capa_channels,
13576
14
        &ett_channel_scan_request_flags,
13577
14
        &ett_channel_scan_request_radio_list,
13578
14
        &ett_channel_scan_request_radio,
13579
14
        &ett_channel_scan_request_class_list,
13580
14
        &ett_channel_scan_request_class,
13581
14
        &ett_channel_scan_request_channels,
13582
14
        &ett_channel_scan_result_neigh_list,
13583
14
        &ett_channel_scan_result_neigh_flags,
13584
14
        &ett_ap_wf6_role_list,
13585
14
        &ett_ap_wf6_role_tree,
13586
14
        &ett_ap_wf6_agent_role_flags,
13587
14
        &ett_ap_wf6_supported_flags,
13588
14
        &ett_ap_wf6_mimo_max_flags,
13589
14
        &ett_ap_wf6_gen_flags,
13590
14
        &ett_channel_scan_result_neigh,
13591
14
        &ett_channel_scan_result_flags,
13592
14
        &ett_cac_request_flags,
13593
14
        &ett_cac_request_radio_list,
13594
14
        &ett_cac_request_radio,
13595
14
        &ett_cac_terminate_radio_list,
13596
14
        &ett_cac_terminate_radio,
13597
14
        &ett_cac_completion_radio_list,
13598
14
        &ett_cac_completion_radio,
13599
14
        &ett_cac_completion_radar_list,
13600
14
        &ett_cac_completion_radar,
13601
14
        &ett_cac_status_rpt_avail_list,
13602
14
        &ett_cac_status_rpt_avail_chan,
13603
14
        &ett_cac_status_rpt_non_occupy_list,
13604
14
        &ett_cac_status_rpt_unocc_chan,
13605
14
        &ett_cac_status_rpt_active_cac_list,
13606
14
        &ett_cac_status_rpt_active_cac_tree,
13607
14
        &ett_cac_capabilities_radio_list,
13608
14
        &ett_cac_capabilities_radio_tree,
13609
14
        &ett_cac_capabilities_type_list,
13610
14
        &ett_cac_capabilities_type_tree,
13611
14
        &ett_cac_capabilities_class_list,
13612
14
        &ett_cac_capabilities_class_tree,
13613
14
        &ett_cac_capabilities_channel_list,
13614
14
        &ett_cac_capabilities_channel,
13615
14
        &ett_r2_ap_capa_flags,
13616
14
        &ett_edge_interface_list,
13617
14
        &ett_radio_advanced_capa_flags,
13618
14
        &ett_ap_operational_backhaul_bss_tree,
13619
14
        &ett_ap_operational_backhaul_bss_intf_list,
13620
14
        &ett_default_802_1q_settings_flags,
13621
14
        &ett_traffic_separation_ssid_list,
13622
14
        &ett_traffic_separation_ssid,
13623
14
        &ett_bss_config_report_list,
13624
14
        &ett_bss_config_report_tree,
13625
14
        &ett_bss_config_report_bss_list,
13626
14
        &ett_bss_config_report_bss_tree,
13627
14
        &ett_bss_config_report_flags,
13628
14
        &ett_ethernet_config_policy_list,
13629
14
        &ett_ethernet_config_policy,
13630
14
        &ett_ethernet_config_policy_flags,
13631
14
        &ett_ieee1905_service_prio_rule_flags,
13632
14
        &ett_ieee1905_service_prio_rule_match_flags,
13633
14
        &ett_backhaul_sta_radio_capa_flags,
13634
14
        &ett_assoc_status_notif_bssid_list,
13635
14
        &ett_assoc_status_notif_bssid_tree,
13636
14
        &ett_akm_suite_list,
13637
14
        &ett_akm_suite,
13638
14
        &ett_backhaul_akm_suite_list,
13639
14
        &ett_backhaul_akm_suite,
13640
14
        &ett_fronthaul_akm_suite_list,
13641
14
        &ett_fronthaul_akm_suite,
13642
14
        &ett_1905_encap_dpp_flags,
13643
14
        &ett_1905_encap_dpp_classes,
13644
14
        &ett_1905_encap_dpp_op_class_tree,
13645
14
        &ett_1905_encap_dpp_channel_list,
13646
14
        &ett_ieee1905_dpp_chirp,
13647
14
        &ett_device_inventory_radio_list,
13648
14
        &ett_device_inventory_radio_tree,
13649
14
        &ett_r2_steering_sta_list,
13650
14
        &ett_r2_steering_target_list,
13651
14
        &ett_r2_steering_target,
13652
14
        &ett_mic_group_temporal_key,
13653
14
        &ett_ieee1905_spatial_reuse_color,
13654
14
        &ett_ieee1905_spatial_reuse_hesiga,
13655
14
        &ett_ieee1905_spatial_reuse_rep_color,
13656
14
        &ett_ieee1905_spatial_reuse_rep_hesiga,
13657
14
        &ett_qos_mgmt_policy_mscs_list,
13658
14
        &ett_qos_mgmt_policy_scs_list,
13659
14
        &ett_ieee1905_controller_capa,
13660
14
        &ett_wifi_7_agent_capabilities_flags,
13661
14
        &ett_wifi_7_agent_capabilities_radio_list,
13662
14
        &ett_wifi_7_agent_capabilities_radio,
13663
14
        &ett_wifi_7_agent_capabilities_radio_flags,
13664
14
        &ett_wifi_7_agent_capabilities_radio_record_list,
13665
14
        &ett_wifi_7_agent_capabilities_radio_record,
13666
14
        &ett_wifi_7_agent_capabilities_radio_record_flags,
13667
14
        &ett_agent_ap_mld_configuration_ap_mld_list,
13668
14
        &ett_agent_ap_mld_configuration_ap_mld,
13669
14
        &ett_agent_ap_mld_configuration_ap_mld_flags,
13670
14
        &ett_agent_ap_mld_configuration_ap_mld_flags2,
13671
14
        &ett_agent_ap_mld_configuration_ap_mld_affiliated_ap_list,
13672
14
        &ett_agent_ap_mld_configuration_ap_mld_affiliated_ap,
13673
14
        &ett_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags,
13674
14
        &ett_backhaul_sta_mld_configuration_flags,
13675
14
        &ett_backhaul_sta_mld_configuration_flags2,
13676
14
        &ett_backhaul_sta_mld_configuration_affiliated_bsta_list,
13677
14
        &ett_backhaul_sta_mld_configuration_affiliated_bsta,
13678
14
        &ett_backhaul_sta_mld_configuration_affiliated_bsta_flags,
13679
14
        &ett_associated_sta_mld_configuration_flags,
13680
14
        &ett_associated_sta_mld_configuration_affiliated_sta_list,
13681
14
        &ett_associated_sta_mld_configuration_affiliated_sta,
13682
14
        &ett_eht_operations_radio_list,
13683
14
        &ett_eht_operations_radio,
13684
14
        &ett_eht_operations_radio_bss_list,
13685
14
        &ett_eht_operations_radio_bss,
13686
14
        &ett_eht_operations_radio_bss_flags,
13687
14
        &ett_ieee1905_fragment,
13688
14
        &ett_ieee1905_fragments,
13689
14
    };
13690
13691
14
    static ei_register_info ei[] = {
13692
14
        { &ei_ieee1905_malformed_tlv,
13693
14
          { "ieee1905.tlv.too_short", PI_PROTOCOL, PI_WARN,
13694
14
            "TLV is too short", EXPFILL }},
13695
13696
14
        { &ei_ieee1905_extraneous_tlv_data,
13697
14
          { "ieee1905.tlv.extra_data", PI_PROTOCOL, PI_WARN,
13698
14
             "TLV has extra data or an incorrect length", EXPFILL }},
13699
14
    };
13700
13701
14
    expert_module_t *expert_ieee1905 = NULL;
13702
13703
14
    proto_ieee1905 = proto_register_protocol("IEEE 1905.1a", "ieee1905", "ieee1905");
13704
13705
14
    proto_register_field_array(proto_ieee1905, hf, array_length(hf));
13706
14
    proto_register_subtree_array(ett, array_length(ett));
13707
13708
14
    expert_ieee1905 = expert_register_protocol(proto_ieee1905);
13709
14
    expert_register_field_array(expert_ieee1905, ei, array_length(ei));
13710
13711
14
    reassembly_table_register(&g_ieee1905_reassembly_table,
13712
14
                              &ieee1905_reassembly_table_functions);
13713
13714
14
    ieee1905_handle = register_dissector("ieee1905", dissect_ieee1905, proto_ieee1905);
13715
14
}
13716
13717
void
13718
proto_reg_handoff_ieee1905(void)
13719
14
{
13720
14
    dissector_add_uint("ethertype", ETHERTYPE_IEEE_1905, ieee1905_handle);
13721
13722
14
    eapol_handle = find_dissector("eapol");
13723
14
}
13724
13725
/*
13726
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
13727
 *
13728
 * Local variables:
13729
 * c-basic-offset: 4
13730
 * tab-width: 8
13731
 * indent-tabs-mode: nil
13732
 * End:
13733
 *
13734
 * vi: set shiftwidth=4 tabstop=8 expandtab:
13735
 * :indentSize=4:tabSize=8:noTabs=true:
13736
 */