Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-ieee1905.c
blob1061ebca9f1f2314c8961f5ff4646f294c7bcbcf
1 /* packet-ieee1905.c
2 * Routines for IEEE1905 dissection
4 * Copyright 2017, Richard Sharpe <realrichardsharpe@gmail.com>
5 * Copyright 2017, The Wi-Fi Alliance.
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * SPDX-License-Identifier: GPL-2.0-or-later
15 * https://standards.ieee.org/ieee/1905.1/4995/
17 * IEEE Standard for a Convergent Digital Home Network for Heterogeneous
18 * Technologies
20 * Plus incorporating the changes in the Multi-AP Technical Specification.
23 #include <config.h>
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"
38 static dissector_handle_t ieee1905_handle;
39 static dissector_handle_t eapol_handle;
41 extern value_string_ext ieee80211_reason_code_ext;
42 extern value_string_ext ieee80211_status_code_ext;
43 extern value_string_ext ff_pa_action_codes_ext;
44 extern const value_string wfa_subtype_vals[];
46 void proto_reg_handoff_ieee1905(void);
47 void proto_register_ieee1905(void);
49 /* Reassembly header fields */
50 static int hf_ieee1905_fragments;
51 static int hf_ieee1905_fragment;
52 static int hf_ieee1905_fragment_overlap;
53 static int hf_ieee1905_fragment_overlap_conflicts;
54 static int hf_ieee1905_fragment_multiple_tails;
55 static int hf_ieee1905_fragment_too_long_fragment;
56 static int hf_ieee1905_fragment_error;
57 static int hf_ieee1905_fragment_count;
58 static int hf_ieee1905_fragment_reassembled_in;
59 static int hf_ieee1905_fragment_reassembled_length;
61 /* Normal header fields */
62 static int proto_ieee1905;
63 static int hf_ieee1905_fragment_data;
64 static int hf_ieee1905_message_version;
65 static int hf_ieee1905_message_reserved;
66 static int hf_ieee1905_message_type;
67 static int hf_ieee1905_message_id;
68 static int hf_ieee1905_fragment_id;
69 static int hf_ieee1905_flags;
70 static int hf_ieee1905_last_fragment;
71 static int hf_ieee1905_relay_indicator;
72 static int hf_ieee1905_tlv_types;
73 static int hf_ieee1905_tlv_len;
74 static int hf_ieee1905_tlv_len_reserved;
75 static int hf_ieee1905_tlv_len_length;
76 static int hf_ieee1905_tlv_data;
77 static int hf_ieee1905_al_mac_address_type;
78 static int hf_ieee1905_mac_address_type;
79 static int hf_ieee1905_link_metric_query_type;
80 static int hf_ieee1905_link_metrics_requested;
81 static int hf_ieee1905_responder_al_mac_addr;
82 static int hf_ieee1905_neighbor_al_mac_addr;
83 static int hf_ieee1905_receiving_al_mac_addr;
84 static int hf_ieee1905_bridge_flag;
85 static int hf_ieee1905_packet_errors;
86 static int hf_ieee1905_transmitted_packets;
87 static int hf_ieee1905_mac_throughput_capacity;
88 static int hf_ieee1905_link_availability;
89 static int hf_ieee1905_phy_rate;
90 static int hf_ieee1905_packets_received;
91 static int hf_ieee1905_rssi;
92 static int hf_ieee1905_extra_tlv_data;
93 static int hf_ieee1905_local_interface_count;
94 static int hf_ieee1905_media_type;
95 static int hf_ieee1905_media_spec_info_len;
96 static int hf_ieee1905_media_spec_info;
97 static int hf_ieee1905_media_type_high;
98 static int hf_ieee1905_media_type_low;
99 static int hf_ieee1905_bridging_tuples_cnt;
100 static int hf_ieee1905_bridging_mac_address_cnt;
101 static int hf_ieee1905_bridging_mac_address;
102 static int hf_ieee1905_local_interface_mac;
103 static int hf_ieee1905_non_1905_neighbor_mac;
104 static int hf_ieee1905_neighbor_flags;
105 static int hf_ieee1905_bridges_flag;
106 static int hf_ieee1905_link_metric_result_code;
107 static int hf_ieee1905_vendor_specific_oui;
108 static int hf_ieee1905_vendor_specific_info;
109 static int hf_ieee1905_searched_role;
110 static int hf_ieee1905_supported_role;
111 static int hf_ieee1905_auto_config_freq_band;
112 static int hf_ieee1905_supported_freq_band;
113 static int hf_ieee1905_event_notification_media_types;
114 static int hf_ieee1905_sender_al_id;
115 static int hf_ieee1905_push_button_event_msg_id;
116 static int hf_ieee1905_sender_joining_interface;
117 static int hf_ieee1905_new_device_interface;
118 static int hf_ieee1905_device_al_mac;
119 static int hf_ieee1905_local_intf_oui;
120 static int hf_ieee1905_local_intf_variant;
121 static int hf_ieee1905_local_intf_variant_name;
122 static int hf_ieee1905_local_intf_url_count;
123 static int hf_ieee1905_local_intf_spec_count;
124 static int hf_ieee1905_local_intf_url;
125 static int hf_ieee1905_local_intf_spec;
126 static int hf_ieee1905_dev_id_friendly_name;
127 static int hf_ieee1905_dev_id_manuf_name;
128 static int hf_ieee1905_dev_id_manuf_model;
129 static int hf_ieee1905_control_url;
130 static int hf_ieee1905_ipv4_type_count;
131 static int hf_ieee1905_mac_address;
132 static int hf_ieee1905_ipv4_addr_count;
133 static int hf_ieee1905_addr_type;
134 static int hf_ieee1905_ipv4_addr;
135 static int hf_ieee1905_dhcp_server;
136 static int hf_ieee1905_ipv6_mac_address;
137 static int hf_ieee1905_ipv6_linklocal;
138 static int hf_ieee1905_ipv6_type_count;
139 static int hf_ieee1905_ipv6_addr_count;
140 static int hf_ieee1905_ipv6_addr_type;
141 static int hf_ieee1905_ipv6_addr;
142 static int hf_ieee1905_ipv6_dhcp_server;
143 static int hf_ieee1905_generic_phy_media_types;
144 static int hf_ieee1905_profile_version;
145 static int hf_ieee1905_power_off_intf_count;
146 static int hf_ieee1905_power_change_intf_count;
147 static int hf_ieee1905_power_change_mac_addr;
148 static int hf_ieee1905_power_change_state;
149 static int hf_ieee1905_power_status_intf_count;
150 static int hf_ieee1905_power_status_mac_addr;
151 static int hf_ieee1905_power_status_state;
152 static int hf_ieee1905_l2_neighbor_intf_count;
153 static int hf_ieee1905_l2_local_intf_mac_addr;
154 static int hf_ieee1905_l2_neighbor_dev_count;
155 static int hf_ieee1905_l2_neighbor_mac_addr;
156 static int hf_ieee1905_l2_behind_mac_addr_count;
157 static int hf_ieee1905_l2_behind_mac_addr;
158 static int hf_ieee1905_supported_service_count;
159 static int hf_ieee1905_supported_service;
160 static int hf_ieee1905_searched_service_count;
161 static int hf_ieee1905_searched_service;
162 static int hf_ieee1905_ap_radio_identifier;
163 static int hf_ieee1905_operatonal_bss_radio_count;
164 static int hf_ieee1905_ap_operational_intf_count;
165 static int hf_ieee1905_ap_local_intf_mac_addr;
166 static int hf_ieee1905_ap_local_intf_ssid_len;
167 static int hf_ieee1905_ap_local_intf_ssid;
168 static int hf_ieee1905_ap_capabilities_flags;
169 static int hf_ieee1905_rpt_unsuccessful_associations;
170 static int hf_ieee1905_unassoc_sta_metrics_oper_flag;
171 static int hf_ieee1905_unassoc_sta_metrics_non_oper_flag;
172 static int hf_ieee1905_agent_init_steering;
173 static int hf_ieee1905_rpt_unsuccessful_assoc_report;
174 static int hf_ieee1905_higher_layer_protocol;
175 static int hf_ieee1905_higher_layer_data;
176 static int hf_ieee1905_assoc_backhaul_station_mac;
177 static int hf_ieee1905_backhaul_target_bssid;
178 static int hf_ieee1905_backhaul_steering_status;
179 static int hf_ieee1905_backhaul_operating_class;
180 static int hf_ieee1905_backhaul_channel_number;
181 static int hf_ieee1905_client_assoc_bssid;
182 static int hf_ieee1905_association_control;
183 static int hf_ieee1905_association_control_validity;
184 static int hf_ieee1905_client_assoc_sta_count;
185 static int hf_ieee1905_client_assoc_mac_addr;
186 static int hf_ieee1905_btm_reporter_bssid;
187 static int hf_ieee1905_btm_sta_mac_addr;
188 static int hf_ieee1905_btm_report_status;
189 static int hf_ieee1905_btm_report_bssid;
190 static int hf_ieee1905_source_bss_bssid;
191 static int hf_ieee1905_steering_request_flags;
192 static int hf_ieee1905_steering_req_op_window;
193 static int hf_ieee1905_steering_request_mode_flag;
194 static int hf_ieee1905_btm_disassoc_imminent_flag;
195 static int hf_ieee1905_btm_abridged_flag;
196 static int hf_ieee1905_steering_req_reserved;
197 static int hf_ieee1905_steering_btm_disass_timer;
198 static int hf_ieee1905_steering_req_sta_count;
199 static int hf_ieee1905_steering_req_sta_mac;
200 static int hf_ieee1905_steering_req_target_bssid_count;
201 static int hf_ieee1905_steering_req_target_bssid;
202 static int hf_ieee1905_steering_req_oper_class;
203 static int hf_ieee1905_steering_req_target_channel;
204 static int hf_ieee1905_client_bssid;
205 static int hf_ieee1905_client_mac_addr;
206 static int hf_ieee1905_client_capability_result;
207 static int hf_ieee1905_client_capability_frame;
208 static int hf_ieee1905_association_flag;
209 static int hf_ieee1905_association_client_mac_addr;
210 static int hf_ieee1905_association_agent_bssid;
211 static int hf_ieee1905_association_event_flags;
212 static int hf_ieee1905_ap_radio_max_bss;
213 static int hf_ieee1905_ap_radio_classes;
214 static int hf_ieee1905_ap_radio_class;
215 static int hf_ieee1905_ap_radio_eirp;
216 static int hf_ieee1905_ap_radio_non_op_count;
217 static int hf_ieee1905_radio_basic_non_op_channel;
218 static int hf_ieee1905_max_supported_tx_streams;
219 static int hf_ieee1905_max_supported_rx_streams;
220 static int hf_ieee1905_short_gi_20mhz_flag;
221 static int hf_ieee1905_short_gi_40mhz_flag;
222 static int hf_ieee1905_ht_support_40mhz_flag;
223 static int hf_ieee1905_ap_ht_capabilities_radio_id;
224 static int hf_ieee1905_ht_cap_flags;
225 static int hf_ieee1905_vht_max_supported_tx_streams;
226 static int hf_ieee1905_vht_max_supported_rx_streams;
227 static int hf_ieee1905_short_gi_80mhz_flag;
228 static int hf_ieee1905_short_gi_160mhz_flag;
229 static int hf_ieee1905_vht_support_80plus_mhz_flag;
230 static int hf_ieee1905_vht_support_160_mhz_flag;
231 static int hf_ieee1905_su_beamformer_capable_flag;
232 static int hf_ieee1905_mu_beamformer_capable_flag;
233 static int hf_ieee1905_ap_vht_capabilities_radio_id;
234 static int hf_ieee1905_vht_cap_flags;
235 static int hf_ieee1905_assoc_clients_bss_count;
236 static int hf_ieee1905_assoc_bssid;
237 static int hf_ieee1905_bss_client_count;
238 static int hf_ieee1905_bss_client_mac;
239 static int hf_ieee1905_bss_client_last_assoc;
240 static int hf_ieee1905_ap_vht_supported_vht_tx_mcs;
241 static int hf_ieee1905_ap_vht_supported_vht_rx_mcs;
242 static int hf_ieee1905_ap_vht_tx_mcs_map_1ss;
243 static int hf_ieee1905_ap_vht_tx_mcs_map_2ss;
244 static int hf_ieee1905_ap_vht_tx_mcs_map_3ss;
245 static int hf_ieee1905_ap_vht_tx_mcs_map_4ss;
246 static int hf_ieee1905_ap_vht_tx_mcs_map_5ss;
247 static int hf_ieee1905_ap_vht_tx_mcs_map_6ss;
248 static int hf_ieee1905_ap_vht_tx_mcs_map_7ss;
249 static int hf_ieee1905_ap_vht_tx_mcs_map_8ss;
250 static int hf_ieee1905_ap_vht_rx_mcs_map_1ss;
251 static int hf_ieee1905_ap_vht_rx_mcs_map_2ss;
252 static int hf_ieee1905_ap_vht_rx_mcs_map_3ss;
253 static int hf_ieee1905_ap_vht_rx_mcs_map_4ss;
254 static int hf_ieee1905_ap_vht_rx_mcs_map_5ss;
255 static int hf_ieee1905_ap_vht_rx_mcs_map_6ss;
256 static int hf_ieee1905_ap_vht_rx_mcs_map_7ss;
257 static int hf_ieee1905_ap_vht_rx_mcs_map_8ss;
258 static int hf_ieee1905_channel_pref_preference;
259 static int hf_ieee1905_channel_pref_reason;
260 static int hf_ieee1905_channel_preference_radio_id;
261 static int hf_ieee1905_channel_preference_class_count;
262 static int hf_ieee1905_channel_pref_class;
263 static int hf_ieee1905_channel_pref_channel_count;
264 static int hf_ieee1905_channel_pref_channel;
265 static int hf_ieee1905_channel_prefs_flags;
266 static int hf_ieee1905_trans_power_limit_radio_id;
267 static int hf_ieee1905_trans_power_limit_eirp;
268 static int hf_ieee1905_channel_select_resp_radio_id;
269 static int hf_ieee1905_radio_metrics_radio_id;
270 static int hf_ieee1905_channel_select_resp_code;
271 static int hf_ieee1905_op_channel_report_radio_id;
272 static int hf_ieee1905_op_channel_report_classes;
273 static int hf_ieee1905_op_channel_class;
274 static int hf_ieee1905_op_channel_number;
275 static int hf_ieee1905_op_channel_eirp;
276 static int hf_ieee1905_ap_he_cap_radio_id;
277 static int hf_ieee1905_ap_he_cap_mcs_length;
278 static int hf_ieee1905_ap_he_cap_tx_mcs_le_80_mhz;
279 static int hf_ieee1905_ap_he_tx_mcs_map_1ss;
280 static int hf_ieee1905_ap_he_tx_mcs_map_2ss;
281 static int hf_ieee1905_ap_he_tx_mcs_map_3ss;
282 static int hf_ieee1905_ap_he_tx_mcs_map_4ss;
283 static int hf_ieee1905_ap_he_tx_mcs_map_5ss;
284 static int hf_ieee1905_ap_he_tx_mcs_map_6ss;
285 static int hf_ieee1905_ap_he_tx_mcs_map_7ss;
286 static int hf_ieee1905_ap_he_tx_mcs_map_8ss;
287 static int hf_ieee1905_ap_he_cap_rx_mcs_le_80_mhz;
288 static int hf_ieee1905_ap_he_rx_mcs_map_1ss;
289 static int hf_ieee1905_ap_he_rx_mcs_map_2ss;
290 static int hf_ieee1905_ap_he_rx_mcs_map_3ss;
291 static int hf_ieee1905_ap_he_rx_mcs_map_4ss;
292 static int hf_ieee1905_ap_he_rx_mcs_map_5ss;
293 static int hf_ieee1905_ap_he_rx_mcs_map_6ss;
294 static int hf_ieee1905_ap_he_rx_mcs_map_7ss;
295 static int hf_ieee1905_ap_he_rx_mcs_map_8ss;
296 static int hf_ieee1905_ap_he_cap_tx_mcs_160_mhz;
297 static int hf_ieee1905_ap_he_cap_rx_mcs_160_mhz;
298 static int hf_ieee1905_ap_he_cap_tx_mcs_80p80_mhz;
299 static int hf_ieee1905_ap_he_cap_rx_mcs_80p80_mhz;
300 static int hf_ieee1905_unassoc_link_metrics_query_mac;
301 static int hf_ieee1905_unassoc_sta_link_metrics_class;
302 static int hf_ieee1905_ap_metrics_reporting_interval;
303 static int hf_ieee1905_metric_reporting_policy_radio_id;
304 static int hf_ieee1905_metric_reporting_radio_count;
305 static int hf_ieee1905_metric_rcpi_threshold;
306 static int hf_ieee1905_metric_reporting_rcpi_hysteresis;
307 static int hf_ieee1905_metrics_policy_flags;
308 static int hf_ieee1905_metrics_channel_util_threshold;
309 static int hf_ieee1905_assoc_sta_traffic_stats_inclusion;
310 static int hf_ieee1905_assoc_sta_link_metrics_inclusion;
311 static int hf_ieee1905_assoc_wf6_status_policy_inclusion;
312 static int hf_ieee1905_reporting_policy_flags_reserved;
313 static int hf_ieee1905_ap_metric_query_bssid_cnt;
314 static int hf_ieee1905_ap_metric_query_bssid;
315 static int hf_ieee1905_sta_mac_address_type;
316 static int hf_ieee1905_assoc_sta_mac_addr;
317 static int hf_ieee1905_assoc_sta_bssid_count;
318 static int hf_ieee1905_assoc_sta_link_metrics_bssid;
319 static int hf_ieee1905_assoc_sta_link_metrics_time_delta;
320 static int hf_ieee1905_assoc_sta_link_metrics_dwn_rate;
321 static int hf_ieee1905_assoc_sta_link_metrics_up_rate;
322 static int hf_ieee1905_assoc_sta_link_metrics_rcpi;
323 static int hf_ieee1905_assoc_wf6_sta_mac_addr;
324 static int hf_ieee1905_assoc_wf6_sta_tid_count;
325 static int hf_ieee1905_assoc_wf6_sta_tid;
326 static int hf_ieee1905_assoc_wf6_sta_queue_size;
327 static int hf_ieee1905_assoc_sta_ext_link_metrics_mac_addr;
328 static int hf_ieee1905_assoc_sta_ext_link_metrics_count;
329 static int hf_ieee1905_assoc_sta_extended_metrics_bssid;
330 static int hf_ieee1905_assoc_sta_extended_metrics_lddlr;
331 static int hf_ieee1905_assoc_sta_extended_metrics_ldulr;
332 static int hf_ieee1905_assoc_sta_extended_metrics_ur;
333 static int hf_ieee1905_assoc_sta_extended_metrics_tr;
334 static int hf_ieee1905_unassoc_sta_link_channel_count;
335 static int hf_ieee1905_unassoc_metrics_channel;
336 static int hf_ieee1905_unassoc_metrics_mac_count;
337 static int hf_ieee1905_he_max_supported_tx_streams;
338 static int hf_ieee1905_he_max_supported_rx_streams;
339 static int hf_ieee1905_he_support_80plus_mhz_flag;
340 static int hf_ieee1905_he_support_160mhz_flag;
341 static int hf_ieee1905_he_su_beamformer_capable_flag;
342 static int hf_ieee1905_he_mu_beamformer_capable_flag;
343 static int hf_ieee1905_ul_mu_mimo_capable_flag;
344 static int hf_ieee1905_ul_mu_mimo_ofdma_capable_flag;
345 static int hf_ieee1905_dl_mu_mimo_ofdma_capable_flag;
346 static int hf_ieee1905_ul_ofdma_capable;
347 static int hf_ieee1905_dl_ofdma_capable;
348 static int hf_ieee1905_he_cap_flags;
349 static int hf_ieee1905_steering_policy_local_disallowed_count;
350 static int hf_ieee1905_steering_disallowed_mac_addr;
351 static int hf_ieee1905_btm_steering_disallowed_count;
352 static int hf_ieee1905_btm_steering_disallowed_mac_addr;
353 static int hf_ieee1905_steering_policy_radio_count;
354 static int hf_ieee1905_steering_policy_radio_id;
355 static int hf_ieee1905_steering_policy_policy;
356 static int hf_ieee1905_steering_policy_util;
357 static int hf_ieee1905_steering_policy_rcpi_threshold;
358 static int hf_ieee1905_radio_restriction_radio_id;
359 static int hf_ieee1905_radio_restriction_op_class_count;
360 static int hf_ieee1905_radio_restriction_op_class;
361 static int hf_ieee1905_radio_restriction_chan_count;
362 static int hf_ieee1905_radio_restriction_channel;
363 static int hf_ieee1905_radio_restriction_min_separation;
364 static int hf_ieee1905_ap_metrics_agent_bssid;
365 static int hf_ieee1905_include_estimated_spi_ac_eq_be;
366 static int hf_ieee1905_include_estimated_spi_ac_eq_bk;
367 static int hf_ieee1905_include_estimated_spi_ac_eq_vo;
368 static int hf_ieee1905_include_estimated_spi_ac_eq_vi;
369 static int hf_ieee1905_ap_metrics_channel_utilization;
370 static int hf_ieee1905_ap_metrics_sta_count;
371 static int hf_ieee1905_ap_metrics_flags;
372 static int hf_ieee1905_ap_metrics_service_params_be;
373 static int hf_ieee1905_ap_metrics_service_params_bk;
374 static int hf_ieee1905_ap_metrics_service_params_vo;
375 static int hf_ieee1905_ap_metrics_service_params_vi;
376 static int hf_ieee1905_unassoc_sta_link_metric_op_class;
377 static int hf_ieee1905_unassoc_sta_link_metric_sta_count;
378 static int hf_ieee1905_unassoc_link_metric_mac_addr;
379 static int hf_ieee1905_unassoc_link_metric_channel;
380 static int hf_ieee1905_unassoc_link_metric_delta;
381 static int hf_ieee1905_unassoc_link_metric_uplink_rcpi;
382 static int hf_ieee1905_beacon_metrics_query_mac_addr;
383 static int hf_ieee1905_beacon_metrics_query_op_class;
384 static int hf_ieee1905_beacon_metrics_query_channel;
385 static int hf_ieee1905_beacon_metrics_query_bssid;
386 static int hf_ieee1905_beacon_metrics_query_detail;
387 static int hf_ieee1905_beacon_metrics_query_ssid_len;
388 static int hf_ieee1905_beacon_metrics_query_ssid;
389 static int hf_ieee1905_beacon_metrics_channel_count;
390 static int hf_ieee1905_beacon_metrics_report_len;
391 static int hf_ieee1905_beacon_metrics_report_op_class;
392 static int hf_ieee1905_beacon_metrics_report_channel_id;
393 static int hf_ieee1905_measurement_report;
394 static int hf_ieee1905_beacon_metrics_response_mac_addr;
395 static int hf_ieee1905_beacon_metrics_response_reserved;
396 static int hf_ieee1905_beacon_metrics_response_meas_num;
397 static int hf_ieee1905_assoc_sta_traffic_stats_mac_addr;
398 static int hf_ieee1905_assoc_sta_traffic_stats_bytes_sent;
399 static int hf_ieee1905_assoc_sta_traffic_stats_bytes_rcvd;
400 static int hf_ieee1905_assoc_sta_traffic_stats_packets_sent;
401 static int hf_ieee1905_assoc_sta_traffic_stats_packets_rcvd;
402 static int hf_ieee1905_assoc_sta_traffic_stats_tx_pkt_errs;
403 static int hf_ieee1905_assoc_sta_traffic_stats_rx_pkt_errs;
404 static int hf_ieee1905_assoc_sta_traffic_stats_retrans_count;
405 static int hf_ieee1905_error_code_value;
406 static int hf_ieee1905_error_code_mac_addr;
407 static int hf_ieee1905_channel_scan_rep_policy;
408 static int hf_ieee1905_channel_scan_pol_report;
409 static int hf_ieee1905_channel_scan_pol_reserved;
410 static int hf_ieee1905_channel_scan_capabilities_radio_num;
411 static int hf_ieee1905_channel_scan_capa_radio_id;
412 static int hf_ieee1905_channel_scan_capa_flags;
413 static int hf_ieee1905_channel_scan_capa_flags_on_boot_only;
414 static int hf_ieee1905_channel_scan_capa_flags_scan_impact;
415 static int hf_ieee1905_channel_scan_capa_flags_reserved;
416 static int hf_ieee1905_channel_scan_capa_min_scan_interval;
417 static int hf_ieee1905_channel_scan_capa_class_num;
418 static int hf_ieee1905_channel_scan_capa_oper_class;
419 static int hf_ieee1905_channel_scan_capa_oper_class_chan_cnt;
420 static int hf_ieee1905_channel_scan_capa_channel;
421 static int hf_ieee1905_channel_scan_request_flags;
422 static int hf_ieee1905_channel_scan_request_flags_fresh_scan;
423 static int hf_ieee1905_channel_scan_request_flags_reserved;
424 static int hf_ieee1905_channel_scan_request_radio_num;
425 static int hf_ieee1905_channel_scan_request_radio_id;
426 static int hf_ieee1905_channel_scan_request_class_num;
427 static int hf_ieee1905_channel_scan_request_oper_class;
428 static int hf_ieee1905_channel_scan_request_oper_class_chan_cnt;
429 static int hf_ieee1905_channel_scan_request_channel;
430 static int hf_ieee1905_channel_scan_result_radio_id;
431 static int hf_ieee1905_channel_scan_result_oper_class;
432 static int hf_ieee1905_channel_scan_result_channel;
433 static int hf_ieee1905_channel_scan_result_status;
434 static int hf_ieee1905_channel_scan_result_timestamp_len;
435 static int hf_ieee1905_channel_scan_result_timestamp_string;
436 static int hf_ieee1905_channel_scan_result_utilization;
437 static int hf_ieee1905_channel_scan_result_noise;
438 static int hf_ieee1905_radio_metrics_noise;
439 static int hf_ieee1905_radio_metrics_transmit;
440 static int hf_ieee1905_radio_metrics_receive_self;
441 static int hf_ieee1905_radio_metrics_receive_other;
442 static int hf_ieee1905_ap_extended_metrics_bssid;
443 static int hf_ieee1905_ap_extended_metrics_unicast_sent;
444 static int hf_ieee1905_ap_extended_metrics_unicast_rcvd;
445 static int hf_ieee1905_ap_extended_metrics_multicast_sent;
446 static int hf_ieee1905_ap_extended_metrics_multicast_rcvd;
447 static int hf_ieee1905_ap_extended_metrics_bcast_sent;
448 static int hf_ieee1905_ap_extended_metrics_bcast_rcvd;
449 static int hf_ieee1905_channel_scan_result_neigh_num;
450 static int hf_ieee1905_channel_scan_result_bssid;
451 static int hf_ieee1905_channel_scan_result_ssid_len;
452 static int hf_ieee1905_channel_scan_result_ssid;
453 static int hf_ieee1905_channel_scan_result_sig_level;
454 static int hf_ieee1905_channel_scan_result_bw_len;
455 static int hf_ieee1905_channel_scan_result_bw;
456 static int hf_ieee1905_channel_scan_result_neigh_flags;
457 static int hf_ieee1905_channel_scan_result_load_element_present;
458 static int hf_ieee1905_channel_scan_result_neigh_reserved;
459 static int hf_ieee1905_channel_scan_result_util;
460 static int hf_ieee1905_channel_scan_result_sta_count;
461 static int hf_ieee1905_channel_scan_result_scan_duration;
462 static int hf_ieee1905_channel_scan_result_flags;
463 static int hf_ieee1905_channel_scan_result_scan_type;
464 static int hf_ieee1905_channel_scan_result_scan_flags_reserved;
465 static int hf_ieee1905_timestamp_length;
466 static int hf_ieee1905_timestamp_string;
467 static int hf_ieee1905_1905_layer_sec_capa_onboarding;
468 static int hf_ieee1905_1905_layer_sec_capa_mic_sup;
469 static int hf_ieee1905_1905_layer_sec_capa_enc_alg_sup;
470 static int hf_ieee1905_ap_wf6_capa_radio_id;
471 static int hf_ieee1905_ap_wf6_role_count;
472 static int hf_ieee1905_ap_wf6_agent_role_flags;
473 static int hf_ieee1905_ap_wf6_capa_agents_role;
474 static int hf_ieee1905_ap_wf6_capa_he_160_support;
475 static int hf_ieee1905_ap_wf6_capa_he_80p80_support;
476 static int hf_ieee1905_ap_wf6_capa_reserved;
477 static int hf_ieee1905_ap_wf6_he_supported_flags;
478 static int hf_ieee1905_ap_wf6_su_beamformer;
479 static int hf_ieee1905_ap_wf6_su_beamformee;
480 static int hf_ieee1905_ap_wf6_mu_beamformer_status;
481 static int hf_ieee1905_ap_wf6_beamformee_sts_le_80mhz;
482 static int hf_ieee1905_ap_wf6_beamformee_sts_gt_80mhz;
483 static int hf_ieee1905_ap_wf6_ul_mu_mimo;
484 static int hf_ieee1905_ap_wf6_ul_ofdma;
485 static int hf_ieee1905_ap_wf6_dl_ofdma;
486 static int hf_ieee1905_ap_wf6_mimo_max_flags;
487 static int hf_ieee1905_ap_wf6_max_ap_dl_mu_mimo_tx;
488 static int hf_ieee1905_ap_wf6_max_ap_ul_mu_mimi_rx;
489 static int hf_ieee1905_ap_wf6_dl_ofdma_max_tx;
490 static int hf_ieee1905_ap_wf6_ul_ofdma_max_rx;
491 static int hf_ieee1905_ap_wf6_gen_flags;
492 static int hf_ieee1905_ap_wf6_gen_rts;
493 static int hf_ieee1905_ap_wf6_gen_mu_rts;
494 static int hf_ieee1905_ap_wf6_gen_multi_bssid;
495 static int hf_ieee1905_ap_wf6_gen_mu_edca;
496 static int hf_ieee1905_ap_wf6_gen_twt_requester;
497 static int hf_ieee1905_ap_wf6_gen_twt_responder;
498 static int hf_ieee1905_ap_wf6_gen_reserved;
499 static int hf_ieee1905_agent_list_bytes;
500 static int hf_ieee1905_mic_group_temporal_key_id;
501 static int hf_ieee1905_mic_integrity_transmission_counter;
502 static int hf_ieee1905_mic_source_la_mac_id;
503 static int hf_ieee1905_mic_length;
504 static int hf_ieee1905_mic_bytes;
505 static int hf_ieee1905_1905_gtk_key_id;
506 static int hf_ieee1905_mic_version;
507 static int hf_ieee1905_mic_reserved;
508 static int hf_ieee1905_encrypted_dest_al_mac_addr;
509 static int hf_ieee1905_encrypted_enc_transmission_count;
510 static int hf_ieee1905_encrypted_source_la_mac_id;
511 static int hf_ieee1905_encrypted_enc_output_field_len;
512 static int hf_ieee1905_encrypted_enc_output_field;
513 static int hf_ieee1905_cac_request_radio_count;
514 static int hf_ieee1905_cac_request_radio_id;
515 static int hf_ieee1905_cac_request_op_class;
516 static int hf_ieee1905_cac_request_channel;
517 static int hf_ieee1905_cac_request_flags;
518 static int hf_ieee1905_cac_request_method;
519 static int hf_ieee1905_cac_request_completion_action;
520 static int hf_ieee1905_cac_request_completion_unsuccess;
521 static int hf_ieee1905_cac_request_reserved;
522 static int hf_ieee1905_cac_termination_radio_count;
523 static int hf_ieee1905_cac_terminate_radio_id;
524 static int hf_ieee1905_cac_terminate_op_class;
525 static int hf_ieee1905_cac_terminate_channel;
526 static int hf_ieee1905_cac_completion_rep_radio_count;
527 static int hf_ieee1905_cac_completion_radio_id;
528 static int hf_ieee1905_cac_completion_op_class;
529 static int hf_ieee1905_cac_completion_channel;
530 static int hf_ieee1905_cac_completion_status;
531 static int hf_ieee1905_cac_completion_radar_count;
532 static int hf_ieee1905_cac_comp_radar_op_class;
533 static int hf_ieee1905_cac_comp_radar_channel;
534 static int hf_ieee1905_cac_status_rpt_active_chan;
535 static int hf_ieee1905_cac_status_rpt_avail_op_class;
536 static int hf_ieee1905_cac_status_rpt_avail_channel;
537 static int hf_ieee1905_cac_status_rpt_avail_minutes;
538 static int hf_ieee1905_cac_status_rpt_non_occ_cnt;
539 static int hf_ieee1905_cac_status_rpt_non_occ_op_class;
540 static int hf_ieee1905_cac_status_rpt_non_occ_channel;
541 static int hf_ieee1905_cac_status_rpt_non_occ_seconds;
542 static int hf_ieee1905_cac_status_rpt_active_cac_cnt;
543 static int hf_ieee1905_cac_status_rpt_active_cac_op_class;
544 static int hf_ieee1905_cac_status_rpt_active_cac_channel;
545 static int hf_ieee1905_cac_status_rpt_active_cac_seconds;
546 static int hf_ieee1905_cac_capa_country_code;
547 static int hf_ieee1905_cac_capa_radio_cnt;
548 static int hf_ieee1905_cac_capabilities_radio_id;
549 static int hf_ieee1905_cac_capabilities_types_num;
550 static int hf_ieee1905_cac_capabilities_cac_mode;
551 static int hf_ieee1905_cac_capabilities_cac_seconds;
552 static int hf_ieee1905_cac_capabilities_op_class_num;
553 static int hf_ieee1905_cac_capabilities_op_class;
554 static int hf_ieee1905_cac_capabilities_channel_cnt;
555 static int hf_ieee1905_cac_capabillity_channel;
556 static int hf_ieee1905_multi_ap_version;
557 static int hf_ieee1905_max_total_serv_prio_rules;
558 static int hf_ieee1905_r2_ap_capa_reserved;
559 static int hf_ieee1905_r2_ap_capa_flags;
560 static int hf_ieee1905_byte_counter_units;
561 static int hf_ieee1905_ctag_service_prio_flag;
562 static int hf_ieee1905_dpp_onboarding_flag;
563 static int hf_ieee1905_traffic_separation_flag;
564 static int hf_ieee1905_r2_ap_capa_flags_reserved;
565 static int hf_ieee1905_max_vid_count;
566 static int hf_ieee1905_default_802_1q_settings_primary_vlan;
567 static int hf_ieee1905_default_802_1q_settings_flags;
568 static int hf_ieee1905_default_802_1q_settings_default_pcp;
569 static int hf_ieee1905_default_802_1q_settings_reserved;
570 static int hf_ieee1905_ap_radio_advanced_capa_radio_id;
571 static int hf_ieee1905_radio_advanced_capa_flags;
572 static int hf_ieee1905_traffic_separation_policy_num_ssids;
573 static int hf_ieee1905_traffic_separation_policy_ssid_len;
574 static int hf_ieee1905_traffic_separation_policy_ssid;
575 static int hf_ieee1905_traffic_separation_policy_vlanid;
576 static int hf_ieee1905_bss_config_report_radio_count;
577 static int hf_ieee1905_bss_config_report_radio_id;
578 static int hf_ieee1905_bss_config_report_flags;
579 static int hf_ieee1905_bss_config_report_backhaul_bss;
580 static int hf_ieee1905_bss_config_report_fronthaul_bss;
581 static int hf_ieee1905_bss_config_report_r1_disallowed_status;
582 static int hf_ieee1905_bss_config_report_r2_disallowed_status;
583 static int hf_ieee1905_bss_config_report_multiple_bssid_set;
584 static int hf_ieee1905_bss_config_report_transmitted_bssid;
585 static int hf_ieee1905_bss_config_report_reserved;
586 static int hf_ieee1905_bss_config_report_res;
587 static int hf_ieee1905_bss_config_report_bss_cnt;
588 static int hf_ieee1902_bss_config_report_mac;
589 static int hf_ieee1902_bss_config_report_ssid_len;
590 static int hf_ieee1905_bss_config_report_ssid;
591 static int hf_ieee1905_bssid_tlv_bssid;
592 static int hf_ieee1905_service_prio_rule_id;
593 static int hf_ieee1905_service_prio_rule_flags;
594 static int hf_ieee1905_service_prio_rule_add_remove_filter_bit;
595 static int hf_ieee1905_service_prio_rule_flags_reserved;
596 static int hf_ieee1905_service_prio_match_flags;
597 static int hf_ieee1905_service_prio_rule_precedence;
598 static int hf_ieee1905_service_prio_rule_output;
599 static int hf_ieee1905_service_prio_rule_match_always;
600 static int hf_ieee1905_service_prio_rule_match_reserved;
601 static int hf_ieee1905_service_prio_rule_match_up_in_qos;
602 static int hf_ieee1905_service_prio_rule_match_up_control_match;
603 static int hf_ieee1905_service_prio_rule_match_source_mac;
604 static int hf_ieee1905_service_prio_rule_match_source_mac_sense;
605 static int hf_ieee1905_service_prio_rule_match_dest_mac;
606 static int hf_ieee1905_service_prio_rule_match_dest_mac_sense;
607 static int hf_ieee1905_service_prio_rule_up_control;
608 static int hf_ieee1905_service_prio_rule_source_mac;
609 static int hf_ieee1905_service_prio_rule_dest_mac;
610 static int hf_ieee1905_dscp_mapping_table_val;
611 static int hf_ieee1905_r2_error_reason_code;
612 static int hf_ieee1905_r2_error_bssid;
613 static int hf_ieee1905_ap_radio_advance_capa_backhaul_bss_traffic_sep;
614 static int hf_ieee1905_ap_radio_advance_capa_combined_r1_r2_backhaul;
615 static int hf_ieee1905_ap_radio_advance_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_dissasoc_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;
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;
1094 static int ett_ieee1905_fragment;
1095 static int ett_ieee1905_fragments;
1097 static expert_field ei_ieee1905_malformed_tlv;
1098 static expert_field ei_ieee1905_extraneous_tlv_data;
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
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 }
1264 static value_string_ext ieee1905_message_type_vals_ext = VALUE_STRING_EXT_INIT(ieee1905_message_type_vals);
1266 #define EOM_TLV 0x00
1267 #define AL_MAC_ADDRESS_TYPE_TLV 1
1268 #define MAC_ADDRESS_TYPE_TLV 2
1269 #define DEVICE_INFORMATION_TYPE_TLV 3
1270 #define DEVICE_BRIDGING_CAPABILITY_TLV 4
1271 #define NON_1905_NEIGHBOR_DEVICE_LIST_TLV 6
1272 #define NEIGHBOR_DEVICE_TLV 7
1273 #define LINK_METRIC_QUERY_TLV 8
1274 #define TRANSMITTER_LINK_METRIC_TLV 9
1275 #define RECEIVER_LINK_METRIC_TLV 10
1276 #define VENDOR_SPECIFIC_TLV 11
1277 #define LINK_METRIC_RESULT_CODE_TLV 12
1278 #define SEARCHED_ROLE_TLV 13
1279 #define AUTO_CONFIG_FREQ_BAND_TLV 14
1280 #define SUPPORTED_ROLE_TLV 15
1281 #define SUPPORTED_FREQ_BAND_TLV 16
1282 #define WSC_TLV 17
1283 #define PUSH_BUTTON_EVENT_NOTIFICATION_TLV 18
1284 #define PUSH_BUTTON_JOIN_NOTIFICATION_TLV 19
1285 #define GENERIC_PHY_DEVICE_INFORMATION_TLV 20
1286 #define DEVICE_IDENTIFICATION_TYPE_TLV 21
1287 #define CONTROL_URL_TYPE_TLV 22
1288 #define IPV4_TYPE_TLV 23
1289 #define IPV6_TYPE_TLV 24
1290 #define PUSH_BUTTON_EVENT_TYPE_NOTIFICATION_TLV 25
1291 #define IEEE1905_PROFILE_VERSION_TLV 26
1292 #define POWER_OFF_INTERFACE_TLV 27
1293 #define INTERFACE_POWER_CHANGE_INFORMATION_TLV 28
1294 #define INTERFACE_POWER_CHANGE_STATUS_TLV 29
1295 #define L2_NEIGHBOR_DEVICE_TLV 30
1296 #define SUPPORTED_SERVICE_TLV 0x80
1297 #define SEARCHED_SERVICE_TLV 0x81
1298 #define AP_RADIO_IDENTIFIER_TLV 0x82
1299 #define AP_OPERATIONAL_BSS_TLV 0x83
1300 #define ASSOCIATED_CLIENTS_TLV 0x84
1301 #define AP_RADIO_BASIC_CAPABILITIES_TLV 0x85
1302 #define AP_HT_CAPABILITIES_TLV 0x86
1303 #define AP_VHT_CAPABILITIES_TLV 0x87
1304 #define AP_HE_CAPABILITIES_TLV 0x88
1305 #define STEERING_POLICY_TLV 0x89
1306 #define METRIC_REPORTING_POLICY_TLV 0x8A
1307 #define CHANNEL_PREFERENCE_TLV 0x8B
1308 #define RADIO_OPERATION_RESTRICTION_TLV 0x8C
1309 #define TRANSMIT_POWER_LIMIT_TLV 0x8D
1310 #define CHANNEL_SELECTION_RESPONSE_TLV 0x8E
1311 #define OPERATING_CHANNEL_REPORT_TLV 0x8F
1312 #define CLIENT_INFO_TLV 0x90
1313 #define CLIENT_CAPABILITY_REPORT_TLV 0x91
1314 #define CLIENT_ASSOCIATION_EVENT_TLV 0x92
1315 #define AP_METRIC_QUERY_TLV 0x93
1316 #define AP_METRICS_TLV 0x94
1317 #define STA_MAC_ADDRESS_TYPE_TLV 0x95
1318 #define ASSOCIATED_STA_LINK_METRICS_TLV 0x96
1319 #define UNASSOCIATED_STA_LINK_METRICS_QUERY_TLV 0x97
1320 #define UNASSOCIATED_STA_LINK_METRICS_RESPONSE_TLV 0x98
1321 #define BEACON_METRICS_QUERY_TLV 0x99
1322 #define BEACON_METRICS_RESPONSE_TLV 0x9A
1323 #define STEERING_REQUEST_TLV 0x9B
1324 #define STEERING_BTM_REPORT_TLV 0x9C
1325 #define CLIENT_ASSOCIATION_CONTROL_REQUEST_TLV 0x9D
1326 #define BACKHAUL_STEERING_REQUEST_TLV 0x9E
1327 #define BACKHAUL_STEERING_RESPONSE_TLV 0x9F
1328 #define HIGHER_LAYER_DATA_TLV 0xA0
1329 #define AP_CAPABILITY_TLV 0xA1
1330 #define ASSOCIATED_STA_TRAFFIC_STATS_TLV 0xA2
1331 #define ERROR_CODE_TLV 0xA3
1332 #define CHANNEL_SCAN_REPORTING_POLICY_TLV 0xA4
1333 #define CHANNEL_SCAN_CAPABILITIES_TLV 0xA5
1334 #define CHANNEL_SCAN_REQUEST_TLV 0xA6
1335 #define CHANNEL_SCAN_RESULT_TLV 0xA7
1336 #define TIMESTAMP_TLV 0xA8
1337 #define IEEE1905_LAYER_SECURITY_CAPABILITY_TLV 0xA9
1338 #define AP_WF6_CAPABILITIES_TLV 0xAA
1339 #define MIC_TLV 0xAB
1340 #define ENCRYPTED_TLV 0xAC
1341 #define CAC_REQUEST_TLV 0xAD
1342 #define CAC_TERMINATION_TLV 0xAE
1343 #define CAC_COMPLETION_REPORT_TLV 0xAF
1344 #define ASSOCIATED_WF6_STA_STATUS_REPORT_TLV 0xB0
1345 #define CAC_STATUS_REPORT_TLV 0xB1
1346 #define CAC_CAPABILITIES_TLV 0xB2
1347 #define MULTI_AP_PROFILE_TLV 0xB3
1348 #define PROFILE_2_AP_CAPABILITY_TLV 0xB4
1349 #define DEFAULT_802_1Q_SETTINGS_TLV 0xB5
1350 #define TRAFFIC_SEPARATION_POLICY_TLV 0xB6
1351 #define BSS_CONFIGURATION_REPORT_TLV 0xB7
1352 #define BSSID_TLV 0xB8
1353 #define SERVICE_PRIORITIZATION_RULE_TLV 0xB9
1354 #define DSCP_MAPPING_TABLE_TLV 0xBA
1355 #define BSS_CONFIGURATION_REQUEST_TLV 0xBB
1356 #define PROFILE_2_ERROR_CODE_ERROR_TLV 0xBC
1357 #define BSS_CONFIGURATION_RESPONSE_TLV 0xBD /* FIX */
1358 #define AP_RADIO_ADVANCED_CAPABILITIES_TLV 0xBE
1359 #define ASSOCIATION_STATUS_NOTIFICATION_TLV 0xBF
1360 #define SOURCE_INFO_TLV 0xC0
1361 #define TUNNELED_MESSAGE_TYPE_TLV 0xC1
1362 #define TUNNELED_TLV 0xC2
1363 #define PROFILE_2_STEERING_REQUEST_TLV 0xC3
1364 #define UNSUCCESSFUL_ASSOCIATION_POLICY_TLV 0xC4
1365 #define METRIC_COLLECTION_INTERVAL_TLV 0xC5
1366 #define RADIO_METRICS_TLV 0xC6
1367 #define AP_EXTENDED_METRICS_TLV 0xC7
1368 #define ASSOCIATED_STA_EXTENDED_LINK_METRICS_TLV 0xC8
1369 #define STATUS_CODE_TLV 0xC9
1370 #define REASON_CODE_TLV 0xCA
1371 #define BACKHAUL_STA_RADIO_CAPABILITIES_TLV 0xCB
1372 #define AKM_SUITE_CAPABILITIES_TLV 0xCC
1373 #define IEEE1905_ENCAP_DPP_TLV 0xCD
1374 #define IEEE1905_ENCAP_EAPOL_TLV 0xCE
1375 #define DPP_BOOTSTRAPPING_URI_NOTIFICATION_TLV 0xCF
1376 #define BACKHAUL_BSS_CONFIGURATION 0xD0
1377 #define DPP_MESSAGE_TLV 0xD1
1378 #define DPP_CCE_INDICATION_TLV 0xD2
1379 #define DPP_CHIRP_VALUE_TLV 0xD3
1380 #define DEVICE_INVENTORY_TLV 0xD4
1381 #define AGENT_LIST_TLV 0xD5
1382 #define ANTICIPATED_CHANNEL_PREFERENCE_TLV 0xD6
1383 #define ANTICIPATED_CHANNEL_USAGE_TLV 0xD7
1384 #define SPATIAL_REUSE_REQUEST_TLV 0xD8
1385 #define SPATIAL_REUSE_REPORT_TLV 0xD9
1386 #define SPATIAL_REUSE_CONFIG_RESPONSE_TLV 0xDA
1387 #define QOS_MANAGEMENT_POLICY_TLV 0xDB
1388 #define QOS_MANAGEMENT_DESCRIPTOR_TLV 0xDC
1389 #define CONTROLLER_CAPABILITY_TLV 0xDD
1390 #define WIFI7_AGENT_CAPABILITIES_TLV 0xDF
1391 #define AGENT_AP_MLD_CONFIGURATION_TLV 0xE0
1392 #define BACKHAUL_STA_MLD_CONFIGURATION_TLV 0xE1
1393 #define ASSOCIATED_STA_MLD_CONFIGURATION_TLV 0xE2
1394 #define AFFILIATED_STA_METRICS_TLV 0xE4
1395 #define AFFILIATED_AP_METRICS_TLV 0xE5
1396 #define EHT_OPERATIONS_TLV 0xE7
1397 #define AVAILABLE_SPECTRUM_INQUIRY_REQUEST_TLV 0xE8
1398 #define AVAILABLE_SPECTRUM_INQUIRY_RESPONSE_TLV 0xE9
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 }
1536 static value_string_ext ieee1905_tlv_types_vals_ext = VALUE_STRING_EXT_INIT(ieee1905_tlv_types_vals);
1538 static const true_false_string tfs_last_fragment = {
1539 "This is the last fragment",
1540 "This is not the last fragment"
1543 static const true_false_string tfs_relay_indicator = {
1544 "Relayed multicast",
1545 "Neighbor multicast or unicast"
1548 static const value_string ieee1905_link_metric_query_type_vals[] = {
1549 { 0x00, "All neighbors" },
1550 { 0x01, "Specific neighbor" },
1551 { 0, NULL }
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 }
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 }
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 }
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 }
1587 static const value_string ieee1905_media_type_2_vals[] = {
1588 { 0, "IEEE 1901 wavelet" },
1589 { 1, "IEEE 1901 FFT" },
1590 { 0, NULL }
1593 static const value_string ieee1905_media_type_3_vals[] = {
1594 { 0, "MoCA v1.1" },
1595 { 0, NULL }
1598 static const value_string ieee1905_link_metric_result_vals[] = {
1599 { 0, "Invalid neighbor" },
1600 { 0, NULL }
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"
1608 static const value_string ieee1905_searched_role_vals[] = {
1609 { 0, "Registrar" },
1610 { 0, NULL }
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 }
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 }
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}
1637 static const value_string ieee1905_profile_version_vals[] = {
1638 { 0, "1905.1" },
1639 { 1, "1905.1a" },
1640 { 0, NULL }
1643 static const value_string ieee1905_power_state_vals[] = {
1644 { 0, "PWR_OFF" },
1645 { 1, "PWR_ON" },
1646 { 2, "PWR_SAVE" },
1647 { 0, NULL }
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 }
1657 static const value_string ieee1905_supported_service_vals[] = {
1658 { 0x00, "Multi-AP Controller" },
1659 { 0x01, "Multi-AP Agent" },
1660 { 0, NULL }
1663 static const value_string ieee1905_higher_layer_protocol_vals[] = {
1664 { 0x00, "Reserved" },
1665 { 0x01, "TR-181 transport protocol" },
1666 { 0, NULL }
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 },
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 }
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",
1690 static const true_false_string tfs_ieee1905_report_unsuccessful_association_attempt_flag = {
1691 "Report",
1692 "Do not Report",
1695 static const true_false_string tfs_ieee1905_btm_disassoc_imminent_flag = {
1696 "BTM disassociation imminent",
1697 "BTM disassociation not imminent"
1700 static const true_false_string tfs_ieee1905_btm_abridged_flag = {
1701 "BTM abridged",
1702 "BTM not abridged"
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 }
1712 static const true_false_string tfs_ieee1905_association_event_flag = {
1713 "Client has joined the BSS",
1714 "Client has left the BSS"
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 },
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 },
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 },
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 },
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 }
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 }
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 }
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}
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 }
1819 * Minimum message has a single End of Message TLV with 3 bytes, plus 8 byte
1820 * header.
1822 #define IEEE1905_MIN_LENGTH 11
1825 * Size of the fixed parameters in 802.11 management frames
1827 #define ASSOC_REQ_BODY_FIXED_SIZE 4
1829 static int
1830 dissect_media_type(tvbuff_t *tvb, packet_info *pinfo _U_,
1831 proto_tree *tree, unsigned offset)
1833 proto_item *pi = NULL;
1834 proto_tree *media_type = NULL;
1835 uint8_t bits_15_to_8 = 0, bits_7_to_0 = 0;
1837 pi = proto_tree_add_item(tree, hf_ieee1905_media_type, tvb, offset,
1838 2, ENC_BIG_ENDIAN);
1840 media_type = proto_item_add_subtree(pi, ett_media_type);
1843 * Now, break it out
1845 bits_15_to_8 = tvb_get_uint8(tvb, offset);
1846 bits_7_to_0 = tvb_get_uint8(tvb, offset + 1);
1848 proto_tree_add_item(media_type, hf_ieee1905_media_type_high, tvb, offset,
1849 1, ENC_NA);
1850 offset++;
1852 proto_tree_add_item(media_type, hf_ieee1905_media_type_low, tvb, offset,
1853 1, ENC_NA);
1854 offset++;
1856 switch (bits_15_to_8) {
1857 case 0:
1858 proto_item_append_text(pi, ", %s",
1859 val_to_str_const(bits_7_to_0,
1860 ieee1905_media_type_0_vals,
1861 "Reserved"));
1862 break;
1864 case 1:
1865 proto_item_append_text(pi, ", %s",
1866 val_to_str_const(bits_7_to_0,
1867 ieee1905_media_type_1_vals,
1868 "Reserved"));
1869 break;
1871 case 2:
1872 proto_item_append_text(pi, ", %s",
1873 val_to_str(bits_7_to_0,
1874 ieee1905_media_type_2_vals,
1875 "Reserved"));
1876 break;
1878 case 3:
1879 proto_item_append_text(pi, ", %s",
1880 val_to_str_const(bits_7_to_0,
1881 ieee1905_media_type_3_vals,
1882 "Reserved"));
1883 break;
1885 case 0xff:
1886 proto_item_append_text(pi, ", Unknown media");
1887 break;
1889 default:
1890 proto_item_append_text(pi, ", Reserved");
1891 break;
1894 return offset;
1898 * Dissect a local interface list, putting them each in a subtree labeled
1899 * with the number of the interface.
1901 static int
1902 dissect_local_interface_list(tvbuff_t *tvb, packet_info *pinfo,
1903 proto_tree *tree, unsigned offset, uint8_t count)
1905 unsigned lil_index = 0;
1906 unsigned media_type_offset = 0;
1907 proto_item *pi = NULL;
1908 proto_tree *dev_tree = NULL;
1910 while (count > 0) {
1911 uint8_t spec_info_len = 0;
1913 dev_tree = proto_tree_add_subtree_format(tree, tvb, offset, 8,
1914 ett_device_information_tree,
1915 &pi, "Local interface %u device info",
1916 lil_index);
1918 proto_tree_add_item(dev_tree, hf_ieee1905_mac_address_type, tvb,
1919 offset, 6, ENC_NA);
1920 offset += 6;
1922 media_type_offset = offset;
1924 offset = dissect_media_type(tvb, pinfo, dev_tree, offset);
1926 spec_info_len = tvb_get_uint8(tvb, offset);
1928 proto_tree_add_item(dev_tree, hf_ieee1905_media_spec_info_len,
1929 tvb, offset, 1, ENC_NA);
1930 offset++;
1932 if (spec_info_len) {
1933 /* FIXME: This should be dissected ... */
1934 proto_tree_add_item(dev_tree, hf_ieee1905_media_spec_info,
1935 tvb, offset, spec_info_len, ENC_NA);
1936 offset += spec_info_len;
1939 proto_item_set_len(pi, 6 + (offset - media_type_offset));
1941 count--;
1942 lil_index++;
1945 return offset;
1949 * Dissect device bridging capabilities
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_)
1955 uint8_t count = tvb_get_uint8(tvb, offset);
1956 uint8_t tuple_no = 0;
1957 uint8_t mac_addresses = 0;
1958 unsigned start = 0;
1959 proto_tree *tuple_list = NULL;
1960 proto_tree *bridging_list = NULL;
1961 proto_item *tpi = NULL, *mpi = NULL;
1963 proto_tree_add_item(tree, hf_ieee1905_bridging_tuples_cnt, tvb, offset,
1964 1, ENC_NA);
1965 tuple_list = proto_tree_add_subtree(tree, tvb, offset, -1,
1966 ett_bridging_tuples_list,
1967 &tpi, "Bridging tuples list");
1969 start = offset; /* Starts at the count! */
1970 offset++;
1972 while (count > 0) {
1973 unsigned bl_start = offset;
1974 mac_addresses = tvb_get_uint8(tvb, offset);
1976 bridging_list = proto_tree_add_subtree_format(tuple_list, tvb, offset,
1977 -1, ett_bridging_mac_list,
1978 &mpi, "Bridging tuple %u", tuple_no);
1980 proto_tree_add_item(bridging_list,
1981 hf_ieee1905_bridging_mac_address_cnt,
1982 tvb, offset, 1, ENC_NA);
1984 offset++;
1985 tuple_no++;
1987 while (mac_addresses) {
1988 proto_tree_add_item(bridging_list,
1989 hf_ieee1905_bridging_mac_address, tvb,
1990 offset, 6, ENC_NA);
1991 offset += 6;
1992 mac_addresses--;
1996 proto_item_set_len(mpi, offset - bl_start);
1997 count--;
2000 proto_item_set_len(tpi, offset - start);
2001 return offset;
2005 * Dissect the non 1905 neighbor device list TLV
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)
2011 proto_tree *neighbor_list = NULL;
2012 proto_item *pi = NULL;
2013 unsigned start;
2014 int remaining = len;
2016 proto_tree_add_item(tree, hf_ieee1905_local_interface_mac, tvb,
2017 offset, 6, ENC_NA);
2019 remaining -= 6;
2020 offset += 6;
2022 neighbor_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2023 ett_non_1905_neighbor_list,
2024 &pi, "Non IEEE1905 neighbor devices");
2026 start = offset;
2028 while (remaining > 0) {
2029 proto_tree_add_item(neighbor_list, hf_ieee1905_neighbor_al_mac_addr,
2030 tvb, offset, 6, ENC_NA);
2032 remaining -= 6;
2033 offset += 6;
2036 proto_item_set_len(pi, offset - start);
2038 return offset;
2042 * Dissect an IEEE1905 Neighbor device TLV
2044 static int
2045 dissect_1905_neighbor_device(tvbuff_t *tvb, packet_info *pinfo _U_,
2046 proto_tree *tree, unsigned offset, uint16_t len)
2048 proto_tree *neighbor_list = NULL;
2049 proto_item *pi = NULL;
2050 unsigned start;
2051 int remaining = len;
2052 static int * const flags[] = {
2053 &hf_ieee1905_bridges_flag,
2054 NULL,
2057 proto_tree_add_item(tree, hf_ieee1905_local_interface_mac, tvb,
2058 offset, 6, ENC_NA);
2060 remaining -= 6;
2061 offset += 6;
2063 neighbor_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2064 ett_1905_neighbor_list, &pi,
2065 "IEEE1905 neighbor devices");
2067 start = offset;
2069 while (remaining > 0) {
2070 proto_tree_add_item(neighbor_list, hf_ieee1905_neighbor_al_mac_addr,
2071 tvb, offset, 6, ENC_NA);
2073 remaining -= 6;
2074 offset += 6;
2076 proto_tree_add_bitmask(neighbor_list, tvb, offset,
2077 hf_ieee1905_neighbor_flags,
2078 ett_ieee1905_neighbor_flags, flags, ENC_NA);
2080 remaining--;
2081 offset++;
2085 proto_item_set_len(pi, offset - start);
2087 return offset;
2091 * Dissect the link metric result code
2093 static int
2094 dissect_link_metric_result_code(tvbuff_t *tvb, packet_info *pinfo _U_,
2095 proto_tree *tree, unsigned offset)
2097 proto_item *pi = NULL;
2098 uint8_t code = tvb_get_uint8(tvb, offset);
2100 pi = proto_tree_add_item(tree, hf_ieee1905_link_metric_result_code,
2101 tvb, offset, 1, ENC_NA);
2103 proto_item_append_text(pi, ", %s",
2104 val_to_str_const(code, ieee1905_link_metric_result_vals,
2105 "Reserved"));
2107 offset++;
2109 return offset;
2113 * Dissect a vendor specific TLV.
2115 static int
2116 dissect_vendor_specific(tvbuff_t *tvb, packet_info *pinfo _U_,
2117 proto_tree *tree, unsigned offset, uint16_t len)
2120 proto_tree_add_item(tree, hf_ieee1905_vendor_specific_oui, tvb, offset,
2121 3, ENC_NA);
2122 offset += 3;
2124 proto_tree_add_item(tree, hf_ieee1905_vendor_specific_info, tvb, offset,
2125 len - 3, ENC_NA);
2126 offset += (len - 3);
2128 return offset;
2132 * Dissect the searched role TLV
2134 static int
2135 dissect_searched_role(tvbuff_t *tvb, packet_info *pinfo _U_,
2136 proto_tree *tree, unsigned offset)
2138 proto_item *pi = NULL;
2139 uint8_t role = tvb_get_uint8(tvb, offset);
2141 pi = proto_tree_add_item(tree, hf_ieee1905_searched_role, tvb, offset,
2142 1, ENC_NA);
2144 proto_item_append_text(pi, ", %s",
2145 val_to_str_const(role, ieee1905_searched_role_vals,
2146 "Reserved"));
2148 offset++;
2150 return offset;
2154 * Dissect the supported role TLV
2156 static int
2157 dissect_supported_role(tvbuff_t *tvb, packet_info *pinfo _U_,
2158 proto_tree *tree, unsigned offset)
2160 proto_item *pi = NULL;
2161 uint8_t role = tvb_get_uint8(tvb, offset);
2163 pi = proto_tree_add_item(tree, hf_ieee1905_supported_role, tvb, offset,
2164 1, ENC_NA);
2167 * We can re-use this.
2169 proto_item_append_text(pi, ", %s",
2170 val_to_str_const(role, ieee1905_searched_role_vals,
2171 "Reserved"));
2173 offset++;
2175 return offset;
2179 * Dissect an Auto config frequency band TLV
2181 static int
2182 dissect_auto_config_freq_band(tvbuff_t *tvb, packet_info *pinfo _U_,
2183 proto_tree *tree, unsigned offset)
2185 proto_item *pi = NULL;
2186 uint8_t freq = tvb_get_uint8(tvb, offset);
2188 pi = proto_tree_add_item(tree, hf_ieee1905_auto_config_freq_band, tvb,
2189 offset, 1, ENC_NA);
2191 proto_item_append_text(pi, ", %s",
2192 val_to_str_const(freq, ieee1905_freq_band_vals,
2193 "Reserved"));
2195 offset++;
2197 return offset;
2201 * Dissect a Supported frequency band TLV
2203 static int
2204 dissect_supported_freq_band(tvbuff_t *tvb, packet_info *pinfo _U_,
2205 proto_tree *tree, unsigned offset)
2207 proto_item *pi = NULL;
2208 uint8_t freq = tvb_get_uint8(tvb, offset);
2210 pi = proto_tree_add_item(tree, hf_ieee1905_supported_freq_band, tvb,
2211 offset, 1, ENC_NA);
2213 proto_item_append_text(pi, ", %s",
2214 val_to_str_const(freq, ieee1905_freq_band_vals,
2215 "Reserved"));
2217 offset++;
2219 return offset;
2223 * Dissect a WSC TLV
2225 static int
2226 dissect_wsc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
2227 unsigned offset, uint16_t len)
2229 dissect_wps_tlvs(tree, tvb, offset, len, pinfo);
2230 offset += len;
2232 return offset;
2236 * Dissect a push button notification event TLV
2238 static int
2239 dissect_push_button_event_notification(tvbuff_t *tvb, packet_info *pinfo,
2240 proto_tree *tree, unsigned offset)
2242 proto_item *pi = NULL, *mpi = NULL;
2243 proto_tree *media_type_list = NULL, *media_item = NULL;
2244 unsigned list_offset = 0, media_type_offset = 0;
2245 uint8_t media_types = tvb_get_uint8(tvb, offset);
2246 uint8_t media_type_index = 0;
2248 proto_tree_add_item(tree, hf_ieee1905_event_notification_media_types,
2249 tvb, offset, 1, ENC_NA);
2250 offset++;
2252 /* If there are none, nothing more to do. */
2253 if (media_types == 0)
2254 return offset;
2256 media_type_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2257 ett_media_type_list,
2258 &pi, "Media type list");
2259 list_offset = offset;
2261 while (media_type_index < media_types) {
2262 uint8_t spec_info_len = 0;
2264 media_item = proto_tree_add_subtree_format(media_type_list,
2265 tvb, offset, -1,
2266 ett_media_item, &mpi,
2267 "Media type %u", media_type_index);
2269 media_type_offset = offset;
2271 offset = dissect_media_type(tvb, pinfo, media_item, offset);
2273 spec_info_len = tvb_get_uint8(tvb, offset);
2275 proto_tree_add_item(media_item, hf_ieee1905_media_spec_info_len,
2276 tvb, offset, 1, ENC_NA);
2277 offset++;
2279 if (spec_info_len) {
2280 /* FIXME: This should be dissected ... */
2281 proto_tree_add_item(media_item, hf_ieee1905_media_spec_info,
2282 tvb, offset, spec_info_len, ENC_NA);
2283 offset += spec_info_len;
2286 proto_item_set_len(mpi, offset - media_type_offset);
2288 media_type_index++;
2291 proto_item_set_len(pi, offset - list_offset);
2293 return offset;
2297 * Dissect a push button event join TLV
2299 static int
2300 dissect_push_button_join_notification(tvbuff_t *tvb, packet_info *pinfo _U_,
2301 proto_tree *tree, unsigned offset)
2303 proto_tree_add_item(tree, hf_ieee1905_sender_al_id, tvb, offset, 6,
2304 ENC_NA);
2305 offset += 6;
2307 proto_tree_add_item(tree, hf_ieee1905_push_button_event_msg_id, tvb,
2308 offset, 2, ENC_BIG_ENDIAN);
2309 offset += 2;
2311 proto_tree_add_item(tree, hf_ieee1905_sender_joining_interface, tvb,
2312 offset, 2, ENC_NA);
2313 offset += 6;
2315 proto_tree_add_item(tree, hf_ieee1905_new_device_interface, tvb,
2316 offset, 2, ENC_NA);
2318 return offset;
2322 * Dissect a generic phy device info TLV
2324 static int
2325 dissect_generic_phy_device_info(tvbuff_t *tvb, packet_info *pinfo _U_,
2326 proto_tree *tree, unsigned offset)
2328 proto_item *pi = NULL;
2329 proto_tree *local_interface_list = NULL;
2330 uint8_t local_intf_count, local_intf_index = 0;
2331 int saved_offset = 0;
2333 proto_tree_add_item(tree, hf_ieee1905_device_al_mac, tvb, offset,
2334 6, ENC_NA);
2335 offset += 6;
2337 local_intf_count = tvb_get_uint8(tvb, offset);
2339 proto_tree_add_item(tree, hf_ieee1905_local_interface_count, tvb,
2340 offset, 1, ENC_NA);
2342 offset++;
2344 if (local_intf_count == 0)
2345 return offset;
2347 local_interface_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2348 ett_local_interface_list,
2349 &pi, "Local interface list");
2350 saved_offset = 0;
2352 while (local_intf_index < local_intf_count) {
2353 proto_tree *intf_tree = NULL;
2354 proto_item *ipi = NULL;
2355 unsigned start_offset = offset;
2356 uint8_t url_field_count, media_spec_count;
2358 intf_tree = proto_tree_add_subtree_format(local_interface_list,
2359 tvb, offset, -1,
2360 ett_local_interface_info,
2361 &ipi, "Local interface %u generic info",
2362 local_intf_index);
2364 proto_tree_add_item(intf_tree, hf_ieee1905_local_interface_mac,
2365 tvb, offset, 6, ENC_NA);
2366 offset += 6;
2368 proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_oui,
2369 tvb, offset, 3, ENC_NA);
2370 offset+= 3;
2372 proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_variant,
2373 tvb, offset, 1, ENC_NA);
2374 offset++;
2376 proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_variant_name,
2377 tvb, offset, 32, ENC_UTF_8);
2378 offset += 32;
2380 url_field_count = tvb_get_uint8(tvb, offset);
2381 proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_url_count,
2382 tvb, offset, 1, ENC_NA);
2383 offset++;
2385 media_spec_count = tvb_get_uint8(tvb, offset);
2386 proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_spec_count,
2387 tvb, offset, 1, ENC_NA);
2388 offset++;
2390 proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_url, tvb,
2391 offset, url_field_count, ENC_ASCII);
2392 offset += url_field_count;
2394 proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_spec, tvb,
2395 offset, media_spec_count, ENC_NA);
2396 offset+= media_spec_count;
2398 proto_item_set_len(ipi, offset - start_offset);
2400 local_intf_index++;
2403 proto_item_set_len(pi, offset - saved_offset);
2405 return offset;
2409 * Dissect a Device Identification Type TLV
2411 static int
2412 dissect_device_identification(tvbuff_t *tvb, packet_info *pinfo _U_,
2413 proto_tree *tree, unsigned offset)
2415 proto_tree_add_item(tree, hf_ieee1905_dev_id_friendly_name, tvb,
2416 offset, 64, ENC_UTF_8);
2417 offset += 64;
2419 proto_tree_add_item(tree, hf_ieee1905_dev_id_manuf_name, tvb,
2420 offset, 64, ENC_UTF_8);
2421 offset += 64;
2423 proto_tree_add_item(tree, hf_ieee1905_dev_id_manuf_model, tvb,
2424 offset, 64, ENC_UTF_8);
2425 offset += 64;
2427 return offset;
2431 * Dissect a Control URL Type TLV
2433 static int
2434 dissect_control_url_type(tvbuff_t *tvb, packet_info *pinfo _U_,
2435 proto_tree *tree, unsigned offset, uint16_t len)
2437 proto_tree_add_item(tree, hf_ieee1905_control_url, tvb, offset,
2438 len, ENC_ASCII);
2439 offset += len;
2441 return offset;
2445 * Dissect an IPv4 Type TLV
2447 static int
2448 dissect_ipv4_type(tvbuff_t *tvb, packet_info *pinfo _U_,
2449 proto_tree *tree, unsigned offset)
2451 uint8_t entry_count = tvb_get_uint8(tvb, offset);
2452 uint8_t entry_index = 0;
2453 proto_item *pi = NULL;
2454 proto_tree *ipv4_list = NULL;
2455 unsigned saved_offset = 0;
2457 proto_tree_add_item(tree, hf_ieee1905_ipv4_type_count, tvb, offset,
2458 1, ENC_NA);
2459 offset++;
2461 if (entry_count == 0)
2462 return offset;
2464 ipv4_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2465 ett_ipv4_list,
2466 &pi, "IPv4 type list");
2467 saved_offset = offset;
2469 while (entry_index < entry_count) {
2470 proto_tree *ipv4_tree = NULL, *addr_list = NULL;
2471 proto_item *ipi = NULL;
2472 unsigned start_offset = offset;
2473 uint8_t addr_count = 0, addr_index = 0;
2475 ipv4_tree = proto_tree_add_subtree_format(ipv4_list,
2476 tvb, offset, -1,
2477 ett_ipv4_info,
2478 &ipi, "IPv4 type %u info",
2479 entry_index);
2481 proto_tree_add_item(ipv4_tree, hf_ieee1905_mac_address, tvb,
2482 offset, 6, ENC_NA);
2483 offset += 6;
2485 addr_count = tvb_get_uint8(tvb, offset);
2486 proto_tree_add_item(ipv4_tree, hf_ieee1905_ipv4_addr_count,
2487 tvb, offset, 1, ENC_NA);
2488 offset++;
2490 if (addr_count == 0)
2491 continue;
2493 addr_list = proto_tree_add_subtree(ipv4_tree, tvb, offset,
2494 addr_count * 9,
2495 ett_ipv4_type_addr_list,
2496 NULL, "IPv4 address list");
2498 while (addr_index < addr_count) {
2499 proto_tree *addr_tree = NULL;
2500 proto_item *atpi = NULL;
2501 uint8_t addr_type = tvb_get_uint8(tvb, offset);
2503 addr_tree = proto_tree_add_subtree_format(addr_list, tvb,
2504 offset, 9, ett_ipv4_addr_info,
2505 NULL, "IPv4 address %u info",
2506 addr_index);
2508 atpi = proto_tree_add_item(addr_tree, hf_ieee1905_addr_type,
2509 tvb, offset, 1, ENC_NA);
2510 proto_item_append_text(atpi, ", %s",
2511 val_to_str_const(addr_type, ieee1905_ipv4_addr_type_vals,
2512 "Reserved"));
2513 offset++;
2515 proto_tree_add_item(addr_tree, hf_ieee1905_ipv4_addr, tvb,
2516 offset, 4, ENC_LITTLE_ENDIAN);
2517 offset += 4;
2519 proto_tree_add_item(addr_tree, hf_ieee1905_dhcp_server, tvb,
2520 offset, 4, ENC_LITTLE_ENDIAN);
2521 offset += 4;
2523 addr_index++;
2526 proto_item_set_len(ipi, offset - start_offset);
2528 entry_index++;
2531 proto_item_set_len(pi, offset - saved_offset);
2533 return offset;
2537 * Dissect an IPv6 Type TLV
2539 static int
2540 dissect_ipv6_type(tvbuff_t *tvb, packet_info *pinfo _U_,
2541 proto_tree *tree, unsigned offset)
2543 uint8_t entry_count = tvb_get_uint8(tvb, offset);
2544 uint8_t entry_index = 0;
2545 proto_item *pi = NULL;
2546 proto_tree *ipv6_list = NULL;
2547 unsigned saved_offset = 0;
2549 proto_tree_add_item(tree, hf_ieee1905_ipv6_type_count, tvb, offset,
2550 1, ENC_NA);
2551 offset++;
2553 if (entry_count == 0)
2554 return offset;
2556 ipv6_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2557 ett_ipv6_list,
2558 &pi, "IPv6 type list");
2559 saved_offset = offset;
2561 while (entry_index < entry_count) {
2562 proto_tree *ipv6_tree = NULL, *addr_list = NULL;
2563 proto_item *ipi = NULL;
2564 unsigned start_offset = offset;
2565 uint8_t addr_count = 0, addr_index = 0;
2567 ipv6_tree = proto_tree_add_subtree_format(ipv6_list,
2568 tvb, offset, -1,
2569 ett_ipv6_info,
2570 &ipi, "IPv6 type %u info",
2571 entry_index);
2573 proto_tree_add_item(ipv6_tree, hf_ieee1905_ipv6_mac_address, tvb,
2574 offset, 6, ENC_NA);
2575 offset += 6;
2577 proto_tree_add_item(ipv6_tree, hf_ieee1905_ipv6_linklocal, tvb,
2578 offset, 16, ENC_NA);
2580 offset += 16;
2582 addr_count = tvb_get_uint8(tvb, offset);
2583 proto_tree_add_item(ipv6_tree, hf_ieee1905_ipv6_addr_count,
2584 tvb, offset, 1, ENC_NA);
2585 offset++;
2587 if (addr_count == 0)
2588 continue;
2590 addr_list = proto_tree_add_subtree(ipv6_tree, tvb, offset,
2591 addr_count * 9,
2592 ett_ipv6_type_addr_list,
2593 NULL, "IPv6 address list");
2595 while (addr_index < addr_count) {
2596 proto_tree *addr_tree = NULL;
2597 proto_item *atpi = NULL;
2598 uint8_t addr_type = tvb_get_uint8(tvb, offset);
2600 addr_tree = proto_tree_add_subtree_format(addr_list, tvb,
2601 offset, 9, ett_ipv6_addr_info,
2602 NULL, "IPv6 address %u info",
2603 addr_index);
2605 atpi = proto_tree_add_item(addr_tree, hf_ieee1905_ipv6_addr_type,
2606 tvb, offset, 1, ENC_NA);
2607 proto_item_append_text(atpi, ", %s",
2608 val_to_str_const(addr_type, ieee1905_ipv6_addr_type_vals,
2609 "Reserved"));
2610 offset++;
2612 proto_tree_add_item(addr_tree, hf_ieee1905_ipv6_addr, tvb,
2613 offset, 16, ENC_NA);
2614 offset += 16;
2616 proto_tree_add_item(addr_tree, hf_ieee1905_ipv6_dhcp_server, tvb,
2617 offset, 16, ENC_NA);
2618 offset += 16;
2620 addr_index++;
2623 proto_item_set_len(ipi, offset - start_offset);
2625 entry_index++;
2628 proto_item_set_len(pi, offset - saved_offset);
2630 return offset;
2634 * Dissect a push butteon generic phy event notification
2636 static int
2637 dissect_push_button_event_type_notification(tvbuff_t *tvb, packet_info *pinfo _U_,
2638 proto_tree *tree, unsigned offset)
2640 uint8_t media_type_count = tvb_get_uint8(tvb, offset);
2641 uint8_t media_type_index = 0;
2642 unsigned saved_offset;
2643 proto_item *pi = NULL;
2644 proto_tree *phy_list = NULL;
2646 proto_tree_add_item(tree, hf_ieee1905_generic_phy_media_types,
2647 tvb, offset, 1, ENC_NA);
2648 offset++;
2650 phy_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2651 ett_push_button_phy_list,
2652 &pi, "Generic Phy media type list");
2653 saved_offset = offset;
2655 while (media_type_index < media_type_count) {
2656 proto_item *ppi = NULL;
2657 proto_tree *phy_tree;
2658 unsigned start_offset = offset;
2659 uint8_t media_specific_len;
2661 phy_tree = proto_tree_add_subtree_format(phy_list, tvb,
2662 offset, -1, ett_push_button_phy_info,
2663 &ppi, "Generic Phy media type %u info",
2664 media_type_index);
2666 proto_tree_add_item(phy_tree, hf_ieee1905_local_intf_oui,
2667 tvb, offset, 3, ENC_NA);
2668 offset+= 3;
2670 proto_tree_add_item(phy_tree, hf_ieee1905_local_intf_variant,
2671 tvb, offset, 1, ENC_NA);
2672 offset++;
2674 media_specific_len = tvb_get_uint8(tvb, offset);
2676 proto_tree_add_item(phy_tree, hf_ieee1905_local_intf_spec_count,
2677 tvb, offset, 1, ENC_NA);
2678 offset++;
2680 proto_tree_add_item(phy_tree, hf_ieee1905_local_intf_spec, tvb,
2681 offset, media_specific_len, ENC_NA);
2682 offset += media_specific_len;
2684 proto_item_set_len(ppi, offset - start_offset);
2686 media_type_index++;
2689 proto_item_set_len(pi, offset - saved_offset);
2691 return offset;
2695 * Dissect a 1905 profile version TLV
2697 static int
2698 dissect_profile_version(tvbuff_t *tvb, packet_info *pinfo _U_,
2699 proto_tree *tree, unsigned offset)
2701 uint8_t profile_version = tvb_get_uint8(tvb, offset);
2702 proto_item *pi = NULL;
2704 pi = proto_tree_add_item(tree, hf_ieee1905_profile_version, tvb,
2705 offset, 1, ENC_NA);
2706 proto_item_append_text(pi, ", %s",
2707 val_to_str_const(profile_version, ieee1905_profile_version_vals,
2708 "Reserved"));
2709 offset++;
2711 return offset;
2715 * Dissect the power off interface TLV
2717 static int
2718 dissect_power_off_interface(tvbuff_t *tvb, packet_info *pinfo,
2719 proto_tree *tree, unsigned offset)
2721 uint8_t local_intf_count = tvb_get_uint8(tvb, offset);
2722 uint8_t local_intf_index = 0;
2723 proto_item *pi = NULL;
2724 proto_tree *intf_list = NULL;
2725 unsigned saved_offset = 0;
2727 proto_tree_add_item(tree, hf_ieee1905_power_off_intf_count, tvb,
2728 offset, 1, ENC_NA);
2729 offset++;
2731 if (local_intf_count == 0)
2732 return offset;
2734 intf_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2735 ett_push_button_phy_list,
2736 &pi, "Generic Phy media type list");
2737 saved_offset = offset;
2739 while (local_intf_index < local_intf_count) {
2740 proto_tree *intf_tree = NULL;
2741 proto_item *ppi = NULL;
2742 uint8_t media_specific_len = 0;
2744 intf_tree = proto_tree_add_subtree_format(intf_list, tvb,
2745 offset, -1, ett_power_off_info,
2746 &ppi, "Powered off interface %u info",
2747 local_intf_index);
2749 proto_tree_add_item(intf_tree, hf_ieee1905_mac_address, tvb,
2750 offset, 6, ENC_NA);
2751 offset += 6;
2753 offset = dissect_media_type(tvb, pinfo, intf_tree, offset);
2755 proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_oui,
2756 tvb, offset, 3, ENC_NA);
2757 offset+= 3;
2759 proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_variant,
2760 tvb, offset, 1, ENC_NA);
2761 offset++;
2763 media_specific_len = tvb_get_uint8(tvb, offset);
2765 proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_spec_count,
2766 tvb, offset, 1, ENC_NA);
2767 offset++;
2769 proto_tree_add_item(intf_tree, hf_ieee1905_local_intf_spec, tvb,
2770 offset, media_specific_len, ENC_NA);
2771 offset += media_specific_len;
2773 local_intf_index++;
2776 proto_item_set_len(pi, offset - saved_offset);
2778 return offset;
2782 * Dissect an interface power change information TLV.
2784 static int
2785 dissect_interface_power_change_info(tvbuff_t *tvb, packet_info *pinfo _U_,
2786 proto_tree *tree, unsigned offset)
2788 unsigned intf_count = tvb_get_uint8(tvb, offset);
2789 unsigned intf_index = 0;
2790 proto_tree *intf_list = NULL;
2792 proto_tree_add_item(tree, hf_ieee1905_power_change_intf_count, tvb,
2793 offset, 1, ENC_NA);
2795 intf_list = proto_tree_add_subtree(tree, tvb, offset, intf_count * 7,
2796 ett_power_change_list, NULL,
2797 "Interface power change list");
2799 while (intf_index < intf_count) {
2800 proto_tree *intf_tree = NULL;
2801 proto_item *pi = NULL;
2802 uint8_t power_state = 0;
2804 intf_tree = proto_tree_add_subtree_format(intf_list, tvb,
2805 offset, 7, ett_power_change_info,
2806 NULL, "Power change interface %u info",
2807 intf_index);
2809 proto_tree_add_item(intf_tree, hf_ieee1905_power_change_mac_addr,
2810 tvb, offset, 6, ENC_NA);
2811 offset += 6;
2813 power_state = tvb_get_uint8(tvb, offset);
2814 pi = proto_tree_add_item(tree, hf_ieee1905_power_change_state, tvb,
2815 offset, 1, ENC_NA);
2816 proto_item_append_text(pi, ", %s",
2817 val_to_str(power_state,
2818 ieee1905_power_state_vals,
2819 "Reserved"));
2820 offset++;
2822 intf_index++;
2825 return offset;
2829 * Dissect an interface power change status TLV.
2831 static int
2832 dissect_interface_power_change_status(tvbuff_t *tvb, packet_info *pinfo _U_,
2833 proto_tree *tree, unsigned offset)
2835 unsigned intf_count = tvb_get_uint8(tvb, offset);
2836 unsigned intf_index = 0;
2837 proto_tree *intf_list = NULL;
2839 proto_tree_add_item(tree, hf_ieee1905_power_status_intf_count, tvb,
2840 offset, 1, ENC_NA);
2842 intf_list = proto_tree_add_subtree(tree, tvb, offset, intf_count * 7,
2843 ett_power_status_list, NULL,
2844 "Interface power status list");
2846 while (intf_index < intf_count) {
2847 proto_tree *intf_tree = NULL;
2848 proto_item *pi = NULL;
2849 uint8_t power_state = 0;
2851 intf_tree = proto_tree_add_subtree_format(intf_list, tvb,
2852 offset, 7, ett_power_status_info,
2853 NULL, "Power status interface %u info",
2854 intf_index);
2856 proto_tree_add_item(intf_tree, hf_ieee1905_power_status_mac_addr,
2857 tvb, offset, 6, ENC_NA);
2858 offset += 6;
2860 power_state = tvb_get_uint8(tvb, offset);
2861 pi = proto_tree_add_item(tree, hf_ieee1905_power_status_state, tvb,
2862 offset, 1, ENC_NA);
2863 proto_item_append_text(pi, ", %s",
2864 val_to_str(power_state,
2865 ieee1905_power_status_vals,
2866 "Reserved"));
2867 offset++;
2869 intf_index++;
2872 return offset;
2875 static int
2876 dissect_l2_neighbor_device(tvbuff_t *tvb, packet_info *pinfo _U_,
2877 proto_tree *tree, unsigned offset)
2879 unsigned intf_count = tvb_get_uint8(tvb, offset);
2880 unsigned intf_index = 0;
2881 proto_tree *intf_list = NULL;
2882 proto_item *pi = NULL;
2883 unsigned saved_offset = 0;
2885 proto_tree_add_item(tree, hf_ieee1905_l2_neighbor_intf_count, tvb,
2886 offset, 1, ENC_NA);
2887 offset++;
2889 if (intf_count == 0)
2890 return offset;
2892 intf_list = proto_tree_add_subtree(tree, tvb, offset, -1,
2893 ett_l2_local_intf_list, &pi,
2894 "L2 local interface list");
2896 saved_offset = offset;
2898 while (intf_index < intf_count) {
2899 proto_tree *intf_tree = NULL, *neighbor_list = NULL;
2900 proto_item *ipi = NULL, *mpi = NULL;
2901 uint16_t neighbor_device_count = 0, neighbor_device_index = 0;
2902 unsigned start_offset = offset, ndl_start_offset = 0;
2904 intf_tree = proto_tree_add_subtree_format(intf_list, tvb, offset, -1,
2905 ett_l2_neighbor_device_info, &ipi,
2906 "L2 neighbor device %u info", intf_count);
2908 proto_tree_add_item(intf_tree, hf_ieee1905_l2_local_intf_mac_addr, tvb,
2909 offset, 6, ENC_NA);
2910 offset += 6;
2912 neighbor_device_count = tvb_get_ntohs(tvb, offset);
2913 proto_tree_add_item(intf_tree, hf_ieee1905_l2_neighbor_dev_count, tvb,
2914 offset, 2, ENC_BIG_ENDIAN);
2915 offset += 2;
2917 neighbor_list = proto_tree_add_subtree(intf_tree, tvb, offset, -1,
2918 ett_l2_neighbor_dev_list, &mpi,
2919 "Neighbor device list");
2921 ndl_start_offset = offset;
2923 while (neighbor_device_index < neighbor_device_count) {
2924 proto_tree *neighbor_dev_tree = NULL;
2925 proto_item *bmpi = NULL;
2926 uint16_t behind_mac_addr_count = 0, behind_mac_addr_index = 0;
2927 unsigned ndt_start_offset = offset;
2929 neighbor_dev_tree = proto_tree_add_subtree_format(neighbor_list,
2930 tvb, offset, -1,
2931 ett_l2_neighbor_dev_tree, &bmpi,
2932 "Neighbor device %u info",
2933 neighbor_device_index);
2935 proto_tree_add_item(neighbor_dev_tree,
2936 hf_ieee1905_l2_neighbor_mac_addr, tvb,
2937 offset, 6, ENC_NA);
2938 offset += 6;
2940 behind_mac_addr_count = tvb_get_ntohs(tvb, offset);
2941 proto_tree_add_item(neighbor_dev_tree,
2942 hf_ieee1905_l2_behind_mac_addr_count,
2943 tvb, offset, 2, ENC_BIG_ENDIAN);
2944 offset += 2;
2946 while(behind_mac_addr_index < behind_mac_addr_count) {
2947 proto_tree_add_item(neighbor_dev_tree,
2948 hf_ieee1905_l2_behind_mac_addr, tvb,
2949 offset, 6, ENC_NA);
2950 offset += 6;
2952 behind_mac_addr_index++;
2955 neighbor_device_index++;
2957 proto_item_set_len(bmpi, offset - ndt_start_offset);
2961 proto_item_set_len(mpi, offset - ndl_start_offset);
2962 proto_item_set_len(ipi, offset - start_offset);
2964 intf_index++;
2967 proto_item_set_len(pi, offset - saved_offset);
2969 return offset;
2972 static int
2973 dissect_supported_service(tvbuff_t *tvb, packet_info *pinfo _U_,
2974 proto_tree *tree, unsigned offset)
2976 unsigned service_count = tvb_get_uint8(tvb, offset);
2977 unsigned service_index = 0;
2978 proto_tree *service_list = NULL;
2980 proto_tree_add_item(tree, hf_ieee1905_supported_service_count, tvb,
2981 offset, 1, ENC_NA);
2982 offset++;
2984 service_list = proto_tree_add_subtree(tree, tvb, offset, service_count,
2985 ett_supported_service_list, NULL,
2986 "Supported service list");
2988 while (service_index < service_count) {
2989 proto_item *pi = NULL;
2990 uint8_t service = tvb_get_uint8(tvb, offset);
2992 pi = proto_tree_add_item(service_list, hf_ieee1905_supported_service,
2993 tvb, offset, 1, ENC_NA);
2995 proto_item_append_text(pi, ", %s",
2996 val_to_str(service,
2997 ieee1905_supported_service_vals,
2998 "Reserved"));
2999 offset++;
3001 service_index++;
3004 return offset;
3008 * Dissect a searched service TLV\
3010 static int
3011 dissect_searched_service(tvbuff_t *tvb, packet_info *pinfo _U_,
3012 proto_tree *tree, unsigned offset)
3014 unsigned service_count = tvb_get_uint8(tvb, offset);
3015 unsigned service_index = 0;
3016 proto_tree *service_list = NULL;
3018 proto_tree_add_item(tree, hf_ieee1905_searched_service_count, tvb,
3019 offset, 1, ENC_NA);
3020 offset++;
3022 service_list = proto_tree_add_subtree(tree, tvb, offset, service_count,
3023 ett_searched_service_list, NULL,
3024 "Searched service list");
3026 while (service_index < service_count) {
3027 proto_item *pi = NULL;
3028 uint8_t service = tvb_get_uint8(tvb, offset);
3030 pi = proto_tree_add_item(service_list, hf_ieee1905_searched_service,
3031 tvb, offset, 1, ENC_NA);
3034 * Use the same set of values until we figure out if the spec has
3035 * an error in 17.2.2.
3037 proto_item_append_text(pi, ", %s",
3038 val_to_str(service,
3039 ieee1905_supported_service_vals,
3040 "Reserved"));
3041 offset++;
3043 service_index++;
3046 return offset;
3050 * Dissect an AP Radio Identifier TLV
3052 static int
3053 dissect_ap_radio_identifier(tvbuff_t *tvb, packet_info *pinfo _U_,
3054 proto_tree *tree, unsigned offset)
3056 proto_tree_add_item(tree, hf_ieee1905_ap_radio_identifier, tvb,
3057 offset, 6, ENC_NA);
3058 offset += 6;
3060 return offset;
3064 * Dissect an AP Operational BSS TLV
3066 static int
3067 dissect_ap_operational_bss(tvbuff_t *tvb, packet_info *pinfo _U_,
3068 proto_tree *tree, unsigned offset)
3070 proto_item *rpi = NULL;
3071 proto_tree *radio_list = NULL;
3072 uint8_t radio_count = tvb_get_uint8(tvb, offset);
3073 uint8_t radio_index = 0;
3074 unsigned saved_offset = 0;
3076 proto_tree_add_item(tree, hf_ieee1905_operatonal_bss_radio_count,
3077 tvb, offset, 1, ENC_NA);
3078 offset++;
3080 if (radio_count == 0)
3081 return offset;
3083 radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
3084 ett_ap_operational_bss_list, &rpi,
3085 "AP operational BSS radio list");
3086 saved_offset = offset;
3088 while (radio_index < radio_count) {
3089 proto_tree *radio_tree = NULL, *local_intf_list = NULL;
3090 proto_item *opi = NULL, *ipi = NULL;
3091 unsigned start_offset = offset, list_start_offset;
3092 uint8_t local_intf_count = 0;
3093 uint8_t local_intf_index = 0;
3095 radio_tree = proto_tree_add_subtree_format(radio_list,
3096 tvb, offset, -1,
3097 ett_ap_operational_bss_tree, &opi,
3098 "AP operational BSS %u info",
3099 radio_index);
3101 proto_tree_add_item(radio_tree, hf_ieee1905_ap_radio_identifier,
3102 tvb, offset, 6, ENC_NA);
3103 offset += 6;
3105 local_intf_count = tvb_get_uint8(tvb, offset);
3107 proto_tree_add_item(radio_tree, hf_ieee1905_ap_operational_intf_count,
3108 tvb, offset, 1, ENC_NA);
3109 offset++;
3111 list_start_offset = offset;
3113 local_intf_list = proto_tree_add_subtree(radio_tree, tvb, offset, -1,
3114 ett_ap_operational_bss_intf_list, &ipi,
3115 "AP operational BSS local interface list");
3117 while (local_intf_index < local_intf_count) {
3118 uint8_t ssid_len = 0;
3119 proto_tree *local_intf_tree = NULL;
3120 proto_item *itpi = NULL;
3121 unsigned local_intf_offset = offset;
3123 local_intf_tree = proto_tree_add_subtree_format(local_intf_list,
3124 tvb, offset, -1,
3125 ett_ap_operational_bss_intf_tree, &itpi,
3126 "AP operational BSS Interface %u",
3127 local_intf_index);
3129 proto_tree_add_item(local_intf_tree, hf_ieee1905_ap_local_intf_mac_addr,
3130 tvb, offset, 6, ENC_NA);
3131 offset += 6;
3133 ssid_len = tvb_get_uint8(tvb, offset);
3135 proto_tree_add_item(local_intf_tree, hf_ieee1905_ap_local_intf_ssid_len,
3136 tvb, offset, 1, ENC_NA);
3137 offset++;
3139 proto_tree_add_item(local_intf_tree, hf_ieee1905_ap_local_intf_ssid,
3140 tvb, offset, ssid_len, ENC_ASCII);
3141 offset += ssid_len;
3143 proto_item_set_len(itpi, offset - local_intf_offset);
3145 local_intf_index++;
3148 proto_item_set_len(ipi, offset - list_start_offset);
3149 proto_item_set_len(opi, offset - start_offset);
3150 radio_index++;
3153 proto_item_set_len(rpi, offset - saved_offset);
3155 return offset;
3159 * Dissect an Associated Clients TLV
3161 static int
3162 dissect_associated_clients(tvbuff_t *tvb, packet_info *pinfo _U_,
3163 proto_tree *tree, unsigned offset)
3165 uint8_t bss_count = tvb_get_uint8(tvb, offset);
3166 uint8_t bss_index = 0;
3167 proto_tree *bss_list = NULL;
3168 proto_item *pi = NULL;
3169 unsigned saved_offset = 0;
3171 proto_tree_add_item(tree, hf_ieee1905_assoc_clients_bss_count,
3172 tvb, offset, 1, ENC_NA);
3173 offset++;
3175 bss_list = proto_tree_add_subtree(tree, tvb, offset, -1,
3176 ett_assoc_clients_bss_list, &pi,
3177 "Associated BSS list");
3178 saved_offset = offset;
3180 while (bss_index < bss_count) {
3181 proto_tree *bss_tree = NULL, *client_list = NULL;
3182 proto_item *bpi = NULL;
3183 unsigned start_offset = offset;
3184 uint16_t client_count = 0, client_index = 0;
3187 bss_tree = proto_tree_add_subtree_format(bss_list,
3188 tvb, offset, -1,
3189 ett_assoc_client_bss_tree, &bpi,
3190 "Associated BSS %u",
3191 bss_index);
3193 proto_tree_add_item(bss_tree, hf_ieee1905_assoc_bssid, tvb,
3194 offset, 6, ENC_NA);
3195 offset += 6;
3197 client_count = tvb_get_ntohs(tvb, offset);
3198 proto_tree_add_item(bss_tree, hf_ieee1905_bss_client_count,
3199 tvb, offset, 2, ENC_BIG_ENDIAN);
3200 offset += 2;
3202 client_list = proto_tree_add_subtree(bss_tree, tvb, offset,
3203 client_count * 8, ett_assoc_client_list,
3204 NULL, "Associated BSS clients list");
3206 while (client_index < client_count) {
3207 proto_tree *client_tree = NULL;
3209 client_tree = proto_tree_add_subtree_format(client_list, tvb,
3210 offset, 8, ett_assoc_client_tree,
3211 NULL, "Client %u", client_index);
3213 proto_tree_add_item(client_tree, hf_ieee1905_bss_client_mac,
3214 tvb, offset, 6, ENC_NA);
3215 offset += 6;
3217 proto_tree_add_item(client_tree, hf_ieee1905_bss_client_last_assoc,
3218 tvb, offset, 2, ENC_BIG_ENDIAN);
3219 offset += 2;
3221 client_index++;
3224 proto_item_set_len(bpi, offset - start_offset);
3225 bss_index++;
3228 proto_item_set_len(pi, offset - saved_offset);
3230 return offset;
3234 * Dissect an AP Capability TLV
3236 static int
3237 dissect_ap_capability(tvbuff_t *tvb, packet_info *pinfo _U_,
3238 proto_tree *tree, unsigned offset)
3240 static int * const capabilities[] = {
3241 &hf_ieee1905_unassoc_sta_metrics_oper_flag,
3242 &hf_ieee1905_unassoc_sta_metrics_non_oper_flag,
3243 &hf_ieee1905_agent_init_steering,
3244 NULL,
3247 proto_tree_add_bitmask(tree, tvb, offset,
3248 hf_ieee1905_ap_capabilities_flags,
3249 ett_ieee1905_capabilities_flags,
3250 capabilities, ENC_NA);
3251 offset++;
3253 return offset;
3257 * Dissect an AP Radio Basic Capabilities TLV
3259 static int
3260 dissect_ap_radio_basic_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
3261 proto_tree *tree, unsigned offset)
3263 uint8_t classes = 0, class_index = 0;
3264 proto_tree *class_list = NULL;
3265 proto_item *pi = NULL;
3266 unsigned saved_offset = 0;
3268 proto_tree_add_item(tree, hf_ieee1905_ap_radio_identifier, tvb,
3269 offset, 6, ENC_NA);
3270 offset += 6;
3272 proto_tree_add_item(tree, hf_ieee1905_ap_radio_max_bss, tvb,
3273 offset, 1, ENC_NA);
3274 offset++;
3276 classes = tvb_get_uint8(tvb, offset);
3277 proto_tree_add_item(tree, hf_ieee1905_ap_radio_classes, tvb,
3278 offset, 1, ENC_NA);
3279 offset++;
3281 class_list = proto_tree_add_subtree(tree, tvb, offset, -1,
3282 ett_radio_basic_class_list, &pi,
3283 "Supported operating classes list");
3284 saved_offset = offset;
3286 while (class_index < classes) {
3287 proto_tree *class_tree = NULL;
3288 proto_tree *non_op_channel_list = NULL;
3289 proto_item *cpi = NULL;
3290 unsigned class_offset = offset;
3291 uint8_t non_op_channel_count = 0;
3293 class_tree = proto_tree_add_subtree_format(class_list,
3294 tvb, offset, -1,
3295 ett_ap_radio_basic_cap_class_tree, &cpi,
3296 "Operating class %u",
3297 class_index);
3299 proto_tree_add_item(class_tree, hf_ieee1905_ap_radio_class, tvb,
3300 offset, 1, ENC_NA);
3301 offset++;
3303 proto_tree_add_item(class_tree, hf_ieee1905_ap_radio_eirp,
3304 tvb, offset, 1, ENC_NA);
3305 offset++;
3307 non_op_channel_count = tvb_get_uint8(tvb, offset);
3308 proto_tree_add_item(class_tree, hf_ieee1905_ap_radio_non_op_count,
3309 tvb, offset, 1, ENC_NA);
3310 offset++;
3312 if (non_op_channel_count > 0) {
3314 non_op_channel_list = proto_tree_add_subtree(class_tree, tvb, offset,
3315 non_op_channel_count,
3316 ett_radio_basic_non_op_list, NULL,
3317 "Non-operating channel list");
3319 while (non_op_channel_count > 0) {
3320 proto_tree_add_item(non_op_channel_list,
3321 hf_ieee1905_radio_basic_non_op_channel,
3322 tvb, offset, 1, ENC_NA);
3323 offset++;
3325 non_op_channel_count--;
3329 proto_item_set_len(cpi, offset - class_offset);
3330 class_index++;
3333 proto_item_set_len(pi, offset - saved_offset);
3334 return offset;
3338 * Dissect an AP HT Capabilities TLV
3340 static int
3341 dissect_ap_ht_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
3342 proto_tree *tree, unsigned offset)
3344 static int * const capabilities[] = {
3345 &hf_ieee1905_max_supported_tx_streams,
3346 &hf_ieee1905_max_supported_rx_streams,
3347 &hf_ieee1905_short_gi_20mhz_flag,
3348 &hf_ieee1905_short_gi_40mhz_flag,
3349 &hf_ieee1905_ht_support_40mhz_flag,
3350 NULL,
3353 proto_tree_add_item(tree, hf_ieee1905_ap_ht_capabilities_radio_id,
3354 tvb, offset, 6, ENC_NA);
3355 offset += 6;
3357 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee1905_ht_cap_flags,
3358 ett_ht_cap_flags, capabilities, ENC_NA);
3359 offset++;
3361 return offset;
3365 * Dissect an AP VHT Capabilities TLV
3368 static const value_string vht_supported_mcs_vals[] = {
3369 { 0, "Support for VHT-MCS 0-7" },
3370 { 1, "Support for VHT-MCS 0-8" },
3371 { 2, "Support for VHT-MCS 0-9" },
3372 { 3, "Not supported" },
3373 { 0, NULL }
3376 static int * const tx_vht_mcs_map_headers[] = {
3377 &hf_ieee1905_ap_vht_tx_mcs_map_8ss,
3378 &hf_ieee1905_ap_vht_tx_mcs_map_7ss,
3379 &hf_ieee1905_ap_vht_tx_mcs_map_6ss,
3380 &hf_ieee1905_ap_vht_tx_mcs_map_5ss,
3381 &hf_ieee1905_ap_vht_tx_mcs_map_4ss,
3382 &hf_ieee1905_ap_vht_tx_mcs_map_3ss,
3383 &hf_ieee1905_ap_vht_tx_mcs_map_2ss,
3384 &hf_ieee1905_ap_vht_tx_mcs_map_1ss,
3385 NULL
3388 static int * const rx_vht_mcs_map_headers[] = {
3389 &hf_ieee1905_ap_vht_rx_mcs_map_8ss,
3390 &hf_ieee1905_ap_vht_rx_mcs_map_7ss,
3391 &hf_ieee1905_ap_vht_rx_mcs_map_6ss,
3392 &hf_ieee1905_ap_vht_rx_mcs_map_5ss,
3393 &hf_ieee1905_ap_vht_rx_mcs_map_4ss,
3394 &hf_ieee1905_ap_vht_rx_mcs_map_3ss,
3395 &hf_ieee1905_ap_vht_rx_mcs_map_2ss,
3396 &hf_ieee1905_ap_vht_rx_mcs_map_1ss,
3397 NULL
3400 static int
3401 dissect_ap_vht_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
3402 proto_tree *tree, unsigned offset)
3404 static int * const capabilities[] = {
3405 &hf_ieee1905_vht_max_supported_tx_streams,
3406 &hf_ieee1905_vht_max_supported_rx_streams,
3407 &hf_ieee1905_short_gi_80mhz_flag,
3408 &hf_ieee1905_short_gi_160mhz_flag,
3409 &hf_ieee1905_vht_support_80plus_mhz_flag,
3410 &hf_ieee1905_vht_support_160_mhz_flag,
3411 &hf_ieee1905_su_beamformer_capable_flag,
3412 &hf_ieee1905_mu_beamformer_capable_flag,
3413 NULL,
3416 proto_tree_add_item(tree, hf_ieee1905_ap_vht_capabilities_radio_id,
3417 tvb, offset, 6, ENC_NA);
3418 offset += 6;
3420 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
3421 hf_ieee1905_ap_vht_supported_vht_tx_mcs,
3422 ett_ieee1905_ap_vht_tx_mcs_set,
3423 tx_vht_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3424 offset += 2;
3426 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
3427 hf_ieee1905_ap_vht_supported_vht_rx_mcs,
3428 ett_ieee1905_ap_vht_rx_mcs_set,
3429 rx_vht_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3430 offset += 2;
3432 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee1905_vht_cap_flags,
3433 ett_vht_cap_flags, capabilities, ENC_NA);
3434 offset += 2;
3436 return offset;
3440 * Dissect an AP HE Capabilities TLV
3442 static int * const he_capabilities[] = {
3443 &hf_ieee1905_he_max_supported_tx_streams,
3444 &hf_ieee1905_he_max_supported_rx_streams,
3445 &hf_ieee1905_he_support_80plus_mhz_flag,
3446 &hf_ieee1905_he_support_160mhz_flag,
3447 &hf_ieee1905_he_su_beamformer_capable_flag,
3448 &hf_ieee1905_he_mu_beamformer_capable_flag,
3449 &hf_ieee1905_ul_mu_mimo_capable_flag,
3450 &hf_ieee1905_ul_mu_mimo_ofdma_capable_flag,
3451 &hf_ieee1905_dl_mu_mimo_ofdma_capable_flag,
3452 &hf_ieee1905_ul_ofdma_capable,
3453 &hf_ieee1905_dl_ofdma_capable,
3454 NULL,
3457 static const value_string max_he_mcs_1_ss_vals[] = {
3458 { 0, "Support for HE-MCS 0-7 for 1 Spatial Stream" },
3459 { 1, "Support for HE-MCS 0-9 for 1 Spatial Stream" },
3460 { 2, "Support for HE-MCS 0-11 for 1 Spatial Stream" },
3461 { 3, "1 Spatial Stream not supported" },
3462 { 0, NULL }
3465 static const value_string max_he_mcs_2_ss_vals[] = {
3466 { 0, "Support for HE-MCS 0-7 for 2 Spatial Streams" },
3467 { 1, "Support for HE-MCS 0-9 for 2 Spatial Streams" },
3468 { 2, "Support for HE-MCS 0-11 for 2 Spatial Streams" },
3469 { 3, "2 Spatial Streams not supported" },
3470 { 0, NULL }
3473 static const value_string max_he_mcs_3_ss_vals[] = {
3474 { 0, "Support for HE-MCS 0-7 for 3 Spatial Streams" },
3475 { 1, "Support for HE-MCS 0-9 for 3 Spatial Streams" },
3476 { 2, "Support for HE-MCS 0-11 for 3 Spatial Streams" },
3477 { 3, "3 Spatial Streams not supported" },
3478 { 0, NULL }
3481 static const value_string max_he_mcs_4_ss_vals[] = {
3482 { 0, "Support for HE-MCS 0-7 for 4 Spatial Streams" },
3483 { 1, "Support for HE-MCS 0-9 for 4 Spatial Streams" },
3484 { 2, "Support for HE-MCS 0-11 for 4 Spatial Streams" },
3485 { 3, "4 Spatial Streams not supported" },
3486 { 0, NULL }
3489 static const value_string max_he_mcs_5_ss_vals[] = {
3490 { 0, "Support for HE-MCS 0-7 for 5 Spatial Streams" },
3491 { 1, "Support for HE-MCS 0-9 for 5 Spatial Streams" },
3492 { 2, "Support for HE-MCS 0-11 for 5 Spatial Streams" },
3493 { 3, "5 Spatial Streams not supported" },
3494 { 0, NULL }
3497 static const value_string max_he_mcs_6_ss_vals[] = {
3498 { 0, "Support for HE-MCS 0-7 for 6 Spatial Streams" },
3499 { 1, "Support for HE-MCS 0-9 for 6 Spatial Streams" },
3500 { 2, "Support for HE-MCS 0-11 for 6 Spatial Streams" },
3501 { 3, "6 Spatial Streams not supported" },
3502 { 0, NULL }
3505 static const value_string max_he_mcs_7_ss_vals[] = {
3506 { 0, "Support for HE-MCS 0-7 for 7 Spatial Streams" },
3507 { 1, "Support for HE-MCS 0-9 for 7 Spatial Streams" },
3508 { 2, "Support for HE-MCS 0-11 for 7 Spatial Streams" },
3509 { 3, "7 Spatial Streams not supported" },
3510 { 0, NULL }
3513 static const value_string max_he_mcs_8_ss_vals[] = {
3514 { 0, "Support for HE-MCS 0-7 for 8 Spatial Streams" },
3515 { 1, "Support for HE-MCS 0-9 for 8 Spatial Streams" },
3516 { 2, "Support for HE-MCS 0-11 for 8 Spatial Streams" },
3517 { 3, "8 Spatial Streams not supported" },
3518 { 0, NULL }
3521 static int * const rx_he_mcs_map_headers[] = {
3522 &hf_ieee1905_ap_he_rx_mcs_map_8ss,
3523 &hf_ieee1905_ap_he_rx_mcs_map_7ss,
3524 &hf_ieee1905_ap_he_rx_mcs_map_6ss,
3525 &hf_ieee1905_ap_he_rx_mcs_map_5ss,
3526 &hf_ieee1905_ap_he_rx_mcs_map_4ss,
3527 &hf_ieee1905_ap_he_rx_mcs_map_3ss,
3528 &hf_ieee1905_ap_he_rx_mcs_map_2ss,
3529 &hf_ieee1905_ap_he_rx_mcs_map_1ss,
3530 NULL
3533 static int * const tx_he_mcs_map_headers[] = {
3534 &hf_ieee1905_ap_he_tx_mcs_map_8ss,
3535 &hf_ieee1905_ap_he_tx_mcs_map_7ss,
3536 &hf_ieee1905_ap_he_tx_mcs_map_6ss,
3537 &hf_ieee1905_ap_he_tx_mcs_map_5ss,
3538 &hf_ieee1905_ap_he_tx_mcs_map_4ss,
3539 &hf_ieee1905_ap_he_tx_mcs_map_3ss,
3540 &hf_ieee1905_ap_he_tx_mcs_map_2ss,
3541 &hf_ieee1905_ap_he_tx_mcs_map_1ss,
3542 NULL
3545 static int
3546 dissect_ap_he_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
3547 proto_tree *tree, unsigned offset)
3549 uint8_t he_mcs_len = 0;
3551 proto_tree_add_item(tree, hf_ieee1905_ap_he_cap_radio_id, tvb,
3552 offset, 6, ENC_NA);
3553 offset += 6;
3555 he_mcs_len = tvb_get_uint8(tvb, offset);
3556 proto_tree_add_item(tree, hf_ieee1905_ap_he_cap_mcs_length, tvb,
3557 offset, 1, ENC_NA);
3558 offset++;
3561 * If the count is not 4, 8, or 12, it is an error.
3563 if (he_mcs_len != 4 && he_mcs_len != 8 && he_mcs_len != 12) {
3565 } else {
3566 proto_tree *mcs_set = NULL;
3568 mcs_set = proto_tree_add_subtree(tree, tvb, offset, 4,
3569 ett_ap_he_mcs_set, NULL,
3570 "Supported HE-MCS and NSS Set <= 80 MHz");
3572 proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
3573 hf_ieee1905_ap_he_cap_tx_mcs_le_80_mhz,
3574 ett_ieee1905_ap_he_tx_mcs_set,
3575 tx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3576 offset += 2;
3578 proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
3579 hf_ieee1905_ap_he_cap_rx_mcs_le_80_mhz,
3580 ett_ieee1905_ap_he_rx_mcs_set,
3581 rx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3582 offset += 2;
3584 if (he_mcs_len > 4) {
3585 mcs_set = proto_tree_add_subtree(tree, tvb, offset, 4,
3586 ett_ap_he_mcs_set, NULL,
3587 "Supported HE-MCS and NSS Set 160 MHz");
3589 proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
3590 hf_ieee1905_ap_he_cap_tx_mcs_160_mhz,
3591 ett_ieee1905_ap_he_tx_mcs_set,
3592 tx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3593 offset += 2;
3595 proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
3596 hf_ieee1905_ap_he_cap_rx_mcs_160_mhz,
3597 ett_ieee1905_ap_he_rx_mcs_set,
3598 rx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3599 offset += 2;
3602 if (he_mcs_len > 8) {
3603 mcs_set = proto_tree_add_subtree(tree, tvb, offset, 4,
3604 ett_ap_he_mcs_set, NULL,
3605 "Supported HE-MCS and NSS Set 80+80 MHz");
3607 proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
3608 hf_ieee1905_ap_he_cap_tx_mcs_80p80_mhz,
3609 ett_ieee1905_ap_he_tx_mcs_set,
3610 tx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3611 offset += 2;
3613 proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
3614 hf_ieee1905_ap_he_cap_rx_mcs_80p80_mhz,
3615 ett_ieee1905_ap_he_rx_mcs_set,
3616 rx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
3617 offset += 2;
3621 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee1905_he_cap_flags,
3622 ett_ap_he_cap_flags, he_capabilities,
3623 ENC_BIG_ENDIAN);
3624 offset += 2;
3626 return offset;
3630 * Dissect a Steering Policy TLV
3632 static int
3633 dissect_steering_policy(tvbuff_t *tvb, packet_info *pinfo _U_,
3634 proto_tree *tree, unsigned offset, uint16_t len _U_)
3636 uint8_t steering_disallowed_count = tvb_get_uint8(tvb, offset);
3637 uint8_t btm_steering_disallowed_count = 0;
3638 uint8_t radio_count = 0, radio_index = 0;
3640 proto_tree_add_item(tree, hf_ieee1905_steering_policy_local_disallowed_count,
3641 tvb, offset, 1, ENC_NA);
3642 offset++;
3644 if (steering_disallowed_count) {
3645 proto_tree *disallowed_list = NULL;
3647 disallowed_list = proto_tree_add_subtree(tree, tvb, offset,
3648 steering_disallowed_count * 6,
3649 ett_steering_policy_disallowed_list, NULL,
3650 "Steering disallowed STA list");
3652 while (steering_disallowed_count > 0) {
3653 proto_tree_add_item(disallowed_list,
3654 hf_ieee1905_steering_disallowed_mac_addr,
3655 tvb, offset, 6, ENC_NA);
3656 offset += 6;
3657 steering_disallowed_count--;
3661 btm_steering_disallowed_count = tvb_get_uint8(tvb, offset);
3662 proto_tree_add_item(tree, hf_ieee1905_btm_steering_disallowed_count,
3663 tvb, offset, 1, ENC_NA);
3664 offset++;
3666 if (btm_steering_disallowed_count > 0) {
3667 proto_tree *btm_disallowed_list = NULL;
3669 btm_disallowed_list = proto_tree_add_subtree(tree, tvb, offset,
3670 btm_steering_disallowed_count * 6,
3671 ett_btm_steering_policy_disallowed_list, NULL,
3672 "BTM steering disallowed STA list");
3674 while (btm_steering_disallowed_count > 0) {
3676 proto_tree_add_item(btm_disallowed_list,
3677 hf_ieee1905_btm_steering_disallowed_mac_addr,
3678 tvb, offset, 6, ENC_NA);
3679 offset += 6;
3681 btm_steering_disallowed_count--;
3685 radio_count = tvb_get_uint8(tvb, offset);
3686 proto_tree_add_item(tree, hf_ieee1905_steering_policy_radio_count,
3687 tvb, offset, 1, ENC_NA);
3688 offset++;
3690 if (radio_count > 0) {
3691 proto_tree *policy_list = NULL;
3693 policy_list = proto_tree_add_subtree(tree, tvb, offset,
3694 radio_count * 9,
3695 ett_btm_steering_radio_list, NULL,
3696 "BTM steering policy radio list");
3698 while (radio_index < radio_count) {
3699 proto_tree *policy_tree = NULL;
3700 proto_item *pi = NULL;
3701 uint8_t policy = 0;
3703 policy_tree = proto_tree_add_subtree_format(policy_list,
3704 tvb, offset, 9,
3705 ett_ap_operational_bss_intf_tree, NULL,
3706 "Radio %u", radio_index);
3708 proto_tree_add_item(policy_tree, hf_ieee1905_steering_policy_radio_id,
3709 tvb, offset, 6, ENC_NA);
3710 offset += 6;
3712 policy = tvb_get_uint8(tvb, offset);
3713 pi = proto_tree_add_item(policy_tree, hf_ieee1905_steering_policy_policy,
3714 tvb, offset, 1, ENC_NA);
3715 proto_item_append_text(pi, ", %s",
3716 val_to_str(policy,
3717 ieee1905_steering_policy_vals,
3718 "Reserved"));
3719 offset++;
3721 proto_tree_add_item(policy_tree, hf_ieee1905_steering_policy_util,
3722 tvb, offset, 1, ENC_NA);
3723 offset++;
3725 proto_tree_add_item(policy_tree,
3726 hf_ieee1905_steering_policy_rcpi_threshold,
3727 tvb, offset, 1, ENC_NA);
3728 offset++;
3730 radio_index++;
3735 return offset;
3738 static void
3739 rcpi_threshold_custom(char *result, uint8_t rcpi_threshold)
3741 if (rcpi_threshold == 0) {
3742 snprintf(result, ITEM_LABEL_LENGTH, "Do not report STA Metrics based on RCPI threshold");
3743 } else if (rcpi_threshold > 0 && rcpi_threshold < 220) {
3744 snprintf(result, ITEM_LABEL_LENGTH, "RCPI Threshold = %.1fdBm",
3745 (float)rcpi_threshold/2 - 110);
3746 } else if (rcpi_threshold == 220) {
3747 snprintf(result, ITEM_LABEL_LENGTH, "RCPI Threshold >= 0dBm");
3748 } else {
3749 snprintf(result, ITEM_LABEL_LENGTH, "Reserved");
3753 static void
3754 rcpi_hysteresis_custom(char *result, uint8_t rcpi_hysteresis)
3756 if (rcpi_hysteresis == 0) {
3757 snprintf(result, ITEM_LABEL_LENGTH, "Use Agent's implementation-specific default RCPI Hysteresis margin");
3758 } else {
3759 snprintf(result, ITEM_LABEL_LENGTH, "%udB", rcpi_hysteresis);
3764 * Dissect a Metric Reporting Policy TLV
3766 static int
3767 dissect_metric_reporting_policy(tvbuff_t *tvb, packet_info *pinfo _U_,
3768 proto_tree *tree, unsigned offset)
3770 uint8_t radio_count = 0, radio_index = 0;
3771 proto_tree *radio_list = NULL;
3772 proto_tree *radio_tree = NULL;
3773 proto_item *pi = NULL;
3774 unsigned saved_offset = 0;
3775 static int * const ieee1905_reporting_policy_flags[] = {
3776 &hf_ieee1905_assoc_sta_traffic_stats_inclusion,
3777 &hf_ieee1905_assoc_sta_link_metrics_inclusion,
3778 &hf_ieee1905_assoc_wf6_status_policy_inclusion,
3779 &hf_ieee1905_reporting_policy_flags_reserved,
3780 NULL
3783 proto_tree_add_item(tree, hf_ieee1905_ap_metrics_reporting_interval,
3784 tvb, offset, 1, ENC_NA);
3785 offset++;
3787 radio_count = tvb_get_uint8(tvb, offset);
3788 proto_tree_add_item(tree, hf_ieee1905_metric_reporting_radio_count,
3789 tvb, offset, 1, ENC_NA);
3790 offset++;
3792 if (radio_count == 0)
3793 return offset;
3795 radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
3796 ett_metric_reporting_policy_list, &pi,
3797 "Metric reporting policy list");
3798 saved_offset = offset;
3800 while (radio_index < radio_count) {
3801 radio_tree = proto_tree_add_subtree_format(radio_list,
3802 tvb, offset, 8,
3803 ett_metric_reporting_policy_tree, NULL,
3804 "Reporting policy for radio %u",
3805 radio_index);
3807 proto_tree_add_item(radio_tree, hf_ieee1905_metric_reporting_policy_radio_id,
3808 tvb, offset, 6, ENC_NA);
3809 offset += 6;
3811 proto_tree_add_item(radio_tree, hf_ieee1905_metric_rcpi_threshold, tvb,
3812 offset, 1, ENC_NA);
3813 offset++;
3815 proto_tree_add_item(radio_tree, hf_ieee1905_metric_reporting_rcpi_hysteresis,
3816 tvb, offset, 1, ENC_NA);
3817 offset++;
3819 proto_tree_add_item(radio_tree, hf_ieee1905_metrics_channel_util_threshold,
3820 tvb, offset, 1, ENC_NA);
3821 offset++;
3823 proto_tree_add_bitmask_with_flags(radio_tree, tvb, offset,
3824 hf_ieee1905_metrics_policy_flags,
3825 ett_metric_policy_flags,
3826 ieee1905_reporting_policy_flags, ENC_NA,
3827 BMT_NO_APPEND);
3828 offset++;
3830 radio_index++;
3833 proto_item_set_len(pi, offset - saved_offset);
3835 return offset;
3839 * Dissect a Channel Preference TLV
3841 static int
3842 dissect_channel_preference(tvbuff_t *tvb, packet_info *pinfo,
3843 proto_tree *tree, unsigned offset, uint16_t len)
3845 uint8_t operating_classes = 0, operating_index = 0;
3846 proto_tree *class_list = NULL;
3847 proto_item *pi = NULL;
3848 unsigned saved_offset = 0;
3849 static int * const preference[] = {
3850 &hf_ieee1905_channel_pref_preference,
3851 &hf_ieee1905_channel_pref_reason,
3852 NULL,
3855 if (len < 6) {
3856 expert_add_info(pinfo, tree, &ei_ieee1905_malformed_tlv);
3857 return offset + len;
3860 proto_tree_add_item(tree, hf_ieee1905_channel_preference_radio_id,
3861 tvb, offset, 6, ENC_NA);
3862 offset += 6;
3864 if (len < 7) {
3865 expert_add_info(pinfo, tree, &ei_ieee1905_malformed_tlv);
3866 return offset;
3869 operating_classes = tvb_get_uint8(tvb, offset);
3870 proto_tree_add_item(tree, hf_ieee1905_channel_preference_class_count,
3871 tvb, offset, 1, ENC_NA);
3872 offset++;
3874 if (operating_classes == 0)
3875 return offset;
3877 class_list = proto_tree_add_subtree(tree, tvb, offset, -1,
3878 ett_channel_preference_class_list, &pi,
3879 "Supported operating classes list");
3880 saved_offset = offset;
3883 * There should be at least 2 more bytes here ... add some more expert
3884 * info soon.
3887 while (operating_index < operating_classes) {
3888 proto_tree *class_tree = NULL;
3889 proto_item *cpi = NULL;
3890 uint8_t channels = 0;
3891 unsigned start_offset = offset;
3893 class_tree = proto_tree_add_subtree_format(class_list,
3894 tvb, offset, -1,
3895 ett_ap_channel_preference_class_tree, &cpi,
3896 "Operating class %u",
3897 operating_index);
3899 proto_tree_add_item(class_tree, hf_ieee1905_channel_pref_class,
3900 tvb, offset, 1, ENC_NA);
3901 offset++;
3903 channels = tvb_get_uint8(tvb, offset);
3904 proto_tree_add_item(class_tree, hf_ieee1905_channel_pref_channel_count,
3905 tvb, offset, 1, ENC_NA);
3906 offset++;
3908 if (channels > 0) {
3909 proto_tree *channel_list = NULL;
3911 channel_list = proto_tree_add_subtree(class_tree, tvb, offset,
3912 channels,
3913 ett_channel_pref_channel_list, NULL,
3914 "Channel list");
3916 while (channels > 0) {
3917 proto_tree_add_item(channel_list,
3918 hf_ieee1905_channel_pref_channel,
3919 tvb, offset, 1, ENC_NA);
3920 offset++;
3922 channels--;
3927 proto_tree_add_bitmask(class_tree, tvb, offset,
3928 hf_ieee1905_channel_prefs_flags,
3929 ett_ieee1905_channel_prefs_flags,
3930 preference, ENC_NA);
3931 offset++;
3933 proto_item_set_len(cpi, offset - start_offset);
3935 operating_index++;
3938 proto_item_set_len(pi, offset - saved_offset);
3940 return offset;
3944 * Dissect a Radio Operation Restriction TLV
3946 static int
3947 dissect_radio_operation_restriction(tvbuff_t *tvb, packet_info *pinfo _U_,
3948 proto_tree *tree, unsigned offset, uint16_t len _U_)
3950 uint8_t op_class_count = 0, op_class_index = 0;
3951 proto_tree *op_class_list = NULL, *op_class_tree = NULL;
3952 proto_item *pi = NULL;
3953 unsigned saved_offset = 0;
3955 proto_tree_add_item(tree, hf_ieee1905_radio_restriction_radio_id,
3956 tvb, offset, 6, ENC_NA);
3957 offset += 6;
3959 op_class_count = tvb_get_uint8(tvb, offset);
3960 proto_tree_add_item(tree, hf_ieee1905_radio_restriction_op_class_count,
3961 tvb, offset, 1, ENC_NA);
3962 offset++;
3964 if (op_class_count == 0)
3965 return offset;
3967 op_class_list = proto_tree_add_subtree(tree, tvb, offset, -1,
3968 ett_radio_restriction_op_class_list, &pi,
3969 "Restricted operating class list");
3970 saved_offset = offset;
3972 while (op_class_index < op_class_count) {
3973 proto_item *ocpi = NULL;
3974 proto_tree *channel_list = NULL, *channel_tree = NULL;
3975 unsigned start_offset = offset;
3976 uint8_t channel_count = 0, channel_index = 0;
3978 op_class_tree = proto_tree_add_subtree_format(op_class_list,
3979 tvb, offset, -1,
3980 ett_radio_restriction_op_class_tree, &ocpi,
3981 "Operating class %u",
3982 op_class_index);
3984 proto_tree_add_item(op_class_tree, hf_ieee1905_radio_restriction_op_class,
3985 tvb, offset, 1, ENC_NA);
3986 offset++;
3988 channel_count = tvb_get_uint8(tvb, offset);
3989 proto_tree_add_item(op_class_tree, hf_ieee1905_radio_restriction_chan_count,
3990 tvb, offset, 1, ENC_NA);
3991 offset++;
3993 if (channel_count == 0) {
3994 proto_item_set_len(ocpi, offset - start_offset);
3995 op_class_index++;
3996 continue;
3999 channel_list = proto_tree_add_subtree(op_class_tree, tvb, offset, channel_count * 2,
4000 ett_radio_restriction_channel_list, NULL,
4001 "Restricted channel(s) list");
4003 while (channel_index < channel_count) {
4004 uint8_t separation = 0;
4005 unsigned sep_mhz = 0;
4007 channel_tree = proto_tree_add_subtree_format(channel_list,
4008 tvb, offset, 2,
4009 ett_radio_restriction_channel_tree, NULL,
4010 "Channel restriction %u",
4011 channel_index);
4013 proto_tree_add_item(channel_tree, hf_ieee1905_radio_restriction_channel,
4014 tvb, offset, 1, ENC_NA);
4015 offset++;
4017 separation = tvb_get_uint8(tvb, offset);
4018 sep_mhz = separation * 10;
4019 proto_tree_add_uint_format(channel_tree,
4020 hf_ieee1905_radio_restriction_min_separation,
4021 tvb, offset, 1, separation,
4022 "Min frequency separation: %dMHz", sep_mhz);
4023 offset++;
4025 channel_index++;
4028 proto_item_set_len(ocpi, offset - start_offset);
4029 op_class_index++;
4032 proto_item_set_len(pi, offset - saved_offset);
4034 return offset;
4038 * Dissect a Transmit Power Limit TLV
4040 static int
4041 dissect_transmit_power_limit(tvbuff_t *tvb, packet_info *pinfo _U_,
4042 proto_tree *tree, unsigned offset)
4044 proto_tree_add_item(tree, hf_ieee1905_trans_power_limit_radio_id,
4045 tvb, offset, 6, ENC_NA);
4046 offset += 6;
4048 proto_tree_add_item(tree, hf_ieee1905_trans_power_limit_eirp,
4049 tvb, offset, 1, ENC_NA);
4050 offset++;
4052 return offset;
4056 * Dissect a Channel Selection Response TLV
4058 static int
4059 dissect_channel_selection_response(tvbuff_t *tvb, packet_info *pinfo _U_,
4060 proto_tree *tree, unsigned offset)
4062 uint8_t response_code = 0;
4063 proto_item *pi = NULL;
4065 proto_tree_add_item(tree, hf_ieee1905_channel_select_resp_radio_id,
4066 tvb, offset, 6, ENC_NA);
4067 offset += 6;
4069 response_code = tvb_get_uint8(tvb, offset);
4070 pi = proto_tree_add_item(tree, hf_ieee1905_channel_select_resp_code, tvb,
4071 offset, 1, ENC_NA);
4072 proto_item_append_text(pi, ", %s",
4073 val_to_str(response_code,
4074 ieee1905_channel_select_resp_code_vals,
4075 "Reserved"));
4076 offset++;
4078 return offset;
4082 * Dissect an Operaring Channel Report TLV
4084 static int
4085 dissect_operating_channel_report(tvbuff_t *tvb, packet_info *pinfo _U_,
4086 proto_tree *tree, unsigned offset)
4088 uint8_t class_count = 0, class_index = 0;
4089 proto_tree *class_list = NULL, *class_tree = NULL;
4091 proto_tree_add_item(tree, hf_ieee1905_op_channel_report_radio_id,
4092 tvb, offset, 6, ENC_NA);
4093 offset += 6;
4095 class_count = tvb_get_uint8(tvb, offset);
4096 proto_tree_add_item(tree, hf_ieee1905_op_channel_report_classes,
4097 tvb, offset, 1, ENC_NA);
4098 offset++;
4100 if (class_count > 0) {
4102 class_list = proto_tree_add_subtree(tree, tvb, offset, 2 * class_count,
4103 ett_op_channel_report_class_list, NULL,
4104 "Operating classes list");
4106 while (class_index < class_count) {
4107 class_tree = proto_tree_add_subtree_format(class_list, tvb,
4108 offset, 2, ett_op_channel_report_class_tree,
4109 NULL, "Operating class %u", class_index);
4111 proto_tree_add_item(class_tree, hf_ieee1905_op_channel_class,
4112 tvb, offset, 1, ENC_NA);
4113 offset++;
4115 proto_tree_add_item(class_tree, hf_ieee1905_op_channel_number,
4116 tvb, offset, 1, ENC_NA);
4117 offset++;
4119 class_index++;
4123 proto_tree_add_item(tree, hf_ieee1905_op_channel_eirp, tvb,
4124 offset, 1, ENC_NA);
4125 offset++;
4127 return offset;
4131 * Dissect a Higher Layer Data TLV
4133 static int
4134 dissect_higher_layer_data(tvbuff_t *tvb, packet_info *pinfo _U_,
4135 proto_tree *tree, unsigned offset, uint16_t len)
4137 uint8_t protocol = tvb_get_uint8(tvb, offset);
4138 proto_item *pi = NULL;
4140 pi = proto_tree_add_item(tree, hf_ieee1905_higher_layer_protocol,
4141 tvb, offset, 1, ENC_NA);
4143 proto_item_append_text(pi, ", %s",
4144 val_to_str(protocol,
4145 ieee1905_higher_layer_protocol_vals,
4146 "Reserved"));
4147 offset++;
4149 proto_tree_add_item(tree, hf_ieee1905_higher_layer_data, tvb,
4150 offset, len - 1, ENC_NA);
4151 offset += len - 1;
4153 return offset;
4157 * Dissect an unassociated sta link metric response TLV
4159 static int
4160 dissect_unassociated_sta_link_metric_response(tvbuff_t *tvb, packet_info *pinfo _U_,
4161 proto_tree *tree, unsigned offset, uint16_t len _U_)
4163 uint8_t sta_count = 0, sta_index = 0;
4164 proto_tree *sta_list = NULL;
4166 proto_tree_add_item(tree, hf_ieee1905_unassoc_sta_link_metric_op_class,
4167 tvb, offset, 1, ENC_NA);
4168 offset++;
4170 sta_count = tvb_get_uint8(tvb, offset);
4171 proto_tree_add_item(tree, hf_ieee1905_unassoc_sta_link_metric_sta_count,
4172 tvb, offset, 1, ENC_NA);
4173 offset++;
4175 sta_list = proto_tree_add_subtree(tree, tvb, offset, sta_count * 12,
4176 ett_unassoc_sta_link_metric_list, NULL,
4177 "Unassociated STA list");
4179 while (sta_index < sta_count) {
4180 proto_tree *sta_tree = NULL;
4182 sta_tree = proto_tree_add_subtree_format(sta_list, tvb,
4183 offset, 12, ett_unassoc_sta_link_metric_tree,
4184 NULL, "STA %u", sta_index);
4186 proto_tree_add_item(sta_tree, hf_ieee1905_unassoc_link_metric_mac_addr,
4187 tvb, offset, 6, ENC_NA);
4188 offset += 6;
4190 proto_tree_add_item(sta_tree, hf_ieee1905_unassoc_link_metric_channel,
4191 tvb, offset, 1, ENC_NA);
4192 offset++;
4194 proto_tree_add_item(sta_tree, hf_ieee1905_unassoc_link_metric_delta,
4195 tvb, offset, 4, ENC_BIG_ENDIAN);
4196 offset += 4;
4198 proto_tree_add_item(sta_tree, hf_ieee1905_unassoc_link_metric_uplink_rcpi,
4199 tvb, offset, 1, ENC_NA);
4200 offset++;
4202 sta_index++;
4205 return offset;
4209 * Dissect a Steering request TLV
4211 static int * const steering_flags[] = {
4212 &hf_ieee1905_steering_request_mode_flag,
4213 &hf_ieee1905_btm_disassoc_imminent_flag,
4214 &hf_ieee1905_btm_abridged_flag,
4215 &hf_ieee1905_steering_req_reserved,
4216 NULL,
4219 static int
4220 dissect_steering_request(tvbuff_t *tvb, packet_info *pinfo,
4221 proto_tree *tree, unsigned offset, uint16_t len)
4223 uint8_t mode = 0;
4224 uint8_t steering_count = 0;
4225 proto_item *pi = NULL;
4226 proto_tree *sta_list = NULL, *bssid_list = NULL;
4227 uint8_t target_bssid_count = 0;
4228 unsigned start_offset = offset;
4230 proto_tree_add_item(tree, hf_ieee1905_source_bss_bssid, tvb, offset,
4231 6, ENC_NA);
4232 offset += 6;
4234 mode = tvb_get_uint8(tvb, offset);
4235 proto_tree_add_bitmask(tree, tvb, offset,
4236 hf_ieee1905_steering_request_flags,
4237 ett_ieee1905_steering_request_flags,
4238 steering_flags, ENC_NA);
4239 offset++;
4241 /* If Request Mode is 1, this field is ignored. */
4242 proto_tree_add_item(tree, hf_ieee1905_steering_req_op_window,
4243 tvb, offset, 2, ENC_BIG_ENDIAN);
4244 offset += 2;
4246 proto_tree_add_item(tree, hf_ieee1905_steering_btm_disass_timer,
4247 tvb, offset, 2, ENC_BIG_ENDIAN);
4248 offset += 2;
4250 steering_count = tvb_get_uint8(tvb, offset);
4251 pi = proto_tree_add_item(tree, hf_ieee1905_steering_req_sta_count,
4252 tvb, offset, 1, ENC_NA);
4253 offset++;
4255 if (steering_count > 0) {
4256 sta_list = proto_tree_add_subtree(tree, tvb, offset, steering_count * 6,
4257 ett_assoc_control_list, NULL,
4258 "Steering request MAC list");
4260 while (steering_count > 0) {
4261 proto_tree_add_item(sta_list, hf_ieee1905_steering_req_sta_mac,
4262 tvb, offset, 6, ENC_NA);
4263 offset += 6;
4265 steering_count--;
4269 } else {
4270 proto_item_append_text(pi, " (Request applies to all STA(s) in BSS)");
4274 * These fields only appear if Request mode is one.
4276 if (mode & 0x80) {
4277 target_bssid_count = tvb_get_uint8(tvb, offset);
4278 proto_tree_add_item(tree, hf_ieee1905_steering_req_target_bssid_count,
4279 tvb, offset, 1, ENC_NA);
4280 offset++;
4282 bssid_list = proto_tree_add_subtree(tree, tvb, offset,
4283 target_bssid_count * 8,
4284 ett_assoc_control_list, NULL,
4285 "Target BSSID list");
4287 while (target_bssid_count > 0) {
4288 /* Have to add a tree here ... */
4289 proto_tree_add_item(bssid_list,
4290 hf_ieee1905_steering_req_target_bssid,
4291 tvb, offset, 6, ENC_NA);
4292 offset += 6;
4294 proto_tree_add_item(bssid_list,
4295 hf_ieee1905_steering_req_oper_class,
4296 tvb, offset, 1, ENC_NA);
4297 offset++;
4299 proto_tree_add_item(bssid_list,
4300 hf_ieee1905_steering_req_target_channel,
4301 tvb, offset, 1, ENC_NA);
4302 offset++;
4304 target_bssid_count--;
4308 if ((offset - start_offset) < len) {
4309 proto_item *ei = NULL;
4311 ei = proto_tree_add_item(tree, hf_ieee1905_extra_tlv_data, tvb, offset,
4312 len - (offset - start_offset), ENC_NA);
4313 expert_add_info(pinfo, ei, &ei_ieee1905_extraneous_tlv_data);
4314 offset = start_offset + len; /* Skip the extras. */
4316 return offset;
4320 * Dissect a Steering BTM report TLV
4322 static int
4323 dissect_steering_btm_report(tvbuff_t *tvb, packet_info *pinfo _U_,
4324 proto_tree *tree, unsigned offset, uint16_t len)
4326 proto_tree_add_item(tree, hf_ieee1905_btm_reporter_bssid, tvb, offset,
4327 6, ENC_NA);
4328 offset += 6;
4330 proto_tree_add_item(tree, hf_ieee1905_btm_sta_mac_addr, tvb, offset,
4331 6, ENC_NA);
4332 offset += 6;
4334 proto_tree_add_item(tree, hf_ieee1905_btm_report_status, tvb, offset,
4335 1, ENC_NA);
4336 offset++;
4339 * Handle the BSSID if present. Not sure which status values indicate
4340 * its presence. 13 is the number of bytes already dissected above.
4342 if (len >= 13 + 6) {
4343 proto_tree_add_item(tree, hf_ieee1905_btm_report_bssid, tvb, offset,
4344 len - 13, ENC_NA);
4345 offset += len - 13; /* Should check for more entries ... */
4348 return offset;
4352 * Dissect a Client association control request TLV
4354 static int
4355 dissect_client_association_control_request(tvbuff_t *tvb, packet_info *pinfo _U_,
4356 proto_tree *tree, unsigned offset)
4358 unsigned sta_list_count = 0;
4359 unsigned control = 0;
4360 proto_tree *sta_list = NULL;
4361 proto_item *pi = NULL;
4363 proto_tree_add_item(tree, hf_ieee1905_client_assoc_bssid, tvb, offset,
4364 6, ENC_NA);
4365 offset += 6;
4367 control = tvb_get_uint8(tvb, offset);
4368 pi = proto_tree_add_item(tree, hf_ieee1905_association_control, tvb,
4369 offset, 1, ENC_NA);
4370 proto_item_append_text(pi, ", %s",
4371 val_to_str(control,
4372 ieee1905_association_control_vals,
4373 "Reserved"));
4374 offset++;
4376 pi = proto_tree_add_item(tree, hf_ieee1905_association_control_validity,
4377 tvb, offset, 2, ENC_BIG_ENDIAN);
4378 proto_item_append_text(pi, " seconds");
4379 offset += 2;
4381 sta_list_count = tvb_get_uint8(tvb, offset);
4382 proto_tree_add_item(tree, hf_ieee1905_client_assoc_sta_count, tvb,
4383 offset, 1, ENC_NA);
4384 offset++;
4386 sta_list = proto_tree_add_subtree(tree, tvb, offset, sta_list_count * 6,
4387 ett_assoc_control_list, NULL,
4388 "Client association control MAC list");
4390 while (sta_list_count > 0) {
4391 proto_tree_add_item(sta_list, hf_ieee1905_client_assoc_mac_addr,
4392 tvb, offset, 6, ENC_NA);
4393 offset += 6;
4395 sta_list_count--;
4398 return offset;
4402 * Dissect a Beacon Metrics Query TLV
4404 static int
4405 dissect_beacon_metrics_query(tvbuff_t *tvb, packet_info *pinfo _U_,
4406 proto_tree *tree, unsigned offset, uint16_t len _U_)
4408 uint8_t ssid_len = 0;
4409 uint8_t channel_count = 0, channel_index = 0;
4410 unsigned saved_offset = 0;
4411 proto_tree *channel_report_list = NULL;
4412 proto_item *pi = NULL;
4414 proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_mac_addr,
4415 tvb, offset, 6, ENC_NA);
4416 offset += 6;
4418 proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_op_class,
4419 tvb, offset, 1, ENC_NA);
4420 offset++;
4422 proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_channel,
4423 tvb, offset, 1, ENC_NA);
4424 offset++;
4426 proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_bssid,
4427 tvb, offset, 6, ENC_NA);
4428 offset += 6;
4430 proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_detail,
4431 tvb, offset, 1, ENC_NA);
4432 offset++;
4434 ssid_len = tvb_get_uint8(tvb, offset);
4435 proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_ssid_len,
4436 tvb, offset, 1, ENC_NA);
4437 offset++;
4439 proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_query_ssid,
4440 tvb, offset, ssid_len, ENC_ASCII);
4441 offset += ssid_len;
4444 * This field should only be non-zero if query_channel above is
4445 * not 255 ... should check
4447 channel_count = tvb_get_uint8(tvb, offset);
4448 proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_channel_count,
4449 tvb, offset, 1, ENC_NA);
4450 offset++;
4452 channel_report_list = proto_tree_add_subtree(tree, tvb, offset, -1,
4453 ett_beacon_metrics_query_list, &pi,
4454 "Channel report list");
4455 saved_offset = offset;
4457 while (channel_index < channel_count) {
4458 uint8_t report_len = 0, report_index = 0;
4459 proto_tree *channel_report_tree = NULL;
4460 proto_item *lpi = NULL;
4461 unsigned start_offset = offset;
4462 proto_tree *channel_list = NULL;
4464 channel_report_tree = proto_tree_add_subtree_format(channel_report_list, tvb,
4465 offset, -1, ett_beacon_metrics_query_tree,
4466 &lpi, "Channel report %u", channel_index);
4468 report_len = tvb_get_uint8(tvb, offset);
4469 proto_tree_add_item(channel_report_tree,
4470 hf_ieee1905_beacon_metrics_report_len,
4471 tvb, offset, 1, ENC_NA);
4472 offset++;
4474 proto_tree_add_item(channel_report_tree,
4475 hf_ieee1905_beacon_metrics_report_op_class,
4476 tvb, offset, 1, ENC_NA);
4477 offset++;
4479 channel_list = proto_tree_add_subtree(channel_report_tree, tvb, offset,
4480 report_len - 1,
4481 ett_beacon_metrics_query_channel_list, NULL,
4482 "Channel report list");
4483 while (report_index < report_len - 1) {
4484 proto_tree_add_item(channel_list,
4485 hf_ieee1905_beacon_metrics_report_channel_id,
4486 tvb, offset, 1, ENC_NA);
4487 offset++;
4489 report_index++;
4492 proto_item_set_len(lpi, offset - start_offset);
4494 channel_index++;
4497 proto_item_set_len(pi, offset - saved_offset);
4499 return offset;
4503 * Dissect a measurement report. This should go into ieee80211.c but not
4504 * for now. We expect a new TVB that contains only one measurement report.
4506 static int
4507 dissect_measurement_report(tvbuff_t *tvb, packet_info *pinfo _U_,
4508 proto_tree *tree)
4510 int offset = 0;
4511 unsigned rep_len = tvb_reported_length_remaining(tvb, offset);
4513 proto_tree_add_item(tree, hf_ieee1905_measurement_report, tvb, offset,
4514 rep_len, ENC_NA);
4515 offset += rep_len;
4517 return offset;
4521 * Dissect a Beacon Metrics Response TLV
4523 static int
4524 dissect_beacon_metrics_response(tvbuff_t *tvb, packet_info *pinfo,
4525 proto_tree *tree, unsigned offset, uint16_t len _U_)
4527 uint8_t report_index = 0;
4528 proto_item *pi = NULL;
4529 proto_tree *report_list = NULL;
4530 unsigned saved_offset = 0;
4531 uint8_t meas_count = 0;
4533 proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_response_mac_addr,
4534 tvb, offset, 6, ENC_NA);
4535 offset += 6;
4537 pi = proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_response_reserved,
4538 tvb, offset, 1, ENC_NA);
4539 offset++;
4541 meas_count = tvb_get_uint8(tvb, offset);
4542 pi = proto_tree_add_item(tree, hf_ieee1905_beacon_metrics_response_meas_num,
4543 tvb, offset, 1, ENC_NA);
4544 offset++;
4546 /* Now, the report(s) ... */
4547 report_list = proto_tree_add_subtree(tree, tvb, offset, -1,
4548 ett_beacon_metrics_response_report_list, &pi,
4549 "Measurement report list");
4550 saved_offset = offset;
4552 while (meas_count > 0) {
4553 proto_tree *report_tree = NULL;
4554 proto_item *lpi = NULL;
4555 tvbuff_t *new_tvb = NULL;
4556 uint8_t new_len = 0;
4558 report_tree = proto_tree_add_subtree_format(report_list, tvb,
4559 offset, -1,
4560 ett_beacon_metrics_response_report_tree,
4561 &lpi, "Beacon report %u", report_index);
4564 * This is a measurement report, so the elt-id must be 39. The length
4565 * is the next field. Create a new TVB?
4567 new_len = tvb_get_uint8(tvb, offset + 1);
4568 new_tvb = tvb_new_subset_length(tvb, offset + 2, new_len);
4570 dissect_measurement_report(new_tvb, pinfo, report_tree);
4572 proto_item_set_len(lpi, new_len + 2);
4574 offset += 2 + new_len;
4575 report_index++;
4576 meas_count--;
4579 proto_item_set_len(pi, offset - saved_offset);
4581 return offset;
4585 * Dissect a Backhaul steering request TLV
4587 static int
4588 dissect_backhaul_steering_request(tvbuff_t *tvb, packet_info *pinfo _U_,
4589 proto_tree *tree, unsigned offset)
4591 proto_tree_add_item(tree, hf_ieee1905_assoc_backhaul_station_mac, tvb,
4592 offset, 6, ENC_NA);
4593 offset += 6;
4595 proto_tree_add_item(tree, hf_ieee1905_backhaul_target_bssid, tvb, offset,
4596 6, ENC_NA);
4597 offset += 6;
4599 proto_tree_add_item(tree, hf_ieee1905_backhaul_operating_class, tvb,
4600 offset, 1, ENC_NA);
4601 offset++;
4603 proto_tree_add_item(tree, hf_ieee1905_backhaul_channel_number, tvb,
4604 offset, 1, ENC_NA);
4605 offset++;
4607 return offset;
4611 * Dissect a Backhaul steering response TLV
4613 static int
4614 dissect_backhaul_steering_response(tvbuff_t *tvb, packet_info *pinfo _U_,
4615 proto_tree *tree, unsigned offset)
4617 proto_item *pi = NULL;
4618 uint8_t status = 0;
4620 proto_tree_add_item(tree, hf_ieee1905_assoc_backhaul_station_mac, tvb,
4621 offset, 6, ENC_NA);
4622 offset += 6;
4624 proto_tree_add_item(tree, hf_ieee1905_backhaul_target_bssid, tvb, offset,
4625 6, ENC_NA);
4626 offset += 6;
4628 status = tvb_get_uint8(tvb, offset);
4629 pi = proto_tree_add_item(tree, hf_ieee1905_backhaul_steering_status,
4630 tvb, offset, 1, ENC_NA);
4631 proto_item_append_text(pi, ", %s",
4632 val_to_str(status,
4633 ieee1905_backhaul_status_vals,
4634 "Reserved"));
4635 offset++;
4637 return offset;
4641 * Dissect a client info TLV
4643 static int
4644 dissect_client_info(tvbuff_t *tvb, packet_info *pinfo _U_,
4645 proto_tree *tree, unsigned offset)
4647 proto_tree_add_item(tree, hf_ieee1905_client_bssid, tvb, offset,
4648 6, ENC_NA);
4649 offset += 6;
4651 proto_tree_add_item(tree, hf_ieee1905_client_mac_addr, tvb, offset,
4652 6, ENC_NA);
4653 offset += 6;
4654 return offset;
4658 * Dissect a client capability report TLV
4660 static int
4661 dissect_80211_information_elements(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
4663 int offset_end = offset + len;
4664 while (offset < offset_end) {
4665 int tlen = add_tagged_field(pinfo, tree, tvb, offset, 0, NULL, 0, NULL);
4666 if (tlen == 0) {
4667 break;
4669 offset += tlen;
4671 return offset;
4674 static int
4675 dissect_client_capability_report(tvbuff_t *tvb, packet_info *pinfo _U_,
4676 proto_tree *tree, unsigned offset, uint16_t len)
4678 uint8_t result = tvb_get_uint8(tvb, offset);
4679 proto_item *pi = NULL;
4681 pi = proto_tree_add_item(tree, hf_ieee1905_client_capability_result, tvb,
4682 offset, 1, ENC_NA);
4683 proto_item_append_text(pi, ", %s",
4684 val_to_str(result,
4685 ieee1905_client_capability_result_vals,
4686 "Reserved"));
4687 offset++;
4689 if (len > 1) { /* Must be the frame body of most recent assoc req */
4690 len--;
4691 proto_tree_add_item(tree, hf_ieee1905_client_capability_frame, tvb,
4692 offset, len, ENC_NA);
4694 /* Attempt to decode Information Elements from the Assoc Request.
4696 * According to the EM standard, the frame can either be an Assoc or a Reassoc Request.
4697 * The data starts at the "Fixed Parameters", which have length 4 for an Assoc Request and
4698 * 10 for a Reassoc Request.
4700 * => The problem is that you don't know which of the 2 it is and where the IE start
4701 * => Assume the most occuring case and thus useful case (Assoc Request)
4703 if (len >= ASSOC_REQ_BODY_FIXED_SIZE) {
4704 proto_tree *ie_tree;
4705 proto_item *ie;
4706 unsigned ie_offset = offset + ASSOC_REQ_BODY_FIXED_SIZE;
4707 unsigned ie_len = len - ASSOC_REQ_BODY_FIXED_SIZE;
4709 ie_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
4710 ett_client_capability_ies,
4711 &ie, "Information Elements (%d bytes)", ie_len);
4713 dissect_80211_information_elements(tvb, pinfo, ie_tree, ie_offset, ie_len);
4716 offset += len;
4719 return offset;
4723 * Dissect a client capability report TLV
4725 static int
4726 dissect_client_association_event(tvbuff_t *tvb, packet_info *pinfo _U_,
4727 proto_tree *tree, unsigned offset)
4729 static int * const association_flags[] = {
4730 &hf_ieee1905_association_flag,
4731 NULL,
4734 proto_tree_add_item(tree, hf_ieee1905_association_client_mac_addr,
4735 tvb, offset, 6, ENC_NA);
4736 offset += 6;
4738 proto_tree_add_item(tree, hf_ieee1905_association_agent_bssid,
4739 tvb, offset, 6, ENC_NA);
4740 offset += 6;
4742 proto_tree_add_bitmask(tree, tvb, offset,
4743 hf_ieee1905_association_event_flags,
4744 ett_ieee1905_association_event_flags,
4745 association_flags, ENC_NA);
4746 offset++;
4748 return offset;
4752 * Dissect an AP Metrics Query TLV
4754 static int
4755 dissect_ap_metric_query(tvbuff_t *tvb, packet_info *pinfo _U_,
4756 proto_tree *tree, unsigned offset, uint16_t len)
4758 proto_tree *bssid_list = NULL;
4759 proto_item *pi = NULL;
4760 unsigned saved_offset;
4761 int remaining = len;
4763 proto_tree_add_item(tree, hf_ieee1905_ap_metric_query_bssid_cnt, tvb,
4764 offset, 1, ENC_NA);
4765 offset++;
4767 bssid_list = proto_tree_add_subtree(tree, tvb, offset, -1,
4768 ett_ap_metric_query_bssid_list, &pi,
4769 "AP BSSID list");
4770 saved_offset = offset;
4772 while (remaining >= 6) {
4773 proto_tree_add_item(bssid_list, hf_ieee1905_ap_metric_query_bssid,
4774 tvb, offset, 6, ENC_NA);
4775 offset += 6;
4776 remaining -= 6;
4779 proto_item_set_len(pi, offset - saved_offset);
4781 return offset;
4785 * Dissect an STA MAC address type TLV
4787 #define INCLUDE_ESTIMATED_SP_AC_EQ_BE 0x80
4788 #define INCLUDE_ESTIMATED_SP_AC_EQ_BK 0x40
4789 #define INCLUDE_ESTIMATED_SP_AC_EQ_VO 0x20
4790 #define INCLUDE_ESTIMATED_SP_AC_EQ_VI 0x10
4792 static int
4793 dissect_ap_metrics(tvbuff_t *tvb, packet_info *pinfo _U_,
4794 proto_tree *tree, unsigned offset, uint16_t len _U_)
4796 uint8_t presence_flags = 0;
4797 static int * const flags[] = {
4798 &hf_ieee1905_include_estimated_spi_ac_eq_be,
4799 &hf_ieee1905_include_estimated_spi_ac_eq_bk,
4800 &hf_ieee1905_include_estimated_spi_ac_eq_vo,
4801 &hf_ieee1905_include_estimated_spi_ac_eq_vi,
4802 NULL
4805 proto_tree_add_item(tree, hf_ieee1905_ap_metrics_agent_bssid,
4806 tvb, offset, 6, ENC_NA);
4807 offset += 6;
4809 proto_tree_add_item(tree, hf_ieee1905_ap_metrics_channel_utilization,
4810 tvb, offset, 1, ENC_NA);
4811 offset++;
4813 proto_tree_add_item(tree, hf_ieee1905_ap_metrics_sta_count,
4814 tvb, offset, 2, ENC_BIG_ENDIAN);
4815 offset += 2;
4817 presence_flags = tvb_get_uint8(tvb, offset);
4818 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
4819 hf_ieee1905_ap_metrics_flags,
4820 ett_ieee1905_ap_metrics_flags, flags, ENC_NA,
4821 BMT_NO_APPEND);
4822 offset++;
4825 * This field should always be present, and the associated flag bit
4826 * should be 1 (TODO:check that).
4828 proto_tree_add_item(tree, hf_ieee1905_ap_metrics_service_params_be,
4829 tvb, offset, 3, ENC_NA);
4830 offset += 3;
4833 * We should indicate an error if the field is too small. Also,
4834 * need to know the format of these fields.
4836 if (presence_flags & INCLUDE_ESTIMATED_SP_AC_EQ_BK) {
4837 proto_tree_add_item(tree, hf_ieee1905_ap_metrics_service_params_bk,
4838 tvb, offset, 3, ENC_NA);
4839 offset += 3;
4842 if (presence_flags & INCLUDE_ESTIMATED_SP_AC_EQ_VO) {
4843 proto_tree_add_item(tree, hf_ieee1905_ap_metrics_service_params_vo,
4844 tvb, offset, 3, ENC_NA);
4845 offset += 3;
4848 if (presence_flags & INCLUDE_ESTIMATED_SP_AC_EQ_VI) {
4849 proto_tree_add_item(tree, hf_ieee1905_ap_metrics_service_params_vi,
4850 tvb, offset, 3, ENC_NA);
4851 offset += 3;
4854 return offset;
4858 * Dissect an STA MAC address type TLV
4860 static int
4861 dissect_sta_mac_address_type(tvbuff_t *tvb, packet_info *pinfo _U_,
4862 proto_tree *tree, unsigned offset, uint16_t len _U_)
4864 proto_tree_add_item(tree, hf_ieee1905_sta_mac_address_type, tvb,
4865 offset, 6, ENC_NA);
4866 offset += 6;
4868 return offset;
4872 * Dissect an Associated STA Link Metrics TLV
4874 static int
4875 dissect_associated_sta_link_metrics(tvbuff_t *tvb, packet_info *pinfo _U_,
4876 proto_tree *tree, unsigned offset, uint16_t len)
4878 proto_tree *bss_list = NULL;
4879 proto_tree *bss_tree = NULL;
4880 proto_item *pi = NULL;
4881 int remaining;
4882 uint8_t bss_list_index = 0;
4883 unsigned start_offset = 0;
4885 proto_tree_add_item(tree, hf_ieee1905_assoc_sta_mac_addr, tvb, offset,
4886 6, ENC_NA);
4887 offset += 6;
4888 len -= 6;
4890 proto_tree_add_item(tree, hf_ieee1905_assoc_sta_bssid_count, tvb, offset,
4891 1, ENC_NA);
4892 offset++;
4893 len--;
4895 bss_list = proto_tree_add_subtree(tree, tvb, offset, -1,
4896 ett_sta_list_metrics_bss_list, NULL,
4897 "BSS list");
4899 remaining = len;
4900 while (remaining >= 19) {
4901 bss_tree = proto_tree_add_subtree_format(bss_list, tvb,
4902 offset, 18, ett_sta_list_metrics_bss_tree,
4903 NULL, "BSS %u", bss_list_index);
4905 proto_tree_add_item(bss_tree, hf_ieee1905_assoc_sta_link_metrics_bssid,
4906 tvb, offset, 6, ENC_NA);
4907 offset += 6;
4909 proto_tree_add_item(bss_tree, hf_ieee1905_assoc_sta_link_metrics_time_delta,
4910 tvb, offset, 4, ENC_BIG_ENDIAN);
4911 offset += 4;
4913 proto_tree_add_item(bss_tree, hf_ieee1905_assoc_sta_link_metrics_dwn_rate,
4914 tvb, offset, 4, ENC_BIG_ENDIAN);
4915 offset += 4;
4917 proto_tree_add_item(bss_tree, hf_ieee1905_assoc_sta_link_metrics_up_rate,
4918 tvb, offset, 4, ENC_BIG_ENDIAN);
4919 offset += 4;
4921 proto_tree_add_item(bss_tree, hf_ieee1905_assoc_sta_link_metrics_rcpi,
4922 tvb, offset, 1, ENC_NA);
4923 offset++;
4925 bss_list_index++;
4926 remaining -= 19;
4929 proto_item_set_len(pi, offset - start_offset);
4931 if (remaining > 0) {
4932 offset += remaining;
4935 return offset;
4939 * Dissect an Associated Wi-Fi 6 STA Status Report TLV
4941 static int
4942 dissect_associated_wf6_sta_status_report(tvbuff_t *tvb, packet_info *pinfo _U_,
4943 proto_tree *tree, unsigned offset, uint16_t len)
4945 proto_tree *tid_list = NULL;
4946 proto_tree *tid_tree = NULL;
4947 proto_item *pi = NULL;
4948 int remaining;
4949 uint8_t tid_list_index = 0;
4950 unsigned start_offset = 0;
4952 proto_tree_add_item(tree, hf_ieee1905_assoc_wf6_sta_mac_addr, tvb, offset,
4953 6, ENC_NA);
4954 offset += 6;
4955 len -= 6; //BUG: Introduce remaining variable
4957 proto_tree_add_item(tree, hf_ieee1905_assoc_wf6_sta_tid_count, tvb, offset,
4958 1, ENC_NA);
4959 offset++;
4960 len--;
4962 tid_list = proto_tree_add_subtree(tree, tvb, offset, -1,
4963 ett_sta_wf6_status_report_tid_list, NULL,
4964 "TID list");
4966 remaining = len;
4967 while (remaining >= 2) {
4968 uint8_t tid = tvb_get_uint8(tvb, offset);
4970 tid_tree = proto_tree_add_subtree_format(tid_list, tvb,
4971 offset, 2, ett_sta_wf6_status_report_tid_tree,
4972 NULL, "TID %u (%0x)", tid_list_index, tid);
4974 proto_tree_add_item(tid_tree, hf_ieee1905_assoc_wf6_sta_tid,
4975 tvb, offset, 1, ENC_NA);
4976 offset += 1;
4978 proto_tree_add_item(tid_tree, hf_ieee1905_assoc_wf6_sta_queue_size,
4979 tvb, offset, 1, ENC_NA);
4980 offset += 1;
4982 tid_list_index++;
4983 remaining -= 2;
4986 proto_item_set_len(pi, offset - start_offset);
4988 if (remaining > 0) {
4989 offset += remaining;
4992 return offset;
4996 * Dissect an Associated STA extended link metrics TLV
4998 static int
4999 dissect_associated_sta_extended_link_metrics(tvbuff_t *tvb,
5000 packet_info *pinfo _U_, proto_tree *tree, unsigned offset, uint16_t len _U_)
5002 uint8_t bssid_count = 0;
5004 proto_tree_add_item(tree, hf_ieee1905_assoc_sta_ext_link_metrics_mac_addr,
5005 tvb, offset, 6, ENC_NA);
5006 offset += 6;
5008 bssid_count = tvb_get_uint8(tvb, offset);
5009 proto_tree_add_item(tree, hf_ieee1905_assoc_sta_ext_link_metrics_count, tvb,
5010 offset, 1, ENC_NA);
5011 offset += 1;
5013 if (bssid_count > 0) {
5014 proto_tree *bss_list = NULL, *bss_tree = NULL;
5015 proto_item *bli = NULL;
5016 unsigned saved_offset = offset;
5017 uint8_t bssid_id = 0;
5019 bss_list = proto_tree_add_subtree(tree, tvb, offset, -1,
5020 ett_sta_extended_link_metrics_list,
5021 &bli, "BSS List");
5022 while (bssid_id < bssid_count) {
5023 bss_tree = proto_tree_add_subtree_format(bss_list, tvb, offset, 22,
5024 ett_sta_extended_link_metrics_tree,
5025 NULL, "BSS #%u", bssid_id);
5027 proto_tree_add_item(bss_tree,
5028 hf_ieee1905_assoc_sta_extended_metrics_bssid,
5029 tvb, offset, 6, ENC_NA);
5030 offset += 6;
5032 proto_tree_add_item(bss_tree,
5033 hf_ieee1905_assoc_sta_extended_metrics_lddlr,
5034 tvb, offset, 4, ENC_BIG_ENDIAN);
5035 offset += 4;
5037 proto_tree_add_item(bss_tree,
5038 hf_ieee1905_assoc_sta_extended_metrics_ldulr,
5039 tvb, offset, 4, ENC_BIG_ENDIAN);
5040 offset += 4;
5042 proto_tree_add_item(bss_tree,
5043 hf_ieee1905_assoc_sta_extended_metrics_ur,
5044 tvb, offset, 4, ENC_BIG_ENDIAN);
5045 offset += 4;
5047 proto_tree_add_item(bss_tree,
5048 hf_ieee1905_assoc_sta_extended_metrics_tr,
5049 tvb, offset, 4, ENC_BIG_ENDIAN);
5050 offset += 4;
5052 bssid_id++;
5054 proto_item_set_len(bli, offset - saved_offset);
5057 return offset;
5061 * Dissect an Unassociated STA Link Metrics Query TLV
5063 static int
5064 dissect_unassociated_sta_link_metrics_query(tvbuff_t *tvb,
5065 packet_info *pinfo _U_, proto_tree *tree, unsigned offset, uint16_t len _U_)
5067 uint8_t channel_count = 0;
5068 uint8_t mac_count = 0;
5069 proto_tree *channel_list = NULL;
5070 proto_tree *sta_mac_list = NULL;
5071 proto_item *pi = NULL, *ci = NULL;
5072 unsigned saved_offset = 0, chan_saved_offset = 0;
5074 proto_tree_add_item(tree, hf_ieee1905_unassoc_sta_link_metrics_class,
5075 tvb, offset, 1, ENC_NA);
5076 offset++;
5078 channel_count = tvb_get_uint8(tvb, offset);
5079 proto_tree_add_item(tree, hf_ieee1905_unassoc_sta_link_channel_count,
5080 tvb, offset, 1, ENC_NA);
5081 offset++;
5083 if (channel_count > 0) {
5084 chan_saved_offset = offset;
5086 channel_list = proto_tree_add_subtree(tree, tvb, offset, -1,
5087 ett_sta_link_metrics_query_channel_list, &ci,
5088 "Channel list");
5090 while (channel_count > 0) {
5091 proto_tree_add_item(channel_list,
5092 hf_ieee1905_unassoc_metrics_channel,
5093 tvb, offset, 1, ENC_NA);
5094 offset++;
5095 channel_count--;
5097 mac_count = tvb_get_uint8(tvb, offset);
5099 proto_tree_add_item(channel_list,
5100 hf_ieee1905_unassoc_metrics_mac_count,
5101 tvb, offset, 1, ENC_NA);
5102 offset += 1;
5104 saved_offset = offset;
5105 sta_mac_list = proto_tree_add_subtree(channel_list, tvb, offset, -1,
5106 ett_sta_link_link_mac_addr_list, &pi,
5107 "MAC address list");
5109 while (mac_count) {
5110 proto_tree_add_item(sta_mac_list,
5111 hf_ieee1905_unassoc_link_metrics_query_mac,
5112 tvb, offset, 6, ENC_NA);
5113 offset += 6;
5114 mac_count--;
5117 proto_item_set_len(pi, offset - saved_offset);
5119 proto_item_set_len(ci, offset - chan_saved_offset);
5122 return offset;
5126 * Dissect a Device Information Type TLV
5128 static int
5129 dissect_device_information_type(tvbuff_t *tvb, packet_info *pinfo,
5130 proto_tree *tree, unsigned offset, uint16_t len _U_)
5132 proto_item *pi = NULL;
5133 proto_tree *sub_tree = NULL;
5134 uint8_t count;
5135 unsigned start_offset;
5137 proto_tree_add_item(tree, hf_ieee1905_al_mac_address_type, tvb,
5138 offset, 6, ENC_NA);
5139 offset += 6;
5141 count = tvb_get_uint8(tvb, offset);
5142 proto_tree_add_item(tree, hf_ieee1905_local_interface_count, tvb,
5143 offset, 1, ENC_NA);
5144 offset++;
5145 start_offset = offset;
5147 sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
5148 ett_device_information_list,
5149 &pi, "Local interface list");
5151 offset = dissect_local_interface_list(tvb, pinfo, sub_tree,
5152 offset, count);
5154 proto_item_set_len(pi, offset - start_offset);
5156 return offset;
5160 * Dissect a Transmitter Link Metric TLV
5162 static int
5163 dissect_transmitter_link_metric(tvbuff_t *tvb, packet_info *pinfo,
5164 proto_tree *tree, unsigned offset, uint16_t len)
5166 int remaining;
5168 proto_tree_add_item(tree, hf_ieee1905_responder_al_mac_addr, tvb,
5169 offset, 6, ENC_NA);
5170 offset += 6;
5172 proto_tree_add_item(tree, hf_ieee1905_neighbor_al_mac_addr, tvb,
5173 offset, 6, ENC_NA);
5174 offset += 6;
5176 remaining = len - 12;
5177 while (remaining > 0) {
5178 proto_tree_add_item(tree, hf_ieee1905_receiving_al_mac_addr,
5179 tvb, offset, 6, ENC_NA);
5180 offset += 6;
5182 proto_tree_add_item(tree, hf_ieee1905_neighbor_al_mac_addr,
5183 tvb, offset, 6, ENC_NA);
5184 offset += 6;
5186 offset = dissect_media_type(tvb, pinfo, tree, offset);
5188 proto_tree_add_item(tree, hf_ieee1905_bridge_flag, tvb, offset,
5189 1, ENC_NA);
5190 offset += 1;
5192 proto_tree_add_item(tree, hf_ieee1905_packet_errors, tvb, offset,
5193 4, ENC_BIG_ENDIAN);
5194 offset += 4;
5196 proto_tree_add_item(tree, hf_ieee1905_transmitted_packets, tvb,
5197 offset, 4, ENC_BIG_ENDIAN);
5198 offset += 4;
5200 proto_tree_add_item(tree, hf_ieee1905_mac_throughput_capacity, tvb,
5201 offset, 2, ENC_BIG_ENDIAN);
5202 offset += 2;
5204 proto_tree_add_item(tree, hf_ieee1905_link_availability, tvb,
5205 offset, 2, ENC_BIG_ENDIAN);
5206 offset += 2;
5208 proto_tree_add_item(tree, hf_ieee1905_phy_rate, tvb, offset,
5209 2, ENC_BIG_ENDIAN);
5210 offset += 2;
5212 remaining -= 29;
5215 return offset;
5219 * Dissect a Receiver Link Metric TLV
5221 static int
5222 dissect_receiver_link_metric(tvbuff_t *tvb, packet_info *pinfo,
5223 proto_tree *tree, unsigned offset, uint16_t len)
5225 int remaining;
5227 proto_tree_add_item(tree, hf_ieee1905_responder_al_mac_addr, tvb,
5228 offset, 6, ENC_NA);
5229 offset += 6;
5230 proto_tree_add_item(tree, hf_ieee1905_neighbor_al_mac_addr, tvb,
5231 offset, 6, ENC_NA);
5232 offset += 6;
5234 remaining = len - 12;
5235 while (remaining > 0) {
5236 proto_tree_add_item(tree, hf_ieee1905_receiving_al_mac_addr,
5237 tvb, offset, 6, ENC_NA);
5238 offset += 6;
5240 proto_tree_add_item(tree, hf_ieee1905_neighbor_al_mac_addr,
5241 tvb, offset, 6, ENC_NA);
5242 offset += 6;
5244 offset = dissect_media_type(tvb, pinfo, tree, offset);
5246 proto_tree_add_item(tree, hf_ieee1905_packet_errors, tvb, offset,
5247 4, ENC_BIG_ENDIAN);
5248 offset += 4;
5250 proto_tree_add_item(tree, hf_ieee1905_packets_received, tvb,
5251 offset, 4, ENC_BIG_ENDIAN);
5252 offset += 4;
5254 proto_tree_add_item(tree, hf_ieee1905_rssi, tvb, offset, 1, ENC_NA);
5255 offset++;
5257 remaining -= 23;
5259 return offset;
5263 * Dissect an Associated STA Traffic Stats TLV
5265 static int
5266 dissect_associated_sta_traffic_stats(tvbuff_t *tvb,
5267 packet_info *pinfo _U_, proto_tree *tree, unsigned offset, uint16_t len _U_)
5269 proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_mac_addr, tvb,
5270 offset, 6, ENC_NA);
5271 offset += 6;
5273 proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_bytes_sent,
5274 tvb, offset, 4, ENC_BIG_ENDIAN);
5275 offset += 4;
5277 proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_bytes_rcvd,
5278 tvb, offset, 4, ENC_BIG_ENDIAN);
5279 offset += 4;
5281 proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_packets_sent,
5282 tvb, offset, 4, ENC_BIG_ENDIAN);
5283 offset += 4;
5285 proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_packets_rcvd,
5286 tvb, offset, 4, ENC_BIG_ENDIAN);
5287 offset += 4;
5289 proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_tx_pkt_errs,
5290 tvb, offset, 4, ENC_BIG_ENDIAN);
5291 offset += 4;
5293 proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_rx_pkt_errs,
5294 tvb, offset, 4, ENC_BIG_ENDIAN);
5295 offset += 4;
5297 proto_tree_add_item(tree, hf_ieee1905_assoc_sta_traffic_stats_retrans_count,
5298 tvb, offset, 4, ENC_BIG_ENDIAN);
5299 offset += 4;
5301 return offset;
5305 * Dissect an Error code TLV
5307 static int
5308 dissect_error_code(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
5309 unsigned offset, uint16_t len _U_)
5311 proto_item *pi = NULL;
5312 uint8_t error_code = tvb_get_uint8(tvb, offset);
5314 pi = proto_tree_add_item(tree, hf_ieee1905_error_code_value, tvb,
5315 offset, 1, ENC_NA);
5316 proto_item_append_text(pi, ", %s",
5317 val_to_str(error_code,
5318 ieee1905_error_code_vals,
5319 "Reserved"));
5320 offset++;
5322 proto_tree_add_item(tree, hf_ieee1905_error_code_mac_addr, tvb, offset,
5323 6, ENC_NA);
5324 offset += 6;
5326 return offset;
5330 * Dissect a Channel Scan Reporting Policy TLV
5332 static int * const channel_scan_rep_policy_headers[] = {
5333 &hf_ieee1905_channel_scan_pol_report,
5334 &hf_ieee1905_channel_scan_pol_reserved,
5335 NULL
5338 static const true_false_string report_independent_scans_tfs = {
5339 "Report Independent Channel Scans",
5340 "Do not report Independent Channel Scans unless requested"
5343 static int
5344 dissect_channel_scan_reporting_policy(tvbuff_t *tvb, packet_info *pinfo _U_,
5345 proto_tree *tree, unsigned offset, uint16_t len _U_)
5347 proto_tree_add_bitmask(tree, tvb, offset,
5348 hf_ieee1905_channel_scan_rep_policy,
5349 ett_channel_scan_rep_policy,
5350 channel_scan_rep_policy_headers, ENC_NA);
5351 offset += 1;
5353 return offset;
5357 * Dissect a Channel Scan Capabilities TLV
5359 static int * const channel_scan_capa_flags_headers[] = {
5360 &hf_ieee1905_channel_scan_capa_flags_on_boot_only,
5361 &hf_ieee1905_channel_scan_capa_flags_scan_impact,
5362 &hf_ieee1905_channel_scan_capa_flags_reserved,
5363 NULL
5366 static const true_false_string channel_scan_capa_flags_on_boot_only_tfs = {
5367 "Agent can only perform scan on boot",
5368 "Agent can perform requested scans"
5371 static const value_string channel_scan_capa_flags_impact_vals[] = {
5372 { 0, "No impact" },
5373 { 1, "Reduced number of spacial streams" },
5374 { 2, "Time slicing impairment" },
5375 { 3, "Radio unavailable for >= 2 seconds" },
5376 { 0, NULL }
5379 static int
5380 dissect_channel_scan_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
5381 proto_tree *tree, unsigned offset, uint16_t len _U_)
5383 proto_tree *radio_list = NULL;
5384 proto_item *rli = NULL;
5385 uint8_t radio_count = 0, radio_num = 0;
5386 unsigned radio_list_start = 0;
5388 radio_count = tvb_get_uint8(tvb, offset);
5389 proto_tree_add_item(tree, hf_ieee1905_channel_scan_capabilities_radio_num,
5390 tvb, offset, 1, ENC_NA);
5391 offset += 1;
5393 radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
5394 ett_channel_scan_capa_radio_list,
5395 &rli, "Radio List");
5396 radio_list_start = offset;
5398 while (radio_num < radio_count) {
5399 proto_tree *radio_tree = NULL;
5400 proto_item *ri = NULL;
5401 proto_tree *oper_class_list = NULL;
5402 proto_item *cli = NULL;
5403 unsigned start_offset = offset;
5404 uint8_t oper_class_count = 0, oper_class_num = 0;
5405 unsigned class_start_offset = 0;
5407 radio_tree = proto_tree_add_subtree_format(radio_list, tvb, offset,
5408 -1, ett_channel_scan_capa_radio,
5409 &ri, "Radio %u", radio_num);
5411 proto_tree_add_item(radio_tree, hf_ieee1905_channel_scan_capa_radio_id,
5412 tvb, offset, 6, ENC_NA);
5413 offset += 6;
5415 proto_tree_add_bitmask(radio_tree, tvb, offset,
5416 hf_ieee1905_channel_scan_capa_flags,
5417 ett_channel_scan_capa_flags,
5418 channel_scan_capa_flags_headers, ENC_NA);
5419 offset += 1;
5421 proto_tree_add_item(radio_tree,
5422 hf_ieee1905_channel_scan_capa_min_scan_interval,
5423 tvb, offset, 4, ENC_BIG_ENDIAN);
5424 offset += 4;
5426 oper_class_count = tvb_get_uint8(tvb, offset);
5427 proto_tree_add_item(radio_tree, hf_ieee1905_channel_scan_capa_class_num,
5428 tvb, offset, 1, ENC_NA);
5429 offset += 1;
5431 oper_class_list = proto_tree_add_subtree(radio_tree, tvb, offset, -1,
5432 ett_channel_scan_capa_class_list,
5433 &cli, "Operating Class List");
5435 class_start_offset = offset;
5436 while (oper_class_num < oper_class_count) {
5437 uint8_t chan_num = 0;
5438 proto_tree *oper_class = NULL;
5439 proto_item *ci = NULL;
5440 int oper_class_start_offset = offset;
5442 oper_class = proto_tree_add_subtree_format(oper_class_list, tvb,
5443 offset, -1,
5444 ett_channel_scan_capa_class,
5445 &ci, "Operating Class %d",
5446 oper_class_num);
5449 proto_tree_add_item(oper_class,
5450 hf_ieee1905_channel_scan_capa_oper_class, tvb,
5451 offset, 1, ENC_NA);
5452 offset += 1;
5454 chan_num = tvb_get_uint8(tvb, offset);
5455 proto_tree_add_item(oper_class,
5456 hf_ieee1905_channel_scan_capa_oper_class_chan_cnt,
5457 tvb, offset, 1, ENC_NA);
5458 offset += 1;
5460 if (chan_num > 0) {
5461 /* Add them */
5462 proto_tree *channels = NULL;
5464 channels = proto_tree_add_subtree(oper_class, tvb, offset, chan_num,
5465 ett_channel_scan_capa_channels,
5466 NULL, "Channel List");
5468 while (chan_num > 0) {
5469 proto_tree_add_item(channels, hf_ieee1905_channel_scan_capa_channel,
5470 tvb, offset, 1, ENC_NA);
5471 offset += 1;
5472 chan_num--;
5475 offset += chan_num;
5478 proto_item_set_len(ci, offset - oper_class_start_offset);
5479 oper_class_num++;
5482 proto_item_set_len(cli, offset - class_start_offset);
5483 proto_item_set_len(ri, offset - start_offset);
5484 radio_num++;
5487 proto_item_set_len(rli, offset - radio_list_start);
5489 return offset;
5493 * Dissect a Channel Scan Request TLV
5495 static int * const channel_scan_request_flags_headers[] = {
5496 &hf_ieee1905_channel_scan_request_flags_fresh_scan,
5497 &hf_ieee1905_channel_scan_request_flags_reserved,
5498 NULL
5501 static const true_false_string perform_fresh_scan_tfs = {
5502 "Perform a fresh scan",
5503 "Return results from previous scan"
5506 static int
5507 dissect_channel_scan_request(tvbuff_t *tvb, packet_info *pinfo _U_,
5508 proto_tree *tree, unsigned offset, uint16_t len _U_)
5510 proto_tree *radio_list = NULL;
5511 proto_item *rli = NULL;
5512 uint8_t radio_count = 0, radio_num = 0;
5513 unsigned radio_list_start = 0;
5515 proto_tree_add_bitmask(tree, tvb, offset,
5516 hf_ieee1905_channel_scan_request_flags,
5517 ett_channel_scan_request_flags,
5518 channel_scan_request_flags_headers, ENC_NA);
5519 offset += 1;
5521 radio_count = tvb_get_uint8(tvb, offset);
5522 proto_tree_add_item(tree, hf_ieee1905_channel_scan_request_radio_num,
5523 tvb, offset, 1, ENC_NA);
5524 offset += 1;
5526 radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
5527 ett_channel_scan_request_radio_list,
5528 &rli, "Radio List");
5529 radio_list_start = offset;
5531 while (radio_num < radio_count) {
5532 proto_tree *radio_tree = NULL;
5533 proto_item *ri = NULL;
5534 proto_tree *oper_class_list = NULL;
5535 proto_item *cli = NULL;
5536 unsigned start_offset = offset;
5537 uint8_t oper_class_count = 0, oper_class_num = 0;
5538 unsigned class_start_offset = 0;
5540 radio_tree = proto_tree_add_subtree_format(radio_list, tvb, offset,
5541 -1, ett_channel_scan_request_radio,
5542 &ri, "Radio %u", radio_num);
5544 proto_tree_add_item(radio_tree, hf_ieee1905_channel_scan_request_radio_id,
5545 tvb, offset, 6, ENC_NA);
5546 offset += 6;
5548 oper_class_count = tvb_get_uint8(tvb, offset);
5549 proto_tree_add_item(radio_tree, hf_ieee1905_channel_scan_request_class_num,
5550 tvb, offset, 1, ENC_NA);
5551 offset += 1;
5553 if (oper_class_count > 0) {
5554 oper_class_list = proto_tree_add_subtree(radio_tree, tvb, offset, -1,
5555 ett_channel_scan_request_class_list,
5556 &cli, "Operating Class List");
5558 class_start_offset = offset;
5559 while (oper_class_num < oper_class_count) {
5560 uint8_t chan_num = 0;
5561 proto_tree *oper_class = NULL;
5562 proto_item *ci = NULL;
5563 int oper_class_start_offset = offset;
5565 oper_class = proto_tree_add_subtree_format(oper_class_list, tvb,
5566 offset, -1,
5567 ett_channel_scan_request_class,
5568 &ci, "Operating Class %d",
5569 oper_class_num);
5572 proto_tree_add_item(oper_class,
5573 hf_ieee1905_channel_scan_request_oper_class, tvb,
5574 offset, 1, ENC_NA);
5575 offset += 1;
5577 chan_num = tvb_get_uint8(tvb, offset);
5578 proto_tree_add_item(oper_class,
5579 hf_ieee1905_channel_scan_request_oper_class_chan_cnt,
5580 tvb, offset, 1, ENC_NA);
5581 offset += 1;
5583 if (chan_num > 0) {
5584 /* Add them */
5585 proto_tree *channels = NULL;
5587 channels = proto_tree_add_subtree(oper_class, tvb, offset, chan_num,
5588 ett_channel_scan_request_channels,
5589 NULL, "Channel List");
5591 while (chan_num > 0) {
5592 proto_tree_add_item(channels, hf_ieee1905_channel_scan_request_channel,
5593 tvb, offset, 1, ENC_NA);
5594 offset += 1;
5595 chan_num--;
5599 proto_item_set_len(ci, offset - oper_class_start_offset);
5600 oper_class_num++;
5604 proto_item_set_len(cli, offset - class_start_offset);
5605 proto_item_set_len(ri, offset - start_offset);
5606 radio_num++;
5609 proto_item_set_len(rli, offset - radio_list_start);
5611 return offset;
5615 * Dissect a Channel Scan Result TLV
5617 static const range_string channel_scan_result_status_rvals[] = {
5618 { 0, 0, "Success" },
5619 { 1, 1, "Scan not supported on this operating class/channel on this radio" },
5620 { 2, 2, "Request too soon after last scan" },
5621 { 3, 3, "Radio too busy to perform scan" },
5622 { 4, 4, "Scan not completed" },
5623 { 5, 5, "Scan aborted" },
5624 { 6, 6, "Fresh scan not supported. Radio only supports on-boot scans" },
5625 { 7, 255, "Reserved" },
5626 { 0, 0, NULL }
5629 static int * const channel_scan_result_neigh_flags[] = {
5630 &hf_ieee1905_channel_scan_result_load_element_present,
5631 &hf_ieee1905_channel_scan_result_neigh_reserved,
5632 NULL
5635 static int * const channel_scan_result_flags[] = {
5636 &hf_ieee1905_channel_scan_result_scan_type,
5637 &hf_ieee1905_channel_scan_result_scan_flags_reserved,
5638 NULL
5641 static const true_false_string channel_scan_result_type_tfs = {
5642 "Scan was an Active scan",
5643 "Scan was a Passive scan"
5646 static int
5647 dissect_channel_scan_result(tvbuff_t *tvb, packet_info *pinfo _U_,
5648 proto_tree *tree, unsigned offset, uint16_t len _U_)
5650 uint8_t status = 0;
5652 proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_radio_id, tvb,
5653 offset, 6, ENC_NA);
5654 offset += 6;
5656 proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_oper_class, tvb,
5657 offset, 1, ENC_NA);
5658 offset += 1;
5660 proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_channel, tvb,
5661 offset, 1, ENC_NA);
5662 offset += 1;
5664 status = tvb_get_uint8(tvb, offset);
5665 proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_status, tvb,
5666 offset, 1, ENC_NA);
5667 offset += 1;
5669 if (status == 0) {
5670 uint8_t timestamp_len = tvb_get_uint8(tvb, offset);
5671 uint8_t ssid_len;
5672 uint16_t neighbor_num = 0, neighbor_cnt = 0;
5673 proto_tree *neigh_list = NULL;
5674 proto_item *nli = NULL;
5675 unsigned saved_offset = 0;
5677 proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_timestamp_len,
5678 tvb, offset, 1, ENC_NA);
5679 offset += 1;
5681 proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_timestamp_string,
5682 tvb, offset, timestamp_len, ENC_NA|ENC_ASCII);
5683 offset += timestamp_len;
5685 proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_utilization,
5686 tvb, offset, 1, ENC_NA);
5687 offset += 1;
5689 proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_noise, tvb,
5690 offset, 1, ENC_NA);
5691 offset += 1;
5693 neighbor_num = tvb_get_ntohs(tvb, offset);
5694 proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_neigh_num,
5695 tvb, offset, 2, ENC_NA);
5696 offset += 2;
5698 if (neighbor_num > 0) {
5699 neigh_list = proto_tree_add_subtree(tree, tvb, offset, -1,
5700 ett_channel_scan_result_neigh_list,
5701 &nli, "Neighbor List");
5702 saved_offset = offset;
5704 while (neighbor_cnt < neighbor_num) {
5705 proto_tree *neigh_tree = NULL;
5706 proto_item *nti = NULL;
5707 unsigned neigh_saved_offset = offset;
5708 uint8_t channel_bw_len = 0;
5709 uint8_t flags = 0;
5711 neigh_tree = proto_tree_add_subtree_format(neigh_list, tvb,
5712 offset, -1,
5713 ett_channel_scan_result_neigh,
5714 &nti, "Neighbor %u", neighbor_cnt);
5716 proto_tree_add_item(neigh_tree,
5717 hf_ieee1905_channel_scan_result_bssid, tvb,
5718 offset, 6, ENC_NA);
5719 offset += 6;
5721 ssid_len = tvb_get_uint8(tvb, offset);
5722 proto_tree_add_item(neigh_tree,
5723 hf_ieee1905_channel_scan_result_ssid_len, tvb,
5724 offset, 1, ENC_NA);
5725 offset += 1;
5727 proto_tree_add_item(neigh_tree, hf_ieee1905_channel_scan_result_ssid,
5728 tvb, offset, ssid_len, ENC_ASCII);
5729 offset += ssid_len;
5731 proto_tree_add_item(neigh_tree,
5732 hf_ieee1905_channel_scan_result_sig_level,
5733 tvb, offset, 1, ENC_NA);
5734 offset += 1;
5736 channel_bw_len = tvb_get_uint8(tvb, offset);
5737 proto_tree_add_item(neigh_tree, hf_ieee1905_channel_scan_result_bw_len,
5738 tvb, offset, 1, ENC_NA);
5739 offset += 1;
5741 proto_tree_add_item(neigh_tree, hf_ieee1905_channel_scan_result_bw,
5742 tvb, offset, channel_bw_len, ENC_ASCII);
5743 offset += channel_bw_len;
5745 flags = tvb_get_uint8(tvb, offset);
5746 proto_tree_add_bitmask(neigh_tree, tvb, offset,
5747 hf_ieee1905_channel_scan_result_neigh_flags,
5748 ett_channel_scan_result_neigh_flags,
5749 channel_scan_result_neigh_flags, ENC_NA);
5750 offset += 1;
5752 if (flags & 0x80) {
5753 proto_tree_add_item(neigh_tree, hf_ieee1905_channel_scan_result_util,
5754 tvb, offset, 1, ENC_NA);
5755 offset += 1;
5757 proto_tree_add_item(neigh_tree, hf_ieee1905_channel_scan_result_sta_count,
5758 tvb, offset, 2, ENC_NA);
5759 offset += 2;
5762 proto_item_set_len(nti, offset - neigh_saved_offset);
5763 neighbor_cnt++;
5767 proto_item_set_len(nli, offset - saved_offset);
5769 proto_tree_add_item(tree, hf_ieee1905_channel_scan_result_scan_duration,
5770 tvb, offset, 4, ENC_BIG_ENDIAN);
5771 offset += 4;
5773 proto_tree_add_bitmask(tree, tvb, offset,
5774 hf_ieee1905_channel_scan_result_flags,
5775 ett_channel_scan_result_flags,
5776 channel_scan_result_flags, ENC_NA);
5777 offset += 1;
5781 return offset;
5785 * Dissect a Timestamp TLV
5787 static int
5788 dissect_timestamp(tvbuff_t *tvb, packet_info *pinfo _U_,
5789 proto_tree *tree, unsigned offset, uint16_t len _U_)
5791 uint8_t timestamp_len = tvb_get_uint8(tvb, offset);
5793 proto_tree_add_item(tree, hf_ieee1905_timestamp_length, tvb, offset, 1,
5794 ENC_NA);
5795 offset += 1;
5797 proto_tree_add_item(tree, hf_ieee1905_timestamp_string, tvb, offset,
5798 timestamp_len, ENC_NA|ENC_ASCII);
5799 offset += timestamp_len;
5801 return offset;
5805 * Dissect a 1905 Layer Security Capability TLV
5807 static const range_string onboarding_protocol_supported_rvals[] = {
5808 { 0, 0, "1905 Device Provisioning Protocol" },
5809 { 1, 255, "Reserved" },
5810 { 0, 0, NULL }
5813 static const range_string message_integrity_algorithms_sup_rvals[] = {
5814 { 0, 0, "HMAC-SHAR256" },
5815 { 1, 255, "Reserved" },
5816 { 0, 0, NULL }
5819 static const range_string message_encryption_algorithms_sup_rvals[] = {
5820 { 0, 0, "AES-SIV" },
5821 { 1, 255, "Reserved" },
5822 { 0, 0, NULL }
5825 static int
5826 dissect_1905_layer_security_capability(tvbuff_t *tvb, packet_info *pinfo _U_,
5827 proto_tree *tree, unsigned offset, uint16_t len _U_)
5829 proto_tree_add_item(tree, hf_ieee1905_1905_layer_sec_capa_onboarding, tvb,
5830 offset, 1, ENC_NA);
5831 offset += 1;
5833 proto_tree_add_item(tree, hf_ieee1905_1905_layer_sec_capa_mic_sup, tvb,
5834 offset, 1, ENC_NA);
5835 offset += 1;
5837 proto_tree_add_item(tree, hf_ieee1905_1905_layer_sec_capa_enc_alg_sup, tvb,
5838 offset, 1, ENC_NA);
5839 offset += 1;
5841 return offset;
5845 * Dissect an AP Wi-Fi 6 Capabilities TLV
5847 static int * const ap_wf6_role_flags[] = {
5848 &hf_ieee1905_ap_wf6_capa_agents_role,
5849 &hf_ieee1905_ap_wf6_capa_he_160_support,
5850 &hf_ieee1905_ap_wf6_capa_he_80p80_support,
5851 &hf_ieee1905_ap_wf6_capa_reserved,
5852 NULL
5855 static int * const ap_wf6_supported_flags[] = {
5856 &hf_ieee1905_ap_wf6_su_beamformer,
5857 &hf_ieee1905_ap_wf6_su_beamformee,
5858 &hf_ieee1905_ap_wf6_mu_beamformer_status,
5859 &hf_ieee1905_ap_wf6_beamformee_sts_le_80mhz,
5860 &hf_ieee1905_ap_wf6_beamformee_sts_gt_80mhz,
5861 &hf_ieee1905_ap_wf6_ul_mu_mimo,
5862 &hf_ieee1905_ap_wf6_ul_ofdma,
5863 &hf_ieee1905_ap_wf6_dl_ofdma,
5864 NULL
5867 static int * const ap_wf6_mimo_flags[] = {
5868 &hf_ieee1905_ap_wf6_max_ap_dl_mu_mimo_tx,
5869 &hf_ieee1905_ap_wf6_max_ap_ul_mu_mimi_rx,
5870 NULL
5873 static int * const ap_wf6_gen_flags[] = {
5874 &hf_ieee1905_ap_wf6_gen_rts,
5875 &hf_ieee1905_ap_wf6_gen_mu_rts,
5876 &hf_ieee1905_ap_wf6_gen_multi_bssid,
5877 &hf_ieee1905_ap_wf6_gen_mu_edca,
5878 &hf_ieee1905_ap_wf6_gen_twt_requester,
5879 &hf_ieee1905_ap_wf6_gen_twt_responder,
5880 &hf_ieee1905_ap_wf6_gen_reserved,
5881 NULL
5884 static const value_string ap_wf6_agent_role_vals[] = {
5885 { 0, "Wi-Fi 6 support info for the AP role" },
5886 { 1, "Wi-Fi 6 support info for the non-AP STA role" },
5887 { 0, NULL }
5890 static int
5891 dissect_ap_wf6_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
5892 proto_tree *tree, unsigned offset, uint16_t len _U_)
5894 uint8_t role_count, role_id = 0;
5895 proto_tree *role_list = NULL;
5896 proto_item *rli = NULL;
5897 unsigned start_list_offset;
5899 proto_tree_add_item(tree, hf_ieee1905_ap_wf6_capa_radio_id, tvb,
5900 offset, 6, ENC_NA);
5901 offset += 6;
5903 role_count = tvb_get_uint8(tvb, offset);
5905 proto_tree_add_item(tree, hf_ieee1905_ap_wf6_role_count, tvb, offset, 1,
5906 ENC_NA);
5907 offset += 1;
5909 start_list_offset = offset;
5910 role_list = proto_tree_add_subtree(tree, tvb, offset, -1,
5911 ett_ap_wf6_role_list,
5912 &rli, "Role List");
5914 while (role_id < role_count) {
5915 proto_tree *role_tree;
5916 proto_item *rti = NULL;
5917 unsigned start_tree_offset = offset;
5918 proto_tree *mcs_set = NULL;
5920 role_tree = proto_tree_add_subtree_format(role_list, tvb, offset, -1,
5921 ett_ap_wf6_role_tree,
5922 &rti, "Role %u", role_id);
5924 uint8_t role_flags = tvb_get_uint8(tvb, offset);
5926 proto_tree_add_bitmask(role_tree, tvb, offset,
5927 hf_ieee1905_ap_wf6_agent_role_flags,
5928 ett_ap_wf6_agent_role_flags, ap_wf6_role_flags,
5929 ENC_NA);
5930 offset += 1;
5932 mcs_set = proto_tree_add_subtree(role_tree, tvb, offset, 4,
5933 ett_ap_he_mcs_set, NULL,
5934 "Supported HE-MCS and NSS Set <= 80 MHz");
5936 proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
5937 hf_ieee1905_ap_he_cap_tx_mcs_le_80_mhz,
5938 ett_ieee1905_ap_he_rx_mcs_set,
5939 tx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
5940 offset += 2;
5942 proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
5943 hf_ieee1905_ap_he_cap_rx_mcs_le_80_mhz,
5944 ett_ieee1905_ap_he_rx_mcs_set,
5945 rx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
5946 offset += 2;
5949 if (role_flags & 0x20) { /* HE MCS & NSS for 160MHz */
5950 mcs_set = proto_tree_add_subtree(role_tree, tvb, offset, 4,
5951 ett_ap_he_mcs_set, NULL,
5952 "Supported HE-MCS and NSS Set 160 MHz");
5954 proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
5955 hf_ieee1905_ap_he_cap_tx_mcs_160_mhz,
5956 ett_ieee1905_ap_he_rx_mcs_set,
5957 tx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
5958 offset += 2;
5960 proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
5961 hf_ieee1905_ap_he_cap_rx_mcs_160_mhz,
5962 ett_ieee1905_ap_he_rx_mcs_set,
5963 rx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
5964 offset += 2;
5967 if (role_flags & 0x10) { /* HE MCS & NSS for 80+80MHz */
5968 mcs_set = proto_tree_add_subtree(role_tree, tvb, offset, 4,
5969 ett_ap_he_mcs_set, NULL,
5970 "Supported HE-MCS and NSS Set 80+80 MHz");
5972 proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
5973 hf_ieee1905_ap_he_cap_tx_mcs_80p80_mhz,
5974 ett_ieee1905_ap_he_rx_mcs_set,
5975 tx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
5976 offset += 2;
5978 proto_tree_add_bitmask_with_flags(mcs_set, tvb, offset,
5979 hf_ieee1905_ap_he_cap_rx_mcs_80p80_mhz,
5980 ett_ieee1905_ap_he_rx_mcs_set,
5981 rx_he_mcs_map_headers, ENC_BIG_ENDIAN, BMT_NO_APPEND);
5982 offset += 2;
5985 proto_tree_add_bitmask(role_tree, tvb, offset,
5986 hf_ieee1905_ap_wf6_he_supported_flags,
5987 ett_ap_wf6_supported_flags,
5988 ap_wf6_supported_flags, ENC_NA);
5989 offset += 1;
5991 proto_tree_add_bitmask(role_tree, tvb, offset,
5992 hf_ieee1905_ap_wf6_mimo_max_flags,
5993 ett_ap_wf6_mimo_max_flags, ap_wf6_mimo_flags,
5994 ENC_NA);
5995 offset += 1;
5997 proto_tree_add_item(role_tree, hf_ieee1905_ap_wf6_dl_ofdma_max_tx, tvb,
5998 offset, 1, ENC_NA);
5999 offset += 1;
6001 proto_tree_add_item(role_tree, hf_ieee1905_ap_wf6_ul_ofdma_max_rx, tvb,
6002 offset, 1, ENC_NA);
6003 offset += 1;
6005 proto_tree_add_bitmask(role_tree, tvb, offset,
6006 hf_ieee1905_ap_wf6_gen_flags,
6007 ett_ap_wf6_gen_flags, ap_wf6_gen_flags,
6008 ENC_NA);
6009 offset += 1;
6011 proto_item_set_len(rti, offset - start_tree_offset);
6012 role_id++;
6015 proto_item_set_len(rli, offset - start_list_offset);
6016 return offset;
6019 static int
6020 dissect_agent_list(tvbuff_t *tvb, packet_info *pinfo _U_,
6021 proto_tree *tree, unsigned offset, uint16_t len)
6023 proto_tree_add_item(tree, hf_ieee1905_agent_list_bytes, tvb, offset,
6024 len, ENC_NA);
6025 offset += len;
6027 return offset;
6031 * Dissect a MIC TLV
6033 static int * const gtk_key_id_headers[] = {
6034 &hf_ieee1905_1905_gtk_key_id,
6035 &hf_ieee1905_mic_version,
6036 &hf_ieee1905_mic_reserved,
6037 NULL
6040 static const value_string mic_version_vals[] = {
6041 { 0, "Version 1" },
6042 { 1, "Reserved" },
6043 { 2, "Reserved" },
6044 { 3, "Reserved" },
6045 { 0, NULL }
6048 static int
6049 dissect_mic(tvbuff_t *tvb, packet_info *pinfo _U_,
6050 proto_tree *tree, unsigned offset, uint16_t len _U_)
6052 uint16_t mic_len = 0;
6054 proto_tree_add_bitmask(tree, tvb, offset,
6055 hf_ieee1905_mic_group_temporal_key_id,
6056 ett_mic_group_temporal_key,
6057 gtk_key_id_headers, ENC_NA);
6058 offset += 1;
6060 proto_tree_add_item(tree, hf_ieee1905_mic_integrity_transmission_counter,
6061 tvb, offset, 6, ENC_BIG_ENDIAN);
6062 offset += 6;
6064 proto_tree_add_item(tree, hf_ieee1905_mic_source_la_mac_id, tvb, offset, 6,
6065 ENC_NA);
6066 offset += 6;
6068 mic_len = tvb_get_ntohs(tvb, offset);
6069 proto_tree_add_item(tree, hf_ieee1905_mic_length, tvb, offset, 2, ENC_NA);
6070 offset += 2;
6072 proto_tree_add_item(tree, hf_ieee1905_mic_bytes, tvb, offset, mic_len,
6073 ENC_NA);
6074 offset += mic_len;
6076 return offset;
6080 * Dissect an Encrypted TLV
6082 static int
6083 dissect_encrypted(tvbuff_t *tvb, packet_info *pinfo _U_,
6084 proto_tree *tree, unsigned offset, uint16_t len _U_)
6086 uint16_t enc_len = 0;
6088 proto_tree_add_item(tree, hf_ieee1905_encrypted_enc_transmission_count,
6089 tvb, offset, 6, ENC_NA);
6090 offset += 6;
6092 proto_tree_add_item(tree, hf_ieee1905_encrypted_source_la_mac_id, tvb,
6093 offset, 6, ENC_NA);
6094 offset += 6;
6096 proto_tree_add_item(tree, hf_ieee1905_encrypted_dest_al_mac_addr, tvb,
6097 offset, 6, ENC_NA);
6098 offset += 6;
6100 enc_len = tvb_get_ntohs(tvb, offset);
6101 proto_tree_add_item(tree, hf_ieee1905_encrypted_enc_output_field_len, tvb,
6102 offset, 2, ENC_NA);
6103 offset += 2;
6105 proto_tree_add_item(tree, hf_ieee1905_encrypted_enc_output_field, tvb,
6106 offset, enc_len, ENC_NA);
6107 offset += enc_len;
6109 return offset;
6113 * Dissect a CAC Request TLV
6115 static int * const cac_request_method_flags[] = {
6116 &hf_ieee1905_cac_request_method,
6117 &hf_ieee1905_cac_request_completion_action,
6118 &hf_ieee1905_cac_request_completion_unsuccess,
6119 &hf_ieee1905_cac_request_reserved,
6120 NULL
6123 static const value_string cac_request_method_vals[] = {
6124 { 0, "Continuous CAC" },
6125 { 1, "Continuous with dedicated radio" },
6126 { 2, "MIMO dimension reduced" },
6127 { 3, "Time sliced CAC" },
6128 { 4, "Reserved" },
6129 { 5, "Reserved" },
6130 { 6, "Reserved" },
6131 { 7, "Reserved" },
6132 { 0, NULL }
6135 static const range_string cac_completion_action_vals[] = {
6136 { 0, 0, "Remain on channel and continue to monitor for radar" },
6137 { 1, 1, "Return to previous state" },
6138 { 2, 255, "Reserved" },
6139 { 0, 0, NULL }
6142 static int
6143 dissect_cac_request(tvbuff_t *tvb, packet_info *pinfo _U_,
6144 proto_tree *tree, unsigned offset, uint16_t len _U_)
6146 unsigned radio_count = tvb_get_uint8(tvb, offset);
6148 proto_tree_add_item(tree, hf_ieee1905_cac_request_radio_count, tvb,
6149 offset, 1, ENC_NA);
6150 offset += 1;
6152 if (radio_count > 0) {
6153 proto_tree *radio_list = NULL;
6154 uint8_t radio_num = 0;
6156 radio_list = proto_tree_add_subtree(tree, tvb, offset, radio_count * 9,
6157 ett_cac_request_radio_list,
6158 NULL, "Radio List");
6160 while (radio_num < radio_count) {
6161 proto_tree *radio = NULL;
6163 radio = proto_tree_add_subtree_format(radio_list, tvb, offset, 9,
6164 ett_cac_request_radio, NULL,
6165 "Radio %u", radio_num);
6167 proto_tree_add_item(radio, hf_ieee1905_cac_request_radio_id, tvb,
6168 offset, 6, ENC_NA);
6169 offset += 6;
6171 proto_tree_add_item(radio, hf_ieee1905_cac_request_op_class, tvb,
6172 offset, 1, ENC_NA);
6173 offset += 1;
6175 proto_tree_add_item(radio, hf_ieee1905_cac_request_channel, tvb,
6176 offset, 1, ENC_NA);
6177 offset += 1;
6179 proto_tree_add_bitmask(radio, tvb, offset,
6180 hf_ieee1905_cac_request_flags,
6181 ett_cac_request_flags,
6182 cac_request_method_flags, ENC_NA);
6183 offset += 1;
6185 radio_num += 1;
6191 return offset;
6195 * Dissect a CAC Termination TLV
6197 static int
6198 dissect_cac_termination(tvbuff_t *tvb, packet_info *pinfo _U_,
6199 proto_tree *tree, unsigned offset, uint16_t len _U_)
6201 uint8_t radio_count = tvb_get_uint8(tvb, offset);
6203 proto_tree_add_item(tree, hf_ieee1905_cac_termination_radio_count, tvb,
6204 offset, 1, ENC_NA);
6205 offset += 1;
6207 if (radio_count > 0) {
6208 proto_tree *radio_list = NULL;
6209 uint8_t radio_num = 0;
6211 radio_list = proto_tree_add_subtree(tree, tvb, offset, radio_count * 9,
6212 ett_cac_terminate_radio_list,
6213 NULL, "Radio list");
6215 while (radio_num < radio_count) {
6216 proto_tree *radio = NULL;
6218 radio = proto_tree_add_subtree_format(radio_list, tvb, offset, 9,
6219 ett_cac_terminate_radio, NULL,
6220 "Radio %u", radio_num);
6222 proto_tree_add_item(radio, hf_ieee1905_cac_terminate_radio_id, tvb,
6223 offset, 6, ENC_NA);
6224 offset += 6;
6226 proto_tree_add_item(radio, hf_ieee1905_cac_terminate_op_class, tvb,
6227 offset, 1, ENC_NA);
6228 offset += 1;
6230 proto_tree_add_item(radio, hf_ieee1905_cac_terminate_channel, tvb,
6231 offset, 1, ENC_NA);
6232 offset += 1;
6234 radio_num += 1;
6238 return offset;
6242 * Dissect a CAC Completion Report TLV
6244 static const range_string cac_completion_status_rvals[] = {
6245 { 0, 0, "Successful" },
6246 { 1, 1, "Radar detected" },
6247 { 2, 2, "CAC not supported as requested" },
6248 { 3, 3, "Radio too busy to perform CAC" },
6249 { 4, 4, "Request was considered non conformant to regulations in country of operation" },
6250 { 5, 5, "Other error" },
6251 { 6, 255, "Reserved" },
6252 { 0, 0, NULL },
6255 static int
6256 dissect_cac_completion_report(tvbuff_t *tvb, packet_info *pinfo _U_,
6257 proto_tree *tree, unsigned offset, uint16_t len _U_)
6259 uint8_t radio_count = tvb_get_uint8(tvb, offset);
6261 proto_tree_add_item(tree, hf_ieee1905_cac_completion_rep_radio_count, tvb,
6262 offset, 1, ENC_NA);
6263 offset += 1;
6265 if (radio_count > 0) {
6266 proto_tree *radio_list = NULL;
6267 uint8_t radio_num = 0;
6268 uint8_t radar_count = 0;
6270 radio_list = proto_tree_add_subtree(tree, tvb, offset, radio_count * 9,
6271 ett_cac_completion_radio_list,
6272 NULL, "Radio list");
6274 while (radio_num < radio_count) {
6275 proto_tree *radio = NULL;
6277 radio = proto_tree_add_subtree_format(radio_list, tvb, offset, 9,
6278 ett_cac_completion_radio, NULL,
6279 "Radio %u", radio_num);
6281 proto_tree_add_item(radio, hf_ieee1905_cac_completion_radio_id, tvb,
6282 offset, 6, ENC_NA);
6283 offset += 6;
6285 proto_tree_add_item(radio, hf_ieee1905_cac_completion_op_class, tvb,
6286 offset, 1, ENC_NA);
6287 offset += 1;
6289 proto_tree_add_item(radio, hf_ieee1905_cac_completion_channel, tvb,
6290 offset, 1, ENC_NA);
6291 offset += 1;
6293 proto_tree_add_item(radio, hf_ieee1905_cac_completion_status, tvb,
6294 offset, 1, ENC_NA);
6295 offset += 1;
6297 radar_count = tvb_get_uint8(tvb, offset);
6299 proto_tree_add_item(radio, hf_ieee1905_cac_completion_radar_count,
6300 tvb, offset, 1, ENC_NA);
6301 offset += 1;
6303 if (radar_count > 0) {
6304 proto_tree *radar_det_list = NULL;
6305 uint8_t radar_num = 0;
6307 radar_det_list = proto_tree_add_subtree(radio, tvb, offset,
6308 radar_count * 2,
6309 ett_cac_completion_radar_list,
6310 NULL, "Radar detection list");
6311 while (radar_num < radar_count) {
6312 proto_tree *radar = NULL;
6314 radar = proto_tree_add_subtree_format(radar_det_list, tvb,
6315 offset, 2,
6316 ett_cac_completion_radar, NULL,
6317 "Class/Channel pair %u",
6318 radar_num);
6320 proto_tree_add_item(radar,
6321 hf_ieee1905_cac_comp_radar_op_class,
6322 tvb, offset, 1, ENC_NA);
6323 offset += 1;
6325 proto_tree_add_item(radar,
6326 hf_ieee1905_cac_comp_radar_channel,
6327 tvb, offset, 1, ENC_NA);
6328 offset += 1;
6330 radar_num += 1;
6334 radio_num += 1;
6338 return offset;
6342 * Dissect a CAC Status Report TLV
6344 static int
6345 dissect_cac_status_report(tvbuff_t *tvb, packet_info *pinfo _U_,
6346 proto_tree *tree, unsigned offset, uint16_t len _U_)
6348 uint8_t channel_count = tvb_get_uint8(tvb, offset);
6349 uint8_t non_occupancy_count = 0;
6350 uint8_t active_cac_count = 0;
6352 proto_tree_add_item(tree, hf_ieee1905_cac_status_rpt_active_chan, tvb,
6353 offset, 1, ENC_NA);
6354 offset += 1;
6356 if (channel_count > 0) {
6357 uint8_t channel_num = 0;
6358 proto_tree *active_chan_list = NULL;
6360 active_chan_list = proto_tree_add_subtree(tree, tvb, offset,
6361 4 * channel_count,
6362 ett_cac_status_rpt_avail_list,
6363 NULL, "Available Channels List");
6364 while (channel_num < channel_count) {
6365 proto_tree *active_chan_tree = NULL;
6367 active_chan_tree = proto_tree_add_subtree_format(active_chan_list,
6368 tvb, offset, 4,
6369 ett_cac_status_rpt_avail_chan,
6370 NULL, "Available Channel %u",
6371 channel_num);
6373 proto_tree_add_item(active_chan_tree,
6374 hf_ieee1905_cac_status_rpt_avail_op_class,
6375 tvb, offset, 1, ENC_NA);
6376 offset += 1;
6378 proto_tree_add_item(active_chan_tree,
6379 hf_ieee1905_cac_status_rpt_avail_channel,
6380 tvb, offset, 1, ENC_NA);
6381 offset += 1;
6383 proto_tree_add_item(active_chan_tree,
6384 hf_ieee1905_cac_status_rpt_avail_minutes,
6385 tvb, offset, 2, ENC_BIG_ENDIAN);
6386 offset += 2;
6388 channel_num += 1;
6392 non_occupancy_count = tvb_get_uint8(tvb, offset);
6393 proto_tree_add_item(tree, hf_ieee1905_cac_status_rpt_non_occ_cnt, tvb,
6394 offset, 1, ENC_NA);
6395 offset += 1;
6397 if (non_occupancy_count > 0) {
6398 uint8_t non_occupancy_num = 0;
6399 proto_tree *non_occupancy_list = NULL;
6401 non_occupancy_list = proto_tree_add_subtree(tree, tvb, offset,
6402 4 * non_occupancy_count,
6403 ett_cac_status_rpt_non_occupy_list,
6404 NULL, "Non-occupancy List");
6405 while (non_occupancy_num < non_occupancy_count) {
6406 proto_tree *non_occupancy_tree = NULL;
6408 non_occupancy_tree = proto_tree_add_subtree_format(
6409 non_occupancy_list, tvb, offset, 4,
6410 ett_cac_status_rpt_unocc_chan,
6411 NULL, "Unoccupied Channel %u",
6412 non_occupancy_num);
6414 proto_tree_add_item(non_occupancy_tree,
6415 hf_ieee1905_cac_status_rpt_non_occ_op_class,
6416 tvb, offset, 1, ENC_NA);
6417 offset += 1;
6419 proto_tree_add_item(non_occupancy_tree,
6420 hf_ieee1905_cac_status_rpt_non_occ_channel,
6421 tvb, offset, 1, ENC_NA);
6422 offset += 1;
6424 proto_tree_add_item(non_occupancy_tree,
6425 hf_ieee1905_cac_status_rpt_non_occ_seconds,
6426 tvb, offset, 2, ENC_BIG_ENDIAN);
6427 offset += 2;
6429 non_occupancy_num += 1;
6433 active_cac_count = tvb_get_uint8(tvb, offset);
6434 proto_tree_add_item(tree, hf_ieee1905_cac_status_rpt_active_cac_cnt, tvb,
6435 offset, 1, ENC_NA);
6436 offset += 1;
6438 if (active_cac_count > 0) {
6439 uint8_t active_cac_num = 0;
6440 proto_tree *active_cac_list = NULL;
6442 active_cac_list = proto_tree_add_subtree(tree, tvb, offset,
6443 5 * active_cac_count,
6444 ett_cac_status_rpt_active_cac_list,
6445 NULL, "Active CAC List");
6446 while (active_cac_num < active_cac_count) {
6447 proto_tree *active_cac_tree = NULL;
6449 active_cac_tree = proto_tree_add_subtree_format(active_cac_list,
6450 tvb, offset, 5,
6451 ett_cac_status_rpt_active_cac_tree,
6452 NULL, "Active CAC %u",
6453 active_cac_num);
6455 proto_tree_add_item(active_cac_tree,
6456 hf_ieee1905_cac_status_rpt_active_cac_op_class,
6457 tvb, offset, 1, ENC_NA);
6458 offset += 1;
6460 proto_tree_add_item(active_cac_tree,
6461 hf_ieee1905_cac_status_rpt_active_cac_channel,
6462 tvb, offset, 1, ENC_NA);
6463 offset += 1;
6465 proto_tree_add_item(active_cac_tree,
6466 hf_ieee1905_cac_status_rpt_active_cac_seconds,
6467 tvb, offset, 3, ENC_BIG_ENDIAN);
6468 offset += 3;
6470 active_cac_num += 1;
6474 return offset;
6478 * Dissect a CAC Capabilities TLV
6480 static const range_string cac_mode_supported_rvals[] = {
6481 { 0, 0, "Continuous CAC" },
6482 { 1, 1, "Continuous with dedicated radio" },
6483 { 2, 2, "MIMO dimension reduced" },
6484 { 3, 3, "Time sliced CAC" },
6485 { 4, 255, "Reserved" },
6486 { 0, 0, NULL }
6489 static int
6490 dissect_cac_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
6491 proto_tree *tree, unsigned offset, uint16_t len _U_)
6493 uint8_t cac_radios = 0;
6495 proto_tree_add_item(tree, hf_ieee1905_cac_capa_country_code, tvb, offset,
6496 2, ENC_NA|ENC_ASCII);
6497 offset += 2;
6499 cac_radios = tvb_get_uint8(tvb, offset);
6500 proto_tree_add_item(tree, hf_ieee1905_cac_capa_radio_cnt, tvb, offset,
6501 1, ENC_NA);
6502 offset += 1;
6504 if (cac_radios > 0) {
6505 uint8_t radio_num = 0;
6506 proto_tree *radio_list = NULL;
6507 proto_item *rli = NULL;
6508 unsigned start_offset = offset;
6510 radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
6511 ett_cac_capabilities_radio_list,
6512 &rli, "Radio List");
6513 while (radio_num < cac_radios) {
6514 proto_tree *radio_tree = NULL;
6515 uint8_t cac_types = 0;
6517 radio_tree = proto_tree_add_subtree_format(radio_list,
6518 tvb, offset, 5,
6519 ett_cac_capabilities_radio_tree,
6520 NULL, "Radio %u",
6521 radio_num);
6523 proto_tree_add_item(radio_tree,
6524 hf_ieee1905_cac_capabilities_radio_id, tvb,
6525 offset, 6, ENC_NA);
6526 offset += 6;
6528 cac_types = tvb_get_uint8(tvb, offset);
6529 proto_tree_add_item(radio_tree,
6530 hf_ieee1905_cac_capabilities_types_num,
6531 tvb, offset, 1, ENC_NA);
6532 offset += 1;
6534 if (cac_types > 0) {
6535 uint8_t cac_num = 0;
6536 proto_tree *cac_type_list = NULL;
6537 proto_item *rci = NULL;
6538 unsigned cac_type_start = offset;
6539 uint8_t cac_classes = 0;
6541 cac_type_list = proto_tree_add_subtree(radio_tree, tvb, offset,
6542 -1, ett_cac_capabilities_type_list,
6543 &rci, "CAC Type List");
6544 while (cac_num < cac_types) {
6545 proto_tree *cac_type_tree = NULL;
6546 proto_item *cti = NULL;
6548 cac_type_tree = proto_tree_add_subtree_format(cac_type_list,
6549 tvb, offset,
6550 -1, ett_cac_capabilities_type_tree,
6551 &cti, "CAC Type %u", cac_num);
6553 proto_tree_add_item(cac_type_tree,
6554 hf_ieee1905_cac_capabilities_cac_mode, tvb,
6555 offset, 1, ENC_NA);
6556 offset += 1;
6558 proto_tree_add_item(cac_type_tree,
6559 hf_ieee1905_cac_capabilities_cac_seconds, tvb,
6560 offset, 3, ENC_BIG_ENDIAN);
6561 offset += 3;
6563 cac_classes = tvb_get_uint8(tvb, offset);
6564 proto_tree_add_item(cac_type_tree,
6565 hf_ieee1905_cac_capabilities_op_class_num, tvb,
6566 offset, 1, ENC_NA);
6567 offset += 1;
6569 if (cac_classes > 0) {
6570 proto_tree *cac_class_list = NULL;
6571 uint8_t cac_class_num = 0;
6572 proto_item *cli = NULL;
6574 cac_class_list = proto_tree_add_subtree(cac_type_tree,
6575 tvb, offset, -1,
6576 ett_cac_capabilities_class_list, &cli,
6577 "Class List");
6579 while (cac_class_num < cac_classes) {
6580 uint8_t channel_cnt = 0;
6581 proto_tree *cac_class_tree = NULL;
6582 unsigned cac_class_start = offset;
6584 cac_class_tree = proto_tree_add_subtree_format(
6585 cac_class_list, tvb, offset, -1,
6586 ett_cac_capabilities_class_tree, &cti,
6587 "Operating Class %u", cac_class_num);
6589 proto_tree_add_item(cac_class_tree,
6590 hf_ieee1905_cac_capabilities_op_class, tvb,
6591 offset, 1, ENC_NA);
6592 offset += 1;
6594 channel_cnt = tvb_get_uint8(tvb, offset);
6595 proto_tree_add_item(cac_class_tree,
6596 hf_ieee1905_cac_capabilities_channel_cnt,
6597 tvb, offset, 1, ENC_NA);
6598 offset += 1;
6600 if (channel_cnt > 0) {
6601 proto_tree *channel_list = NULL;
6603 channel_list = proto_tree_add_subtree(
6604 cac_class_tree, tvb, offset,
6605 channel_cnt,
6606 ett_cac_capabilities_channel_list,
6607 NULL, "Channel List");
6609 while (channel_cnt > 0) {
6610 proto_tree_add_item(channel_list,
6611 hf_ieee1905_cac_capabillity_channel,
6612 tvb, offset, 1, ENC_NA);
6613 channel_cnt -= 1;
6614 offset += 1;
6618 proto_item_set_len(cti, offset - cac_class_start);
6619 cac_class_num += 1;
6622 cac_num += 1;
6624 proto_item_set_len(rci, offset - cac_type_start);
6627 radio_num += 1;
6629 proto_item_set_len(rli, offset - start_offset);
6632 return offset;
6636 * Dissect a Multi-AP Version TLV
6639 static const range_string multi_ap_version_rvals[] = {
6640 { 0, 0, "Reserved" },
6641 { 1, 1, "Multi-AP Profile 1" },
6642 { 2, 2, "Multi-AP Profile 2" },
6643 { 3, 3, "Multi-AP Profile 3" },
6644 { 4, 255, "Reserved" },
6645 { 0, 0, NULL }
6648 static int
6649 dissect_multi_ap_version(tvbuff_t *tvb, packet_info *pinfo _U_,
6650 proto_tree *tree, unsigned offset, uint16_t len _U_)
6652 proto_tree_add_item(tree, hf_ieee1905_multi_ap_version, tvb, offset, 1,
6653 ENC_NA);
6654 offset += 1;
6656 return offset;
6660 * Dissect an R2 AP Capabilities TLV
6662 static const value_string byte_counter_units_vals[] = {
6663 { 0, "bytes" },
6664 { 1, "kibibytes (KiB)" },
6665 { 2, "mebibytes (MiB)" },
6666 { 3, "reserved" },
6667 { 0, NULL }
6670 static int* const r2_ap_capa_flags[] = {
6671 &hf_ieee1905_byte_counter_units,
6672 &hf_ieee1905_ctag_service_prio_flag,
6673 &hf_ieee1905_dpp_onboarding_flag,
6674 &hf_ieee1905_traffic_separation_flag,
6675 &hf_ieee1905_r2_ap_capa_flags_reserved,
6676 NULL
6679 static int
6680 dissect_r2_ap_capability(tvbuff_t *tvb, packet_info *pinfo _U_,
6681 proto_tree *tree, unsigned offset, uint16_t len _U_)
6683 proto_tree_add_item(tree, hf_ieee1905_max_total_serv_prio_rules, tvb,
6684 offset, 1, ENC_NA);
6685 offset += 1;
6687 proto_tree_add_item(tree, hf_ieee1905_r2_ap_capa_reserved, tvb, offset, 1,
6688 ENC_NA);
6689 offset += 1;
6691 proto_tree_add_bitmask(tree, tvb, offset,
6692 hf_ieee1905_r2_ap_capa_flags,
6693 ett_r2_ap_capa_flags,
6694 r2_ap_capa_flags, ENC_NA);
6695 offset += 1;
6697 proto_tree_add_item(tree, hf_ieee1905_max_vid_count, tvb, offset, 1,
6698 ENC_NA);
6699 offset += 1;
6701 return offset;
6705 * Dissect a Service Prioritization Rule TLV
6707 static int * const default_802_1q_settings_flags[] = {
6708 &hf_ieee1905_default_802_1q_settings_default_pcp,
6709 &hf_ieee1905_default_802_1q_settings_reserved,
6710 NULL
6713 static int
6714 dissect_default_802_1q_settings(tvbuff_t *tvb, packet_info *pinfo _U_,
6715 proto_tree *tree, unsigned offset, uint16_t len _U_)
6717 proto_tree_add_item(tree, hf_ieee1905_default_802_1q_settings_primary_vlan, tvb,
6718 offset, 2, ENC_NA);
6719 offset += 2;
6721 proto_tree_add_bitmask(tree, tvb, offset,
6722 hf_ieee1905_default_802_1q_settings_flags,
6723 ett_default_802_1q_settings_flags,
6724 default_802_1q_settings_flags, ENC_NA);
6725 offset += 1;
6727 return offset;
6731 * Dissect a Traffic Separation Policy TLV
6733 static int
6734 dissect_traffic_separation_policy(tvbuff_t *tvb, packet_info *pinfo _U_,
6735 proto_tree *tree, unsigned offset, uint16_t len _U_)
6737 uint8_t ssid_cnt = tvb_get_uint8(tvb, offset);
6738 uint8_t ssid_num = 0;
6739 proto_tree *ssid_list = NULL;
6740 proto_item *sli = NULL;
6741 unsigned saved_offset = 0;
6743 proto_tree_add_item(tree, hf_ieee1905_traffic_separation_policy_num_ssids,
6744 tvb, offset, 1, ENC_NA);
6745 offset += 1;
6747 if (ssid_cnt > 0) {
6748 ssid_list = proto_tree_add_subtree(tree, tvb, offset, -1,
6749 ett_traffic_separation_ssid_list,
6750 &sli, "SSID List");
6751 saved_offset = offset;
6754 while (ssid_num < ssid_cnt) {
6755 proto_tree *ssid_tree = NULL;
6756 proto_item *si = NULL;
6757 uint8_t ssid_len = tvb_get_uint8(tvb, offset);
6758 unsigned start_offset = offset;
6760 ssid_tree = proto_tree_add_subtree_format(ssid_list, tvb, offset, -1,
6761 ett_traffic_separation_ssid,
6762 &si, "SSID %u", ssid_num);
6764 proto_tree_add_item(ssid_tree,
6765 hf_ieee1905_traffic_separation_policy_ssid_len,
6766 tvb, offset, 1, ENC_NA);
6767 offset += 1;
6769 proto_tree_add_item(ssid_tree,
6770 hf_ieee1905_traffic_separation_policy_ssid,
6771 tvb, offset, ssid_len, ENC_ASCII);
6772 offset += ssid_len;
6774 proto_tree_add_item(ssid_tree,
6775 hf_ieee1905_traffic_separation_policy_vlanid, tvb,
6776 offset, 2, ENC_BIG_ENDIAN);
6777 offset += 2;
6779 proto_item_set_len(si, offset - start_offset);
6780 ssid_num++;
6783 if (ssid_cnt > 0) {
6784 proto_item_set_len(sli, offset - saved_offset);
6787 return offset;
6791 * Dissect a BSS Configuration Report
6793 static int * const bss_config_report_flags[] = {
6794 &hf_ieee1905_bss_config_report_backhaul_bss,
6795 &hf_ieee1905_bss_config_report_fronthaul_bss,
6796 &hf_ieee1905_bss_config_report_r1_disallowed_status,
6797 &hf_ieee1905_bss_config_report_r2_disallowed_status,
6798 &hf_ieee1905_bss_config_report_multiple_bssid_set,
6799 &hf_ieee1905_bss_config_report_transmitted_bssid,
6800 &hf_ieee1905_bss_config_report_reserved,
6801 NULL
6804 static const true_false_string tfs_disallowed_allowed = {
6805 "Disallowed",
6806 "Allowed"
6809 static const true_false_string tfs_configured_not_configured = {
6810 "Configured",
6811 "Not-Configured"
6814 static const true_false_string tfs_not_inuse_inuse = {
6815 "Not in use",
6816 "In use"
6819 static const true_false_string tfs_transmitted_non_transmitted = {
6820 "Transmitted",
6821 "Non-transmitted"
6824 static int
6825 dissect_bss_configuration_report(tvbuff_t *tvb, packet_info *pinfo _U_,
6826 proto_tree *tree, unsigned offset, uint16_t len _U_)
6828 uint8_t radio_count = tvb_get_uint8(tvb, offset);
6829 uint8_t radio_id = 0;
6830 unsigned start_offset;
6831 proto_tree *radio_list = NULL;
6832 proto_item *rti = NULL;
6834 proto_tree_add_item(tree, hf_ieee1905_bss_config_report_radio_count, tvb,
6835 offset, 1, ENC_NA);
6836 offset += 1;
6838 start_offset = offset;
6840 radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
6841 ett_bss_config_report_list, &rti,
6842 "BSS Configuration Radio List");
6843 while (radio_id < radio_count) {
6844 proto_tree *radio_tree = NULL;
6845 proto_tree *bss_list = NULL;
6846 proto_item *rli = NULL, *bli = NULL;
6847 unsigned radio_saved_offset = offset, bss_start_offset = 0;
6848 uint8_t bss_count, bss_id = 0;
6850 radio_tree = proto_tree_add_subtree_format(radio_list, tvb, offset, -1,
6851 ett_bss_config_report_tree,
6852 &rli, "Radio %d", radio_id);
6854 proto_tree_add_item(radio_tree, hf_ieee1905_bss_config_report_radio_id,
6855 tvb, offset, 6, ENC_NA);
6856 offset += 6;
6858 bss_count = tvb_get_uint8(tvb, offset);
6860 proto_tree_add_item(radio_tree, hf_ieee1905_bss_config_report_bss_cnt,
6861 tvb, offset, 1, ENC_NA);
6862 offset += 1;
6864 radio_id++; /* Increment this before we continue */
6866 /* If no BSSes on the radio, skip it. Spec says so. */
6867 if (bss_count == 0) {
6868 proto_item_set_len(rli, offset - radio_saved_offset);
6869 continue;
6872 bss_list = proto_tree_add_subtree(radio_tree, tvb, offset, -1,
6873 ett_bss_config_report_bss_list, &bli,
6874 "BSS List");
6875 bss_start_offset = offset;
6877 while (bss_id < bss_count) {
6878 proto_tree *bss_tree = NULL;
6879 proto_item *bti = NULL;
6880 unsigned bss_item_start = offset;
6881 uint8_t ssid_len = 0;
6883 bss_tree = proto_tree_add_subtree_format(bss_list, tvb, offset,
6884 -1, ett_bss_config_report_bss_tree,
6885 &bti, "BSS %d", bss_id);
6887 proto_tree_add_item(bss_tree, hf_ieee1902_bss_config_report_mac,
6888 tvb, offset, 6, ENC_NA);
6889 offset += 6;
6891 proto_tree_add_bitmask(bss_tree, tvb, offset,
6892 hf_ieee1905_bss_config_report_flags,
6893 ett_bss_config_report_flags,
6894 bss_config_report_flags, ENC_NA);
6895 offset += 1;
6897 proto_tree_add_item(bss_tree, hf_ieee1905_bss_config_report_res,
6898 tvb, offset, 1, ENC_NA);
6899 offset += 1;
6901 ssid_len = tvb_get_uint8(tvb, offset);
6903 proto_tree_add_item(bss_tree,
6904 hf_ieee1902_bss_config_report_ssid_len,
6905 tvb, offset, 1, ENC_NA);
6906 offset += 1;
6908 proto_tree_add_item(bss_tree,
6909 hf_ieee1905_bss_config_report_ssid,
6910 tvb, offset, ssid_len, ENC_ASCII);
6911 offset += ssid_len;
6913 proto_item_set_len(bti, offset - bss_item_start);
6915 bss_id++;
6918 proto_item_set_len(bli, offset - bss_start_offset);
6919 proto_item_set_len(rli, offset - radio_saved_offset);
6922 proto_item_set_len(rti, offset - start_offset);
6924 return offset;
6927 static int
6928 dissect_bssid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
6929 unsigned offset, uint16_t len _U_)
6931 proto_tree_add_item(tree, hf_ieee1905_bssid_tlv_bssid, tvb, offset, 6,
6932 ENC_NA);
6933 offset += 6;
6935 return offset;
6939 * Dissect a Service Prioritization Format TLV
6941 static int * const sp_rule_flags_headers[] = {
6942 &hf_ieee1905_service_prio_rule_add_remove_filter_bit,
6943 &hf_ieee1905_service_prio_rule_flags_reserved,
6944 NULL
6947 static int * const sp_rule_match_headers[] = {
6948 &hf_ieee1905_service_prio_rule_match_always,
6949 &hf_ieee1905_service_prio_rule_match_reserved,
6950 &hf_ieee1905_service_prio_rule_match_up_in_qos,
6951 &hf_ieee1905_service_prio_rule_match_up_control_match,
6952 &hf_ieee1905_service_prio_rule_match_source_mac,
6953 &hf_ieee1905_service_prio_rule_match_source_mac_sense,
6954 &hf_ieee1905_service_prio_rule_match_dest_mac,
6955 &hf_ieee1905_service_prio_rule_match_dest_mac_sense,
6956 NULL
6959 static const true_false_string tfs_add_remove = {
6960 "Add this filter",
6961 "Remove this filter"
6964 static int
6965 dissect_service_prioritization_rule(tvbuff_t *tvb, packet_info *pinfo _U_,
6966 proto_tree *tree, unsigned offset, uint16_t len _U_)
6968 uint8_t flags = 0;
6969 uint8_t match_flags = 0;
6971 proto_tree_add_item(tree, hf_ieee1905_service_prio_rule_id, tvb, offset, 4,
6972 ENC_BIG_ENDIAN);
6973 offset += 4;
6975 flags = tvb_get_uint8(tvb, offset);
6976 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee1905_service_prio_rule_flags,
6977 ett_ieee1905_service_prio_rule_flags,
6978 sp_rule_flags_headers, ENC_NA);
6979 offset += 1;
6981 if ((flags & 0x80) == 0) {
6982 return offset; /* We are done here ... */
6985 proto_tree_add_item(tree, hf_ieee1905_service_prio_rule_precedence, tvb,
6986 offset, 1, ENC_NA);
6987 offset += 1;
6989 proto_tree_add_item(tree, hf_ieee1905_service_prio_rule_output, tvb, offset,
6990 1, ENC_NA);
6991 offset += 1;
6993 match_flags = tvb_get_uint8(tvb, offset);
6994 proto_tree_add_bitmask(tree, tvb, offset,
6995 hf_ieee1905_service_prio_match_flags,
6996 ett_ieee1905_service_prio_rule_match_flags,
6997 sp_rule_match_headers, ENC_NA);
6998 offset += 1;
7000 if (match_flags & 0x20) { /* MATCH UP in 802.11 QOS ... */
7001 proto_tree_add_item(tree, hf_ieee1905_service_prio_rule_up_control, tvb,
7002 offset, 1, ENC_NA);
7003 offset += 1;
7006 if (match_flags & 0x08) {
7007 proto_tree_add_item(tree, hf_ieee1905_service_prio_rule_source_mac, tvb,
7008 offset, 6, ENC_NA);
7009 offset += 6;
7012 if (match_flags & 0x02) {
7013 proto_tree_add_item(tree, hf_ieee1905_service_prio_rule_dest_mac, tvb,
7014 offset, 6, ENC_NA);
7015 offset += 6;
7018 return offset;
7022 * Dissect a DSCP Mapping Table TLV
7024 static int
7025 dissect_dscp_mapping_table(tvbuff_t *tvb, packet_info *pinfo _U_,
7026 proto_tree *tree, unsigned offset, uint16_t len _U_)
7028 int i = 0;
7030 for (i = 0; i < 64; i++) {
7031 uint8_t pcp_val = tvb_get_uint8(tvb, offset);
7033 proto_tree_add_uint_format(tree, hf_ieee1905_dscp_mapping_table_val, tvb,
7034 offset, 1, pcp_val, "DSCP:%d -> PCP: %u", i, pcp_val);
7035 offset += 1;
7038 return offset;
7042 * Dissect an R2 Error Code TLV
7044 static const range_string r2_error_code_rvals[] = {
7045 { 0, 0, "Reserved" },
7046 { 1, 1, "Service Prioritization Rule not found" },
7047 { 2, 2, "Number of Service Prioritization Rules reached the max supported" },
7048 { 3, 3, "Default PCP or VLAN ID not provided" },
7049 { 4, 4, "Reserved" },
7050 { 5, 5, "Number of unique VID exceeds maximum supported" },
7051 { 6, 6, "Reserved" },
7052 { 7, 7, "Traffic Separation one combined fronthaul and Profile-1 backhaul unsupported" },
7053 { 8, 8, "Traffic Separation on combined Profile-1 backhaul and Profile-2 backhaul unsupported" },
7054 { 9, 9, "Service Prioritization Rule not supported" },
7055 { 10, 255, "Reserved" },
7056 { 0, 0, NULL }
7059 static int
7060 dissect_r2_error_code(tvbuff_t *tvb, packet_info *pinfo _U_,
7061 proto_tree *tree, unsigned offset, uint16_t len _U_)
7063 uint8_t reason_code = tvb_get_uint8(tvb, offset);
7065 proto_tree_add_item(tree, hf_ieee1905_r2_error_reason_code, tvb, offset, 1,
7066 ENC_NA);
7067 offset += 1;
7069 if (reason_code == 7 || reason_code == 8) {
7070 proto_tree_add_item(tree, hf_ieee1905_r2_error_bssid,
7071 tvb, offset, 6, ENC_NA);
7072 offset += 6;
7075 return offset;
7079 * Dissect an AP Radio Advanced Capabilities TLV
7082 static int * const ap_radio_advanced_capa_flags[] = {
7083 &hf_ieee1905_ap_radio_advance_capa_backhaul_bss_traffic_sep,
7084 &hf_ieee1905_ap_radio_advance_capa_combined_r1_r2_backhaul,
7085 &hf_ieee1905_ap_radio_advance_capa_reserved,
7086 NULL
7089 static int
7090 dissect_ap_radio_advanced_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
7091 proto_tree *tree, unsigned offset, uint16_t len _U_)
7093 proto_tree_add_item(tree, hf_ieee1905_ap_radio_advanced_capa_radio_id, tvb,
7094 offset, 6, ENC_NA);
7095 offset += 6;
7097 proto_tree_add_bitmask(tree, tvb, offset,
7098 hf_ieee1905_radio_advanced_capa_flags,
7099 ett_radio_advanced_capa_flags,
7100 ap_radio_advanced_capa_flags, ENC_NA);
7101 offset += 1;
7103 return offset;
7107 * Dissect an Association Status Notification TLV:
7109 static const range_string assoc_status_notif_status_rvals[] = {
7110 { 0, 0, "No more associations allowed" },
7111 { 1, 1, "Associations allowed" },
7112 { 2, 255, "Reserved" },
7113 { 0, 0, NULL }
7116 static int
7117 dissect_association_status_notification(tvbuff_t *tvb, packet_info *pinfo _U_,
7118 proto_tree *tree, unsigned offset, uint16_t len _U_)
7120 uint8_t num_bssids = tvb_get_uint8(tvb, offset);
7122 proto_tree_add_item(tree, hf_ieee1905_assoc_status_notif_num_bssid, tvb,
7123 offset, 1, ENC_NA);
7124 offset += 1;
7126 if (num_bssids > 0) {
7127 proto_tree *bssid_list = NULL;
7128 uint8_t bssid_num = 0;
7130 bssid_list = proto_tree_add_subtree(tree, tvb, offset,
7131 7 * num_bssids,
7132 ett_assoc_status_notif_bssid_list, NULL,
7133 "BSSID list");
7134 while (bssid_num < num_bssids) {
7135 proto_tree *bssid_tree = NULL;
7137 bssid_tree = proto_tree_add_subtree_format(bssid_list, tvb, offset,
7138 7, ett_assoc_status_notif_bssid_tree, NULL,
7139 "BSSID %u", bssid_num);
7141 proto_tree_add_item(bssid_tree,
7142 hf_ieee1905_assoc_status_notif_bssid, tvb,
7143 offset, 6, ENC_NA);
7144 offset += 6;
7146 proto_tree_add_item(bssid_tree,
7147 hf_ieee1905_assoc_status_notif_status,
7148 tvb, offset, 1, ENC_NA);
7149 offset += 1;
7151 bssid_num++;
7155 return offset;
7159 * Dissect a Source Info TLV:
7161 static int
7162 dissect_source_info(tvbuff_t *tvb, packet_info *pinfo _U_,
7163 proto_tree *tree, unsigned offset, uint16_t len _U_)
7165 proto_tree_add_item(tree, hf_ieee1905_source_info_mac_addr, tvb, offset,
7166 6, ENC_NA);
7167 offset += 6;
7169 return offset;
7173 * Dissect a Tunneled Message Type TLV:
7175 static const range_string tunneled_message_type_rvals[] = {
7176 { 0, 0, "Association Request" },
7177 { 1, 1, "Re-Association Request" },
7178 { 2, 2, "BTM Query" },
7179 { 3, 3, "WNM Request" },
7180 { 4, 4, "ANQP Request for Neighbor Report" },
7181 { 5, 5, "DPP Message" },
7182 { 6, 255, "Reserved" },
7183 { 0, 0, NULL }
7186 static int
7187 dissect_tunneled_message_type(tvbuff_t *tvb, packet_info *pinfo _U_,
7188 proto_tree *tree, unsigned offset, uint16_t len _U_)
7190 proto_tree_add_item(tree, hf_ieee1905_tunneled_message_type, tvb, offset,
7191 1, ENC_NA);
7192 offset += 1;
7194 return offset;
7198 * Dissect a Tunneled TLV:
7200 static int
7201 dissect_tunneled(tvbuff_t *tvb, packet_info *pinfo _U_,
7202 proto_tree *tree, unsigned offset, uint16_t len)
7204 proto_tree_add_item(tree, hf_ieee1905_tunneled_data, tvb, offset, len,
7205 ENC_NA);
7208 * TODO: Save the tunnelled type and then dissect the message
7210 offset += len;
7212 return offset;
7216 * Dissect an R2 Steering Request TLV:
7218 static int * const r2_steering_flags[] = {
7219 &hf_ieee1905_r2_steering_request_mode_flag,
7220 &hf_ieee1905_r2_btm_disassoc_imminent_flag,
7221 &hf_ieee1905_r2_btm_abridged_flag,
7222 &hf_ieee1905_r2_steering_req_reserved,
7223 NULL,
7226 static int
7227 dissect_r2_steering_request(tvbuff_t *tvb, packet_info *pinfo _U_,
7228 proto_tree *tree, unsigned offset, uint16_t len _U_)
7230 uint8_t sta_list_count = 0;
7231 uint8_t target_count = 0;
7232 proto_item *steer_item = NULL;
7234 proto_tree_add_item(tree, hf_ieee1905_r2_steering_req_src_bssid, tvb,
7235 offset, 6, ENC_NA);
7236 offset += 6;
7238 proto_tree_add_bitmask(tree, tvb, offset,
7239 hf_ieee1905_r2_steering_req_flags,
7240 ett_ieee1905_steering_request_flags,
7241 r2_steering_flags, ENC_NA);
7242 offset += 1;
7244 proto_tree_add_item(tree, hf_ieee1905_r2_steering_op_window, tvb, offset,
7245 2, ENC_BIG_ENDIAN);
7246 offset += 2;
7248 proto_tree_add_item(tree, hf_ieee1905_r2_steering_btm_dissasoc_tmr, tvb,
7249 offset, 2, ENC_BIG_ENDIAN);
7250 offset += 2;
7252 sta_list_count = tvb_get_uint8(tvb, offset);
7253 steer_item = proto_tree_add_item(tree, hf_ieee1905_r2_steering_sta_count,
7254 tvb, offset, 1, ENC_NA);
7255 offset += 1;
7257 if (sta_list_count == 0) {
7258 proto_item_append_text(steer_item, " (Steering request applies to all"
7259 "AMB capable associated STAs in the"
7260 "BSS)");
7261 } else {
7262 proto_tree *amb_list = NULL;
7264 amb_list = proto_tree_add_subtree(tree, tvb, offset, 6 * sta_list_count,
7265 ett_r2_steering_sta_list, NULL,
7266 "AMB capable STA list");
7267 while (sta_list_count > 0) {
7268 proto_tree_add_item(amb_list, hf_ieee1905_r2_steering_sta_mac, tvb,
7269 offset, 6, ENC_NA);
7270 offset += 6;
7272 sta_list_count -= 1;
7276 target_count = tvb_get_uint8(tvb, offset);
7277 proto_tree_add_item(tree, hf_ieee1905_r2_steering_target_count, tvb, offset,
7278 1, ENC_NA);
7279 offset += 1;
7281 if (target_count > 0) {
7282 proto_tree *target_list = NULL;
7283 int target_num = 0;
7285 target_list = proto_tree_add_subtree(tree, tvb, offset,
7286 9 * target_count,
7287 ett_r2_steering_target_list,
7288 NULL, "Target BSS list");
7289 while (target_num < target_count) {
7290 proto_tree *target = NULL;
7292 target = proto_tree_add_subtree_format(target_list, tvb, offset, 9,
7293 ett_r2_steering_target,
7294 NULL, "Target BSS %u",
7295 target_num);
7297 proto_tree_add_item(target, hf_ieee1905_r2_steering_target_bssid,
7298 tvb, offset, 6, ENC_NA);
7299 offset += 6;
7301 proto_tree_add_item(target, hf_ieee1905_r2_steering_target_op_class,
7302 tvb, offset, 1, ENC_NA);
7303 offset += 1;
7305 proto_tree_add_item(target, hf_ieee1905_r2_steering_target_channel,
7306 tvb, offset, 1, ENC_NA);
7307 offset += 1;
7309 proto_tree_add_item(target, hf_ieee1905_r2_steering_reason, tvb,
7310 offset, 1, ENC_NA);
7311 offset += 1;
7313 target_num += 1;
7317 return offset;
7321 * Dissect an Unsuccessful Association Policy TLV:
7323 static int
7324 dissect_unsuccessful_association_policy(tvbuff_t *tvb, packet_info *pinfo _U_,
7325 proto_tree *tree, unsigned offset, uint16_t len _U_)
7327 static int * const capabilities[] = {
7328 &hf_ieee1905_rpt_unsuccessful_assoc_report,
7329 NULL,
7332 proto_tree_add_bitmask(tree, tvb, offset,
7333 hf_ieee1905_rpt_unsuccessful_associations,
7334 ett_ieee1905_unsuccessful_associations,
7335 capabilities, ENC_NA);
7336 offset++;
7338 proto_tree_add_item(tree, hf_ieee1905_max_reporting_rate,
7339 tvb, offset, 4, ENC_NA);
7340 offset += 4;
7342 return offset;
7346 * Dissect a Metric Collection Interval TLV:
7348 static int
7349 dissect_metric_collection_interval(tvbuff_t *tvb, packet_info *pinfo _U_,
7350 proto_tree *tree, unsigned offset, uint16_t len)
7352 proto_tree_add_item(tree, hf_ieee1905_metric_collection_interval,
7353 tvb, offset, 4, ENC_NA);
7354 offset += len;
7356 return offset;
7360 * Dissect a Radio Metrics TLV:
7362 static int
7363 dissect_radio_metrics(tvbuff_t *tvb, packet_info *pinfo _U_,
7364 proto_tree *tree, unsigned offset, uint16_t len _U_)
7366 proto_tree_add_item(tree, hf_ieee1905_radio_metrics_radio_id,
7367 tvb, offset, 6, ENC_NA);
7368 offset += 6;
7370 proto_tree_add_item(tree, hf_ieee1905_radio_metrics_noise, tvb,
7371 offset, 1, ENC_NA);
7372 offset += 1;
7374 proto_tree_add_item(tree, hf_ieee1905_radio_metrics_transmit, tvb,
7375 offset, 1, ENC_NA);
7376 offset += 1;
7378 proto_tree_add_item(tree, hf_ieee1905_radio_metrics_receive_self, tvb,
7379 offset, 1, ENC_NA);
7380 offset += 1;
7382 proto_tree_add_item(tree, hf_ieee1905_radio_metrics_receive_other, tvb,
7383 offset, 1, ENC_NA);
7384 offset += 1;
7386 return offset;
7390 * Dissect an AP Extended Metrics TLV:
7392 static int
7393 dissect_ap_extended_metrics(tvbuff_t *tvb, packet_info *pinfo _U_,
7394 proto_tree *tree, unsigned offset, uint16_t len _U_)
7396 proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_bssid, tvb,
7397 offset, 6, ENC_NA);
7398 offset += 6;
7400 proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_unicast_sent, tvb,
7401 offset, 4, ENC_NA);
7402 offset += 4;
7404 proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_unicast_rcvd,
7405 tvb, offset, 4, ENC_NA);
7406 offset += 4;
7408 proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_multicast_sent,
7409 tvb, offset, 4, ENC_NA);
7410 offset += 4;
7412 proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_multicast_rcvd,
7413 tvb, offset, 4, ENC_NA);
7414 offset += 4;
7416 proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_bcast_sent,
7417 tvb, offset, 4, ENC_NA);
7418 offset += 4;
7420 proto_tree_add_item(tree, hf_ieee1905_ap_extended_metrics_bcast_rcvd,
7421 tvb, offset, 4, ENC_NA);
7422 offset += 4;
7424 return offset;
7428 * Dissect an Status Code TLV:
7430 static int
7431 dissect_status_code(tvbuff_t *tvb, packet_info *pinfo _U_,
7432 proto_tree *tree, unsigned offset, uint16_t len _U_)
7434 proto_tree_add_item(tree, hf_ieee1905_status_code_status, tvb,
7435 offset, 2, ENC_NA);
7436 offset += 2;
7438 return offset;
7442 * Dissect a Disassociation Reason Code TLV:
7444 static int
7445 dissect_disassociation_reason_code(tvbuff_t *tvb, packet_info *pinfo _U_,
7446 proto_tree *tree, unsigned offset, uint16_t len _U_)
7448 proto_tree_add_item(tree, hf_ieee1905_disassociation_reason_code, tvb,
7449 offset, 2, ENC_BIG_ENDIAN);
7450 offset += 2;
7452 return offset;
7456 * Dissect a Backhaul STA Radio Capabilitoes TLV:
7458 static int * const backhaul_sta_radio_capa_flags[] = {
7459 &hf_ieee1905_backhaul_sta_radio_capa_mac_included,
7460 &hf_ieee1905_backhaul_sta_radio_capa_reserved,
7461 NULL
7464 static int
7465 dissect_backhaul_sta_radio_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
7466 proto_tree *tree, unsigned offset, uint16_t len _U_)
7468 uint8_t mac_addr_included = 0;
7470 proto_tree_add_item(tree, hf_ieee1905_backhaul_sta_radio_id, tvb, offset,
7471 6, ENC_NA);
7472 offset += 6;
7474 mac_addr_included = tvb_get_uint8(tvb, offset);
7475 proto_tree_add_bitmask(tree, tvb, offset,
7476 hf_ieee1905_backhaul_sta_radio_capabilities,
7477 ett_backhaul_sta_radio_capa_flags,
7478 backhaul_sta_radio_capa_flags, ENC_NA);
7479 offset += 1;
7481 if (mac_addr_included & 0x80) {
7482 proto_tree_add_item(tree, hf_ieee1905_backhaul_sta_addr, tvb, offset,
7483 6, ENC_NA);
7484 offset += 6;
7487 return offset;
7491 * Dissect an AKM Suite Capabilities TLV:
7493 static int
7494 dissect_akm_suite_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
7495 proto_tree *tree, unsigned offset, uint16_t len _U_)
7497 uint8_t backhaul_akm_suite_count = 0;
7498 uint8_t fronthaul_akm_suite_count = 0;
7500 backhaul_akm_suite_count = tvb_get_uint8(tvb, offset);
7501 proto_tree_add_item(tree, hf_ieee1905_backhaul_akm_suite_capa_count, tvb,
7502 offset, 1, ENC_NA);
7503 offset += 1;
7505 if (backhaul_akm_suite_count > 0) {
7506 uint8_t backhaul_suite_num = 0;
7507 proto_tree *backhaul_suite_list = NULL;
7509 backhaul_suite_list = proto_tree_add_subtree(tree, tvb, offset,
7510 backhaul_akm_suite_count * 4,
7511 ett_backhaul_akm_suite_list, NULL,
7512 "Backhaul AKM Suite list");
7514 while (backhaul_suite_num < backhaul_akm_suite_count) {
7515 proto_tree *backhaul_akm_suite = NULL;
7517 backhaul_akm_suite = proto_tree_add_subtree_format(backhaul_suite_list,
7518 tvb, offset, 4, ett_backhaul_akm_suite, NULL,
7519 "Backhaul AKM Suite %u", backhaul_suite_num++);
7521 proto_tree_add_item(backhaul_akm_suite,
7522 hf_ieee1905_akm_backhaul_suite_oui, tvb,
7523 offset, 3, ENC_NA);
7524 offset += 3;
7526 proto_tree_add_item(backhaul_akm_suite,
7527 hf_ieee1905_akm_backhaul_suite_type, tvb,
7528 offset, 1, ENC_NA);
7529 offset += 1;
7533 fronthaul_akm_suite_count = tvb_get_uint8(tvb, offset);
7534 proto_tree_add_item(tree, hf_ieee1905_fronthaul_akm_suite_capa_count, tvb,
7535 offset, 1, ENC_NA);
7536 offset += 1;
7538 if (fronthaul_akm_suite_count > 0) {
7539 uint8_t fronthaul_suite_num = 0;
7540 proto_tree *fronthaul_suite_list = NULL;
7542 fronthaul_suite_list = proto_tree_add_subtree(tree, tvb, offset,
7543 fronthaul_akm_suite_count * 4,
7544 ett_fronthaul_akm_suite_list, NULL,
7545 "Fronthaul AKM Suite list");
7547 while (fronthaul_suite_num < fronthaul_akm_suite_count) {
7548 proto_tree *fronthaul_akm_suite = NULL;
7550 fronthaul_akm_suite = proto_tree_add_subtree_format(fronthaul_suite_list,
7551 tvb, offset, 4, ett_fronthaul_akm_suite, NULL,
7552 "Fronthaul AKM Suite %u", fronthaul_suite_num++);
7554 proto_tree_add_item(fronthaul_akm_suite,
7555 hf_ieee1905_akm_fronthaul_suite_oui, tvb,
7556 offset, 3, ENC_NA);
7557 offset += 3;
7559 proto_tree_add_item(fronthaul_akm_suite,
7560 hf_ieee1905_akm_fronthaul_suite_type, tvb,
7561 offset, 1, ENC_NA);
7562 offset += 1;
7566 return offset;
7569 static const true_false_string tfs_dpp_frame_indicator = {
7570 "GAS frame",
7571 "DPP public action frame"
7574 static int * const ieee1905_encap_dpp_flags[] = {
7575 &hf_ieee1905_dpp_encap_enrollee_mac_present,
7576 &hf_ieee1905_dpp_encap_reserved,
7577 &hf_ieee1905_dpp_encap_frame_type_flag,
7578 &hf_ieee1905_dpp_encap_reserved2,
7579 NULL
7582 static int
7583 dissect_1905_encap_dpp(tvbuff_t *tvb, packet_info *pinfo,
7584 proto_tree *tree, unsigned offset, uint16_t len _U_)
7586 uint8_t flags = tvb_get_uint8(tvb, offset);
7587 uint16_t frame_length;
7589 proto_tree_add_bitmask(tree, tvb, offset,
7590 hf_ieee1905_encap_dpp_flags,
7591 ett_1905_encap_dpp_flags,
7592 ieee1905_encap_dpp_flags, ENC_NA);
7593 offset += 1;
7595 if (flags & 0x80) { /* Enrollee MAC present */
7596 proto_tree_add_item(tree, hf_ieee1905_encap_dpp_sta_mac, tvb, offset,
7597 6, ENC_NA);
7598 offset += 6;
7601 proto_tree_add_item(tree, hf_ieee1905_dpp_encap_frame_type, tvb, offset, 1,
7602 ENC_NA);
7603 offset += 1;
7605 frame_length = tvb_get_ntohs(tvb, offset);
7606 proto_tree_add_item(tree, hf_ieee1905_dpp_encap_frame_length, tvb, offset,
7607 2, ENC_BIG_ENDIAN);
7608 offset += 2;
7610 if (flags & 0x20) {
7611 uint8_t code;
7612 tvbuff_t *new_tvb;
7614 code = tvb_get_uint8(tvb, offset);
7615 proto_tree_add_item(tree, hf_ieee1905_dpp_message_public_action, tvb,
7616 offset, 1, ENC_NA);
7617 offset += 1;
7619 new_tvb = tvb_new_subset_length(tvb, offset, frame_length - 1);
7621 add_ff_action_public_fields(tree, new_tvb, pinfo, 0, code);
7623 offset += frame_length - 1;
7624 } else {
7625 tvbuff_t *new_tvb;
7627 proto_tree_add_item(tree, hf_ieee1905_dpp_encap_public_action, tvb,
7628 offset, 1, ENC_NA);
7629 offset += 1;
7631 proto_tree_add_item(tree, hf_ieee1905_dpp_encap_dpp_oui, tvb, offset,
7632 3, ENC_NA);
7633 offset += 3;
7635 proto_tree_add_item(tree, hf_ieee1905_dpp_encap_dpp_subtype, tvb,
7636 offset, 1, ENC_NA);
7637 offset += 1;
7639 new_tvb = tvb_new_subset_length(tvb, offset, frame_length - 5);
7640 dissect_wifi_dpp_public_action(new_tvb, pinfo, tree, NULL);
7642 offset += (frame_length - 5);
7645 return offset;
7649 * Dissect a 1905 Encap EAPOL TLV:
7651 static int
7652 dissect_1905_encap_eapol(tvbuff_t *tvb, packet_info *pinfo,
7653 proto_tree *tree, unsigned offset, uint16_t len)
7655 offset += call_dissector(eapol_handle,
7656 tvb_new_subset_length(tvb, offset, len),
7657 pinfo, tree);
7659 return offset;
7663 * Dissect a DPP Bootstrapping URI Notification TLV:
7665 static int
7666 dissect_dpp_bootstrapping_uri_notification(tvbuff_t *tvb, packet_info *pinfo _U_,
7667 proto_tree *tree, unsigned offset, uint16_t len)
7669 uint16_t uri_len;
7671 proto_tree_add_item(tree, hf_ieee1905_dpp_bootstrapping_uri_radio_id,
7672 tvb, offset, 6, ENC_NA);
7673 offset += 6;
7675 proto_tree_add_item(tree, hf_ieee1905_dpp_bootstrapping_uri_local_mac_addr,
7676 tvb, offset, 6, ENC_NA);
7677 offset += 6;
7679 proto_tree_add_item(tree, hf_ieee1905_dpp_bootstrapping_uri_bsta_mac_addr,
7680 tvb, offset, 6, ENC_NA);
7681 offset += 6;
7683 /* Assume we got the whole URI */
7684 uri_len = len - 18;
7685 proto_tree_add_item(tree, hf_ieee1905_dpp_bootstrapping_uri_received,
7686 tvb, offset, uri_len, ENC_ASCII);
7687 offset += uri_len;
7689 return offset;
7693 * Dissect a DPP CCE Indication TLV:
7695 static int
7696 dissect_dpp_cce_indication(tvbuff_t *tvb, packet_info *pinfo _U_,
7697 proto_tree *tree, unsigned offset, uint16_t len _U_)
7699 proto_tree_add_item(tree, hf_ieee1905_dpp_advertise_cce_flag, tvb, offset,
7700 1, ENC_NA);
7701 offset += 1;
7703 return offset;
7707 * Dissect a DPP Chirp Value TLV:
7709 static int * const dpp_chirp_headers[] = {
7710 &hf_ieee1905_dpp_chirp_enrollee_mac_addr_present,
7711 &hf_ieee1905_dpp_chirp_hash_validity,
7712 &hf_ieee1905_dpp_chirp_reserved,
7713 NULL
7716 static const true_false_string tfs_chirp_hash_validity_bit = {
7717 "Establish DPP authentication state pertaining to this hash value",
7718 "Purge any DPP authentication state pertaining to this hash value"
7721 static int
7722 dissect_dpp_chirp_value(tvbuff_t *tvb, packet_info *pinfo _U_,
7723 proto_tree *tree, unsigned offset, uint16_t len _U_)
7725 uint8_t flags = tvb_get_uint8(tvb, offset);
7726 uint8_t hash_length = 0;
7728 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
7729 hf_ieee1905_dpp_chirp_value_flags,
7730 ett_ieee1905_dpp_chirp, dpp_chirp_headers, ENC_NA,
7731 BMT_NO_APPEND);
7732 offset += 1;
7734 if (flags & 0x80) {
7735 proto_tree_add_item(tree, hf_ieee1905_dpp_chirp_enrollee_mac_addr, tvb,
7736 offset, 6, ENC_NA);
7737 offset += 6;
7740 hash_length = tvb_get_uint8(tvb, offset);
7741 proto_tree_add_item(tree, hf_ieee1905_dpp_chirp_value_hash_length, tvb,
7742 offset, 1, ENC_NA);
7743 offset += 1;
7745 if (hash_length) {
7746 proto_tree_add_item(tree, hf_ieee1905_dpp_chirp_value_hash_value, tvb,
7747 offset, hash_length, ENC_NA);
7748 offset += hash_length;
7751 return offset;
7754 static int
7755 dissect_device_inventory(tvbuff_t *tvb, packet_info *pinfo _U_,
7756 proto_tree *tree, unsigned offset, uint16_t len _U_)
7758 uint8_t lsn = tvb_get_uint8(tvb, offset);
7759 unsigned lsv = 0, lee = 0, num_radios = 0;
7761 proto_tree_add_item(tree, hf_ieee1905_dev_inventory_lsn, tvb, offset, 1,
7762 ENC_NA);
7763 offset += 1;
7765 proto_tree_add_item(tree, hf_ieee1905_dev_inventory_serial, tvb, offset,
7766 lsn, ENC_ASCII);
7767 offset += lsn;
7769 lsv = tvb_get_uint8(tvb, offset);
7770 proto_tree_add_item(tree, hf_ieee1905_dev_inventory_lsv, tvb, offset, 1,
7771 ENC_NA);
7772 offset += 1;
7774 proto_tree_add_item(tree, hf_ieee1905_dev_inventory_sw_vers, tvb, offset,
7775 lsv, ENC_ASCII);
7776 offset += lsv;
7778 lee = tvb_get_uint8(tvb, offset);
7779 proto_tree_add_item(tree, hf_ieee1905_dev_inventory_lee, tvb, offset, 1,
7780 ENC_NA);
7781 offset += 1;
7783 proto_tree_add_item(tree, hf_ieee1905_dev_inventory_exec_env, tvb, offset,
7784 lee, ENC_ASCII);
7785 offset += lee;
7787 num_radios = tvb_get_uint8(tvb, offset);
7788 proto_tree_add_item(tree, hf_ieee1905_dev_inventory_num_radios, tvb, offset,
7789 1, ENC_NA);
7790 offset += 1;
7792 if (num_radios > 0) {
7793 uint8_t radio_id = 0;
7794 proto_tree *radio_list = NULL;
7795 proto_item *rli = NULL;
7796 unsigned start_list_offset = offset;
7798 radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
7799 ett_device_inventory_radio_list,
7800 &rli, "Radio List");
7802 while (num_radios > 0) {
7803 uint8_t lcv = 0;
7804 proto_tree *radio_tree = NULL;
7805 proto_item *rti = NULL;
7806 unsigned start_tree_offset = offset;
7808 radio_tree = proto_tree_add_subtree_format(radio_list, tvb, offset,
7809 -1, ett_device_inventory_radio_tree,
7810 &rti, "Radio %u", radio_id);
7812 proto_tree_add_item(radio_tree, hf_ieee1905_dev_inventory_radio_id,
7813 tvb, offset, 6, ENC_NA);
7814 offset += 6;
7816 lcv = tvb_get_uint8(tvb, offset);
7817 proto_tree_add_item(radio_tree, hf_ieee1905_dev_inventory_lcv, tvb,
7818 offset, 1, ENC_NA);
7819 offset += 1;
7821 proto_tree_add_item(radio_tree, hf_ieee1905_dev_inventory_chp_ven,
7822 tvb, offset, lcv, ENC_ASCII);
7823 offset += lcv;
7825 proto_item_set_len(rti, offset - start_tree_offset);
7826 num_radios -= 1;
7827 radio_id += 1;
7829 proto_item_set_len(rli, offset - start_list_offset);
7832 return offset;
7835 static int
7836 dissect_bss_configuration_request(tvbuff_t *tvb, packet_info *pinfo _U_,
7837 proto_tree *tree, unsigned offset, uint16_t len)
7839 proto_tree_add_item(tree, hf_ieee1905_bss_configuration_request, tvb,
7840 offset, len, ENC_NA);
7841 offset += len;
7843 return offset;
7846 static int
7847 dissect_bss_configuration_response(tvbuff_t *tvb, packet_info *pinfo _U_,
7848 proto_tree *tree, unsigned offset, uint16_t len)
7850 proto_tree_add_item(tree, hf_ieee1905_bss_configuration_response, tvb,
7851 offset, len, ENC_NA);
7852 offset += len;
7854 return offset;
7857 static int
7858 dissect_dpp_message(tvbuff_t *tvb, packet_info *pinfo,
7859 proto_tree *tree, unsigned offset, uint16_t len)
7861 uint8_t code;
7862 tvbuff_t *new_tvb;
7864 code = tvb_get_uint8(tvb, offset);
7865 proto_tree_add_item(tree, hf_ieee1905_dpp_message_public_action, tvb,
7866 offset, 1, ENC_NA);
7867 offset += 1;
7869 new_tvb = tvb_new_subset_length(tvb, offset, len - 1);
7871 add_ff_action_public_fields(tree, new_tvb, pinfo, 0, code);
7873 offset += len -1;
7875 return offset;
7878 static int * const spatial_reuse_bss_color[] = {
7879 &hf_ieee1905_spatial_reuse_reserved,
7880 &hf_ieee1905_spatial_reuse_bss_color,
7881 NULL
7884 static int * const spatial_reuse_hesiga_flags[] = {
7885 &hf_ieee1905_spatial_reuse_reserved2,
7886 &hf_ieee1905_spatial_reuse_hesiga_value15_allowed,
7887 &hf_ieee1905_spatial_reuse_srg_info_valid,
7888 &hf_ieee1905_spatial_reuse_non_srg_offset_valid,
7889 &hf_ieee1905_spatial_reuse_reserved3,
7890 &hf_ieee1905_spatial_reuse_psr_disallowed,
7891 NULL
7894 #define SRG_INFO_VALID 0x08
7895 #define NON_SRG_OFFSET_VALID 0x04
7897 static int
7898 dissect_spatial_reuse_request(tvbuff_t *tvb, packet_info *pinfo _U_,
7899 proto_tree *tree, unsigned offset, uint16_t len _U_)
7901 uint8_t flags2;
7903 proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_req_radio_id,
7904 tvb, offset, 6, ENC_NA);
7905 offset += 6;
7907 proto_tree_add_bitmask(tree, tvb, offset,
7908 hf_ieee1905_spatial_reuse_color_flags,
7909 ett_ieee1905_spatial_reuse_color,
7910 spatial_reuse_bss_color, ENC_NA);
7911 offset += 1;
7913 flags2 = tvb_get_uint8(tvb, offset);
7914 proto_tree_add_bitmask(tree, tvb, offset,
7915 hf_ieee1905_spatial_reuse_hesiga_flags,
7916 ett_ieee1905_spatial_reuse_hesiga,
7917 spatial_reuse_hesiga_flags, ENC_NA);
7918 offset += 1;
7920 if (flags2 & NON_SRG_OFFSET_VALID) {
7921 proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_non_srg_obsspd_max_offset,
7922 tvb, offset, 1, ENC_NA);
7923 offset += 1;
7924 } else {
7925 proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_not_valid1, tvb,
7926 offset, 1, ENC_NA);
7927 offset += 1;
7930 if (flags2 & SRG_INFO_VALID) {
7931 proto_tree_add_item(tree,
7932 hf_ieee1905_spatial_reuse_srg_obsspd_min_offset,
7933 tvb, offset, 1, ENC_NA);
7934 offset += 1;
7936 proto_tree_add_item(tree,
7937 hf_ieee1905_spatial_reuse_srg_obsspd_max_offset,
7938 tvb, offset, 1, ENC_NA);
7939 offset += 1;
7941 proto_tree_add_item(tree,
7942 hf_ieee1905_spatial_reuse_srg_bss_color_bitmap,
7943 tvb, offset, 8, ENC_BIG_ENDIAN);
7944 offset += 8;
7946 proto_tree_add_item(tree,
7947 hf_ieee1905_spatial_reuse_srg_partial_bssid_bitmap,
7948 tvb, offset, 8, ENC_BIG_ENDIAN);
7949 offset += 8;
7950 } else {
7951 proto_tree_add_item(tree,
7952 hf_ieee1905_spatial_reuse_not_valid2, tvb,
7953 offset, 1, ENC_NA);
7954 offset += 1;
7956 proto_tree_add_item(tree,
7957 hf_ieee1905_spatial_reuse_not_valid3, tvb,
7958 offset, 1, ENC_NA);
7959 offset += 1;
7961 proto_tree_add_item(tree,
7962 hf_ieee1905_spatial_reuse_not_valid4, tvb,
7963 offset, 8, ENC_BIG_ENDIAN);
7964 offset += 8;
7966 proto_tree_add_item(tree,
7967 hf_ieee1905_spatial_reuse_not_valid5, tvb,
7968 offset, 8, ENC_BIG_ENDIAN);
7969 offset += 8;
7972 proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_reserved4, tvb,
7973 offset, 2, ENC_BIG_ENDIAN);
7974 offset += 2;
7976 return offset;
7979 static int * const spatial_reuse_rep_bss_color[] = {
7980 &hf_ieee1905_spatial_reuse_rep_reserved,
7981 &hf_ieee1905_spatial_reuse_rep_partial_bss_color,
7982 &hf_ieee1905_spatial_reuse_rep_bss_color,
7983 NULL
7986 static int * const spatial_reuse_rep_hesiga_flags[] = {
7987 &hf_ieee1905_spatial_reuse_rep_reserved2,
7988 &hf_ieee1905_spatial_reuse_rep_hesiga_value15_allowed,
7989 &hf_ieee1905_spatial_reuse_rep_srg_info_valid,
7990 &hf_ieee1905_spatial_reuse_rep_non_srg_offset_valid,
7991 &hf_ieee1905_spatial_reuse_rep_reserved3,
7992 &hf_ieee1905_spatial_reuse_rep_psr_disallowed,
7993 NULL
7996 static int
7997 dissect_spatial_reuse_report(tvbuff_t *tvb, packet_info *pinfo _U_,
7998 proto_tree *tree, unsigned offset, uint16_t len _U_)
8000 uint8_t flags2;
8002 proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_rep_radio_id,
8003 tvb, offset, 6, ENC_NA);
8004 offset += 6;
8006 proto_tree_add_bitmask(tree, tvb, offset,
8007 hf_ieee1905_spatial_reuse_rep_color_flags,
8008 ett_ieee1905_spatial_reuse_rep_color,
8009 spatial_reuse_rep_bss_color, ENC_NA);
8010 offset += 1;
8012 flags2 = tvb_get_uint8(tvb, offset);
8013 proto_tree_add_bitmask(tree, tvb, offset,
8014 hf_ieee1905_spatial_reuse_rep_hesiga_flags,
8015 ett_ieee1905_spatial_reuse_rep_hesiga,
8016 spatial_reuse_rep_hesiga_flags, ENC_NA);
8017 offset += 1;
8019 if (flags2 & NON_SRG_OFFSET_VALID) {
8020 proto_tree_add_item(tree,
8021 hf_ieee1905_spatial_reuse_rep_non_srg_obsspd_max_offset, tvb,
8022 offset, 1, ENC_NA);
8023 offset += 1;
8024 } else {
8025 proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_rep_not_valid1, tvb,
8026 offset, 1, ENC_NA);
8027 offset += 1;
8030 if (flags2 & SRG_INFO_VALID) {
8031 proto_tree_add_item(tree,
8032 hf_ieee1905_spatial_reuse_rep_srg_obsspd_min_offset,
8033 tvb, offset, 1, ENC_NA);
8034 offset += 1;
8036 proto_tree_add_item(tree,
8037 hf_ieee1905_spatial_reuse_rep_srg_obsspd_max_offset,
8038 tvb, offset, 1, ENC_NA);
8039 offset += 1;
8041 proto_tree_add_item(tree,
8042 hf_ieee1905_spatial_reuse_rep_srg_bss_color_bitmap,
8043 tvb, offset, 8, ENC_BIG_ENDIAN);
8044 offset += 8;
8046 proto_tree_add_item(tree,
8047 hf_ieee1905_spatial_reuse_rep_srg_partial_bssid_bitmap,
8048 tvb, offset, 8, ENC_BIG_ENDIAN);
8049 offset += 8;
8050 } else {
8051 proto_tree_add_item(tree,
8052 hf_ieee1905_spatial_reuse_rep_not_valid2, tvb,
8053 offset, 1, ENC_NA);
8054 offset += 1;
8056 proto_tree_add_item(tree,
8057 hf_ieee1905_spatial_reuse_rep_not_valid3, tvb,
8058 offset, 1, ENC_NA);
8059 offset += 1;
8061 proto_tree_add_item(tree,
8062 hf_ieee1905_spatial_reuse_rep_not_valid4, tvb,
8063 offset, 8, ENC_BIG_ENDIAN);
8064 offset += 8;
8066 proto_tree_add_item(tree,
8067 hf_ieee1905_spatial_reuse_rep_not_valid5, tvb,
8068 offset, 8, ENC_BIG_ENDIAN);
8069 offset += 8;
8072 proto_tree_add_item(tree,
8073 hf_ieee1905_spatial_reuse_rep_nbor_bss_color_bitmap,
8074 tvb, offset, 8, ENC_BIG_ENDIAN);
8075 offset += 8;
8077 proto_tree_add_item(tree,
8078 hf_ieee1905_spatial_reuse_rep_reserved4, tvb, offset,
8079 2, ENC_BIG_ENDIAN);
8080 offset += 2;
8082 return offset;
8085 static const range_string spatial_reuse_response_rvals[] = {
8086 { 0x00, 0x00, "Accept" },
8087 { 0x01, 0x01, "Decline because radio does not support requested configuration" },
8088 { 0x02, 0xFF, "Reserved" },
8089 { 0, 0, NULL }
8092 static int
8093 dissect_spatial_reuse_config_response(tvbuff_t *tvb, packet_info *pinfo _U_,
8094 proto_tree *tree, unsigned offset, uint16_t len _U_)
8096 proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_config_radio_id,
8097 tvb, offset, 6, ENC_NA);
8098 offset += 6;
8100 proto_tree_add_item(tree, hf_ieee1905_spatial_reuse_config_response,
8101 tvb, offset, 1, ENC_NA);
8102 offset += 1;
8104 return offset;
8107 static int
8108 dissect_qos_management_policy(tvbuff_t *tvb, packet_info *pinfo _U_,
8109 proto_tree *tree, unsigned offset, uint16_t len _U_)
8111 uint8_t num_mscs_disallowed = tvb_get_uint8(tvb, offset);
8112 uint8_t num_scs_disallowed = 0;
8113 proto_tree *mscs_list = NULL;
8114 proto_tree *scs_list = NULL;
8116 proto_tree_add_item(tree, hf_ieee1905_qos_mgmt_policy_mscs_disallowed,
8117 tvb, offset, 1, ENC_NA);
8118 offset += 1;
8120 mscs_list = proto_tree_add_subtree(tree, tvb, offset,
8121 num_mscs_disallowed * 6,
8122 ett_qos_mgmt_policy_mscs_list,
8123 NULL, "MSCS List");
8124 while (num_mscs_disallowed) {
8125 proto_tree_add_item(mscs_list, hf_ieee1905_qos_mgmt_mscs_disallow_sta,
8126 tvb, offset, 6, ENC_NA);
8128 offset += 6;
8129 num_mscs_disallowed--;
8132 num_scs_disallowed = tvb_get_uint8(tvb, offset);
8133 proto_tree_add_item(tree, hf_ieee1905_qos_mgmt_policy_scs_disallowed,
8134 tvb, offset, 1, ENC_NA);
8135 offset += 1;
8137 scs_list = proto_tree_add_subtree(tree, tvb, offset,
8138 num_scs_disallowed * 6,
8139 ett_qos_mgmt_policy_scs_list,
8140 NULL, "SCS List");
8142 while (num_scs_disallowed) {
8143 proto_tree_add_item(scs_list, hf_ieee1905_qos_mgmt_scs_disallow_sta,
8144 tvb, offset, 6, ENC_NA);
8146 offset += 6;
8147 num_scs_disallowed--;
8150 return offset;
8153 static int
8154 dissect_qos_management_descriptor(tvbuff_t *tvb, packet_info *pinfo,
8155 proto_tree *tree, unsigned offset, uint16_t len)
8157 uint16_t desc_size = 0;
8159 proto_tree_add_item(tree, hf_ieee1905_qos_mgmt_desc_qmid, tvb, offset,
8160 2, ENC_BIG_ENDIAN);
8161 offset += 2;
8162 len -= 2;
8164 proto_tree_add_item(tree, hf_ieee1905_qos_mgmt_desc_bssid, tvb, offset,
8165 6, ENC_NA);
8166 offset += 6;
8167 len -= 6;
8169 proto_tree_add_item(tree, hf_ieee1905_qos_mgmt_desc_client_mac, tvb,
8170 offset, 6, ENC_NA);
8171 offset += 6;
8172 len -= 6;
8174 /* There is MSCS, SCS or QoS element */
8175 while (len > 0) {
8176 desc_size = add_tagged_field(pinfo, tree, tvb, offset, 0, NULL, 0, NULL);
8177 offset += desc_size;
8178 len -= desc_size;
8181 return offset;
8184 static int * const controller_capa_header[] = {
8185 &hf_ieee1905_controller_capa_reserved,
8186 &hf_ieee1905_controller_capa_early_ap_capa,
8187 &hf_ieee1905_controller_capa_kbmb_counter,
8188 NULL
8191 static int
8192 dissect_controller_capability(tvbuff_t *tvb, packet_info *pinfo _U_,
8193 proto_tree *tree, unsigned offset, uint16_t len)
8195 proto_tree_add_bitmask(tree, tvb, offset,
8196 hf_ieee1905_controller_capa_flags,
8197 ett_ieee1905_controller_capa,
8198 controller_capa_header, ENC_NA);
8199 offset += len;
8201 return offset;
8205 * Dissect a Wi-Fi 7 agent capability TLV:
8207 static int* const wifi_7_agent_capabilities_flags_headers[] = {
8208 &hf_ieee1905_wifi_7_agent_capabilities_flags_ap_max_links,
8209 &hf_ieee1905_wifi_7_agent_capabilities_flags_sta_max_links,
8210 &hf_ieee1905_wifi_7_agent_capabilities_flags_ttl_mapping_cap,
8211 &hf_ieee1905_wifi_7_agent_capabilities_flags_reserved,
8212 NULL
8215 static int* const wifi_7_agent_capabilities_radio_flags_headers[] = {
8216 &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_str_support,
8217 &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_nstr_support,
8218 &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_emlsr_support,
8219 &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_emlmr_support,
8220 &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_reserved1,
8221 &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_str_support,
8222 &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_nstr_support,
8223 &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_emlsr_support,
8224 &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_emlmr_support,
8225 &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_reserved2,
8226 NULL
8229 static int* const wifi_7_agent_capabilities_radio_record_flags_headers[] = {
8230 &hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags_freq_separation,
8231 &hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags_reserved,
8232 NULL
8235 static const value_string tid_to_link_mapping_capability_vals[] = {
8236 { 0, "The Agent does not support TID-to-Link mapping" },
8237 { 1, "The Agent supports the mapping of each TID to the same or different link set" },
8238 { 2, "reserved" },
8239 { 3, "The Agent only supports the mapping of all TIDs to the same link set" },
8240 { 0, NULL }
8243 static unsigned
8244 wifi_7_agent_cap_add_record(proto_tree *tree, int hf,
8245 tvbuff_t *tvb, const char *list_name, unsigned offset)
8247 proto_tree *record_list = NULL;
8248 proto_item *rli = NULL;
8249 uint32_t record_count = 0, record_num = 0;
8250 unsigned record_list_start = 0;
8252 proto_tree_add_item_ret_uint(tree, hf, tvb, offset, 1, ENC_NA, &record_count);
8253 offset += 1;
8255 if (record_count == 0) {
8256 return offset;
8259 record_list = proto_tree_add_subtree(tree, tvb, offset, -1,
8260 ett_wifi_7_agent_capabilities_radio_record_list,
8261 &rli, list_name);
8263 record_list_start = offset;
8265 while (record_num < record_count) {
8266 proto_tree *record_tree = NULL;
8267 proto_item *ri = NULL;
8269 record_tree = proto_tree_add_subtree_format(record_list, tvb, offset, -1,
8270 ett_wifi_7_agent_capabilities_radio_record,
8271 &ri, "Record %u", record_num);
8273 proto_tree_add_item(record_tree, hf_ieee1905_wifi_7_agent_capabilities_radio_record_id,
8274 tvb, offset, 6, ENC_NA);
8275 offset += 6;
8277 proto_tree_add_bitmask(record_tree, tvb, offset,
8278 hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags,
8279 ett_wifi_7_agent_capabilities_radio_record_flags,
8280 wifi_7_agent_capabilities_radio_record_flags_headers, ENC_NA);
8281 offset++;
8283 record_num++;
8286 proto_item_set_len(rli, offset - record_list_start);
8288 return offset;
8291 static int
8292 dissect_wifi_7_agent_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_,
8293 proto_tree *tree, unsigned offset, uint16_t len _U_)
8295 proto_tree *radio_list = NULL;
8296 proto_item *rli = NULL;
8297 uint32_t radio_count = 0, radio_num = 0;
8298 unsigned radio_list_start = 0;
8300 proto_tree_add_item(tree, hf_ieee1905_wifi_7_agent_capabilities_max_num_mlds, tvb, offset,
8301 1, ENC_NA);
8302 offset++;
8304 proto_tree_add_bitmask(tree, tvb, offset,
8305 hf_ieee1905_wifi_7_agent_capabilities_flags,
8306 ett_wifi_7_agent_capabilities_flags,
8307 wifi_7_agent_capabilities_flags_headers, ENC_NA);
8308 offset += 2;
8310 proto_tree_add_item(tree, hf_ieee1905_wifi_7_agent_capabilities_reserved,
8311 tvb, offset, 13, ENC_NA);
8312 offset += 13;
8314 proto_tree_add_item_ret_uint(tree, hf_ieee1905_wifi_7_agent_capabilities_radio_num,
8315 tvb, offset, 1, ENC_NA, &radio_count);
8316 offset++;
8318 radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
8319 ett_wifi_7_agent_capabilities_radio_list,
8320 &rli, "Radio List");
8322 radio_list_start = offset;
8324 while (radio_num < radio_count) {
8325 proto_tree *radio_tree = NULL;
8326 proto_item *ri = NULL;
8328 radio_tree = proto_tree_add_subtree_format(radio_list, tvb, offset,
8329 -1, ett_wifi_7_agent_capabilities_radio,
8330 &ri, "Radio %u", radio_num);
8332 proto_tree_add_item(radio_tree, hf_ieee1905_wifi_7_agent_capabilities_radio_id,
8333 tvb, offset, 6, ENC_NA);
8334 offset += 6;
8336 proto_tree_add_item(radio_tree, hf_ieee1905_wifi_7_agent_capabilities_radio_reserved,
8337 tvb, offset, 24, ENC_NA);
8338 offset += 24;
8340 proto_tree_add_bitmask(radio_tree, tvb, offset,
8341 hf_ieee1905_wifi_7_agent_capabilities_radio_flags,
8342 ett_wifi_7_agent_capabilities_radio_flags,
8343 wifi_7_agent_capabilities_radio_flags_headers, ENC_NA);
8344 offset += 2;
8346 offset = wifi_7_agent_cap_add_record(radio_tree,
8347 hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_str_records,
8348 tvb, "AP STR Record List", offset);
8350 offset = wifi_7_agent_cap_add_record(radio_tree,
8351 hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_nstr_records,
8352 tvb, "AP NSTR Record List", offset);
8354 offset = wifi_7_agent_cap_add_record(radio_tree,
8355 hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_emlsr_records,
8356 tvb, "AP EMLSR Record List", offset);
8358 offset = wifi_7_agent_cap_add_record(radio_tree,
8359 hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_emlmr_records,
8360 tvb, "AP EMLMR Record List", offset);
8362 offset = wifi_7_agent_cap_add_record(radio_tree,
8363 hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_str_records,
8364 tvb, "bSTA STR Record List", offset);
8366 offset = wifi_7_agent_cap_add_record(radio_tree,
8367 hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_nstr_records,
8368 tvb, "bSTA NSTR Record List", offset);
8370 offset = wifi_7_agent_cap_add_record(radio_tree,
8371 hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_emlsr_records,
8372 tvb, "bSTA EMLSR Record List", offset);
8374 offset = wifi_7_agent_cap_add_record(radio_tree,
8375 hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_emlmr_records,
8376 tvb, "bSTA EMLMR Record List", offset);
8378 radio_num++;
8381 proto_item_set_len(rli, offset - radio_list_start);
8383 return offset;
8387 * Dissect an Agent AP MLD Configuration TLV:
8389 static int* const agent_ap_mld_configuration_ap_mld_flags_headers[] = {
8390 &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags_ap_mld_mac_addr_valid,
8391 &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags_reserved,
8392 NULL
8395 static int* const agent_ap_mld_configuration_ap_mld_flags2_headers[] = {
8396 &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_str,
8397 &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_nstr,
8398 &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_emlsr,
8399 &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_emlmr,
8400 &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_reserved,
8401 NULL
8404 static int* const agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_headers[] = {
8405 &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_affiliated_ap_mac_addr_valid,
8406 &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_link_id_valid,
8407 &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_reserved,
8408 NULL
8411 static int
8412 dissect_agent_agent_ap_mld_configuration(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8413 proto_tree *tree, unsigned offset, uint16_t len _U_)
8415 proto_tree *ap_mld_list = NULL;
8416 proto_item *amli = NULL;
8417 uint32_t ap_mld_count = 0, ap_mld_num = 0;
8418 unsigned ap_mld_list_start = 0;
8420 proto_tree_add_item_ret_uint(tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_num,
8421 tvb, offset, 1, ENC_NA, &ap_mld_count);
8422 offset++;
8424 ap_mld_list = proto_tree_add_subtree(tree, tvb, offset, -1,
8425 ett_agent_ap_mld_configuration_ap_mld_list,
8426 &amli, "AP MLD List");
8428 ap_mld_list_start = offset;
8430 while (ap_mld_num < ap_mld_count) {
8431 proto_tree *ap_mld_tree = NULL;
8432 proto_item *ami = NULL;
8433 uint32_t ssid_len;
8434 proto_tree *aff_ap_list = NULL;
8435 proto_item *aali = NULL;
8436 uint32_t aff_ap_count = 0, aff_ap_num = 0;
8437 unsigned aff_ap_list_start = 0;
8439 ap_mld_tree = proto_tree_add_subtree_format(ap_mld_list, tvb, offset,
8440 -1, ett_agent_ap_mld_configuration_ap_mld,
8441 &ami, "AP MLD %u", ap_mld_num);
8443 proto_tree_add_bitmask(ap_mld_tree, tvb, offset,
8444 hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags,
8445 ett_agent_ap_mld_configuration_ap_mld_flags,
8446 agent_ap_mld_configuration_ap_mld_flags_headers, ENC_NA);
8447 offset++;
8449 proto_tree_add_item_ret_uint(ap_mld_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_ssid_len,
8450 tvb, offset, 1, ENC_NA, &ssid_len);
8451 offset++;
8453 proto_tree_add_item(ap_mld_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_ssid,
8454 tvb, offset, ssid_len, ENC_ASCII);
8455 offset += ssid_len;
8457 proto_tree_add_item(ap_mld_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_mac_addr,
8458 tvb, offset, 6, ENC_NA);
8459 offset += 6;
8461 proto_tree_add_bitmask(ap_mld_tree, tvb, offset,
8462 hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2,
8463 ett_agent_ap_mld_configuration_ap_mld_flags2,
8464 agent_ap_mld_configuration_ap_mld_flags2_headers, ENC_NA);
8465 offset++;
8467 proto_tree_add_item(ap_mld_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_reserved, tvb, offset,
8468 20, ENC_NA);
8469 offset += 20;
8471 proto_tree_add_item_ret_uint(ap_mld_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_num,
8472 tvb, offset, 1, ENC_NA, &aff_ap_count);
8473 offset++;
8475 aff_ap_list = proto_tree_add_subtree(ap_mld_tree, tvb, offset, -1,
8476 ett_agent_ap_mld_configuration_ap_mld_affiliated_ap_list,
8477 &aali, "Affiliated AP List");
8479 aff_ap_list_start = offset;
8481 while (aff_ap_num < aff_ap_count) {
8482 proto_tree *aff_ap_tree = NULL;
8483 proto_item *aai = NULL;
8485 aff_ap_tree = proto_tree_add_subtree_format(aff_ap_list, tvb, offset,
8486 -1, ett_agent_ap_mld_configuration_ap_mld_affiliated_ap,
8487 &aai, "Affiliated AP %u", aff_ap_num);
8489 proto_tree_add_bitmask(aff_ap_tree, tvb, offset,
8490 hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags,
8491 ett_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags,
8492 agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_headers, ENC_NA);
8493 offset++;
8495 proto_tree_add_item(aff_ap_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_radio_id,
8496 tvb, offset, 6, ENC_NA);
8497 offset += 6;
8499 proto_tree_add_item(aff_ap_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_mac_addr,
8500 tvb, offset, 6, ENC_NA);
8501 offset += 6;
8503 proto_tree_add_item(aff_ap_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_link_id,
8504 tvb, offset, 1, ENC_NA);
8505 offset++;
8507 proto_tree_add_item(aff_ap_tree, hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_reserved,
8508 tvb, offset, 18, ENC_NA);
8509 offset += 18;
8511 aff_ap_num++;
8514 proto_item_set_len(aali, offset - aff_ap_list_start);
8515 ap_mld_num++;
8518 proto_item_set_len(amli, offset - ap_mld_list_start);
8520 return offset;
8524 * Dissect a Backhaul STA MLD Configuration TLV:
8526 static int* const backhaul_sta_mld_configuration_flags_headers[] = {
8527 &hf_ieee1905_backhaul_sta_mld_configuration_flags_bsta_mld_mac_addr_valid,
8528 &hf_ieee1905_backhaul_sta_mld_configuration_flags_ap_mld_mac_addr_valid,
8529 &hf_ieee1905_backhaul_sta_mld_configuration_flags_reserved,
8530 NULL
8533 static int* const backhaul_sta_mld_configuration_flags2_headers[] = {
8534 &hf_ieee1905_backhaul_sta_mld_configuration_flags2_str,
8535 &hf_ieee1905_backhaul_sta_mld_configuration_flags2_nstr,
8536 &hf_ieee1905_backhaul_sta_mld_configuration_flags2_emlsr,
8537 &hf_ieee1905_backhaul_sta_mld_configuration_flags2_emlmr,
8538 &hf_ieee1905_backhaul_sta_mld_configuration_flags2_reserved,
8539 NULL
8542 static int* const backhaul_sta_mld_configuration_affiliated_bsta_flags_headers[] = {
8543 &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags_affiliated_bsta_mac_addr_valid,
8544 &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags_reserved,
8545 NULL
8548 static int
8549 dissect_backhaul_sta_mld_configuration(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8550 proto_tree *tree, unsigned offset, uint16_t len _U_)
8552 proto_tree *aff_bsta_list = NULL;
8553 proto_item *abli = NULL;
8554 uint32_t aff_bsta_count = 0, aff_bsta_num = 0;
8555 unsigned aff_bsta_list_start = 0;
8557 proto_tree_add_bitmask(tree, tvb, offset,
8558 hf_ieee1905_backhaul_sta_mld_configuration_flags,
8559 ett_backhaul_sta_mld_configuration_flags,
8560 backhaul_sta_mld_configuration_flags_headers, ENC_NA);
8561 offset++;
8563 proto_tree_add_item(tree, hf_ieee1905_backhaul_sta_mld_configuration_bsta_mld_mac_addr,
8564 tvb, offset, 6, ENC_NA);
8565 offset += 6;
8567 proto_tree_add_item(tree, hf_ieee1905_backhaul_sta_mld_configuration_ap_mld_mac_addr,
8568 tvb, offset, 6, ENC_NA);
8569 offset += 6;
8571 proto_tree_add_bitmask(tree, tvb, offset,
8572 hf_ieee1905_backhaul_sta_mld_configuration_flags2,
8573 ett_backhaul_sta_mld_configuration_flags2,
8574 backhaul_sta_mld_configuration_flags2_headers, ENC_NA);
8575 offset++;
8577 proto_tree_add_item(tree, hf_ieee1905_backhaul_sta_mld_configuration_reserved,
8578 tvb, offset, 17, ENC_NA);
8579 offset += 17;
8581 proto_tree_add_item_ret_uint(tree, hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_num,
8582 tvb, offset, 1, ENC_NA, &aff_bsta_count);
8583 offset++;
8585 aff_bsta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
8586 ett_backhaul_sta_mld_configuration_affiliated_bsta_list,
8587 &abli, "Affiliated bSTA List");
8589 aff_bsta_list_start = offset;
8591 while (aff_bsta_num < aff_bsta_count) {
8592 proto_tree *aff_bsta_tree = NULL;
8593 proto_item *abi = NULL;
8595 aff_bsta_tree = proto_tree_add_subtree_format(aff_bsta_list, tvb, offset,
8596 -1, ett_backhaul_sta_mld_configuration_affiliated_bsta,
8597 &abi, "Affiliated bSTA %u", aff_bsta_num);
8599 proto_tree_add_bitmask(aff_bsta_tree, tvb, offset,
8600 hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags,
8601 ett_backhaul_sta_mld_configuration_affiliated_bsta_flags,
8602 backhaul_sta_mld_configuration_affiliated_bsta_flags_headers, ENC_NA);
8603 offset++;
8605 proto_tree_add_item(aff_bsta_tree, hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_radio_id,
8606 tvb, offset, 6, ENC_NA);
8607 offset += 6;
8609 proto_tree_add_item(aff_bsta_tree, hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_mac_addr,
8610 tvb, offset, 6, ENC_NA);
8611 offset += 6;
8613 proto_tree_add_item(aff_bsta_tree, hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_reserved,
8614 tvb, offset, 19, ENC_NA);
8615 offset += 19;
8617 aff_bsta_num++;
8620 proto_item_set_len(abli, offset - aff_bsta_list_start);
8622 return offset;
8626 * Dissect a Associated STA MLD Configuration TLV:
8628 static int* const associated_sta_mld_configuration_flags_headers[] = {
8629 &hf_ieee1905_associated_sta_mld_configuration_flags_str,
8630 &hf_ieee1905_associated_sta_mld_configuration_flags_nstr,
8631 &hf_ieee1905_associated_sta_mld_configuration_flags_emlsr,
8632 &hf_ieee1905_associated_sta_mld_configuration_flags_emlmr,
8633 &hf_ieee1905_associated_sta_mld_configuration_flags_reserved,
8634 NULL
8637 static int
8638 dissect_associated_sta_mld_configuration(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8639 proto_tree *tree, unsigned offset, uint16_t len _U_)
8641 proto_tree *aff_sta_list = NULL;
8642 proto_item *asli = NULL;
8643 uint32_t aff_sta_count = 0, aff_sta_num = 0;
8644 unsigned aff_sta_list_start = 0;
8646 proto_tree_add_item(tree, hf_ieee1905_associated_sta_mld_configuration_sta_mld_mac_addr,
8647 tvb, offset, 6, ENC_NA);
8648 offset += 6;
8650 proto_tree_add_item(tree, hf_ieee1905_associated_sta_mld_configuration_ap_mld_mac_addr,
8651 tvb, offset, 6, ENC_NA);
8652 offset += 6;
8654 proto_tree_add_bitmask(tree, tvb, offset,
8655 hf_ieee1905_associated_sta_mld_configuration_flags,
8656 ett_associated_sta_mld_configuration_flags,
8657 associated_sta_mld_configuration_flags_headers, ENC_NA);
8658 offset++;
8660 proto_tree_add_item(tree, hf_ieee1905_associated_sta_mld_configuration_reserved,
8661 tvb, offset, 18, ENC_NA);
8662 offset += 18;
8664 proto_tree_add_item_ret_uint(tree, hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_num,
8665 tvb, offset, 1, ENC_NA, &aff_sta_count);
8666 offset++;
8668 aff_sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
8669 ett_associated_sta_mld_configuration_affiliated_sta_list,
8670 &asli, "Affiliated STA List");
8672 aff_sta_list_start = offset;
8674 while (aff_sta_num < aff_sta_count) {
8675 proto_tree *aff_sta_tree = NULL;
8676 proto_item *asi = NULL;
8678 aff_sta_tree = proto_tree_add_subtree_format(aff_sta_list, tvb, offset,
8679 -1, ett_associated_sta_mld_configuration_affiliated_sta,
8680 &asi, "Affiliated STA %u", aff_sta_num);
8682 proto_tree_add_item(aff_sta_tree, hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_bssid,
8683 tvb, offset, 6, ENC_NA);
8684 offset += 6;
8686 proto_tree_add_item(aff_sta_tree, hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_mac_addr,
8687 tvb, offset, 6, ENC_NA);
8688 offset += 6;
8690 proto_tree_add_item(aff_sta_tree, hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_reserved,
8691 tvb, offset, 19, ENC_NA);
8692 offset += 19;
8694 aff_sta_num++;
8697 proto_item_set_len(asli, offset - aff_sta_list_start);
8699 return offset;
8703 * Dissect an Affiliated STA Metrics TLV:
8705 static int
8706 dissect_affiliated_sta_metrics(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8707 proto_tree *tree, unsigned offset, uint16_t len)
8709 unsigned end = offset + len;
8711 proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_sta_mac_addr,
8712 tvb, offset, 6, ENC_NA);
8713 offset += 6;
8715 proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_bytes_sent,
8716 tvb, offset, 4, ENC_BIG_ENDIAN);
8717 offset += 4;
8719 proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_bytes_rcvd,
8720 tvb, offset, 4, ENC_BIG_ENDIAN);
8721 offset += 4;
8723 proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_packets_sent,
8724 tvb, offset, 4, ENC_BIG_ENDIAN);
8725 offset += 4;
8727 proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_packets_rcvd,
8728 tvb, offset, 4, ENC_BIG_ENDIAN);
8729 offset += 4;
8731 proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_packets_sent_errors,
8732 tvb, offset, 4, ENC_BIG_ENDIAN);
8733 offset += 4;
8735 /* EM R6 adds N (>=0) reserved bytes */
8736 if (end > offset) {
8737 proto_tree_add_item(tree, hf_ieee1905_affiliated_sta_metrics_reserved,
8738 tvb, offset, end - offset, ENC_NA);
8740 offset = end;
8743 return offset;
8747 * Dissect an Affiliated AP Metrics TLV:
8749 static int
8750 dissect_affiliated_ap_metrics(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8751 proto_tree *tree, unsigned offset, uint16_t len)
8753 unsigned end = offset + len;
8755 proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_bssid,
8756 tvb, offset, 6, ENC_NA);
8757 offset += 6;
8759 proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_packets_sent,
8760 tvb, offset, 4, ENC_BIG_ENDIAN);
8761 offset += 4;
8763 proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_packets_rcvd,
8764 tvb, offset, 4, ENC_BIG_ENDIAN);
8765 offset += 4;
8767 proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_packets_sent_errors,
8768 tvb, offset, 4, ENC_BIG_ENDIAN);
8769 offset += 4;
8771 proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_ucast_bytes_sent,
8772 tvb, offset, 4, ENC_BIG_ENDIAN);
8773 offset += 4;
8775 proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_ucast_bytes_rcvd,
8776 tvb, offset, 4, ENC_BIG_ENDIAN);
8777 offset += 4;
8779 proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_mcast_bytes_sent,
8780 tvb, offset, 4, ENC_BIG_ENDIAN);
8781 offset += 4;
8783 proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_mcast_bytes_rcvd,
8784 tvb, offset, 4, ENC_BIG_ENDIAN);
8785 offset += 4;
8787 proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_bcast_bytes_sent,
8788 tvb, offset, 4, ENC_BIG_ENDIAN);
8789 offset += 4;
8791 proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_bcast_bytes_rcvd,
8792 tvb, offset, 4, ENC_BIG_ENDIAN);
8793 offset += 4;
8795 /* EM R6 adds N (>=0) reserved bytes */
8796 if (end > offset) {
8797 proto_tree_add_item(tree, hf_ieee1905_affiliated_ap_metrics_reserved,
8798 tvb, offset, end - offset, ENC_NA);
8800 offset = end;
8803 return offset;
8807 * Dissect an EHT Operations TLV:
8809 static int* const eht_operations_radio_bss_flags_headers[] = {
8810 &hf_ieee1905_eht_operations_radio_bss_flags_eht_operation_information_valid,
8811 &hf_ieee1905_eht_operations_radio_bss_flags_disabled_subchannel_valid,
8812 &hf_ieee1905_eht_operations_radio_bss_flags_eht_default_pe_duration,
8813 &hf_ieee1905_eht_operations_radio_bss_flags_group_addr_bu_indication_limit,
8814 &hf_ieee1905_eht_operations_radio_bss_flags_group_addr_bu_indication_exponent,
8815 &hf_ieee1905_eht_operations_radio_bss_flags_reserved,
8816 NULL
8819 static int
8820 dissect_eht_operations_tlv(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8821 proto_tree *tree, unsigned offset, uint16_t len _U_)
8823 proto_tree *radio_list = NULL;
8824 proto_item *rli = NULL;
8825 uint32_t radio_count = 0, radio_num = 0;
8826 unsigned radio_list_start = 0;
8828 proto_tree_add_item(tree, hf_ieee1905_eht_operations_reserved,
8829 tvb, offset, 32, ENC_NA);
8830 offset += 32;
8832 proto_tree_add_item_ret_uint(tree, hf_ieee1905_eht_operations_radio_num,
8833 tvb, offset, 1, ENC_NA, &radio_count);
8834 offset++;
8836 radio_list = proto_tree_add_subtree(tree, tvb, offset, -1,
8837 ett_eht_operations_radio_list,
8838 &rli, "Radio List");
8840 radio_list_start = offset;
8842 while (radio_num < radio_count) {
8843 proto_tree *radio_tree = NULL;
8844 proto_item *ri = NULL;
8845 proto_tree *bss_list = NULL;
8846 proto_item *bli = NULL;
8847 uint32_t bss_count = 0, bss_num = 0;
8848 unsigned bss_list_start = 0;
8850 radio_tree = proto_tree_add_subtree_format(radio_list, tvb, offset,
8851 -1, ett_eht_operations_radio,
8852 &ri, "Radio %u", radio_num);
8854 proto_tree_add_item(radio_tree, hf_ieee1905_eht_operations_radio_id,
8855 tvb, offset, 6, ENC_NA);
8856 offset += 6;
8858 proto_tree_add_item_ret_uint(radio_tree, hf_ieee1905_eht_operations_radio_bss_num,
8859 tvb, offset, 1, ENC_NA, &bss_count);
8860 offset++;
8862 bss_list = proto_tree_add_subtree(radio_tree, tvb, offset, -1,
8863 ett_eht_operations_radio_bss_list,
8864 &bli, "BSS List");
8866 bss_list_start = offset;
8868 while (bss_num < bss_count) {
8869 proto_tree *bss_tree = NULL;
8870 proto_item *bi = NULL;
8872 bss_tree = proto_tree_add_subtree_format(bss_list, tvb, offset,
8873 -1, ett_eht_operations_radio_bss,
8874 &bi, "BSS %u", bss_num);
8876 proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_bssid,
8877 tvb, offset, 6, ENC_NA);
8878 offset += 6;
8880 proto_tree_add_bitmask(bss_tree, tvb, offset,
8881 hf_ieee1905_eht_operations_radio_bss_flags,
8882 ett_eht_operations_radio_bss_flags,
8883 eht_operations_radio_bss_flags_headers, ENC_NA);
8884 offset++;
8886 proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_basic_eht_nss_mcs_set,
8887 tvb, offset, 4, ENC_BIG_ENDIAN);
8888 offset += 4;
8890 proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_control,
8891 tvb, offset, 1, ENC_NA);
8892 offset++;
8894 proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_ccfs0,
8895 tvb, offset, 1, ENC_NA);
8896 offset++;
8898 proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_ccfs1,
8899 tvb, offset, 1, ENC_NA);
8900 offset++;
8902 proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_disabled_subchannel_bitmap,
8903 tvb, offset, 2, ENC_BIG_ENDIAN);
8904 offset += 2;
8906 proto_tree_add_item(bss_tree, hf_ieee1905_eht_operations_radio_bss_reserved,
8907 tvb, offset, 16, ENC_NA);
8908 offset += 16;
8910 bss_num++;
8913 proto_item_set_len(bli, offset - bss_list_start);
8915 proto_tree_add_item(radio_tree, hf_ieee1905_eht_operations_radio_reserved,
8916 tvb, offset, 25, ENC_NA);
8917 offset += 25;
8919 radio_num++;
8922 proto_item_set_len(rli, offset - radio_list_start);
8924 return offset;
8928 * Dissect an Available Spectrum Inquiry Request TLV:
8930 static int
8931 dissect_available_spectrum_inquiry_request(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8932 proto_tree *tree, unsigned offset, uint16_t len)
8934 /* Content is a JSON message */
8935 proto_tree_add_item(tree, hf_ieee1905_available_spectrum_inquiry_request_object,
8936 tvb, offset, len, ENC_ASCII);
8937 offset += len;
8939 return offset;
8943 * Dissect an Available Spectrum Inquiry Response TLV:
8945 static int
8946 dissect_available_spectrum_inquiry_response(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
8947 proto_tree *tree, unsigned offset, uint16_t len)
8949 /* Content is a JSON message */
8950 proto_tree_add_item(tree, hf_ieee1905_available_spectrum_inquiry_response_object,
8951 tvb, offset, len, ENC_ASCII);
8952 offset += len;
8954 return offset;
8958 * Dissect each of the TLV types we know about
8960 static int
8961 dissect_ieee1905_tlv_data(tvbuff_t *tvb, packet_info *pinfo,
8962 proto_tree *tree, unsigned offset, uint8_t tlv_type, uint16_t tlv_len)
8964 unsigned link_metric_query;
8966 switch (tlv_type) {
8968 case AL_MAC_ADDRESS_TYPE_TLV:
8969 proto_tree_add_item(tree, hf_ieee1905_al_mac_address_type, tvb,
8970 offset, 6, ENC_NA);
8971 offset += 6;
8972 break;
8974 case MAC_ADDRESS_TYPE_TLV:
8975 proto_tree_add_item(tree, hf_ieee1905_mac_address_type, tvb,
8976 offset, 6, ENC_NA);
8977 offset += 6;
8978 break;
8980 case DEVICE_INFORMATION_TYPE_TLV:
8981 offset = dissect_device_information_type(tvb, pinfo, tree, offset,
8982 tlv_len);
8983 break;
8985 case DEVICE_BRIDGING_CAPABILITY_TLV:
8986 offset = dissect_device_bridging_capabilities(tvb, pinfo, tree,
8987 offset, tlv_len);
8988 break;
8990 case NON_1905_NEIGHBOR_DEVICE_LIST_TLV:
8991 offset = dissect_non_1905_neighbor_device_list(tvb, pinfo, tree,
8992 offset, tlv_len);
8993 break;
8995 case NEIGHBOR_DEVICE_TLV:
8996 offset = dissect_1905_neighbor_device(tvb, pinfo, tree, offset,
8997 tlv_len);
8998 break;
9000 case LINK_METRIC_QUERY_TLV:
9001 proto_tree_add_item_ret_uint(tree,
9002 hf_ieee1905_link_metric_query_type,
9003 tvb, offset, 1, ENC_NA,
9004 &link_metric_query);
9005 offset++;
9007 if (link_metric_query) {
9008 proto_tree_add_item(tree, hf_ieee1905_al_mac_address_type, tvb,
9009 offset, 6, ENC_NA);
9010 offset += 6;
9013 proto_tree_add_item(tree, hf_ieee1905_link_metrics_requested, tvb,
9014 offset, 1, ENC_NA);
9015 offset++;
9016 break;
9018 case TRANSMITTER_LINK_METRIC_TLV:
9019 offset = dissect_transmitter_link_metric(tvb, pinfo, tree, offset,
9020 tlv_len);
9021 break;
9023 case RECEIVER_LINK_METRIC_TLV:
9024 offset = dissect_receiver_link_metric(tvb, pinfo, tree, offset,
9025 tlv_len);
9026 break;
9028 case VENDOR_SPECIFIC_TLV:
9029 offset = dissect_vendor_specific(tvb, pinfo, tree, offset, tlv_len);
9030 break;
9032 case LINK_METRIC_RESULT_CODE_TLV:
9033 offset = dissect_link_metric_result_code(tvb, pinfo, tree, offset);
9034 break;
9036 case SEARCHED_ROLE_TLV:
9037 offset = dissect_searched_role(tvb, pinfo, tree, offset);
9038 break;
9040 case AUTO_CONFIG_FREQ_BAND_TLV:
9041 offset = dissect_auto_config_freq_band(tvb, pinfo, tree, offset);
9042 break;
9044 case SUPPORTED_ROLE_TLV:
9045 offset = dissect_supported_role(tvb, pinfo, tree, offset);
9046 break;
9048 case SUPPORTED_FREQ_BAND_TLV:
9049 offset = dissect_supported_freq_band(tvb, pinfo, tree, offset);
9050 break;
9052 case WSC_TLV:
9053 offset = dissect_wsc(tvb, pinfo, tree, offset, tlv_len);
9054 break;
9056 case PUSH_BUTTON_EVENT_NOTIFICATION_TLV:
9057 offset = dissect_push_button_event_notification(tvb, pinfo,
9058 tree, offset);
9059 break;
9061 case PUSH_BUTTON_JOIN_NOTIFICATION_TLV:
9062 offset = dissect_push_button_join_notification(tvb, pinfo,
9063 tree, offset);
9064 break;
9066 case GENERIC_PHY_DEVICE_INFORMATION_TLV:
9067 offset = dissect_generic_phy_device_info(tvb, pinfo, tree,
9068 offset);
9069 break;
9071 case DEVICE_IDENTIFICATION_TYPE_TLV:
9072 offset = dissect_device_identification(tvb, pinfo, tree,
9073 offset);
9074 break;
9076 case CONTROL_URL_TYPE_TLV:
9077 offset = dissect_control_url_type(tvb, pinfo, tree, offset, tlv_len);
9078 break;
9080 case IPV4_TYPE_TLV:
9081 offset = dissect_ipv4_type(tvb, pinfo, tree, offset);
9082 break;
9084 case IPV6_TYPE_TLV:
9085 offset = dissect_ipv6_type(tvb, pinfo, tree, offset);
9086 break;
9088 case PUSH_BUTTON_EVENT_TYPE_NOTIFICATION_TLV:
9089 offset = dissect_push_button_event_type_notification(tvb, pinfo, tree,
9090 offset);
9091 break;
9093 case IEEE1905_PROFILE_VERSION_TLV:
9094 offset = dissect_profile_version(tvb, pinfo, tree, offset);
9095 break;
9097 case POWER_OFF_INTERFACE_TLV:
9098 offset = dissect_power_off_interface(tvb, pinfo, tree, offset);
9099 break;
9101 case INTERFACE_POWER_CHANGE_INFORMATION_TLV:
9102 offset = dissect_interface_power_change_info(tvb, pinfo, tree, offset);
9103 break;
9105 case INTERFACE_POWER_CHANGE_STATUS_TLV:
9106 offset = dissect_interface_power_change_status(tvb, pinfo, tree, offset);
9107 break;
9109 case L2_NEIGHBOR_DEVICE_TLV:
9110 offset = dissect_l2_neighbor_device(tvb, pinfo, tree, offset);
9111 break;
9113 case SUPPORTED_SERVICE_TLV:
9114 offset = dissect_supported_service(tvb, pinfo, tree, offset);
9115 break;
9117 case SEARCHED_SERVICE_TLV:
9118 offset = dissect_searched_service(tvb, pinfo, tree, offset);
9119 break;
9121 case AP_RADIO_IDENTIFIER_TLV:
9122 offset = dissect_ap_radio_identifier(tvb, pinfo, tree, offset);
9123 break;
9125 case AP_OPERATIONAL_BSS_TLV:
9126 offset = dissect_ap_operational_bss(tvb, pinfo, tree, offset);
9127 break;
9129 case ASSOCIATED_CLIENTS_TLV:
9130 offset = dissect_associated_clients(tvb, pinfo, tree, offset);
9131 break;
9133 case AP_RADIO_BASIC_CAPABILITIES_TLV:
9134 offset = dissect_ap_radio_basic_capabilities(tvb, pinfo, tree, offset);
9135 break;
9137 case AP_HT_CAPABILITIES_TLV:
9138 offset = dissect_ap_ht_capabilities(tvb, pinfo, tree, offset);
9139 break;
9141 case AP_VHT_CAPABILITIES_TLV:
9142 offset = dissect_ap_vht_capabilities(tvb, pinfo, tree, offset);
9143 break;
9145 case AP_HE_CAPABILITIES_TLV:
9146 offset = dissect_ap_he_capabilities(tvb, pinfo, tree, offset);
9147 break;
9149 case STEERING_POLICY_TLV:
9150 offset = dissect_steering_policy(tvb, pinfo, tree, offset, tlv_len);
9151 break;
9153 case METRIC_REPORTING_POLICY_TLV:
9154 offset = dissect_metric_reporting_policy(tvb, pinfo, tree, offset);
9155 break;
9157 case CHANNEL_PREFERENCE_TLV:
9158 offset = dissect_channel_preference(tvb, pinfo, tree, offset, tlv_len);
9159 break;
9161 case RADIO_OPERATION_RESTRICTION_TLV:
9162 offset = dissect_radio_operation_restriction(tvb, pinfo, tree, offset,
9163 tlv_len);
9164 break;
9166 case TRANSMIT_POWER_LIMIT_TLV:
9167 offset = dissect_transmit_power_limit(tvb, pinfo, tree, offset);
9168 break;
9170 case CHANNEL_SELECTION_RESPONSE_TLV:
9171 offset = dissect_channel_selection_response(tvb, pinfo, tree, offset);
9172 break;
9174 case OPERATING_CHANNEL_REPORT_TLV:
9175 offset = dissect_operating_channel_report(tvb, pinfo, tree, offset);
9176 break;
9178 case CLIENT_INFO_TLV:
9179 offset = dissect_client_info(tvb, pinfo, tree, offset);
9180 break;
9182 case CLIENT_CAPABILITY_REPORT_TLV:
9183 offset = dissect_client_capability_report(tvb, pinfo, tree, offset, tlv_len);
9184 break;
9186 case CLIENT_ASSOCIATION_EVENT_TLV:
9187 offset = dissect_client_association_event(tvb, pinfo, tree, offset);
9188 break;
9190 case AP_METRIC_QUERY_TLV:
9191 offset = dissect_ap_metric_query(tvb, pinfo, tree, offset, tlv_len);
9192 break;
9194 case AP_METRICS_TLV:
9195 offset = dissect_ap_metrics(tvb, pinfo, tree, offset, tlv_len);
9196 break;
9198 case STA_MAC_ADDRESS_TYPE_TLV:
9199 offset = dissect_sta_mac_address_type(tvb, pinfo, tree, offset, tlv_len);
9200 break;
9202 case ASSOCIATED_STA_LINK_METRICS_TLV:
9203 offset = dissect_associated_sta_link_metrics(tvb, pinfo, tree, offset,
9204 tlv_len);
9205 break;
9207 case UNASSOCIATED_STA_LINK_METRICS_QUERY_TLV:
9208 offset = dissect_unassociated_sta_link_metrics_query(tvb, pinfo, tree,
9209 offset, tlv_len);
9210 break;
9212 case UNASSOCIATED_STA_LINK_METRICS_RESPONSE_TLV:
9213 offset = dissect_unassociated_sta_link_metric_response(tvb, pinfo, tree,
9214 offset, tlv_len);
9215 break;
9217 case BEACON_METRICS_QUERY_TLV:
9218 offset = dissect_beacon_metrics_query(tvb, pinfo, tree, offset, tlv_len);
9219 break;
9221 case BEACON_METRICS_RESPONSE_TLV:
9222 offset = dissect_beacon_metrics_response(tvb, pinfo, tree, offset, tlv_len);
9223 break;
9225 case STEERING_REQUEST_TLV:
9226 offset = dissect_steering_request(tvb, pinfo, tree, offset, tlv_len);
9227 break;
9229 case STEERING_BTM_REPORT_TLV:
9230 offset = dissect_steering_btm_report(tvb, pinfo, tree, offset, tlv_len);
9231 break;
9233 case CLIENT_ASSOCIATION_CONTROL_REQUEST_TLV:
9234 offset = dissect_client_association_control_request(tvb, pinfo, tree, offset);
9235 break;
9237 case BACKHAUL_STEERING_REQUEST_TLV:
9238 offset = dissect_backhaul_steering_request(tvb, pinfo, tree, offset);
9239 break;
9241 case BACKHAUL_STEERING_RESPONSE_TLV:
9242 offset = dissect_backhaul_steering_response(tvb, pinfo, tree, offset);
9243 break;
9245 case HIGHER_LAYER_DATA_TLV:
9246 offset = dissect_higher_layer_data(tvb, pinfo, tree, offset, tlv_len);
9247 break;
9249 case AP_CAPABILITY_TLV:
9250 offset = dissect_ap_capability(tvb, pinfo, tree, offset);
9251 break;
9253 case ASSOCIATED_STA_TRAFFIC_STATS_TLV:
9254 offset = dissect_associated_sta_traffic_stats(tvb, pinfo, tree, offset, tlv_len);
9255 break;
9257 case ERROR_CODE_TLV:
9258 offset = dissect_error_code(tvb, pinfo, tree, offset, tlv_len);
9259 break;
9261 case CHANNEL_SCAN_REPORTING_POLICY_TLV:
9262 offset = dissect_channel_scan_reporting_policy(tvb, pinfo, tree,
9263 offset, tlv_len);
9264 break;
9266 case CHANNEL_SCAN_CAPABILITIES_TLV:
9267 offset = dissect_channel_scan_capabilities(tvb, pinfo, tree, offset,
9268 tlv_len);
9269 break;
9271 case CHANNEL_SCAN_REQUEST_TLV:
9272 offset = dissect_channel_scan_request(tvb, pinfo, tree, offset,
9273 tlv_len);
9274 break;
9276 case CHANNEL_SCAN_RESULT_TLV:
9277 offset = dissect_channel_scan_result(tvb, pinfo, tree, offset, tlv_len);
9278 break;
9280 case TIMESTAMP_TLV:
9281 offset = dissect_timestamp(tvb, pinfo, tree, offset, tlv_len);
9282 break;
9284 case IEEE1905_LAYER_SECURITY_CAPABILITY_TLV:
9285 offset = dissect_1905_layer_security_capability(tvb, pinfo, tree,
9286 offset, tlv_len);
9287 break;
9289 case AP_WF6_CAPABILITIES_TLV:
9290 offset = dissect_ap_wf6_capabilities(tvb, pinfo, tree, offset, tlv_len);
9291 break;
9293 case MIC_TLV:
9294 offset = dissect_mic(tvb, pinfo, tree, offset, tlv_len);
9295 break;
9297 case ENCRYPTED_TLV:
9298 offset = dissect_encrypted(tvb, pinfo, tree, offset, tlv_len);
9299 break;
9301 case CAC_REQUEST_TLV:
9302 offset = dissect_cac_request(tvb, pinfo, tree, offset, tlv_len);
9303 break;
9305 case CAC_TERMINATION_TLV:
9306 offset = dissect_cac_termination(tvb, pinfo, tree, offset, tlv_len);
9307 break;
9309 case CAC_COMPLETION_REPORT_TLV:
9310 offset = dissect_cac_completion_report(tvb, pinfo, tree, offset,
9311 tlv_len);
9312 break;
9314 case ASSOCIATED_WF6_STA_STATUS_REPORT_TLV:
9315 offset = dissect_associated_wf6_sta_status_report(tvb, pinfo, tree,
9316 offset, tlv_len);
9317 break;
9319 case CAC_STATUS_REPORT_TLV:
9320 offset = dissect_cac_status_report(tvb, pinfo, tree, offset, tlv_len);
9321 break;
9323 case CAC_CAPABILITIES_TLV:
9324 offset = dissect_cac_capabilities(tvb, pinfo, tree, offset, tlv_len);
9325 break;
9327 case MULTI_AP_PROFILE_TLV:
9328 offset = dissect_multi_ap_version(tvb, pinfo, tree, offset, tlv_len);
9329 break;
9331 case PROFILE_2_AP_CAPABILITY_TLV:
9332 offset = dissect_r2_ap_capability(tvb, pinfo, tree, offset, tlv_len);
9333 break;
9335 case DEFAULT_802_1Q_SETTINGS_TLV:
9336 offset = dissect_default_802_1q_settings(tvb, pinfo, tree, offset,
9337 tlv_len);
9338 break;
9340 case TRAFFIC_SEPARATION_POLICY_TLV:
9341 offset = dissect_traffic_separation_policy(tvb, pinfo, tree, offset,
9342 tlv_len);
9343 break;
9345 case BSS_CONFIGURATION_REPORT_TLV:
9346 offset = dissect_bss_configuration_report(tvb, pinfo, tree, offset,
9347 tlv_len);
9348 break;
9350 case BSSID_TLV:
9351 offset = dissect_bssid(tvb, pinfo, tree, offset, tlv_len);
9352 break;
9354 case SERVICE_PRIORITIZATION_RULE_TLV:
9355 offset = dissect_service_prioritization_rule(tvb, pinfo, tree, offset,
9356 tlv_len);
9357 break;
9359 case DSCP_MAPPING_TABLE_TLV:
9360 offset = dissect_dscp_mapping_table(tvb, pinfo, tree, offset, tlv_len);
9361 break;
9363 case PROFILE_2_ERROR_CODE_ERROR_TLV:
9364 offset = dissect_r2_error_code(tvb, pinfo, tree, offset, tlv_len);
9365 break;
9367 case AP_RADIO_ADVANCED_CAPABILITIES_TLV:
9368 offset = dissect_ap_radio_advanced_capabilities(tvb, pinfo, tree,
9369 offset, tlv_len);
9370 break;
9372 case ASSOCIATION_STATUS_NOTIFICATION_TLV:
9373 offset = dissect_association_status_notification(tvb, pinfo, tree,
9374 offset, tlv_len);
9375 break;
9377 case SOURCE_INFO_TLV:
9378 offset = dissect_source_info(tvb, pinfo, tree, offset, tlv_len);
9379 break;
9381 case TUNNELED_MESSAGE_TYPE_TLV:
9382 offset = dissect_tunneled_message_type(tvb, pinfo, tree, offset,
9383 tlv_len);
9384 break;
9386 case TUNNELED_TLV:
9387 offset = dissect_tunneled(tvb, pinfo, tree, offset, tlv_len);
9388 break;
9390 case PROFILE_2_STEERING_REQUEST_TLV:
9391 offset = dissect_r2_steering_request(tvb, pinfo, tree, offset, tlv_len);
9392 break;
9394 case UNSUCCESSFUL_ASSOCIATION_POLICY_TLV:
9395 offset = dissect_unsuccessful_association_policy(tvb, pinfo, tree,
9396 offset, tlv_len);
9397 break;
9399 case METRIC_COLLECTION_INTERVAL_TLV:
9400 offset = dissect_metric_collection_interval(tvb, pinfo, tree, offset,
9401 tlv_len);
9402 break;
9404 case RADIO_METRICS_TLV:
9405 offset = dissect_radio_metrics(tvb, pinfo, tree, offset, tlv_len);
9406 break;
9408 case AP_EXTENDED_METRICS_TLV:
9409 offset = dissect_ap_extended_metrics(tvb, pinfo, tree, offset, tlv_len);
9410 break;
9412 case ASSOCIATED_STA_EXTENDED_LINK_METRICS_TLV:
9413 offset = dissect_associated_sta_extended_link_metrics(tvb, pinfo, tree,
9414 offset, tlv_len);
9415 break;
9417 case STATUS_CODE_TLV:
9418 offset = dissect_status_code(tvb, pinfo, tree, offset,
9419 tlv_len);
9420 break;
9422 case REASON_CODE_TLV:
9423 offset = dissect_disassociation_reason_code(tvb, pinfo, tree, offset,
9424 tlv_len);
9425 break;
9427 case BACKHAUL_STA_RADIO_CAPABILITIES_TLV:
9428 offset = dissect_backhaul_sta_radio_capabilities(tvb, pinfo, tree,
9429 offset, tlv_len);
9430 break;
9432 case AKM_SUITE_CAPABILITIES_TLV:
9433 offset = dissect_akm_suite_capabilities(tvb, pinfo, tree, offset,
9434 tlv_len);
9435 break;
9437 case IEEE1905_ENCAP_DPP_TLV:
9438 offset = dissect_1905_encap_dpp(tvb, pinfo, tree, offset, tlv_len);
9439 break;
9441 case IEEE1905_ENCAP_EAPOL_TLV:
9442 offset = dissect_1905_encap_eapol(tvb, pinfo, tree, offset, tlv_len);
9443 break;
9445 case DPP_BOOTSTRAPPING_URI_NOTIFICATION_TLV:
9446 offset = dissect_dpp_bootstrapping_uri_notification(tvb, pinfo, tree,
9447 offset, tlv_len);
9448 break;
9450 case DPP_CCE_INDICATION_TLV:
9451 offset = dissect_dpp_cce_indication(tvb, pinfo, tree, offset, tlv_len);
9452 break;
9454 case DPP_CHIRP_VALUE_TLV:
9455 offset = dissect_dpp_chirp_value(tvb, pinfo, tree, offset, tlv_len);
9456 break;
9458 case DEVICE_INVENTORY_TLV:
9459 offset = dissect_device_inventory(tvb, pinfo, tree, offset, tlv_len);
9460 break;
9462 case AGENT_LIST_TLV:
9463 offset = dissect_agent_list(tvb, pinfo, tree, offset, tlv_len);
9464 break;
9466 case BSS_CONFIGURATION_REQUEST_TLV:
9467 offset = dissect_bss_configuration_request(tvb, pinfo, tree, offset,
9468 tlv_len);
9469 break;
9471 case BSS_CONFIGURATION_RESPONSE_TLV:
9472 offset = dissect_bss_configuration_response(tvb, pinfo, tree, offset,
9473 tlv_len);
9474 break;
9476 case DPP_MESSAGE_TLV:
9477 offset = dissect_dpp_message(tvb, pinfo, tree, offset, tlv_len);
9478 break;
9480 case SPATIAL_REUSE_REQUEST_TLV:
9481 offset = dissect_spatial_reuse_request(tvb, pinfo, tree, offset,
9482 tlv_len);
9483 break;
9485 case SPATIAL_REUSE_REPORT_TLV:
9486 offset = dissect_spatial_reuse_report(tvb, pinfo, tree, offset,
9487 tlv_len);
9488 break;
9490 case SPATIAL_REUSE_CONFIG_RESPONSE_TLV:
9491 offset = dissect_spatial_reuse_config_response(tvb, pinfo, tree,
9492 offset, tlv_len);
9493 break;
9495 case QOS_MANAGEMENT_POLICY_TLV:
9496 offset = dissect_qos_management_policy(tvb, pinfo, tree, offset,
9497 tlv_len);
9498 break;
9500 case QOS_MANAGEMENT_DESCRIPTOR_TLV:
9501 offset = dissect_qos_management_descriptor(tvb, pinfo, tree, offset,
9502 tlv_len);
9503 break;
9505 case CONTROLLER_CAPABILITY_TLV:
9506 offset = dissect_controller_capability(tvb, pinfo, tree, offset,
9507 tlv_len);
9508 break;
9510 case WIFI7_AGENT_CAPABILITIES_TLV:
9511 offset = dissect_wifi_7_agent_capabilities(tvb, pinfo, tree, offset,
9512 tlv_len);
9513 break;
9515 case AGENT_AP_MLD_CONFIGURATION_TLV:
9516 offset = dissect_agent_agent_ap_mld_configuration(tvb, pinfo, tree, offset,
9517 tlv_len);
9518 break;
9520 case BACKHAUL_STA_MLD_CONFIGURATION_TLV:
9521 offset = dissect_backhaul_sta_mld_configuration(tvb, pinfo, tree, offset,
9522 tlv_len);
9523 break;
9525 case ASSOCIATED_STA_MLD_CONFIGURATION_TLV:
9526 offset = dissect_associated_sta_mld_configuration(tvb, pinfo, tree, offset,
9527 tlv_len);
9528 break;
9530 case AFFILIATED_STA_METRICS_TLV:
9531 offset = dissect_affiliated_sta_metrics(tvb, pinfo, tree, offset,
9532 tlv_len);
9533 break;
9535 case AFFILIATED_AP_METRICS_TLV:
9536 offset = dissect_affiliated_ap_metrics(tvb, pinfo, tree, offset,
9537 tlv_len);
9538 break;
9540 case EHT_OPERATIONS_TLV:
9541 offset = dissect_eht_operations_tlv(tvb, pinfo, tree, offset,
9542 tlv_len);
9543 break;
9545 case AVAILABLE_SPECTRUM_INQUIRY_REQUEST_TLV:
9546 offset = dissect_available_spectrum_inquiry_request(tvb, pinfo, tree, offset,
9547 tlv_len);
9548 break;
9550 case AVAILABLE_SPECTRUM_INQUIRY_RESPONSE_TLV:
9551 offset = dissect_available_spectrum_inquiry_response(tvb, pinfo, tree, offset,
9552 tlv_len);
9553 break;
9555 default:
9556 proto_tree_add_item(tree, hf_ieee1905_tlv_data, tvb, offset, tlv_len, ENC_NA);
9557 offset += tlv_len;
9560 return offset;
9563 static int * const tlv_len_headers[] = {
9564 &hf_ieee1905_tlv_len_reserved,
9565 &hf_ieee1905_tlv_len_length,
9566 NULL
9569 #ifndef min
9570 #define min(a, b) ((a < b) ? a : b)
9571 #endif
9573 static int
9574 dissect_ieee1905_tlvs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
9576 bool eom_seen;
9577 unsigned offset = 0;
9579 do {
9580 uint8_t tlv_type;
9581 uint16_t tlv_len;
9582 proto_item *tlv_tree;
9584 tlv_type = tvb_get_uint8(tvb, offset);
9585 eom_seen = (tlv_type == EOM_TLV) ? true : false;
9587 * We can only deal with the reported length remaining ATM so take the
9588 * min of the TLV len and the reported len.
9590 tlv_len = min(tvb_get_ntohs(tvb, offset + 1),
9591 tvb_reported_length_remaining(tvb, offset));
9593 tlv_tree = proto_tree_add_subtree(tree, tvb, offset, tlv_len + 3,
9594 ett_tlv, NULL, val_to_str_ext(tlv_type,
9595 &ieee1905_tlv_types_vals_ext,
9596 "Unknown: %02x"));
9598 proto_tree_add_item(tlv_tree, hf_ieee1905_tlv_types, tvb, offset, 1, ENC_NA);
9599 offset++;
9601 proto_tree_add_bitmask(tlv_tree, tvb, offset, hf_ieee1905_tlv_len,
9602 ett_ieee1905_tlv_len, tlv_len_headers, ENC_BIG_ENDIAN);
9603 offset += 2;
9605 if (tlv_len)
9606 offset = dissect_ieee1905_tlv_data(tvb, pinfo, tlv_tree, offset, tlv_type, tlv_len);
9607 } while (eom_seen == false);
9609 return offset;
9612 static const fragment_items ieee1905_fragment_items = {
9613 /* Fragment subtrees */
9614 &ett_ieee1905_fragment,
9615 &ett_ieee1905_fragments,
9616 /* Fragment fields */
9617 &hf_ieee1905_fragments,
9618 &hf_ieee1905_fragment,
9619 &hf_ieee1905_fragment_overlap,
9620 &hf_ieee1905_fragment_overlap_conflicts,
9621 &hf_ieee1905_fragment_multiple_tails,
9622 &hf_ieee1905_fragment_too_long_fragment,
9623 &hf_ieee1905_fragment_error,
9624 &hf_ieee1905_fragment_count,
9625 &hf_ieee1905_fragment_reassembled_in,
9626 &hf_ieee1905_fragment_reassembled_length,
9627 NULL,
9628 "IEEE1905 Fragments"
9631 typedef struct {
9632 address src;
9633 address dst;
9634 uint32_t vlan_id; /* Take the VLAN ID into account */
9635 uint8_t frag_id;
9636 } ieee1905_fragment_key;
9638 static unsigned
9639 ieee1905_fragment_hash(const void *k)
9641 unsigned hash_val;
9642 const ieee1905_fragment_key *key = (const ieee1905_fragment_key *)k;
9644 if (!key || !key->src.data || !key->dst.data) {
9645 return 0;
9648 const uint8_t src_len = key->src.len;
9649 const uint8_t dst_len = key->dst.len;
9650 const uint8_t hash_buf_len = src_len + dst_len + sizeof(uint8_t) + sizeof(uint32_t);
9651 uint8_t* hash_buf = (uint8_t*)wmem_alloc(wmem_packet_scope(), hash_buf_len);
9653 memcpy(hash_buf, key->src.data, src_len);
9654 memcpy(&hash_buf[src_len], key->dst.data, dst_len);
9655 hash_buf[src_len + dst_len] = key->frag_id;
9656 memcpy(&hash_buf[src_len + dst_len + sizeof(uint8_t)], &key->vlan_id, sizeof(uint32_t));
9657 hash_val = wmem_strong_hash((const uint8_t *)hash_buf, hash_buf_len);
9658 return hash_val;
9661 static gboolean
9662 ieee1905_fragment_equal(const void *k1, const void *k2)
9664 const ieee1905_fragment_key *key1 =
9665 (const ieee1905_fragment_key *)k1;
9666 const ieee1905_fragment_key *key2 =
9667 (const ieee1905_fragment_key *)k2;
9669 if (!key1 || !key2) {
9670 return FALSE;
9673 return (key1->frag_id == key2->frag_id &&
9674 key1->vlan_id == key2->vlan_id &&
9675 addresses_equal(&key1->src, &key2->src) &&
9676 addresses_equal(&key1->src, &key2->src));
9679 static void *
9680 ieee1905_fragment_temporary_key(const packet_info *pinfo, const uint32_t id,
9681 const void *data _U_)
9683 ieee1905_fragment_key *key;
9685 if (pinfo->src.data == NULL || pinfo->dst.data == NULL) {
9686 return NULL;
9689 key = g_slice_new(ieee1905_fragment_key);
9691 key->frag_id = id & 0xFF;
9692 copy_address_shallow(&key->src, &pinfo->src);
9693 copy_address_shallow(&key->dst, &pinfo->dst);
9694 key->vlan_id = pinfo->vlan_id;
9696 return (void *)key;
9699 static void *
9700 ieee1905_fragment_persistent_key(const packet_info *pinfo, const unsigned id,
9701 const void *data _U_)
9703 if (pinfo->src.data == NULL || pinfo->dst.data == NULL) {
9704 return NULL;
9707 ieee1905_fragment_key *key = g_slice_new(ieee1905_fragment_key);
9709 key->frag_id = id & 0xFF;
9710 copy_address(&key->src, &pinfo->src);
9711 copy_address(&key->dst, &pinfo->dst);
9712 key->vlan_id = pinfo->vlan_id;
9714 return (void *)key;
9717 static void
9718 ieee1905_fragment_free_temporary_key(void *ptr)
9720 ieee1905_fragment_key *key = (ieee1905_fragment_key *)ptr;
9722 g_slice_free(ieee1905_fragment_key, key);
9725 static void
9726 ieee1905_fragment_free_persistent_key(void *ptr)
9728 ieee1905_fragment_key *key = (ieee1905_fragment_key *)ptr;
9730 if (key) {
9731 free_address(&key->src);
9732 free_address(&key->dst);
9733 g_slice_free(ieee1905_fragment_key, key);
9737 static reassembly_table g_ieee1905_reassembly_table;
9739 static reassembly_table_functions ieee1905_reassembly_table_functions = {
9740 ieee1905_fragment_hash,
9741 ieee1905_fragment_equal,
9742 ieee1905_fragment_temporary_key,
9743 ieee1905_fragment_persistent_key,
9744 ieee1905_fragment_free_temporary_key,
9745 ieee1905_fragment_free_persistent_key,
9748 #define LAST_IEEE1905_FRAGMENT 0x80
9750 static int
9751 dissect_ieee1905(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
9753 proto_item *ti;
9754 proto_tree *ieee1905_tree;
9755 uint16_t message_type;
9756 unsigned offset = 0, next_offset = 0;
9757 static int * const flag_headers[] = {
9758 &hf_ieee1905_last_fragment,
9759 &hf_ieee1905_relay_indicator,
9760 NULL
9762 uint16_t msg_id = tvb_get_ntohs(tvb, 4);
9763 uint8_t frag_id = tvb_get_uint8(tvb, 6);
9764 uint8_t flags = tvb_get_uint8(tvb, 7);
9765 tvbuff_t *next_tvb = NULL;
9767 col_set_str(pinfo->cinfo, COL_PROTOCOL, "ieee1905");
9769 col_clear(pinfo->cinfo, COL_INFO);
9771 message_type = tvb_get_ntohs(tvb, 2);
9773 col_add_str(pinfo->cinfo, COL_INFO,
9774 val_to_str_ext(message_type, &ieee1905_message_type_vals_ext,
9775 "Unknown: %u"));
9777 ti = proto_tree_add_item(tree, proto_ieee1905, tvb, 0, -1, ENC_NA);
9779 ieee1905_tree = proto_item_add_subtree(ti, ett_ieee1905);
9781 proto_tree_add_item(ieee1905_tree, hf_ieee1905_message_version, tvb, offset, 1, ENC_NA);
9782 offset++;
9784 proto_tree_add_item(ieee1905_tree, hf_ieee1905_message_reserved, tvb, offset, 1, ENC_NA);
9785 offset++;
9787 proto_tree_add_item(ieee1905_tree, hf_ieee1905_message_type, tvb, offset, 2, ENC_BIG_ENDIAN);
9788 offset += 2;
9790 proto_tree_add_item(ieee1905_tree, hf_ieee1905_message_id, tvb, offset, 2, ENC_BIG_ENDIAN);
9791 offset += 2;
9793 proto_tree_add_item(ieee1905_tree, hf_ieee1905_fragment_id, tvb, offset, 1, ENC_NA);
9794 offset++;
9796 proto_tree_add_bitmask(ieee1905_tree, tvb, offset, hf_ieee1905_flags,
9797 ett_ieee1905_flags, flag_headers, ENC_NA);
9798 offset++;
9801 * Now figure out if it is a fragment and do reassembly. If we have a
9802 * fragment but not the whole lot, just dissect it as data, otherwise
9803 * dissect it.
9805 if ((flags & LAST_IEEE1905_FRAGMENT) && frag_id == 0) {
9806 next_tvb = tvb_new_subset_remaining(tvb, offset);
9807 next_offset = dissect_ieee1905_tlvs(next_tvb, pinfo, ieee1905_tree);
9808 } else {
9809 bool save_fragmented = pinfo->fragmented;
9810 pinfo->fragmented = true;
9811 fragment_head *frag_head = NULL;
9812 tvbuff_t *new_tvb = NULL;
9813 unsigned remaining_length = tvb_captured_length_remaining(tvb, offset);
9815 frag_head = fragment_add_seq_check(&g_ieee1905_reassembly_table, tvb,
9816 offset, pinfo,
9817 msg_id, NULL, frag_id,
9818 remaining_length,
9819 (flags & LAST_IEEE1905_FRAGMENT) == 0);
9821 new_tvb = process_reassembled_data(tvb, offset, pinfo,
9822 "Reassembled Message",
9823 frag_head,
9824 &ieee1905_fragment_items,
9825 NULL, ieee1905_tree);
9827 pinfo->fragmented = save_fragmented;
9829 if (new_tvb) { /* Reassembled */
9830 unsigned reassembled_length = tvb_captured_length(new_tvb);
9831 unsigned reassembled_next_offset = dissect_ieee1905_tlvs(new_tvb, pinfo, ieee1905_tree);
9833 tvb_set_reported_length(new_tvb, reassembled_next_offset);
9834 /* Calculate how many bytes of the last packet contributed to the reassembled payload */
9835 next_offset = remaining_length - (reassembled_length - reassembled_next_offset);
9836 } else {
9837 col_append_fstr(pinfo->cinfo, COL_INFO,
9838 " (Message ID: %u, Fragment ID: %u, VLAN ID: %u)",
9839 msg_id, frag_id, pinfo->vlan_id);
9840 proto_tree_add_item(ieee1905_tree, hf_ieee1905_fragment_data, tvb,
9841 offset,
9842 tvb_reported_length_remaining(tvb, offset),
9843 ENC_NA);
9844 next_offset = remaining_length;
9848 proto_item_set_len(ti, offset + next_offset);
9849 tvb_set_reported_length(tvb, offset + next_offset);
9851 return offset + next_offset;
9854 void
9855 proto_register_ieee1905(void)
9857 static hf_register_info hf[] = {
9858 { &hf_ieee1905_fragment_data,
9859 { "Fragment Data", "ieee1905.fragment.data",
9860 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
9862 { &hf_ieee1905_message_version,
9863 { "Message version", "ieee1905.message_version",
9864 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
9866 { &hf_ieee1905_message_reserved,
9867 { "Message reserved", "ieee1905.message_reserved",
9868 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
9870 { &hf_ieee1905_message_type,
9871 { "Message type", "ieee1905.message_type",
9872 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee1905_message_type_vals_ext, 0, NULL, HFILL }},
9874 { &hf_ieee1905_message_id,
9875 { "Message id", "ieee1905.message_id",
9876 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
9878 { &hf_ieee1905_fragment_id,
9879 { "Fragment id", "ieee1905.fragment_id",
9880 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
9882 { &hf_ieee1905_flags,
9883 { "Flags", "ieee1905.flags",
9884 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
9886 { &hf_ieee1905_last_fragment,
9887 { "Last fragment", "ieee1905.last_fragment",
9888 FT_BOOLEAN, 8, TFS(&tfs_last_fragment), 0x80, NULL, HFILL }},
9890 { &hf_ieee1905_relay_indicator,
9891 { "Relay indicator", "ieee1905.relay_indicator",
9892 FT_BOOLEAN, 8, TFS(&tfs_relay_indicator), 0x40, NULL, HFILL }},
9894 { &hf_ieee1905_tlv_types,
9895 { "TLV type", "ieee1905.tlv_type",
9896 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee1905_tlv_types_vals_ext, 0, NULL, HFILL }},
9898 { &hf_ieee1905_tlv_len,
9899 { "TLV length", "ieee1905.tlv_length",
9900 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
9902 { &hf_ieee1905_tlv_len_reserved,
9903 { "TLV length reserved", "ieee1905.tlv_length.reserved",
9904 FT_UINT16, BASE_HEX, NULL, 0xC000, NULL, HFILL }},
9906 { &hf_ieee1905_tlv_len_length,
9907 { "TLV length length", "ieee1905.tlv_length.length",
9908 FT_UINT16, BASE_DEC, NULL, 0x3FFF, NULL, HFILL }},
9910 { &hf_ieee1905_tlv_data,
9911 { "TLV data", "ieee1905.tlv_data",
9912 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
9914 { &hf_ieee1905_al_mac_address_type,
9915 { "1905 AL MAC address type", "ieee1905.1905_al_mac_addr",
9916 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
9918 { &hf_ieee1905_mac_address_type,
9919 { "MAC address type", "ieee1905.mac_addr",
9920 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
9922 { &hf_ieee1905_link_metric_query_type,
9923 { "Link metric query type", "ieee1905.link_metric_query_type",
9924 FT_UINT8, BASE_DEC, VALS(ieee1905_link_metric_query_type_vals),
9925 0, NULL, HFILL }},
9927 { &hf_ieee1905_link_metrics_requested,
9928 { "Link metrics requested", "ieee1905.link_metrics_requested",
9929 FT_UINT8, BASE_DEC, VALS(ieee1905_link_metrics_requested_vals),
9930 0, NULL, HFILL }},
9932 { &hf_ieee1905_responder_al_mac_addr,
9933 { "Responder MAC address", "ieee1905.responder_al_mac_addr",
9934 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
9936 { &hf_ieee1905_neighbor_al_mac_addr,
9937 { "Neighbor MAC address", "ieee1905.neighbor_al_mac_addr",
9938 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
9940 { &hf_ieee1905_receiving_al_mac_addr,
9941 { "Receiving AL MAC address", "ieee1905.receiving_al_mac_addr",
9942 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
9944 { &hf_ieee1905_bridge_flag,
9945 { "IEEE 802.1 bridge flag", "ieee1905.bridgeFlag",
9946 FT_UINT8, BASE_DEC, VALS(ieee1905_bridge_flag_vals), 0, NULL, HFILL }},
9948 { &hf_ieee1905_packet_errors,
9949 { "Packet errors", "ieee1905.packetErrors",
9950 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
9952 { &hf_ieee1905_transmitted_packets,
9953 { "Transmitted packets", "ieee1905.transmittedPackets",
9954 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
9956 { &hf_ieee1905_mac_throughput_capacity,
9957 { "MAC throughput capacity", "ieee1905.macThroughputCapacity",
9958 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
9960 { &hf_ieee1905_link_availability,
9961 { "Link availability", "ieee1905.linkAvailability",
9962 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
9964 { &hf_ieee1905_phy_rate,
9965 { "Phy rate", "ieee1905.phyRate",
9966 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
9968 { &hf_ieee1905_packets_received,
9969 { "Packets received", "ieee1905.packets_received",
9970 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
9972 { &hf_ieee1905_rssi,
9973 { "RSSI", "ieee1905.rssi",
9974 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
9976 { &hf_ieee1905_local_interface_count,
9977 { "Local interface count", "ieee1905.dev_info.local_int_cnt",
9978 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
9980 { &hf_ieee1905_media_type,
9981 { "Media type", "ieee1905.dev_info.media_type",
9982 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
9984 { &hf_ieee1905_media_type_high,
9985 { "Media type bits 15 to 8", "ieee1905.media_type.bits_15_to_8",
9986 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
9988 { &hf_ieee1905_media_type_low,
9989 { "Media type bits 7 to 0", "ieee1905.media_type.bits_7_to_0",
9990 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
9992 { &hf_ieee1905_media_spec_info_len,
9993 { "Special info length", "ieee1905.dev_info.spec_info_len",
9994 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
9996 { &hf_ieee1905_media_spec_info,
9997 { "Special info", "ieee1905.dev_info.spec_info",
9998 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10000 { &hf_ieee1905_bridging_tuples_cnt,
10001 { "Bridging tuples count", "ieee1905.bridging_info.tuples_count",
10002 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10004 { &hf_ieee1905_bridging_mac_address_cnt,
10005 { "Bridging MAC address count", "ieee1905.bridging_info.mac_addr_count",
10006 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10008 { &hf_ieee1905_bridging_mac_address,
10009 { "Bridging MAC address", "ieee1905.bridging_info.mac_address",
10010 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10012 { &hf_ieee1905_local_interface_mac,
10013 { "Local interface MAC address", "ieee1905.local_intf.mac_address",
10014 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10016 { &hf_ieee1905_non_1905_neighbor_mac,
10017 { "Non 1905 neighbor MAC address", "ieee1905.non_1905_neighbor.mac_address",
10018 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10020 { &hf_ieee1905_neighbor_flags,
10021 { "IEEE1905 neighbor flags", "ieee1905.neighbor_flags",
10022 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10024 { &hf_ieee1905_bridges_flag,
10025 { "IEEE1905 bridges", "ieee1905.bridges",
10026 FT_BOOLEAN, 8, TFS(&tfs_bridges_flag), 0x80, NULL, HFILL }},
10028 { &hf_ieee1905_link_metric_result_code,
10029 { "IEEE1905 link metric result code", "ieee1905.link_metric.result_code",
10030 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10032 { &hf_ieee1905_vendor_specific_oui,
10033 { "Vendor specific OUI", "ieee1905.vendor_specific.oui",
10034 FT_UINT24, BASE_OUI, NULL, 0, NULL, HFILL }},
10036 { &hf_ieee1905_vendor_specific_info,
10037 { "Vendor specific information", "ieee1905.vendor_specific.info",
10038 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10040 { &hf_ieee1905_searched_role,
10041 { "Searched role", "ieee1905.searched_role",
10042 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10044 { &hf_ieee1905_supported_role,
10045 { "Supported role", "ieee1905.supported_role",
10046 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10048 { &hf_ieee1905_auto_config_freq_band,
10049 { "Auto config frequency band", "ieee1905.auto_config.freq_band",
10050 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10052 { &hf_ieee1905_supported_freq_band,
10053 { "Supported frequency band", "ieee1905.supported.freq_band",
10054 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10056 { &hf_ieee1905_event_notification_media_types,
10057 { "Media types", "ieee1905.event_notif.media_types",
10058 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10060 { &hf_ieee1905_sender_al_id,
10061 { "Sender AL ID", "ieee1905.sender.al_id",
10062 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10064 { &hf_ieee1905_push_button_event_msg_id,
10065 { "Push button event message ID", "ieee1905.sender.msg_id",
10066 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10068 { &hf_ieee1905_sender_joining_interface,
10069 { "Joining MAC address of sender", "ieee1905.sender.joining_intf",
10070 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10072 { &hf_ieee1905_new_device_interface,
10073 { "New device MAC address", "ieee1905.new_device.intf",
10074 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10076 { &hf_ieee1905_device_al_mac,
10077 { "1905 device AL MAC address", "ieee1905.device_al_mac_addr",
10078 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10080 { &hf_ieee1905_local_intf_oui,
10081 { "Local interface OUI", "ieee1905.local_intf.oui",
10082 FT_UINT24, BASE_OUI, NULL, 0, NULL, HFILL }},
10084 { &hf_ieee1905_local_intf_variant,
10085 { "Local interface variant index", "ieee1905.local_intf.variant",
10086 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10088 { &hf_ieee1905_local_intf_variant_name,
10089 { "Local interface variant name", "ieee1905.local_intf.variant_name",
10090 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10092 { &hf_ieee1905_local_intf_url_count,
10093 { "Local interface URL octet count", "ieee1905.local_intf.url_byte_count",
10094 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10096 { &hf_ieee1905_local_intf_spec_count,
10097 { "Local interface media specific count", "ieee1905.local_intf.media_count",
10098 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10100 { &hf_ieee1905_local_intf_url,
10101 { "Local interface XML description URL", "ieee1905.local_intf.url",
10102 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10104 { &hf_ieee1905_local_intf_spec,
10105 { "Local interface media specific info", "ieee1905.local_intf.spec_info",
10106 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10108 { &hf_ieee1905_dev_id_friendly_name,
10109 { "Device Id Friendly name", "ieee1905.device_id.friendly_name",
10110 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10112 { &hf_ieee1905_dev_id_manuf_name,
10113 { "Device Id Manufacturer name", "ieee1905.device_id.manuf_name",
10114 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10116 { &hf_ieee1905_dev_id_manuf_model,
10117 { "Device Id Manufacturer model", "ieee1905.device_id.manuf_model",
10118 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10120 { &hf_ieee1905_control_url,
10121 { "Device control URL", "ieee1905.device.control_url",
10122 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10124 { &hf_ieee1905_ipv4_type_count,
10125 { "Count of IPv4 entries", "ieee1905.ipv4_type.count",
10126 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10128 { &hf_ieee1905_mac_address,
10129 { "MAC address", "ieee1905.ipv4_type.mac_address",
10130 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10132 { &hf_ieee1905_ipv4_addr_count,
10133 { "IPv4 address count", "ieee1905.ipv4_type.addr_count",
10134 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10136 { &hf_ieee1905_addr_type,
10137 { "IPv4 address type", "ieee1905.ipv4_type.addr_type",
10138 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10140 { &hf_ieee1905_ipv4_addr,
10141 { "IPv4 address", "ieee1905.ipv4_type.ipv4_addr",
10142 FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
10144 { &hf_ieee1905_dhcp_server,
10145 { "DHCP server", "ieee1905.ipv4_type.dhcp_server",
10146 FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
10148 { &hf_ieee1905_ipv6_type_count,
10149 { "Count of IPv6 entries", "ieee1905.ipv6_type.count",
10150 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10152 { &hf_ieee1905_ipv6_linklocal,
10153 { "Link local address", "ieee1905.ipv6_type.link_local",
10154 FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }},
10156 { &hf_ieee1905_ipv6_mac_address,
10157 { "MAC address", "ieee1905.ipv6_type.mac_address",
10158 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10160 { &hf_ieee1905_ipv6_addr_count,
10161 { "IPv6 address count", "ieee1905.ipv6_type.addr_count",
10162 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10164 { &hf_ieee1905_ipv6_addr_type,
10165 { "IPv6 address type", "ieee1905.ipv6_type.addr_type",
10166 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10168 { &hf_ieee1905_ipv6_addr,
10169 { "IPv6 address", "ieee1905.ipv6_type.ipv6_addr",
10170 FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }},
10172 { &hf_ieee1905_ipv6_dhcp_server,
10173 { "DHCP server", "ieee1905.ipv6_type.dhcp_server",
10174 FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }},
10176 { &hf_ieee1905_generic_phy_media_types,
10177 { "Generic Phy media type count", "ieee1905.button_push.phy_count",
10178 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10180 { &hf_ieee1905_profile_version,
10181 { "1905 profile version type", "ieee1905.profile.version",
10182 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10184 { &hf_ieee1905_power_off_intf_count,
10185 { "Powered off interface count", "ieee1905.power_off.intf_count",
10186 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10188 { &hf_ieee1905_power_change_intf_count,
10189 { "Power change local interface count", "ieee1905.power_chg.intf_count",
10190 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10192 { &hf_ieee1905_power_change_mac_addr,
10193 { "Power change interface MAc addr", "ieee1905.power_chg.mac_addr",
10194 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10196 { &hf_ieee1905_power_change_state,
10197 { "Power change requested state", "ieee1905.power_chg.state",
10198 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10200 { &hf_ieee1905_power_status_intf_count,
10201 { "Power status local interface count", "ieee1905.power_sts.intf_count",
10202 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10204 { &hf_ieee1905_power_status_mac_addr,
10205 { "Power status interface MAc addr", "ieee1905.power_sts.mac_addr",
10206 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10208 { &hf_ieee1905_power_status_state,
10209 { "Power change status", "ieee1905.power_sts.state",
10210 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10212 { &hf_ieee1905_l2_neighbor_intf_count,
10213 { "L2 neighbor interface count", "ieee1905.l2_neighbor.intf_count",
10214 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10216 { &hf_ieee1905_l2_local_intf_mac_addr,
10217 { "L2 neighbor local interface MAC addr", "ieee1905.l2_neighbor.mac_addr",
10218 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10220 { &hf_ieee1905_l2_neighbor_dev_count,
10221 { "L2 neighbor device count", "ieee1905.l2_neighbor.dev_count",
10222 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10224 { &hf_ieee1905_l2_neighbor_mac_addr,
10225 { "L2 neighbor interface MAC address", "ieee1905.l2_neighbor.neighbor_mac_addr",
10226 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10228 { &hf_ieee1905_l2_behind_mac_addr_count,
10229 { "L2 neighbor behind MAC addr count", "ieee1905.l2_neighbor.neighbor_behind_count",
10230 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10232 { &hf_ieee1905_l2_behind_mac_addr,
10233 { "L2 neighbor behind MAC addr", "ieee1905.l2_neighbor.neighbor_behind_mac_addr",
10234 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10236 { &hf_ieee1905_supported_service_count,
10237 { "Supported service count", "ieee1905.supported_service.service_count",
10238 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10240 { &hf_ieee1905_supported_service,
10241 { "Supported service", "ieee1905.supported_service.service",
10242 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10244 { &hf_ieee1905_searched_service_count,
10245 { "Searched service count", "ieee1905.searched_service.service_count",
10246 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10248 { &hf_ieee1905_searched_service,
10249 { "Searched service", "ieee1905.searched_service.service",
10250 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10252 { &hf_ieee1905_ap_radio_identifier,
10253 { "AP radio identifier", "ieee1905.ap_radio_identifier",
10254 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10256 { &hf_ieee1905_operatonal_bss_radio_count,
10257 { "AP operational BSS radio count", "ieee1905.ap_bss_radio_count",
10258 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10260 { &hf_ieee1905_ap_operational_intf_count,
10261 { "AP operational interface count", "ieee1905.ap_bss_intf_count",
10262 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10264 { &hf_ieee1905_ap_local_intf_mac_addr,
10265 { "AP operational local interface MAC addr", "ieee1905.ap_bss_local_intf_addr",
10266 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10268 { &hf_ieee1905_ap_local_intf_ssid_len,
10269 { "AP operational BSS local interface SSID len", "ieee1905.ap_bss_local_intf_ssid_len",
10270 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10272 { &hf_ieee1905_ap_local_intf_ssid,
10273 { "AP operational BSS local interface SSID", "ieee1905.ap_bss_local_intf_ssid",
10274 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
10276 { &hf_ieee1905_ap_capabilities_flags,
10277 { "AP capabilities flags", "ieee1905.ap_capability_flags",
10278 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10280 { &hf_ieee1905_rpt_unsuccessful_associations,
10281 { "Report Unsuccessful Associations", "ieee1905.rpt_unsuccessful_assoc",
10282 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10284 { &hf_ieee1905_unassoc_sta_metrics_oper_flag,
10285 { "STA link metric reporting operational channels", "ieee1905.link_metric_oper",
10286 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80, NULL, HFILL }},
10288 { &hf_ieee1905_unassoc_sta_metrics_non_oper_flag,
10289 { "STA link metric reporting non-operational channels", "ieee1905.link_metric_non_oper",
10290 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40, NULL, HFILL }},
10292 { &hf_ieee1905_agent_init_steering,
10293 { "Agent-initiated RCPI-based Steering", "ieee1905.agent_init_steering",
10294 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20, NULL, HFILL }},
10296 { &hf_ieee1905_rpt_unsuccessful_assoc_report,
10297 { "Unsuccessful Association Attempts", "ieee1905.report_unsuccessful_associations",
10298 FT_BOOLEAN, 8, TFS(&tfs_ieee1905_report_unsuccessful_association_attempt_flag), 0x80, NULL, HFILL }},
10300 { &hf_ieee1905_higher_layer_protocol,
10301 { "Higher layer protocol", "ieee1905.higher_layer_proto",
10302 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10304 { &hf_ieee1905_higher_layer_data,
10305 { "Higher layer data", "ieee1905.higher_layer_data",
10306 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10308 { &hf_ieee1905_assoc_backhaul_station_mac,
10309 { "Associated backhaul station MAC address", "ieee1905.assoc.mac_addr",
10310 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10312 { &hf_ieee1905_backhaul_target_bssid,
10313 { "Target BSS BSSID", "ieee1905.assoc.target_bssid",
10314 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10316 { &hf_ieee1905_backhaul_steering_status,
10317 { "Status code", "ieee1905.assoc.status",
10318 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10320 { &hf_ieee1905_backhaul_operating_class,
10321 { "Backhaul operating class", "ieee1905.assoc.operating_class",
10322 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10324 { &hf_ieee1905_backhaul_channel_number,
10325 { "Backhaul beacon channel number", "ieee1905.assoc.channel_num",
10326 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10328 { &hf_ieee1905_client_assoc_bssid,
10329 { "Target BSSID", "ieee1905.assoc_ctrl.bssid",
10330 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10332 { &hf_ieee1905_association_control,
10333 { "Association control", "ieee1905.assoc_ctrl.control",
10334 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10336 { &hf_ieee1905_association_control_validity,
10337 { "Request validity period", "ieee1905.assoc_ctrl.validity",
10338 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10340 { &hf_ieee1905_client_assoc_sta_count,
10341 { "STA control list count", "ieee1905.assoc_ctrl.sta_list_count",
10342 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10344 { &hf_ieee1905_client_assoc_mac_addr,
10345 { "Target STA MAC address", "ieee1905.assoc_ctrl.target_mac_addr",
10346 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10348 { &hf_ieee1905_btm_reporter_bssid,
10349 { "BTM report source BSSID", "ieee1905.btm_report.source_bssid",
10350 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10352 { &hf_ieee1905_btm_sta_mac_addr,
10353 { "BTM report target MAC address", "ieee1905.btm_report.mac_addr",
10354 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10356 { &hf_ieee1905_btm_report_status,
10357 { "BTM status code", "ieee1905.btm_report.status",
10358 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10360 { &hf_ieee1905_btm_report_bssid,
10361 { "BTM target BSSID", "ieee1905.btm_report.target_bssid",
10362 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10364 { &hf_ieee1905_source_bss_bssid,
10365 { "Source BSS BSSID", "ieee1905.steering_req.source_bssid",
10366 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10368 { &hf_ieee1905_steering_request_flags,
10369 { "Steering request flags", "ieee1905.steering_req.flags",
10370 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10372 { &hf_ieee1905_steering_req_op_window,
10373 { "Steering opportunity window", "ieee1905.steering_req.window",
10374 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10376 { &hf_ieee1905_steering_request_mode_flag,
10377 { "Mode", "ieee1905.steering_req.mode",
10378 FT_BOOLEAN, 8, TFS(&tfs_ieee1905_steering_request_mode_flag), 0x80, NULL, HFILL }},
10380 { &hf_ieee1905_btm_disassoc_imminent_flag,
10381 { "BTM disassociation imminent", "ieee1905.steering_req.disassoc_imminent",
10382 FT_BOOLEAN, 8, TFS(&tfs_ieee1905_btm_disassoc_imminent_flag), 0x40, NULL, HFILL }},
10384 { &hf_ieee1905_btm_abridged_flag,
10385 { "BTM abridged", "ieee1905.steering_req.btm_abridged",
10386 FT_BOOLEAN, 8, TFS(&tfs_ieee1905_btm_abridged_flag), 0x20, NULL, HFILL }},
10388 { &hf_ieee1905_steering_req_reserved,
10389 { "Reserved", "ieee1905.steering_req.reserved",
10390 FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
10392 { &hf_ieee1905_steering_btm_disass_timer,
10393 { "BTM disassociation timer", "ieee1905.steering_req.disass_timer",
10394 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10396 { &hf_ieee1905_steering_req_sta_count,
10397 { "STA list count", "ieee1905.steering_req.sta_count",
10398 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10400 { &hf_ieee1905_steering_req_target_bssid_count,
10401 { "Target BSSID list count", "ieee1905.steering_req.bssid_count",
10402 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10404 { &hf_ieee1905_steering_req_sta_mac,
10405 { "Target MAC address", "ieee1905.steering_req.target_mac",
10406 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10408 { &hf_ieee1905_steering_req_target_bssid,
10409 { "Target BSSID", "ieee1905.steering_req.target_bssid",
10410 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10412 { &hf_ieee1905_steering_req_oper_class,
10413 { "Target BSS operating class", "ieee1905.steering_req.oper_class",
10414 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10416 { &hf_ieee1905_steering_req_target_channel,
10417 { "Target BSS channel number", "ieee1905.steering_req.target_channel",
10418 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10420 { &hf_ieee1905_client_bssid,
10421 { "Client BSSID", "ieee1905.client_info.bssid",
10422 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10424 { &hf_ieee1905_client_mac_addr,
10425 { "Client MAC address", "ieee1905.client_info.mac_addr",
10426 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10428 { &hf_ieee1905_client_capability_result,
10429 { "Result code", "ieee1905.client_capability.result",
10430 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10432 { &hf_ieee1905_client_capability_frame,
10433 { "(Re)Association frame body", "ieee1905.client_capability.frame",
10434 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10436 { &hf_ieee1905_association_flag,
10437 { "Association event", "ieee1905.assoc_event.assoc_event",
10438 FT_BOOLEAN, 8, TFS(&tfs_ieee1905_association_event_flag),
10439 0x80, NULL, HFILL }},
10441 { &hf_ieee1905_association_client_mac_addr,
10442 { "Client mac address", "ieee1905.assoc_event.client_mac",
10443 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10445 { &hf_ieee1905_association_agent_bssid,
10446 { "Multi-AP agent BSSID", "ieee1905.assoc_event.agent_bssid",
10447 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10449 { &hf_ieee1905_association_event_flags,
10450 { "Association event flags", "ieee1905.assoc_event.flags",
10451 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10453 { &hf_ieee1905_ap_radio_max_bss,
10454 { "Maximum BSS support", "ieee1905.radio_basic_cap.max_bss",
10455 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10457 { &hf_ieee1905_ap_radio_classes,
10458 { "Operating class count", "ieee1905.radio_basic.op_classes",
10459 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10461 { &hf_ieee1905_ap_radio_class,
10462 { "Operating class", "ieee1905.radio_basic.op_class",
10463 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10465 { &hf_ieee1905_ap_radio_eirp,
10466 { "Maximum transmit power EIRP", "ieee1905.radio_basic.max_power",
10467 FT_INT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_dbm), 0, NULL, HFILL }},
10469 { &hf_ieee1905_ap_radio_non_op_count,
10470 { "Number of non-operable channels", "ieee1905.radio_basic.non_op_channels",
10471 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10473 { &hf_ieee1905_radio_basic_non_op_channel,
10474 { "Statically non-operable channel", "ieee1905.radio_basic.non_op_channel",
10475 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10477 { &hf_ieee1905_max_supported_tx_streams,
10478 { "Maximum supported Tx spatial streams", "ieee1905.ap_ht.max_tx_streams",
10479 FT_UINT8, BASE_HEX, VALS(max_supported_tx_streams_vals), 0xC0, NULL, HFILL}},
10481 { &hf_ieee1905_max_supported_rx_streams,
10482 { "Maximum supported Rx spatial streams", "ieee1905.ap_ht.max_rx_streams",
10483 FT_UINT8, BASE_HEX, VALS(max_supported_rx_streams_vals), 0x30, NULL, HFILL}},
10485 { &hf_ieee1905_short_gi_20mhz_flag,
10486 { "Short GI support for 20 MHz", "ieee1905.ap_ht.short_gi_20mhz",
10487 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08, NULL, HFILL}},
10489 { &hf_ieee1905_short_gi_40mhz_flag,
10490 { "Short GI support for 40 MHz", "ieee1905.ap_ht.short_gi_40mhz",
10491 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04, NULL, HFILL}},
10493 { &hf_ieee1905_ht_support_40mhz_flag,
10494 { "HT support for 40MHz", "ieee1905.ap_ht.ht_support_40mhz",
10495 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02, NULL, HFILL}},
10497 { &hf_ieee1905_ap_ht_capabilities_radio_id,
10498 { "Radio unique ID", "ieee1905.ap_ht.radio_id",
10499 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10501 { &hf_ieee1905_ht_cap_flags,
10502 { "Capabilities", "ieee1905.ap_ht.caps",
10503 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10505 { &hf_ieee1905_vht_max_supported_tx_streams,
10506 { "Maximum supported Tx spatial streams", "ieee1905.ap_vht.max_tx_streams",
10507 FT_UINT16, BASE_HEX, VALS(vht_he_max_supported_tx_streams_vals), 0xE000, NULL, HFILL}},
10509 { &hf_ieee1905_vht_max_supported_rx_streams,
10510 { "Maximum supported Rx spatial streams", "ieee1905.ap_vht.max_rx_streams",
10511 FT_UINT16, BASE_HEX, VALS(vht_he_max_supported_rx_streams_vals), 0x1C00, NULL, HFILL}},
10513 { &hf_ieee1905_short_gi_80mhz_flag,
10514 { "Short GI support for 80 MHz", "ieee1905.ap_vht.short_gi_80mhz",
10515 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0200, NULL, HFILL}},
10517 { &hf_ieee1905_short_gi_160mhz_flag,
10518 { "Short GI support for 160 and 80+80 MHz", "ieee1905.ap_vht.short_gi_160mhz",
10519 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0100, NULL, HFILL}},
10521 { &hf_ieee1905_vht_support_80plus_mhz_flag,
10522 { "VHT support for 80+80 MHz", "ieee1905.ap_vht.vht_80plus_mhz",
10523 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0080, NULL, HFILL}},
10525 { &hf_ieee1905_vht_support_160_mhz_flag,
10526 { "VHT support for 160 MHz", "ieee1905.ap_vht.vht_160mhz",
10527 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0040, NULL, HFILL}},
10529 { &hf_ieee1905_su_beamformer_capable_flag,
10530 { "SU beamformer capable", "ieee1905.ap_vht.su_beamformer",
10531 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0020, NULL, HFILL}},
10533 { &hf_ieee1905_mu_beamformer_capable_flag,
10534 { "MU beamformer capable", "ieee1905.ap_vht.mu_beamformer",
10535 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0010, NULL, HFILL}},
10537 { &hf_ieee1905_ap_vht_capabilities_radio_id,
10538 { "Radio unique ID", "ieee1905.ap_vht.radio_id",
10539 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10541 { &hf_ieee1905_vht_cap_flags,
10542 { "Capabilities", "ieee1905.ap_vht.caps",
10543 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10545 { &hf_ieee1905_ap_vht_supported_vht_tx_mcs,
10546 { "Supported VHT Tx MCS", "ieee1905.ap_vht.supported_tx_mcs",
10547 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10549 { &hf_ieee1905_ap_vht_supported_vht_rx_mcs,
10550 { "Supported VHT Rx MCS", "ieee1905.ap_vht.supported_rx_mcs",
10551 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10553 { &hf_ieee1905_ap_vht_tx_mcs_map_1ss,
10554 { "Max Tx VHT MCS for 1 SS",
10555 "ieee1905.ap_vht.max_tx_vht_mcs_1_ss",
10556 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10557 0x0003, NULL, HFILL }},
10559 { &hf_ieee1905_ap_vht_tx_mcs_map_2ss,
10560 { "Max Tx VHT MCS for 2 SS",
10561 "ieee1905.ap_vht.max_tx_vht_mcs_2_ss",
10562 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10563 0x000C, NULL, HFILL }},
10565 { &hf_ieee1905_ap_vht_tx_mcs_map_3ss,
10566 { "Max Tx VHT MCS for 3 SS",
10567 "ieee1905.ap_vht.max_tx_vht_mcs_3_ss",
10568 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10569 0x0030, NULL, HFILL }},
10571 { &hf_ieee1905_ap_vht_tx_mcs_map_4ss,
10572 { "Max Tx VHT MCS for 4 SS",
10573 "ieee1905.ap_vht.max_tx_vht_mcs_4_ss",
10574 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10575 0x00C0, NULL, HFILL }},
10577 { &hf_ieee1905_ap_vht_tx_mcs_map_5ss,
10578 { "Max Tx VHT MCS for 5 SS",
10579 "ieee1905.ap_vht.max_tx_vht_mcs_5_ss",
10580 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10581 0x0300, NULL, HFILL }},
10583 { &hf_ieee1905_ap_vht_tx_mcs_map_6ss,
10584 { "Max Tx VHT MCS for 6 SS",
10585 "ieee1905.ap_vht.max_tx_vht_mcs_6_ss",
10586 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10587 0x0C00, NULL, HFILL }},
10589 { &hf_ieee1905_ap_vht_tx_mcs_map_7ss,
10590 { "Max Tx VHT MCS for 7 SS",
10591 "ieee1905.ap_vht.max_tx_vht_mcs_7_ss",
10592 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10593 0x3000, NULL, HFILL }},
10595 { &hf_ieee1905_ap_vht_tx_mcs_map_8ss,
10596 { "Max Tx VHT MCS for 8 SS",
10597 "ieee1905.ap_vht.max_tx_vht_mcs_8_ss",
10598 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10599 0xC000, NULL, HFILL }},
10601 { &hf_ieee1905_ap_vht_rx_mcs_map_1ss,
10602 { "Max Rx VHT MCS for 1 SS",
10603 "ieee1905.ap_vht.max_rx_vht_mcs_1_ss",
10604 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10605 0x0003, NULL, HFILL }},
10607 { &hf_ieee1905_ap_vht_rx_mcs_map_2ss,
10608 { "Max Rx VHT MCS for 2 SS",
10609 "ieee1905.ap_vht.max_rx_vht_mcs_2_ss",
10610 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10611 0x000C, NULL, HFILL }},
10613 { &hf_ieee1905_ap_vht_rx_mcs_map_3ss,
10614 { "Max Rx VHT MCS for 3 SS",
10615 "ieee1905.ap_vht.max_rx_vht_mcs_3_ss",
10616 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10617 0x0030, NULL, HFILL }},
10619 { &hf_ieee1905_ap_vht_rx_mcs_map_4ss,
10620 { "Max Rx VHT MCS for 4 SS",
10621 "ieee1905.ap_vht.max_rx_vht_mcs_4_ss",
10622 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10623 0x00C0, NULL, HFILL }},
10625 { &hf_ieee1905_ap_vht_rx_mcs_map_5ss,
10626 { "Max Rx VHT MCS for 5 SS",
10627 "ieee1905.ap_vht.max_rx_vht_mcs_5_ss",
10628 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10629 0x0300, NULL, HFILL }},
10631 { &hf_ieee1905_ap_vht_rx_mcs_map_6ss,
10632 { "Max Rx VHT MCS for 6 SS",
10633 "ieee1905.ap_vht.max_rx_vht_mcs_6_ss",
10634 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10635 0x0C00, NULL, HFILL }},
10637 { &hf_ieee1905_ap_vht_rx_mcs_map_7ss,
10638 { "Max Rx VHT MCS for 7 SS",
10639 "ieee1905.ap_vht.max_rx_vht_mcs_7_ss",
10640 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10641 0x3000, NULL, HFILL }},
10643 { &hf_ieee1905_ap_vht_rx_mcs_map_8ss,
10644 { "Max Rx VHT MCS for 8 SS",
10645 "ieee1905.ap_vht.max_rx_vht_mcs_8_ss",
10646 FT_UINT16, BASE_DEC, VALS(vht_supported_mcs_vals),
10647 0xC000, NULL, HFILL }},
10649 { &hf_ieee1905_assoc_clients_bss_count,
10650 { "Included BSS count", "ieee1905.assoc_client.bss_count",
10651 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10653 { &hf_ieee1905_assoc_bssid,
10654 { "Associated BSS", "ieee1905.assoc_client.bss",
10655 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10657 { &hf_ieee1905_bss_client_count,
10658 { "Associated client count", "ieee1905.assoc_client.client_count",
10659 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10661 { &hf_ieee1905_bss_client_mac,
10662 { "Associated client MAC address", "ieee1905.assoc_client.mac_addr",
10663 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10665 { &hf_ieee1905_bss_client_last_assoc,
10666 { "Time since last association", "ieee1905.assoc_client.time_since",
10667 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
10669 { &hf_ieee1905_channel_pref_preference,
10670 { "Preference", "ieee1905.channel_pref.pref",
10671 FT_UINT8, BASE_HEX, VALS(channel_preference_prefs_vals), 0xF0, NULL, HFILL}},
10672 { &hf_ieee1905_channel_pref_reason,
10673 { "Reason code", "ieee1905.channel_pref.reason",
10674 FT_UINT8, BASE_HEX, VALS(channel_preference_reason_vals), 0x0F, NULL, HFILL}},
10676 { &hf_ieee1905_channel_preference_radio_id,
10677 { "Radio unique ID", "ieee1905.channel_pref.radio_id",
10678 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10680 { &hf_ieee1905_channel_preference_class_count,
10681 { "Operating class count", "ieee1905.channel_prefs.class_count",
10682 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10684 { &hf_ieee1905_channel_pref_class,
10685 { "Operating class", "ieee1905.channel_prefs.class",
10686 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10688 { &hf_ieee1905_channel_pref_channel_count,
10689 { "Channel list count", "ieee1905.channel_prefs.channel_count",
10690 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10692 { &hf_ieee1905_channel_pref_channel,
10693 { "Channel number", "ieee1905.channel_prefs.channel_no",
10694 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10696 { &hf_ieee1905_channel_prefs_flags,
10697 { "Channel preference flags", "ieee1905.channel_prefs.flags",
10698 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10700 { &hf_ieee1905_trans_power_limit_radio_id,
10701 { "Radio unique ID", "ieee1905.transmit_power.radio_id",
10702 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10704 { &hf_ieee1905_trans_power_limit_eirp,
10705 { "Transmit power limit EIRP per 20MHz", "ieee1905.transmit_power.eirp",
10706 FT_INT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_dbm), 0, NULL, HFILL }},
10708 { &hf_ieee1905_channel_select_resp_radio_id,
10709 { "Radio unique ID", "ieee1905.channel_select.radio_id",
10710 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10712 { &hf_ieee1905_radio_metrics_radio_id,
10713 { "Radio unique ID", "ieee1905.radio_metrics.radio_id",
10714 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10716 { &hf_ieee1905_channel_select_resp_code,
10717 { "Response code", "ieee1905.channel_select.response_code",
10718 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10720 { &hf_ieee1905_op_channel_report_radio_id,
10721 { "Radio unique ID", "ieee1905.operating_channel.radio_id",
10722 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10724 { &hf_ieee1905_op_channel_report_classes,
10725 { "Currently operating classes", "ieee1905.operating_channel.classes",
10726 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10728 { &hf_ieee1905_op_channel_class,
10729 { "Operating class", "ieee1905.operating_channel.op_class",
10730 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10732 { &hf_ieee1905_op_channel_number,
10733 { "Operating channel number", "ieee1905.operating_channel.chan_num",
10734 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10736 { &hf_ieee1905_op_channel_eirp,
10737 { "Current transmit power EIRP", "ieee1905.operating_channel.eirp",
10738 FT_INT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_dbm), 0, NULL, HFILL }},
10740 { &hf_ieee1905_ap_he_cap_radio_id,
10741 { "Radio unique ID", "ieee1905.ap_he_capability.radio_id",
10742 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10744 { &hf_ieee1905_ap_he_cap_mcs_length,
10745 { "Supported HE MCS length", "ieee1905.ap_he_capability.he_mcs_count",
10746 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10748 { &hf_ieee1905_ap_he_cap_tx_mcs_le_80_mhz,
10749 { "Supported Tx HE-MCS <= 80 MHz",
10750 "ieee1905.ap_he_capability.supported_tx_he_mcs_le_80mhz",
10751 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10753 { &hf_ieee1905_ap_he_tx_mcs_map_1ss,
10754 { "Max Tx HE-MCS for 1 SS",
10755 "ieee1905.ap_he_capability.max_tx_he_mcs_1_ss",
10756 FT_UINT16, BASE_DEC, VALS(max_he_mcs_1_ss_vals),
10757 0x0003, NULL, HFILL }},
10759 { &hf_ieee1905_ap_he_tx_mcs_map_2ss,
10760 { "Max Tx HE-MCS for 2 SS",
10761 "ieee1905.ap_he_capability.max_tx_he_mcs_2_ss",
10762 FT_UINT16, BASE_DEC, VALS(max_he_mcs_2_ss_vals),
10763 0x000C, NULL, HFILL }},
10765 { &hf_ieee1905_ap_he_tx_mcs_map_3ss,
10766 { "Max Tx HE-MCS for 3 SS",
10767 "ieee1905.ap_he_capability.max_tx_he_mcs_3_ss",
10768 FT_UINT16, BASE_DEC, VALS(max_he_mcs_3_ss_vals),
10769 0x0030, NULL, HFILL }},
10771 { &hf_ieee1905_ap_he_tx_mcs_map_4ss,
10772 { "Max Tx HE-MCS for 4 SS",
10773 "ieee1905.ap_he_capability.max_tx_he_mcs_4_ss",
10774 FT_UINT16, BASE_DEC, VALS(max_he_mcs_4_ss_vals),
10775 0x00C0, NULL, HFILL }},
10777 { &hf_ieee1905_ap_he_tx_mcs_map_5ss,
10778 { "Max Tx HE-MCS for 5 SS",
10779 "ieee1905.ap_he_capability.max_tx_he_mcs_5_ss",
10780 FT_UINT16, BASE_DEC, VALS(max_he_mcs_5_ss_vals),
10781 0x0300, NULL, HFILL }},
10783 { &hf_ieee1905_ap_he_tx_mcs_map_6ss,
10784 { "Max Tx HE-MCS for 6 SS",
10785 "ieee1905.ap_he_capability.max_tx_he_mcs_6_ss",
10786 FT_UINT16, BASE_DEC, VALS(max_he_mcs_6_ss_vals),
10787 0x0C00, NULL, HFILL }},
10789 { &hf_ieee1905_ap_he_tx_mcs_map_7ss,
10790 { "Max Tx HE-MCS for 7 SS",
10791 "ieee1905.ap_he_capability.max_tx_he_mcs_7_ss",
10792 FT_UINT16, BASE_DEC, VALS(max_he_mcs_7_ss_vals),
10793 0x3000, NULL, HFILL }},
10795 { &hf_ieee1905_ap_he_tx_mcs_map_8ss,
10796 { "Max Tx HE-MCS for 8 SS",
10797 "ieee1905.ap_he_capability.max_tx_he_mcs_8_ss",
10798 FT_UINT16, BASE_DEC, VALS(max_he_mcs_8_ss_vals),
10799 0xC000, NULL, HFILL }},
10801 { &hf_ieee1905_ap_he_cap_rx_mcs_le_80_mhz,
10802 { "Supported Rx HE-MCS <= 80 MHz",
10803 "ieee1905.ap_he_capability.supported_rx_he_mcs_le_80mhz",
10804 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10806 { &hf_ieee1905_ap_he_rx_mcs_map_1ss,
10807 { "Max Rx HE-MCS for 1 SS",
10808 "ieee1905.ap_he_capability.max_rx_he_mcs_1_ss",
10809 FT_UINT16, BASE_DEC, VALS(max_he_mcs_1_ss_vals),
10810 0x0003, NULL, HFILL }},
10812 { &hf_ieee1905_ap_he_rx_mcs_map_2ss,
10813 { "Max Rx HE-MCS for 2 SS",
10814 "ieee1905.ap_he_capability.max_rx_he_mcs_2_ss",
10815 FT_UINT16, BASE_DEC, VALS(max_he_mcs_2_ss_vals),
10816 0x000C, NULL, HFILL }},
10818 { &hf_ieee1905_ap_he_rx_mcs_map_3ss,
10819 { "Max Rx HE-MCS for 3 SS",
10820 "ieee1905.ap_he_capability.max_rx_he_mcs_3_ss",
10821 FT_UINT16, BASE_DEC, VALS(max_he_mcs_3_ss_vals),
10822 0x0030, NULL, HFILL }},
10824 { &hf_ieee1905_ap_he_rx_mcs_map_4ss,
10825 { "Max Rx HE-MCS for 4 SS",
10826 "ieee1905.ap_he_capability.max_rx_he_mcs_4_ss",
10827 FT_UINT16, BASE_DEC, VALS(max_he_mcs_4_ss_vals),
10828 0x00C0, NULL, HFILL }},
10830 { &hf_ieee1905_ap_he_rx_mcs_map_5ss,
10831 { "Max Rx HE-MCS for 5 SS",
10832 "ieee1905.ap_he_capability.max_rx_he_mcs_5_ss",
10833 FT_UINT16, BASE_DEC, VALS(max_he_mcs_5_ss_vals),
10834 0x0300, NULL, HFILL }},
10836 { &hf_ieee1905_ap_he_rx_mcs_map_6ss,
10837 { "Max Rx HE-MCS for 6 SS",
10838 "ieee1905.ap_he_capability.max_rx_he_mcs_6_ss",
10839 FT_UINT16, BASE_DEC, VALS(max_he_mcs_6_ss_vals),
10840 0x0C00, NULL, HFILL }},
10842 { &hf_ieee1905_ap_he_rx_mcs_map_7ss,
10843 { "Max Rx HE-MCS for 7 SS",
10844 "ieee1905.ap_he_capability.max_rx_he_mcs_7_ss",
10845 FT_UINT16, BASE_DEC, VALS(max_he_mcs_7_ss_vals),
10846 0x3000, NULL, HFILL }},
10848 { &hf_ieee1905_ap_he_rx_mcs_map_8ss,
10849 { "Max Rx HE-MCS for 8 SS",
10850 "ieee1905.ap_he_capability.max_rx_he_mcs_8_ss",
10851 FT_UINT16, BASE_DEC, VALS(max_he_mcs_8_ss_vals),
10852 0xC000, NULL, HFILL }},
10854 { &hf_ieee1905_ap_he_cap_tx_mcs_160_mhz,
10855 { "Supported Tx HE-MCS 160 MHz",
10856 "ieee1905.ap_he_capability.supported_tx_he_mcs_160mhz",
10857 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10859 { &hf_ieee1905_ap_he_cap_rx_mcs_160_mhz,
10860 { "Supported Rx HE-MCS 160 MHz",
10861 "ieee1905.ap_he_capability.supported_rx_he_mcs_160mhz",
10862 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10864 { &hf_ieee1905_ap_he_cap_tx_mcs_80p80_mhz,
10865 { "Supported Tx HE-MCS 80+80 MHz",
10866 "ieee1905.ap_he_capability.supported_tx_he_mcs_80p80mhz",
10867 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10869 { &hf_ieee1905_ap_he_cap_rx_mcs_80p80_mhz,
10870 { "Supported Rx HE-MCS 80+80 MHz",
10871 "ieee1905.ap_he_capability.supported_rx_he_mcs_80p80mhz",
10872 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
10874 { &hf_ieee1905_unassoc_metrics_mac_count,
10875 {"MAC Addresses for this channel",
10876 "ieee1905.unassoc_sta_link_metrics.mac_count",
10877 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10879 { &hf_ieee1905_unassoc_link_metrics_query_mac,
10880 { "STA MAC address", "ieee1905.unassoc_sta_link_metrics.mac_addr",
10881 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10883 { &hf_ieee1905_ap_metrics_reporting_interval,
10884 { "AP metrics reporting interval", "ieee1905.sta_metric_policy.ap_interval",
10885 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10887 { &hf_ieee1905_metric_reporting_policy_radio_id,
10888 { "Radio ID", "ieee1905.metric_reporting_policy.radio_id",
10889 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10891 { &hf_ieee1905_metric_reporting_radio_count,
10892 { "Radio count", "ieee1905.sta_metric_policy.radio_count",
10893 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10895 { &hf_ieee1905_metric_rcpi_threshold,
10896 { "RCPI reporting threshold", "ieee1905.sta_metric_policy.rcpi_threshold",
10897 FT_UINT8, BASE_CUSTOM, CF_FUNC(rcpi_threshold_custom),
10898 0, NULL, HFILL }},
10900 { &hf_ieee1905_metric_reporting_rcpi_hysteresis,
10901 {"STA Metrics Reporting RCPI Hysteresis Margin Override",
10902 "ieee1905.sta_metric_policy.rcpi_hysteresis_margin_override",
10903 FT_UINT8, BASE_CUSTOM, CF_FUNC(rcpi_hysteresis_custom),
10904 0, NULL, HFILL }},
10906 { &hf_ieee1905_metrics_policy_flags,
10907 {"STA Metrics Reporting Policy Flags",
10908 "ieee1905.sta_metrics_policy_flags",
10909 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10911 { &hf_ieee1905_assoc_sta_traffic_stats_inclusion,
10912 { "Associated STA Traffic Stats Inclusion Policy",
10913 "ieee1905.sta_metrics_policy_flags.sta_traffic_stats_inclusion",
10914 FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
10916 { &hf_ieee1905_assoc_sta_link_metrics_inclusion,
10917 { "Associated STA Link Metrics Inclusion Policy",
10918 "ieee1905.sta_metrics_policy_flags.sta_link_metrics_inclusion",
10919 FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
10921 { &hf_ieee1905_assoc_wf6_status_policy_inclusion,
10922 { "Associated Wi-Fi6 STA Status Inclusion Policy",
10923 "ieee1905.sta_metrics_policy_flags.wf6_sta_status_inclusion",
10924 FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
10926 { &hf_ieee1905_reporting_policy_flags_reserved,
10927 { "Reserved", "ieee1905.sta_metrics_policy_flags.reserved",
10928 FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
10930 { &hf_ieee1905_metrics_channel_util_threshold,
10931 { "Utilization Reporting threshold", "ieee1905.sta_metric_policy.utilization_threshold",
10932 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_dbm), 0, NULL, HFILL }},
10934 { &hf_ieee1905_ap_metric_query_bssid_cnt,
10935 { "BSSID Count", "ieee1905.ap_metrics_query.bssid_cnt",
10936 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10938 { &hf_ieee1905_ap_metric_query_bssid,
10939 { "Query BSSID", "ieee1905.ap_metrics_query.bssid",
10940 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10942 { &hf_ieee1905_sta_mac_address_type,
10943 { "MAC address", "ieee1905.sta_mac_addr_type.mac_addr",
10944 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10946 { &hf_ieee1905_assoc_sta_mac_addr,
10947 { "MAC address", "ieee1905.assoc_sta_link_metrics.mac_addr",
10948 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10950 { &hf_ieee1905_assoc_sta_bssid_count,
10951 { "Number of BSSIDs for STA", "ieee1905.assoc_sta_link_metrics.bssid_count",
10952 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10954 { &hf_ieee1905_assoc_sta_link_metrics_bssid,
10955 { "STA BSSID", "ieee1905.assoc_sta_link_metrics.bssid",
10956 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
10958 { &hf_ieee1905_assoc_sta_link_metrics_time_delta,
10959 { "Measurement time delta", "ieee1905.assoc_sta_link_metrics.time_delta",
10960 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
10962 { &hf_ieee1905_assoc_sta_link_metrics_dwn_rate,
10963 { "Downlink data rate", "ieee1905.assoc_sta_link_metrics.down_rate",
10964 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
10966 { &hf_ieee1905_assoc_sta_link_metrics_up_rate,
10967 { "Uplink data rate", "ieee1905.assoc_sta_link_metrics.up_rate",
10968 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
10970 { &hf_ieee1905_assoc_sta_link_metrics_rcpi,
10971 { "Measured uplink RCPI for STA", "ieee1905.assoc_sta_link_metrics.rcpi",
10972 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10974 { &hf_ieee1905_assoc_wf6_sta_mac_addr,
10975 { "MAC address", "ieee1905.assoc_wf6_sta_status_report.mac_addr",
10976 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10978 { &hf_ieee1905_assoc_wf6_sta_tid_count,
10979 { "Number of Wi-Fi 6 TIDs",
10980 "ieee1905.assoc_wf6_sta_status_report.tid_count",
10981 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10983 { &hf_ieee1905_assoc_wf6_sta_tid,
10984 { "TID", "ieee1905.assoc_wf6_sta_status_report.tid",
10985 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
10987 { &hf_ieee1905_assoc_wf6_sta_queue_size,
10988 { "Queue Size", "ieee1905.assoc_wf6_sta_status_report.queue_size",
10989 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
10991 { &hf_ieee1905_assoc_sta_ext_link_metrics_mac_addr,
10992 { "Associated STA MAC Address",
10993 "ieee1905.assoc_sta_extended_link_metrics.mac_addr",
10994 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
10996 { &hf_ieee1905_assoc_sta_ext_link_metrics_count,
10997 { "BSSID count", "ieee1905.assoc_sta_extended_link_metrics.count",
10998 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11000 { &hf_ieee1905_assoc_sta_extended_metrics_bssid,
11001 { "BSSID", "ieee1905.assoc_sta_extended_link_metrics.bssid",
11002 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11004 { &hf_ieee1905_assoc_sta_extended_metrics_lddlr,
11005 { "Last Data Downlink Rate",
11006 "ieee1905.assoc_sta_extended_link_metrics.lddlr",
11007 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11009 { &hf_ieee1905_assoc_sta_extended_metrics_ldulr,
11010 { "Last Data Uplink Rate",
11011 "ieee1905.assoc_sta_extended_link_metrics.ldulr",
11012 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11014 { &hf_ieee1905_assoc_sta_extended_metrics_ur,
11015 { "Utilization Receive",
11016 "ieee1905.assoc_sta_extended_link_metrics.ur",
11017 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11019 { &hf_ieee1905_assoc_sta_extended_metrics_tr,
11020 { "Utilization Transmit",
11021 "ieee1905.assoc_sta_extended_link_metrics.ut",
11022 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11024 { &hf_ieee1905_unassoc_sta_link_metrics_class,
11025 { "Operating class", "ieee1905.unassoc_sta_link_metrics.operaring_class",
11026 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11028 { &hf_ieee1905_unassoc_sta_link_channel_count,
11029 { "Channel count", "ieee1905.unassoc_sta_link_metrics.channel_count",
11030 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11032 { &hf_ieee1905_unassoc_metrics_channel,
11033 { "Channel number", "ieee1905.unassoc_sta_link_metrics.channel",
11034 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11036 { &hf_ieee1905_he_max_supported_tx_streams,
11037 { "Maximum supported Tx spatial streams", "ieee1905.he_cap.max_tx_streams",
11038 FT_UINT16, BASE_HEX, VALS(vht_he_max_supported_tx_streams_vals), 0xE000, NULL, HFILL}},
11040 { &hf_ieee1905_he_max_supported_rx_streams,
11041 { "Maximum supported Rx spatial streams", "ieee1905.he_cap.max_rx_streams",
11042 FT_UINT16, BASE_HEX, VALS(vht_he_max_supported_rx_streams_vals), 0x1C00, NULL, HFILL}},
11044 { &hf_ieee1905_he_support_80plus_mhz_flag,
11045 { "HE support for 80+80 MHz", "ieee1905.ap_he.he_80plus_mhz",
11046 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported),
11047 0x0200, NULL, HFILL}},
11049 { &hf_ieee1905_he_support_160mhz_flag,
11050 { "HE support for 160 MHz", "ieee1905.ap_he.he_160_mhz",
11051 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0100, NULL, HFILL}},
11053 { &hf_ieee1905_he_su_beamformer_capable_flag,
11054 { "SU beanformer capable", "ieee1905.ap_he.su_beamformer",
11055 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0080, NULL, HFILL}},
11057 { &hf_ieee1905_he_mu_beamformer_capable_flag,
11058 { "MU beamformer capable", "ieee1905.ap_he.mu_beamformer",
11059 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0040, NULL, HFILL}},
11061 { &hf_ieee1905_ul_mu_mimo_capable_flag,
11062 { "UL MU-MIMO capable", "ieee1905.ap_he.ul_mu_mimo",
11063 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0020, NULL, HFILL}},
11065 { &hf_ieee1905_ul_mu_mimo_ofdma_capable_flag,
11066 { "UL MU-MIMO OFDMA capable", "ieee1905.ap_he.he_ul_mu_mimo_ofdma",
11067 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0010, NULL, HFILL}},
11069 { &hf_ieee1905_dl_mu_mimo_ofdma_capable_flag,
11070 { "DL MU-MIMO OFDMA capable", "ieee1905.ap_he.he_dl_mu_mimo_ofdma",
11071 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0008, NULL, HFILL}},
11073 { &hf_ieee1905_ul_ofdma_capable,
11074 { "UL OFDMA capable", "ieee1905.ap_he.he_ul_ofdma",
11075 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0004, NULL, HFILL}},
11077 { &hf_ieee1905_dl_ofdma_capable,
11078 { "DL OFDMA capable", "ieee1905.ap_he.he_dl_ofdma",
11079 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0002, NULL, HFILL}},
11081 { &hf_ieee1905_he_cap_flags,
11082 { "Capabilities", "ieee1905.ap_he.caps",
11083 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
11085 { &hf_ieee1905_steering_policy_local_disallowed_count,
11086 { "Local steering disallowed STA count", "ieee1905.steering_policy.local_disallow_sta",
11087 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11089 { &hf_ieee1905_steering_disallowed_mac_addr,
11090 { "Local steering disallowed MAC address", "ieee1905.steering_policy.local_disallow_mac",
11091 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11093 { &hf_ieee1905_btm_steering_disallowed_count,
11094 { "BTM steering disallowed count", "ieee1905.steering_policy.btm_disall_count",
11095 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11097 { &hf_ieee1905_btm_steering_disallowed_mac_addr,
11098 { "Local steering disallowed MAC address", "ieee1905.steering_policy.local_disallow_mac_addr",
11099 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11101 { &hf_ieee1905_steering_policy_radio_count,
11102 { "Steering policy radio count", "ieee1905.steering_policy.radio_count",
11103 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11105 { &hf_ieee1905_steering_policy_radio_id,
11106 { "Radio unique ID", "ieee1905.steering_policy.radio_id",
11107 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11109 { &hf_ieee1905_steering_policy_policy,
11110 { "Steering policy", "ieee1905.steering_policy.policy",
11111 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11113 { &hf_ieee1905_steering_policy_util,
11114 { "Channel utilization threshold", "ieee1905.steering_policy.utilization_threshold",
11115 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11117 { &hf_ieee1905_steering_policy_rcpi_threshold,
11118 { "RCPI steering threshold", "ieee1905.steering_policy.rcpi_threshold",
11119 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11121 { &hf_ieee1905_radio_restriction_radio_id,
11122 { "Radio unique ID", "ieee1905.radio_restriction.radio_id",
11123 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11125 { &hf_ieee1905_radio_restriction_op_class_count,
11126 { "Restricted operating classes", "ieee1905.radio_restriction.classes",
11127 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11129 { &hf_ieee1905_radio_restriction_op_class,
11130 { "Restricted operating class", "ieee1905.radio_restriction.class",
11131 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11133 { &hf_ieee1905_radio_restriction_chan_count,
11134 { "Channel count", "ieee1905.radio_restriction.channel_count",
11135 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11137 { &hf_ieee1905_radio_restriction_channel,
11138 { "Restricted channel", "ieee1905.radio_restriction.channel",
11139 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11141 { &hf_ieee1905_radio_restriction_min_separation,
11142 { "Minimum separation", "ieee1905.radio_restriction.min_sep",
11143 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11145 { &hf_ieee1905_include_estimated_spi_ac_eq_be,
11146 { "Include Estimated Service Parameters Information for AC=BE",
11147 "ieee1905.ap_metrics.include_ac_eq_be_params",
11148 FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x80, NULL, HFILL }},
11150 { &hf_ieee1905_include_estimated_spi_ac_eq_bk,
11151 { "Include Estimated Service Parameters Information for AC=BK",
11152 "ieee1905.ap_metrics.include_ac_eq_bk_params",
11153 FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x40, NULL, HFILL }},
11155 { &hf_ieee1905_include_estimated_spi_ac_eq_vo,
11156 { "Include Estimated Service Parameters Information for AC=VO",
11157 "ieee1905.ap_metrics.include_ac_eq_vo_params",
11158 FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x20, NULL, HFILL }},
11160 { &hf_ieee1905_include_estimated_spi_ac_eq_vi,
11161 { "Include Estimated Service Parameters Information for AC=VI",
11162 "ieee1905.ap_metrics.include_ac_eq_vi_params",
11163 FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x10, NULL, HFILL }},
11165 { &hf_ieee1905_ap_metrics_agent_bssid,
11166 { "Multi-AP agent BSSID", "ieee1905.ap_metrics.bssid",
11167 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11169 { &hf_ieee1905_ap_metrics_channel_utilization,
11170 { "Channel utilization", "ieee1905.ap_metrics.channel_util",
11171 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11173 { &hf_ieee1905_ap_metrics_sta_count,
11174 { "BSS STA count", "ieee1905.ap_metrics.sta_count",
11175 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
11177 { &hf_ieee1905_ap_metrics_flags,
11178 { "Estimated Service Parameters Flags", "ieee1905.ap_metrics.flags",
11179 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11181 { &hf_ieee1905_ap_metrics_service_params_be,
11182 { "Estimated service parameters AC=BE", "ieee1905.ap_metrics.est_param_be",
11183 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11185 { &hf_ieee1905_ap_metrics_service_params_bk,
11186 { "Estimated service parameters AC=BK", "ieee1905.ap_metrics.est_param_bk",
11187 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11189 { &hf_ieee1905_ap_metrics_service_params_vo,
11190 { "Estimated service parameters AC=VO", "ieee1905.ap_metrics.est_param_vo",
11191 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11193 { &hf_ieee1905_ap_metrics_service_params_vi,
11194 { "Estimated service parameters AC=VI", "ieee1905.ap_metrics.est_param_vi",
11195 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11197 { &hf_ieee1905_unassoc_sta_link_metric_op_class,
11198 { "Operating class", "ieee1905.unassoc_sta_link_metrics.op_class",
11199 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11201 { &hf_ieee1905_unassoc_sta_link_metric_sta_count,
11202 { "STA count", "ieee1905.unassoc_sta_link_metrics.sta_count",
11203 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11205 { &hf_ieee1905_unassoc_link_metric_mac_addr,
11206 { "STA MAC address", "ieee1905.unassoc_sta_link_metrics.mac_addr",
11207 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11209 { &hf_ieee1905_unassoc_link_metric_channel,
11210 { "Channel number", "ieee1905.unassoc_sta_link_metrics.channel",
11211 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11213 { &hf_ieee1905_unassoc_link_metric_delta,
11214 { "Time delta (ms)", "ieee1905.unassoc_sta_link_metrics.delta",
11215 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11217 { &hf_ieee1905_beacon_metrics_query_mac_addr,
11218 { "Associated STA MAC address", "ieee1905.beacon_metrics.assoc_sta_mac",
11219 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11221 { &hf_ieee1905_unassoc_link_metric_uplink_rcpi,
11222 { "Uplink RCPI", "ieee1905.unassoc_sta_link_metrics.rcpi",
11223 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11225 { &hf_ieee1905_beacon_metrics_query_op_class,
11226 { "Operating class", "ieee1905.beacon_metrics.op_class",
11227 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11229 { &hf_ieee1905_beacon_metrics_query_channel,
11230 { "Channel number", "ieee1905.beacon_metrics.channel_number",
11231 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11233 { &hf_ieee1905_beacon_metrics_query_bssid,
11234 { "BSSID", "ieee1905.beacon_metrics.bssid",
11235 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11237 { &hf_ieee1905_beacon_metrics_query_detail,
11238 { "Reporting detail", "ieee1905.beacon_metrics.detail",
11239 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11241 { &hf_ieee1905_beacon_metrics_query_ssid_len,
11242 { "SSID length", "ieee1905.beacon_metrics.ssid_len",
11243 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11245 { &hf_ieee1905_beacon_metrics_query_ssid,
11246 { "SSID", "ieee1905.beacon_metrics.ssid",
11247 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
11249 { &hf_ieee1905_beacon_metrics_channel_count,
11250 { "Channel reports number", "ieee1905.beacon_metrics.report_number",
11251 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11253 { &hf_ieee1905_beacon_metrics_report_len,
11254 { "Channel report length", "ieee1905.beacon_metrics.report_length",
11255 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11257 { &hf_ieee1905_beacon_metrics_report_op_class,
11258 { "Channel report operating class", "ieee1905.beacon_metrics.op_class",
11259 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11261 { &hf_ieee1905_beacon_metrics_report_channel_id,
11262 { "Channel number", "ieee1905.beacon_metrics.channel_number",
11263 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11265 { &hf_ieee1905_measurement_report,
11266 { "Measurement Report", "ieee1905.measurement_report",
11267 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11269 { &hf_ieee1905_beacon_metrics_response_mac_addr,
11270 { "STA MAC address", "ieee1905.beacon_metrics.mac_addr",
11271 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11273 { &hf_ieee1905_beacon_metrics_response_reserved,
11274 { "Reserved", "ieee1905.beacon_metrics.reserved",
11275 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11277 { &hf_ieee1905_beacon_metrics_response_meas_num,
11278 { "Number of Measurements", "ieee1905.beacon_metrics.number_of_measurements",
11279 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11281 { &hf_ieee1905_assoc_sta_traffic_stats_mac_addr,
11282 { "Associated STA MAC address", "ieee1905.assoc_sta_traffic_stats.mac_addr",
11283 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11285 { &hf_ieee1905_assoc_sta_traffic_stats_bytes_sent,
11286 { "Bytes Sent", "ieee1905.assoc_sta_traffic_stats.bytes_sent",
11287 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11289 { &hf_ieee1905_assoc_sta_traffic_stats_bytes_rcvd,
11290 { "Bytes Received", "ieee1905.assoc_sta_traffic_stats.bytes_rcvd",
11291 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11293 { &hf_ieee1905_assoc_sta_traffic_stats_packets_sent,
11294 { "Packets Sent", "ieee1905.assoc_sta_traffic_stats.packets_sent",
11295 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11297 { &hf_ieee1905_assoc_sta_traffic_stats_packets_rcvd,
11298 { "Packets Received", "ieee1905.assoc_sta_traffic_stats.packets_rcvd",
11299 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11301 { &hf_ieee1905_assoc_sta_traffic_stats_tx_pkt_errs,
11302 { "Tx Packet Errors", "ieee1905.assoc_sta_traffic_stats.tx_pkt_errs",
11303 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11305 { &hf_ieee1905_assoc_sta_traffic_stats_rx_pkt_errs,
11306 { "Rx Packet Errors", "ieee1905.assoc_sta_traffic_stats.rx_packet_errs",
11307 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11309 { &hf_ieee1905_assoc_sta_traffic_stats_retrans_count,
11310 { "Retransmission Count", "ieee1905.assoc_sta_traffic_stats.retrans_count",
11311 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11313 { &hf_ieee1905_error_code_value,
11314 { "Reason code", "ieee1905.error_code.reason",
11315 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11317 { &hf_ieee1905_error_code_mac_addr,
11318 { "MAC address of error-code STA", "ieee1905.error_code.mac_addr",
11319 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11321 { &hf_ieee1905_channel_scan_rep_policy,
11322 { "Reporting Policy", "ieee1905.channel_scan_reporting_policy",
11323 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11325 { &hf_ieee1905_channel_scan_pol_report,
11326 { "Report Independent Channel Scans",
11327 "ieee1905.channel_scan_reporting_policy.report_independent_channel_scans",
11328 FT_BOOLEAN, 8, TFS(&report_independent_scans_tfs), 0x01, NULL, HFILL }},
11330 { &hf_ieee1905_channel_scan_pol_reserved,
11331 { "Reserved", "ieee1905.channel_scan_reporting_policy.reserved",
11332 FT_UINT8, BASE_HEX, NULL, 0xFE, NULL, HFILL }},
11334 { &hf_ieee1905_channel_scan_capabilities_radio_num,
11335 { "Number of radios", "ieee1905.channel_scan_capabilities.num_radios",
11336 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11338 { &hf_ieee1905_channel_scan_capa_radio_id,
11339 { "Radio Unique ID", "ieee1905.channel_scan_capabilities.radio_id",
11340 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
11342 { &hf_ieee1905_channel_scan_capa_flags,
11343 { "Flags", "ieee1905.channel_scan_capabilities.flags",
11344 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
11346 { &hf_ieee1905_channel_scan_capa_flags_on_boot_only,
11347 { "On boot only", "ieee1905.channel_scan_capabilities.flags.on_boot_only",
11348 FT_BOOLEAN, 8, TFS(&channel_scan_capa_flags_on_boot_only_tfs),
11349 0x80, NULL, HFILL }},
11351 { &hf_ieee1905_channel_scan_capa_flags_scan_impact,
11352 { "Scan Impact", "ieee1905.channel_scan_capabilities.flags.scan_impact",
11353 FT_UINT8, BASE_HEX, VALS(channel_scan_capa_flags_impact_vals), 0x60,
11354 NULL, HFILL }},
11356 { &hf_ieee1905_channel_scan_capa_flags_reserved,
11357 { "Reserved", "ieee1905.channel_scan_capabilities.flags.reserved",
11358 FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
11360 { &hf_ieee1905_channel_scan_capa_min_scan_interval,
11361 { "Minimum Scan Interval", "ieee1905.channel_scan_capabilities.min_scan_interval",
11362 FT_UINT32, BASE_DEC | BASE_UNIT_STRING, UNS(&units_seconds),
11363 0, NULL, HFILL }},
11365 { &hf_ieee1905_channel_scan_capa_class_num,
11366 { "Number of Operating Classes",
11367 "ieee1905.channel_scan_capabilities.num_operating_classes",
11368 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11370 { &hf_ieee1905_channel_scan_capa_oper_class,
11371 { "Operating Class", "ieee1905.channel_scan_capabilities.operating_class",
11372 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11374 { &hf_ieee1905_channel_scan_capa_oper_class_chan_cnt,
11375 { "Number of Channels", "ieee1905.channel_scan_capabilities.operating_class.num_channels",
11376 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11378 { &hf_ieee1905_channel_scan_capa_channel,
11379 { "Channel", "ieee1905.channel_scan_capabilities.operating_class.channel",
11380 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11382 { &hf_ieee1905_channel_scan_request_flags,
11383 { "Flags", "ieee1905.channel_scan_request.flags",
11384 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11386 { &hf_ieee1905_channel_scan_request_flags_fresh_scan,
11387 { "Perform Fresh Scan", "ieee1905.channel_scan_request.flags.perform_fresh_scan",
11388 FT_BOOLEAN, 8, TFS(&perform_fresh_scan_tfs), 0x80, NULL, HFILL }},
11390 { &hf_ieee1905_channel_scan_request_flags_reserved,
11391 { "Reserved", "ieee1905.channel_scan_request.flags.reserved",
11392 FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
11394 { &hf_ieee1905_channel_scan_request_radio_num,
11395 { "Number of Radios", "ieee1905.channel_scan_request.number_radios",
11396 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11398 { &hf_ieee1905_channel_scan_request_radio_id,
11399 { "Radio Unique ID", "ieee1905.channel_scan_request.radio_id",
11400 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11402 { &hf_ieee1905_channel_scan_request_class_num,
11403 { "Number of Operating Classes",
11404 "ieee1905.channel_scan_request.num_operating_classes",
11405 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11407 { &hf_ieee1905_channel_scan_request_oper_class,
11408 { "Operating Class", "ieee1905.channel_scan_request.operating_class",
11409 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11411 { &hf_ieee1905_channel_scan_request_oper_class_chan_cnt,
11412 { "Number of Channels", "ieee1905.channel_scan_request.operating_class.num_channels",
11413 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11415 { &hf_ieee1905_channel_scan_request_channel,
11416 { "Channel", "ieee1905.channel_scan_request.channel",
11417 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11419 { &hf_ieee1905_channel_scan_result_radio_id,
11420 { "Radio Unique ID", "ieee1905.channel_scan_result.radio_id",
11421 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
11423 { &hf_ieee1905_channel_scan_result_oper_class,
11424 { "Operating Class", "ieee1905.channel_scan_result.operating_class",
11425 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11427 { &hf_ieee1905_channel_scan_result_channel,
11428 { "Channel", "ieee1905.channel_scan_result.channel",
11429 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11431 { &hf_ieee1905_channel_scan_result_status,
11432 { "Status", "ieee1905.channel_scan_result.status",
11433 FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(channel_scan_result_status_rvals),
11434 0, NULL, HFILL }},
11436 { &hf_ieee1905_channel_scan_result_timestamp_len,
11437 { "Timestamp Length", "ieee1905.channel_scan_result.timestamp_len",
11438 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11440 { &hf_ieee1905_channel_scan_result_timestamp_string,
11441 { "Timestamp", "ieee1905.channel_scan_result.timestamp",
11442 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
11444 { &hf_ieee1905_channel_scan_result_utilization,
11445 { "Utilization", "ieee1905.channel_scan_result.utilization",
11446 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11448 { &hf_ieee1905_channel_scan_result_noise,
11449 { "Noise", "ieee1905.channel_scan_result.noise",
11450 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11452 { &hf_ieee1905_radio_metrics_noise,
11453 { "Noise", "ieee1905.radio_metrics.noise",
11454 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11456 { &hf_ieee1905_radio_metrics_transmit,
11457 { "Transmit", "ieee1905.radio_metrics.transmit",
11458 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11460 { &hf_ieee1905_radio_metrics_receive_self,
11461 { "ReceiveSelf", "ieee1905.radio_metrics.receive_self",
11462 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11464 { &hf_ieee1905_radio_metrics_receive_other,
11465 { "ReceiveOther", "ieee1905.radio_metrics.receive_other",
11466 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11468 { &hf_ieee1905_ap_extended_metrics_bssid,
11469 { "BSSID", "ieee1905.ap_extended_metrics.bssid",
11470 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11472 { &hf_ieee1905_ap_extended_metrics_unicast_sent,
11473 { "UnicastBytesSent",
11474 "ieee1905.ap_extended_metrics.unicast_bytes_sent",
11475 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11477 { &hf_ieee1905_ap_extended_metrics_unicast_rcvd,
11478 { "UnicastBytesReceived",
11479 "ieee1905.ap_extended_metrics.unicast_bytes_received",
11480 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11482 { &hf_ieee1905_ap_extended_metrics_multicast_sent,
11483 { "MulticastBytesSent",
11484 "ieee1905.ap_extended_metrics.multicast_bytes_sent",
11485 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11487 { &hf_ieee1905_ap_extended_metrics_multicast_rcvd,
11488 { "MulticastBytesReceived",
11489 "ieee1905.ap_extended_metrics.multicast_bytes_received",
11490 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11492 { &hf_ieee1905_ap_extended_metrics_bcast_sent,
11493 { "BroadcastBytesSent",
11494 "ieee1905.ap_extended_metrics.Broadcast_bytes_sent",
11495 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11497 { &hf_ieee1905_ap_extended_metrics_bcast_rcvd,
11498 { "BroadcastBytesReceived",
11499 "ieee1905.ap_extended_metrics.broadcast_bytes_received",
11500 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11502 { &hf_ieee1905_channel_scan_result_neigh_num,
11503 { "Number of Neighbors", "ieee1905.channel_scan_result.number_of_neighbors",
11504 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
11506 { &hf_ieee1905_channel_scan_result_bssid,
11507 { "BSSID", "ieee1905.channel_scan_result.bssid",
11508 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11510 { &hf_ieee1905_channel_scan_result_ssid_len,
11511 { "SSID Length", "ieee1905.channel_scan_result.ssid_len",
11512 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11514 { &hf_ieee1905_channel_scan_result_ssid,
11515 { "SSID", "ieee1905.channel_scan_result.ssid",
11516 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
11518 { &hf_ieee1905_channel_scan_result_sig_level,
11519 { "Signal Strength", "ieee1905.channel_scan_result.signal_strength",
11520 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11522 { &hf_ieee1905_channel_scan_result_bw_len,
11523 { "Channel BW Length", "ieee1905.channel_scan_result.channel_bw_len",
11524 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11526 { &hf_ieee1905_channel_scan_result_bw,
11527 { "Channel BW", "ieee1905.channel_scan_result.channel_bw",
11528 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
11530 { &hf_ieee1905_channel_scan_result_neigh_flags,
11531 { "Neighbor Flags", "ieee1905.channel_scan_result.neighbor_flags",
11532 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11534 { &hf_ieee1905_channel_scan_result_load_element_present,
11535 { "Utilization Present", "ieee1905.channel_scan_result.neighbor_flags.load_element_present",
11536 FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
11538 { &hf_ieee1905_channel_scan_result_util,
11539 { "Channel Utilization", "ieee1905.channel_scan_result.channel_util",
11540 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11542 { &hf_ieee1905_channel_scan_result_sta_count,
11543 { "Station Count", "ieee1905.channel_scan_result.station_count",
11544 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
11546 { &hf_ieee1905_channel_scan_result_neigh_reserved,
11547 { "Reserved", "ieee1905.channel_scan_result.neighbor_flags.reserved",
11548 FT_UINT8, BASE_DEC, NULL, 0x7F, NULL, HFILL }},
11550 { &hf_ieee1905_channel_scan_result_scan_duration,
11551 { "Scan Duration", "ieee1905.channel_scan_result.scan_duration",
11552 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
11554 { &hf_ieee1905_channel_scan_result_flags,
11555 { "Flags", "ieee1905.channel_scan_result.flags",
11556 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
11558 { &hf_ieee1905_channel_scan_result_scan_type,
11559 { "Scan Type", "ieee1905.channel_scan_result.flags.scan_type",
11560 FT_BOOLEAN, 8, TFS(&channel_scan_result_type_tfs), 0x80, NULL, HFILL }},
11562 { &hf_ieee1905_channel_scan_result_scan_flags_reserved,
11563 { "Reserved", "ieee1905.channel_scan_result.flags.reserved",
11564 FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
11566 { &hf_ieee1905_timestamp_length,
11567 { "Timestamp Length", "ieee1905.timestamp.length",
11568 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11570 { &hf_ieee1905_timestamp_string,
11571 { "Timestamp", "ieee1905.timestamp.timestamp",
11572 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
11574 { &hf_ieee1905_1905_layer_sec_capa_onboarding,
11575 { "Onboarding Protocols Supported", "ieee1905.1905_layer_security_capability.onboarding_protocols_supported",
11576 FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(onboarding_protocol_supported_rvals),
11577 0, NULL, HFILL }},
11579 { &hf_ieee1905_1905_layer_sec_capa_mic_sup,
11580 { "Message Integrity Algorithms Supported",
11581 "ieee1905.1905_layer_security_capability.message_integrity_algorithms_supported",
11582 FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(message_integrity_algorithms_sup_rvals),
11583 0, NULL, HFILL }},
11585 { &hf_ieee1905_1905_layer_sec_capa_enc_alg_sup,
11586 { "Message Encryption Algorithms Supported",
11587 "ieee1905.1905_layer_security_capability.message_encryption_algorithms_supported",
11588 FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(message_encryption_algorithms_sup_rvals),
11589 0, NULL, HFILL }},
11591 { &hf_ieee1905_ap_wf6_capa_radio_id,
11592 { "Radio ID", "ieee1905.ap_wifi_6_capabilities.radio_id",
11593 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL}},
11595 { &hf_ieee1905_ap_wf6_role_count,
11596 { "Role Count", "ieee1905.ap_wifi_6_capabilities.role_count",
11597 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL}},
11599 { &hf_ieee1905_ap_wf6_agent_role_flags,
11600 { "Role Flags", "ieee1905.ap_wifi_6_capabilities.role_flags",
11601 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL}},
11603 { &hf_ieee1905_ap_wf6_capa_agents_role,
11604 { "Agent's Role", "ieee1905.ap_wifi_6_capabilities.agents_role",
11605 FT_UINT8, BASE_HEX, VALS(ap_wf6_agent_role_vals),
11606 0xC0, NULL, HFILL}},
11608 { &hf_ieee1905_ap_wf6_capa_he_160_support,
11609 { "Support for HE 160 MHz",
11610 "ieee1905.ap_wifi_6_capabilities.support_for_he_160",
11611 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11612 0x20, NULL, HFILL}},
11614 { &hf_ieee1905_ap_wf6_capa_he_80p80_support,
11615 { "Support for HE 80+80 MHz",
11616 "ieee1905.ap_wifi_6_capabilities.support_for_he_80_p_80",
11617 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11618 0x10, NULL, HFILL}},
11620 { &hf_ieee1905_ap_wf6_capa_reserved,
11621 { "Reserved", "ieee1905.ap_wifi_6_capabilities.reserved",
11622 FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL}},
11624 { &hf_ieee1905_ap_wf6_he_supported_flags,
11625 { "HE Support flags",
11626 "ieee1905.ap_wifi_6_capabilities.he_support_flags",
11627 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL}},
11629 { &hf_ieee1905_ap_wf6_su_beamformer,
11630 { "SU Beamformer", "ieee1905.ap_wifi_6_capabilities.su_beamformer",
11631 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11632 0x80, NULL, HFILL}},
11634 { &hf_ieee1905_ap_wf6_su_beamformee,
11635 { "SU Beamformee", "ieee1905.ap_wifi_6_capabilities.su_beamformee",
11636 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11637 0x40, NULL, HFILL}},
11639 { &hf_ieee1905_ap_wf6_mu_beamformer_status,
11640 { "MU Beamformer Status",
11641 "ieee1905.ap_wifi_6_capabilities.mu_beamformer_status",
11642 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11643 0x20, NULL, HFILL}},
11645 { &hf_ieee1905_ap_wf6_beamformee_sts_le_80mhz,
11646 { "Beamformee STS <= 80MHz",
11647 "ieee1905.ap_wifi_6_capabilities.beamformee_sts_le_80mhz",
11648 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11649 0x10, NULL, HFILL}},
11651 { &hf_ieee1905_ap_wf6_beamformee_sts_gt_80mhz,
11652 { "Beamformee STS > 80MHz",
11653 "ieee1905.ap_wifi_6_capabilities.beamformee_sts_gt_80mhz",
11654 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11655 0x08, NULL, HFILL}},
11657 { &hf_ieee1905_ap_wf6_ul_mu_mimo,
11658 { "UL MU MIMO", "ieee1905.ap_wifi_6_capabilities.us_mu_mimo",
11659 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11660 0x04, NULL, HFILL}},
11662 { &hf_ieee1905_ap_wf6_ul_ofdma,
11663 { "UL OFDMA", "ieee1905.ap_wifi_6_capabilities.ul_ofdma",
11664 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11665 0x02, NULL, HFILL}},
11667 { &hf_ieee1905_ap_wf6_dl_ofdma,
11668 { "DL OFDMA", "ieee1905.ap_wifi_6_capabilities.dl_ofdma",
11669 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11670 0x01, NULL, HFILL}},
11672 { &hf_ieee1905_ap_wf6_mimo_max_flags,
11673 { "MIMO Max Users flags",
11674 "ieee1905.ap_wifi_6_capabilities.mimo_max_users_flags",
11675 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL}},
11677 { &hf_ieee1905_ap_wf6_max_ap_dl_mu_mimo_tx,
11678 { "Max AP DL MU-MIMO TX",
11679 "ieee1905.ap_wifi_6_capabilities.max_ap_dl_mu_mimo_tx",
11680 FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL}},
11682 { &hf_ieee1905_ap_wf6_max_ap_ul_mu_mimi_rx,
11683 { "Max AP UL MU-MIMO RX",
11684 "ieee1905.ap_wifi_6_capabilities.max_ap_ul_mu_mimo_rx",
11685 FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL}},
11687 { &hf_ieee1905_ap_wf6_dl_ofdma_max_tx,
11688 { "Max users per DL OFDMA TX in AP role",
11689 "ieee1905.ap_wifi_6_capabilities.ap_max_users_per_dl_ofdma_tx",
11690 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL}},
11692 { &hf_ieee1905_ap_wf6_ul_ofdma_max_rx,
11693 { "Max users per UL OFDMA RX in AP role",
11694 "ieee1905.ap_wifi_6_capabilities.ap_max_users_per_ul_ofdma_rx",
11695 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL}},
11697 { &hf_ieee1905_ap_wf6_gen_flags,
11698 { "General flags", "ieee1905.ap_wifi_6_capabilities.general_flags",
11699 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL}},
11701 { &hf_ieee1905_ap_wf6_gen_rts,
11702 { "RTS", "ieee1905.ap_wifi_6_capabilities.general_flags.rts",
11703 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11704 0x80, NULL, HFILL}},
11706 { &hf_ieee1905_ap_wf6_gen_mu_rts,
11707 { "MU RTS", "ieee1905.ap_wifi_6_capabilities.general_flags.mu_rts",
11708 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11709 0x40, NULL, HFILL}},
11711 { &hf_ieee1905_ap_wf6_gen_multi_bssid,
11712 { "Multi-BSSID",
11713 "ieee1905.ap_wifi_6_capabilities.general_flags.multi_bssid",
11714 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11715 0x20, NULL, HFILL}},
11717 { &hf_ieee1905_ap_wf6_gen_mu_edca,
11718 { "MU EDCA", "ieee1905.ap_wifi_6_capabilities.general_flags.mu_edca",
11719 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11720 0x10, NULL, HFILL}},
11722 { &hf_ieee1905_ap_wf6_gen_twt_requester,
11723 { "TWT Requester",
11724 "ieee1905.ap_wifi_6_capabilities.general_flags.twt_requester",
11725 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11726 0x08, NULL, HFILL}},
11728 { &hf_ieee1905_ap_wf6_gen_twt_responder,
11729 { "TWT Responder",
11730 "ieee1905.ap_wifi_6_capabilities.general_flags.twt_responder",
11731 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
11732 0x04, NULL, HFILL}},
11734 { &hf_ieee1905_ap_wf6_gen_reserved,
11735 { "Reserved",
11736 "ieee1905.ap_wifi_6_capabilities.general_flags.reserved",
11737 FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL }},
11739 { &hf_ieee1905_agent_list_bytes,
11740 { "Agent List", "ieee1905.agent_list.agent_list_data",
11741 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
11743 { &hf_ieee1905_mic_group_temporal_key_id,
11744 { "Group Temporal Key ID", "ieee1905.mic.group_temporal_key_id",
11745 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11747 { &hf_ieee1905_1905_gtk_key_id,
11748 { "Key ID", "ieee1905.mic.group_temporal_key_id.key_id",
11749 FT_UINT8, BASE_DEC, NULL, 0xC0, NULL, HFILL }},
11751 { &hf_ieee1905_mic_version,
11752 { "MIC Version", "ieee1905.mic.group_temporal_key_id.mic_version",
11753 FT_UINT8, BASE_HEX, VALS(mic_version_vals), 0x30, NULL, HFILL }},
11755 { &hf_ieee1905_mic_reserved,
11756 { "Reserved", "ieee1905.mic.group_temporal_key_id.reserved",
11757 FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL }},
11759 { &hf_ieee1905_mic_integrity_transmission_counter,
11760 { "Integrity Transmission Counter",
11761 "ieee1905.mic.integrity_transmission_counter",
11762 FT_UINT48, BASE_DEC, NULL, 0, NULL, HFILL }},
11764 { &hf_ieee1905_mic_source_la_mac_id,
11765 {"Source LA MAC ID", "ieee1905.mic.source_la_max_id",
11766 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11768 { &hf_ieee1905_mic_length,
11769 { "MIC Length", "ieee1905.mic.mic_length",
11770 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
11772 { &hf_ieee1905_mic_bytes,
11773 { "MIC", "ieee1905.mic.mic_bytes",
11774 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11776 { &hf_ieee1905_encrypted_enc_transmission_count,
11777 { "Encryption Transmission Counter",
11778 "ieee1905.encrypted.encryption_transmission_counter",
11779 FT_UINT48, BASE_DEC, NULL, 0, NULL, HFILL }},
11781 { &hf_ieee1905_encrypted_dest_al_mac_addr,
11782 { "Destination 1905 AL MAC Address",
11783 "ieee1905.encrypted.destination_1905_al_mac",
11784 FT_ETHER, ENC_NA, NULL, 0, NULL, HFILL }},
11786 { &hf_ieee1905_encrypted_source_la_mac_id,
11787 { "Source AL MAC", "ieee1905.encrypted.source_al_mac",
11788 FT_ETHER, ENC_NA, NULL, 0, NULL, HFILL }},
11790 { &hf_ieee1905_encrypted_enc_output_field_len,
11791 { "AES-SIV Encrypted Output Length",
11792 "ieee1905.encrypted.aes_siv_encrypted_output_length",
11793 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
11795 { &hf_ieee1905_encrypted_enc_output_field,
11796 { "AES-SIV Encryption Output",
11797 "ieee1905.encrypted.aes_siv_encryption_output",
11798 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
11800 { &hf_ieee1905_cac_request_radio_count,
11801 { "Number of Radios", "ieee1905.cac_request.number_of_radios",
11802 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11804 { &hf_ieee1905_cac_request_radio_id,
11805 { "Radio ID", "ieee1905.cac_request.radio_id",
11806 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11808 { &hf_ieee1905_cac_request_op_class,
11809 { "Operating class", "ieee1905.cac_request.operating_class",
11810 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11812 { &hf_ieee1905_cac_request_channel,
11813 { "Channel", "ieee1905.cac_request.channel",
11814 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11816 { &hf_ieee1905_cac_request_flags,
11817 { "Request flags", "ieee1905.cac_request.flags",
11818 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11820 { &hf_ieee1905_cac_request_method,
11821 { "CAC Method", "ieee1905.cac_request.flags.cac_method",
11822 FT_UINT8, BASE_DEC, VALS(cac_request_method_vals),
11823 0xE0, NULL, HFILL }},
11825 { &hf_ieee1905_cac_request_completion_action,
11826 { "Successful Completion Action",
11827 "ieee1905.cac_request.flags.successful_completion_action",
11828 FT_UINT8, BASE_DEC | BASE_RANGE_STRING,
11829 RVALS(cac_completion_action_vals), 0x18, NULL, HFILL }},
11831 { &hf_ieee1905_cac_request_completion_unsuccess,
11832 { "Unsuccessful Completion Action",
11833 "ieee1905.cac_request.flags.unsuccessful_completion_action",
11834 FT_UINT8, BASE_DEC | BASE_RANGE_STRING,
11835 RVALS(cac_completion_action_vals), 0x06, NULL, HFILL }},
11837 { &hf_ieee1905_cac_request_reserved,
11838 { "Reserved", "ieee1905.cac_request.flags.reserved",
11839 FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
11841 { &hf_ieee1905_cac_termination_radio_count,
11842 { "Number of Radios", "ieee1905.cac_termination.number_of_radios",
11843 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11845 { &hf_ieee1905_cac_terminate_radio_id,
11846 { "Radio ID", "ieee1905.cac_termination.radio_id",
11847 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
11849 { &hf_ieee1905_cac_terminate_op_class,
11850 { "Operating class", "ieee1905.cac_termination.operating_class",
11851 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11853 { &hf_ieee1905_cac_terminate_channel,
11854 { "Channel", "ieee1905.cac_termination.channel",
11855 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11857 { &hf_ieee1905_cac_completion_rep_radio_count,
11858 { "Number of radios",
11859 "ieee1905.cac_completion_report.number_of_radios",
11860 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11862 { &hf_ieee1905_cac_completion_radio_id,
11863 { "Radio ID", "ieee1905.cac_completion_report.radio_id",
11864 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
11866 { &hf_ieee1905_cac_completion_op_class,
11867 { "Operating class", "ieee1905.cac_completion_report.operating_class",
11868 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11870 { &hf_ieee1905_cac_completion_channel,
11871 { "Channel", "ieee1905.cac_completion_report.channel",
11872 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11874 { &hf_ieee1905_cac_completion_status,
11875 { "CAC Completion Status",
11876 "ieee1905.cac_completion_report.cac_completion_status",
11877 FT_UINT8, BASE_HEX | BASE_RANGE_STRING,
11878 RVALS(cac_completion_status_rvals), 0, NULL, HFILL }},
11880 { &hf_ieee1905_cac_completion_radar_count,
11881 { "Radar detected count",
11882 "ieee1905.cac_completion_report.radar_detected_count",
11883 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
11885 { &hf_ieee1905_cac_comp_radar_op_class,
11886 { "Operating class",
11887 "ieee1905.cac_completion_report.radar.operating_class",
11888 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11890 { &hf_ieee1905_cac_comp_radar_channel,
11891 { "Channel", "ieee1905.cac_completion_report.radar.channel",
11892 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11894 { &hf_ieee1905_cac_status_rpt_active_chan,
11895 { "Available Channel Count",
11896 "ieee1905.cac_status_report.available_channel_count",
11897 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11899 { &hf_ieee1905_cac_status_rpt_avail_op_class,
11900 { "Operating Class",
11901 "ieee1905.cac_status_report.available_channel.operating_class",
11902 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11904 { &hf_ieee1905_cac_status_rpt_avail_channel,
11905 { "Channel",
11906 "ieee1905.cac_status_report.available_channel.channel",
11907 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11909 { &hf_ieee1905_cac_status_rpt_avail_minutes,
11910 { "Minutes since CAC completed",
11911 "ieee1905.cac_status_report.available_channel.minutes_since",
11912 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11914 { &hf_ieee1905_cac_status_rpt_non_occ_cnt,
11915 { "Non-occupied Channel Count",
11916 "ieee1905.cac_status_report.non_occupied_channel_count",
11917 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11919 { &hf_ieee1905_cac_status_rpt_non_occ_op_class,
11920 { "Operating Class",
11921 "ieee1905.cac_status_report.non_occupied_channel.operating_class",
11922 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11924 { &hf_ieee1905_cac_status_rpt_non_occ_channel,
11925 { "Channel",
11926 "ieee1905.cac_status_report.non_occupied_channel.channel",
11927 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11929 { &hf_ieee1905_cac_status_rpt_non_occ_seconds,
11930 { "Seconds remaining",
11931 "ieee1905.cac_status_report.non_occupied_channel.second_remaining",
11932 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11934 { &hf_ieee1905_cac_status_rpt_active_cac_cnt,
11935 { "Active CAC Channel Count",
11936 "ieee1905.cac_status_report.active_cac_channel_count",
11937 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11939 { &hf_ieee1905_cac_status_rpt_active_cac_op_class,
11940 { "Operating Class",
11941 "ieee1905.cac_status_report.active_cac.operating_class",
11942 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11944 { &hf_ieee1905_cac_status_rpt_active_cac_channel,
11945 { "Channel",
11946 "ieee1905.cac_status_report.active_cac.channel",
11947 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11949 { &hf_ieee1905_cac_status_rpt_active_cac_seconds,
11950 { "Seconds remaining",
11951 "ieee1905.cac_status_report.active_cac.seconds_remaining",
11952 FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11954 { &hf_ieee1905_cac_capa_country_code,
11955 { "Country Code", "ieee1905.cac_capabilities.country_code",
11956 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
11958 { &hf_ieee1905_cac_capa_radio_cnt,
11959 { "Number of radios", "ieee1905.cac_capabilities.number_of_radios",
11960 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11962 { &hf_ieee1905_cac_capabilities_radio_id,
11963 { "Radio ID", "ieee1905.cac_capabilities.radio_id",
11964 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
11966 { &hf_ieee1905_cac_capabilities_types_num,
11967 { "Number of types", "ieee1905.cac_capabilities.number_of_types",
11968 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11970 { &hf_ieee1905_cac_capabilities_cac_mode,
11971 { "CAC mode supported",
11972 "ieee1905.cac_capabilities.cac_mode_supported",
11973 FT_UINT8, BASE_HEX | BASE_RANGE_STRING,
11974 RVALS(cac_mode_supported_rvals), 0, NULL, HFILL }},
11976 { &hf_ieee1905_cac_capabilities_cac_seconds,
11977 { "Seconds required to complete CAC",
11978 "ieee1905.cac_capabilities.seconds_required_to_complete_cac",
11979 FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11981 { &hf_ieee1905_cac_capabilities_op_class_num,
11982 { "Operating Class number",
11983 "ieee1905.cac_capabilities.operating_class_number",
11984 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11986 { &hf_ieee1905_cac_capabilities_op_class,
11987 { "Operating Class", "ieee1905.cac_capabilities.operating_class",
11988 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11990 { &hf_ieee1905_cac_capabilities_channel_cnt,
11991 { "Number of channels",
11992 "ieee1905.cac_capabilities.number_of_channels",
11993 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11995 { &hf_ieee1905_cac_capabillity_channel,
11996 { "Channel", "ieee1905.cac_capabilities.channel",
11997 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
11999 { &hf_ieee1905_multi_ap_version,
12000 { "Multi-AP Profile", "ieee1905.multi_ap_version",
12001 FT_UINT8, BASE_DEC | BASE_RANGE_STRING,
12002 RVALS(multi_ap_version_rvals), 0x0, NULL, HFILL }},
12004 { &hf_ieee1905_max_total_serv_prio_rules,
12005 { "Max Total Number Service Prioritization Rules",
12006 "ieee1905.r2_ap_capabilities.max_total_service_prio_rules",
12007 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12009 { &hf_ieee1905_r2_ap_capa_reserved,
12010 { "Reserved", "ieee1905.r2_ap_capabilities.reserved",
12011 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12013 { &hf_ieee1905_r2_ap_capa_flags,
12014 { "Flags", "ieee1905.r2_ap_capabilities.flags",
12015 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12017 { &hf_ieee1905_byte_counter_units,
12018 { "Byte Counter Units", "ieee1905.r2_ap_capabilities.byte_counter_units",
12019 FT_UINT8, BASE_DEC, VALS(byte_counter_units_vals), 0xC0, NULL, HFILL}},
12021 { &hf_ieee1905_ctag_service_prio_flag,
12022 { "802.1Q C-TAG Service Prioritization", "ieee1905.r2_ap_capabilities.ctag_service_prioritization",
12023 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20, NULL, HFILL }},
12025 { &hf_ieee1905_dpp_onboarding_flag,
12026 { "DPP Onboarding procedure", "ieee1905.r2_ap_capabilities.dpp_onboarding" ,
12027 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10, NULL, HFILL }},
12029 { &hf_ieee1905_traffic_separation_flag,
12030 { "802.1Q C-TAG Traffic Separation", "ieee1905.r2_ap_capabilities.traffic_separation" ,
12031 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL }},
12033 { &hf_ieee1905_r2_ap_capa_flags_reserved,
12034 { "Reserved", "ieee1905.r2_ap_capabilities.reserved",
12035 FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL }},
12037 { &hf_ieee1905_max_vid_count,
12038 { "Max Total Number of VIDs", "ieee1905.r2_ap_capabilities.max_total_number_of_vids",
12039 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12041 { &hf_ieee1905_default_802_1q_settings_primary_vlan,
12042 { "Primary VLAN ID", "ieee1905.service_prioritization_rule.primary_vlan_id",
12043 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
12045 { &hf_ieee1905_default_802_1q_settings_flags,
12046 { "Flags", "ieee1905.service_prioritization_rule.flags",
12047 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12049 { &hf_ieee1905_default_802_1q_settings_default_pcp,
12050 { "Primary PCP", "ieee1905.service_prioritization_rule.flags.primary_pcp",
12051 FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL }},
12053 { &hf_ieee1905_default_802_1q_settings_reserved,
12054 { "Reserved", "ieee1905.service_prioritization_rule.flags.reserved",
12055 FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
12057 { &hf_ieee1905_ap_radio_advanced_capa_radio_id,
12058 { "Radio Unique ID", "ieee1905.ap_advanced_capabilities.radio_id",
12059 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12061 { &hf_ieee1905_radio_advanced_capa_flags,
12062 { "AP Radio Advanced Capabilities Flags",
12063 "ieee1905.ap_advanced_capabilities.flags",
12064 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12066 { &hf_ieee1905_traffic_separation_policy_num_ssids,
12067 { "Number of SSIDs", "ieee1905.traffic_separation_policy.num_ssids",
12068 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12070 { &hf_ieee1905_traffic_separation_policy_ssid_len,
12071 { "SSID Length", "ieee1905.traffic_separation_policy.ssid_length",
12072 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12074 { &hf_ieee1905_traffic_separation_policy_ssid,
12075 { "SSID", "ieee1905.traffic_separation_policy.ssid",
12076 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12078 { &hf_ieee1905_traffic_separation_policy_vlanid,
12079 { "VLAN ID", "ieee1905.traffic_separation_policy.vlan_id",
12080 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
12082 { &hf_ieee1905_bss_config_report_radio_count,
12083 { "Radio Count", "ieee1905.bss_config_report.radio_count",
12084 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12086 { &hf_ieee1905_bss_config_report_radio_id,
12087 { "Radio ID", "ieee1905.bss_config_report.radio_id",
12088 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12090 { &hf_ieee1905_bss_config_report_flags,
12091 { "Report Flags", "ieee1905.bss_config_report.report_flags",
12092 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12094 { &hf_ieee1905_bss_config_report_backhaul_bss,
12095 { "Backhaul BSS", "ieee1905.bss_config_report.backhaul_bss",
12096 FT_BOOLEAN, 8, TFS(&tfs_not_inuse_inuse), 0x80, NULL, HFILL }},
12098 { &hf_ieee1905_bss_config_report_fronthaul_bss,
12099 { "Fronthaul BSS", "ieee1905.bss_config_report.fronthaul_bss",
12100 FT_BOOLEAN, 8, TFS(&tfs_not_inuse_inuse), 0x40, NULL, HFILL }},
12102 { &hf_ieee1905_bss_config_report_r1_disallowed_status,
12103 { "R1 Disallowed Status",
12104 "ieee1905.bss_config_report.r1_disallowed_status",
12105 FT_BOOLEAN, 8, TFS(&tfs_disallowed_allowed), 0x20, NULL, HFILL }},
12107 { &hf_ieee1905_bss_config_report_r2_disallowed_status,
12108 { "R2 Disallowed Status",
12109 "ieee1905.bss_config_report.r2_disallowed_status",
12110 FT_BOOLEAN, 8, TFS(&tfs_disallowed_allowed), 0x10, NULL, HFILL }},
12112 { &hf_ieee1905_bss_config_report_multiple_bssid_set,
12113 { "Multiple BSSID Set",
12114 "ieee1905.bss_config_report.multiple_bssid_set",
12115 FT_BOOLEAN, 8, TFS(&tfs_configured_not_configured),
12116 0x08, NULL, HFILL }},
12118 { &hf_ieee1905_bss_config_report_transmitted_bssid,
12119 { "Transmitted BSSID",
12120 "ieee1905.bss_config_report.transmitted_bssid",
12121 FT_BOOLEAN, 8, TFS(&tfs_transmitted_non_transmitted),
12122 0x04, NULL, HFILL }},
12124 { &hf_ieee1905_bss_config_report_reserved,
12125 { "Reserved", "ieee1905.bss_config_report.reserved",
12126 FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL }},
12128 { &hf_ieee1905_bss_config_report_res,
12129 { "Reserved", "ieee1905.bss_config_report.reserved",
12130 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12132 { &hf_ieee1905_bss_config_report_bss_cnt,
12133 { "BSS Count", "ieee1905.bss_config_report.bss_count",
12134 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12136 { &hf_ieee1902_bss_config_report_mac,
12137 { "Local Interface MAC addr",
12138 "ieee1905.bss_config_report.mac_addr",
12139 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12141 { &hf_ieee1902_bss_config_report_ssid_len,
12142 { "SSID Length", "ieee1905.bss_config_report.ssid_length",
12143 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12145 { &hf_ieee1905_bss_config_report_ssid,
12146 { "SSID", "ieee1905.bss_config_report.ssid",
12147 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12149 { &hf_ieee1905_bssid_tlv_bssid,
12150 { "BSSID", "ieee1905.bssid",
12151 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12153 { &hf_ieee1905_service_prio_rule_id,
12154 { "Rule Identifier", "ieee1905.service_prio_rule.id",
12155 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
12157 { &hf_ieee1905_service_prio_rule_flags,
12158 { "Flags", "ieee1905.service_prio_rule.flags",
12159 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12161 { &hf_ieee1905_service_prio_rule_add_remove_filter_bit,
12162 { "Add-Remove Filter", "ieee1905.service_prio_rule.flags.add_remove",
12163 FT_BOOLEAN, 8, TFS(&tfs_add_remove), 0x80, NULL, HFILL }},
12165 { &hf_ieee1905_service_prio_rule_flags_reserved,
12166 { "Reserved", "ieee1905.service_prio_rule.flags.reserved",
12167 FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
12170 { &hf_ieee1905_service_prio_rule_precedence,
12171 { "Rule Precedence", "ieee1905.service_prio_rule.precedence",
12172 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12174 { &hf_ieee1905_service_prio_rule_output,
12175 { "Rule Output", "ieee1905.service_prio_rule.output",
12176 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12178 { &hf_ieee1905_service_prio_match_flags,
12179 { "Match flags", "ieee1905.service_prio_rule.match_flags",
12180 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12182 { &hf_ieee1905_service_prio_rule_match_always,
12183 { "Match Always", "ieee1905.service_prio_rule.match.match_always",
12184 FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
12186 { &hf_ieee1905_service_prio_rule_match_reserved,
12187 { "Reserved", "ieee1905.service_prio_rule.match.reserved",
12188 FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL }},
12190 { &hf_ieee1905_service_prio_rule_match_up_in_qos,
12191 { "Match Up in 802.11 QoS Control",
12192 "ieee1905.service_prio_rule.match.match_up_802_11_qos",
12193 FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
12195 { &hf_ieee1905_service_prio_rule_match_up_control_match,
12196 { "UP in 802.11 QoS Control Match Sense Flag",
12197 "ieee1905.service_prio_rule.match.up_in_802_11_qos_control",
12198 FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
12200 { &hf_ieee1905_service_prio_rule_match_source_mac,
12201 { "Match Source MAC Address",
12202 "ieee1905.service_prio_rule.match.match_source_mac",
12203 FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
12205 { &hf_ieee1905_service_prio_rule_match_source_mac_sense,
12206 { "Source MAC Address Match Sense",
12207 "ieee1905.service_prio_rule.match.source_mac_address_match_sense",
12208 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
12210 { &hf_ieee1905_service_prio_rule_match_dest_mac,
12211 { "Match Destination MAC address",
12212 "ieee1905.service_prio_rule.match.match_destination_mac",
12213 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
12215 { &hf_ieee1905_service_prio_rule_match_dest_mac_sense,
12216 { "Destination MAC Address Match Sense",
12217 "ieee1905.service_prio_rule.match.destination_mac_address_match_sense",
12218 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
12220 { &hf_ieee1905_service_prio_rule_up_control,
12221 { "UP in 802.11 QoS Control",
12222 "ieee1905.service_prio_rule.up_in_802_11_qos_control",
12223 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12225 { &hf_ieee1905_service_prio_rule_source_mac,
12226 { "Source MAC Address", "ieee1905.service_prio_rule.source_mac_addr",
12227 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12229 { &hf_ieee1905_service_prio_rule_dest_mac,
12230 { "Destination MAC Address", "ieee1905.service_prio_rule.destination_mac_addr",
12231 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12233 { &hf_ieee1905_dscp_mapping_table_val,
12234 { "PCP Value", "ieee1905.dscp_mapping_table.pcp_value",
12235 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12237 { &hf_ieee1905_r2_error_reason_code,
12238 { "Reason Code", "ieee1905.profile_2_error.reason_code",
12239 FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(r2_error_code_rvals),
12240 0, NULL, HFILL }},
12242 { &hf_ieee1905_r2_error_bssid,
12243 { "BSSID", "ieee1905.profile_2_error.bssid",
12244 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12246 { &hf_ieee1905_ap_radio_advance_capa_backhaul_bss_traffic_sep,
12247 { "Traffic Separation on combined fronthaul and R1-only backhaul",
12248 "ieee1905.ap_advanced_capabilities.traffic_sep_on_combined_fronthaul_and_r1_only_backhaul",
12249 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
12250 0x80, NULL, HFILL }},
12252 { &hf_ieee1905_ap_radio_advance_capa_combined_r1_r2_backhaul,
12253 { "Traffic Separation on combined R1 and R2 and above backhaul",
12254 "ieee1905.ap_advanced_capabilities.traffic_sep_on_combined_r1_and_r2_and_backhaul",
12255 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported),
12256 0x40, NULL, HFILL }},
12258 { &hf_ieee1905_ap_radio_advance_capa_reserved,
12259 { "Reserved", "ieee1905.ap_advanced_capabilities.reserved",
12260 FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL }},
12262 { &hf_ieee1905_assoc_status_notif_num_bssid,
12263 { "Number of BSSIDs",
12264 "ieee1905.association_status_notification.num_bssids",
12265 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12267 { &hf_ieee1905_assoc_status_notif_bssid,
12268 { "BSSID of operated BSS",
12269 "ieee1905.associated_status_notification.bssid_of_operated_bss",
12270 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12272 { &hf_ieee1905_assoc_status_notif_status,
12273 { "Status", "ieee1905.associated_status_notification.status",
12274 FT_UINT8, BASE_DEC | BASE_RANGE_STRING,
12275 RVALS(assoc_status_notif_status_rvals), 0x0, NULL, HFILL }},
12277 { &hf_ieee1905_source_info_mac_addr,
12278 { "Tunneled Source MAC Address",
12279 "ieee1905.source_info.tunneled_source_mac_address",
12280 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12282 { &hf_ieee1905_tunneled_message_type,
12283 { "Tunneled protocol payload type",
12284 "ieee1905.tunneled_message_type.tunneled_payload_type",
12285 FT_UINT8, BASE_DEC | BASE_RANGE_STRING,
12286 RVALS(tunneled_message_type_rvals), 0x0, NULL, HFILL }},
12288 { &hf_ieee1905_tunneled_data,
12289 { "Tunneled protocol payload",
12290 "ieee1905.tunneled.tunneled_protocol_payload",
12291 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12293 { &hf_ieee1905_status_code_status,
12294 { "Status Code", "ieee1905.status_code.status_code",
12295 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_status_code_ext, 0,
12296 NULL, HFILL }},
12298 { &hf_ieee1905_disassociation_reason_code,
12299 { "Reason Code", "ieee1905.disassociation_reason_code.reason_code",
12300 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_reason_code_ext, 0,
12301 NULL, HFILL }},
12303 { &hf_ieee1905_backhaul_sta_radio_id,
12304 { "Radio ID", "ieee1905.backhaul_sta_radio_capabilities.radio_id",
12305 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12307 { &hf_ieee1905_backhaul_sta_radio_capabilities,
12308 { "Flags", "ieee1905.backhaul_sta_radio_capabilities.flags",
12309 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12311 { &hf_ieee1905_backhaul_sta_radio_capa_mac_included,
12312 { "MAC address included",
12313 "ieee1905.backhaul_sta_radio_capabilities.mac_address_included",
12314 FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
12316 { &hf_ieee1905_backhaul_sta_radio_capa_reserved,
12317 { "Reserved", "ieee1905.backhaul_sta_radio_capabilities.reserved",
12318 FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
12320 { &hf_ieee1905_backhaul_sta_addr,
12321 { "Backhaul STA MAC address",
12322 "ieee1905.backhaul_sta_radio_capabilities.backhaul_sta_mac_address",
12323 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12325 { &hf_ieee1905_akm_backhaul_suite_oui,
12326 { "Backhaul Suite OUI",
12327 "ieee1905.akm_suite_capabilities.backhaul.backhaul_akm_suite_oui",
12328 FT_UINT24, BASE_OUI, NULL, 0, NULL, HFILL }},
12330 { &hf_ieee1905_akm_backhaul_suite_type,
12331 { "Backhaul AKM Suite type",
12332 "ieee1905.akm_suite_capabilities.backhaul_akm_suite_type",
12333 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12335 { &hf_ieee1905_backhaul_akm_suite_capa_count,
12336 { "Backhaul AKM Suite count",
12337 "ieee1905.akm_suite_capabilities.backhaul_akm_suite_count",
12338 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12340 { &hf_ieee1905_akm_fronthaul_suite_oui,
12341 { "Fronthaul Suite OUI",
12342 "ieee1905.akm_suite_capabilities.backhaul.fronthaul_akm_suite_oui",
12343 FT_UINT24, BASE_OUI, NULL, 0, NULL, HFILL }},
12345 { &hf_ieee1905_akm_fronthaul_suite_type,
12346 { "Fronthaul AKM Suite type",
12347 "ieee1905.akm_suite_capabilities.fronthaul_akm_suite_type",
12348 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12350 { &hf_ieee1905_fronthaul_akm_suite_capa_count,
12351 { "Fronthaul AKM Suite count",
12352 "ieee1905.akm_suite_capabilities.fronthaul_akm_suite_count",
12353 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12355 { &hf_ieee1905_encap_dpp_flags,
12356 { "Flags", "ieee1905.1905_encap_dpp.flags",
12357 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12359 { &hf_ieee1905_dpp_encap_enrollee_mac_present,
12360 { "Enrollee Mac Address Present",
12361 "ieee1905.1905_encap_dpp.flags.enrollee_mac_address_present",
12362 FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
12364 { &hf_ieee1905_dpp_encap_reserved,
12365 { "Reserved",
12366 "ieee1905.1905_encap_dpp.flags.reserved",
12367 FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
12369 { &hf_ieee1905_dpp_encap_frame_type_flag,
12370 { "DPP Frame Indicator",
12371 "ieee1905.1905_encap_dpp.flags.dpp_frame_indicator",
12372 FT_BOOLEAN, 8, TFS(&tfs_dpp_frame_indicator), 0x20, NULL, HFILL }},
12374 { &hf_ieee1905_dpp_encap_reserved2,
12375 { "Reserved", "ieee1905.1905_encap_dpp.flags.reserved2",
12376 FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
12378 { &hf_ieee1905_encap_dpp_sta_mac,
12379 { "Destination STA MAC address",
12380 "ieee1905.1905_encap_dpp.destination_sta_mac_address",
12381 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12383 { &hf_ieee1905_dpp_encap_frame_type,
12384 { "Frame Type", "ieee1905.1905_encap_dpp.frame_type",
12385 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12387 { &hf_ieee1905_dpp_encap_frame_length,
12388 { "Frame Length", "ieee1905.1905_encap_dpp.frame_length",
12389 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12391 { &hf_ieee1905_dpp_encap_dpp_oui,
12392 { "OUI", "ieee1905.1905_encap_dpp.oui",
12393 FT_UINT24, BASE_OUI, NULL, 0, NULL, HFILL }},
12395 { &hf_ieee1905_dpp_encap_public_action,
12396 { "Public Action", "ieee1905.1905_encap_dpp.public_action",
12397 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ff_pa_action_codes_ext, 0,
12398 NULL, HFILL }},
12400 { &hf_ieee1905_dpp_encap_dpp_subtype,
12401 { "WFA Subtype", "ieee1905.1905_encap_dpp.subtype",
12402 FT_UINT8, BASE_DEC, VALS(wfa_subtype_vals), 0,
12403 NULL, HFILL }},
12405 { &hf_ieee1905_dpp_bootstrapping_uri_radio_id,
12406 { "Radio ID", "ieee1905.dpp_bootstrapping_uri_notification.radio_id",
12407 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12409 { &hf_ieee1905_dpp_bootstrapping_uri_local_mac_addr,
12410 { "MAC Address of Local Interface",
12411 "ieee1905.dpp_bootstrapping_uri_notification.mac_addr_local_intf",
12412 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12414 { &hf_ieee1905_dpp_bootstrapping_uri_bsta_mac_addr,
12415 { "MAC Address of bSTA",
12416 "ieee1905.dpp_bootstrapping_uri_notification.mac_addr_bsta",
12417 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12419 { &hf_ieee1905_dpp_bootstrapping_uri_received,
12420 { "DPP Bootstrapping URI",
12421 "ieee1905.dpp_bootstrapping_uri_notification.dpp_bootstrapping_uri",
12422 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12424 { &hf_ieee1905_dpp_advertise_cce_flag,
12425 { "Advertise CCE", "ieee1905.dpp_advertise_cce.flag",
12426 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
12428 { &hf_ieee1905_dpp_chirp_value_flags,
12429 { "Chirp Value Flags", "ieee1905.dpp_chirp_value.flags",
12430 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12432 { &hf_ieee1905_dpp_chirp_enrollee_mac_addr_present,
12433 { "Enrollee MAC Address Present",
12434 "ieee1905.dpp_chirp_value.flags.enrollee_mac_addr_present",
12435 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x80, NULL, HFILL }},
12437 { &hf_ieee1905_dpp_chirp_hash_validity,
12438 { "Hash Validity Bit", "ieee1905.dpp_chirp_value.flags.hash_validity_bit",
12439 FT_BOOLEAN, 8, TFS(&tfs_chirp_hash_validity_bit),
12440 0x40, NULL, HFILL }},
12442 { &hf_ieee1905_dpp_chirp_reserved,
12443 { "Reserved", "ieee1905.dpp_chirp_value.flags.reserved",
12444 FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL }},
12446 { &hf_ieee1905_dpp_chirp_enrollee_mac_addr,
12447 { "Destination STA MAC Address",
12448 "ieee1905.dpp_chirp_value.dest_mac_addr",
12449 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12451 { &hf_ieee1905_dpp_chirp_value_hash_length,
12452 { "Hash Length", "ieee1905.dpp_chirp_value.hash_length",
12453 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12455 { &hf_ieee1905_dpp_chirp_value_hash_value,
12456 { "Hash Value", "ieee1905.dpp_chirp_value.hash_value",
12457 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
12459 { &hf_ieee1905_dev_inventory_lsn,
12460 { "Serial Number Length", "ieee1905.device_inventory.lsn",
12461 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12463 { &hf_ieee1905_dev_inventory_serial,
12464 { "Serial Number", "ieee1905.device_inventory.serial_number",
12465 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12467 { &hf_ieee1905_dev_inventory_lsv,
12468 { "Software Version Length", "ieee1905.device_inventory.lsv",
12469 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12471 { &hf_ieee1905_dev_inventory_sw_vers,
12472 { "Software Version", "ieee1905.device_inventory.software_version",
12473 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12475 { &hf_ieee1905_dev_inventory_lee,
12476 { "Execution Env Length", "ieee1905.device_inventory.lee",
12477 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12479 { &hf_ieee1905_dev_inventory_exec_env,
12480 { "Execution Env", "ieee1905.device_inventory.execution_env",
12481 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12483 { &hf_ieee1905_dev_inventory_num_radios,
12484 { "Number of Radios", "ieee1905.device_inventory.number_of_radios",
12485 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12487 { &hf_ieee1905_dev_inventory_radio_id,
12488 { "Radio ID", "ieee1905.device_inventory.radio_id",
12489 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12491 { &hf_ieee1905_dev_inventory_lcv,
12492 { "Chipset Vendor Length", "ieee1905.device_inventory.lcv",
12493 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12495 { &hf_ieee1905_dev_inventory_chp_ven,
12496 { "Chipset Vendor", "ieee1905.device_inventory.chipset_vendor",
12497 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12499 { &hf_ieee1905_r2_steering_req_src_bssid,
12500 { "Src BSSID", "ieee1905.r2_steering_request.src_bssid",
12501 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12503 { &hf_ieee1905_r2_steering_req_flags,
12504 { "Flags", "ieee1905.r2_steering_request.flags",
12505 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
12507 { &hf_ieee1905_r2_steering_request_mode_flag,
12508 { "Request Mode", "ieee1905.r2_steering_request.flags.request_mode",
12509 FT_BOOLEAN, 8, TFS(&tfs_ieee1905_steering_request_mode_flag),
12510 0x80, NULL, HFILL }},
12512 { &hf_ieee1905_r2_btm_disassoc_imminent_flag,
12513 { "BTM Disassociation Imminent",
12514 "ieee1905.r2_steering_request.flags.btm_disassociation_imminent",
12515 FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
12517 { &hf_ieee1905_r2_btm_abridged_flag,
12518 { "BTM Abridged", "ieee1905.r2_steering_request.flags.btm_abridged",
12519 FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
12521 { &hf_ieee1905_r2_steering_req_reserved,
12522 { "Reserved", "ieee1905.r2_steering_request.flags.reserved",
12523 FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
12525 { &hf_ieee1905_r2_steering_op_window,
12526 { "Steering Opportunity window",
12527 "ieee1905.r2_steering_request.steering_opportunity_window",
12528 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12530 { &hf_ieee1905_r2_steering_btm_dissasoc_tmr,
12531 { "BTM Disassociation Timer",
12532 "ieee1905.r2_steering_request.btm_disassociation_timer",
12533 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12535 { &hf_ieee1905_r2_steering_sta_count,
12536 { "STA List Count", "ieee1905.r2_steering_request.sta_list_count",
12537 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12539 { &hf_ieee1905_r2_steering_sta_mac,
12540 { "AMB capable STA MAC",
12541 "ieee1905.r2_steering_request.amb_capable_sta_mac",
12542 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12544 { &hf_ieee1905_r2_steering_target_count,
12545 { "Target BSSID Count",
12546 "ieee1905.r2_steering_request.target_bssid_count",
12547 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12549 { &hf_ieee1905_r2_steering_target_bssid,
12550 { "Target BSSID", "ieee1905.r2_steering_request.target_bssid",
12551 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12553 { &hf_ieee1905_r2_steering_target_op_class,
12554 { "Target Operating Class",
12555 "ieee1905.r2_steering_request.target_operating_class",
12556 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12558 { &hf_ieee1905_r2_steering_target_channel,
12559 { "Target Channel",
12560 "ieee1905.r2_steering_request.target_channel",
12561 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12563 { &hf_ieee1905_r2_steering_reason,
12564 { "Reason code", "ieee1905.r2_steering_request.reason_code",
12565 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12567 { &hf_ieee1905_metric_collection_interval,
12568 { "Collection Interval", "ieee1905.metric_collection_interval.interval",
12569 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12571 { &hf_ieee1905_max_reporting_rate,
12572 { "Maximum Reporting Rate", "ieee1905.unsuccessful_assoc.max_report_rate",
12573 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12575 { &hf_ieee1905_bss_configuration_request,
12576 { "Configuration Request Object",
12577 "ieee1905.bss_configuration_request.configuration_request_object",
12578 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12580 { &hf_ieee1905_bss_configuration_response,
12581 { "Configuration Response Object",
12582 "ieee1905.bss_configuration_response.configuration_response_object",
12583 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12585 { &hf_ieee1905_dpp_message_public_action,
12586 { "Public Action", "ieee1905.dpp_message.public_action",
12587 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ff_pa_action_codes_ext, 0,
12588 NULL, HFILL }},
12590 { &hf_ieee1905_spatial_reuse_req_radio_id,
12591 { "RUID", "ieee1905.spatial_reuse_req.ruid",
12592 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12594 { &hf_ieee1905_spatial_reuse_color_flags,
12595 { "Spatial Reuse Color Flags",
12596 "ieee1905.spatial_reuse_req.color_flags",
12597 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12599 { &hf_ieee1905_spatial_reuse_reserved,
12600 { "Reserved", "ieee1905.spatial_reuse_req.reserved1",
12601 FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL }},
12603 { &hf_ieee1905_spatial_reuse_bss_color,
12604 { "BSS Color", "ieee1905.spatial_reuse_req.bss_color",
12605 FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL }},
12607 { &hf_ieee1905_spatial_reuse_hesiga_flags,
12608 { "Spatial Reuse Misc Flags", "ieee1905.spatial_reuse_req.misc_flags",
12609 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12611 { &hf_ieee1905_spatial_reuse_reserved2,
12612 { "Reserved", "ieee1905.spatial_reuse_req.reserved2",
12613 FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL }},
12615 { &hf_ieee1905_spatial_reuse_hesiga_value15_allowed,
12616 { "HESIGA Spatial reuse value15 allowed",
12617 "ieee1905.spatial_reuse_req.hesiga_spatial_reuse_value15_allowed",
12618 FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
12620 { &hf_ieee1905_spatial_reuse_srg_info_valid,
12621 { "SRG Information Valid",
12622 "ieee1905.spatial_reuse_req.srg_information_valid",
12623 FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
12625 { &hf_ieee1905_spatial_reuse_non_srg_offset_valid,
12626 { "Non-SRG Offset Valid",
12627 "ieee1905.spatial_reuse_req.non_srg_offset_valid",
12628 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
12630 { &hf_ieee1905_spatial_reuse_reserved3,
12631 { "Reserved", "ieee1905.spatial_reuse_req.reserved3",
12632 FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL }},
12634 { &hf_ieee1905_spatial_reuse_psr_disallowed,
12635 { "PSR Disallowed", "ieee1905.spatial_reuse_req.psr_disallowed",
12636 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
12638 { &hf_ieee1905_spatial_reuse_non_srg_obsspd_max_offset,
12639 { "Non-SRG OBSSPD Max Offset",
12640 "ieee1905.spatial_reuse_req.non_srg_obsspd_max_offset",
12641 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12643 { &hf_ieee1905_spatial_reuse_not_valid1,
12644 { "Not Valid",
12645 "ieee1905.spatial_reuse_req.not_valid_1",
12646 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12648 { &hf_ieee1905_spatial_reuse_srg_obsspd_min_offset,
12649 { "SRG OBSSPD Min Offset",
12650 "ieee1905.spatial_reuse_req.srg_obsspd_min_offset",
12651 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12653 { &hf_ieee1905_spatial_reuse_srg_obsspd_max_offset,
12654 { "SRG OBSSPD Max Offset",
12655 "ieee1905.spatial_reuse_req.srg_obsspd_max_offset",
12656 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12658 { &hf_ieee1905_spatial_reuse_srg_bss_color_bitmap,
12659 { "SRG BSS Color Bitmap",
12660 "ieee1905.spatial_reuse_req.srg_bss_color_bitmap",
12661 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12663 { &hf_ieee1905_spatial_reuse_srg_partial_bssid_bitmap,
12664 { "SRG Partial BSSID Bitmap",
12665 "ieee1905.spatial_reuse_req.srg_partial_bssid_bitmap",
12666 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12668 { &hf_ieee1905_spatial_reuse_not_valid2,
12669 { "Not Valid",
12670 "ieee1905.spatial_reuse_req.not_valid_2",
12671 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12673 { &hf_ieee1905_spatial_reuse_not_valid3,
12674 { "Not Valid",
12675 "ieee1905.spatial_reuse_req.not_valid_3",
12676 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12678 { &hf_ieee1905_spatial_reuse_not_valid4,
12679 { "Not Valid",
12680 "ieee1905.spatial_reuse_req.not_valid_4",
12681 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12683 { &hf_ieee1905_spatial_reuse_not_valid5,
12684 { "Not Valid",
12685 "ieee1905.spatial_reuse_req.not_valid_5",
12686 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12688 { &hf_ieee1905_spatial_reuse_reserved4,
12689 { "Reserved",
12690 "ieee1905.spatial_reuse_req.reserved4",
12691 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12693 { &hf_ieee1905_spatial_reuse_rep_radio_id,
12694 { "RUID", "ieee1905.spatial_reuse_rep.ruid",
12695 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12697 { &hf_ieee1905_spatial_reuse_rep_color_flags,
12698 { "Spatial Reuse Color Flags",
12699 "ieee1905.spatial_reuse_rep.color_flags",
12700 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12702 { &hf_ieee1905_spatial_reuse_rep_reserved,
12703 { "Reserved", "ieee1905.spatial_reuse_rep.reserved1",
12704 FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL }},
12706 { &hf_ieee1905_spatial_reuse_rep_partial_bss_color,
12707 { "Partial BSS Color", "ieee1905.spatial_reuse_rep.partial_bss_color",
12708 FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL }},
12710 { &hf_ieee1905_spatial_reuse_rep_bss_color,
12711 { "BSS Color", "ieee1905.spatial_reuse_rep.bss_color",
12712 FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL }},
12714 { &hf_ieee1905_spatial_reuse_rep_hesiga_flags,
12715 { "Spatial Reuse Misc Flags", "ieee1905.spatial_reuse_rep.misc_flags",
12716 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12718 { &hf_ieee1905_spatial_reuse_rep_reserved2,
12719 { "Reserved", "ieee1905.spatial_reuse_rep.reserved2",
12720 FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL }},
12722 { &hf_ieee1905_spatial_reuse_rep_hesiga_value15_allowed,
12723 { "HESIGA Spatial reuse value15 allowed",
12724 "ieee1905.spatial_reuse_rep.hesiga_spatial_reuse_value15_allowed",
12725 FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
12727 { &hf_ieee1905_spatial_reuse_rep_srg_info_valid,
12728 { "SRG Information Valid",
12729 "ieee1905.spatial_reuse_rep.srg_information_valid",
12730 FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
12732 { &hf_ieee1905_spatial_reuse_rep_non_srg_offset_valid,
12733 { "Non-SRG Offset Valid",
12734 "ieee1905.spatial_reuse_rep.non_srg_offset_valid",
12735 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
12737 { &hf_ieee1905_spatial_reuse_rep_reserved3,
12738 { "Reserved", "ieee1905.spatial_reuse_rep.reserved3",
12739 FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL }},
12741 { &hf_ieee1905_spatial_reuse_rep_psr_disallowed,
12742 { "PSR Disallowed", "ieee1905.spatial_reuse_rep.psr_disallowed",
12743 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
12745 { &hf_ieee1905_spatial_reuse_rep_non_srg_obsspd_max_offset,
12746 { "Non-SRG OBSSPD Max Offset",
12747 "ieee1905.spatial_reuse_rep.non_srg_obsspd_max_offset",
12748 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12750 { &hf_ieee1905_spatial_reuse_rep_not_valid1,
12751 { "Not Valid",
12752 "ieee1905.spatial_reuse_rep.not_valid_1",
12753 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12755 { &hf_ieee1905_spatial_reuse_rep_srg_obsspd_min_offset,
12756 { "SRG OBSSPD Min Offset",
12757 "ieee1905.spatial_reuse_rep.srg_obsspd_min_offset",
12758 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12760 { &hf_ieee1905_spatial_reuse_rep_srg_obsspd_max_offset,
12761 { "SRG OBSSPD Max Offset",
12762 "ieee1905.spatial_reuse_rep.srg_obsspd_max_offset",
12763 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12765 { &hf_ieee1905_spatial_reuse_rep_srg_bss_color_bitmap,
12766 { "SRG BSS Color Bitmap",
12767 "ieee1905.spatial_reuse_rep.srg_bss_color_bitmap",
12768 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12770 { &hf_ieee1905_spatial_reuse_rep_srg_partial_bssid_bitmap,
12771 { "SRG Partial BSSID Bitmap",
12772 "ieee1905.spatial_reuse_rep.srg_partial_bssid_bitmap",
12773 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12775 { &hf_ieee1905_spatial_reuse_rep_not_valid2,
12776 { "Not Valid",
12777 "ieee1905.spatial_reuse_rep.not_valid_2",
12778 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12780 { &hf_ieee1905_spatial_reuse_rep_not_valid3,
12781 { "Not Valid",
12782 "ieee1905.spatial_reuse_rep.not_valid_3",
12783 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12785 { &hf_ieee1905_spatial_reuse_rep_not_valid4,
12786 { "Not Valid",
12787 "ieee1905.spatial_reuse_rep.not_valid_4",
12788 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12790 { &hf_ieee1905_spatial_reuse_rep_not_valid5,
12791 { "Not Valid",
12792 "ieee1905.spatial_reuse_rep.not_valid_5",
12793 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12795 { &hf_ieee1905_spatial_reuse_rep_nbor_bss_color_bitmap,
12796 { "Neighbor BSS Color In Use Bitmap",
12797 "ieee1905.spatial_reuse_rep.neighbor_bss_color_in_use_bitmap",
12798 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12800 { &hf_ieee1905_spatial_reuse_rep_reserved4,
12801 { "Reserved", "ieee1905.spatial_reuse_rep.reserved4",
12802 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12804 { &hf_ieee1905_spatial_reuse_config_radio_id,
12805 { "RUID", "ieee1905.spatial_reuse_config_response.ruid",
12806 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12808 { &hf_ieee1905_spatial_reuse_config_response,
12809 { "Response Code",
12810 "ieee1905.spatial_reuse_config_response.response_code",
12811 FT_UINT8, BASE_DEC|BASE_RANGE_STRING,
12812 RVALS(spatial_reuse_response_rvals), 0x0, NULL, HFILL }},
12814 { &hf_ieee1905_qos_mgmt_policy_mscs_disallowed,
12815 { "Num STAs MSCS disallowed",
12816 "ieee1905.qos_mgmt_policy.num_stas_mscs_disallowed",
12817 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12819 { &hf_ieee1905_qos_mgmt_mscs_disallow_sta,
12820 { "MAC Addr of MSCS Disallowed STA",
12821 "ieee1905.qos_mgmt_policy.mac_addr_mscs_disallowed_sta",
12822 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12824 { &hf_ieee1905_qos_mgmt_policy_scs_disallowed,
12825 { "Num STAs SCS disallowed",
12826 "ieee1905.qos_mgmt_policy.num_stas_scs_disallowed",
12827 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12829 { &hf_ieee1905_qos_mgmt_scs_disallow_sta,
12830 { "MAC Addr of SCS Disallowed STA",
12831 "ieee1905.qos_mgmt_policy.mac_addr_scs_disallowed_sta",
12832 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
12834 { &hf_ieee1905_qos_mgmt_desc_qmid,
12835 { "QMID", "ieee1905.qos_mgmt_desc.qmid",
12836 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12838 { &hf_ieee1905_qos_mgmt_desc_bssid,
12839 { "BSSID", "ieee1905.qos_mgmt_desc.bssid",
12840 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12842 { &hf_ieee1905_qos_mgmt_desc_client_mac,
12843 { "Client MAC", "ieee1905.qos_mgmt_desc.client_mac",
12844 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12846 { &hf_ieee1905_controller_capa_flags,
12847 { "Controller Capability Flags",
12848 "ieee1905.controller_capa.flags",
12849 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12851 { &hf_ieee1905_controller_capa_reserved,
12852 { "Reserved",
12853 "ieee1905.controller_capa.reserved",
12854 FT_BOOLEAN, 8, NULL, 0x3f, NULL, HFILL }},
12856 { &hf_ieee1905_controller_capa_early_ap_capa,
12857 { "Early AP Capability",
12858 "ieee1905.controller_capa.early_ap_capa",
12859 FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
12861 { &hf_ieee1905_controller_capa_kbmb_counter,
12862 { "KiBMiB Counter",
12863 "ieee1905.controller_capa.kbmb_counter",
12864 FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
12866 { &hf_ieee1905_wifi_7_agent_capabilities_max_num_mlds,
12867 { "Max number of MLDs", "ieee1905.wifi_7_agent_capabilities.max_num_mlds",
12868 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12870 { &hf_ieee1905_wifi_7_agent_capabilities_flags,
12871 { "Flags", "ieee1905.wifi_7_agent_capabilities.flags",
12872 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12874 { &hf_ieee1905_wifi_7_agent_capabilities_flags_ap_max_links,
12875 { "AP Maximum links", "ieee1905.wifi_7_agent_capabilities.flags.max_links_ap",
12876 FT_UINT16, BASE_HEX, NULL, 0xf000, NULL, HFILL }},
12878 { &hf_ieee1905_wifi_7_agent_capabilities_flags_sta_max_links,
12879 { "STA Maximum links", "ieee1905.wifi_7_agent_capabilities.flags.max_links_sta",
12880 FT_UINT16, BASE_HEX, NULL, 0x0f00, NULL, HFILL }},
12882 { &hf_ieee1905_wifi_7_agent_capabilities_flags_ttl_mapping_cap,
12883 { "TID-to-Link mapping capability", "ieee1905.wifi_7_agent_capabilities.flags.tid_to_link_mapping_capability",
12884 FT_UINT16, BASE_HEX, VALS(tid_to_link_mapping_capability_vals), 0x00c0, NULL, HFILL }},
12886 { &hf_ieee1905_wifi_7_agent_capabilities_flags_reserved,
12887 { "Reserved", "ieee1905.wifi_7_agent_capabilities.flags.reserved",
12888 FT_UINT16, BASE_HEX, NULL, 0x003f, NULL, HFILL }},
12890 { &hf_ieee1905_wifi_7_agent_capabilities_reserved,
12891 { "Reserved", "ieee1905.wifi_7_agent_capabilities.reserved",
12892 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12894 { &hf_ieee1905_wifi_7_agent_capabilities_radio_num,
12895 { "Number of radios", "ieee1905.wifi_7_agent_capabilities.num_radios",
12896 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12898 { &hf_ieee1905_wifi_7_agent_capabilities_radio_id,
12899 { "Radio Unique ID", "ieee1905.wifi_7_agent_capabilities.radio_id",
12900 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12902 { &hf_ieee1905_wifi_7_agent_capabilities_radio_reserved,
12903 { "Reserved", "ieee1905.wifi_7_agent_capabilities.radio_reserved",
12904 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12906 { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags,
12907 { "Flags", "ieee1905.wifi_7_agent_capabilities.radio_flags",
12908 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12910 { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_str_support,
12911 { "AP STR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.ap_str_support",
12912 FT_UINT16, BASE_DEC, NULL, 0x8000, NULL, HFILL }},
12914 { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_nstr_support,
12915 { "AP NSTR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.ap_nstr_support",
12916 FT_UINT16, BASE_DEC, NULL, 0x4000, NULL, HFILL }},
12918 { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_emlsr_support,
12919 { "AP EMLSR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.ap_emlsr_support",
12920 FT_UINT16, BASE_DEC, NULL, 0x2000, NULL, HFILL }},
12922 { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_ap_emlmr_support,
12923 { "AP EMLMR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.ap_emlmr_support",
12924 FT_UINT16, BASE_DEC, NULL, 0x1000, NULL, HFILL }},
12926 { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_reserved1,
12927 { "Reserved", "ieee1905.wifi_7_agent_capabilities.radio_flags.reserved1",
12928 FT_UINT16, BASE_HEX, NULL, 0x0f00, NULL, HFILL }},
12930 { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_str_support,
12931 { "bSTA STR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.bsta_str_support",
12932 FT_UINT16, BASE_DEC, NULL, 0x0080, NULL, HFILL }},
12934 { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_nstr_support,
12935 { "bSTA NSTR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.bsta_nstr_support",
12936 FT_UINT16, BASE_DEC, NULL, 0x0040, NULL, HFILL }},
12938 { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_emlsr_support,
12939 { "bSTA EMLSR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags_bsta_emlsr_support",
12940 FT_UINT16, BASE_DEC, NULL, 0x0020, NULL, HFILL }},
12942 { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_bsta_emlmr_support,
12943 { "bSTA EMLMR Support", "ieee1905.wifi_7_agent_capabilities.radio_flags.bsta_emlmr_support",
12944 FT_UINT16, BASE_DEC, NULL, 0x0010, NULL, HFILL }},
12946 { &hf_ieee1905_wifi_7_agent_capabilities_radio_flags_reserved2,
12947 { "Reserved", "ieee1905.wifi_7_agent_capabilities.radio_flags.reserved2",
12948 FT_UINT16, BASE_HEX, NULL, 0x000f, NULL, HFILL }},
12950 { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_str_records,
12951 { "Number of AP STR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_ap_str_records",
12952 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12954 { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_nstr_records,
12955 { "Number of AP NSTR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_ap_nstr_records",
12956 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12958 { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_emlsr_records,
12959 { "Number of AP EMLSR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_ap_emlsr_records",
12960 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12962 { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_ap_emlmr_records,
12963 { "Number of AP EMLMR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_ap_emlmr_records",
12964 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12966 { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_str_records,
12967 { "Number of bSTA STR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_bsta_str_records",
12968 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12970 { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_nstr_records,
12971 { "Number of bSTA NSTR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_bsta_nstr_records",
12972 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12974 { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_emlsr_records,
12975 { "Number of bSTA EMLSR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_bsta_emlsr_records",
12976 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12978 { &hf_ieee1905_wifi_7_agent_capabilities_radio_num_bsta_emlmr_records,
12979 { "Number of bSTA EMLMR Records", "ieee1905.wifi_7_agent_capabilities.radio_num_bsta_emlmr_records",
12980 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
12982 { &hf_ieee1905_wifi_7_agent_capabilities_radio_record_id,
12983 { "Radio Unique ID", "ieee1905.wifi_7_agent_capabilities.radio_record_id",
12984 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
12986 { &hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags,
12987 { "Flags", "ieee1905.wifi_7_agent_capabilities.radio_record_flags",
12988 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
12990 { &hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags_freq_separation,
12991 { "Freq separation", "ieee1905.wifi_7_agent_capabilities.radio_record_flags.freq_separation",
12992 FT_UINT8, BASE_DEC, NULL, 0xf8, NULL, HFILL }},
12994 { &hf_ieee1905_wifi_7_agent_capabilities_radio_record_flags_reserved,
12995 { "Reserved", "ieee1905.wifi_7_agent_capabilities.radio_record_flags.reserved",
12996 FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL }},
12998 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_num,
12999 { "Number of AP MLDs", "ieee1905.agent_ap_mld_configuration.ap_mld_num",
13000 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13002 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags,
13003 { "Flags", "ieee1905.agent_ap_mld_configuration.flags",
13004 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13006 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags_ap_mld_mac_addr_valid,
13007 { "AP MLD MAC Addr Valid", "ieee1905.agent_ap_mld_configuration.flags.ap_mld_mac_addr_valid",
13008 FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13010 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags_reserved,
13011 { "Reserved", "ieee1905.agent_ap_mld_configuration.flags.reserved",
13012 FT_UINT8, BASE_DEC, NULL, 0x7f, NULL, HFILL }},
13014 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_ssid_len,
13015 { "SSID Length", "ieee1905.agent_ap_mld_configuration.ssid_length",
13016 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13018 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_ssid,
13019 { "SSID", "ieee1905.agent_ap_mld_configuration.ssid",
13020 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
13022 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_mac_addr,
13023 { "AP MLD MAC Addr", "ieee1905.agent_ap_mld_configuration.ap_mld_mac_addr",
13024 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13026 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2,
13027 { "Flags2", "ieee1905.agent_ap_mld_configuration.flags2",
13028 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13030 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_str,
13031 { "STR", "ieee1905.agent_ap_mld_configuration.flags2.str",
13032 FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13034 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_nstr,
13035 { "NSTR", "ieee1905.agent_ap_mld_configuration.flags2.nstr",
13036 FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13038 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_emlsr,
13039 { "EMLSR", "ieee1905.agent_ap_mld_configuration.flags2.emlsr",
13040 FT_UINT8, BASE_DEC, NULL, 0x20, NULL, HFILL }},
13042 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_emlmr,
13043 { "EMLMR", "ieee1905.agent_ap_mld_configuration.flags2.emlmr",
13044 FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL }},
13046 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_flags2_reserved,
13047 { "Reserved", "ieee1905.agent_ap_mld_configuration.flags2.reserved",
13048 FT_UINT8, BASE_HEX, NULL, 0x0f, NULL, HFILL }},
13050 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_reserved,
13051 { "Reserved", "ieee1905.agent_ap_mld_configuration.reserved",
13052 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13054 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_num,
13055 { "Number of Affiliated APs", "ieee1905.agent_ap_mld_configuration.ap_mld_affiliated_ap_num",
13056 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13058 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags,
13059 { "Flags", "ieee1905.agent_ap_mld_configuration.affiliated_ap_flags",
13060 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13062 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_affiliated_ap_mac_addr_valid,
13063 { "Affiliated AP MAC Addr Valid", "ieee1905.agent_ap_mld_configuration.affiliated_ap_flags.affiliated_ap_mac_addr_valid",
13064 FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13066 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_link_id_valid,
13067 { "Link ID Valid", "ieee1905.agent_ap_mld_configuration.affiliated_ap_flags.link_id_valid",
13068 FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13070 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags_reserved,
13071 { "Reserved", "ieee1905.agent_ap_mld_configuration.affiliated_ap_flags.reserved",
13072 FT_UINT8, BASE_HEX, NULL, 0x3f, NULL, HFILL }},
13074 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_radio_id,
13075 { "Radio Unique ID", "ieee1905.agent_ap_mld_configuration.affiliated_ap_radio_id",
13076 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13078 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_mac_addr,
13079 { "Affiliated AP MAC Addr", "ieee1905.agent_ap_mld_configuration.affiliated_ap_mac_addr",
13080 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13082 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_link_id,
13083 { "Link ID", "ieee1905.agent_ap_mld_configuration.ap_mld_affiliated_ap_link_id",
13084 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13086 { &hf_ieee1905_agent_ap_mld_configuration_ap_mld_affiliated_ap_reserved,
13087 { "Reserved", "ieee1905.agent_ap_mld_configuration.ap_mld_affiliated_ap_reserved",
13088 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13090 { &hf_ieee1905_backhaul_sta_mld_configuration_flags,
13091 { "Flags", "ieee1905.backhaul_sta_mld_configuration.flags",
13092 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13094 { &hf_ieee1905_backhaul_sta_mld_configuration_flags_bsta_mld_mac_addr_valid,
13095 { "bSTA MLD MAC Addr Valid", "ieee1905.backhaul_sta_mld_configuration.flags.bsta_mld_mac_addr_valid",
13096 FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13098 { &hf_ieee1905_backhaul_sta_mld_configuration_flags_ap_mld_mac_addr_valid,
13099 { "AP MLD MAC Addr Valid", "ieee1905.backhaul_sta_mld_configuration.flags.ap_mld_mac_addr_valid",
13100 FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13102 { &hf_ieee1905_backhaul_sta_mld_configuration_flags_reserved,
13103 { "Reserved", "ieee1905.backhaul_sta_mld_configuration.flags.reserved",
13104 FT_UINT8, BASE_HEX, NULL, 0x3f, NULL, HFILL }},
13106 { &hf_ieee1905_backhaul_sta_mld_configuration_bsta_mld_mac_addr,
13107 { "bSTA MLD MAC Addr", "ieee1905.backhaul_sta_mld_configuration.bsta_mld_mac_addr",
13108 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13110 { &hf_ieee1905_backhaul_sta_mld_configuration_ap_mld_mac_addr,
13111 { "AP MLD MAC Addr", "ieee1905.backhaul_sta_mld_configuration.ap_mld_mac_addr",
13112 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13114 { &hf_ieee1905_backhaul_sta_mld_configuration_flags2,
13115 { "Flags2", "ieee1905.backhaul_sta_mld_configuration.flags2",
13116 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13118 { &hf_ieee1905_backhaul_sta_mld_configuration_flags2_str,
13119 { "STR", "ieee1905.backhaul_sta_mld_configuration.flags2.str",
13120 FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13122 { &hf_ieee1905_backhaul_sta_mld_configuration_flags2_nstr,
13123 { "NSTR", "ieee1905.backhaul_sta_mld_configuration.flags2.nstr",
13124 FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13126 { &hf_ieee1905_backhaul_sta_mld_configuration_flags2_emlsr,
13127 { "EMLSR", "ieee1905.backhaul_sta_mld_configuration.flags2.emlsr",
13128 FT_UINT8, BASE_DEC, NULL, 0x20, NULL, HFILL }},
13130 { &hf_ieee1905_backhaul_sta_mld_configuration_flags2_emlmr,
13131 { "EMLMR", "ieee1905.backhaul_sta_mld_configuration.flags2.emlmr",
13132 FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL }},
13134 { &hf_ieee1905_backhaul_sta_mld_configuration_flags2_reserved,
13135 { "Reserved", "ieee1905.backhaul_sta_mld_configuration.flags2.reserved",
13136 FT_UINT8, BASE_HEX, NULL, 0x0f, NULL, HFILL }},
13138 { &hf_ieee1905_backhaul_sta_mld_configuration_reserved,
13139 { "Reserved", "ieee1905.backhaul_sta_mld_configuration.reserved",
13140 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13142 { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_num,
13143 { "Number of Affiliated bSTAs", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_num",
13144 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13146 { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags,
13147 { "Flags", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_flags",
13148 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13150 { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags_affiliated_bsta_mac_addr_valid,
13151 { "AP MLD MAC Addr Valid", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_flags.bsta_mac_addr_valid",
13152 FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13154 { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_flags_reserved,
13155 { "Reserved", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_flags.reserved",
13156 FT_UINT8, BASE_HEX, NULL, 0x3f, NULL, HFILL }},
13158 { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_radio_id,
13159 { "Radio Unique ID", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_radio_id",
13160 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13162 { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_mac_addr,
13163 { "Affiliated bSTA MAC Addr", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_mac_addr",
13164 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13166 { &hf_ieee1905_backhaul_sta_mld_configuration_affiliated_bsta_reserved,
13167 { "Reserved", "ieee1905.backhaul_sta_mld_configuration.affiliated_bsta_reserved",
13168 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13170 { &hf_ieee1905_associated_sta_mld_configuration_sta_mld_mac_addr,
13171 { "STA MLD MAC Addr", "ieee1905.associated_sta_mld_configuration.sta_mld_mac_addr",
13172 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13174 { &hf_ieee1905_associated_sta_mld_configuration_ap_mld_mac_addr,
13175 { "AP MLD MAC Addr", "ieee1905.associated_sta_mld_configuration.ap_mld_mac_addr",
13176 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13178 { &hf_ieee1905_associated_sta_mld_configuration_flags,
13179 { "Flags", "ieee1905.associated_sta_mld_configuration.flags",
13180 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13182 { &hf_ieee1905_associated_sta_mld_configuration_flags_str,
13183 { "STR", "ieee1905.associated_sta_mld_configuration.flags.str",
13184 FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13186 { &hf_ieee1905_associated_sta_mld_configuration_flags_nstr,
13187 { "NSTR", "ieee1905.associated_sta_mld_configuration.flags.nstr",
13188 FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13190 { &hf_ieee1905_associated_sta_mld_configuration_flags_emlsr,
13191 { "EMLSR", "ieee1905.associated_sta_mld_configuration.flags.emlsr",
13192 FT_UINT8, BASE_DEC, NULL, 0x20, NULL, HFILL }},
13194 { &hf_ieee1905_associated_sta_mld_configuration_flags_emlmr,
13195 { "EMLMR", "ieee1905.associated_sta_mld_configuration.flags.emlmr",
13196 FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL }},
13198 { &hf_ieee1905_associated_sta_mld_configuration_flags_reserved,
13199 { "Reserved", "ieee1905.associated_sta_mld_configuration.flags.reserved",
13200 FT_UINT8, BASE_HEX, NULL, 0x0f, NULL, HFILL }},
13202 { &hf_ieee1905_associated_sta_mld_configuration_reserved,
13203 { "Reserved", "ieee1905.associated_sta_mld_configuration.reserved",
13204 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13206 { &hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_num,
13207 { "Number of Affiliated STAs", "ieee1905.associated_sta_mld_configuration.affiliated_sta_num",
13208 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13210 { &hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_bssid,
13211 { "BSSID", "ieee1905.associated_sta_mld_configuration.affiliated_sta_bssid",
13212 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13214 { &hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_mac_addr,
13215 { "Affiliated STA MAC Addr", "ieee1905.associated_sta_mld_configuration.affiliated_sta_mac_addr",
13216 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13218 { &hf_ieee1905_associated_sta_mld_configuration_affiliated_sta_reserved,
13219 { "Reserved", "ieee1905.associated_sta_mld_configuration.affiliated_sta_reserved",
13220 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13222 { &hf_ieee1905_affiliated_sta_metrics_sta_mac_addr,
13223 { "STA MAC Address", "ieee1905.affiliated_sta_metrics.sta_mac_addr",
13224 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13226 { &hf_ieee1905_affiliated_sta_metrics_bytes_sent,
13227 { "Bytes Sent", "ieee1905.affiliated_sta_metrics.bytes_sent",
13228 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13230 { &hf_ieee1905_affiliated_sta_metrics_bytes_rcvd,
13231 { "Bytes Received", "ieee1905.affiliated_sta_metrics.bytes_rcvd",
13232 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13234 { &hf_ieee1905_affiliated_sta_metrics_packets_sent,
13235 { "Packets Sent", "ieee1905.affiliated_sta_metrics.packets_sent",
13236 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13238 { &hf_ieee1905_affiliated_sta_metrics_packets_rcvd,
13239 { "Packets Received", "ieee1905.affiliated_sta_metrics.packets_rcvd",
13240 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13242 { &hf_ieee1905_affiliated_sta_metrics_packets_sent_errors,
13243 { "Packets Sent Errors", "ieee1905.affiliated_sta_metrics.packets_sent_errors",
13244 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13246 { &hf_ieee1905_affiliated_sta_metrics_reserved,
13247 { "Reserved", "ieee1905.affiliated_sta_metrics.reserved",
13248 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13250 { &hf_ieee1905_affiliated_ap_metrics_bssid,
13251 { "BSSID", "ieee1905.affiliated_ap_metrics.bssid",
13252 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13254 { &hf_ieee1905_affiliated_ap_metrics_packets_sent,
13255 { "Packets Sent", "ieee1905.affiliated_ap_metrics.packets_sent",
13256 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13258 { &hf_ieee1905_affiliated_ap_metrics_packets_rcvd,
13259 { "Packets Received", "ieee1905.affiliated_ap_metrics.packets_rcvd",
13260 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13262 { &hf_ieee1905_affiliated_ap_metrics_packets_sent_errors,
13263 { "Packets Sent Errors", "ieee1905.affiliated_ap_metrics.packets_sent_errors",
13264 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13266 { &hf_ieee1905_affiliated_ap_metrics_ucast_bytes_sent,
13267 { "Unicast Bytes Sent", "ieee1905.affiliated_ap_metrics.ucast_bytes_sent",
13268 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13270 { &hf_ieee1905_affiliated_ap_metrics_ucast_bytes_rcvd,
13271 { "Unicast Bytes Received", "ieee1905.affiliated_ap_metrics.ucast_bytes_rcvd",
13272 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13274 { &hf_ieee1905_affiliated_ap_metrics_mcast_bytes_sent,
13275 { "Multicast Bytes Sent", "ieee1905.affiliated_ap_metrics.mcast_bytes_sent",
13276 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13278 { &hf_ieee1905_affiliated_ap_metrics_mcast_bytes_rcvd,
13279 { "Multicast Bytes Received", "ieee1905.affiliated_ap_metrics.mcast_bytes_rcvd",
13280 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13282 { &hf_ieee1905_affiliated_ap_metrics_bcast_bytes_sent,
13283 { "Broadcast Bytes Sent", "ieee1905.affiliated_ap_metrics.bcast_bytes_sent",
13284 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13286 { &hf_ieee1905_affiliated_ap_metrics_bcast_bytes_rcvd,
13287 { "Broadcast Bytes Received", "ieee1905.affiliated_ap_metrics.bcast_bytes_rcvd",
13288 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13290 { &hf_ieee1905_affiliated_ap_metrics_reserved,
13291 { "Reserved", "ieee1905.affiliated_ap_metrics.reserved",
13292 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13294 { &hf_ieee1905_eht_operations_reserved,
13295 { "Reserved", "ieee1905.eht_operations.reserved",
13296 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13298 { &hf_ieee1905_eht_operations_radio_num,
13299 { "Number of Radios", "ieee1905.eht_operations.num_radios",
13300 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13302 { &hf_ieee1905_eht_operations_radio_id,
13303 { "Radio Unique ID", "ieee1905.eht_operations.radio_id",
13304 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
13306 { &hf_ieee1905_eht_operations_radio_bss_num,
13307 { "Number of BSS", "ieee1905.eht_operations.radio.num_bss",
13308 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13310 { &hf_ieee1905_eht_operations_radio_reserved,
13311 { "Reserved", "ieee1905.eht_operations.radio.reserved",
13312 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13314 { &hf_ieee1905_eht_operations_radio_bss_bssid,
13315 { "BSSID", "ieee1905.eht_operations.radio.bss.bssid",
13316 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
13318 { &hf_ieee1905_eht_operations_radio_bss_flags,
13319 { "Flags", "ieee1905.eht_operations.radio.bss.flags",
13320 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13322 { &hf_ieee1905_eht_operations_radio_bss_flags_eht_operation_information_valid,
13323 { "EHT Operation Information Valid", "ieee1905.eht_operations.radio.bss.flags.eht_operation_information_valid",
13324 FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13326 { &hf_ieee1905_eht_operations_radio_bss_flags_disabled_subchannel_valid,
13327 { "Disabled Subchannel Valid", "ieee1905.eht_operations.radio.bss.flags.disabled_subchannel_valid",
13328 FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL }},
13330 { &hf_ieee1905_eht_operations_radio_bss_flags_eht_default_pe_duration,
13331 { "EHT Default PE Duration", "ieee1905.eht_operations.radio.bss.flags.eht_default_pe_duration",
13332 FT_UINT8, BASE_DEC, NULL, 0x20, NULL, HFILL }},
13334 { &hf_ieee1905_eht_operations_radio_bss_flags_group_addr_bu_indication_limit,
13335 { "Group Addr BU Indication Limit", "ieee1905.eht_operations.radio.bss.flags.group_addr_bu_indication_limit",
13336 FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL }},
13338 { &hf_ieee1905_eht_operations_radio_bss_flags_group_addr_bu_indication_exponent,
13339 { "Group Addr BU Indication Exponent", "ieee1905.eht_operations.radio.bss.flags.group_addr_bu_indication_exponent",
13340 FT_UINT8, BASE_DEC, NULL, 0x0C, NULL, HFILL }},
13342 { &hf_ieee1905_eht_operations_radio_bss_flags_reserved,
13343 { "Reserved", "ieee1905.eht_operations.radio.bss.flags.reserved",
13344 FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL }},
13346 { &hf_ieee1905_eht_operations_radio_bss_basic_eht_nss_mcs_set,
13347 { "Basic EHT NSS MCS Set", "ieee1905.eht_operations.radio.bss.basic_eht_nss_mcs_set",
13348 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13350 { &hf_ieee1905_eht_operations_radio_bss_control,
13351 { "Control", "ieee1905.eht_operations.radio.bss.control",
13352 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13354 { &hf_ieee1905_eht_operations_radio_bss_ccfs0,
13355 { "CCFS0", "ieee1905.eht_operations.radio.bss.ccfs0",
13356 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13358 { &hf_ieee1905_eht_operations_radio_bss_ccfs1,
13359 { "CCFS1", "ieee1905.eht_operations.radio.bss.ccfs1",
13360 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13362 { &hf_ieee1905_eht_operations_radio_bss_disabled_subchannel_bitmap,
13363 { "Disabled Subchannel Bitmap", "ieee1905.eht_operations.radio.bss.disabled_subchannel_bitmap",
13364 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
13366 { &hf_ieee1905_eht_operations_radio_bss_reserved,
13367 { "Reserved", "ieee1905.eht_operations.radio.bss.reserved",
13368 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13370 { &hf_ieee1905_available_spectrum_inquiry_request_object,
13371 { "Object", "ieee1905.available_spectrum_inquiry_request.object",
13372 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
13374 { &hf_ieee1905_available_spectrum_inquiry_response_object,
13375 { "Object", "ieee1905.available_spectrum_inquiry_response.object",
13376 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
13378 { &hf_ieee1905_extra_tlv_data,
13379 { "Extraneous TLV data", "ieee1905.extra_tlv_data",
13380 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
13382 { &hf_ieee1905_fragments,
13383 { "IEEE1905 Message Fragments", "ieee1905.fragments",
13384 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13386 { &hf_ieee1905_fragment,
13387 { "IEEE1905 Message Fragment", "ieee1905.fragment",
13388 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13390 { &hf_ieee1905_fragment_overlap,
13391 { "IEEE1905 Message Fragment Overlap", "ieee1905.fragment.overlap",
13392 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13394 { &hf_ieee1905_fragment_overlap_conflicts,
13395 { "IEEE1905 Message Fragment Overlap Conflict",
13396 "ieee1905.fragment.overlap.conflicts",
13397 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13399 { &hf_ieee1905_fragment_multiple_tails,
13400 { "IEEE1905 Message has multiple tail fragments",
13401 "ieee1905.fragment.multiple_tails",
13402 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13404 { &hf_ieee1905_fragment_too_long_fragment,
13405 { "IEEE1905 Message Fragment too long",
13406 "ieee1905.fragment.too_long",
13407 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13409 { &hf_ieee1905_fragment_error,
13410 { "IEEE1905 Message defragmentation error",
13411 "ieee1905.fragment.error",
13412 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13414 { &hf_ieee1905_fragment_count,
13415 { "IEEE1905 Message Fragment count", "ieee1905.fragment.count",
13416 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13418 { &hf_ieee1905_fragment_reassembled_in,
13419 { "Reassembled in", "ieee1905.fragment.reassembled.in",
13420 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL }},
13422 { &hf_ieee1905_fragment_reassembled_length,
13423 { "IEEE1905 Message length", "ieee1905.fragment.reassembled.length",
13424 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
13428 static int *ett[] = {
13429 &ett_ieee1905,
13430 &ett_ieee1905_flags,
13431 &ett_ieee1905_tlv_len,
13432 &ett_tlv,
13433 &ett_device_information_list,
13434 &ett_device_information_tree,
13435 &ett_media_type,
13436 &ett_bridging_tuples_list,
13437 &ett_bridging_mac_list,
13438 &ett_non_1905_neighbor_list,
13439 &ett_1905_neighbor_list,
13440 &ett_ieee1905_neighbor_flags,
13441 &ett_media_type_list,
13442 &ett_media_item,
13443 &ett_local_interface_list,
13444 &ett_local_interface_info,
13445 &ett_ipv4_list,
13446 &ett_ipv4_info,
13447 &ett_ipv4_type_addr_list,
13448 &ett_ipv4_addr_info,
13449 &ett_ipv6_list,
13450 &ett_ipv6_info,
13451 &ett_ipv6_type_addr_list,
13452 &ett_ipv6_addr_info,
13453 &ett_push_button_phy_list,
13454 &ett_push_button_phy_info,
13455 &ett_power_off_info,
13456 &ett_power_change_list,
13457 &ett_power_change_info,
13458 &ett_power_status_list,
13459 &ett_power_status_info,
13460 &ett_l2_local_intf_list,
13461 &ett_l2_neighbor_device_info,
13462 &ett_l2_neighbor_dev_list,
13463 &ett_l2_neighbor_dev_tree,
13464 &ett_supported_service_list,
13465 &ett_searched_service_list,
13466 &ett_ap_operational_bss_list,
13467 &ett_ap_operational_bss_tree,
13468 &ett_ap_operational_bss_intf,
13469 &ett_ap_operational_bss_intf_list,
13470 &ett_ap_operational_bss_intf_tree,
13471 &ett_ieee1905_capabilities_flags,
13472 &ett_ieee1905_unsuccessful_associations,
13473 &ett_assoc_control_list,
13474 &ett_ieee1905_steering_request_flags,
13475 &ett_ieee1905_association_event_flags,
13476 &ett_client_capability_ies,
13477 &ett_radio_basic_class_list,
13478 &ett_ap_radio_basic_cap_class_tree,
13479 &ett_radio_basic_non_op_list,
13480 &ett_ht_cap_flags,
13481 &ett_vht_cap_flags,
13482 &ett_ieee1905_ap_vht_tx_mcs_set,
13483 &ett_ieee1905_ap_vht_rx_mcs_set,
13484 &ett_assoc_clients_bss_list,
13485 &ett_assoc_client_bss_tree,
13486 &ett_assoc_client_list,
13487 &ett_assoc_client_tree,
13488 &ett_channel_preference_class_list,
13489 &ett_ap_channel_preference_class_tree,
13490 &ett_channel_pref_channel_list,
13491 &ett_ieee1905_channel_prefs_flags,
13492 &ett_op_channel_report_class_tree,
13493 &ett_op_channel_report_class_list,
13494 &ett_sta_link_metrics_query_channel_list,
13495 &ett_sta_link_link_mac_addr_list,
13496 &ett_metric_reporting_policy_list,
13497 &ett_metric_reporting_policy_tree,
13498 &ett_metric_policy_flags,
13499 &ett_ap_metric_query_bssid_list,
13500 &ett_ieee1905_ap_metrics_flags,
13501 &ett_sta_list_metrics_bss_list,
13502 &ett_sta_list_metrics_bss_tree,
13503 &ett_sta_wf6_status_report_tid_list,
13504 &ett_sta_wf6_status_report_tid_tree,
13505 &ett_sta_extended_link_metrics_list,
13506 &ett_sta_extended_link_metrics_tree,
13507 &ett_ap_he_mcs_set,
13508 &ett_ap_he_cap_flags,
13509 &ett_ieee1905_ap_he_tx_mcs_set,
13510 &ett_ieee1905_ap_he_rx_mcs_set,
13511 &ett_steering_policy_disallowed_list,
13512 &ett_btm_steering_policy_disallowed_list,
13513 &ett_btm_steering_radio_list,
13514 &ett_radio_restriction_op_class_list,
13515 &ett_radio_restriction_op_class_tree,
13516 &ett_radio_restriction_channel_list,
13517 &ett_radio_restriction_channel_tree,
13518 &ett_unassoc_sta_link_metric_list,
13519 &ett_unassoc_sta_link_metric_tree,
13520 &ett_beacon_metrics_query_list,
13521 &ett_beacon_metrics_query_tree,
13522 &ett_beacon_metrics_query_channel_list,
13523 &ett_beacon_report_subelement_list,
13524 &ett_beacon_report_sub_element_tree,
13525 &ett_beacon_metrics_response_report_list,
13526 &ett_beacon_metrics_response_report_tree,
13527 &ett_ieee1905_beacon_reported_flags,
13528 &ett_channel_scan_rep_policy,
13529 &ett_channel_scan_capa_radio_list,
13530 &ett_channel_scan_capa_radio,
13531 &ett_channel_scan_capa_flags,
13532 &ett_channel_scan_capa_class_list,
13533 &ett_channel_scan_capa_class,
13534 &ett_channel_scan_capa_channels,
13535 &ett_channel_scan_request_flags,
13536 &ett_channel_scan_request_radio_list,
13537 &ett_channel_scan_request_radio,
13538 &ett_channel_scan_request_class_list,
13539 &ett_channel_scan_request_class,
13540 &ett_channel_scan_request_channels,
13541 &ett_channel_scan_result_neigh_list,
13542 &ett_channel_scan_result_neigh_flags,
13543 &ett_ap_wf6_role_list,
13544 &ett_ap_wf6_role_tree,
13545 &ett_ap_wf6_agent_role_flags,
13546 &ett_ap_wf6_supported_flags,
13547 &ett_ap_wf6_mimo_max_flags,
13548 &ett_ap_wf6_gen_flags,
13549 &ett_channel_scan_result_neigh,
13550 &ett_channel_scan_result_flags,
13551 &ett_cac_request_flags,
13552 &ett_cac_request_radio_list,
13553 &ett_cac_request_radio,
13554 &ett_cac_terminate_radio_list,
13555 &ett_cac_terminate_radio,
13556 &ett_cac_completion_radio_list,
13557 &ett_cac_completion_radio,
13558 &ett_cac_completion_radar_list,
13559 &ett_cac_completion_radar,
13560 &ett_cac_status_rpt_avail_list,
13561 &ett_cac_status_rpt_avail_chan,
13562 &ett_cac_status_rpt_non_occupy_list,
13563 &ett_cac_status_rpt_unocc_chan,
13564 &ett_cac_status_rpt_active_cac_list,
13565 &ett_cac_status_rpt_active_cac_tree,
13566 &ett_cac_capabilities_radio_list,
13567 &ett_cac_capabilities_radio_tree,
13568 &ett_cac_capabilities_type_list,
13569 &ett_cac_capabilities_type_tree,
13570 &ett_cac_capabilities_class_list,
13571 &ett_cac_capabilities_class_tree,
13572 &ett_cac_capabilities_channel_list,
13573 &ett_cac_capabilities_channel,
13574 &ett_r2_ap_capa_flags,
13575 &ett_edge_interface_list,
13576 &ett_radio_advanced_capa_flags,
13577 &ett_ap_operational_backhaul_bss_tree,
13578 &ett_ap_operational_backhaul_bss_intf_list,
13579 &ett_default_802_1q_settings_flags,
13580 &ett_traffic_separation_ssid_list,
13581 &ett_traffic_separation_ssid,
13582 &ett_bss_config_report_list,
13583 &ett_bss_config_report_tree,
13584 &ett_bss_config_report_bss_list,
13585 &ett_bss_config_report_bss_tree,
13586 &ett_bss_config_report_flags,
13587 &ett_ethernet_config_policy_list,
13588 &ett_ethernet_config_policy,
13589 &ett_ethernet_config_policy_flags,
13590 &ett_ieee1905_service_prio_rule_flags,
13591 &ett_ieee1905_service_prio_rule_match_flags,
13592 &ett_backhaul_sta_radio_capa_flags,
13593 &ett_assoc_status_notif_bssid_list,
13594 &ett_assoc_status_notif_bssid_tree,
13595 &ett_akm_suite_list,
13596 &ett_akm_suite,
13597 &ett_backhaul_akm_suite_list,
13598 &ett_backhaul_akm_suite,
13599 &ett_fronthaul_akm_suite_list,
13600 &ett_fronthaul_akm_suite,
13601 &ett_1905_encap_dpp_flags,
13602 &ett_1905_encap_dpp_classes,
13603 &ett_1905_encap_dpp_op_class_tree,
13604 &ett_1905_encap_dpp_channel_list,
13605 &ett_ieee1905_dpp_chirp,
13606 &ett_device_inventory_radio_list,
13607 &ett_device_inventory_radio_tree,
13608 &ett_r2_steering_sta_list,
13609 &ett_r2_steering_target_list,
13610 &ett_r2_steering_target,
13611 &ett_mic_group_temporal_key,
13612 &ett_ieee1905_spatial_reuse_color,
13613 &ett_ieee1905_spatial_reuse_hesiga,
13614 &ett_ieee1905_spatial_reuse_rep_color,
13615 &ett_ieee1905_spatial_reuse_rep_hesiga,
13616 &ett_qos_mgmt_policy_mscs_list,
13617 &ett_qos_mgmt_policy_scs_list,
13618 &ett_ieee1905_controller_capa,
13619 &ett_wifi_7_agent_capabilities_flags,
13620 &ett_wifi_7_agent_capabilities_radio_list,
13621 &ett_wifi_7_agent_capabilities_radio,
13622 &ett_wifi_7_agent_capabilities_radio_flags,
13623 &ett_wifi_7_agent_capabilities_radio_record_list,
13624 &ett_wifi_7_agent_capabilities_radio_record,
13625 &ett_wifi_7_agent_capabilities_radio_record_flags,
13626 &ett_agent_ap_mld_configuration_ap_mld_list,
13627 &ett_agent_ap_mld_configuration_ap_mld,
13628 &ett_agent_ap_mld_configuration_ap_mld_flags,
13629 &ett_agent_ap_mld_configuration_ap_mld_flags2,
13630 &ett_agent_ap_mld_configuration_ap_mld_affiliated_ap_list,
13631 &ett_agent_ap_mld_configuration_ap_mld_affiliated_ap,
13632 &ett_agent_ap_mld_configuration_ap_mld_affiliated_ap_flags,
13633 &ett_backhaul_sta_mld_configuration_flags,
13634 &ett_backhaul_sta_mld_configuration_flags2,
13635 &ett_backhaul_sta_mld_configuration_affiliated_bsta_list,
13636 &ett_backhaul_sta_mld_configuration_affiliated_bsta,
13637 &ett_backhaul_sta_mld_configuration_affiliated_bsta_flags,
13638 &ett_associated_sta_mld_configuration_flags,
13639 &ett_associated_sta_mld_configuration_affiliated_sta_list,
13640 &ett_associated_sta_mld_configuration_affiliated_sta,
13641 &ett_eht_operations_radio_list,
13642 &ett_eht_operations_radio,
13643 &ett_eht_operations_radio_bss_list,
13644 &ett_eht_operations_radio_bss,
13645 &ett_eht_operations_radio_bss_flags,
13646 &ett_ieee1905_fragment,
13647 &ett_ieee1905_fragments,
13650 static ei_register_info ei[] = {
13651 { &ei_ieee1905_malformed_tlv,
13652 { "ieee1905.tlv.too_short", PI_PROTOCOL, PI_WARN,
13653 "TLV is too short", EXPFILL }},
13655 { &ei_ieee1905_extraneous_tlv_data,
13656 { "ieee1905.tlv.extra_data", PI_PROTOCOL, PI_WARN,
13657 "TLV has extra data or an incorrect length", EXPFILL }},
13660 expert_module_t *expert_ieee1905 = NULL;
13662 proto_ieee1905 = proto_register_protocol("IEEE 1905.1a", "ieee1905", "ieee1905");
13664 proto_register_field_array(proto_ieee1905, hf, array_length(hf));
13665 proto_register_subtree_array(ett, array_length(ett));
13667 expert_ieee1905 = expert_register_protocol(proto_ieee1905);
13668 expert_register_field_array(expert_ieee1905, ei, array_length(ei));
13670 reassembly_table_register(&g_ieee1905_reassembly_table,
13671 &ieee1905_reassembly_table_functions);
13673 ieee1905_handle = register_dissector("ieee1905", dissect_ieee1905, proto_ieee1905);
13676 void
13677 proto_reg_handoff_ieee1905(void)
13679 dissector_add_uint("ethertype", ETHERTYPE_IEEE_1905, ieee1905_handle);
13681 eapol_handle = find_dissector("eapol");
13685 * Editor modelines - https://www.wireshark.org/tools/modelines.html
13687 * Local variables:
13688 * c-basic-offset: 4
13689 * tab-width: 8
13690 * indent-tabs-mode: nil
13691 * End:
13693 * vi: set shiftwidth=4 tabstop=8 expandtab:
13694 * :indentSize=4:tabSize=8:noTabs=true: