Coverage Report

Created: 2026-06-30 07:22

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